๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ์ ํŠธ/๊ฐœ์ธ ํ”„๋กœ์ ํŠธ

์ผ์ • ๊ด€๋ฆฌ ์•ฑ Develop_ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

by carrot0911 2024. 12. 19.

๊ณผ์ œ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

 

๋ฌธ์ œ ์ƒํ™ฉ

์ผ์ • ์ƒ์„ฑ API๋ฅผ ์™„์„ฑํ•˜๊ณ  Postman์œผ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์ง€๋งŒ 500 Internal Server Error๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๋ฌธ์ œ ์›์ธ

์ฝ”๋“œ์—์„œ @EntityListeners ์–ด๋…ธํ…Œ์ด์…˜์ด ์ž˜๋ชป๋œ ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

์ž˜๋ชป๋œ ์ฝ”๋“œ

@EntityListeners(EntityListener.class)
  • ์ด๋กœ ์ธํ•ด EntityListener๊ฐ€ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์•„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

@EntityListeners ์–ด๋…ธํ…Œ์ด์…˜์„ ์˜ฌ๋ฐ”๋ฅธ ํด๋ž˜์Šค์ธ AuditingEntityListener๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.

์ˆ˜์ •๋œ ์ฝ”๋“œ

@EntityListeners(AuditingEntityListener.class)

์ˆ˜์ • ํ›„ Postman์œผ๋กœ ๋‹ค์‹œ ์š”์ฒญ์„ ๋ณด๋ƒˆ๊ณ , ์ •์ƒ์ ์œผ๋กœ ์ผ์ •์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค.

๊ฒฐ๋ก 

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์–ด๋…ธํ…Œ์ด์…˜์ด ์ฐธ์กฐํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๋ฐฐ์› ๋‹ค.
Spring JPA์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค.


๋ฌธ์ œ ์ƒํ™ฉ

์ผ์ • ์ˆ˜์ • API๋ฅผ ๊ตฌํ˜„ํ•œ ํ›„ Postman์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒˆ์ง€๋งŒ, ์ˆ˜์ • ํ›„ ๋‹ค์‹œ ์„ ํƒ ์ผ์ • ์กฐํšŒ๋ฅผ ํ–ˆ์„ ๋•Œ ๋‚ด์šฉ์ด ๋ฐ”๋€Œ์ง€ ์•Š์•˜๋‹ค.

๋ฌธ์ œ ์›์ธ

@Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ํŠธ๋žœ์žญ์…˜์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ˆ˜์ • ์ž‘์—…์ด ์ œ๋Œ€๋กœ ๋ฐ˜์˜๋˜์ง€ ์•Š์•˜๊ณ , ์ˆ˜์ • ์ „์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜์—ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

@Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์ˆ˜์ • ๋ฉ”์„œ๋“œ์— ์ถ”๊ฐ€ํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ํ™œ์„ฑํ™”ํ–ˆ๋‹ค.

  • Postman์œผ๋กœ ๋‹ค์‹œ ์š”์ฒญ์„ ๋ณด๋‚ธ ํ›„, ์ˆ˜์ •๋œ ๋‚ด์šฉ์ด ์ •์ƒ์ ์œผ๋กœ ๋ฐ˜์˜๋˜์—ˆ๋‹ค.

๊ฒฐ๋ก 

Spring์—์„œ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ž‘์—…์—๋Š” @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.
ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ˆ˜์ • ์ž‘์—…์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ˜์˜๋˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜๋‹ค.


๋ฌธ์ œ ์ƒํ™ฉ

์ผ์ • ์กฐํšŒ ์‹œ ๋ฉค๋ฒ„ ์ •๋ณด๋„ ํ•จ๊ป˜ ๋ฐ˜ํ™˜๋˜๋„๋ก ๊ตฌํ˜„ํ–ˆ์œผ๋‚˜, ์ „์ฒด ์ •๋ณด๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉด์„œ ์ž‘์„ฑ์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๊นŒ์ง€ ๋…ธ์ถœ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๋ฌธ์ œ ์›์ธ

