[kurly tech blog] Redisson, Spring AOP ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ๋ฝ ์ ์šฉ ๋ฐฉ๋ฒ• summary

2024. 11. 26. 13:38ยท๐Ÿ“‚ backend/spring
 

ํ’€ํ•„๋จผํŠธ ์ž…๊ณ  ์„œ๋น„์ŠคํŒ€์—์„œ ๋ถ„์‚ฐ๋ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• - Spring Redisson

์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„์‚ฐ๋ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

helloworld.kurly.com

 

1. RMS(Receiving Management System - ์ž…๊ณ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ) ์˜ ๋™์‹œ์„ฑ ๋ฌธ์ œ

  1. ์นดํ”„์นด๋กœ ๋™์‹œ์— ๋“ค์–ด์˜ค๋Š” ์ค‘๋ณต๋œ ๋ฐœ์ฃผ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒฝ์šฐ
  2. ๊ฒ€์ˆ˜/๊ฒ€ํ’ˆ ์ด์Šˆ ๋“ฑ๋ก ์‹œ ๋”๋ธ” ํด๋ฆญ, ๋„คํŠธ์›Œํฌ ์ด์Šˆ๋กœ ์ธํ•ด ์ค‘๋ณต๋œ ์š”์ฒญ์ด ๋™์‹œ์— ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ
  3. ์ด๋™ ์ถœ๊ณ ์‹œ ์—ฌ๋Ÿฌ ์ž‘์—…์ž๊ฐ€ CTA๋ฅผ ๋™์‹œ์— ํด๋ฆญํ•˜์—ฌ ์ž˜๋ชป๋œ ์žฌ๊ณ  ํŠธ๋žœ์žญ์…˜์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ

 

2. Redisson library ๋ฅผ ์„ ์ •ํ•œ ์ด์œ 

(1) Redisson Library ์˜ ์žฅ์ 

  • Pub/Sub ๋ฐฉ์‹์„ ์ด์šฉํ•ด ๋ฝ์ด ํ•ด์ œ๋  ๊ฒฝ์šฐ ๋ฝ์„ subscribe ํ•˜์—ฌ ๋ฝ ํš๋“์„ ์‹œ๋„ํ•˜์—ฌ Redis ์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • Lock interface ๋ฅผ ์ง€์›ํ•ด retry, timeout ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค.

(2) Lettuce ์„ ์ด์šฉํ•œ ๋ถ„์‚ฐ๋ฝ ๊ตฌํ˜„์˜ ๋‹จ์ 

  • ๋ถ„์‚ฐ๋ฝ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • setnx, setex ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ์Šคํ•€๋ฝ ๋ฐฉ์‹์ด๋ฏ€๋กœ ์ง€์†์ ์œผ๋กœ Redis ์—๊ฒŒ ๋ฝ ํ•ด์ œ ์—ฌ๋ถ€๋ฅผ ๋ฌผ์–ด๋ด Redis ๋ถ€ํ•˜๊ฐ€ ์ปค์ง„๋‹ค.

 

3. ๋ถ„์‚ฐ ๋ฝ์„ ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ ๋…ธ๋ ฅ

  1. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์˜ค์—ผ๋˜์ง€ ์•Š๊ฒŒ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  2. waitTime, leaseTime ์„ ์ปค์Šคํ…€ํ•˜๊ฒŒ ์ง€์ •ํ•˜๊ณ  ์‹ถ๋‹ค.
  3. ๋ฝ ์ด๋ฆ„(lock name) ์„ ์‚ฌ์šฉ์ž๋กœ ๋ถ€ํ„ฐ ์ปค์Šคํ…€ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค.
  4. ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ณตํ†ต์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค.
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Spring AOP ๋ฅผ ์ด์šฉํ•œ ๋ถ„์‚ฐ๋ฝ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ๋กœ ํ•จ.

 

4. ์ปดํฌ๋„ŒํŠธ ์ •๋ฆฌ

1. DistributedLockAop : @DistributedLock annotation ์„ ๋งคํ•‘ํ•˜์—ฌ ๋ถ„์‚ฐ๋ฝ์„ ์„ค์ •, ํ•ด์ œํ•˜๋Š” Aspect ํด๋ž˜์Šค

 

2. CustomSpringELParser : SpelExpressionParser ๋ฅผ ์ด์šฉํ•ด ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ๊ฐ€์ ธ์™€ key ๊ฐ’์„ spel ํ˜•์‹์— ๋งคํ•‘ํ•˜์—ฌ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์œ ํ‹ธ ํด๋ž˜์Šค

 

