๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Tech Stack/Database2

[DB] [๋™์‹œ์„ฑ์ œ์–ด] ๋‚™๊ด€์  ๋ฝ๊ณผ ๋น„๊ด€์  ๋ฝ ๊ฒŒ์‹œ๊ธ€(Post), ๋Œ“๊ธ€(Comment) ์ข‹์•„์š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ์— ์•ž์„œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ข‹์•„์š”๋ฅผ ๋™์‹œ์— ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.์ถฉ๋Œ์ด ๋ฐœ์ƒ ์•ˆํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ ๋ฐฉ๋ฒ•์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฝ(Lock)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ Redis๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฝ(Lock)์ด ๋ฌด์—‡์ธ์ง€ ๋จผ์ € ์•Œ์•„ ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ์œ„ํ˜‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋™์‹œ์— ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋ ค๋Š” ๋‹ค์–‘ํ•œ ์š”์ฒญ๋“ค์„ ์ž˜ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์€ ํ•„์ˆ˜์ ์ธ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ์ ์ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋น„๊ด€์  ๋ฝ(pessimistic lock)๋น„๊ด€์  ๋ฝ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๋ฏธ๋ฆฌ.. 2025. 9. 16.
[JPA] [MySQL] ON DELETE CASCADE์™€ ์†Œํ”„ํŠธ ์‚ญ์ œ(Soft Delete) 1. ๋ฌธ์ œ ์ƒํ™ฉ๊ฒŒ์‹œ๊ธ€(Post)์„ ์‚ญ์ œํ•  ๋•Œ, ๊ทธ ์•ˆ์— ์žˆ๋Š” ๋Œ“๊ธ€(Comment)๋„ ํ•จ๊ป˜ ์‚ญ์ œ ๋˜๋„๋ก ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.๊ฒ€์ƒ‰์„ ํ•˜๋‹ค๊ฐ€ @OnDelete ์–ด๋…ธํ…Œ์ด์…˜์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€๋ชจ(Post)๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์ž์‹(Comment)๋„ ๊ฐ™์ด ์‚ญ์ œ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์šฉํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ๊ทธ๋Œ€๋กœ ์˜€๋‹ค.constraint FKh4c7lvsc298whoyd4w9ta25cr foreign key (post_id) references posts (id) ์ด ์™ธ๋ž˜ํ‚ค์—๋Š” ON DELETE CASCADE ์˜ต์…˜์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ถ€๋ชจ(Post)๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ž์‹(Comment)์ด ๋‚จ์•„์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.Cannot delete or update a parent row: a fo.. 2025. 9. 10.