meet-coder-study / get-your-hands-dirty-on-clean-architecture Goto Github PK
View Code? Open in Web Editor NEW๐ ๋ง๋ค๋ฉด์ ๋ฐฐ์ฐ๋ ํด๋ฆฐ ์ํคํ ์ฒ : ์๋ฐ ์ฝ๋๋ก ๊ตฌํํ๋ ํด๋ฆฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ ์คํฐ๋
๐ ๋ง๋ค๋ฉด์ ๋ฐฐ์ฐ๋ ํด๋ฆฐ ์ํคํ ์ฒ : ์๋ฐ ์ฝ๋๋ก ๊ตฌํํ๋ ํด๋ฆฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ ์คํฐ๋
Q1.
์์์ฑ ์ด๋ํฐ ํ
์คํธ๋ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋์์ผ๋ก ์งํํด์ผ ํ๋ค. Testcontainers ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ํ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋์ปค ์ปจํ
์ด๋์ ๋์ธ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ธก๋ฉด์์ ์์ฃผ ์ ์ฉํ๋ค.
Testcontainers ์ฌ์ฉํด๋ณด์ ๋ถ๋ค ์์๊น์? ๋ค๋ฅธ ๋ถ๋ค์ ์์์ฑ ์ด๋ํฐ ํ ์คํธํ ๋ ์ด๋ค์์ผ๋ก ํ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ฑ ๋ด์ฉ
์ง๋ฌธ
์ฑ ๋ด์ฉ
์๋ฌธ์
์ง๋ฌธ
์ฑ ์์๋ ์ํฐํฉํธ ๋ถ๋ฆฌ๋ก ์ธํด ์๋ง์ ์ฅ์ ์ด ์์ง๋ง ์ ์ง๋ณด์ํ๋ ๋น์ฉ๋ ๊ทธ์ ๋ฐ๋ผ ์ฆ๊ฐํ๋ค๊ณ ํฉ๋๋ค.
์ค์ ๋ก ์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ํฐํฉํธ๋ฅผ ๋ถ๋ฆฌํ๋ค๊ฐ ๊ฐ๊ฐ์ ์ํฐํฉํธ๋ฅผ ๋ฐ๋ก ๋ฒ์ ๊ด๋ฆฌํ๋๋ผ ์๋ฅผ ๋ง์ด ๋จน์๋ ๊ธฐ์ต์ด ๋๋๋ฐ์
๊ณผ์ฐ ์ํฐํฉํธ ๋ถ๋ฆฌ๋ ์ด๋ ์ ๋๊ฐ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ์๋์?
๋ค๋ค ํ์ฌ๋ ํ ๋ด ์ ์ฑ ๊ฐ์ ๊ฒ์ด ์๋์?
์ง๋ฌธ
๋ค๋ค Gradle ๋ฉํฐ๋ชจ๋์ ์ฌ์ฉํ์๋์? Gradle ๋ฉํฐ๋ชจ๋์์ ์ฌ๋ฌ ์๋ฒ๊ตฐ์ ๋๋ ๊ฒฝ์ฐ์๋ application ๋ ์ด์ด์์ ์ ์๋ฒ๊ตฐ์ ํด๋นํ๋ ๋ชจ๋ UseCase๊ฐ ๊ตฌํ๋๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ๋ชจ๋ ์๋ฒ๊ตฐ์ ์ด๋ํฐ ๊ตฌํ์ฒด๋ฅผ ์กฐ๋ฆฝํด์ผํ๋๋ผ๊ตฌ์..
๊ทธ๋์ application์ port๋ฅผ ๋ณ๋ ๋ชจ๋๋ก ๋นผ๋ด๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋๋ฐ ํน์ ์ข์ ์์ด๋์ด ์์ผ์ ๋ถ ์์๊น์?
์ง๋ฌธ
๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
์ ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์์ ์ ์๊ฐ ๋งํ๋ฏ์ด ๊ฒฐ๊ตญ ์์์ฑ ์์ญ์ ์ธ์ ํธ๋์ญ์
์ ์ด๊ณ ๋ซ์์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ์ ์ ํ๋ฆฌ์ผ์ด์
์์ญ์์ @Transactional
์ ์ฌ์ฉํ ์ ๋ฐ์ ์๋ค๊ณ ์๊ฐํ๋๋ฐ์.
์ ์๋ ๋ง์ง๋ง์ AspectJ๋ฅผ ํ์ฉํด์ ์ ํ๋ฆฌ์ผ์ด์
์์ญ์ @Transactional
์ ์์จ ์ ์๋ค๊ณ ํ๋ค์. ์ด๋ป๊ฒ ํ ์ ์์์ง ๊ฐ์ด ์์ค๋๋ฐ ํน์ ๊ฐ์ค์๋ ๋ถ ๊ณ์ค๊น์? ์๋๋ฉด ์ ์๊ฐ ์ฝํ๋ ๊ฑธ๊น์?
5์ฅ์์ ์ ์๋ ์ปจํธ๋กค๋ฌ์ ๋ํด์๋ UseCase์ ์ด๋ฆ์ ๋ง์ถฐ์ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ์ ํธํ๊ณ ์๋๋ฐ์.
์ด๋ ๊ฒ ๋๋ฉด ์ฌ์ค์ ์ปจํธ๋กค๋ฌ - UseCase๊ฐ 1:1์ธ ์ํ๊ฐ ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ์. ํด๋์ค๋ฅผ ์๊ฒ ์ชผ๊ฐ ๋ค๋ ์ ์์ ์ข์๋ณด์ด๊ธด ํ์ง๋ง ๊ทธ๋งํผ ๊ด๋ฆฌํด์ผํ ํด๋์ค๊ฐ ๋๋ฌด ๋ง์์ง๋ ๊ฒ์ผ๋ก๋ ๋ณด์ฌ์์.
๋๋ฉ์ธ ๋ณ๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ๊ตฌ์ฑํ๋ฉด ์ด๋จ๊น ์ถ๊ธฐ๋ ํ๋ฐ ์ด๋ป๊ฒ ์๊ฐํ์๋์?
์ํคํ
์ฒ๋ฅผ ์ฌ๋ฌ๊ฐ์ ๋ถ๋ฆฌ๋ ๋น๋ ์ํฐํฉํธ๋ก ๋๋๋ ๋ถ๋ถ์ด ๋์ค๋๋ฐ
MSA๋ ๋น์ทํ ์๋ฏธ๋ก ๋๊ปด์ง๋๋ฐ.... ๊ฐ์ ์๋ฏธ๋ก ๋ด๋ ๋ ๊น์?
์ง๋ฌธ
์ ๋ ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ์ ๋ํด์ DDD Lite@Spring session ์์ ์ฒ์ ์ ํ์๋๋ฐ์. ์์ง ํ์ฌ ํ๋ก์ ํธ์ค์๋ ๊ฒช์ด๋ณด์ง ๋ชปํ๋ค์. ๊ทธ๋งํผ ๋ฐ๋์ปค๋ธ์ ๋น์ฉ์ด ๋ง์ด ๋๋ ๋ฌธ์ ์ผ๊บผ๋ผ ์๊ฐํด์
DTO
VO
Entity
Req/Res Param
๋ค๋ฅธ ๋ถ๋ค์ ๊ฐ ๋ ์ด์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ์์ผ๋ก ๋๋์๊ณ , ์ด๋ค ๋ช ์นญ์ผ๋ก ์ฌ์ฉํ๊ณ ๊ณ์ ์ง ๊ถ๊ธํฉ๋๋ค.
๋ณด๋ค๊ฐ ๊ถ๊ธํด์ง ๋ด์ฉ์ด ์๋๋ฐ, ์ฌ๊ธฐ์๋ Entity๋ฅผ ๋ค ๋ถ๋ฆฌํด์ ์ฌ์ฉํ๊ณ ์๋๋ฐ์.
QueryDSL์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์์์ฑ ์ด๋ํฐ๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํ๊ฒ ๋ ์ง ์กฐ๊ธ ๊ถ๊ธํ๊ฒ ๋์์ต๋๋ค.
ํน์, ์ด๋ป๊ฒ ์ฌ์ฉํ๋ฉด ์ข์์ง ์ค๋ช
ํด์ฃผ์ค๋ถ์ด ์๋์ ใ
ใ
์ฑ ์์ ์คํ๋ง Bean ์์ฑ ๋ฐฉ๋ฒ์ผ๋ก ํฌ๊ฒ ๋๊ฐ์ง๊ฐ ๋์ต๋๋ค.
๊ฐ์ ์ ํธํ์๋ ์คํ์ผ์ด ์๋์ง? ๊ทธ ์ด์ ๋ฅผ ๋ฃ๊ณ ์ถ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ฌ์์ ํ๋ณ๋ก ํด๋น ๊ด๋ จ๋ ์ ์ฑ
๊ฐ์ ๊ฒ๋ค์ด ์๋์ง๋ ๊ถ๊ธํฉ๋๋ค.
ํ๋ถํ ๋๋ฉ์ธ ๋ชจ๋ธ vs ๋น์ฝํ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ณด๊ณ ์ ์ ์ ํ ์์ด์ ์ฐ๊ณ ์๋๊ฑธ ํ์ธํ๋๋ฐ์. ๋ค๋ฅธ๋ถ๋ค์ ์ด๋ ์ ๊ฐ์??
(๋น์ฝํ ๋๋ฉ์ธ ๋ชจ๋ธ์ transaction script ๋ฅผ ์ค๋ช
ํ ๊ฒ ๊ฐ์๋ฐ ์ดํดํ๊ฒ ๋ง์๊น์??)
์ ํจ์ฑ ๊ฒ์ฌ๋ถ๋ถ ์ฝ์ผ๋ฉด์ Service layer ์์ @Valid ๋ฅผ ์ฌ์ฉํ ์ ์์๊น? ์ฐพ์๋ณด๋ ์ด๋ฐ ๊ธ์ด ์๋ค์
(https://meetup.toast.com/posts/223)
bean ์ฃผ์ ๋ฐฉ๋ฒ ์ค์ XML ํ์ ๋ ์๋๋ฐ ์จ๋ณด์ ๋ถ ๊ณ์ค๊น์? ์ฑ ์ ์๋์ค๋๊ฑฐ๋ณด๋ฉด old ํ ๋ฐฉ์์ธ๊ฑธ๊น์?
์น์ด๋ํฐ์์ client ์ ์ ๋ ฅ์ requestbody ๋ก ๋ฐ์๋ค๊ณ ํ๊ณ requestModel ์ ๋ง๋ค์์ต๋๋ค. ์ดํ application ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ๊ธฐ์ํด requestCommand ๋ผ๋ model ์ ๋ ๋ง๋๋๊ฒ ๋ง๋๊ฑธ๊น์? ์ฑ ์ ์ฝ๋ค๋ณด๋ web ๊ณผ application ์ model ์ ๋ค๋ฅด๊ฒ ๊ฐ์ ธ๊ฐ๋๊ฒ ๊ฐ์๋ฐ ๋นํจ์จ์ด ๋ฐ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. (์์ ์์๋ ์ด๋ถ๋ถ์ ์ถฉ๋ถํ ํํํด์ฃผ์ง ๋ชปํ๊ณ ์๋ค์ ใ )
๊ณต๋ถํ๋ค๋ณด๋๊น ์ฌ์ค layered ์ hexagonal ์ด ํฌ๊ฒ ์ฐจ์ด์ ์ด ์๋๊ฒ ๊ฐ์ต๋๋ค. ์ฝ๊ฒ ์๊ฐํ์ ํ๊ณ ๋ด๋ ค๋ค ๋ณด๋๊น ๊ฒฐ๊ตญ์ ๋๋ค application ์ ๋ณดํธํ๋๊ฑด ๊ฐ์ ๋งฅ๋ฝ์ธ๊ฒ ๊ฐ๋๋ผ๊ณ ์. ๋จ hexagonal ์ port ๋ฅผ interface ๋ก ๊ฐ์ ํํด์ ํ๋ก์ ํธ ๋ฉ์น๊ฐ ํฌ๋๋ผ๋ ํญ์ ๊ฐ์ ํจํด์ ์ ์งํ๊ฒ๋ ํ๋ค๋ ์ด์ ์ด ์๋๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ๋๋ค! ์ด ๋ถ๋ถ์ ๋ํด์ ์ด์ผ๊ธฐํด ๋ณด๊ณ ์ถ์ด์
์ด๊ฑด ์กฐ๊ธ ๋ค๋ฅธ ์ฃผ์ ์ธ๋ฐ ๋ฌธ๋ ๊ถ๊ธํด์ ์ง๋ฌธ๋๋ ค๋ณด์์. ์๋ก๋ค๋ฅธ domain ์ service ์์ ๋ค๋ฅธ domain ์ ๋ณด๊ฐ ํ์ํ ๋, ์๋ฅผ ๋ค๋ฉด article ์์ ๊ธ์ ์ฐ๊ธฐ์ํด user ์ ๋ณด๊ฐ ํ์ํ ๋ user ์ repository ์ ์ง์ ์ ๊ทผํ์ง ์๊ณ , user ์ service layer ์์ ๊ฐ์ ๊ฐ์ ธ์์ผ ํ๋ค๊ณ ์๊ฐํ๋๋ฐ ์ด๋ ๊ฒ ๋๋ค๋ฉด ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ด๋ จ์ด ์๋ ๋ฉ์๋๊ฐ ์์ฑ๋๊ฒ ๋ฉ๋๋ค. ์ด์๊ฐ์ ๋ฉ์๋๋ ์ด๋์ ์์นํ๋๊ฒ ๋ง๊ณ , ์ด๋ค ์ด๋ฆ์ผ๋ก ๋ง๋ค์ด์ ธ์ผ ํ ๊น์? (์ต๋ฒ๊ท ๋์ DDD start ์ ์ธ๊ธ๋ ๋ด์ฉ domainService)
์์์ฑ ๊ณ์ธต์ ์ ํด๋ณธ์ ์ด ์์ด ์ง๋ฌธ์ ํ๊ธฐ ์ด๋ ต๋ค์ ใ
;;
์์์ฑ ๊ณ์ธต์ jpaEntity ์ Repository ์ฝ๋๋ณด๋ฉด์ ์ด๋ ๊ฒ ์ฟผ๋ฆฌ ๋ ๋ฆฌ๋ ๊ตฌ๋.. ์๊ฒ๋์์ต๋๋ค ใ
ใ
ํ ๋ด์์ ์ปจ๋ฒค์
์ ์ ํ ๋ ๋งคํ์ ์ฐฌ์ฑํ๋ ๊ฐ๋ฐ์ vs ๋งคํ์ ๋ฐ๋ํ๋ ๊ฐ๋ฐ์์ ๋
ผ์์ ํ๋ ์ ์ด ์์ต๋๋ค.
๋น์์๋ ๋ ์ค ํ๋๋ง์ด ํ๋ด ์ ์ฑ
์ด ๋์ด ๊ณตํต์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ์ข์ง ์๋ ์๊ฐํ๋๋ฐ ์ด๋ฒ ์ฅ์ ์ฝ์ผ๋ฉด์ ๋ฐ์ฑ์ ๋ง์ด ํ์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋ค๋ฅธ ๋ถ๋ค์ ํ ๋ณ ๋งคํ ์ ๋ต์ด ์๋์ง ๊ถ๊ธํ๋ค์.
[์ง๋ฌธ]
์์กด์ฑ์ ์์ชฝ ์ฝ๋๋ฅผ ๋ชจ๋ ์ ์ดํ ์ ์์ ๋๋ง ์์กด์ฑ์ ์ญ์ ์ํฌ ์ ์๋ค. ๋ง์ฝ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กด์ฑ์ด ์๋ค๋ฉด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ ์์กด์ฑ์ ์ญ์ ์ํฌ ์ ์๋ค.
์ค๋ฆฝ์ ์ธ ์์กด์ฑ ์ฃผ์
์ปดํฌ๋ํธ
์ ์์๋ก ์ด๊ธฐํ๋ฅผ ๋ด๋นํ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ค์๋๋ฐ ์ค๋ฆฝ์ ์ธ ์์กด์ฑ ์ฃผ์
์ปดํฌ๋ํธ
๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ ๋ค๋ฅธ ์์๋ ๋ฌด์์ด ์์์ง ๊ถ๊ธํฉ๋๋ค. ์ฌ์ฉํ๋ ์ฌ๋ก๋ค๋ ๊ถ๊ธํ๊ตฌ์.ํด๋์ค๋ง๋ค ์ฝ๋๋ ์ ์ ์๋ก ์ข๋ค. ์ฝ๋๊ฐ ์ ์ผ๋ฉด ํ์ ํ๋ ๊ฒ์ ๋์ด๋๊ฐ ๋ฎ์์ง๋ค.
๋ชจ๋ ์ฐ์ฐ์ ๋จ์ผ ์ปจํธ๋กค๋ฌ์ ๋ฃ๋ ๊ฒ์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ฌํ์ฉ์ ์ด์งํ๋ค๋ ๋ฐ ์๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ ์ข์๊น? ํท๊ฐ๋ฆผ๋ง ๊ฐ์ง๊ฒ ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์, ๊ฐ ์ฐ์ฐ์ ๋ํด ๊ฐ๊ธ์ ์ด๋ฉด ๋ณ๋์ ํจํค์ง ์์ ๋ณ๋์ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค๋ฉฐ ๊ฐ๊ธ์ ๋ฉ์๋์ ํด๋์ค๋ช ์ ์ ์ค์ผ์ด์ค๋ฅผ ์ต๋ํ ๋ฐ์ํด์ ์ง์ด์ผ ํ๋ค. ์๋ก ๋ค๋ฅธ ์ฐ์ฐ์ ๋ํ ๋์ ์์ ์ด ์ฌ์์ง๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ์ฅ์ ์ด๋ค.
์ฑ ์์๋ ์์๊ฐ์ด, ์ปจํธ๋กค๋ฌ๋ฅผ ๋๋๋ ์์ ์ ์ด์ผ๊ธฐ ํฉ๋๋ค. ์ ๋ ์๋น์ค๋ ๊ทธ๋ ๊ณ ์ปจํธ๋กค๋ฌ๋ ๊ทธ๋ ๊ณ , ๊ฐ๋จํ CRUD๋ ํ๊ณณ์ ๋ชจ์๋๊ณ , ๊ทธ ์ธ์ ์ธ ์ ์ฆ์ผ์ด์ค๊ฐ ์๊ธธ๋, ๋ถ๋ฆฌํ๋๊ฒ ์ข๋ค๊ณ ์๊ฐ์ด ๋๋๋ฐ์. ๋ํ ์ ์ฆ์ผ์ด์ค๊ฐ ์ฐ๊ด์ด ์๋ค๋ฉด (์๋ฅผ๋ค๋ฉด, ํ์๊ฐ์ , ๋ก๊ทธ์ธ) ๋ฌถ๋๊ฒ ๋ ์ข๋ค๊ณ ์๊ฐ์ด ๋ค์ด์.
์ฌ๋ฌ๋ถ๋ค์ ์ด ๋ถ๋ถ์ผ ๋ดค์๋ ์ด๋ป๊ฒ ๋๊ผ๋์ง ๊ถ๊ธํฉ๋๋ค :)
๋ฑํ ์ง๋ฌธํ ๊ฒ ์๋ค์...
๋ค๋ฅธ ๋ถ๋ค์ ํ์ ์์ ์ด๋์ ๋๋ก ๊ณ์ธต ๊ฐ ๋งคํ์ ํ์ฉํ์๋์ง ๊ถ๊ธํ๋ค์.
์ ๋ Gradle ๋ชจ๋ ์ค์ ์ผ๋ก ๊ฒฝ๊ณ๋ฅผ ์ชผ๊ฐ์ ์์ ์๋ชป๋ ๋ฐฉํฅ์ผ๋ก (์๋ฅผ๋ค์ด ๋๋ฉ์ธ์์ ์๋น์ค(UseCase)๋ฅผ ์ฌ์ฉ) ์ ๊ทผํ๋ ๊ฒ์ ๋ง๋ ๊ฒ์ด ๊ฐ์ฅ ์ต์ ์ด๋ผ๊ณ ์๊ฐํ์๋๋ฐ์. ๋ค๋ง, ๋ชจ๋์ด ํจํค์ง๋ ์๋๋ผ์ ArchUnit๊ณผ ํจ๊ป ์ฒดํฌ๋ฅผ ํด์ฃผ๋๊ฒ ์ข์๊ฑฐ ๊ฐ๋ค๊ณ ์๊ฐ์ด ๋ค์์ด์.
๋ค๋ฅธ๋ถ๋ค์ด ์๊ฐํ์๋ ์ต์ ์ ๋ฐฉ์์ ์ด๋ค๊ฑธ๊น์?
p.30 ์ฒซ๋ฒ์งธ ๋จ๋ฝ์ ๋ณด๋ฉด
"ํด๋ฆฐ ์ํคํ
์ฒ์ ๊ฐ์ฅ ๋ณธ์ง์ ์ธ ์๊ฑด์ 2์ฅ์์ ๋ฐฐ์ ๋ฏ์ด ์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต์ด ์ธ์ปค๋ฐ/์์๊ณ ์ ์ด๋ํฐ์ ์์กด์ฑ์ ๊ฐ์ง ์๋ ๊ฒ์ด๋ค.
์์ ์ฝ๋์ ์น ์ด๋ํฐ์ ๊ฐ์ด ์ธ์ปค๋ฐ ์ด๋ํฐ์ ๋ํด์๋ ๊ทธ๋ ๊ฒ ํ๊ธฐ๊ฐ ์ฝ๋ค. ์ ์ด ํ๋ฆ์ ๋ฐฉํฅ์ด ์ด๋ํฐ์ ๋๋ฉ์ธ ์ฝ๋๊ฐ์ ์์กด์ฑ ๋ฐฉํฅ๊ณผ ๊ฐ์ ๋ฐฉํฅ์ด๊ธฐ ๋๋ฌธ์ด๋ค."
์ด ๋ด์ฉ์ด ์ ์ดํด๊ฐ ์๋๋๋ฐ ์ค๋ช ์ข ํด์ฃผ์ค๋ถ?
ํ์ฌ admin์ฝ๋์์๋ ์ฑ ์์ ๋งํ ์ง๋ฆ๊ธธ์ ์ฌ์ฉํ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํด์ผ ํ๋ ์ผ์ด์ค๋ค์ด ์์ ์์์ต๋๋ค. (๋๋ฉ์ธ ์ํฐํฐ๋ฅผ ์ ์ถ๋ ฅ ๋ชจ๋ธ๋ก ์ฌ์ฉํ๊ฑฐ๋, ์ปจํธ๋กค๋ฌ ๋จ์์ ์๋น์ค๋ฅผ ํธ์ถํ์ง ์๊ณ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ํธ์ถํ๋ ์ผ์ด์ค)
์ฒ์์ ๋ดค์ ๋์๋ ๋ ๊ฑฐ์๋ผ๊ณ ๋ง ์๊ฐํ๋๋ฐ, ์ง๊ธ ๋์ด์ผ๋ณด๋ฉด ๊ฒฐ๊ตญ ์ฒ์์๋ ํด๋น ์ฝ๋๋ค๋ ๋จ์ CRUD๋ง ํ๋ ์ฝ๋์ด๊ณ , admin ์์์ฑ ๊ณ์ธต๊ณผ ์ด๋ํฐ ๊ณ์ธต์์ ์ฌ์ฉํ๋ ๋ชจ๋ธ์ด ์ผ์นํ๋ ์ผ์ด์ค๊ฐ ๋ง์ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์ฝ๋๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ง๋ฆ๊ธธ์ ํํ์ง ์๋ ์ถ์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก๋ ์ด๋ฐ ์ผ์ด์ค๋ ํ์ฅ๋๋ ์ผ์ด์ค๋ฅผ ๋ง์ด ๋ด์ ์ถ๊ฐ ๊ธฐํ์ผ๋ก ์์ ํ ์ผ์ด ์๊ธฐ๋ฉด ์ด๋ฐ ์ฝ๋๋ฅผ ๋ณผ ๋๋ง๋ค ์๋น์ค ๋ฐ๋ก ๋นผ๋ด๊ณ ๊ฐ๋ฅํ๋ฉด ๊ฐ์ฒด๋ ๋ถ๋ฆฌํ๊ณ ์์์ต๋๋ค๋ง, ๋ค๋ฅธ ๋ถ๋ค์ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ด๋ฐ ์ฝ๋๋ค์ ๋ฆฌํฉํ ๋งํ๋์ง ๊ถ๊ธํ๋ค์. (ํน์ ๋ฆฌํฉํ ๋ง์ ํ์ง ์๊ณ ๋๋๋์ง)
์ฑ
์์๋ ์ปจํธ๋กค๋ฌ๋ ๋๋ฌด ์ ์ ๊ฒ๋ณด๋ค ๋๋ฌด ๋ง์ ๊ฒ ๋ซ๋ค.
๋ผ๊ณ ์ฑ
์์ ํํํ๊ณ ์์ต๋๋ค. (p57)
ํด๋น ๋ด์ฉ์ ์ฝ๋ค๊ฐ ์๋์ ๊ฐ์ ๊ถ๊ธ์ฆ์ด ์๊ฒจ ๋จ๊ฒจ๋ก๋๋ค.
๊ฐ๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ค๊ฐ ํ๋์ ์ปจํธ๋กค๋ฌ์์ ๋๋ฌด ๋ง์ ์ฑ
์์ ๊ฐ์ง๊ณ ์์ ๋ ์ชผ๊ฐ์ด ๊ฐ๋ฐํ๊ธฐ๋ ํ๋๋ฐ, ๊ทธ๋๋ง๋ค ์ด๊ฑธ ์ชผ๊ฐ๋ ๊ฒ์ด ์ข์์ง ํ๋๋ก ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ์ข์์ง ๊ณ ๋ฏผํ ๋๊ฐ ์์ต๋๋ค.
๋ค๋ฅธ ๋ถ๋ค์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ด๋ ์ ๋์ ํฌ๊ธฐ๋ก ๋ง๋๋์ง ๊ถ๊ธํฉ๋๋ค.
๋น์ทํ ๊ตฌ์กฐ์ ์๋น์ค์์ (์์ฒญ๊ณผ ์๋ต์ type ๊ฐ์ผ๋ก ๋ถ๋ฆฌํด์ ๋์ผํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ๊ฐ ์ ์๋ ๊ฒฝ์ฐ) ์ปจํธ๋กค๋ฌ๋ ํ๋๋ก ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ์ข์๊น์, ๊ฐ ํ์ ๋ณ๋ก ๋๋์ด์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ์ข์๊น์?
105 ํ์ด์ง์ "๋ณ๊ฒฝ ์ ์ค์ผ์ด์ค"๋ ๋ง์ด ๋์ค๋๋ฐ ์ด๊ฒ ์ด๋ค ๊ฑด๊ฐ์?
๋ณดํต ํ ์คํธ ์ฝ๋๋ ๋ ์ถ์์ ์ด๋ผ์ ํ๋ก๋์ ์ฝ๋์ ๋นํด ํ์ ํ๊ธฐ๊ฐ ์ด๋ ค์ธ ๋๊ฐ ๋ง๋ค. ๋ฐ๋ผ์ ํน์ ํ๋ก๋์ ์ฝ๋์ ํด๋นํ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์ฐพ๊ธฐ ์ด๋ ต๋ค.
๋ผ๋ ๊ธ์ด ์์๋๋ฐ ํ ์คํธ ์ฝ๋๊ฐ ํ๋ก๋์ ์ฝ๋์ ๋นํด ์ถ์์ ์ด๋ค ๋ผ๋ ๋ง์ ๊ตฌํ์ด ์์ด์ ๊ทธ๋ ๊ฒ ๋งํ๊ฑฐ๊ฒ ์ฃ ? ํ ์คํธ ์ฝ๋๋ ํ์ ํ๊ธฐ ํ๋ค๊ฑฐ๋ ์ฝ๊ธฐ ํ๋ค๋ฉด ์๋๋ค๊ณ ์๊ฐํด์์. ๊ทธ๋ฆฌ๊ณ ๋น์ฐํ ํ๋ก๋์ ์ฝ๋๋ณด๋ค ํ์ ํ๊ธฐ๋ ์ฌ์์ผ ํ๋ค๊ณ ์๊ฐํด์..
ํ๋ถํ ๋๋ฉ์ธ ๋ชจ๋ธ vs ๋น์ฝํ ๋๋ฉ์ธ ๋ชจ๋ธ ์ด๋ค๊ฑธ ๋ง์ด ์ ํธํ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ฑ
์์ ๋น์ฝํ ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช
ํ๋๋ฐ
์ผ๋ฐ์ ์ผ๋ก ์ํฐํฐ๋ ์ํ๋ฅผ ํํํ๋ ํ๋์ ์ด ๊ฐ์ ์ฝ๊ณ ๋ฐ๊พธ๊ธฐ ์ํ getter, setter ๋ฉ์๋๋ง ํฌํจํ๊ณ ์ด๋ค ๋๋ฉ์ธ ๋ก์ง๋ ๊ฐ์ง๊ณ ์์ง ์๋ค.
์๊ฒ ์๋ฃ ๊ตฌ์กฐ์ฒด์ ํํ(DTO)๋ฅผ ๋งํ๋๊ฑด์ง ๊ถ๊ธํฉ๋๋ค. (๋ณ์๋ง ์๊ณ ํจ์๊ฐ ์๋ ํด๋์ค)
p.42 [์์ฑ์์ ํ] ์ ์ ๋์ค๋ ๊ฒ์ฒ๋ผ
์์ฑ์๋ฅผ ์ธ์ง ๋น๋ํจํด์ ์ธ์ง ๊ณ ๋ฏผ์ ๋ง์ด ํ๊ฒ ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ ์ ๊ฐ์ ๊ฒฝ์ฐ์ ์ถํ์ ํ๋๊ฐ ๋์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ
์ด๋ด ๊ฒฝ์ฐ ์์ฑ์๋ฅผ ๋ง๋ค์ด ๋์ผ๋ฉด ๋์ด๋ ํ๋์ ๋ํ ์์ฑ์๋ฅผ ์๋ก ์์ฑํ๊ฑฐ๋ ์ด๋ฏธ ์๋ ์์ฑ์๋ฅผ ์์ ํด์ผํ๋๋ฐ
์ด๋ฏธ ์๋ ์์ฑ์๋ฅผ ์์ ํ๋ ๊ฑด ์ข ์ํํ๊ณ ์๋ก ์์ฑํ๋ฉด ๊ธฐ์กด ์์ฑ์๋ฅผ ํธ์ถํ๋ ๋ถ๋ถ์ ๋ค ๋ค์ ํ์ธํด์ผ ํ๋ ๋ฌธ์ ์ ์ด ์์ต๋๋ค.
๋น๋๋ฅผ ์ฐ๋ฉด (๋กฌ๋ณต ์ฌ์ฉ) ์ถ๊ฐ ํ๋์ ๋ํด์ ํธ์ถํ๋ ์ชฝ์์๋ง ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋๊ธด ํ๋๋ฐ ๋์น๋ ๋ถ๋ถ์ด ์๊ธฐ๋ฉด์ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ๋ ํฉ๋๋ค.
์ด๋ค ๋ฐฉ๋ฒ๋ ๋ฑํ ๋ง์ ๋ค์ง๊ฐ ์์๋ฐ ๋ค๋ฅธ ๋ถ๋ค์ ์ด๋ฐ ๊ฒฝ์ฐ์ ์ด๋ค์์ผ๋ก ํด๊ฒฐํ์๋์ง ๊ถ๊ธํฉ๋๋ค.
ํด๋ฆฐ ์ํคํ ์ฒ์ ๋จ์ ์ผ๋ก ๊ฐ ์์ญ์ ๋ชจ๋ธ์ ๊ด๋ฆฌํด์ผํ๊ณ ๋ชจ๋ธ์ ์ ๊ทผํ๊ธฐ ์ํ ๋งคํ์ด ๋ง์์ง ์ ์๋ค๋ ์ ์ด ์์ํ ๋ฐ์.
๋ค๋ฅธ๋ถ๋ค์ ํ์ฌ ์ด๋์ ๋๊น์ง ๋งคํ์ ์ฌ์ฉํ๊ณ ๊ณ์ ์ง ๊ถ๊ธํ๋ค์.
Request ๊ฐ์ฒด๋ฅผ ๋๋ฉ์ธ์์ญ(์๋น์ค)์ผ๋ก ๋์ด์์ ๊ทธ๋๋ก ์ฌ์ฉํ๋์ง? ์๋๋ฉด ๊ฐ ๋๋ฉ์ธ์์ญ์ ์ ๊ทผํ๊ธฐ ์ ์ ๋ณ๋ ๊ฐ์ฒด๋ก ๋งคํ์ ํด์ ์ฒ๋ฆฌ๋ฅผ ํ๋์ง ๋ฑ๋ฑ..
p.28 ์ํคํ
์ฒ๋ฅผ ๋์ํํด์ ํ์ ํ๋ค๋ ๋ด์ฉ์ด ์์ด์ ๊ทธ๋ ค๋ดค๋๋ฐ... ์ ๊ฐ ์ํคํ
์ฒ ๊ตฌ์กฐ/ํจํค์ง ๊ตฌ์กฐ๋ฅผ ์ ๋๋ก ์ดํดํ๊ณ ๊ทธ๋ฆฐ๊ฒ ๋ง์๊น์?
Hexagonal architecture์์๋ port "ํ๋" ๋น ์ด๋ํฐ "ํ๋"๋ง ์กด์ฌํ๋๊ฑด๊ฐ์??
p.30 ํฌํธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ค์ ๊ฐ์ฒด๋ฅผ ๋๊ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต์ ์ ๊ณตํด์ผ ํ ๊น?
ํฌํธ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต ์์์ ์๋์ผ๋ก ์ด๊ธฐํ ํ๊ณ ์ถ์ง๋ ์๋ค. ์ ํ๋ฆฌ์ผ์ด์
๊ณ์ธต์ ์ด๋ํฐ์ ๋ํ ์์กด์ฑ์ ์ถ๊ฐํ๊ณ ์ถ์ง๋
์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๋ถ๋ถ์์ ์์กด์ฑ ์ฃผ์
์ ํ์ฉํ ์ ์๋ค. ๋ชจ๋ ๊ณ์ธต์ ์์กด์ฑ์ ๊ฐ์ง ์ค๋ฆฝ์ ์ธ ์ปดํฌ๋ํธ๋ฅผ ํ๋ ๋์
ํ๋ ๊ฒ์ด๋ค.
์ด ์ปดํฌ๋ํธ๋ ์ํคํ
์ฒ๋ฅผ ๊ตฌ์ฑํ๋ ๋๋ถ๋ถ์ ํด๋์ค๋ฅผ ์ด๊ธฐํ ํ๋ ์ญํ ์ ํ๋ค.
์ด ๋ถ๋ถ์ด ์ดํด๊ฐ ์ ์๋๋๋ฐ ์ค๋ฆฝ์ ์ธ ์ปดํฌ๋ํธ๊ฐ ์ด๋ค๊ฑด์ง ๋ชจ๋ฅด๊ฒ ๊ณ ์ด๊ธฐํํ๋ค๋ ์๋ฏธ๊ฐ ๋ญ์ง ์ดํด๊ฐ ์๋ฉ๋๋ค........ใโฝใ
์ฑ ์์ ์๋ฐฉํฅ ๋งคํ์ ๋ต์์์ ๋ฌธ์ ์ ์ผ๋ก
"๋๋ฉ์ธ ๋ชจ๋ธ์ด ๊ณ์ธต ๊ฒฝ๊ณ๋ฅผ ๋์ด์ ํต์ ํ๋๋ฐ ์ฌ์ฉ๋๋ค (ํฌํธ๊ฐ ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ ์ ๋ ฅํ๋ผ๋ฏธํฐ์ ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค)"
๋ผ๊ณ ๋์์๋๋ฐ ์น๊ณ์ธต์ด ์๋ ์น/์์์ฑ ๋ชจ๋ธ์ด ๋๋ฉ์ธ์ผ๋ก ๋งคํํ ์ฑ ์์ ๊ฐ์ง๊ณ ์์ผ๋ฉด (์น๋ชจ๋ธ -> ๋๋ฉ์ธ)์ ์์กด์ฑ์ด ์๊ธฐ๋ ๊ฑฐ๋๊น ๋ฌธ์ ์ ์ด ์๋๋ผ๊ณ ์๊ฐํ๋๋ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๊ฐํ๋ ๊ฑธ๊น์?
์ด๋ฒ ์ฅ์์ ์๊ฐํ ๊ณ์ธตํ ์ํคํ
์ฒ์ ๋ฌธ์ ์ ์ผ๋ก ์๊ฐ๋ ๋ด์ฉ๋ค์ ๋ํด ๊ณต๊ฐํ๋ ๋ด์ฉ๋ ์์๊ณ , ์๋ฒฝํ๊ฒ ๊ณต๊ฐํ์ง ๋ชปํ๋ ๋ถ๋ถ์ด ์์์ต๋๋ค.
์ ๊ฐ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ ๋ํด ๋ค๋ฅธ ๋ถ๋ค์ ์ด๋ป๊ฒ ์๊ฐํ์๋์ง ์๊ฒฌ์ ๋ค์ด๋ณด๊ณ ์ถ์ต๋๋ค.
์ ๋ ๊ธฐํ์์ ๋ฐ์์ ๋ ๋ค์ ์์๋ก ์๋น์ค๋ฅผ ์ค๊ณํ๊ณ ์์ต๋๋ค.
(1) ๊ธฐํ์ ํ์ํ ์๋น์ค์ ๊ฐ๋ค์ ์ฒดํฌํ๋ค.
(2) ํ์ํ ๊ฐ์ ๋ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค๊ณํ๋ค.
(3) ๋๋ฉ์ธ ๋ก์ง ์ค๊ณ
์ ๋ ๋๋ฉ์ธ ๋ก์ง ์ค๊ณ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์น ๊ณ์ธต์ ์ค๊ณํ๋ ๊ฒ์ด ๋น์ฐํ๋ค๊ณ ์๊ฐํ๊ณ ์์
ํ๊ณ ์์๋๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ค์ ์ ์ํ๊ธฐ ์ ์ ๋๋ฉ์ธ ๊ณ์ธต์ ๋จผ์ ์ค๊ณํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง ๊ถ๊ธํฉ๋๋ค.
๋ค๋ฅธ ๋ถ๋ค์ ์ด๋ค ์์๋ก ์์
์ ์งํํ๊ณ ๊ณ์ ๊ฐ์?
ํ๋์ ์์์ฑ์ ๋ํด ์ฌ๋ฌ ์ฌ๋๋ค์ด ๊ฐ๊ธฐ ๋ค๋ฅธ ์๋น์ค๋ก ์ ๊ณตํด์ผ ํ๋ ๊ฒฝ์ฐ, ์์์ฑ ๋ ์ด์ด๋ฅผ ํ ์ฌ๋์ด ๋ด๋นํ๊ณ ํด๋น ๋ธ๋์น๋ฅผ ๋จธ์งํด์ ์์ ํ ๊ฒฝ์ฐ๋ ์์์ต๋๋ค.
๊ทธ๋ฌ๋ ํน์ ๊ธฐ๋ฅ์ ๋์์ ํ ๊ฐ๋ฐ์๋ง ์์
ํ ์ ์๊ณ , ๊ฐ์ ์๋น์ค๋ฅผ ๋์์ ํธ์งํด์ผ ํ๋ ์ํฉ ๋ฐ์
์ด ๋ถ๋ถ์ ์๋น์ค๋ฅผ ์๊ฒ ์ชผ๊ฐ๊ณ ์ฑ
์์ ๋ถ๋ฆฌํ๋ฉด ๊ฐ์ ์๋น์ค๋ฅผ ๋์์ ํธ์งํด์ผ ํ๋ ์ํฉ์ ํผํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํด์ ๊ฐ์ธ์ ์ผ๋ก๋ ๊ณต๊ฐํ ์ ์๋ ๋ถ๋ถ์ด์์ต๋๋ค. ์ด๊ฒ๋ ๋ค๋ฅธ ๋ถ๋ค์ ์๊ฒฌ์ด ๋ค์ด๋ณด๊ณ ์ถ๋ค์!
(์ฑ ๋ค์ ์ด ๋ด์ฉ์ ๋ํ ์ถ๊ฐ์ ์ธ ์ค๋ช ์ด ๋์ค๋ ค๋์..? ์ฑ ์์ ๋ ์ด์ด๋ ์ํคํ ์ฒ์ ๋จ์ ์ ์ด์ผ๊ธฐ ํ๊ธฐ ์ํด ๊ทน๋จ์ ์์๋ฅผ ๋ค์๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.)
"package-private ์ ๊ทผ ์์ค์ ์ด์ฉํด ํจํค์ง ๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ๊ฐํํ ์ ์๋ค" ๋ผ๋ ๋ถ๋ถ์ ๋ํ ์ง๋ฌธ์ธ๋ฐ์.
์ ์ ๊ฒฝ์ฐ๋ ํด๋์ค ์์ฑ์์ public ์ผ๋ก๋ง ์์ฑํ๋ค ๋ณด๋ ์ด๋ค์์ผ๋ก ํํ๋ ์ง ์ ๋ป ์๋ฟ์ง๊ฐ ์๋ค์.
p.43 ๋น๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํจํ์ง ์์ ์ํ์ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ค๋ ์๋์ ๋ํด์๋ ๊ฒฝ๊ณ ํด์ฃผ์ง ๋ชปํ๋ค๊ณ ํ๋๋ฐ ๊ทธ๋ฌ๋ฉด ๋น๋๋ ์ธ์ ์จ์ผ ์ข์๊ฑธ๊น์? ์ ๋ ํ๋ผ๋ฏธํฐ๊ฐ ๋ง์ ๋ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ๋น๋๋ฅผ ์ฌ์ฉํ๋ ๊ฑฐ ๊ฐ์๋ฐ ์ฑ ์์๋ IDE๊ฐ ์ถฉ๋ถํ ๋น๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ผ๋ ๊ฐ๋ ์ฑ์ ๋์ด๋๋ฐ ํํธ๋ฅผ ์ค๋ค๊ณ ํ๋ ๋น๋๋ฅผ ๊ตณ์ด ์์ผ๋ก ์ฌ์ฉํ ํ์๊ฐ ์๋๊ฒ์ธ๊ฐ~ ์๊ฐ์ด ๋ค์์ต๋๋ค.
p.50 ์ฝ๊ธฐ ์ ์ฉ ์์
์ ์ ์ค์ผ์ด์ค๋ผ๊ณ ์ธ๊ธํ๋ ๊ฒ์ ์กฐ๊ธ ์ด์ํ๋ค. ๋ผ๊ณ ์ฑ
์ ๋์์๋๋ฐ ์ ์ด์ํ์ฃ ..?
์ํคํผ๋์์ ์จ์๋ ์ ์ค์ผ์ด์ค์ ์ ์๋ ํ์์(์กํฐ)์ ์กํฐ๊ฐ ์๊ตฌํ์ฌ ์์คํ
์ด ์ํํ๋ ์ผ์ ๋ชฉํ์ธ๋ฐ,
๊ณ์ข ์๊ณ ๋ณด์ฌ์ฃผ๊ธฐ๋ ๊ณ์ข ์์ ์์๊ฒ ๊ฒ์ข ์๊ณ ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ๋ฅผ ๋ชฉํ์ธ ์ ์ค์ผ์ด์ค๊ฐ ๋ ์ ์๋๊ฑด๊ฐ์??
์ง๋ฌธ
p8. ๊ทธ๋ฆผ 1.5 ์์ ํฌํผ์ ์ ํธ๋ฆฌํฐ๋ฅผ ์์์ฑ ๋ ์ด์ด๋ก ํ์๋๊ณ ์๋๋ฐ ์ ์๋ฟ์ง ์์์ ๋ค๋ฅธ๋ถ๋ค์ ์ด๋ป๊ฒ ๋๋๋์ง ์ง๋ฌธ๋๋ ค์.
์ ๋ layer ๋ฅผ ๋๋๋ ์๋๊ธฐ์ค์ผ๋ก ๋๋๋๋ค
์ฌ๊ธฐ์ helper ๋ผ ํจ์ utility ์ฑ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์๋น์ค ๋ ์ด์ด๋ก ๋๋๋๋ฐ, ๊ธฐ๋ฅ์ ์ ๊น ๋ณด์กฐํ๋ ์์ฑ์ class ๋ฅผ ์์์ฑ์ ๋ฃ๋๋ค๋ ๊ฒ์ด ์ด์ํ๋ค์
p6. ๊ทธ๋ฆผ 1.4์ ์์์ฑ์ ๋ํ ํํ์ด JPA ์ ํด๋นํ๋ ๊ฒ ๊ฐ์์. JPA ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์ ํธ๋ฆฌํ ๋ถ๋ถ๋ ์์ง๋ง Repository ์์ ๊ฐํ ๊ฒฐํฉ์ด ๋ฌธ์ ๋ ์ ์๋ค๊ณ ์๊ณ ์๋๋ฐ, ์ด ๋ถ๋ถ์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์ด์ผ๊ธฐ ํด๋ณด๊ณ ์ถ์ด์
[์ง๋ฌธ]
[์ง๋ฌธ]
p.61 - ์ปจํธ๋กค๋ฌ๋ช
๊ณผ ์๋น์ค๋ช
์ ๋ํด์๋ ์ ์๊ฐํด๋ด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, CreateAccount๋ณด๋ค๋ RegisterAccount๊ฐ ๋ ๋์ ์ด๋ฆ ๊ฐ์ง ์์๊ฐ?
BuckPal ์์ ์์ ๊ณ์ข๋ฅผ ์์ฑํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ์ฌ์ฉ์๊ฐ ๊ณ์ข๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ ๋ฟ์ด๋ค.
RegisterAccount๋ CreateAccount๋ ๋น์ทํ ๊ฑฐ ๊ฐ์๋ฐ.. RegisterAccount๊ฐ ๋ ๋์ ์ด๋ฆ์ธ ๊ฒ ๊ฐ๋ค๋ ๊ฒ์ ์ฌ๋ฌ๋ถ๋ค์ ๋์ํ์๋์??
๋ฐํ์๋ฃ๋ฅผ ๋ง๋ค๋ค ๋ณด๋, ๊ถ๊ธ์ ์ด ์๊ฒจ ์ง๋ฌธ์ ๊ฐ์ด ๋จ๊ฒจ๋ก๋๋ค.
์ฑ ์์๋ ArchUnit๊ฐ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์์ ์ฌ์ฉ๋ ์์๋ฅผ ๋ณด์ฌ์ฃผ์์ง๋ง, ๋ ์ด์ด๋ ์ํคํ ์ฒ์์๋ ์ฌ์ฉํ ์ ์๋๋ฏ ํ๋ฐ์. ํน์ ๋ค๋ฅธ ๋ถ๋ค์ ์ฌ๋ด์์ ์ด๋ฐ ์์กด์ฑ ํ์ธ ํด ๋ฑ์ ์ฌ์ฉํ ๊ฒฝํ์ด ์์๊น์?
4์ฅ์ ์์ฑ์์ ํ์ด๋ผ๋ ๋ด์ฉ์์ Builder๋ณด๋ค๋ ์์ฑ์๋ฅผ ์ ํธํ๋ ๋์์ค๋ก ๋์ค๋๋ฐ์. ๋ค๋ฅธ๋ถ๋ค์ ์ด๋ป๊ฒ ์๊ฐํ์ค๊น์?
๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ํ ์ด์ผ๊ธฐ๋ ๋์ค๋ค์. ํต์ฌ๊ณ ๋ ์ํคํ
์ฒ๊ฐ DDD์ ์ ๋ง๋ค๋ ์ ์์ ์๊ฐ์ ๋ฐ๋ผ ์ด๋ฐ ์ฃผ์ ๊ฐ ๋ค๋ค์ง๋ ๊ฒ ๊ฐ์๋ฐ์.
์ด ๋ถ๋ถ์ ๋ํด์๋ ์ด์ผ๊ธฐ ํด๋ณด๋ฉด ์ข์๊ฑฐ ๊ฐ์ ๋จ๊น๋๋ค :)
buckpal
|-- account
|-- adapter
| |-- in
| | |-- web
| | |-- AccountController
| | |
| |-- out
| | |-- persistence
| | |-- AccountPersistenceAdapter
| | |-- SpringDataAccountRepository
| |
|-- domain
| |-- Account
| |-- Activity
|
|-- application
|-- SendMoneyService
|
|-- port
|-- in
| |-- SendMoneyUseCase
|
|-- out
|-- LoadAccountPort
|-- UpdateAccountStatePort
์ ๊ตฌ์กฐ์์ domain์ application์ ์์ด์ผ ํ๋๊ฒ ์๋๊น ์ถ์๋๋ฐ์. ์ด๋ ๊ฒ ์๊ฐํ ์ด์ ๋ ์ ์๊ฐ ๋งํ๋ ๊ฒ์ฒ๋ผ domain ๋ชจ๋ธ์ ๋ค๋ฅธ ์ธ๋ถ ์์กด์ฑ์์ ๋ณดํธํ๋ ์๋๋ผ๋ฉด application ํจํค์ง ๋ด์ domain ํจํค์ง๋ก ์์ด์ผ ๊ทธ ์๋๊ฐ ๋๋ฌ๋ ๊บผ๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด์์.
๋ค๋ฅธ ๋ถ๋ค์ ์ด๋ป๊ฒ ์๊ฐํ์๋์??
๋ง์ฝ ์๋น์ค๊ฐ @Transactional ์ ๋ํ
์ด์
์ผ๋ก ์ค์ผ๋์ง ์๊ณ ๊น๋ํ๊ฒ ์ ์ง๋๊ธธ ์ํ๋ฉด AspectJ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ด์ฉํด ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ(aspect-oriented programming)์ผ๋ก ํธ๋์ญ์
๊ฒฝ๊ณ๋ฅผ ์ฝ๋์ ์๋น(weaving)ํ ์ ์๋ค.
๋ผ๋ ๋ง์ด ์ ์ดํด๊ฐ ์๊ฐ๋๋ฐ ํน์ ์ค๋ช ํด์ฃผ์ค ๋ถ ๊ณ์ ๊ฐ์?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.