3. AopForTransaction : Tx commit ์ดํ›„์— Lock ์„ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•œ ์ปดํฌ๋„ŒํŠธ

 

5. ๋‚ด์šฉ ์ •๋ฆฌ

  1. ๋ถ„์‚ฐ ๋ฝ(Lock) ์€ ๋ฝ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ณตํ†ต์ ์œผ๋กœ ๋ณด๊ด€ํ•˜๋Š” ์˜์—ญ์— ๋ณด๊ด€ํ•˜์—ฌ ์ž„๊ณ„ ์˜์—ญ์„ ์ ‘๊ทผ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ ๋™์‹œ์„ฑ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•.
  2. ๋ถ„์‚ฐ๋ฝ์„ ํ•ด์ œํ•  ๋•Œ ๋Š” ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ(Data Integrity) ์„ ์œ„ํ•ด Tx commit ์ดํ›„ ์‹œ์ ์— ๋ฝ์„ ํ•ด์ œํ•˜๋ผ.

ํ‹ฐ์ผ“ ๊ตฌ๋งค 100๊ฐœ ์š”์ฒญ ์‹œ, ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ํ™•์ธ

 

 

6. Sample Code

  • https://github.com/pbg0205/BE-tutorials/tree/main/cooper-lab/spring-redisson-with-aop
  • https://github.com/pbg0205/BE-tutorials/tree/main/cooper-lab/spring-redisson-integrity-test

'๐Ÿ“‚ backend > spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋น„๊ด€์  ๋ฝ vs ๋‚™๊ด€์  ๋ฝ(In JPA)  (0) 2024.11.28
MessageSourceAutoConfiguration ์ฝ”๋“œ ๊ฒ€ํ† ํ•˜๊ธฐ  (0) 2024.11.28
Spring Batch ๊ธฐ๋ฐ˜ ํšŒ์› ์‚ญ์ œ ๋ฐฐ์น˜ ์‚ฝ์งˆ ๊ธฐ๋ก  (0) 2024.09.03
[Spring Batch] Job ์‹คํ–‰ ํ”„๋กœํผํ‹ฐ, JobParameter, Scope  (0) 2024.08.26
Spring Batch Architecture  (0) 2024.05.10
'๐Ÿ“‚ backend/spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋น„๊ด€์  ๋ฝ vs ๋‚™๊ด€์  ๋ฝ(In JPA)
  • MessageSourceAutoConfiguration ์ฝ”๋“œ ๊ฒ€ํ† ํ•˜๊ธฐ
  • Spring Batch ๊ธฐ๋ฐ˜ ํšŒ์› ์‚ญ์ œ ๋ฐฐ์น˜ ์‚ฝ์งˆ ๊ธฐ๋ก
  • [Spring Batch] Job ์‹คํ–‰ ํ”„๋กœํผํ‹ฐ, JobParameter, Scope
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (84)
      • ๐Ÿ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • ๐Ÿ“‚ computer-science (5)
      • ๐Ÿ“‚ programming-language (12)
        • java (12)
      • ๐Ÿ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • ๐Ÿ“‚ cloud (2)
        • aws (2)
      • ๐Ÿ“‚ frontend (1)
        • react (0)
      • ๐Ÿ“‚ education & lecture (16)
        • ์ธํ”„๋ผ ๊ณต๋ฐฉ (11)
        • ํ•ญํ”Œ ๋ฐฑ์—”๋“œ 7๊ธฐ (5)
      • ๐Ÿ“‚ ai (1)
        • claude (1)
      • ๐Ÿ“‚ etc (2)
        • ํšŒ๊ณ  (1)
        • ์ปจํผ๋Ÿฐ์Šค (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์Šคํ”„๋ง์บ ํ”„ ํ›„๊ธฐ
    ์ธํ”„๋ผ๊ณต๋ฐฉ
    nGrinder
    gof
    mysql
    UUID
    kafka
    ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์„ค๊ณ„
    ํ•ญํ•ดํ”Œ๋Ÿฌ์Šค
    ํšŒ๊ณ 
    spring
    react
    ๋™์‹œ์„ฑ
    spring-batch
    JPA
    AWS
    spring AOP
    ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„
    Redisson
    spring camp 2025
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
cooper25
[kurly tech blog] Redisson, Spring AOP ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ๋ฝ ์ ์šฉ ๋ฐฉ๋ฒ• summary
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”