buckpal
|-- domain
| |-- Account
| |-- Activity
| |-- AccountRepositoryy
| |-- AccountService
|-- persistence
| |-- AccountRepositoryImpl
|-- web
|-- AccountController
์น ๊ณ์ธต(web), ๋๋ฉ์ธ ๊ณ์ธต(domain), ์์์ฑ ๊ณ์ธต(persistence)๋ก ๊ตฌ๋ถํ๋ค.
์ด์ 1. ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ ์กฐ๊ฐ(functional slice)์ด๋ ํน์ฑ(feature)์ ๊ตฌ๋ถ ์ง๋ ํจํค์ง ๊ฒฝ๊ณ๊ฐ ์๋ค.
- ์ถ๊ฐ์ ์ธ ๊ตฌ์กฐ๊ฐ ์๋ค๋ฉด, ์๋ก ์ฐ๊ด๋์ง ์์ ๊ธฐ๋ฅ๋ค๋ผ๋ฆฌ ์์ํ์ง ๋ชปํ ๋ถ์ํจ๊ณผ๋ฅผ ์ผ์ผํฌ ์ ์๋ ํด๋์ค๋ค์ ๋ฌถ์์ผ๋ก ๋ณ๋ชจํ ์ ์๋ค.
์ด์ 2. ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ค ์ ์ค์ผ์ด์ค๋ค์ ์ ๊ณตํ๋์ง ํ์ ํ ์ ์๋ค.
- ์๋น์ค ๋ด์ ์ด๋ค ๋ฉ์๋๊ฐ ํน์ ๊ธฐ๋ฅ์ ๋ํ ์ฑ ์์ ์ํํ๋์ง ์ฐพ์์ผ ํ๋ค.
์ด์ 3. ํจํค์ง ๊ตฌ์กฐ๋ฅผ ํตํด ์ํคํ ์ฒ๋ฅผ ํ์ ํ ์ ์๋ค.
- ์ด๋ค ๊ธฐ๋ฅ์ด ์น ์ด๋ํฐ์์ ํธ์ถ๋๋์ง, ์์์ฑ ์ด๋ํฐ๊ฐ ๋๋ฉ์ธ ๊ณ์ธต์ ์ด๋ค ๊ธฐ๋ฅ์ ์ ๊ณตํ๋์ง ํ๋์ ๋ณผ ์ ์๋ค.
buckpal
|-- account
|-- Account
|-- AccountController
|-- AccountRepository
|-- AccountRepositoryImpl
|-- SendMoneyService
account ํจํค์ง๋ก ๋ฌถ๊ณ ๊ณ์ธต ํจํค์ง๋ฅผ ์์ด๋ค.
- ์ฅ์
- package-private ์ ๊ทผ ์์ค์ผ๋ก ๊ฐ ๊ธฐ๋ฅ ์ฌ์ด์ ๋ถํ์ํ ์์กด์ฑ์ ๋ฐฉ์งํ ์ ์๋ค.
- ๋จ์
- ๊ฐ์์ฑ์ ๋จ์ด๋ฐ์ธ๋ค.
- package-private ์ ๊ทผ ์์ค์ ์ด์ฉํด ๋๋ฉ์ธ ์ฝ๋๊ฐ ์ค์๋ก ์์์ฑ ์ฝ๋์ ์์กดํ๋ ๊ฒ์ ๋ง์ ์ ์๋ค.
buckpal
|-- account
|-- adapter
| |-- in
| | |-- web
| | |-- AccountController
| |-- out
| | |-- persistence
| | |-- AccountPersistenceAdapter
| | |-- SpringDataAccountRepository
|-- domain
| |-- Account
| |-- Activity
|-- application
|-- SendMoneyService
|-- port
|-- in
| |-- SendMoneyUseCase
|-- out
| |-- LoadAccountPort
| |-- UpdateAccountStatePort
Account์ ๊ด๋ จ๋ ์ ์ค์ผ์ด์ค๋ ๋ชจ๋ account ํจํค์ง ์์ ์๋ค.
- domain
- ๋๋ฉ์ธ ๋ชจ๋ธ (Account)
- application
- ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋๋ฌ์ผ ์๋น์ค ๊ณ์ธต (SendMoneyService)
- ์ธ์ปค๋ฐ ํฌํธ ์ธํฐํ์ด์ค (SendMoneyUseCase)
- ์์๊ณ ์ ํฌํธ ์ธํฐํ์ด์ค (LoadAccountPort, UpdateAccountStatePort)
- adapter
- ์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ ์ธ์ปค๋ฐ ํฌํธ๋ฅผ ํธ์ถํ๋ ์ธ์ปค๋ฐ ์ด๋ํฐ (Controller)
- ์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ ์์๊ณ ์ ํฌํธ์ ๋ํ ๊ตฌํ์ ์ ๊ณตํ๋ ์์๊ณ ์ ์ด๋ํฐ (PersistenceAdapter, Repository)
์ฅ์ 1. ์ด๋ฌํ ํจํค์ง ๊ตฌ์กฐ๋ ๋ชจ๋ธ-์ฝ๋ ๊ฐญ(์ํคํ ์ฒ-์ฝ๋ ๊ฐญ)์ ํจ๊ณผ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๋ค.
๐ก ๋ชจ๋ธ-์ฝ๋ ๊ฐญ(model-code gap) ์ํคํ ์ฒ ๋ชจ๋ธ์๋ ํญ์ ์ฝ๋์ ๋งคํํ ์ ์๋ ์ถ์์ ์ธ ๊ฐ๋ , ๊ธฐ์ ์ ํ ๋ฐ ์ค๊ณ ๊ฒฐ์ ์ด ํผํฉ๋์ด ์๋ค.ย ์ต์ข ๊ฒฐ๊ณผ๋ ๋ชจ๋ธ์ด ์ ํ ๊ตฌ์ฑ ์์์ ๋ฐฐ์ด๊ณผ ๋ฐ๋์ ์ผ์นํ์ง ์๋ ์์ค ์ฝ๋๊ฐ ๋ ์ ์๋ค.
์ฅ์ 2. ํจํค์ง๊ฐ ์ ๊ทผ์ ์ ์ดํ ์ ์๋ค.
- package-private์ธ adapter ํด๋์ค
- ๋ชจ๋ ํด๋์ค๋ application ํจํค์ง ๋ด์ ํฌํธ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ฐ๊นฅ์ ํธ์ถ๋๊ธฐ ๋๋ฌธ์ adapter๋ ๋ชจ๋ package-private ์ ๊ทผ ์์ค์ผ๋ก ๋ฌ๋ ๋๋ค.
- ์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ์ด๋ํฐ๋ก ํฅํ๋ ์ฐ๋ฐ์ ์์กด์ฑ์ ์์ ์ ์๋ค.
- public์ด์ด์ผ ํ๋ application, domain์ ์ผ๋ถ ํด๋์ค
- application์ port(in, out)
SendMoneyUseCase
,LoadAccountPort
,UpdateAccountStatePort
- ๋๋ฉ์ธ ํด๋์ค
Account
,Activity
- application์ port(in, out)
- package-private์ด์ด๋ ๋๋ ์๋น์ค ํด๋์ค
- ์ธ์ปค๋ฐ ํฌํธ ์ธํฐํ์ด์ค ๋ค์ ์จ๊ฒจ์ง๋ ์๋น์ค๋ public์ผ ํ์๊ฐ ์๋ค.
GetAccountBalanceService
- ์ธ์ปค๋ฐ ํฌํธ ์ธํฐํ์ด์ค ๋ค์ ์จ๊ฒจ์ง๋ ์๋น์ค๋ public์ผ ํ์๊ฐ ์๋ค.
-
ํด๋ฆฐ ์ํคํ ์ฒ์ ๋ณธ์ง์ ์ธ ์๊ฑด
์ดํ๋ฆฌ์ผ์ด์ ์ด ์ธ์ปค๋ฐ/์์๊ณ ์ ์ด๋ํฐ์ ์์กด์ฑ์ ๊ฐ์ง ์์์ผ ํ๋ค.
-
์์กด์ฑ ์ญ์ ์์น ์ด์ฉ
- ์ดํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ ์ธํฐํ์ด์ค(port)๋ฅผ ๋ง๋ค๊ณ ์ด๋ํฐ์ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ๋๋ค.
- ๋ชจ๋ ๊ณ์ธต์ ์์กด์ฑ์ ๊ฐ์ง ์ค๋ฆฝ์ ์ธ ์ปดํฌ๋ํธ๋ฅผ ํ๋ ๋๊ณ , ์ด ์ปดํฌ๋ํธ๊ฐ ์ํคํ ์ฒ๋ฅผ ๊ตฌ์ฑํ๋ ๋๋ถ๋ถ์ ํด๋์ค๋ฅผ ์ด๊ธฐํํ๋ ์ญํ ์ ํ๋ค.
- ์น ์ปจํธ๋กค๋ฌ๊ฐ ์๋น์ค์ ์ํด ๊ตฌํ๋ ์ธ์ปค๋ฐ ํฌํธ๋ฅผ ํธ์ถํ๋ค. ์๋น์ค๋ ์ด๋ํฐ์ ์ํด ๊ตฌํ๋ ์์๊ณ ์ ํฌํธ๋ฅผ ํธ์ถํ๋ค.
- AccountController
- SendMoneyUseCase ์ธํฐํ์ด์ค๊ฐ ํ์ํ๋ฏ๋ก ์์กด์ฑ ์ฃผ์ ์ ํตํด SendMoneyService ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฃผ์
- SendMoneyService
- LoadAccount ์ธํฐํ์ด์ค๋ก ๊ฐ์ฅํ AccountPersistenceAdapter ํด๋์ค์ ์ธ์คํด์ค ์ฃผ์
- ์ฝ๋์์ ์ํคํ ์ฒ์ ํน์ ์์๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ์ด์ ์ํคํ ์ฒ ๋ค์ด์ด๊ทธ๋จ์ ๋ฐ์ค ์ด๋ฆ์ ๋ฐ๋ผ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ํ์ํ๋ฉด ๋๋ค.
- ์ด๋ฅผ ํตํด ์์ฌ์ํต, ๊ฐ๋ฐ, ์ ์ง๋ณด์ ๋ชจ๋๊ฐ ์กฐ๊ธ ๋ ์์ํด์ง๋ค.