๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅDEV/Java || Spring

ํ•˜๋‚˜์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ ๊ด€๋ฆฌํ•˜๊ธฐ

by bdd 2022. 7. 31.

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์• ๊ทธ๋ฆฌ๊ฒŒ์ž‡์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๊ณ  ๊ณ ๋ฏผํ–ˆ๋˜ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. DDD์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์ธ๋ฐ ์ด์— ๋Œ€ํ•ด ์ •ํ™•ํ•œ ๊ฐœ๋…์„ ํ•™์Šตํ•œ ์ฑ„ ์ž‘์„ฑํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ๋‚ด์šฉ์„ ์•Œ๋ ค์ฃผ์‹ ๋‹ค๋ฉด ๋ณด๋Š” ์ฆ‰์‹œ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. **JPA๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธ€์„ ์ฝ๊ธฐ ์œ„ํ•ด์„œ๋Š” JPA์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 

 

 

2022. 10.

** ๋ณ„๋„์˜ API๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ํž˜๋“ค๋‹ค๊ณ  ํŒ๋‹จํ•ด ์ด ํฌ์ŠคํŒ…์€ ๊ทธ ๋‹น์‹œ์˜ ์ƒ๊ฐ, ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ• ์ •๋„๋กœ ์ฝ์–ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

 

 

 

 

1. ๋ณ„๋„์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ํ•„์š”ํ• ๊นŒ?


๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค๋•Œ ๋Œ“๊ธ€์€ ๊ฒŒ์‹œ๊ธ€์˜ ํ•˜์œ„์— ์†ํ•ด์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ /api/posts/{postId}/comments/{commentId} ์™€ ๊ฐ™์ด API๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, ๋ฌผ๋ก  ๊ฒŒ์‹œ๊ธ€๊ณผ ๋ณ„๊ฐœ๋กœ ๋Œ“๊ธ€๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…๋งŒ์„ ํ•˜๊ธฐ ์œ„ํ•ด /api/comments/{commentId} ์™€ ๊ฐ™์ด ๋ณ„๋„์˜ API๋ฅผ ๋‘˜ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

 

 

 

๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ณผ์—ฐ ๋Œ“๊ธ€์„ ์œ„ํ•œ ๋ณ„๋„์˜ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ•„์š”ํ• ๊นŒ? / ๋Œ“๊ธ€์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๊ผญ ํ•„์š”ํ• ๊นŒ? ์™€ ๊ฐ™์€ ์˜๋ฌธ์ ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ“๊ธ€์€ ๊ฒŒ์‹œ๊ธ€์— ์ข…์†์ ์ด๊ธฐ์— ๊ฒŒ์‹œ๊ธ€์„ ํ†ตํ•ด ๋Œ“๊ธ€์„ ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ๋ฃจํŠธ(์• ๊ทธ๋ฆฌ๊ฒŒ์ž‡)๋กœ ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ  ์ด๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ์ ์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. 

 

๋Œ“๊ธ€์„ ์ž‘์„ฑ/์ˆ˜์ •/์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ํ•„์š”ํ• ๊นŒ?

 

 

 

 

 

2. ์• ๊ทธ๋ฆฌ๊ฒŒ์ž‡์œผ๋กœ ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ ๊ด€๋ฆฌํ•˜๊ธฐ


์œ„์— ๋งํ–ˆ๋˜ ๋‚ด์šฉ์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ๋ฐ”๋€์ ์ด ์žˆ๋Š”๋ฐ์š”, ์œ„์—์„œ ๋งํ–ˆ๋˜ ๊ฒŒ์‹œ๊ธ€์ด ์Šคํ„ฐ๋””๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ ํ•˜๋‚˜์˜ ์Šคํ„ฐ๋””์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋Œ“๊ธ€์ด ๋‹ฌ๋ฆด ์ˆ˜ ์žˆ๊ณ  API๊ฐ€ /api/study/{studyId}/comments/{commentId} ์™€ ๊ฐ™์ด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

