ํ์ฌ์์ ๊ฐ๋ฐํ๋ ๋ฐฉ์์ ์ต์ํด์ง๋ค๋ณด๋ฉด ์ ์ ์ํคํ ์ฒ๋ฅผ ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ด ์จ์ ํ ์ต์ํ ๋ฐฉ์์ ๋ฐ๋ผ ๊ฐ๊ฒ ๋๋ ๊ฒ ๊ฐ์์ ๊ณ์ธตํ ์ํคํ ์ฒ์ ๋ํ ๊ฐ์ธ์ ์ธ ์๊ฐ์ ํ๋ฒ ๋ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
Fat Service ์ง์ํ๊ธฐ
๊ฐ์ฒด์งํฅ์์น์ ๋ฐ๋ฅด๋ฉฐ ๊ณ์ธตํ ์ํคํ ์ฒ๋ก ์์คํ ์ ๊ตฌ์ฑํ ๋, ์๋น์ค๊ฐ ๋ณต์กํด์ง๋ฉด ๋ณต์กํด์ง์๋ก ๊ณ ๋ฏผํด์ผํ ๋ถ๋ถ๋ค์ด ๋ง์์ง๋ค.
๋๋ ๋ณดํต ๊ตฌ์ฑํ ๋ presentation, application, domain, infrastructure๋ก ๋๋๊ณค ํ๋๋ฐ,
์ฌ๊ธฐ์ application(service) ๊ณผ domain ์ DDD ๊ด์ ์์ ๋๋ฉ์ธ ๋ ์ด์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์๋ฅผ ๋ค์ด, MemberService๋ฅผ ๋ง๋ค๊ณ ๊ทธ ์์ ํ์๊ฐ์ , ์ด๋ฉ์ผ ๋ณ๊ฒฝ, ํด๋ฉด ๊ณ์ ์ ํ ๋ฑ member์ ๊ด๋ จ๋ ๋ชจ๋ ์๋น์ค ๋ก์ง์ ๋ฃ๊ฒ ๋๋ฉด ๊ต์ฅํ ์๋น์ค๊ฐ ์ปค์ง๊ณ ๋ณต์กํด์ง ๊ฒ์ด๋ค. MemberService ๊ฐ ์์กดํ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๊ฐ ๋ง์์ง ๋ฟ๋๋ฌ ํน์ ๋ก์ง์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฑฐ๋ํ MemberService๋ฅผ ์ฃผ์ ๋ฐ์์ผํ๋ ๋ค๋ฅธ ์๋น์ค๋ ๋ง์์ง ๊ฒ์ด๋ค.
๋๋ฉ์ธ ์ํฐํฐ๊ฐ ๋๋ถ๋ถ์ ๋น์ฆ๋์ค ๋ก์ง ์ญํ ๊ณผ ์ฑ ์์ ๊ฐ์ ธ๊ฐ๊ฒ ๋๋ฉด ์๋น์ค ๋ฉ์๋ ํ๋๋น ๋ก์ง์ด ๊ฐ๋จํด์ง๊ธฐ ๋๋ฌธ์ ์ด๋์ ๋ ๋์ฒ๊ฐ ๊ฐ๋ฅํ๋ค. Service๋ ๋๋ฉ์ธ์๊ฒ ๋๋ฉ์ธ ๋ก์ง์ ์์ํ๋ ์ญํ ๊ณผ ํธ๋์ญ์ ๊ด๋ฆฌ๋ง ํ ์ ์๋ค.
ํ์ง๋ง ์์ง ํ๋์ ์๋น์ค๊ฐ ๊ฐ์ ธ์ผํ ์ญํ ๊ณผ ์ฑ ์์ด ํฌ๋ค๊ณ ๋๊ปด์ง ๋๊ฐ ์๋ค. ์ด๋ด๋ ๋ณดํต ๋ช ๋ น๊ณผ ์กฐํ๋ฅผ ๋๋์ด XXCommandService, XXQueryService ๋ก ๋๋๊ฑฐ๋ ๊ธฐ๋ฅ ํ๋์ ๋ํ ์ ์ค์ผ์ด์ค๋ณ๋ก Service๋ฅผ ์์ฑํ๊ธฐ๋ ํ๋ค.
๋จ์ํ CRUD ๋ผ๋ฉด ์ผ๋จ ํ๋์ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ๋ค. ๋ค๋ง ์์คํ ๊ธฐ๋ฅ์ ์ผ๋ถ๋ก์ ํฐ ์ ์ค์ผ์ด์ค๋ฅผ ๋ด๋นํ๋ค๋ฉด ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ด์์ ์ด๋ค. ๋ฌผ๋ก ๋ชจ๋ ์ ์ค์ผ์ด์ค์ ๋ํด ์๋น์ค๋ฅผ ์ ๋ถ ๋ถ๋ฆฌํด์ ๋ง๋ค์๋ ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ฆฌ ํ์์ฑ์ ๋๋ ์์ ์ ๋ถ๋ฆฌํด๋ ๋ฆ์ง ์๋ค๊ณ ์๊ฐํ๋ค.
Facade ๋ ๋ฐ๋์ ํ์ํ ๊น?
์์ ์ ์๋น์ค๊ฐ ์๋น์ค๋ฅผ ํธ์ถํ๋ฉด ์๋๋๋ค๋ ์๊ฐ์ ๊ฐ์ง๊ณ ์์๋ค. ๋ ์ด์ด๊ฐ ์ญํ ์ด ๋ช ํํ๋ค๊ณ ์๊ฐํ๊ณ ์๋น์ค๊ฐ ํ ์๋น์ค๋ฅผ ์์กดํ๊ฒ ๋ ๋ ์ฐธ์กฐ ๊ด๊ณ๊ฐ ๋์ค์ ๋ค์์ฌ์ ์ ์ง๋ณด์ํ๊ธฐ ํ๋ค์ด์ง์ง ์์๊น ์๊ฐํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋์ ์ด๋ฐ ๊ฒฝ์ฐ๋ผ๋ฉด Facade๋ฅผ ๋์ ํ๋๊ฒ ๋ง๋ค๊ณ ์๊ฐํ๋ค.
๋ฌผ๋ก ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๊ฒฝ๊ณํ๊ณ ์กฐ์ฌํด์ผํ๋ ๊ฒ์ ๋ง์ง๋ง ์ต๊ทผ์ ๋๋ ์๊ฐ์ ์ ์ค์ผ์ด์ค ํ๋์ ๋ํด ์ค์ํ ๋ก์ง์ ์ ๋ถ ์๋น์ค์ ์๋๊ฒ ๋ง๊ณ ํ๋์ ์๋น์ค๊ฐ ํ ์๋น์ค๋ฅผ ์ฐธ์กฐํด์ ํธ์ถํด๋ ๋๋ค๊ณ ์๊ฐํ๋ค. ์ ์ค์ผ์ด์ค๊ฐ ๋ณต์กํ๋ค๋ฉด ์ญํ ๊ณผ ์ฑ ์์ ๋ฐ๋ผ ์ด๋ค ๋ก์ง์ ๋ค๋ฅธ ์๋น์ค์ ์์ ๊ฒ์ด๊ณ ๊ทธ๊ฑธ ๋ฌถ์ด์ ํ๋์ ์ ์ค์ผ์ด์ค๊ฐ ๋๋ ์๋น์ค๊ฐ ์กด์ฌํ ๊ฒ์ด๋ค. ํ์ฌ๋๋ ์ ์ค์ผ์ด์ค์ ํต์ฌ ๋ก์ง์ด ์๋ ๊ทธ ์ธ ๊ฐ์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด๋ฉด ์๋๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ์์ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ๋ค.
๋ณํ์ ๋์ํ๊ธฐ ์ฉ์ดํ, ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ๊ฐ๊ธฐ
๊ฐ์ฒด์งํฅ์์น์ ๊ณ ๋ คํด์ ์ค๊ณํด์ผํ๋ ์ด์ ๊ฐ ๋ฌด์์ผ๊น? ์์งํ ์ด๋ ์๊ฐ๋ถํฐ๋ ๋ด๊ฐ ์ ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๋ฅผ ์งํฅํ๊ณ ์๋๊ฐ์ ๋ํด ์๊ฐ์ ํ์ง ์์๋ค. ์ ๋ฌด๋ฅผ ํ๋ค๋ณด๋ฉด ์๊ตฌ์ฌํญ์ด ๋น ๋ฅด๊ฒ ๋ณํํ๊ธฐ๋ ํ๊ณ ์ด์ ์ง ์ฝ๋๊ฐ ์ค๋ ๋ ๊ฑฐ์๊ฐ ๋๊ธฐ๋ ํ๋ค. ์ ์์ผ ๊ฐ๋ฐ ์ ์ธ์์๋ ์ด์ผ๊ธฐํ๋ฏ์ด ๊ณํ์ ๋ฐ๋ฅด๊ธฐ๋ณด๋ค๋ ๋ณํ์ ๋์ํ๋ ๊ฒ์ด ๋ ์ค์ํ๋ค.
๋ณ๊ฒฝ๊ณผ ํ์ฅ์ ์ฉ์ดํ ์ค๊ณ๋ฅผ ์ํด์๋ OCP, DIP ๋ฅผ ์งํค๋ ๊ฒ์ด ์ค์ํ๊ณ ๊ฐ์ฒด์ ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ ํ์์ฑ์ด ์๋ค.
์ธํฐํ์ด์ค๋ฅผ ์ ์ค๊ณํ๋ฉด ํด๋ผ์ด์ธํธ์ ๋ณ๊ฒฝ ์์ด ํ์ฅ์ ์ฉ์ดํ ๊ตฌ์กฐ๊ฐ ๋๋ค. ์์ผ๋ก ํจ๊ป ์ฝ๋๋ฅผ ๋๋ฒจ๋กญํด๋๊ฐ์ผํ ํ๊ณผ ๋๋ฅผ ์ํด ๊ธฐ์ด๋ฅผ ํผํผํ ํ๋ ๊ฒ์ด๋ค.
๋ฒ์ธ) ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ
์ด์ ํ์ฌ์์๋ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ฅผ ์ผ์๊ณ ํ ํ์ฌ์์๋ ๊ณ์ธตํ ์ํคํ ์ฒ๋ฅผ ์ฐ๊ณ ์๋ค. ๋ ๋ค DDD๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ง๋ง JPA ๋ฅผ ์ฐ๋ ํ๊ฒฝ์ด๋ผ๋ฉด ๋๋ฉ์ธ ๋ก์ง๊ณผ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด์๊ธฐ ๋๋ฌธ์ ๋๋ฉ์ธ ์ํฐํฐ์ ์์์ฑ ์ํฐํฐ๋ฅผ ๋ถ๋ฆฌํ์ง ์๋ ์ด์ ํฌํธ์ ์ด๋ํฐ๋ก ๋บ๋งํ ๋ก์ง๋ค์ด ๋ง์ด ์๋ค๊ณ ๋๊ผ๋ค.
์ด์ ํ์ฌ์์๋ WebFlux + R2dbc ๋ฅผ ์ฌ์ฉํ์๋๋งํผ JPA์ ๊ฐ์ด ORM ๊ฐ๊ฒฐํฉ์ด ์์์ด์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ฅผ ๋์ ํ์ ๋์ ์ฅ์ ์ด ๋ช ํํ๋ค. ๋๋ฉ์ธ ์ํฐํฐ๋ฅผ ๋ณ๋๋ก ๋ถ๋ฆฌํ๊ณ ์์์ฑ, ์ธ๋ถ ํต์ ๊ณผ ๊ฐ์ ๋ก์ง์ ํฌํธ๋ผ๋ ์ธํฐํ์ด์ค๋ก ๋ถ๋ฆฌํด์ ์ฑ ์์ ์์ํ์์ ๋ ์๋น์ค ๋ก์ง์ด ๊ฐ๋จํด์ง๊ณ ๋ ๋ค๋ฅธ ๊ตฌํ์ฒด๋ก ๊ฐ์๋ผ์ฐ๊ธฐ๋ ์ฉ์ดํ๋ค.
๊ธฐ์ ๊ณผ ๊ตฌ์กฐ ๊ฐ ๊ถํฉ๋ ์ค์ํ ๊ฒ ๊ฐ๊ณ ํฅ์ฌ๊ณ ๋ ์ ๋์ ํ์ ๋ ์ถ์ํ, ๋๋ฉ์ธ ๋ณํ ๋น์ฉ ๋ฑ ํธ๋ ์ด๋ ์คํ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ฃผ์ด์ง ํ๊ฒฝ์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅธ ์ ํ์ด ํ์ํ๋ค๊ณ ์๊ฐํ๋ค. (ํฅ์ฌ๊ณ ๋ ์ด๋ผ๊ณ ํด์ ๋ฌด์กฐ๊ฑด ๋๋ฉ์ธ ์ํฐํฐ์ ์์์ฑ ์ํฐํฐ๋ฅผ ๋ถ๋ฆฌํด์ผํ๋ค๊ณ ์๊ฐํ์ง๋ ์๋๋ค.)
'BACKEND' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ถ์ฐํ๊ฒฝ์ RabbitMQ ์ ์ฉํ๊ธฐ (0) | 2024.01.05 |
---|---|
TDD, ํด๋ฆฐ ์ฝ๋ with Kotlin 6๊ธฐ ๋ธ๋์ญ ํผ๋๋ฐฑ (0) | 2023.07.24 |
TDD, ํด๋ฆฐ ์ฝ๋ with Kotlin 6๊ธฐ ๋ก๋ ํผ๋๋ฐฑ (0) | 2023.07.24 |
TDD, ํด๋ฆฐ ์ฝ๋ with Kotlin 6๊ธฐ ์๋์ฐจ ๊ฒฝ์ฃผ ํผ๋๋ฐฑ (0) | 2023.07.24 |
๋ ์ด์ ์ค์ํ์ง ์๊ธฐ ์ํด ์ ์ด๋ณด๋ ๋ฆฌํฉํฐ๋ง ๋ฐฉ๋ฒ (0) | 2023.07.09 |