- DMS๋ ํจ์จ์ ์ธ ๊ธฐ์์ฌ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ธฐ์์ฌ ๊ด๋ฆฌ ์์คํ
์
๋๋ค.
- ์ฌ๊ฐ์ ์๋๊ป์ ์น์ผ๋ก ํ์ ์ ๋ณด๋ฅผ ํธํ๊ฒ ์กฐํ, ๊ด๋ฆฌํ๊ณ ์์ต์ค์ด๋ ์ ์ฒญ ๋ฐ์ดํฐ, ์/๋ฒ์  ๋ด์ญ์ ๋ชจ์์ ๋ณผ ์ ์์ต๋๋ค.
- ํ์์ ์ฌ๊ฐ์ ์๋๊ป ์ง์  ์ฐพ์๊ฐ ํ์ ์์ด ์ฑ์ผ๋ก ์์ต์ค, ์๋ฅ ๋ฑ์ ์ ์ฒญํ๊ณ ํ์ํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
 
- 
ํจ์จ์ ์ธ ์ ์ง๋ณด์์ ๊ธฐ๋ฅ ํ์ฅ์ ์ํด DB Table๊ณผ ์ํคํ ์ฒ๋ฅผ ๊ณํ์ ์ผ๋ก ์ค๊ณํฉ๋๋ค. - ๋ถํ์ํ ์ค๋ณต ๋ฐ์ดํฐ, ์ค๋ณต ์ฝ๋ ์๋ ๊น๋ํ ๊ตฌ์กฐ๋ฅผ ์งํฅํฉ๋๋ค.
- ๋ก์ง๊ณผ ๊ฐ ๋๋ฉ์ธ์ ์ญํ ์ด ๋ช ํํ ๊ตฌ๋ถ๋๋๋ก ํฉ๋๋ค.
 
- 
๊ฐ๋ฐ ํจ์จ์ ์ํด ๊ฐ๋ ์ฑ์ ํญ์ ์ ๊ฒฝ์๋๋ค. - ์ ํฉํ ๋ณ์, ๋ฉ์๋, ํด๋์ค ๋ช ์ ์๋ช ํ ์ ์๋๋ก ํฉ๋๋ค.
- detekt๋ฅผ ์ฌ์ฉํด ์ผ๊ด์ ์ธ ์คํ์ผ์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
 
- 
ํ๋ก์ ํธ ๊ตฌ์กฐ๋ ์ค๊ณ ๊ณผ์ ์ Notion ๋ฌธ์์ ๊ธฐ๋กํฉ๋๋ค. 
- 
์๋ฒ ์ธํ๋ผ๋ Terraform์ ์ฌ์ฉํด ๊ตฌ์ฑํฉ๋๋ค. 
- DDD
- ๋๋ฉ์ธ์ ์ญํ , ์ฑ ์ ๋ถ๋ฆฌ
- ๊ฐ ๊ฐ์ฒด๊ฐ ์๋ก๊ฐ์ ๊ณผํ๊ฒ ์์กดํ์ง ์๋๋ก ํ์ฌ ์ ์ง๋ณด์์ฑ ๋์
 
- Facade pattern
- usecase ์ฝ๋(facade)์ DB ์ฟผ๋ฆฌ ํธ์ถ์ ๋ํ ์์กด ๋ถ๋ฆฌ
- (๊ฐ service method๋ ํ๋์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ๋จ์๋ก ๊ตฌ์ฑ)
 
- Hexagonal Architecture
- ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ธฐ์ ์ ๋ํ ์์ธ ๊ตฌํ ๋ถ๋ฆฌ
- core- ํต์ฌ ๋ก์ง ๋ฐ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ํ ์ฝ๋
- presentation- ์น ํต์ ์ ๋ํ ๊ด๋ฆฌ ๋ฐ ์ค์ 
- persistence- DB ํต์ ์ ๋ํ ๊ด๋ฆฌ ๋ฐ ์ค์ 
- infrastructure- ์ ์ฒด์ ์ ์ฉ๋๋ ํํฐ, ์ค์ ์ด๋ ๊ธฐํ third party ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๊ตฌํ
 
(์์กด ๋ฐฉํฅ์ด ์๋๋ผ ์งํ ๋ฐฉํฅ์)
flowchart TD
WA[webAdapter] --> UC[usecase];
UC -->|getService| P(command / query port);
UC -->|commandService| P;
UC -->|checkService| P;
P --> PA(adapter);
    1. webAdapter
