spring

1. 배경 : 유연하게 분산락 키 값 설정하기 Redisson library 를 기반으로 분산락을 custom annotation(@DistributedLock) 을 조인 포인트로 설정해 분산락 에스펙트를 구현하고 있었다. 분산락을 적용할 때 키 값이 필요한데, 유연한 키 값 적용을 위해 Spel(Spring Expression Language) 을 적용했다.@DistributedLock 의 옵션에 적혀있는 Spel 을 파싱한 내용을 토대로 메서드 아규먼트(method arguemnt) 를 전달해서 분산락 키를 설정하려고 했다.  2.  문제  : 조인포인트 파라미터 값이 null 이 반환된다? 그런데 joinPoint 에서 메서드 아규먼트를 주입하는 과정에서 계속해서 에러가 발생했다. joinpoint..
@Transactional AOP 로직과 분산락 AOP 을 중첩해서 사용하는 경우에 @Transactional 을 나중에 실행시키고 싶었다. 이를 적용하기 위해 검토했던 코드 기록이다. 해당 내용은 kurly techblog 에서 분산락 내용을 보고 적용하는 과정에서 든 고민이다. 참고자료 : 풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redissonhttps://helloworld.kurly.com/blog/distributed-redisson-lock/ [1] 분산락은 락 점유/해제 블록 안에서 Transaction 를 묶어야 한다.분산락을 사용해야 하는 이유는 무엇일까? 그 이유는 분산 환경의 동시성 제어를 위함이다. 분산락은 임계 영역에 다른 요청이 접근을 막아 여러 컴..
·spring/summary
콘서트 대기열 서비스를 개발하면서 토큰을 만료 스케줄링을 작업하면서 고민했던 내용이다. 같은 시간에 분산 환경에서 애플리케이션 서버들의 스케줄링 중복 실행을 방지하기 위해 shed lock 을 적용했다.처음 적용해본 개념에 관해 정리하기 위해 작성한 글이다.  GitHub - pbg0205/concertContribute to pbg0205/concert development by creating an account on GitHub.github.com  [1] ShedLock?ShedLock은 분산 시스템에서 스케줄러 작업(Scheduled Tasks)의 중복 실행 방지를 위해 사용되는 라이브러리이다. 여러 인스턴스에서 실행되는 애플리케이션이 동일한 스케줄러 작업을 동시에 실행하지 않도록 락(Loc..
·spring/summary
1. Swagger vs Spring Rest Docs[1] Swagger장점UI 가 깔끔하고 문서화를 사용하기 편리하다.테스트 해볼 수 있는 기능과 같은 편리한 기능을 제공한다.단점테스트없이 문서화가 가능해 로직에 대한 신뢰성을 보장하지 않는다.운영 코드에 문서화 관련 코드가 침투하여 가독성이 떨어진다.[2] Spring REST DOCS장점테스트를 기반한 문서화이므로 로직의 신뢰성을 보장한다.비즈니스 코드와 문서화 코드를 분리시켜 주기 때문에 코드 가독성을 향상시킬 수 있다.단점커스터마이징에 한계가 있고 문서화에서 제공하는 기능이 제한적이다. 2. Swagger vs Spring Rest DocsSpring REST Docs 기반하여 Swagger 의 장점을 활용하고 단점을 보완하여 사용할 수 있는 ..
·spring/summary
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..
·spring/summary
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..
cooper25
'spring' 카테고리의 글 목록