Skip to content

Latest commit

ย 

History

History
140 lines (105 loc) ยท 5.88 KB

File metadata and controls

140 lines (105 loc) ยท 5.88 KB

3์žฅ. ์ฝ”๋“œ ๊ตฌ์„ฑํ•˜๊ธฐ

ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

1. ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ

buckpal
|-- domain
|   |-- Account
|   |-- Activity
|   |-- AccountRepositoryy
|   |-- AccountService
|-- persistence
|   |-- AccountRepositoryImpl
|-- web
    |-- AccountController

์›น ๊ณ„์ธต(web), ๋„๋ฉ”์ธ ๊ณ„์ธต(domain), ์˜์†์„ฑ ๊ณ„์ธต(persistence)๋กœ ๊ตฌ๋ถ„ํ–ˆ๋‹ค.

1.1 ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑํ•œ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๊ฐ€ ์ตœ์ ์˜ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ์ด์œ 

์ด์œ 1. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ ์กฐ๊ฐ(functional slice)์ด๋‚˜ ํŠน์„ฑ(feature)์„ ๊ตฌ๋ถ„ ์ง“๋Š” ํŒจํ‚ค์ง€ ๊ฒฝ๊ณ„๊ฐ€ ์—†๋‹ค.

  • ์ถ”๊ฐ€์ ์ธ ๊ตฌ์กฐ๊ฐ€ ์—†๋‹ค๋ฉด, ์„œ๋กœ ์—ฐ๊ด€๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ๋“ค๋ผ๋ฆฌ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์˜ ๋ฌถ์Œ์œผ๋กœ ๋ณ€๋ชจํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์œ 2. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ค ์œ ์Šค์ผ€์ด์Šค๋“ค์„ ์ œ๊ณตํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์—†๋‹ค.

  • ์„œ๋น„์Šค ๋‚ด์˜ ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ ํŠน์ • ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

์ด์œ 3. ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์—†๋‹ค.

  • ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์›น ์–ด๋Œ‘ํ„ฐ์—์„œ ํ˜ธ์ถœ๋˜๋Š”์ง€, ์˜์†์„ฑ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ๋„๋ฉ”์ธ ๊ณ„์ธต์— ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”์ง€ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์—†๋‹ค.

2. ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ

buckpal
|-- account
    |-- Account
    |-- AccountController
    |-- AccountRepository
    |-- AccountRepositoryImpl
    |-- SendMoneyService

account ํŒจํ‚ค์ง€๋กœ ๋ฌถ๊ณ  ๊ณ„์ธต ํŒจํ‚ค์ง€๋ฅผ ์—†์•ด๋‹ค.

  • ์žฅ์ 
    • package-private ์ ‘๊ทผ ์ˆ˜์ค€์œผ๋กœ ๊ฐ ๊ธฐ๋Šฅ ์‚ฌ์ด์˜ ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ 
    • ๊ฐ€์‹œ์„ฑ์„ ๋–จ์–ด๋œฐ์ธ๋‹ค.
    • package-private ์ ‘๊ทผ ์ˆ˜์ค€์„ ์ด์šฉํ•ด ๋„๋ฉ”์ธ ์ฝ”๋“œ๊ฐ€ ์‹ค์ˆ˜๋กœ ์˜์†์„ฑ ์ฝ”๋“œ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์—†๋‹ค.

3. ์•„ํ‚คํ…์ฒ˜์ ์œผ๋กœ ํ‘œํ˜„๋ ฅ ์žˆ๋Š” ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

buckpal
|-- account
    |-- adapter
    |   |-- in
    |   |   |-- web
    |   |       |-- AccountController
    |   |-- out
    |   |   |-- persistence
    |   |       |-- AccountPersistenceAdapter
    |   |       |-- SpringDataAccountRepository
    |-- domain
    |   |-- Account
    |   |-- Activity
    |-- application
        |-- SendMoneyService
        |-- port
            |-- in
            |   |-- SendMoneyUseCase
            |-- out
            |   |-- LoadAccountPort
            |   |-- UpdateAccountStatePort

3.1 ํ•ต์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ

Account์™€ ๊ด€๋ จ๋œ ์œ ์Šค์ผ€์ด์Šค๋Š” ๋ชจ๋‘ account ํŒจํ‚ค์ง€ ์•ˆ์— ์žˆ๋‹ค.

  • domain
    • ๋„๋ฉ”์ธ ๋ชจ๋ธ (Account)
  • application
    • ๋„๋ฉ”์ธ ๋ชจ๋ธ์„ ๋‘˜๋Ÿฌ์‹ผ ์„œ๋น„์Šค ๊ณ„์ธต (SendMoneyService)
    • ์ธ์ปค๋ฐ ํฌํŠธ ์ธํ„ฐํŽ˜์ด์Šค (SendMoneyUseCase)
    • ์•„์›ƒ๊ณ ์ž‰ ํฌํŠธ ์ธํ„ฐํŽ˜์ด์Šค (LoadAccountPort, UpdateAccountStatePort)
  • adapter
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์˜ ์ธ์ปค๋ฐ ํฌํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ธ์ปค๋ฐ ์–ด๋Œ‘ํ„ฐ (Controller)
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์˜ ์•„์›ƒ๊ณ ์ž‰ ํฌํŠธ์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ์•„์›ƒ๊ณ ์ž‰ ์–ด๋Œ‘ํ„ฐ (PersistenceAdapter, Repository)