๋ฉค๋ฒ„ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ, DTO(Data Transfer Object)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Entity๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด์„œ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ํ•จ๊ป˜ ๋…ธ์ถœ๋˜์—ˆ๋‹ค.
Entity๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด๋กœ, ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • MemberResponseDto๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•„์š”ํ•œ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ๋‹ค.
{
    "id": 1,
    "title": "ํ• ์ผ ์ œ๋ชฉ",
    "contents": "ํ• ์ผ ๋‚ด์šฉ",
    "member": {
        "id": 1,
        "username": "ํšŒ์› ์ด๋ฆ„1",
        "email": "tmvkfmxk@email.com"
    }
}
  • ์ผ์ • ์กฐํšŒ ์‹œ MemberResponseDto๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์œ ์ € ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

๊ฒฐ๋ก 

API์—์„œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก DTO๋ฅผ ์‚ฌ์šฉํ•ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.
์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ•ญ์ƒ DTO๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์–ดํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜๋‹ค.


๋ฌธ์ œ ์ƒํ™ฉ

๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ ํŠœํ„ฐ๋‹˜๊ป˜ ํ™•์ธ๋ฐ›์•˜๋Š”๋ฐ, ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๊ฐ€ ๋งŽ๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค.
ํŠนํžˆ, ์„œ๋น„์Šค์—์„œ ์ด๋ฏธ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒํ–ˆ์Œ์—๋„ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋‹ค์‹œ ์•„์ด๋””๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ํšŒ์›์„ ์ฐพ๋Š” ๋ณต์žกํ•œ ๋กœ์ง์ด ๋ฌธ์ œ๋กœ ์ง€์ ๋˜์—ˆ๋‹ค.

๋ฌธ์ œ ์›์ธ

์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ์ž‘์—…์ด ๋๋‚˜์•ผ ํ•˜์ง€๋งŒ,

  • ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ถ”๊ฐ€์ ์ธ ๋กœ์ง(์•„์ด๋”” ๋ฐ˜ํ™˜, ํšŒ์› ์žฌ์กฐํšŒ ๋“ฑ)์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ์ฝ”๋“œ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•ด์ง€๊ณ , ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€ ์ƒํƒœ์˜€๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๊ณ„์ธต์˜ ์—ญํ• ์„ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์„ ์ œ๊ฑฐํ•˜๊ณ ,

  • ์„œ๋น„์Šค์—์„œ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ์™„๋ฃŒ ์‹œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •ํ–ˆ๋‹ค.
  • ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋น„์Šค์—์„œ ๋ฐ˜ํ™˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ๋กœ ๋‹จ์ˆœํ™”ํ–ˆ๋‹ค.
  • ์ตœ์ข…์ ์œผ๋กœ ๊ฐ„๊ฒฐํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

๊ฒฐ๋ก 

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


๋ฌธ์ œ ์ƒํ™ฉ

๋Œ“๊ธ€ ์ƒ์„ฑ API ์™„์„ฑ ํ›„ Postman์œผ๋กœ ์‹คํ–‰ํ–ˆ์ง€๋งŒ NullPointException์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

๋ฌธ์ œ ์›์ธ

