ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ์ ๊ทธ๋ฆฌ๊ฒ์์ ๋ํด ํ์ตํ๊ณ ๊ณ ๋ฏผํ๋ ๋ด์ฉ์ ๋๋ค. DDD์ ๊ด๋ จ๋ ๋ด์ฉ์ธ๋ฐ ์ด์ ๋ํด ์ ํํ ๊ฐ๋ ์ ํ์ตํ ์ฑ ์์ฑํ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ๋ด์ฉ์ ์๋ ค์ฃผ์ ๋ค๋ฉด ๋ณด๋ ์ฆ์ ์์ ํ๊ฒ ์ต๋๋ค. **JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ธ์ ์ฝ๊ธฐ ์ํด์๋ JPA์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
2022. 10.
** ๋ณ๋์ API๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ํ๋์ ๋ ํฌ์งํ ๋ฆฌ๋ก ํ์ ์ํฐํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ํ๋ค๋ค๊ณ ํ๋จํด ์ด ํฌ์คํ ์ ๊ทธ ๋น์์ ์๊ฐ, ํ๋์ ๋ฐฉ๋ฒ ์ ๋๋ก ์ฝ์ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
1. ๋ณ๋์ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ํ์ํ ๊น?
๊ฒ์ํ์ ๋ง๋ค๋ ๋๊ธ์ ๊ฒ์๊ธ์ ํ์์ ์ํด์์ต๋๋ค. ์ด ๊ฒฝ์ฐ /api/posts/{postId}/comments/{commentId} ์ ๊ฐ์ด API๋ฅผ ๊ตฌ์ฑํ ์ ์๋๋ฐ์, ๋ฌผ๋ก ๊ฒ์๊ธ๊ณผ ๋ณ๊ฐ๋ก ๋๊ธ๊ณผ ๊ด๋ จ๋ ์์ ๋ง์ ํ๊ธฐ ์ํด /api/comments/{commentId} ์ ๊ฐ์ด ๋ณ๋์ API๋ฅผ ๋ ์๋ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ณผ์ฐ ๋๊ธ์ ์ํ ๋ณ๋์ ์ปจํธ๋กค๋ฌ๊ฐ ํ์ํ ๊น? / ๋๊ธ์ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๊ผญ ํ์ํ ๊น? ์ ๊ฐ์ ์๋ฌธ์ ์ด ๋ค์์ต๋๋ค. ๋๊ธ์ ๊ฒ์๊ธ์ ์ข ์์ ์ด๊ธฐ์ ๊ฒ์๊ธ์ ํตํด ๋๊ธ์ ์ถ๊ฐ/์์ /์ญ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ ์ด๋ฅผ ํตํด ํ๋์ ๋ฃจํธ(์ ๊ทธ๋ฆฌ๊ฒ์)๋ก ํ์ ์ํฐํฐ๋ค์ ๊ด๋ฆฌํ ์ ์๊ฒ ๋๊ณ ์ด๋ฅผ ํตํด ๋ณ๊ฒฝ์ ์ ์ค์ผ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
2. ์ ๊ทธ๋ฆฌ๊ฒ์์ผ๋ก ํ์ ์ํฐํฐ ๊ด๋ฆฌํ๊ธฐ
์์ ๋งํ๋ ๋ด์ฉ์ ์ฝ๋๋ก ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค. ํ ๊ฐ์ง ๋ฐ๋์ ์ด ์๋๋ฐ์, ์์์ ๋งํ๋ ๊ฒ์๊ธ์ด ์คํฐ๋๋ก ๋ฐ๋๊ฒ ๋ฉ๋๋ค. ์ฆ ํ๋์ ์คํฐ๋์๋ ์ฌ๋ฌ๊ฐ์ ๋๊ธ์ด ๋ฌ๋ฆด ์ ์๊ณ API๊ฐ /api/study/{studyId}/comments/{commentId} ์ ๊ฐ์ด ๋๋ ๊ฒ์ ๋๋ค.
์ด์ ์ํฐํฐ์ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํ๋์ ์คํฐ๋๋ฅผ ์์ธ ์กฐํํ๋ฉด ๋๊ธ์ด ํจ๊ป ๋ธ๋ ค์์ผ ํ๊ธฐ ๋๋ฌธ์ Comments๋ผ๋ ์ผ๊ธ ์ปฌ๋ ์ ์ ๋ง๋ค์ด์ @OneToMany ๊ด๊ณ๋ฅผ ์ค์ ํ์ต๋๋ค. **์กฐํ์ ํธ์์ฑ์ ์ํด @OneToMany๋ฅผ ๋งบ์ด์คฌ์ผ๋ฉฐ, Soft Delete๋ฅผ ๊ตฌํํ๊ธฐ ํ๋ฌธ์ cascade๋ PERSIST๋ง ์ค์ ํด์คฌ์ต๋๋ค. ์กฐํ๊ฐ ๋น๋ฒํ์ง ์๋ค๋ฉด @OneToMany ๊ด๊ณ๋ ๊ตณ์ด ๋งบ์ง ์์ผ์ ๋ ๊ด์ฐฎ์ต๋๋ค.
๋ณธ๊ฒฉ์ ์ผ๋ก ๊ฒ์๊ธ์ ์์ฑ/์์ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋๋ ๋๊ธ์ ์์ฑํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ์คํฐ๋์ ๋๊ธ์ด ์กดํดํ๊ธฐ ๋๋ฌธ์ ๋จผ์ ๋๊ธ์ ์์(์ ๊ทธ๋ฆฌ๊ฒ์)์ PK๋ก ์คํฐ๋๋ฅผ ์กฐํํฉ๋๋ค. ์ดํ ์์ฑํ ๋๊ธ ์ํฐํฐ๋ฅผ ์์ฑํด ์ฐพ์์จ ์คํฐ๋ ์ํฐํฐ ๋ด๋ถ์ Comments ๋ฆฌ์คํธ์ ์ถ๊ฐํด์ค๋๋ค. ** ๋ฌผ๋ก ์ด ๊ณผ์ ์์ ์คํฐ๋ ์ํฐํฐ๋ฅผ ์กฐํํ๋ ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋๋ฐ ์ด ๋ถ๋ถ์ ๋ํด์๋ ๋ค์์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
๋๊ธ ์์ฑ์์์ ๋๊ธ ์ถ๊ฐ๋ก์ง์ ์๋์ ๊ฐ์ต๋๋ค. ์์ฑํ ์ฌ๋์ ๋ฑ๋กํ๊ณ ์์ฑ๋ ๋๊ธ ์ํฐํฐ๋ฅผ Comments๋ด๋ถ์ ๋ฆฌ์คํธ์ ๋ฃ์ด์ค๋๋ค.
์ด๋ฒ์ ๋๊ธ ์์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋๊ธ ์์ ๋ ๊ฑฐ์ ๊ฐ์๋ฐ ํ ๊ฐ์ง๊ฐ ๋ค๋ฆ ๋๋ค. ์ด ๊ฒฝ์ฐ ํ์น์กฐ์ธ์ผ๋ก ํด๋น ์คํฐ๋๊ฐ ์์ ๊ณผ ์ฐ๊ด๋ ๋๊ธ์ ๋ชจ๋ ๊ฐ์ ธ์์ผ ํ๋๋ฐ์, ๊ทธ๋์ผ ๋ณ๋์ ์ถ๊ฐ์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. **fetchJoin( )์ in์ ๋ก ์์ ๊ณผ ์ฐ๊ด๋ ๊ฐ์ ํ ๋ฒ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋งํฉ๋๋ค.
์ดํ ์คํฐ๋ ๋ด๋ถ์ ์๋ ๋๊ธ๋ฆฌ์คํธ์์ ํด๋น ๋๊ธ์ ์ฐพ์์จ ํ ๋ด์ฉ์ ์์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ์๋ ๋ฉ์๋๋ ๋๊ธ์ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ์๋ ์ํฐํฐ ๋ด๋ถ์ ์กด์ฌํ๋ ๋๊ธ์ ์ฐพ์์ค๋ ๋ฉ์๋์ ๋๋ค.
์์๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ณ๋์ ๋๊ธ ์ปจํธ๋กค๋ฌ/๋ ํฌ์งํ ๋ฆฌ ์์ด๋ CasCade๋ฅผ ํตํด ๋ด์ฉ์ ์ถ๊ฐ/์์ /์ญ์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ป์ ์ ์๋ ์ ์ ๊ด๋ฆฌ ํฌ์ธํธ๊ฐ ์ค์ด๋ค๊ฒ ๋๋ค๋ ์ ์ ๋๋ค. ์ฆ ์คํฐ๋(๋ฃจํธ ์ํฐํฐ)๋ฅผ ํตํด ํด๋น ๋๊ธ๋ค์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ ํฌ์ธํธ๊ฐ ์ค์ด๋ค๊ฒ ๋๋ ๊ฒ์ ๋๋ค. ๊ธฐ์กด์๋ CommentController๋ฅผ ๋ง๋ค์ด์ ๋ณ๋์ api๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ํตํด ๊ด๋ฆฌํ์ง๋ง ์ด์ ๋ StudyController ํ๋์ ์๋ํฌ์ธํธ๋ง์ผ๋ก, Study ์ํฐํฐ๋ง์ผ๋ก ๋ชจ๋ ํ์ ์ํฐํฐ๋ค์ ๊ด๋ฆฌํ ์ ์๊ฒ ๋์์ต๋๋ค. [์ด๋ฏธ์ง ์ถ์ฒ]
3. Conclusion
๋ฌผ๋ก ์ฌ๊ธฐ์ ์ฅ์ ๋ง ์์ง๋ ์์ต๋๋ค. ํ์ ์ํฐํฐ๋ฅผ ์์ ํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์์ ์ ๋ฃจํธ(์ ๊ทธ๋ฆฌ๊ฒ์) PK๊ฐ ํ์ํฉ๋๋ค. ๋ฟ๋ง ์๋๋ผ ํด๋น ์ ๊ทธ๋ฆฌ๊ฒ์์ ํตํด์๋ง ๋ชจ๋ ์์ ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ํฐํฐ์ ๋ง์ ๋ก์ง์ด ๋ค์ด๊ฐ๊ฒ ๋๊ณ , ์ํฐํฐ ๊ทธ๋ํ ํ์์ด ํ์์ ์ด๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ (๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด) ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ค๊ณํ๊ฑฐ๋ ์ํฐํฐ ๊ทธ๋ํ ํ์์ ์ด๋๊น์ง ํ์ฉํ ์ง ์ ํ์ ์ ๋ฌ์ผ ํ๋๋ฐ, ์ด๋ฐ ๋ถ๋ถ์์ ํ์๋ค๊ณผ ํ์๊ฐ ๋ง์์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ ์ด ๊ณผ์ ์์ ์ถ๊ฐ์ฟผ๋ฆฌ๊ฐ 1~2๋ฒ ์ ๋ ๋ ๋ฐ์ํ ์ ์๋๋ฐ ์ด๋ ์ด๋์ ๋ ๊ฐ์ํด์ผํ ์์ญ์ด๋ผ๊ณ ์๊ฐ๋ฉ๋๋ค.
** ์ถ๊ฐ
์ํฐํฐ์ ๋ก์ง์ด ๋ง์ด ๋ค์ด๊ฐ๋ ๊ฒ์ ์ฌ์ค ์ฅ์ ์ด๋ผ ๋ณผ์ ์๋๋ฐ์, ์ํฐํฐ์ ๋ก์ง์ด ๋ง์ด๋ค์ด๊ฐ๊ฒ ๋๋ฉด ์์ง์ฑ์ด ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ๋์ ์ํฐํฐ์์ ์ฐ๊ด๋ ๋ก์ง์ ๋ชจ๋ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํตํด ๋ณ๊ฒฝ์ ์ ์ค์ผ ์ ์๊ณ ๊ฐ๋ฐ์๊ฐ ์ค์ํ ์ฌ์ง๊ฐ ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค.
'๐ฅDEV > Java || Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๋ฉ์ธ ๋ก์ง์ด ํญ์ ์ข์๊น? (0) | 2022.09.19 |
---|---|
[์ดํํฐ๋ธ์๋ฐ] Item 16. (0) | 2022.08.21 |
๊ฐ์ ๊ฒ์ฆํ๋ ์์น๋ ์ด๋๊ฐ ์ข์๊น? (0) | 2022.07.30 |
@Component์ @Configuration์ ์ฐจ์ด (0) | 2022.07.24 |
FrontController ํจํด (0) | 2022.07.21 |
๋๊ธ