-
템플릿 콜백 패턴으로 redisson 분산락 구현하기 (feat. Trailing Lambdas)Backend/Kotlin 2023. 9. 18. 21:04728x90
분산 락은 대부분 redisson pub/sub 을 이용해 구현한다. ( 인프라가 갖춰져 있다면 )
여기서는 분산 락에 대해 설명하지않고 넘어가겠다.
분산 락을 구현하는 코드를 살펴보자
나는 이 코드를 보고 바로 AOP 나 전략 패턴이 떠올랐다.
그래서 처음에 AOP 로 구현해 보려고 어노테이션으로 키 값을 파싱 하는 법 이런 걸 찾아보다가 마켓컬리에서 이미 글을 써놓은 것을 보았다.
역시 내가 떠올렸다면 누구든 떠올렸겠지 ..https://helloworld.kurly.com/blog/distributed-redisson-lock/
풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redisson
어노테이션 기반으로 분산락을 사용하는 방법에 대해 소개합니다.
helloworld.kurly.com
그래서 나는 널리고 널린 AOP 말고 전략 패턴을 이용해서 구현하고 글 써야지 ~ 라고 생각했다.
참고로 템플릿 콜백 패턴은 전략 패턴과 살짝 다른데, 내가 쓴 다른 글을 소개하고 넘어간다
[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