콘서트 대기열 서비스를 개발하면서 토큰을 만료 스케줄링을 작업하면서 고민했던 내용이다. 같은 시간에 분산 환경에서 애플리케이션 서버들의 스케줄링 중복 실행을 방지하기 위해 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..
풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redisson어노테이션 기반으로 분산락을 사용하는 방법에 대해 소개합니다.helloworld.kurly.com 1. RMS(Receiving Management System - 입고관리 시스템) 의 동시성 문제카프카로 동시에 들어오는 중복된 발주를 수신하는 경우검수/검품 이슈 등록 시 더블 클릭, 네트워크 이슈로 인해 중복된 요청이 동시에 들어오는 경우이동 출고시 여러 작업자가 CTA를 동시에 클릭하여 잘못된 재고 트랜잭션이 생성되는 경우 2. Redisson library 를 선정한 이유(1) Redisson Library 의 장점Pub/Sub 방식을 이용해 락이 해제될 경우 락을 subscribe 하여 락 획득을 시도하여 Redis ..
토이 프로젝트에서 JPA 기반 회원 삭제 배치를 개발하면서 겪었던 스토리에 대해 정리하고자 작성한 내용 1. Background(1) JPA 연관 관계회원 삭제 배치는 soft delete 를 통해 탈퇴한 회원의 사용자 정보를 특정 기간동안 데이터를 보관한 뒤 제거하는 배치이다. DB 데이터는 JPA 기반으로 제어하고 있다. 회원 삭제 배치는 Member 와 MemberRoleMapping 데이터를 제거하는 과정이며 연관 관계를 맺고 있었다. 또한, Member entity 제거할 때 함께 MemberRoleMapping 데이터를 제거하기 위해 cascade option 이 설정되어 있다. // Member Entity@Entity@Getter@NoArgsConstructor(access = Acces..