post๊ฐ€ study๋กœ ๋ณ€๊ฒฝ

 

 

 

 

 

์ด์ œ ์—”ํ‹ฐํ‹ฐ์™€ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์Šคํ„ฐ๋””๋ฅผ ์ƒ์„ธ ์กฐํšŒํ•˜๋ฉด ๋Œ“๊ธ€์ด ํ•จ๊ป˜ ๋”ธ๋ ค์™€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—  Comments๋ผ๋Š” ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์„ ๋งŒ๋“ค์–ด์„œ @OneToMany ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. **์กฐํšŒ์˜ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด @OneToMany๋ฅผ ๋งบ์–ด์คฌ์œผ๋ฉฐ, Soft Delete๋ฅผ ๊ตฌํ˜„ํ–ˆ๊ธฐ ํ–ˆ๋ฌธ์— cascade๋Š” PERSIST๋งŒ ์„ค์ •ํ•ด์คฌ์Šต๋‹ˆ๋‹ค. ์กฐํšŒ๊ฐ€ ๋นˆ๋ฒˆํ•˜์ง€ ์•Š๋‹ค๋ฉด @OneToMany ๊ด€๊ณ„๋Š” ๊ตณ์ด ๋งบ์ง€ ์•Š์œผ์…”๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. 

 

 

 

 

 

 

๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑ/์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์Šคํ„ฐ๋””์— ๋Œ“๊ธ€์ด ์กดํ•ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ๋Œ“๊ธ€์˜ ์ƒ์œ„(์• ๊ทธ๋ฆฌ๊ฒŒ์ž‡)์˜ PK๋กœ ์Šคํ„ฐ๋””๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์ž‘์„ฑํ•  ๋Œ“๊ธ€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ƒ์„ฑํ•ด ์ฐพ์•„์˜จ ์Šคํ„ฐ๋”” ์—”ํ‹ฐํ‹ฐ ๋‚ด๋ถ€์˜ Comments ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. ** ๋ฌผ๋ก  ์ด ๊ณผ์ •์—์„œ ์Šคํ„ฐ๋”” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๋’ค์—์„œ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

๋Œ“๊ธ€ ์ƒ์„ฑ์ž์ž์™€ ๋Œ“๊ธ€ ์ถ”๊ฐ€๋กœ์ง์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ž‘์„ฑํ•œ ์‚ฌ๋žŒ์„ ๋“ฑ๋กํ•˜๊ณ  ์ƒ์„ฑ๋œ ๋Œ“๊ธ€ ์—”ํ‹ฐํ‹ฐ๋ฅผ Comments๋‚ด๋ถ€์˜ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

 

 

 

 

 

 

์ด๋ฒˆ์—” ๋Œ“๊ธ€ ์ˆ˜์ •์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋Œ“๊ธ€ ์ˆ˜์ •๋„ ๊ฑฐ์˜ ๊ฐ™์€๋ฐ ํ•œ ๊ฐ€์ง€๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํŽ˜์น˜์กฐ์ธ์œผ๋กœ ํ•ด๋‹น ์Šคํ„ฐ๋””๊ฐ€ ์ž์‹ ๊ณผ ์—ฐ๊ด€๋œ ๋Œ“๊ธ€์„ ๋ชจ๋‘ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š”๋ฐ์š”, ๊ทธ๋ž˜์•ผ ๋ณ„๋„์˜ ์ถ”๊ฐ€์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. **fetchJoin( )์€ in์ ˆ๋กœ ์ž์‹ ๊ณผ ์—ฐ๊ด€๋œ ๊ฐ’์„ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

