풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redisson어노테이션 기반으로 분산락을 사용하는 방법에 대해 소개합니다.helloworld.kurly.com 1. RMS(Receiving Management System - 입고관리 시스템) 의 동시성 문제카프카로 동시에 들어오는 중복된 발주를 수신하는 경우검수/검품 이슈 등록 시 더블 클릭, 네트워크 이슈로 인해 중복된 요청이 동시에 들어오는 경우이동 출고시 여러 작업자가 CTA를 동시에 클릭하여 잘못된 재고 트랜잭션이 생성되는 경우 2. Redisson library 를 선정한 이유(1) Redisson Library 의 장점Pub/Sub 방식을 이용해 락이 해제될 경우 락을 subscribe 하여 락 획득을 시도하여 Redis ..
spring

토이 프로젝트에서 JPA 기반 회원 삭제 배치를 개발하면서 겪었던 스토리에 대해 정리하고자 작성한 내용 1. Background(1) JPA 연관 관계회원 삭제 배치는 soft delete 를 통해 탈퇴한 회원의 사용자 정보를 특정 기간동안 데이터를 보관한 뒤 제거하는 배치이다. DB 데이터는 JPA 기반으로 제어하고 있다. 회원 삭제 배치는 Member 와 MemberRoleMapping 데이터를 제거하는 과정이며 연관 관계를 맺고 있었다. 또한, Member entity 제거할 때 함께 MemberRoleMapping 데이터를 제거하기 위해 cascade option 이 설정되어 있다. // Member Entity@Entity@Getter@NoArgsConstructor(access = Acces..

Job 실행 관련 프로퍼티spring.batch.job.enabled : application context 에 등록된 Job 을 실행을 활성화하는 프로퍼티true (default) : Job 을 실행 가능하도록 활성화 / false : 모든 Job 을 실행 불가능하도록 설정spring.batch.job.name : 실행할 배치 Job 을 job name 을 기준을 기반으로 선언spring.batch.job.name=값이 없으면 모든 잡을 실행 (spring batch 5.x 부터 exception 반환하며 실행하지 않음.)spring.batch.job.name=jobName1jobName1 이름의 잡만 실행하겠다는 의미spring.batch.job.name=jobName1,jobName2spring ..

1. Spring Batch??스프링 배치는 한마디로 이야기 하자면 개발자가 정의한 작업을 일괄처리를 지원하는 모듈을 의미한다. 일정 주기로 실행하는 로직을 별도의 어플리케이션을 적용함으로써 하나의 어플리케이션의 부하를 분산시키고 비즈니스 로직에 집중할 수 있는 장점이 있다. 그리고 스프링에서 제공하는 Spring-Batch-Docs 에서는 아래와 같이 배치가 필요한 경우에 대한 예시를 정의하고 있다. 특정 유저와의 상호작용이 없는 대용량 자동화 프로세스, 주로 시간 기반 이벤트(월말 정산 처리)가 필요한 경우대용량 데이터 셋을 반복, 주기적으로 프로세싱하는 어플리케이션의 경우 (보험 혜택을 정하거나 보험료를 조정하는 일)내 / 외부 시스템으로 부터 받은 정보를 통합하는 일. 이 내용에는 포맷팅, ..
1. org.hibernate.engine.query.spi.QueryPlanCache 일반적으로 쿼리를 사용하는 경우, where 절에 in clause 를 사용하는 경우가 많다. JPA 의 구현체인 Hibernate 는 JPQL, Criteria 쿼리를 AST(Abstract Syntax Tree)으로 파싱한다. 이 때 쿼리 컴파일 시간을 단축하기 위해 Hibernate 에서는 QueryPlanCache 을 사용한다. 모든 쿼리를 실행할 때마다 QueryPlanCache 을 확인하여 실행 계획의 캐싱 여부를 확인해 다음 쿼리를 사용할 때 재사용한다. (네이티브 쿼리의 경우, 파라미터와 반환 타입을 추출하여 ParameterMetadata 에 저장한다.) 2. spring.jpa.properties.h..
1. UUID (Universally Unique IDentifier) ?? 범용 고유 식별자는 네트워크 상에서 중복되지 않는 식별자를 만들기 위한 표준 규약이다. GUID(전역적으로 고유 식별자)라고도 부르며 RFC4122 로 지정되어 있다. UUID는 아래와 같은 규칙을 기반으로 생성된다. UUID 는 128bit(16 octec) 수이다. 32개의 16진수로 표현되며, 하이픈(-)을 포함해 총 36개 문자로 구성되어 있다. UUID 는 8-4-4-4-12 형태로 총 5개의 그룹이며 하이픈(-) 을 기준으로 구분되어 있다. 이름 길이(byte) 길이(hex) 길이(bits) 내용 time_low 4 8 32 시간의 low 32bit 를 부여하는 정수 time_mid 2 4 16 시간의 middle ..