3.2 ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ์˜ ์žฅ์ 

์žฅ์ 1. ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋Š” ๋ชจ๋ธ-์ฝ”๋“œ ๊ฐญ(์•„ํ‚คํ…์ฒ˜-์ฝ”๋“œ ๊ฐญ)์„ ํšจ๊ณผ์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก ๋ชจ๋ธ-์ฝ”๋“œ ๊ฐญ(model-code gap) ์•„ํ‚คํ…์ฒ˜ ๋ชจ๋ธ์—๋Š” ํ•ญ์ƒ ์ฝ”๋“œ์— ๋งคํ•‘ํ•  ์ˆ˜ ์—†๋Š” ์ถ”์ƒ์ ์ธ ๊ฐœ๋…, ๊ธฐ์ˆ  ์„ ํƒ ๋ฐ ์„ค๊ณ„ ๊ฒฐ์ •์ด ํ˜ผํ•ฉ๋˜์–ด ์žˆ๋‹ค.ย ์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ๋ชจ๋ธ์ด ์ •ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ฐฐ์—ด๊ณผ ๋ฐ˜๋“œ์‹œ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

์žฅ์ 2. ํŒจํ‚ค์ง€๊ฐ„ ์ ‘๊ทผ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

  • package-private์ธ adapter ํด๋ž˜์Šค
    • ๋ชจ๋“  ํด๋ž˜์Šค๋Š” application ํŒจํ‚ค์ง€ ๋‚ด์˜ ํฌํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฐ”๊นฅ์— ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— adapter๋Š” ๋ชจ๋‘ package-private ์ ‘๊ทผ ์ˆ˜์ค€์œผ๋กœ ๋‘ฌ๋„ ๋œ๋‹ค.
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ์–ด๋Œ‘ํ„ฐ๋กœ ํ–ฅํ•˜๋Š” ์šฐ๋ฐœ์  ์˜์กด์„ฑ์€ ์žˆ์„ ์ˆ˜ ์—†๋‹ค.
  • public์ด์–ด์•ผ ํ•˜๋Š” application, domain์˜ ์ผ๋ถ€ ํด๋ž˜์Šค
    • application์˜ port(in, out)
      • SendMoneyUseCase, LoadAccountPort, UpdateAccountStatePort
    • ๋„๋ฉ”์ธ ํด๋ž˜์Šค
      • Account, Activity
  • package-private์ด์–ด๋„ ๋˜๋Š” ์„œ๋น„์Šค ํด๋ž˜์Šค
    • ์ธ์ปค๋ฐ ํฌํŠธ ์ธํ„ฐํŽ˜์ด์Šค ๋’ค์— ์ˆจ๊ฒจ์ง€๋Š” ์„œ๋น„์Šค๋Š” public์ผ ํ•„์š”๊ฐ€ ์—†๋‹ค.
      • GetAccountBalanceService

4. ์˜์กด์„ฑ ์ฃผ์ž…์˜ ์—ญํ• 

  • ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ๋ณธ์งˆ์ ์ธ ์š”๊ฑด

    ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ธ์ปค๋ฐ/์•„์›ƒ๊ณ ์ž‰ ์–ด๋Œ‘ํ„ฐ์— ์˜์กด์„ฑ์„ ๊ฐ–์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

  • ์˜์กด์„ฑ ์—ญ์ „ ์›์น™ ์ด์šฉ

    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์— ์ธํ„ฐํŽ˜์ด์Šค(port)๋ฅผ ๋งŒ๋“ค๊ณ  ์–ด๋Œ‘ํ„ฐ์— ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ๋‘”๋‹ค.
    • ๋ชจ๋“  ๊ณ„์ธต์— ์˜์กด์„ฑ์„ ๊ฐ€์ง„ ์ค‘๋ฆฝ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜ ๋‘๊ณ , ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํด๋ž˜์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    • ์›น ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์„œ๋น„์Šค์— ์˜ํ•ด ๊ตฌํ˜„๋œ ์ธ์ปค๋ฐ ํฌํŠธ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์„œ๋น„์Šค๋Š” ์–ด๋Œ‘ํ„ฐ์— ์˜ํ•ด ๊ตฌํ˜„๋œ ์•„์›ƒ๊ณ ์ž‰ ํฌํŠธ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

    image

    • AccountController
      • SendMoneyUseCase ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด SendMoneyService ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฃผ์ž…
    • SendMoneyService
      • LoadAccount ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ฐ€์žฅํ•œ AccountPersistenceAdapter ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ฃผ์ž…

    5. ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋ ๊นŒ?

    • ์ฝ”๋“œ์—์„œ ์•„ํ‚คํ…์ฒ˜์˜ ํŠน์ • ์š”์†Œ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ์ด์ œ ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ์˜ ๋ฐ•์Šค ์ด๋ฆ„์„ ๋”ฐ๋ผ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด ๋œ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ์˜์‚ฌ์†Œํ†ต, ๊ฐœ๋ฐœ, ์œ ์ง€๋ณด์ˆ˜ ๋ชจ๋‘๊ฐ€ ์กฐ๊ธˆ ๋” ์ˆ˜์›”ํ•ด์ง„๋‹ค.