์น์์ ์์ฒญ์ ๋ฐ์, request body๋ parameter ๋ด์ฉ์ ๊ฒ์ฆํ๋ ์ญํ
- 
์ธ๋ถ ์์ฒญ์ webRequest ๊ฐ์ฒด๋ก ์ ๋ฌ๋๋ค. 
- 
webAdapter๋ usecase์๊ฒ request ๊ฐ์ฒด ๋๋ value๋ฅผ ์ ๋ฌํ๋ค. (request๋ ํด๋น ๊ฐ์ฒด๋ก domain์ด๋ entity๋ฅผ ์์ฑํ์ผํ๊ฑฐ๋, ๋ณ๋ ๋ก์ง์ด ํ์ํ ๊ฒฝ์ฐ ์ ์ํจ) 
- 
usecase์ ๋ฐํ๊ฐ์ ๊ทธ๋๋ก ๋ฐํํ๋ค. 
2. usecase (facade)
๊ฐ usecase์ ๋ํ facade๋ฅผ ๋ํ๋ด๋ ์ญํ
- 
service ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ facade๋ฅผ ๊ตฌ์ฑํจ (port์ ์ง์  ์์กดํ์ง ์์) - ์ ์ฒด์ ์ธ ํ๋ฆ๋ง ๋ํ๋ด๊ณ , ๋๋ฉ์ธ์ด๋ query ํธ์ถ์ ๋ํ ์์ธํ ๊ตฌํ์ X โ service์ ๋ฉ์๋๋ก ๋ถ๋ฆฌ
 
- 
usecase์ ํนํ๋ ๋ก์ง์ ์ง์  ๊ตฌํํ ์๋ ์์ 
- 
usecase๋ service์๊ฒ domain model ๋๋ value ์ ์ ๋ฌํ๋ค. 
- 
usecase๋ webAdapter์๊ฒ response ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. (field๊ฐ nullable์ธ ๋ณ๋ domain model๋ก ๋ฆฌํฉํ ๋ง ์์ ?) 
3. service
query๋ port ํธ์ถ์ domain๊ณผ ๊ด๋ จ๋ ์ถ์์  ์๋ฏธ ๋จ์๋ก ๋ฌถ์ด์ฃผ๋ ์ญํ
- ex. A ์กฐํ์ ํด๋น ๊ฐ์ฒด๊ฐ ๊ฐ์ ํ๊ต์ ๊ฐ์ฒด์ธ์ง ํญ์ ๊ฒ์ฆํด์ผํ๋ค. โ usecase์์ queryPort๋ฅผ ํธ์ถํ๊ณ ๋งค๋ฒ schoolId ๋น๊ต๋ฅผ ํด์ฃผ์ง ์๊ณ , ํด๋น ๋์์ service์ ๋ฉ์๋๋ก ๊ตฌํํ๋ค. ๊ทธ๋ฆฌ๊ณ usecase์์ A๋ฅผ ์กฐํํด์ผํ๋ ๊ฒฝ์ฐ service์ ์ ์๋์ด์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
service ์ข ๋ฅ (๊น๋ํ ๋ถ๋ฅ๋ฅผ ์ํด ๋๋)
- 
CheckService - ๊ฒ์ฆ ๋ฉ์๋
- ์ฃผ๋ก exist ํ์ธ ๋ฑ๋ฑ..
 
- 
GetService - ์กฐํ ๋ฉ์๋
- ๋น์ทํ ์ฟผ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ํ๋ผ๋ฏธํฐ nullable๋ก ๋๊ณ ์ ๋ฌ (persistence์ชฝ์์ ๋์ ์ฟผ๋ฆฌ ๊ตฌํ)
- ํ์ํ ๊ฒฝ์ฐ ์์ ์ฒดํฌ ๋ก์ง์ด ๊ฐ์ด ๋ค์ด๊ฐ ์ ์์
 
- 
CommandService - ์ ์ฅ ํน์ ์ญ์  ๋ฉ์๋
- ํ์ํ ๊ฒฝ์ฐ ์์ ์กฐํ, ์ฒดํฌ ๋ก์ง์ด ๊ฐ์ด ๋ค์ด๊ฐ ์ ์์
 
- 
delegate ํจํด์ ํ์ฉํ์ฌ, ๊ฐ service ํด๋์ค ์ ์๋ฅผ ๋ถ๋ฆฌํ๋ค. [ ์ฐธ๊ณ : Service ๊ตฌ์กฐ ] 
4. port
- persistence๋ infrastructure ๊ณ์ธต๊ณผ ์ํตํ๊ธฐ ์ํ interface (spi)
5. Adapter
- persistenceAdapter : JPA, QueryDSL์ ํตํ ์ฟผ๋ฆฌ ๊ตฌํ
- ๋๋ ๊ธฐํ ๊ธฐ์ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ๋ ์ธ๋ถ ๊ตฌํ ๋ด์ฉ
