Backend/Kotlin

템플릿 콜백 패턴으로 redisson 분산락 구현하기 (feat. Trailing Lambdas)

양글렛 2023. 9. 18. 21:04
728x90

분산 락은 대부분 redisson pub/sub 을 이용해 구현한다. ( 인프라가 갖춰져 있다면 )

여기서는 분산 락에 대해 설명하지않고 넘어가겠다.

 

분산 락을 구현하는 코드를 살펴보자

나는 이 코드를 보고 바로 AOP 나 전략 패턴이 떠올랐다.

그래서 처음에 AOP 로 구현해 보려고 어노테이션으로 키 값을 파싱 하는 법 이런 걸 찾아보다가 마켓컬리에서 이미 글을 써놓은 것을 보았다.

역시 내가 떠올렸다면 누구든 떠올렸겠지 ..

https://helloworld.kurly.com/blog/distributed-redisson-lock/

 

풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redisson

어노테이션 기반으로 분산락을 사용하는 방법에 대해 소개합니다.

helloworld.kurly.com

 

그래서 나는 널리고 널린 AOP 말고 전략 패턴을 이용해서 구현하고 글 써야지 ~ 라고 생각했다.

참고로 템플릿 콜백 패턴은 전략 패턴과 살짝 다른데, 내가 쓴 다른 글을 소개하고 넘어간다

https://yanglet.tistory.com/9

 

[Design Pattern] 전략 패턴

전략 패턴이란? 전략 패턴은 특정 컨텍스트에서 로직을 별도로 분리하는 설계하는 방식이다. 템플릿 메소드 패턴과 유사하게 변하지 않는 부분을 Context라는 곳에 두고, 변하는 부분을 Stratege라

yanglet.tistory.com

 

구현하기에 앞서 Kotlin 의 Trailing Lambdas 라는 문법이 있다.

함수의 마지막 파라미터가 함수일 때 이런 식으로 사용할 수 있다.

// 1 과 { println(10) } 를 파라미터로 받는 함수 호출
val result = callFunction(1, { println(10) })

// 위와 같음
val result = callFunction(1) { println(10) }

 

그럼 이제 어떻게 구현했는지 보자.

DistributedLockService 를 만들었다.

ItemService 에서 distributedLockService 를 DI 받아서 아래와 같이 구현했다.

테스트 코드도 짜보자

잘되는구만!

 

끝.

 

728x90