์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•œ ๊ฒฐ๊ณผ, comment.getMember( ) ํ˜ธ์ถœ ์‹œ ๋ฉค๋ฒ„ ๊ฐ์ฒด๊ฐ€ null์ธ ์ƒํƒœ์˜€๋‹ค.

  • ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณธ ๊ฒฐ๊ณผ, ํšŒ์› ์ •๋ณด์™€ ์ผ์ • ์ •๋ณด๊ฐ€ ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๋Œ“๊ธ€์„ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ๊ฒƒ์ด ์›์ธ์ด์—ˆ๋‹ค.
  • ๋Œ“๊ธ€์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์œ ์ €(Member)๊ณผ ์ผ์ •(Todo)์ด ์„ค์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ์˜€๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ํšŒ์›(Member)๊ณผ ์ผ์ •(Todo) ์ •๋ณด ๋“ฑ๋ก
    • ๋Œ“๊ธ€ ์ƒ์„ฑ ์ด์ „์—, ํšŒ์›๊ณผ ์ผ์ • ์ •๋ณด๋ฅผ ์ ์ ˆํžˆ ์„ค์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ–ˆ๋‹ค.
  • ๋Œ“๊ธ€ ์ƒ์„ฑ ์‹œ, ๋“ฑ๋ก๋œ ํšŒ์›๊ณผ ์ผ์ • ์ •๋ณด๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.
  • Postman์œผ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์„ ๋•Œ ์ •์ƒ์ ์œผ๋กœ ๋Œ“๊ธ€์ด ์ƒ์„ฑ๋˜์—ˆ๋‹ค.

๊ฒฐ๋ก 

API๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ํ•„์ˆ˜์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์Šต๊ด€์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.
๋Œ“๊ธ€๊ณผ ๊ฐ™์€ ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ๋งŽ์€ Entity์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ ์ˆœ์„œ์™€ ์˜์กด์„ฑ์„ ๊ผผ๊ผผํžˆ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜๋‹ค.
์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ž˜ ๋ถ„์„ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋œ๋‹ค๋Š” ์ ๋„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฒฝํ—˜ํ–ˆ๋‹ค.


๋ฌธ์ œ ์ƒํ™ฉ

์œ ์ €๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ผ์ •๊ณผ ๋Œ“๊ธ€์„ ์ƒ์„ฑํ•˜๊ณ , ์œ ์ €๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋‚˜ SQLIntegrityConstraintViolationException์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

๋ฌธ์ œ ์›์ธ

์œ ์ €์™€ ์ผ์ • ๋ฐ ๋Œ“๊ธ€ ๊ฐ„์˜ ์™ธ๋ž˜ํ‚ค ์ฐธ์กฐ ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

  • ์œ ์ €๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ํ•ด๋‹น ์œ ์ €๊ฐ€ ์ผ์ • ๋ฐ ๋Œ“๊ธ€๊ณผ ์—ฐ๊ด€๋˜์–ด ์žˆ์–ด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„๋ฐ˜ํ–ˆ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์—ฌ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

  1. Soft Delete
    • ์œ ์ € ๋ฐ์ดํ„ฐ๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ , ์‚ญ์ œ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์†Œํ”„ํŠธ ์‚ญ์ œ ๊ตฌํ˜„.
    • ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์‚ญ์ œ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Œ.
  2. Hard Delete
    • ์œ ์ € ์‚ญ์ œ ์‹œ ๊ด€๋ จ ์ผ์ • ๋ฐ ๋Œ“๊ธ€์„ Cascade ์˜ต์…˜์œผ๋กœ ํ•จ๊ป˜ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜, ์™ธ๋ž˜ํ‚ค ๊ด€๊ณ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ํ•ด์ œ ํ›„ ์‚ญ์ œ.

ํ˜„์žฌ ์‹œ๊ฐ„ ๋ถ€์กฑ์œผ๋กœ ๊ณผ์ œ ์ œ์ถœ ํ›„ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์˜ˆ์ •.

๊ฒฐ๋ก 

๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์—ฐ๊ด€ ๊ด€๊ณ„(์™ธ๋ž˜ํ‚ค ์ฐธ์กฐ)๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ญ์ œ์™€ ๊ด€๋ จ๋œ ์ „๋žต(Soft Delete vs. Hard Delete)์„ ์‚ฌ์ „์— ๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๋ฐฐ์› ๋‹ค.
์‚ญ์ œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๋Š” ์„ค๊ณ„๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค.
๊ณผ์ œ ์ดํ›„, ์ ์ ˆํ•œ ์‚ญ์ œ ์ „๋žต์„ ์„ ํƒํ•˜๊ณ  ์ด๋ฅผ ๊ตฌํ˜„ํ•  ๊ณ„ํš์ด๋‹ค.