์ดํ›„ ์Šคํ„ฐ๋”” ๋‚ด๋ถ€์— ์žˆ๋Š” ๋Œ“๊ธ€๋ฆฌ์ŠคํŠธ์—์„œ ํ•ด๋‹น ๋Œ“๊ธ€์„ ์ฐพ์•„์˜จ ํ›„ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ฉ”์„œ๋“œ๋Š” ๋Œ“๊ธ€์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์—”ํ‹ฐํ‹ฐ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ๋Œ“๊ธ€์„ ์ฐพ์•„์˜ค๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. 

 

 

 

 

 

 

 

์œ„์™€๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณ„๋„์˜ ๋Œ“๊ธ€ ์ปจํŠธ๋กค๋Ÿฌ/๋ ˆํฌ์ง€ํ† ๋ฆฌ ์—†์ด๋„ CasCade๋ฅผ ํ†ตํ•ด ๋‚ด์šฉ์„ ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ ์€ ๊ด€๋ฆฌ ํฌ์ธํŠธ๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์Šคํ„ฐ๋””(๋ฃจํŠธ ์—”ํ‹ฐํ‹ฐ)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋Œ“๊ธ€๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ ํฌ์ธํŠธ๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” CommentController๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณ„๋„์˜ api๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ–ˆ์ง€๋งŒ ์ด์ œ๋Š” StudyController ํ•˜๋‚˜์˜ ์—”๋“œํฌ์ธํŠธ๋งŒ์œผ๋กœ, Study ์—”ํ‹ฐํ‹ฐ๋งŒ์œผ๋กœ ๋ชจ๋“  ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. [์ด๋ฏธ์ง€ ์ถœ์ฒ˜]

 

๋ฃจํŠธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ†ตํ•ด ์ž‘์—…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ๋ผ๋ฆฌ๋Š” ์ฐธ์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

 

 

3. Conclusion


๋ฌผ๋ก  ์—ฌ๊ธฐ์— ์žฅ์ ๋งŒ ์žˆ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์œ„ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ž์‹ ์˜ ๋ฃจํŠธ(์• ๊ทธ๋ฆฌ๊ฒŒ์ž‡) PK๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ด๋‹น ์• ๊ทธ๋ฆฌ๊ฒŒ์ž‡์„ ํ†ตํ•ด์„œ๋งŒ ๋ชจ๋“  ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—”ํ‹ฐํ‹ฐ์— ๋งŽ์€ ๋กœ์ง์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ , ์—”ํ‹ฐํ‹ฐ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์ด ํ•„์ˆ˜์ ์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ (๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž˜ ์„ค๊ณ„ํ•˜๊ฑฐ๋‚˜ ์—”ํ‹ฐํ‹ฐ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์–ด๋””๊นŒ์ง€ ํ—ˆ์šฉํ• ์ง€ ์ œํ•œ์„ ์ž˜ ๋‘ฌ์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ๋ถ€๋ถ„์—์„œ ํŒ€์›๋“ค๊ณผ ํ˜‘์˜๊ฐ€ ๋งž์•„์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 

 

๋˜ํ•œ ์ด ๊ณผ์ •์—์„œ ์ถ”๊ฐ€์ฟผ๋ฆฌ๊ฐ€ 1~2๋ฒˆ ์ •๋„ ๋” ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Š” ์–ด๋Š์ •๋„ ๊ฐ์ˆ˜ํ•ด์•ผํ•  ์˜์—ญ์ด๋ผ๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. 

 

 

 

** ์ถ”๊ฐ€

์—”ํ‹ฐํ‹ฐ์— ๋กœ์ง์ด ๋งŽ์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค ์žฅ์ ์ด๋ผ ๋ณผ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, ์—”ํ‹ฐํ‹ฐ์— ๋กœ์ง์ด ๋งŽ์ด๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ์‘์ง‘์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์—”ํ‹ฐํ‹ฐ์—์„œ ์—ฐ๊ด€๋œ ๋กœ์ง์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ์ ์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค์ˆ˜ํ•  ์—ฌ์ง€๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

 

๋Œ“๊ธ€