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

콘서트 대기열 서비스를 개발하면서 토큰을 만료 스케줄링을 작업하면서 고민했던 내용이다. 같은 시간에 분산 환경에서 애플리케이션 서버들의 스케줄링 중복 실행을 방지하기 위해 shed lock 을 적용했다.처음 적용해본 개념에 관해 정리하기 위해 작성한 글이다. GitHub - pbg0205/concertContribute to pbg0205/concert development by creating an account on GitHub.github.com [1] ShedLock?ShedLock은 분산 시스템에서 스케줄러 작업(Scheduled Tasks)의 중복 실행 방지를 위해 사용되는 라이브러리이다. 여러 인스턴스에서 실행되는 애플리케이션이 동일한 스케줄러 작업을 동시에 실행하지 않도록 락(Loc..

1. Swagger vs Spring Rest Docs[1] Swagger장점UI 가 깔끔하고 문서화를 사용하기 편리하다.테스트 해볼 수 있는 기능과 같은 편리한 기능을 제공한다.단점테스트없이 문서화가 가능해 로직에 대한 신뢰성을 보장하지 않는다.운영 코드에 문서화 관련 코드가 침투하여 가독성이 떨어진다.[2] Spring REST DOCS장점테스트를 기반한 문서화이므로 로직의 신뢰성을 보장한다.비즈니스 코드와 문서화 코드를 분리시켜 주기 때문에 코드 가독성을 향상시킬 수 있다.단점커스터마이징에 한계가 있고 문서화에서 제공하는 기능이 제한적이다. 2. Swagger vs Spring Rest DocsSpring REST Docs 기반하여 Swagger 의 장점을 활용하고 단점을 보완하여 사용할 수 있는 ..

1. Optimistic Locking in JPA[1] 동시성 제어를 위한 노력엔터프라이즈 수준에서 DB의 동시성 제어를 관리하는 것이 중요하다. 효과적으로 오류 방지가 가능한 multiple transaction을 핸들링할 수 있어야 한다.대표적인 예시 중, read 와 update 사이의 일관성을 보장해야 한다는 것이 상당히 중요하다. [2] Optmistic Lock In JPAJPA에서 낙관적 락을 사용하기 위해서는 엔티티에 버전을 명시하는 @Version 어노테이션을 추가해야 한다.Lock Mode에는 OPTIMISTIC과 OPTIMISTIC_FORCE_INCREMENT 두 종류가 있다.OPTIMISTIC: 버전 속성을 포함하는 모든 엔터티에 대해 낙관적 읽기 잠금을 얻는다.READ는 OPTI..

SummarySpringBoot 를 사용한다면 application.properties 를 선언해서 MessageSource 를 관리하자.MessageAutoConfiguration 은 MessageSource 빈을 선언하지 않으면 자동 설정된다.application.properties 에서 spring.messages 로 시작하는 property 를 탐색해서 MessageSource 를 생성한다. 1. MessageSource 설정 및 선언 방법[1] MessageSource 선언 방법(1) application.properties 선언하는 방법spring.messages.basename=message/messagesspring.messages.encoding=UTF-8 # defaultspring.m..