1. 배경 : 유연하게 분산락 키 값 설정하기 Redisson library 를 기반으로 분산락을 custom annotation(@DistributedLock) 을 조인 포인트로 설정해 분산락 에스펙트를 구현하고 있었다. 분산락을 적용할 때 키 값이 필요한데, 유연한 키 값 적용을 위해 Spel(Spring Expression Language) 을 적용했다.@DistributedLock 의 옵션에 적혀있는 Spel 을 파싱한 내용을 토대로 메서드 아규먼트(method arguemnt) 를 전달해서 분산락 키를 설정하려고 했다. 2. 문제 : 조인포인트 파라미터 값이 null 이 반환된다? 그런데 joinPoint 에서 메서드 아규먼트를 주입하는 과정에서 계속해서 에러가 발생했다. joinpoint..
spring/trouble shooting
@Transactional AOP 로직과 분산락 AOP 을 중첩해서 사용하는 경우에 @Transactional 을 나중에 실행시키고 싶었다. 이를 적용하기 위해 검토했던 코드 기록이다. 해당 내용은 kurly techblog 에서 분산락 내용을 보고 적용하는 과정에서 든 고민이다. 참고자료 : 풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redissonhttps://helloworld.kurly.com/blog/distributed-redisson-lock/ [1] 분산락은 락 점유/해제 블록 안에서 Transaction 를 묶어야 한다.분산락을 사용해야 하는 이유는 무엇일까? 그 이유는 분산 환경의 동시성 제어를 위함이다. 분산락은 임계 영역에 다른 요청이 접근을 막아 여러 컴..

1. Background 이전 참여했던 프로젝트 중에 transform() 을 사용하는 로직에서 발생했던 내용 기록용 글이다.예시 코드의 프로젝트 환경은 Spring Boot 2.7.15, QueryDSL 5.0 이다. (1) 샘플 코드를 확인해보자. 문제는 querydsl 에서 제공하는 transform() 메서드를 사용하는 과정에서 connection leak 이 발생했다. connection pool 은 DB에 쿼리 요청이 완료된 connection 을 다시 회수하지만 반환되지 않는 문제가 발생하며 JDBC ConnectionException 을 반환하였다. 아래는 쿼리 예시이다. (실제 코드 대신 유사한 코드를 작성한 샘플이다.)@Repository@RequiredArgsConstructorp..

1. 문제 상황 친구와 토이 프로젝트를 하며 테스트를 위한 데이터를 추가하고자 @Sql annotation 을 적용하고자 했다. 하지만 테스트 데이터가 들어가지 않는 이유를 찾기 위한 삽질 로그를 기록하고자 한다. 2. Background[1] SpringBootTest.WebEnvironment.RANDOM_PORT 사용 실제 개발 환경과 유사한 환경을 위해 RANDOM_PORT 를 설정했다. 해당 옵션을 설정하면 클라이언트와 서버가 분리되어 멀티 스레드 환경이 된다. 그러므로 Thread Local 기반으로 동작하는 @Transactional 을 사용하여 롤백 처리를 할 수 없다.롤백을 해야 하는 이유는 테스트 격리(Isolated Test) 을 위함이다. 테스트 격리는 공유 자원을 사용하는 여러 테..