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
MSA ์•„ํ‚คํ…์ฒ˜์—์„œ API ๋ฌธ์„œ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ

MSA ์•„ํ‚คํ…์ฒ˜์—์„œ API ๋ฌธ์„œ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ

1. ๊ฐœ์š”ํ˜„์žฌ Spring Cloud๋ฅผ ์ด์šฉํ•ด์„œ MSA ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ ์ค‘์ด๋‹ค. ๊ธฐ์กด์˜ ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ž‘์„ฑํ•œ API๋ฅผ ํ•˜๋‚˜์˜ API ๋ฌธ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.  ํ•˜์ง€๋งŒ MSA๋Š” ๊ฐ๊ฐ์˜ ๋„๋ฉ”์ธ์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ฐ๊ฐ์˜ ๋„๋ฉ”์ธ๋งˆ๋‹ค API ๋ฌธ์„œ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ด API ๋ฌธ์„œ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค ์ž…์žฅ์—์„  ๊ฐ๊ฐ์˜ API ๋ฌธ์„œ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ต‰์žฅํžˆ ๋ถˆํŽธํ•˜๊ณ  ๋น„ํšจ์œจ์ ์ด๋‹ค.   MSA ํ™˜๊ฒฝ์—์„œ API ๋ฌธ์„œ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜๊ณ  ๊ณต์œ ํ•˜๊ณ ์ž ์ด ๊ธ€์„ ์ž‘์„ฑํ•œ๋‹ค.         2. ์˜์กด์„ฑ ์ถ”๊ฐ€๋จผ์ € Swagger ์‚ฌ์šฉ์„ ์œ„ํ•ด API Gateway์— ์˜์กด์„ฑ ์ถ”๊ฐ€๋ฅผ ํ•ด์ฃผ์ž.  ์—ฌ๊ธฐ ์—์„œ ๊ฐ ๋ฒ„์ „์— ๋งž๋Š” ์˜์กด์„ฑ..

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

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

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

  • textsms