๐ฃ ์ค์ ! ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ์ค๊ณ | ์ธํ์ฝ 2022
- "์" ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ ๊ตฌ์กฐ๊ฐ ์ค์ํ ๊น?
- ์๋ชป ๊ตฌ์ฑ์ ์ถํ ๋ณ๊ฒฝ์ด ์ด๋ ค์
- ํ๋ก์ ํธ ์ด๊ธฐ์ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ ์ผ๋ จ์ ์ค๊ณ ๊ณผ์
- ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋ง๋ํ ์ํฅ
- "๋ฌด์"์ ๊ธฐ์ค์ผ๋ก ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๋๋์ด์ผ ํ๋๊ฐ?
- ๊ฒฝ๊ณ ์์์ ์๋ฏธ๋ฅผ ๊ฐ์ง ์ ์๋ ๊ทธ๋ฃน์ ์ ์ํ๊ณ ๋๋๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ (Bounded Context)
- ์ญํ , ์ฑ ์, ํ๋ ฅ ๊ด๊ณ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ๋ค์ ์๊ฐ
- "์ด๋ป๊ฒ" ์ค์ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ๊ตฌํํด์ผ ํ๋๊ฐ?
- ํ๋ก์ ํธ๊ฐ ์ปค์ง๊ณ ์๋ค๋ฉด ๋ค์ ๊ฒฝ๊ณ๋ฅผ ๋๋๊ณ ๊ทธ ๊ธฐ์ค์ผ๋ก ์์ค ์ ์ฅ์๋ฅผ ๋ถ๋ฆฌ
- Infra(์ธ๋ถ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ Data ๊ด๋ จ ๊ตฌํ ์งํฅ
- ์๋น์ค ๊ตฌํ์ ๊ฐ์ ์ญํ ์ ๋ง๊ฒ ๊ฐ๊ฐ ๊ตฌํ๋ ์ ์์(๊ณตํต์ผ๋ก ํ์ชฝ์ ๊ตฌํ X)
- ์์คํ ๋ ๋ฒจ ๊ตฌํ์ด ์ค์ ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ง ์๋๋ก ๊ฒฉ๋ฆฌํ๊ฑฐ๋ ์ ํ
- ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ๋?
- ๊ธฐ์ ๋ฒ ์ด์ค ๊ธฐ๋ฐ ๊ตฌ์กฐ
- ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ด์ ๋ก Core์ Common์ ๊ณตํต ๋ชจ๋์ ๊ตฌํํ๋ฉด ์ฝ๋๊ฐ ์ฆ๊ฐํ์ ๋ ๋ชจ๋ ๊ฐ ์ข ์์ฑ ๋ฌธ์ ๋ฐ์
- core์ common ์ญ์
- ์ฝ๋ ์ค๋ณต์ด ๊ฐ๊ณ ์๋ ์ํ๋ณด๋ค ์ค๋ณต์ ํ์ฉํ์ง ์์์ ๋์ ์ ์ฌ์ ์ธ ์ํ์ฑ์ด ๋ ํฐ ๋ฌธ์
- ์ฝ๋ ์ค๋ณต์ด ๊ฐ๊ณ ์๋ ์ํ๋ณด๋ค ์ค๋ณต์ ํ์ฉํ์ง ์์์ ๋์ ์ ์ฌ์ ์ธ ์ํ์ฑ์ด ๋ ํฐ ๋ฌธ์
- DDD(: Domain-Driven Design) Bounded Context
- ํน์ ํ ์ปจํ ์คํธ ๋ฌธ๋งฅ ํ์์ ์์ ํ ์๋ฏธ๋ฅผ ๊ฐ๋ ๊ฒฝ๊ณ์ ๊ธฐ์ค์ ๋๋์ด์ผ ํจ
- ex) ๋ฉํฐ๋ชจ๋ ๊ทธ๋ฃน์ด๋ผ๋ 4๊ฐ์ ๊ทธ๋ฃน์ ์ ์ํด์ ์ฌ์ฉ
- Boot(Server)
- batch, admin, api
- ์ฝ๋์ ๋ณํ๊ฐ ์ฆ์ ๋ชจ๋
- Data(Domain)
- meta, user, chart
- ์๋ฒ ๋ชจ๋๊ณผ ๋ฐ์ ํ ๊ด๊ณ
- Infra(์ฐ๋๋ชจ๋)
- and, vod, photo, billing
- ์ ๊ด ๋ถ์ ๋ฐ ์ ์ฒด ์ฐ๊ฒฐ์ ์ํ ๊ทธ๋ฃน
- ๊ตฌํ ์ ๋ณํ๋ ์ ์ง๋ง, ์ถํ ๋ฒ์ ์ ์ ์ฝ๋์ ํฐ ๋ณํ
- Cloud(System)
- config, gateway, discovery
- ์๋ฒ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ทธ๋ฃน(์ปจํ ์ด๋ ํ๊ฒฝ, ํธ๋ํฝ ์ ์ด๋ฅผ ์ํ ์์คํ ๊ด๋ฆฌ ๊ทธ๋ฃน)
- ๋ณํ ์ ์
- Boot(Server)
- ๋น๋ ๋๊ตฌ(gradle)์์ ๊ทธ๋ฃน ํด๋๋ช ์ ๊ธฐ์ค์ผ๋ก ์ ์ํ ๊ธฐ์ ๋ค์ ์ผ๊ด์ ์ผ๋ก ์ ์ธ ๊ฐ๋ฅ
- ๋ชจ๋์ ๋๋๊ณ ๋ชจ๋ ํน์ฑ์ ๋ง๊ฒ ๋ ๋ถ๋ฆฌํ๋ฉด ๋น๋ ์๊ฐ์ด ๊ฐ์ํ๊ณ ํ๋ก์ ํธ ๊ฒฝ๊ณ๊ฐ ๋ช ํํด์ ธ ์ธํฐํ์ด์ค ๋ถ๋ฆฌ๊ฐ ๋ช ํํด์ง
- ์ผ๋ฐ์ ์ธ Spring ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์ปจํธ๋กค๋ฌ → ์๋น์ค → ๋ ํฌ์งํ ๋ฆฌ์ ์์์ธ๋ฐ "์๋น์ค"๋ ์ด๋ ๋ชจ๋์ ์์นํด์ผ ํ ๊น?
- Boot์ Data ์์ชฝ์ ๋ชจ๋ ์กด์ฌํด Boot ์๋น์ค์์ Event ๋ฐ์ ์ Data ์๋น์ค๊ฐ ์ ์ฅํ๋ ๋ฐฉ์
- ์ด์ฒ๋ผ ์๋น์ค ๊ตฌํ์ฒด๋ ํ๋ก์ ํธ ๋ณ๋ก ์ญํ ์ ๋ง๋๋ก ๊ฐ๊ฐ ๊ตฌํํ ์ ์์
-
- Data ํ๋ก์ ํธ์์๋ Survlet Request์ ๊ฐ์ ์น ์๋ฒ์ ์์กด์ ์ธ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ง ์์์ผ ๋จ (R&R ์๋ฐ)
Servlet Request ๊ฐ์ฒด๊ฐ ๋ง๋จ Layer๊น์ง ๋ด๋ ค๊ฐ๋ ๊ฒฝ์ฐ ์ญํ ๊ณผ ์ฑ ์, ํ๋ ฅ๊ด๊ณ์ ์ฌ๋ฐ๋ฅด์ง ์์
Data ๋ชจ๋์ Batch, ์น ์ดํ๋ฆฌ์ผ์ด์ , ์ํ์ ์ดํ๋ฆฌ์ผ์ด์ ์๋ ์ฌ์ฉํ ์ ์์ด(๋ชจ๋๊ฐ ์น ์๋ฒ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ) ์ฟ ํค, ์ธ์ , ์น ๋ฑ ์์กด์ ์ธ ํด๋์ค๋ค ์ ๋ฌ X) - Data ํ๋ก์ ํธ์ ์น ๊ฐ๋ฐ ์์กด์ฑ์ด ๊ฐํ๊ฒ ์ฃผ์ ๋๋ฉด, ํ ์คํธ ์ฝ๋ ์์ฑ ์ ์น ์๋ฒ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ชจ๋ ํ์ํด์ ธ Mock ๊ฐ์ฒด๋ฅผ ์ ์ธํด์ผ ๋๋ ๋ฑ ๋ชจ๋์ ๋๋ ์๋ฏธ๊ฐ ์์ค๋จBoot์ Meta ํ๋ก์ ํธ ๊ฐ์๋ ์ํธ ๊ฐ ๊ท์น ํ์
- Data ํ๋ก์ ํธ์์๋ Survlet Request์ ๊ฐ์ ์น ์๋ฒ์ ์์กด์ ์ธ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ง ์์์ผ ๋จ (R&R ์๋ฐ)
๐ฃ ์ฐ๋ฆฌ๋ ์ด๋ ๊ฒ ๋ชจ๋์ ๋๋ด์ด์: ๋ฉํฐ ๋ชจ๋์ ์ค๊ณํ๋ ๋ ๋ค๋ฅธ ๊ด์ | ์ธํ์ฝ 2023
- "์ด๋ค" ๋ชจ๋๋ถํฐ ๋ง๋ค์ด์ผ ํ๋๊ฐ?
- ๋ณ๊ฒฝ์ด ๊ฑฐ์ ์๋ ๊ณตํต ์ฝ๋ → ์์ค์ ๋ฐ๋ผ ๋ถ๋ฆฌ → ๊ธฐ๋ฅ๋ณ ๋ถ๋ฆฌ
- SRP๋ฅผ ์๋ฐํ์ง ์๊ฒ
- "์ด๋ป๊ฒ" ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ๊ตฌํํด์ผ ํ๋๊ฐ?
- ์ ์ค์ผ์ด์ค(๋น์ฆ๋์ค ๋ก์ง)๋ ๊ณตํต ๋ชจ๋์์ ์ ๊ฑฐ
- ์๋ ๋น ์ค์บ ๋ฐฉ์ ์ฌ์ฉ X
- ์๊ฒฉํ๊ฒ ๊ณตํต ๋ชจ๋ ๊ด๋ฆฌ
- Common ๋ชจ๋
- ์์กด์ฑ ๊ด๋ฆฌ, Entity, Application, Service ๊ณ์ธต ์ฝ๋ ๊ด๋ฆฌ
- ์ง์
์ํ ๋ฐ ํ์คํ ๋ฆฌ ํ์
์ด๋ ค์
- Common์ ์์ ํ๊ณ ๋ฐฐํฌํด์ผ ๋ค๋ฅธ ํ๋ก์ ํธ๋ค์ ์์ ์ด ๊ฐ๋ฅํจ
- ํ๋์ ํ์คํ ๋ฆฌ๊ฐ ์ฌ๋ฌ ํ์คํ ๋ฆฌ์ ํผ์ ธ์์ด ๊ด๋ฆฌ๊ฐ ์ด๋ ค์
- ์๋น์ค ๋ถ๋ฆฌ ์ด๋ ค์
- SRP๋ฅผ ์๋ฐํ๊ธฐ ์ฌ์
- SRP = ๋ณ๊ฒฝ์ ์ด์ ๊ฐ ํ๋์ฌ์ผ ํ๋ค = ์กํฐ๊ฐ ํ๋์ฌ์ผ ํ๋ค
- Common์ ๋ณ๊ฒฝ์ด ์ด๋ ค์
- Common ์์ ์ ๋ชจ๋ ํ๋ก์ ํธ์ ์ํฅ
- ์์กด์ฑ ๊ด๋ฆฌ๊น์ง Common์์ ํ๋ค๋ฉด ๋ค๋ฅธ ํ๋ก์ ํธ์ build๋ ์คํ์๊น์ง ์ํฅ
- dead ์ฝ๋๊ฐ ๋์ด๋๊ณ ์์ฐ์ค๋ฝ๊ฒ legacy ์ฝ๋ ๋์ด๋จ
- Common์ ๋ฐฐํฌ ์์กด์ฑ์ด ์์
- ํจ์จ์ ์ธ ๊ฐ๋ฐ์ ์ํด์๋ ๋ฐฐํฌ ๋ ๋ฆฝ์ฑ๊ณผ ๊ฐ๋ฐ ๋ ๋ฆฝ์ฑ์ด ํ๋ณด๋์ด์ผ ํ์ง๋ง, ํ์ฌ ๊ตฌ์กฐ๋ผ๋ฉด ๋ฐฐํฌ๋ฅผ ์ํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋จผ์ ๋ฐฐํฌํด์ผ๋ง ํจ
- ๊ฐ๋ฐํ ๋ ์ธ์์ ์ ํ
- ๊ฐ๋ฐ ์์์ ํ
์ด๋ธ ์ค๊ณ๋ถํฐ ํ์ ๋ ํ
์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ง์ง ์์ ํ
์ด๋ธ์ ์์ ์ ์ด ์์ง ์์๊ฐ?
→ ํ ์ด๋ธ ์ค๊ณ๋ถํฐ ํ๋ ๊ฒ์ด ๋ง์๊น? - ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ๋ "ํ๋ ์์ํฌ์ AOP๋ฅผ ์จ์ผ์ง, Cache๋ Redis DB๋ Mysql์ ์จ์ผ์ง" ๋ฑ์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์๋
→ ์ด๋ฐ ๊ฒ๋ค์ ์ธ๋ถ ์ฌํญ์ ๊ฐ๊น์ - ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ ์ค์ผ์ด์ค
- ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง: ์์คํ
์ ์ /๋ฌด์ ์๊ด์์ด ์กด์ฌํ๋ ๋น์ฆ๋์ค ๋ก์ง
์ด๋ฐ ๋ก์ง๋ค์ ๋ณดํต ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํจ. ์ด๋ฅผ ํต์ฌ ๋น์ฆ๋์ค ๋ฐ์ดํฐ๋ผ๊ณ ๋ถ๋ฆ
์ด ๋์ ๋ฌถ์ด์ ๋๋ฉ์ธ ์ํฐํฐ ํน์ ๋๋ฉ์ธ ๊ฐ์ฒด๋ผ๊ณ ๋ถ๋ฅผ ์ ์์ - ์ ์ค์ผ์ด์ค: ์์คํ
์ด ์์ด์ผ ์ ํจํ ๋น์ฆ๋์ค ๋ก์ง
- ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง: ์์คํ
์ ์ /๋ฌด์ ์๊ด์์ด ์กด์ฌํ๋ ๋น์ฆ๋์ค ๋ก์ง
- ๊ฐ๋ฐ ์์์ ํ
์ด๋ธ ์ค๊ณ๋ถํฐ ํ์ ๋ ํ
์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ง์ง ์์ ํ
์ด๋ธ์ ์์ ์ ์ด ์์ง ์์๊ฐ?
- ์ด๋ค ๋ชจ๋๋ถํฐ ๋ง๋ค์ด์ผ ํ ๊น?
- ๊ฐ์ฅ ๋จ์ํ ๊ฒ๋ถํฐ
- global-utils(๊ณตํต ์ฝ๋)
- ๋ณ๊ฒฝ์ด ๊ฑฐ์ ์๋ ๋ชจ๋(๋๋ฉ์ธ์ ๋ฌด๊ดํ ์ฝ๋๋ ๊ฑฐ์ ์์)
- ์์คํ ์ ๋ ๋ฆฝ์ ์ธ ๊ณตํต ์ฝ๋ ex) StringUtils
- ์์คํ
์ ์ข
์์ ์ธ ๊ณตํต ์ฝ๋ ex) ProductCode
- ๋๋ฉ์ธ
- ์ธํ๋ผ
- appstore-core
- ๊ณตํต ๋ชจ๋
- ์์ค(Level: ์
๋ ฅ๊ณผ ์ถ๋ ฅ๊น์ง์ ๊ฑฐ๋ฆฌ)์ ๋ฐ๋ผ ๋ถ๋ฆฌ
- ์ ๋ ฅ: HTTP, ์น์์ผ ๋ฑ
- ์ถ๋ ฅ: ์บ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ - ๊ณ ์์ค(Domain)
- ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ผ๋ก๋ถํฐ ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ๊ฒ
- ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ์ํด ์์๋ก ๋ณ๊ฒฝ๋จ - ์ ์์ค(Infra)
- ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ผ๋ก๋ถํฐ ๊ฐ๊น์ด ๊ฒ
- ์๋ก์ด ํ๊ฒฝ ๋๋ ๋ณด์ ์ทจ์ฝ์ ๋ฑ์ ์ํด ํน์ ์์ ์ ๋ณ๊ฒฝ๋จ
- ํ์ฌ ๊ณต๊ณต๋ง ์ถ๊ฐ ์ด์, DB Migration ๋ฑ์ ์์ ์ ํ ๋ ์ ์์ค ๋ณ๊ฒฝ๋จ - Domain๊ณผ Infra ์์ญ์ ๋ค๋ฅธ ์์ค = ๋ค๋ฅธ ๋ณ๊ฒฝ ์๋
- global-utils(๊ณตํต ์ฝ๋)
- ๊ทธ ํ๋ก๋ ๊ธฐ๋ฅ๋ณ๋ก ์์กด์ฑ์ ๋๋
๊ธฐ๋ฅ๋ณ๋ก ํ์ํ ์์กด์ฑ๊ณผ ์ฝ๋ ๋ณ๊ฒฝ์ ์ฃผ๊ธฐ๊ฐ ๋ค๋ฆ
ex. api ์ ๊ณต: RestDocs ๋ฑ, admin: thymeleaf ๋ฑ, ๋ฐฐ์น ์์ : Spring Batch ๋ฑ- appstore-batch
- appstore-admin
- appstore-apis
- ์๋ก ๋ค๋ฅธ Actor๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ๋๋(SRP ์๋ฐํ์ง ์๋๋ก ํ๊ธฐ ์ํจ)
- creater: ์ฑ์ ๋ง๋๋ ์ฌ๋๋ค์ ์ํ API
- enduser: ์ฑ์ ์ค์น/์ฌ์ฉํ๋ ์ฌ๋๋ค์ ์ํ API
- ๊ธฐํ ๋ฑ
- ์๋ก ๋ค๋ฅธ Actor๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ๋๋(SRP ์๋ฐํ์ง ์๋๋ก ํ๊ธฐ ์ํจ)
- ๊ฐ์ฅ ๋จ์ํ ๊ฒ๋ถํฐ
- ์ ์ค์ผ์ด์ค๊ฐ ๊ณตํต ๋ชจ๋์ ์กด์ฌํ๋ฉด side effect ์๊น
- SRP๋ฅผ ์๋ฐํ๊ธฐ ๋๋ฌธ
(๋ชจ๋ Actor๋ค์ด ์ฌ์ฉํ ์ ์๋ ๊ณตํต ๋ชจ๋์ ๋น์ฆ๋์ค ๋ก์ง์ธ ์ ์ค์ผ์ด์ค๊ฐ ์์ด์) - ์ ์ค์ผ์ด์ค๋ฅผ ๊ณตํต ๋ชจ๋์์ ์ ๊ฑฐํ์ ๋ ์ค๋ณต์ธ ์ฝ๋๋ค์ด ๋ณด์ธ๋ค๋ฉด ์ฐ๋ฐ์ ์ค๋ณต(Actor๊ฐ ๋ค๋ฅด์ง๋ง ์ค๋ณต์ฒ๋ผ ๋ณด์ด๋ ์ฝ๋) ์์ฌ
- ์ฐ๋ฐ์ ์ค๋ณต์ด ์๋ ์ง์ง ์ค๋ณต์ธ ์ฝ๋๋ผ๋ฉด, ์ค๋ณต์ ํ์ฉํ๊ฑฐ๋ ๊ณตํต API๋ฅผ ๋ง๋ค์ด์ ์ฒ๋ฆฌ
- ์ ๋ ์ฝ๋ ๊ณต์ X
- SRP๋ฅผ ์๋ฐํ๊ธฐ ๋๋ฌธ
- ์๋ ๋น ์ค์บ ๋ฐฉ์ ์ฌ์ฉํ์ง ์๊ธฐ
- ComponentScan์ ํตํด ๋น์ ์๋ ๋ฑ๋กํ๋ฉด ์ฌ์ฉ๋์ง ์๋ ๋ชจ๋ ์๋ฒ์์๋ ํด๋น ๋น ์ค์ ์ด ๊ฐ์ ๋จ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฆฌ์์ค ๋ญ๋น - @Enable ์ด๋ ธํ ์ด์ ์ผ๋ก ๋์ ๊ตฌ์ฑ ์์ ์ ํ์ ํตํด ์ธํ๋ผ ๊ตฌ์ฑ ์ ์ด ๊ฐ๋ฅ
- ComponentScan์ ํตํด ๋น์ ์๋ ๋ฑ๋กํ๋ฉด ์ฌ์ฉ๋์ง ์๋ ๋ชจ๋ ์๋ฒ์์๋ ํด๋น ๋น ์ค์ ์ด ๊ฐ์ ๋จ
- ์๊ฒฉํ๊ฒ ๊ณตํต ๋ชจ๋ ๊ด๋ฆฌ
- ์ปดํ์ผ ์ ํ: ์ธ์ด(package-private ๊ฐ์์ฑ ๋ฑ) ๋๋ ๋น๋ ๋๊ตฌ๋ฅผ ํ์ฉํ ์ปดํ์ผ ์ ํ
- ๋น๋ ์ ํ: ๋น๋ ๋๊ตฌ ๋๋ ArchUnit ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ํ์ฉํ ๋น๋ ์ ํ
- ๋จธ์ง ์ ํ: Merge๋ฅผ ์ํ Approve ์ ์ ํ ๋ฑ
- ๊ธฐํ: Github Actions๋ฅผ ์ด์ฉํ ๋ณ๊ฒฝ ๋ชจ๋ ๋ผ๋ฒจ๋ง ๋ฑ
๐ฃ [์ฐ์ํํ ํฌ์ธ๋ฏธ๋] 190829 ์ฐ์ํ๋ฉํฐ๋ชจ๋ by ์ฐ์ํํ์ ๋ค ๊ถ์ฉ๊ทผ๋
- ๋
๋ฆฝ ๋ชจ๋ ๊ณ์ธต(independently available)
- ์์คํ ๊ณผ ๋ฌด๊ดํ๊ฒ ์ด๋์๋ ์ฌ์ฉ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฑ๊ฒฉ์ ๋ชจ๋
- ์์ฒด๋ก์ ๋ ๋ฆฝ์ ์ธ ์ญํ ์ ๊ฐ์ง๋ฉฐ ํ๋ก์ ํธ ๋ด์ ์์กด ๊ด๊ณ๋ฅผ ๋์ง ์์
- ๊ณตํต ๋ชจ๋ ๊ณ์ธต(system core)
- ํ๋์ ํ๋ก์ ํธ์์ ๋ชจ๋ ๋ชจ๋์์ ์ฌ์ฉ๋ ์๋ฐ์ ์๋
- Type, Util ๋ฑ์ ์ ์(๋ง์ด ์ฐ์ด๋ Type ์ฑ๊ฒฉ์ DTO ํน์ ๊ธฐ๋ณธ์ ์ธ Util Class)
- ๊ฐ๋ฅํ๋ฉด ์ฌ์ฉํ์ง ์์
- ๋๋ฉ์ธ ๋ชจ๋ ๊ณ์ธต(system domain)
- ๋ด๋ถ ๋ชจ๋ ๊ณ์ธต๊ณผ ๋น์ทํ ์ฑ๊ฒฉ์ด์ง๋ง, ์ ์ฅ์์ ๋ฐ์ ํ ์ค์ฌ ๋๋ฉ์ธ์ ๋ค๋ฃจ๋ ๊ณ์ธต
- ์๋น์ค ๋น์ฆ๋์ค๋ฅผ ๋ชจ๋ฆ
- ํ๋์ ๋ชจ๋์ ์ต๋ ํ๋์ Infrastructure์ ๋ํ ์ฑ ์๋ง์ ๊ฐ์ง
- ๋๋ฉ์ธ ๋ชจ๋์ ์กฐํฉํ ๋ ํฐ ๋จ์์ ๋๋ฉ์ธ ๋ชจ๋ ์กด์ฌ ๊ฐ๋ฅ
- ๋จ์ผ ์ธํ๋ผ์คํธ๋ญ์ฒ ์ฌ์ฉ ๋ชจ๋
- Domain
- Java ํด๋์ค๋ก ํํ๋ ๋๋ฉ์ธ Class๋ค - Repository
- ๋๋ฉ์ธ CRUD
- ์์คํ ์์ ๊ฐ์ฅ ๋ณดํธ๋ฐ์์ผ ํ๊ณ ๊ฒฌ๊ณ ํด์ผ ํจ
- ๊ตฌํํ๋ ค๋ ๊ธฐ๋ฅ์ด ์ค์ฌ ์ญํ ์ด๋ฉด ๋๋ฉ์ธ ๋ชจ๋, ์๋๋ฉด ์ฌ์ฉ์ ํ๋ ์ธก์์ ์์ฑ - Service
- ๋๋ฉ์ธ์ ๋น์ฆ๋์ค๋ฅผ ์ฑ ์์ง
- ๋๋ฉ์ธ์ ๋น์ฆ๋์ค๊ฐ ๋จ์ํ๋ค๋ฉด ์์ฑ X
- ํธ๋์ญ์ ์ ๋จ์ ์ ์, ์์ฒญ ๋ฐ์ดํฐ ๊ฒ์ฆ, ์ด๋ฒคํธ ๋ฐ์ ๋ฑ ๋๋ฉ์ธ์ ๋น์ฆ๋์ค ์์ฑ
- Domain
- ๋ด๋ถ ๋ชจ๋ ๊ณ์ธต(in system available)
- ์ ์ฅ์, ๋๋ฉ์ธ ์ธ ์์คํ ์์ ํ์ํ ๋ชจ๋๋ค
- ์ ํ๋ฆฌ์ผ์ด์ , ๋๋ฉ์ธ ๋น์ฆ๋์ค๋ฅผ ๋ชจ๋ฆ
- ์ ์ฒด์ ์ธ ์์คํ ์ํฌํธ๋ฅผ ์ํ ๊ธฐ๋ฅ ๋ชจ๋
- ํ๋ก์ ํธ์ ์ด๋ ํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ ๋ฆฝ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋์ด ์์น๋์ด์ผ ํ๋ฏ๋ก ๋๋ฉ์ธ ๊ณ์ธต ์์กด X
- web, client, event-publisher ๋ฑ ์ฒ๋ฆฌ
- ์ ํ๋ฆฌ์ผ์ด์
๋ชจ๋ ๊ณ์ธต(application)
- batch, worker, internal-api, external-api ๋ฑ์ ๋ชจ๋ ์กด์ฌ
- ์ฌ์ฉ์ฑ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ชจ๋ ๊ณ์ธต์ ์์กด์ฑ ์ถ๊ฐํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
'Back-end' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] ๋ด๊ฐ ์ ์ฉํ!!! ๋ฉํฐ ๋ชจ๋ ๊ธฐ์ค (0) | 2024.06.12 |
---|---|
[Gradle] ์๋ฐ ํ๋ฌ๊ทธ์ธ, implementation๊ณผ api์ ์ฐจ์ด (1) | 2024.05.23 |
[JPA] JPA Entity์์์ equals(), hashCode() (0) | 2024.05.16 |
Postman ํ๊ฒฝ๋ณ์ ์๋ ์ธํ (ํ ํฐ๊ฐ ์๋ ์ธํ ) (0) | 2024.05.06 |
[Spring Security] ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ๊ตฌ์ฑ ์์ ์ดํด๋ณด๊ธฐ (0) | 2024.05.02 |