[Spring Boot] @Transactional์˜ 7๊ฐ€์ง€ ์ „ํŒŒ ์†์„ฑ, ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•œ ๋กค๋ฐฑ ๊ฒ€์ฆ

[Spring Boot] @Transactional์˜ 7๊ฐ€์ง€ ์ „ํŒŒ ์†์„ฑ, ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•œ ๋กค๋ฐฑ ๊ฒ€์ฆ

1. ๊ฐœ์š”๋งค์ผ ๊ฐœ๋ฐœํ•˜๋ฉฐ ์‚ฌ์šฉํ•ด์˜ค๋˜ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•ด ์•„๋Š”๊ฒŒ ๋„ˆ๋ฌด ์—†๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค. ์—ฌ๋Ÿฌ ์ „ํŒŒ ์ „๋žต, ์˜ต์…˜์ด ์žˆ๋‹ค๋Š”๊ฑฐ ์ •๋„๋งŒ ์•Œ๊ณ ์žˆ์—ˆ์ง€๋งŒ, ๊นŠ๊ฒŒ ๊ณ ๋ คํ•ด๋ณด์ง„ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค.   ์ด์ฐธ์— ๊ณต๋ถ€ํ•˜๊ณ  ์ œ๋Œ€๋กœ ์•Œ๊ณ  ์‚ฌ์šฉํ•˜๊ณ ์ž ์ด ๊ธ€์„ ์ž‘์„ฑํ•œ๋‹ค.          2. ํŠธ๋žœ์žญ์…˜์ด๋ž€?@Transactional ์„ ์•Œ์•„๋ณด๊ธฐ ์•ž์„œ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ํ•œ๋ฒˆ ๋” ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž. ํŠธ๋žœ์žญ์…˜(Transaction)์˜ ์‚ฌ์ „์  ์˜๋ฏธ๋Š” ๊ฑฐ๋ž˜์ด๊ณ ,์ปดํ“จํ„ฐ ๊ณผํ•™ ๋ถ„์•ผ์—์„œ์˜ ํŠธ๋žœ์žญ์…˜(Transaction)์€ "๋”์ด์ƒ ๋ถ„ํ• ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์—…๋ฌด์ฒ˜๋ฆฌ์˜ ๋‹จ์œ„"๋ฅผ ์˜๋ฏธํ•œ๋‹ค.  ์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์œ„ํ•ด ๋”์ด์ƒ ๋ถ„ํ• ๋  ์ˆ˜ ์—†๋Š” ๋ช…๋ น๋“ค์˜ ๋ชจ์Œ, ์ฆ‰, ํ•œ๊บผ๋ฒˆ์— ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•  ์ผ๋ จ์˜ ์—ฐ์‚ฐ๋ชจ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ด..

  • textsms
Spring Security RBAC ์„ค์ •, @PreAuthorize ๋กœ ์Œˆ@๋ฝ•ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ

Spring Security RBAC ์„ค์ •, @PreAuthorize ๋กœ ์Œˆ@๋ฝ•ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ

1. ๊ฐœ์š”์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์˜ api ๊ฐœ์ˆ˜๊ฐ€ ์–ด๋Š์ƒˆ 90๊ฐœ๊ฐ€ ๋‹ค๋˜๊ฐ„๋‹ค. Spring Security๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ RBAC(Role-Based Access Control)์„ ๊ตฌํ˜„ ํ•˜๊ณ ์žˆ๊ณ , ์ด ์„ค์ •์€ Security Config์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค. ์ƒˆ๋กœ์šด ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ๋งˆ๋‹ค ๊ธฐ์กด์˜ ์„ค์ •๊ณผ ์ž˜ ๋งค์นญ๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ–ˆ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ถ”๊ฐ€์ ์ธ ์„ค์ •์ด ํ•„์š”ํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ • ๋•Œ๋ฌธ์— ์ง€๊ธˆ๊นŒ์ง€ ๊ฐœ๋ฐœ๋œ API๋“ค์— RBAC์ด ์ œ๋Œ€๋กœ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ต๊ณ , ๋†“์นœ ๋ถ€๋ถ„์„ ์ ๊ฒ€ํ•˜๋Š” ๊ฒƒ๋„ ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์ด ํ•„์š”ํ–ˆ๋‹ค.  URL์— prefix๋กœ ROLE์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ผ๊ด„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•ด ๋ณด์•˜์ง€๋งŒ, ๋ณด์•ˆ์ƒ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ๋ฐ›์•˜๋‹ค.    ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ ์•Œ์•„๋ณด๋‹ค, ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ์จ ..

  • textsms
DB ๋ฐ์ดํ„ฐ ์‚ญ์ œ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ, Soft Delete(๋…ผ๋ฆฌ ์‚ญ์ œ) vs Hard Delete(๋ฌผ๋ฆฌ ์‚ญ์ œ)

DB ๋ฐ์ดํ„ฐ ์‚ญ์ œ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ, Soft Delete(๋…ผ๋ฆฌ ์‚ญ์ œ) vs Hard Delete(๋ฌผ๋ฆฌ ์‚ญ์ œ)

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

  • textsms
๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•, ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ์˜ ๋™์‹œ์„ฑ ๋ฌธ์ œ

๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•, ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ์˜ ๋™์‹œ์„ฑ ๋ฌธ์ œ

1. ๊ฐœ์š” ๋ฒŒ์จ ๋™์‹œ์„ฑ ๊ด€๋ จ ํฌ์Šคํ„ฐ๋งŒ 4๊ฐœ์งธ์ด๋‹ค... ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„  MySQL Lock์„ ๊ฑธ์–ด ๋™์‹œ์„ฑ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ–ˆ์—ˆ๋Š”๋ฐ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ์•Œ๊ฒŒ๋˜์–ด ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•œ๋‹ค.   ๋‹จ์ผ ํ™˜๊ฒฝ์—์„  DB์— ๋น„๊ด€์  ๋ฝ ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ ๋Œ€์˜ DB๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ„์‚ฐ DB ํ™˜๊ฒฝ์—์„œ๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋•Œ ๋ถ„์‚ฐ ๋ฝ์„ ํ™œ์šฉํ•ด ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. Redis๋Š” ๋ถ„์‚ฐ๋ฝ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.     2. ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ์ผ์–ด๋‚  ๊ฒฝ์šฐ๋‹ค์Œ์€ ์žฌ๊ณ  ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์žˆ๊ณ  ์žฌ๊ณ  ๊ฐ์†Œ๋ฅผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.    - Entity@Entity@Getter@NoArgsConstructor@AllArgsConstructorpublic class Stock { ..

  • textsms