Clean Architecture

๊ฐ„๋‹จ ์š”์•ฝํ•œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜

!! ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์ž.

๋Œ€์ถœํ•˜๊ธฐ ์•ฑ์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์กด์žฌํ•œ๋‹ค.

  1. ๋Œ€์ถœํ•˜๊ธฐ ๋ฒ„ํŠผ

  2. ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋Œ€์ถœํ•˜๊ธฐ๋ฅผ ์‹คํ–‰

  3. ๋Œ€์ถœ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„

3๊ฐ€์ง€๋ฅผ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ ๋ณด์ž.

1. Presentation

  • UI (๋ฒ„ํŠผ) : ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด Controller๋กœ ์ „๋‹ฌ

  • Controller : ๋ฒ„ํŠผ์˜ ์•ก์…˜์„ ๋ฐ›๊ณ  ๋„๋ฉ”์ธ๊ณผ์˜ ๋ฒˆ์—ญ์„ ๋‹ด๋‹น. ์—ฌ๊ธฐ์„œ Usecase๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

2. Domain

  • Usecae (๋Œ€์ถœํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ์„ ๋‹ด์€ Usecase์ด๋‹ค.)

    • ๋Œ€์ถœ์— ํ•„์š”ํ•œ Entity๋“ค์„ ํ†ตํ•ด ์ตœ์ข… ๊ฒฐ์ •ํ•œ๋‹ค.

    • ๋Œ€์ถœ์ด ์‹คํ–‰๋˜๋ฉด ์ด๋ฅผ Repository์— ๋ฐ˜์˜ํ•œ๋‹ค.

    • ํ•„์š”์— ๋”ฐ๋ผ์„œ Usecae์—์„œ ๋ณ€ํ™”๋œ ๊ฐ’์„ ๋‹ค์‹œ Controller๋กœ ์ „๋‹ฌ

  • Entity (ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ์„ ๋‹ด์€ Entity)

3. Data

  • Repository : ์„œ๋ฒ„๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๊ณ  ๋กœ์ปฌ DB๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

Layer

Presentation Layer์™€ Data Lyaer๋Š” ์‰ฝ๊ฒŒ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์ด๋‹ค. Domain Layer๋Š” ์‰ฝ๊ฒŒ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋น„์ฆˆ๋‹ˆ์Šค Rule์ด ๋‹ด๊ธด ๊ณต๊ฐ„์ด๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋กœ์ปฌ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋„๋ฉ”์ธ์„ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋˜ํ•œ UI์˜ ๋ฒ„ํŠผ ๋ชจ์–‘์ด ๋„ค๋ชจ์ด๋˜ ์„ธ๋ชจ์ด๋˜ ๋„๋ฉ”์ธ์€ ์ „ํ˜€ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.

๊ฐ ๋ ˆ์ด์–ด์™€ ์˜์กด์„ฑ์„ ํ‘œํ˜„ํ•ด๋ณด์ž.

๊ฐ€์žฅ ๋ฐ–์— ์กด์žฌํ•˜๋Š” Infrastructure(Presentation / Data)๋“ค์€ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•œ ์˜์—ญ์ด๊ณ , ๋‚ด๋ถ€ Domain์€ ์‰ฝ๊ฒŒ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ์˜์—ญ์ด๋‹ค. ์˜์กด์„ฑ์€ ๋ฐ– --> ์•ˆ์œผ๋กœ ํ๋ฅธ๋‹ค. ๋•Œ๋ฌธ์— ๋„๋ฉ”์ธ์€ ์™ธ๋ถ€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ , ์•Œ ์ด์œ ๋„ ์—†๋‹ค.

S/W๋ฅผ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์ž.

๊ณ„์ธต ๋‚˜๋ˆ„๊ธฐ์™€ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด๋“์„ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ๋ช…ํ™•ํ•œ ์ฑ…์ž„๊ณผ ๊ณ„์ธต์œผ๋กœ ์ธํ•ด ์†Œ์Šค์ฝ”๋“œ ์ „๋ฐ˜์„ ์‰ฝ๊ฒŒ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

  2. ์ˆ˜์ • ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋Œ€์‘์ด ์‰ฌ์›Œ์ง„๋‹ค.

  3. ์ˆ˜์ •์ด ๋‹ค๋ฅธ ๊ณ„์ธต์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

  4. ๋”ฐ๋ผ์„œ ํ…Œ์ŠคํŠธ ๋˜ํ•œ ์‰ฌ์›Œ์ง„๋‹ค.

๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•œ ๊ฒฐ๊ณผ "๋†’์€ ์‘์ง‘๋„"์™€ "๋‚ฎ์€ ๊ฒฐํ•ฉ๋„"๋ฅผ ์–ป์—ˆ๋‹ค. ์ด๋Š” ์ฆ‰, "๋†’์€ ์ƒ์‚ฐ์„ฑ"์„ ์–ป์€๊ฒƒ์ด๋‹ค.

์ดˆ๊ธฐ ๊ตฌ์ถ• ๋น„์šฉ์€ ๋” ๋“ค๊ฒ ์ง€๋งŒ ์ดํ›„์— ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ณ  ๋†’์€ ์ƒ์‚ฐ์„ฑ์œผ๋กœ ๋ณด๋‹ตํ•ด ์ค„ ๊ฒƒ์ด๋‹ค.

Summary

Q : ์™œ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

A : ๋†’์€ ์ƒ์‚ฐ์„ฑ์„ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

Last updated