ํธ์ฃผ์ ์ด๊ณ ์๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ๋๋ค. 30๋ ๊ฐ ๋ค์ํ ๋ถ์ผ์ ์์คํ ๊ณผ ์๋น์ค๋ฅผ ๊ฐ๋ฐํด๋ณธ ๊ฒฝํ์ด ์์ต๋๋ค.
์คํ๋ง ํ๋ ์์ํฌ์ ๊ด๋ จ ๊ธฐ์ ์ ์ข์ํ๊ณ JVM ๊ธฐ๋ฐ ์ธ์ด๋ฅผ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
ํ๊ตญ์คํ๋ง์ฌ์ฉ์๋ชจ์(KSUG)์ ์ค๋ฆฝํ๊ณ ํ๋ํ๊ณ , ํ ๋น์ ์คํ๋ง์ด๋ผ๋ ์ฑ ์ ์ฐ๊ธฐ๋ ํ์ต๋๋ค.
๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋ ๋ค์ํ ์ฃผ์ ์ ๊ดํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค.
Courses
Reviews
- Toby's Clean Spring - Domain Model Pattern and Hexagonal Architecture Part 1
- Toby's Clean Spring - Domain Model Pattern and Hexagonal Architecture Part 1
- Toby's Spring Boot - Understanding and Principles
- Toby's Clean Spring - Domain Model Pattern and Hexagonal Architecture Part 1
- Toby's Clean Spring - Domain Model Pattern and Hexagonal Architecture Part 1
Posts
Q&A
UseCase ๋ฉ์๋ ๋จ์์ ๋ํ Best Practice
ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์์์ ํฌํธ๋ ์ธํฐํ์ด์ค๋ก ํํ๋ฉ๋๋ค. ์ธํฐํ์ด์ค ์ด๋ฆ์ UseCase๋ผ๋ ์ ๋ฏธ์ฌ๋ฅผ ๋ถ์ด๋ ์ ํ์ด ์๊ธดํ์ง๋ง ์ด๊ฒ์ ๋ณ๋ก ์ข์ ๋ค์ด๋ฐ์ ์๋๋๋ค. ์ง๋ฌธํ์ ๋ด์ฉ์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์ ๊ฒฝ๊ณ๋ก ๋ ธ์ถ๋๋ ํฌํธ์ ๋ฒ์๋ฅผ ์ด๋ป๊ฒ ์ก๋๊ฐ๋ผ๊ณ ์ดํดํ๊ณ ์ ์๊ฐ์ ๋ง์๋๋ฆด๊ฒ์. ํฌํธ๋ ํฅ์ฌ๊ณ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์กํฐ๊ฐ ์ฌ์ฉํ๋ ์๋(intention)๋ฅผ ๋ด๊ณ ์์ด์ผ ํ๊ณ , ์ด ์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ํฉ๋๋ค. ๋ฌผ๋ก ์๋๋ฅผ ์ธ๋ถํํด์ ์ชผ๊ฐค ์๋ ์๊ณ , ์ ์ฌํ ์๋๋ฅผ ๋ฌถ์ด์ ํ๋์ ํฌํธ๋ก ์ ์ํ ์ ์์ต๋๋ค. ๊ทธ์ ๋ฐ๋ผ ํฌํธ๋ฅผ ํํํ ์ธํฐํ์ด์ค์ ๋ฉ์๋ ๊ฐฏ์๊ฐ ๋ฌ๋ผ์ง๊ฒ ์ฃ .๋ณดํต ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๊ณ ์๋, ํนํ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ๊ธฐ๋ฅ์ ๋ด์ ๊ฒ์ ์๋๋ฅผ ๋ฌถ๊ธฐ๊ฐ ์๋์ ์ผ๋ก ์ฝ์ต๋๋ค. ๋ฐ๋ฉด ์๋ก ๋์ ์กฐํ ๋ก์ง์ ์ด๋ณด๋ค ์ธ๋ถํ๋ ์ ์๊ณ , ๊ทธ๋์ ๊ทธ๋ฃนํํ ์ ์๋ ๋จ์๋ฅผ ์ ํ๊ธฐ๊ฐ ์ ๋งคํ๊ธฐ๋ ํฉ๋๋ค. ๊ฐ์ฅ ์ฝ๊ณ ์ด์์ ์ธ ๊ฑด ๋ชจ๋ ์ธํฐํ์ด์ค๊ฐ ํ๋์ ๋ฉ์๋๋ง ๊ฐ์ง๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ด๋ฌ๋ฉด ์ฝ๋๊ฐ ์ฅํฉํด์ง๊ฒ ์ฃ . ํนํ ์กฐํ์ฒ๋ผ ์ธ๋ถ ์กฐ๊ฑด์ด ๋ฌ๋ผ์ง ๋๋ง๋ค ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ธฐ๋ ํ๋ ๊ฒฝ์ฐ์๋ ์ด๋ฐ ๊ตฌ๋ถ์ด ์คํ๋ ค ์ฝ๋๋ฅผ ์ดํดํ๋๋ฐ ์ธ์ง ๋ถํ๋ฅผ ๋ ์ค ๊ฒ๋๋ค. ์ผ๋จ ์์ง๋๋ SRP๋ ์ค๋ธ์ ํธ์ ์ค๊ณ ์์น์ด๋ฏ๋ก ์ธํฐํ์ด์ค๋ ์ด๋ฅผ ์ ์ฉํ๋ ๊ฑด ์ ์ ํ์ง ์์ต๋๋ค. ์์ง๋๊ฐ ๋์ผ๋ฉด ๋ณ๊ฒฝ์ด ์ผ์ด๋ ๋ ์ ์ฒด๊ฐ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด์ผ ํฉ๋๋ค. ์กฐํ ์ธํฐํ์ด์ค์ ์ด๋ฅผ ๊ธฐ๊ณ์ ์ผ๋ก ์ ์ฉํ๋ค๋ฉด ๋ฉ์๋ ์๊ทธ๋์ฒ ํ๋ ๋ณ๊ฒฝํ ๋ ๋๋จธ์ง๋ ๋ณ๊ฒฝ๋์ด์ผ ์์ง๋๊ฐ ๋์ ๊ฒ์ธ๋ฐ, ๊ทธ๋ ๊ธฐ๋ ์ฝ์ง ์์ฃ . ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ์ด๊ฒ ์ค๊ณ์ ๋ฌธ์ ๊ฐ ๋์ง๋ ์์ต๋๋ค. ๋์ฒด๋ก ์ด๋ฐ ์กฐํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ค๋ธ์ ํธ๋ ๊ตฌํ์ฒด ๋ด๋ถ๊ฐ ๋๋ถ๋ถ ๋ ๋ฆฝ์ ์ด๋ผ์ ์ผ๋ถ๋ถ๋ง ๋ณ๊ฒฝ๋๋ค๊ณ ํด์ ๋ณ๊ฒฝ ์ ํ์ ์ฝ๋๋ฅผ ์ดํดํ๋๋ฐ ์ด๋ ค์์ด ์๊ธฐ๊ฑฐ๋ ๋๋จธ์ง ์ฝ๋์ ์ํฅ์ ์ค ๊ฐ๋ฅ์ฑ์ด ์ ๊ธฐ ๋๋ฌธ์ ๋๋ค.SRP๋ ์ด๋ฐ ๊ฒฝ์ฐ๋ผ๋ฉด ์ข ํฌ๊ฒ ํด์ํ๋๊ฒ ์ ์ ํฉ๋๋ค. ์ด ์ธํฐํ์ด์ค์ ๊ตฌํ ํด๋์ค๋ "Concert๋ฅผ ์กฐํํ๋ค"๋ ์ด์ ํ๋ ๋๋ฌธ์๋ง ๋ณ๊ฒฝ๋๋ค๋ฉด ๊ทธ๊ฒ์ผ๋ก๋ SRP๊ฐ ์ ์ถฉ์กฑ๋์๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. ๋๋ฌด ์ธ๋ถ ์กฐํ๋ก์ง ๊ตฌํ์ ๋ณ๊ฒฝ์ SRP๋ฅผ ๊ธฐ๊ณ์ ์ผ๋ก ์ ์ฉํ๋ค๊ณ ๋ ๋์ ์ค๊ณ๊ฐ ๋ ๊ฒ์ผ๋ก ๋ณด์ด์ง ์์ต๋๋ค. ๊ทธ๋ณด๋ค๋ ์กฐํ ์ธํฐํ์ด์ค๋ ISP๊ฐ ๋ ์ค์ํ ์๋ ์์ต๋๋ค. ์ด๊ฑธ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๊ฐ ํญ์ ์ ์ฒด๋ฅผ ๊ฐ์ด ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋์๊ฐ, ์๋๋ฉด ์ฌ์ฉ ์ฉ๋์ ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ช ํํ ๊ตฌ๋ถ๋๋๊ฐ๊ฒ ์ฃ . ์ด๊ฑด ํ๋ฒ์ฏค ์๊ฐํด๋ณด๋ฉด ์ด๋ แ๊ฒ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ ์ ํ์ง๊ฐ ๊ทธ๋ ค์ง๋๋ค. ๊ทธ์ ๋ฐ๋ผ ํ ์คํธ๋ฅผ ๋ง๋๋ ๊ฒ๋ ์์ฐ์ค๋ฌ์์ง๊ฒ ์ฃ . ํ์ง๋ง ์ด๊ฒ ์ฌ๋ฌ ๋ค๋ฅธ ๋ชจ๋์์ ์ฌ์ฉ๋์ด์ง ๊ฐ๋ฅ์ฑ์ด ๋์ ๊ณตํต ์ ๋ณด๋ฅผ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ํด๋ผ์ด์ธํธ๋ฅผ ์ ํํ๊ธฐ๊ฐ ์ด๋ ค์ธ ์๋ ์๊ธด ํฉ๋๋ค.๋, API ์ค๊ณ์ ๋ฐ๋ผ์ ์ด๊ฑธ ๋จ์ํ๊ฒ ๋ฐ๊ฟ ์๋ ์์ต๋๋ค. ID๋ก ์กฐํํ๋ ๊ฒ์ ์ด๋ฏธ ๋ช ํํ๊ฒ ์ด๋ค ์ํฐํฐ์ ๋ํ ๋ ํผ๋ฐ์ค๋ฅผ ํ๋ณดํด์ ๋น ๋ฅด๊ฒ ๊ฒฐ๊ณผ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ป์ด์ค๋ ์ผ์ด์ค์์ ์ฐ์ด๊ฒ ์ง๋ง, ๋๋จธ์ง 3๊ฐ๋ ์ข ๋ ๊ฒ์ ๋ชฉ์ ์ ์กฐํ์ผ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ๋ ํ๊ฒ ๋ค์. ์ด๋ฐ ๊ฒฝ์ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํด์ ์ข ๋ ๋์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์กฐํ ๋ก์ง์ผ๋ก ์ค๊ณํ ์๋ ์์ ๊ฒ๋๋ค. ์ด๋ฌ๋ฉด ๋ฉ์๋๊ฐ 2๊ฐ๊ฐ ๋ ์๋ ์๊ฒ ์ฃ . ๊ฒฐ๊ตญ ์ต์ข ๊ฒฐ์ ์ ์กํฐ ํน์ ํด๋ผ์ด์ธํธ๊ฐ ์ด ํฌํธ๋ฅผ ๊ตฌํํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ค ์๋๋ฅผ ๊ฐ์ง๊ณ , ์ด๋ค ๋จ์๋ก, ์ด๋ ์์ ์ ์ฌ์ฉํ ๊ฒ์ธ์ง, ๋ ์ดํ์ ์ผ๋ง๋ ๋ ๋ง์ ์กฐํ ๋ก์ง์ด ์ถ๊ฐ๋ ๊ฒ์ธ์ง ๋ฑ์ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์ ํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.์ง์์ ์ผ๋ก ์ถ๊ฐ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ฉด ๊พธ์คํ ์ด๋ฅผ ๋ค๋ฌ์ด ๊ฐ๋ ์ข์ํ ๋ฐ, ๊ทธ๋ ๋ค๋ฉด ์ผ๋จ์ ์กฐ๊ธ ํฐ ๋จ์๋ก ๋ง๋ค๊ณ ์์ํ๋๊ฒ ์ข๊ฒ ์ต๋๋ค. ๋น์ฐํ ์ธํฐํ์ด์ค๋ฅผ ํ๋ฒ์ ํฌ๊ฒ ๋ง๋ค์ง๋ ๋ง๊ณ ํ์ํ ๋๋ง๋ค ์ถ๊ฐํด๋๊ฐ๋ ๊ฑฐ์ฃ . ํ ์คํธ๋ ๋ง์ฐฌ๊ฐ์ง๊ณ ์. ๊ทธ๋ฌ๋ค ์ฐ์์๊ฐ ๊ตฌ๋ถ์ด ๋๋ ๋๋์ด ๋ค๊ณ , ๊ตฌํ ๋ถ๋ถ์ด ๋ฌ๋ผ์ง๋ ๋ฉ์๋๊ฐ ๋๋ฌ๋๋ค๋ฉด ๊ทธ๋ ๋ถ๋ฆฌํด๋ ์ข์ต๋๋ค. ๋ฐ๋๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ์ธ๋ถํํ๊ณ ์์ํ๋ค๋ฉด ๊ตฌํ ํด๋์ค๋ ์ผ๋จ ํ๋๋ก ๋ง๋ค์๋ค๊ฐ ๊ตฌํ์ด๋ ์์กด์ฑ์ ๋ฐ๋ผ์ ๊ตฌํ ํด๋์ค๋ฅผ ๊ตฌ๋ถํด๋ ๋ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ ๊ฒ ๊ตฌ๋ถํ ์ธํฐํ์ด์ค ์ด๋ฌ๊ฐ๋ฅผ ๋งค๋ฒ ๊ตฌํํ๋ ๋ชจ์ต์ด ๋ณด์ด๋ฉด, ๊ทธ๋๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌถ๋ ๊ฒ์ด ํ์ํฉ๋๋ค. ์ด๊ฒ๋ ์ฌ์ค ํ ์คํธ๊น์ง ์ ๋ง๋ค์ด์ ธ ์๋ค๋ฉด ๋ณ๋ก ์ด๋ ค์ด ๋ฆฌํฉํฐ๋ง์ ์๋๋๋ค๋ง, ์ด๋ฐ์ ์ข ๋ฒ๊ฑฐ๋กญ๊ฒ ์์ํ๋ ๋๋์ด ๋ค๊ธฐ๋ ํ์ฃ . ์ฐ์ ์ ์ด์ ๋๋ก ์ค๋ช ์ ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ดํ ๊ฐ์์์ ์ ๊ฐ ์ด๋ป๊ฒ ์ด๊ธฐ์ ์ค๊ณ๋ฅผ ํ๊ณ ์ด๋ฅผ ๋จ๊ณ์ ์ผ๋ก ๋ฐ๊ฟ๊ฐ๋์ง ๋ณด์ฌ๋๋ฆฌ๊ณ ์ถ์๋ฐ, ๊ทธ๋ ๊ธฐํ๊ฐ ๋๋ฉด ์ด์ ๋ํ ์ธ๊ธ์ ๋ ํด๋ณด๊ฒ ์ต๋๋ค.
- 0
- 2
- 40
Q&A
๋ฉํฐ๋ชจ๋
๋ฉํฐ ๋ชจ๋ ๊ตฌ์กฐ์ ๋ํด์๋ ์ดํ ๊ฐ์์์ ๋ค๋ฃจ๊ฒ ์ง๋ง, ํญ์ ์ด๋ ๊ฒ ํด์ผํ๋ค๋ผ๋ ์ ๋์ ์ธ ๊ธฐ์ค์ ์์ต๋๋ค.์ฌ๊ธฐ์ ๋ชจ๋์ ์๋ง๋ Gradle ๋ชจ๋์ด๊ฒ ์ฃ ? ์ด๊ฑธ ๊ณ์ธต ๋ ๋ฒจ์์ ๋ถ๋ฆฌํ๋ค๋ฉด ์ง๊ธ ๋ง์ํ์ api / core(application, domain)์ด ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ์ฒ์ ์๋ํด๋ณผ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.๋ชจ๋์ ๋๋ด์ ๋ ์ค์ํ ๊ฑด ๋ชจ๋ ๋ ๋ฒจ์์ ์์กด๊ด๊ณ๊ฐ ๋ช ํํด์ผ ํ๋ค๋ ๊ฒ์ด์ฃ . ์ ์ด์ adapter, application(hexagon)์ ์์กด๊ด๊ณ๊ฐ ์ ์ค์ ๋์๋ค๋ฉด ๋ชจ๋๋ก ๋ถ๋ฆฌํด๋ ์์กด ๊ด๊ณ๊ฐ ๋จ ๋ฐฉํฅ์ด ๋ฉ๋๋ค. ์ฌ๊ธฐ์ domain๊น์ง ๋ณ๋ ๋ชจ๋๋ก ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค๋ง, ๊ทธ๋ฅ ๊ฐ์ ๋ชจ๋์ ๋๊ณ ArchUnit๊ฐ์ ๋๊ตฌ๋ก ํจํค์ง ๋ ๋ฒจ์์ ์์กด๋ฐฉํฅ์ ์ฒดํฌํด๋ ์ข์ต๋๋ค. ์ด๋ฌ๋ค ๊ธฐ๋ฅ์ด ๋ง์์ง๋ฉด core๋ฅผ ๋ค์ ๊ธฐ๋ฅ๋ณ ๋ชจ๋๋ก ๋๋ ์ ์๊ฒ ์ฃ . ๋ค์ ๊ฐ์์์ ๋ค๋ฃจ๊ฒ ์ง๋ง, ์ด๋๋ feature/slice์ ์์กด๊ด๊ณ๊ฐ ๋จ ๋ฐฉํฅ์ผ๋ก ์ ์ง๋๋ ๊ฒ ์ข์ต๋๋ค.api ์ด๋ํฐ๋ฅผ ๋ถ๋ฆฌํ๊ณ ๋๋ฉด, ์๋ง๋ ์ดํ์ batch๋ผ๋ ๊ฐ, admin ๋ฑ์ ๋ค๋ฅธ ์ข ๋ฅ์ ํ๋ผ์ด๋จธ๋ฆฌ ์ด๋ํฐ ๊ณ์ธต์ ๋ ๋ฆฝ์ ์ธ ๋ชจ๋๋ก ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ฐ๊ฐ์ด ํ๋์ Spring Batch ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋๊ธฐ ๋๋ฌธ์ ๋ถ๋ฆฌ๋๋ ๊ฒ์ด ์ด์์ ์ ๋๋ค.๋ฐ๋๋ก ์ธ์ปจ๋๋ฆฌ ์ด๋ํฐ๋ค์ core์ ์ดํ ๋ถ๋ฆฌ๋ ์ฌ๋ผ์ด์ค์์ ๊ณต์ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๊ฒ๋ ๋จ๊ณ์ ์ผ๋ก ๋ชจ๋๋ก ๋ถ๋ฆฌํ ์ ์์ต๋๋ค. DB์ ๊ด๋ จ๋ persistence, ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ ์๋น์ค์์ ํตํฉ์ ๋ด๋นํ๋ integration, ๋ security ๋ฑ๋ฑ์ด์ฃ . ์ดํ์ ๋ ๋ด๋ถ, ์ธ๋ถ ์ฐ๋์ ์ํด์ ๋ ์ธ๋ถํ ํ๊ธฐ๋ ํฉ๋๋ค. ํน์ MSA๋ก ํ์ฅ๋๋ฉด ๋ ํฐ ๋จ์๋ก ๋ถ๋ฆฌ๊ฐ ๋๊ธฐ๋ ํ์ฃ . ์ดํ ๊ฐ์์์ ์ด๋ฐ ์ผ์ด์ค๋ค์ ๊ณ์ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
- 0
- 2
- 53
Q&A
DTO๋ฅผ ์๋น์ค ๋ ์ด์ด์์ ์ฌ์ฉํ ์ ๋ฐ์ ์๋ค๋ฉด
์ํฐํฐ๊ฐ ์๋๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๋ชจ๋ ์ค๋ธ์ ํธ๊ฐ DTO๋ ์๋๋๋ค. DTO๋ ์ค๋ธ์ ํธ๊ฐ ๊ณ์ธต์ด๋ ์์คํ ์ ๊ฒฝ๊ณ๋ฅผ ๋์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฒ์ ์ฃผ ๋ชฉ์ ์ธ ๊ฒฝ์ฐ์ DTO๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๋ง์ฝ JDBC ๋ฑ์ ์ด์ฉํด์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋งคํํด์ ๋ด๋ ์ค๋ธ์ ํธ๋ ํ์ฉ ์ฉ๋์ ๋ฐ๋ผ์ ์ฌ๋ฌ๊ฐ์ง๋ก ๋ถ๋ฅผ ์ ์์ต๋๋ค. ๋ง์ฝ ๋๋ฉ์ธ ๋ชจ๋ธ ํจํด์ ์ ์ฉํ๊ณ ์ถ๋ค๋ฉด JDBC๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋๋ฉ์ธ ๋ชจ๋ธ๋ก ์ค๊ณ๋ ์ค๋ธ์ ํธ์ ๋งคํํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ JDBC๋ฅผ ์ด์ฉํด์ ๋๋ฉ์ธ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด ๊ทธ ์์ ๋ก์ง์ ๋ด์ ํ์ฉํ ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ด๋๋ ์๋น์ค ๊ณ์ธต์์ ๋ฆฌํดํ ๋ ์ด ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๊ฒ ์ฃ . ์ด๋ฐ ๊ฒฝ์ฐ์ DTO๋ผ๊ธฐ ๋ณด๋ค๋ ๋๋ฉ์ธ ์ค๋ธ์ ํธ๋ฅผ ๋ฆฌํดํ๋ค๊ณ ํด๋ ๋ฉ๋๋ค. ๋ฌผ๋ก ๋ชฉ์ ์ด ๋จ์ ์กฐํ์ธ ๊ฒฝ์ฐ์, ๊ทธ๋ฆฌ๊ณ ๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ ์ง์ ์ฐ๊ฒฐ๋์ง ์๋ ๊ฒฝ์ฐ์ ์ผ์ข ์ DTO์ ๋ด์์ ๋ฆฌํดํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ DTO๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ๋ด๊ณ ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์์กดํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋น์ค ๊ณ์ธต์ DTO๋ฅผ ๋๋ ๊ฒ์ด ์์ฐ์ค๋ฝ์ต๋๋ค.
- 0
- 2
- 49
Q&A
๊ฐ์ ์ ๋ฐ์ดํธ ๋ด์ญ ์ง๋ฌธ
์์ง์ ๊ธฐ์กด ๊ฐ์ ๋ด์ฉ์ ์ ๋ฐ์ดํธ๋ ์์ต๋๋ค.๊ทธ๋ฐ๋ฐ ํน์ ์ ๋ฐ์ดํธ๊ฐ ํ์๋๋ค๋ฉด ์ง๋ฌธ ์ฃผ์ ๋ถ์ด ๊ณ์ ์ ๊ฐ์์๋ฃ์ ๋์ค์ฝ๋ ๋งํฌ๋ฅผ ์ ๊ฐ ๋ค์ ํ์ธํ๊ณ ์ ์ฅ์ ํด์ ์ ๋ฐ์ดํธ๋ก ๋์จ๊ฒ ์๋๊ฐ ์ถ๋ค์.์ดํ์ ๊ฐ์ ๋ด์ฉ์ ๋ณ๊ฒฝ์ด๋ ์ถ๊ฐ๋ ๊ฒ ์์ผ๋ฉด ์์์ ๊ธฐ๋ฅ์ ํตํด์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค. ์์์์ด ๋ฑ๋ก๋๋ฉด ๋ฉ์ผ์ ๋ฐ์ผ์ค ๊ฒ๋๋ค.
- 0
- 1
- 50
Q&A
"MemberFinderTest, MemberRegisterTest" record๊ด๋ จ
@Transational์ ๋ ๊ฐ์ง ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ค์์ ํ๋ก์๋ฅผ ๋ง๋ค์ด์ AOP๋ก ํธ๋์ญ์ ๊ธฐ๋ฅ์ ๋ถ์ฌํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ์๋ final ํด๋์ค๋ฅผ ์ฐ๋ฉด ์ ๋ฉ๋๋ค. ๋ฐ๋ผ์ record๋ ์ฌ์ฉํ ์ ์์ฃ . ๊ทธ๋ฐ๋ฐ ํ ์คํธ ์ฝ๋์ ๋ถ๋ @Transactional์ ๋์ ๋ฐฉ์์ด ์ ํ ๋ค๋ฆ ๋๋ค. ํ ์คํธ ํ๋ ์์ํฌ๊ฐ JUnit์ ํ ์คํธ ์คํ ํ๋ก์ธ์ค์ ์ฐธ์ฌํด์ ํธ๋์ญ์ ์ ์์ํ๊ณ ํ ์คํธ๋ฅผ ์ํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ์์์ ํตํด์ ํธ๋์ญ์ ์ ๋ง๋๋ ๋ฉ์ธ ์ฝ๋์ @Transactional๊ณผ ์ ์ฝ์กฐ๊ฑด์ด ์ ํ ๋ค๋ฆ ๋๋ค. ๋ฐ๋ผ์ record์ ๊ฐ์ final ํด๋์ค๋ฅผ ์ฌ์ฉํด๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.IntelliJ์๋ ์ด์ ๋ํ ๊ฒ์ฆ ๊ฒฝ๊ณ ๋ฅผ ์๋ฌ์ฒ๋ผ ํ์ํ๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ํ์ง๋ง ์คํํด๋ณด๋ฉด ์๋ฌด ๋ฌธ์ ์์ด ํธ๋์ญ์ ์ด ์ ์ฉ๋ ํ ์คํธ๊ฐ ์ํ๋์ฃ . ๊ฐ์์์ ํ๋ฒ ์ด์ ๋ํด์ ์ค๋ช ์ ๋๋ฆฌ๊ธด ํ์ต๋๋ค. ์ ๋ IntelliJ์ ์คํ๋ง ์ฝ๋ ๊ฒ์ฆ ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ ๋๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐ๋ฉ๋๋ค. ์์กด๊ด๊ณ ๊ด๋ จ ์๋ฌ๋ ๊ฒฝ๊ณ ํ์๋ ๋ถํ์ํ ๊ฒ์ด ๋๋ฌด ์์ฃผ ๋ฑ์ฅํฉ๋๋ค. ์ด๋ด ๋๋ ํด๋น ์๋ฌ ๋ฉ์์ง์ ๋ํ ์ผ์์ validation์ off ์ํค๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค. IntelliJ์ ์ด๋ฐ ๋ฒ๊ทธ๋ค์ด ๋นจ๋ฆฌ ๊ณ ์ณ์ง๋ฉด ์ข๊ฒ ๋ค์.
- 0
- 2
- 47
Q&A
์ธํฐํ์ด์ค
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ผ๊ณ ๋ชจ๋ ๋ฉ์๋๊ฐ ๋ค ์ธํฐํ์ด์ค์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ ์๋ชป๋ ์๊ฐ์ ๋๋ค. ๊ฐ์ฒด์งํฅ์ ์ค๊ณ ์์น์ธ ์บก์ํ๋ฅผ ์๊ฐํด๋ณด๋ฉด ๋ฉ๋๋ค. ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๊ณ ๋ค๋ฅธ ์ค๋ธ์ ํธ์๊ฒ ๊ณต๊ฐํ ๊ธฐ๋ฅ์ public์ผ๋ก ๋ง๋ญ๋๋ค. ๋ฐ๋๋ก ๋ด๋ถ์์ ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋ก ๋ถ๋ฆฌํด์ ๋ง๋ค์์ง๋ง, ์ด๊ฑด ์ธ๋ถ์ ๊ณต๊ฐํ ์ด์ ๊ฐ ์๊ณ , ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ฑฐ๋ ๊ตฌํ ์์ธ๋ฅผ ๋ ธ์ถํ๋ฉด ์ ๋๋ ๊ฒ๋ค์ private์ผ๋ก ๋ง๋ญ๋๋ค. ์ด๊ฑด ์ธํฐํ์ด์ค๋ฅผ ๋ ๋์ ์ผ๋ฐ ํด๋์ค๋ฅผ ์ค๊ณํ ๋๋ ์ ์ฉ๋๋ ๊ฒ์ ๋๋ค.๊ทธ๋ฌ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ ๋ง๋ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ํด์ผํ ์ง์ ๋ง์๋๋ฆด๊ฒ์. ๋น์ฐํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค๊ณ ๋ชจ๋ ๋ฉ์๋๋ฅผ public์ผ๋ก ๋ง๋ค๊ณ ์ธํฐํ์ด์ค์ ํด๋์ค์ ๋ชจ๋ ๋ฉ์๋๋ฅผ ๋ฃ์ด์ผ ํ์ง ์์ต๋๋ค. ์ด๊ฑด ํด๋์ค ๋ ๋ฒจ์์ ์ด์ ์ ๋์ผํฉ๋๋ค.๊ทธ๋ฐ๋ฐ, ํด๋์ค์ ๋ชจ๋ public ๋ฉ์๋๋ ์ธํฐํ์ด์ค์ ์์ด์ผ ํ ๊น์? ์ผ๋ฐ์ ์ผ๋ก ๋จ์ผ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ ๋ง๋๋ ServiceImpl ๊ฐ์ ๊ฒฝ์ฐ์ ๊ทธ๋ด ๊ฐ๋ฅ์ฑ์ด ๋์ง๋ง, ๊ผญ ๊ทธ๋์ผํ๋ ๊ฒ์ ์๋๋๋ค. ์ค๋ธ์ ํธ๋ฅผ ์ธ๋ถ ๋ชจ๋์ ์ธํฐํ์ด์ค๋ฅผ ํตํด์ ๊ณต๊ฐํ ๋๋ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ๋ ํด๋ผ์ด์ธํธ(์ธํฐํ์ด์ค๋ฅผ ํตํด์ ๊ธฐ๋ฅ์ ํธ์ถํ๋ ์ฝ๋๋ฅผ ๋ค ํด๋ผ์ด์ธํธ๋ผ๊ณ ๋ถ๋ฅผ ์ ์์ต๋๋ค)์ ์๋์ ๋ง์ถฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ ๊ตฌํํ๋๋ก ํ๋ฉด ๋๋๋ฐ, ์ข ์ข ํ๋์ ์ค๋ธ์ ํธ๊ฐ ํ ๊ฐ ์ด์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ๋ ํ๊ณ ์ด๊ฒ ํ์ํ๊ฑฐ๋ ์์ฐ์ค๋ฌ์ด ๊ตฌํ ๋ฐฉ๋ฒ์ผ ์๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํน์ ์ธํฐํ์ด์ค๊ฐ ๊ทธ๊ฑธ ๊ตฌํํ ํด๋์ค์ ๋ชจ๋ public ๋ฉ์๋๋ฅผ ๋ค ๊ฐ์ง๊ณ ์์ง ์๊ฒ ๋์ฃ . ์๋ฐ์์ ์์ฃผ ์ฐ๋ ArrayList๋ผ๋ ํด๋์ค๋ฅผ ๋ณด์๋ฉด ๊ตฌํํ๊ณ ์๋ ์ธํฐํ์ด์ค๊ฐ List, Iterable, Collection, RandomAccess, Cloneable, Serializable๋ก ์ฌ๋ฌ๊ฐ ์ ๋๋ค. ์ด ํด๋์ค๋ก ๋ง๋ ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ค ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์ฐ๋๋์ ๋ฐ๋ผ ํ์ํ ์ธํฐํ์ด์ค ํ์ ์ผ๋ก ์ฌ์ฉํ๋๋ก ๋ง๋ค๋ฉด ๋ฉ๋๋ค. ์ฌ์ง์ด ๋ฉ์๋๊ฐ ์๋ ๋ง์ปค ์ธํฐํ์ด์ค๋ ์์ฃ . ์ด๊ฒ๋ ํด๋น ํ์ ์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ์ธ์ํด์ ํ์ํ ์ฉ๋์ ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ์ฒด์งํฅ์ค๊ณ์์น SOLID ์ค์์ ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น(ISP)์ด ์์ต๋๋ค. ์ด๊ฑธ ์ ์ง์ผ์ ์ค๊ณํ๋ฉด, ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋ก ๊ตฌํ ํด๋์ค๋ ํ๋์ด์ง๋ง ํ๋ ์ด์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ๋ฐ์ํฉ๋๋ค. ๊ทธ๋์ ํด๋์ค์ public ๋ฉ์๋๋ฅผ ํ๋์ ์ธํฐํ์ด์ค์ ๋ฐ๋์ ๋ค ๋ด์์ผ ํ๋ ๊ฒ์ ์๋๋๋ค. ๋ค๋ง, ์๋ก ๋์ ์๋น์ค ํด๋์ค์ (๋จ์ผ) ์๋น์ค ์ธํฐํ์ด์ค์ธ ๊ฒฝ์ฐ์ ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด ํด๋์ค์ public ๋ฉ์๋๋ ์ธํฐํ์ด์ค์ ์ ์๋ ๋ฉ์๋๋ก๋ง ๊ตฌ์ฑ๋ ๊ฒ์ ๋๋ค. ์คํ๋ง ๊ธฐ์ค์ผ๋ก ์ข ์ข ๋ฐ๊ฒฌ๋๋ ์์ธ๊ฐ ์๋ค๋ฉด setter ์ฃผ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ setter ๋ฉ์๋๋ public์ด์ง๋ง ์ธํฐํ์ด์ค์ ํฌํจ๋์ง ์๊ฒ ์ฃ . ์์ฆ์ ๋ณดํต ์์ฑ์ ์ฃผ์ ์ ๋ง์ด ์ฐ์ง๋ง, ์ ํ์ ์ธ ์์กด ์ค๋ธ์ ํธ๋ ์ ๋ณด์ธ ๊ฒฝ์ฐ์ ์์ฑ์๊ฐ ์๋๋ผ setter๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.
- 0
- 2
- 45
Q&A
๋ฐฐํฌ ์ ํ ์คํธ ์ฝ๋๊ฐ ๋์๊ฐ๋ ์ฌ์ฉํ๊ฒ ๋ RDB ์ ํ ์ ๊ดํ์ฌ..
์ค์ํ ์ง๋ฌธ์ ํด์ฃผ์ จ๋ค์. ๊ฐ์ ์๋ฆฌ์ฆ์์ ์ธ์ ๊ฐ ๋ค๋ฃฐ ๋ด์ฉ์ ๋๋ค.์ด๋ฒ ๊ฐ์์์ ์ฐ์ ์ ์คํ๋ง์ด ์ง์ํ๋ ๋ฉ๋ชจ๋ฆฌDB๋ฅผ ์ด์ฉํด์ ๋น ๋ฅด๊ฒ ํ ์คํธ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ ํํ์ต๋๋ค. ํ ์คํธ ์ํ ์๋๋ ๋น ๋ฅด๊ณ , JPA์ ๋ค์ด์ผ๋ ํธ ์ง์์ผ๋ก ๊ฐ DB์ ๋ง๋ SQL์ด ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋์ค์ MySQL์์ ๋์ํ ์ฝ๋์ด๋๋ผ๋ ์ฐ์ ์ h2์ ๊ฐ์ ๊ฐ๋ฒผ์ด DB์์๋ ๊ฑฐ์ ์ฐจ์ด๊ฐ ์์ด ๊ธฐ๋ฅ์ ์ํํ๊ฒ ํ ์ ์์ด์ ์ ๋ฒ ์ถฉ๋ถํ ๊ฒ์ฆ์ด ๊ฐ๋ฅํฉ๋๋ค.ํ์ง๋ง ์ด์ ์์คํ ์ผ๋ก ๋ฐฐํฌํ๊ธฐ ์ ์๋ ์ค์ ์ฌ์ฉํ DB๋ฅผ ์ด์ฉํ๋ ์ต์ข ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค. ๋, ์ฑ๋ฅ์ ์ํด์ ํน์ DB์ ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ์ ๊ฐ์ ํ ์คํธ์ฉ ๋ฉ๋ชจ๋ฆฌ DB๋ก๋ ์ํ์ด ๋ถ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ํ ์คํธํ๊ธฐ ์ํด์๋ ์ด์์์ ์ฐ๊ธฐ๋ก ํ MySQL ํ ์คํธ DB๋ฅผ ์ค๋นํด์ ํ ์คํธ๋ฅผ ํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.๋ฐฐํฌ ์ ์ ์งํํ ํ ์คํธ์ ์ฌ์ฉํ DB๋ CI/CD ํ์ดํ๋ผ์ธ์์ ๋์ปค๋ฅผ ์ด์ฉํด์ ํ๊ฒฝ์ ์ค๋นํ๊ณ ์ฌ์ฉํ ์ ์๊ณ , ํ ์คํธ๊ฐ ๋ณ๋ ฌ์ ์ผ๋ก ์ํ๋์ง ์๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค๋ฉด ๋ฏธ๋ฆฌ ์ค์นํด๋ ํ ์คํธ์ฉ DB์ ๋ํด์ ํ ์คํธ๋ฅผ ํ ์ ์์ต๋๋ค. Jenkins์์ ๋ฐฐํฌ๋ฅผ ์ค๋นํ๋ฉด์ ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๋์ปค๋ฅผ ์ด์ฉํด์ ์ ํ ๋ MySQL์ ๋ํด์ ํ ์คํธ๋ฅผ ํ์๋ ๊ฒ์ด ์ข์ ๋ฏํฉ๋๋ค. ๋น๋์ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ด ์ฌ๋ฌ ๋จ๊ณ๊ฐ ์๊ณ ๋ณต์กํ๋ค๋ฉด ๊ฐ๊ฐ ๋ค๋ฅธ ์ ๋ต์ ์ ํํ ์ ์๊ฒ ์ง๋ง, ๋ฐ๋์ ์ง์ผ์ผ ํ ๊ฒ์ ํ ์คํธ ์ํ ์ฑ๋ฅ์ ์ํด์ ๋ฉ๋ชจ๋ฆฌDB๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋๋ผ๋, ์ค์ํ ๋ฐฐํฌ ์ด์ ์, ํน์ ํ์ ๊ฒฐ์ ์ ๋ฐ๋ผ PR ์์ฑ์ด๋ ๋ฐฐํฌ ์ค๋น ๋จ๊ณ์์๋ผ๋ ์ค์ DB๋ก ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ์ ๋ก์ปฌ์์๋ MySQL์ ๋ก์ปฌ ์ค์นํ DB๋ Testcontainer๋ฅผ ์ด์ฉํด์ ๋์ฐ๊ณ ๋งค๋ฒ ํ ์คํธํ๋ ๋ฐฉ๋ฒ์ ์ ํํ ์๋ ์์ต๋๋ค. DB ์ค๋น ๊ณผ์ ์ด ๋ณต์กํ์ง ์๋ค๋ฉด ํ ์คํธ ์ํ ์ฑ๋ฅ์ ํฐ ์ฐจ์ด๋ ์์ต๋๋ค.
- 0
- 2
- 69
Q&A
Exception ์ ์ ๊ธฐ์ค
Profile, Email์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ ์ผ๋ฐ์ ์ธ ํ์ ๊ฒ์ฆ์ ํต๊ณผํ์ง ๋ชปํ ๊ฒฝ์ฐ์ ๋ฐ์ํ๋ ๊ฒ์ด๊ณ ์ด์ ๋ํ ์์ธ๋ ์๋ฐ์์ ๋ฒ์ฉ์ ์ผ๋ก ์ฐ์ด๋ ๊ฒ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฑธ ์ ํํ์ต๋๋ค. ๋ ๊ฐ์ง ์ด์ ๊ฐ ์๋๋ฐ์. ํ๋๋ ํ๋ก ํธ์๋์์ ์ถฉ๋ถํ ๊ฒ์ฆํ๊ณ ๊ฑธ๋ฌ์ ธ์ผ ํ๋ ๊ฒฝ์ฐ์ธ๋ฐ ์ด๊ฒ ์๋ฒ๊น์ง ๋์ด์๋ค๋ฉด ์ผ์ข ์ ๋ฒ๊ทธ์ ๋๋ค. ๋ฒ๊ทธ์ ๋ํด์ ๋๋ฉ์ธ ์ง์์ ๋ด์ ์ปค์คํฐ ์์ธ๋ฅผ ๊ตณ์ด ์ ์ธํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์๊ณ , ๋ญ๋น๋ผ๊ณ ๋ณด๊ธฐ ๋๋ฌธ์ ๋๋ค. NPE์ ๋ํด์ ๋งค๋ฒ ์๋ฏธ์๋ ์์ธ๋ฅผ ๋ง๋ค์ง ์๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์์ง ์๋ฒ๊ฐ ๋์ง๋ ์์ธ์ ๋ํ ํ์ค ๊ฐ์ด๋๋ฅผ ๋ ผ์ํ๊ณ ๊ฒฐ์ ํ์ง ์์์ต๋๋ค. ํํธ 2๋ ์๋ฆฌ์ฆ ํ๋ฐ์ ์ด๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ฒํ ํ๊ณ ํ์ค์ ์ก์์ ๊ฐ์ด๋์ ๋ฃ์ ๋ ๋ณ๊ฒฝ๋ ์๋ ์์ต๋๋ค. ๋ฐ๋ฉด ์ด๋ฉ์ผ ์ค๋ณต ์์ธ๋ ๋๋ฉ์ธ ๋ก์ง์ ํํํ ์ฝ๋์ ๋๋ค. ๋๋ฉ์ธ ์ง์์ ๋ด๊ณ , ๋๋ฉ์ธ์์ ์ ํ ์ ์ฝ์กฐ๊ฑด์ ๋ํ๋ด์ผ ํ๊ณ , ์ด๊ฑด ํ๋ก ํธ์๋์์ ์ฌ์ ๊ฒ์ฆ์ด ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ์ด๋ ต๊ณ , ๋ ๋ณต๊ตฌ ๊ฐ๋ฅํ(์ค๋ณต๋์ง ์๋ ๋ค๋ฅธ ์ด๋ฉ์ผ๋ก ์ฌ์๋) ์์ธ์ด๊ธฐ ๋๋ฌธ์ ์ปค์คํฐ ์์ธ๋ก ์ ์๋ ๊ฒ์ ๋๋ค. ์ด๊ฑด ์๋ฐ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ผ๋ฐ์ ์ธ ์์ธ ํด๋์ค๋ก๋ ๊ทธ ์๋ฏธ๋ฅผ ๋ด์ ์ ์๊ธฐ ๋๋ฌธ์ด๊ธฐ๋ ํฉ๋๋ค. ์ผ๋จ์ ์ด ์ ๋ ๊ธฐ์ค์ผ๋ก Part 1์์๋ ์์ธ ์ฌ์ฉ์ ๊ฒฐ์ ํ์ต๋๋ค. ์์ผ๋ก ๋ ๋ ผ์ํด๋ณผ ๋ถ๋ถ์ด ์๊ธฐ๋ฉด ๊ทธ๋ ๋ค์ ์์ธ ์ ์ฑ ์ ๊ดํด ์ดํ ๊ฐ์์์ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
- 0
- 1
- 57
Q&A
๊ฐ์ธ์ ์ง๋ฌธ
์๋ ํ์ธ์. 1๋ฒ์, @Embedded๋ ๊ธฐ๋ณธ ํ์ ์ด ์๋ ์ฌ์ฉ์ ์ ์ ํ์ (ํด๋์ค)์ผ๋ก ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๋ ์ ์ธ ๋ช ํ์ฑ์ ์ค ์ ์์ต๋๋ค. String email๊ณผ Email email์ ์ฝ๋๋ฅผ ์ฝ์ ๋ ๋ฟ ์๋๋ผ ์ด๊ฒ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ ๋๊ฑฐ๋ ์ฌ์ฉ๋์ด์ง ๋, ๋น๋ก String ํ๋ ๋ฟ์ด๋๋ผ๋, ์ด๊ฒ ์ด๋ค ํ์ ์ด๊ณ ์ด๋ค ์ ๋ณด๊ฐ ์ ์ฅ๋๋์ง๊ฐ ๋ช ํํ๊ฒ ๋๋ฌ๋ฉ๋๋ค. ๋, ์ ํจ์ฑ ๊ฒ์ฌ์ ๋ณํ, ๊ธฐํ ์ด ๊ฐ์ ์ฌ์ฉํ๋ ๋ก์ง์ ๋ด์ ๋ฉ์๋๋ฅผ ํ๋์ ํด๋์ค์ ๋ชจ์๋ ์ ์์ด์ ์์ง๋๊ฐ ์ฌ๋ผ๊ฐ๋๋ค. Member ํด๋์ค์ isValidEmailAddress()๊ฐ ์๋ ๊ฒ๋ณด๋ค๋ Email ํด๋์ค์ ์๋ ๊ฒ ๋ซ๊ฒ ์ฃ . Email์ฒ๋ผ ์ฌ๋ฌ๊ตฐ๋ฐ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ์ ์ค๋ณต๋ ํผํ ์ ์๊ณ ์. ํ๋ผ๋ฏธํฐ๋ก ๋๊ธธ ๋ ์์ฐ์ค๋ฝ๊ฒ ํ์ ์์ ์ฑ๋ ๋ณด์ฅ๋ฉ๋๋ค. String์ ๋๋ฌด ๋ง์ด ์ฐ์ด์๋์. ๊ทธ๋ฐ๋ฐ email์ ๋๊ฒจ์ผ ํ๋๋ฐ, ์ฌ์ฉํ๋ ์ชฝ์์ ์ค์๋ก name์ ๋๊ฒจ๋ ์ปดํ์ผ๋ ์ ๋๊ณ ๊ธฐ๋ฅ๋ ๋์๊ฐ๋๋ค. ์ค์ ๋ฉ์ผ ๋ฐ์ก์ ํด์ผ ์๋ ๋ฉ์ผ์ด๋ผ๋ ๊ฒฝ๊ณ ๊ฐ ๋ฐ ๋ฟ์ด์ฃ . ์ด๋ฐ ๋ ผ๋ฆฌ์ ์ธ ๋ฒ๊ทธ๋ฅผ ํผํ๋๋ฐ๋ ๋์์ด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ๋ฌ ๊ฐ์ ํจ๊ป ๋ค๋๋ ์ ๋ณด๋ฅผ ๋ฌถ๋ ๊ฒฝ์ฐ์๋ ์ฐ์ง๋ง ๊ฐ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๋ ์ฅ์ ์ ์ด๋ฆฌ๊ธฐ ์ํด์๋ ํ์ ์ ํด๋์ค๋ก ์ ์ํ๊ณ @Embedded๋ก ์ธ ์ ์์ต๋๋ค. User type์ ์ ์ํ๋ ๋ณต์กํ ๋ฐฉ๋ฒ๋ ์๋๋ฐ ๊ทธ ๋ณด๋ค๋ ์๋ฒ ๋ฉ ์ํค๋๊ฒ ๊น๋ํ์ฃ .2๋ฒ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ ์ฌ๋ฌ ์ํฐํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒฝ์ฐ์ ๋จ์ ์กฐํ๋ผ๋ฉด ์ฒด์ด๋์ ์จ๋ ๊ด์ฐฎ์ต๋๋ค. ์ฝ๋๋ ์์ฐ์ค๋ฝ๊ฒ ์ฝํ์ฃ . getMember().getAddress().getStreet() ๋ญ ์ด๋ฐ ์์ด์ฃ . ์ค๊ฐ์ ๋์ด ๋ค์ด๊ฐ ์ ์๋ค๋ฉด Optional๋ก ์์ ํ๊ฒ ํธ์ถํ ์๋ ์์ต๋๋ค.๋ฐ๋ฉด ๋ก์ง์ ์ ์ฉํด์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ์์ ์ธ ๊ฒฝ์ฐ, ๋๋ ์ด๋ค ์กฐ๊ฑด ํ๋จ์ ์ํ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ก์ง์ ๋ฃจํธ์ ๋๊ณ ๋ฃจํธ๊ฐ ๋ด๋ถ ์ฒด์ด๋ ๊ตฌ์กฐ์ ๋ฐ๋ผ์ ํ์ํ ๊ธฐ๋ฅ์ ์ํํ๊ณ ๋ฆฌํดํ๊ฒ ํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋์ค์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์์ ํ ํ์๊ฐ ์๊ณ , ๋ด๋ถ ์ํฐํฐ๊ฐ ๋ถํ์ํ๊ฒ ๋ ธ์ถ์ด ๋์ด์ ๊ทธ ๋ด๋ถ ๊ธฐ๋ฅ์ ๋ฐ๋ก ์ฌ์ฉํ๋ ๊ฒ๋ ํผํ ์ ์๊ฒ ์ฃ .3๋ฒ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ผ๋ ์ฉ์ด๋ DDD ์ฑ ์ ํตํด์ ์ฒ์ ์๊ฐ๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ํญ์ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ฌ์ ์ฒ๋ฆฌ๋๊ฑฐ๋ ๋ด๋ถ๋ฅผ ๊ณต๊ฐํ์ง ์๋ ๊ฒ์ด ๋ ๋์ ์ค๊ณ์ธ ๊ฒฝ์ฐ์ ์ ์ฌํ ๋ฐฉ์์ ์ผ๋ง๋ ์ง ๋ฐ๋ฅผ ์ ์์ต๋๋ค. ๋จ์ํ๊ฒ ๋ฐ์ดํฐ ์ ์ฅ ๊ธฐ์ ๋ก JPA๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ์๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ์ฒ๋ผ cascade๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๋ ์๋ ์์ฃผ ๋ง์ต๋๋ค. 4๋ฒ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ๊ด๊ณ๊ฐ ์ด๋ป๊ฒ ๋์ด์๋์ง๋ ์ค์ํ์ง ์์ต๋๋ค. ๊ฐ ์ํฐํฐ์ ์๋ฏธ์ ๋ณ๊ฒฝ ์ฃผ๊ธฐ, ์์ , ๋ฐฉ์์ ๋ฐ๋ผ์ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ์ด๋ป๊ฒ ๋ฌถ์์ง๋ ๊ณ ๋ฏผํด๋ด์ผ์ฃ . ๊ทธ๋ฆฌ๊ณ ์ ๊ทธ๋ฆฌ๊ฑฐํธ๋ฅผ ๋ฌถ๋ ๋จ์๋ ์๊ฐ์ด ์ง๋๊ณ ๋ฐ๋ ์๋ ์์ต๋๋ค. ๋ชจ๋ ๊ฑธ ์ฒ์๋ถํฐ ์๋ฒฝํ๊ฒ ์ค๊ณํ๋ผ๋ ๋ณด์ฅ์ ์์ผ๋๊น์. ์ข ์ ๋งคํ๋ค ์ถ์ผ๋ฉด, ์ฐ์ ๊ฒฐ์ ์ ํ๋ ํด๋ณด๊ณ , ์ฝ๋๊ฐ ๋ฐ์ ํ๋ฉด์ ๊ทธ ์ ํ์ด ์ด๋ค ์ํฅ์ ์ฃผ๋์ง ๋ณด๊ณ ๋์ค์ ๋ฆฌํฉํฐ๋งํด๋ ๋ฉ๋๋ค. ์ค์ํ ๊ฑด ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ ๊น์ด ์ฐ๊ตฌํด๋ณด๋ ๊ฒ์ด์ฃ .
- 0
- 2
- 72
Q&A
์ดํ๋ฆฌ์ผ์ด์ , ๋๋ฉ์ธ ๊ณ์ธต์ง๋ฌธ
์์กด์ฑ ์ญ์ ์ด ์๋๋ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ๊ธฐ์ ์ ์์กด์ ์ธ ์ธ๋ถ ์ธํฐํ์ด์ค์ ์์กดํฉ๋๋ค. ๊ธฐ์ ๊ณผ ๊ด๋ จ๋ ์ฝ๋๊ฐ ์ด๋์ ์กด์ฌํ๋์ง๋ฅผ ๋ฐ์ง๋ ์ด์ ๋ ํด๋น ์ฝ๋๊ฐ ๊ธฐ์ ์ ์์กดํ๊ณ ์๋๊ฐ, ์ฆ ๊ธฐ์ ์ ๋ณ๊ฒฝ์ด ์ฝ๋์ ์ํฅ์ ๋ฏธ์น๋๊ฐ๋ก ํ๋จํด์ผ ํฉ๋๋ค. ์์กด์ฑ ์ญ์ ์ผ๋ก ์คํ๋ง ๋ฐ์ดํฐ JPA์ ๊ด๋ก๋ฅผ ๋ฐ๋ฅด๋ ์ฝ๋๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ Port๊ฐ ๋์์ง๋ง, ์ด ์ธํฐํ์ด์ค๋ ํน์ ๊ธฐ์ ์ ์์กด์ ์ด์ง ์์ต๋๋ค. ์คํ๋ ค ๋๋ฉ์ธ ์ง์๊ณผ ์ฉ์ด๊ฐ ๋๋ฉ์ธ ๋ก์ง์ ์ถฉ์คํ๊ฒ ๋๋ฌ๋๋ ์ธํฐํ์ด์ค์ผ ๋ฟ์ ๋๋ค. ๋ฌผ๋ก JPA ๊ธฐ์ ์์ ์ ๊ณตํ๋ ์ ํ ๋ค์ฌ์ ์ด ๋ฉํ ์ ๋ณด๋ก ๋ถ์ฌ๋์ง๋ง ์ด ๋๋ฌธ์ ํด๋น ์ธํฐํ์ด์ค๊ฐ JPA์ ์์กด๋์ง๋ ์์ต๋๋ค. ๋๋ฉ์ธ๊ณผ ๋ฌด๊ดํ JPA API๊ฐ ์ฌ์ฉ๋ ์ ๋ ์์ผ๋ฉฐ ํด๋น ๊ธฐ์ ์ด JPA๊ฐ ์๋๋ผ ๋ค๋ฅธ ์คํ ๋ฆฌ์ง ๊ธฐ์ ๋ก ๋ณ๊ฒฝ๋๋ค๊ณ ํ๋๋ผ๋, ๋ง๋ค์ด์ง ์ธํฐํ์ด์ค์ ์ฝ๋๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ๊ธฐ์ ์ด ์นจํฌํ๋ค๋ ๊ฒ์ด ์ด๋ค ์๋ฏธ์ธ์ง, ์ด๋ค ํจ๊ณผ๊ฐ ์๋ ๊ฒ์ธ์ง๋ฅผ ์ ๋ฐ์ ธ๋ณด๊ณ ์ด๊ธฐ ๊ฐ๋ฐ ๋งฅ๋ฝ์์ ์ต์ ์ด๋ผ๊ณ ํ ์ ํ์ ํ ๊ฒ์ ๋๋ค. ๊ด๋ จ๋ ๋ด์ฉ์ ๊ฐ์์์ ๊ทธ๋ฆฌ๊ณ Q&A์ ์ฌ๋ฌ ์ง๋ฌธ์ ํตํด์ ๋ง์๋๋ ธ์ต๋๋ค. ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ด์ฉ์ ์ต๋ํ ํํํด๋ธ ์ฝ๋๊ฐ ๋๋ฉ์ธ ๊ณ์ธต์ด ๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์ (ํฅ์ฌ๊ณค) ์ธ๋ถ์์ ์ฐ๋๊ณผ ์ฑ ์์ ๋ด๋นํ๋ ๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋น์ค๋ก ๊ฐ๋ฐํฉ๋๋ค. ์ด ๋ ๋ค ๋๋ฉ์ธ ์ง์๊ณผ ๋ก์ง์ ์ถฉ์คํ๊ฒ ์์ฑ๋์๊ณ , ์ผ๋ถ ์ธ๋ถ ๊ธฐ์ ์ ์ ๋ ธํ ์ด์ ์ด ๋ ธ์ถ๋๋ ๊ฒ์ด ์ด๋ฐ ๊ฐ๋ฐ ์์น์ ๊นจ๋จ๋ฆฌ์ง ์๋ ์ ์์ ์ ์ ํ๊ฒ ์ ํํ์ต๋๋ค. ๊ธฐ์ ์ ์นจํฌ, ๊ธฐ์ ์ ์์กด์ด๋ผ๋ ๊ฑด ๊ธฐ์ ์ ๋ณํ, ๊ทธ ๊ธฐ์ ์ ์ ์ฉํ๋ ํ๊ฒฝ์ด ๋ฐ๋ ๋ ๊ทธ "์ฝ๋"๋ ๋ฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์๊ฐ๋ก ํ๋จํ๋ฉด ๋ฉ๋๋ค.
- 0
- 3
- 100