โข ํ๋ก์ ํธ์์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ฅผ ์ ์ฉํ๊ธฐ๋ก ํ๊ณ , MSA ๋ฐฉ์์ผ๋ก ๊ฐ์ ๋ถ๋ฆฌ๋ ๋ด๋น ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ค. ์๋ฌด๋ฆฌ ๋ถ๋ฆฌ๋ ์๋น์ค๋ผ๊ณ ํด๋ ์ฒ์์๋ ํจํค์ง ๊ตฌ์กฐ๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์ ์ ์ ํด๋๋ ๊ฒ ์ถํ์ ์๋ก ์ฝ๋๋ฆฌ๋ทฐํ ๋ ํธํ๊ณ ์ฌ๋ฌ ์ฅ์ ์ด ์๋ ๊ฒ ๊ฐ์์ ๋ฏธ๋ฆฌ ์ค๊ณํ์๋ค.
1. ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ ๊ตฌ์กฐ
์ ๋ํ ๊ฒ์ ์ด์ ํฌ์คํ ์ ํ์ธํด์ฃผ์ธ์.
2. ๋ด๊ฐ ์๊ฐํ ํจํค์ง ๊ตฌ์กฐ
src.groupname
ใด global
ใด config
ใด util
ใด error
ใด exception
ใด handler
ใด {์ ๊ทธ๋ฆฌ๊ฑฐํธ ์ด๋ฆ}
ใด adapter
| ใด in
| | ใด web
| | ใด dto
| |
| ใด out
| ใด persistence
| ใด producer
|
|
|
|
ใด domain
|
|
|
ใด application
ใด port
| ใด in
| | ใด dto
| |
| |
| ใด out
| ใด repository
| ใด producer
|
|
ใด validator
3. ํด๋์ค ๋ฐ ์ธํฐํ์ด์ค ๋ค์ด๋ฐ ๊ท์น (์์ ๋จ)
- global.error.exception: ~Exception
- global.util: ~Utils
- global.config: ~Config
- adapter.in.web: ~ApiController
- adapter.in.web.dto: ~Input, ~Output
- adatper.in.consumer: ~Consumer
- adapter.out.producer: ~Producer
- adatper.out.persistence: ~QueryRepo
- application.port.out.repository: ~Repo, QueryableRepo
- application.port.in.dto: ~Req, ~Res
- application.port.out.producer: ~ProducerPort
- application.validator: ~Validator
- application.port.in: ~UseCase
- application: ~Service
4. ๊ธฐํ ๊ท์น
- ์ด๋ํฐ์์ ์ ๊ทผํด์ผ ํ๋ ํฌํธ๋ค์ public
- ๋๋ฉ์ธ ํด๋์ค๋ค์ ์๋น์ค ๊ทธ๋ฆฌ๊ณ ์ ์ฌ์ ์ผ๋ก ์ด๋ํฐ์๋ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก public
- ์๋น์ค๋ ์ธ์ปค๋ฐ ํฌํธ ์ธํฐํ์ด์ค ๋ค์ ์จ๊ฒจ์ง ์ ์๊ธฐ ๋๋ฌธ์ package-private(java: default)
- ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ด ์ธ์ปค๋ฐ/์์๊ณ ์ ์ด๋ํฐ์ ์์กดํ์ง ์๊ธฐ
- adapter ํจํค์ง ๋ด์์๋ ๋ชจ๋ package-private
5. CQS(Command Query Separation) ํจํด
๊ธฐ์กด์๋ Repository ์์ค์์ CQS๋ฅผ ์ ์ฉํ๊ณ ์ ํ๋ค. ํ์ง๋ง ๋ด๊ฐ ๊ฐ๋ฐํ๊ณ ์ ํ๋ ์๋น์ค๋ Command ์ฟผ๋ฆฌ์ ๋น์ค์ด ์ ์๊ธฐ์ ๊ดํ ์์กด์ฑ๋ง ๋์ด๋๋ ๋ฌธ์ ๊ฐ ์์๋ค. ๋ฐ๋ผ์ ์กฐํ์ฉ Repository๋ ๋ถ๋ฆฌํ๋ ์ฐ๊ธฐ์ฉ์ ๋ฐ๋ก ๋ถ๋ฆฌํ์ง ์๊ณ JpaRepository๋ฅผ ์์ํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
Command์ Query๋ฅผ ๋ถ๋ฆฌํ๋ ๋์์ธ ํจํด
CRUD(Create, Read, Update, Delete)์์ Command๋ Create, Update, Delete์ ํด๋นํ๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ด๊ณ , Query๋ Read์ ํด๋นํ๋ ๊ฐ์ฒด๋ฅผ ๋จ์ ์กฐํํ๋ ์์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
ํ๋์ ๋ฉ์๋๋ Command์ Query ๋ ์ค ํ๋์ ์ญํ ๋ง ํด์ผ ํ๋ค.
์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ฅผ ๋ถ๋ฆฌํจ์ผ๋ก์จ, ์ ์ง๋ณด์๋ ๊ฐ๋ ์ฑ์ ๋์์ด ๋๋ค๊ณ ์๊ฐํ๋ค.
๋ฐ๋ผ์ ๋๋ ํด๋น ํ๋ก์ ํธ์์ Repository์ UseCase์์ ํด๋์ค ๋จ์๋ก CQS ํจํด์ ์ ์ฉํ๊ณ ์ ํ๋ค.
6. CQS์ CQRS ์ฐจ์ด์
CQRS๋ Command and Query Responsibility Segregation)์ผ๋ก CQS์ ํ์ฅ๋ ์์ค์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํ์ง๋ง CQS๋ ๋ช
๋ น๊ณผ ์กฐํ๋ฅผ ์ฐ์ฐ ์์ค์์ ๋ถ๋ฆฌํ์ง๋ง, CQRS๋ ๊ฐ์ฒด๋ ์์คํ
์์ค์์ ๋ถ๋ฆฌํ๋ค๋ ์ฐจ์ด๊ฐ ์๋ค.
'๐จโ๐ฉโ๐งโ๐ฆ Project > ๐ฉ DevTalk' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Repository์์ CQS๋ฅผ ํฌ๊ธฐํ๊ณ ์์ ํ ๊ณผ์ (0) | 2023.07.13 |
---|---|
ํฅ์ฌ๊ณ ๋ (Hexagonal) ์ํคํ ์ฒ๋ฅผ ๊ณต๋ถํด๋ณด์ (with Layered, Clean Architecture) (0) | 2023.07.06 |