실시간 스트리밍에서 락 없이 Race Condition을 다루는 법race condition을 피하고 싶었어 웹서비스를 하다 보면 race condition을 피하기 어려운 경우가 많다. 이를 해결하기 위해 공용 자원에 대한 접근을 제한하거나 락(lock)을 걸기도 하지만, 이 방식은 이 글을 읽는 여러분도 알다시피 서버 성능에 큰 영향을 준다. 그래서 많은 서비스들이 캐시나 메시지 큐 등 다양한 설계를 도입해 이를 보완한다. 스트리밍 서비스 같은 실시간 시스템에서도 race condition은 당연히 발생한...Jun 15, 2025·4 min read
[E-commerce] 주문 Facade EDA 개선하나의 원자적 단위였을 때 포인트 차감 ⇢ 재고 차감 ⇢ 주문 생성 ⇢ 주문 히스토리 저장 ⇢ 외부 결제 public void checkOut(OrderRequest orderRequest) { Long orderSheetId = orderRequest.getOrderSheetId(); // 포인트 차감 PointCommand pointCommand = orderRequest.toPointCo...Aug 7, 2024·4 min read
[트러블 슈팅] @Retryable과 @RecoverRecover 애너테이션 @Retryable 애너테이션을 통해 정의된 메서드에서 예외가 발생했을 때, 지정된 횟수만큼 재시도하고, 여전히 예외가 발생하는 경우 @Recover 애너테이션이 붙은 메서드가 호출된다. 문제 상황 Spring Retry는 @Recover 메서드의 파라미터 목록을 통해 어떤 메서드에서 발생한 예외를 처리할지 결정한다. @Recover 메서드는 예외 타입 외에도, @Retryable 메서드의 파라미터 타입과 일치하는 추가...Aug 1, 2024·2 min read
Composed-annotation합성 애너테이션 @Recover 애너테이션으로 씨름하다가 커스텀 애너테이션을 만들면 어떨까? 하고 관련 정보를 찾아봤다. Java에서는 애너테이션 상속이 지원되지 않는데, 애너테이션 합성을 통해 유사한 기능을 구현할 수 있다. 애너테이션 합성을 사용하면 커스텀 애너테이션을 정의하고, 해당 애너테이션이 다른 애너테이션을 포함하도록 할 수 있다. 메타 애너테이션(Meta-annotation) 애너테이션 위에 붙은 애너테이션 합성 애너테이션(Co...Aug 1, 2024·2 min read
Jackson 라이브러리Jackson JSON 데이터 구조를 처리해주는 라이브러리 Spring Framework와 함께 사용할 때, REST API의 요청 및 응답에서 JSON 직렬화 및 역직렬화 과정을 자동으로 처리해준다. @GetMapping과 같은 어노테이션을 사용하여 REST 엔드포인트를 정의하면, Spring은 자동으로 요청 본문을 Java 객체로 변환하고, 응답 객체를 JSON으로 변환한다. 기본적으로 프로퍼티(Property)로 동작 Java는 프로퍼...Jul 30, 2024·2 min read
캐리지 리턴(cr)과 라인 피드(lf)개행(줄바꿈)문자 \r Carriage Return(CR) 맨앞으로 이동하라는 뜻 \n Line Feed(LF) New Line, 즉 새로운 라인이라는 뜻 타자기가 타이핑을 하는 방식에서 유래되었다. Windows : CRLF 타자기가 한 줄을 모두 입력한 후 다음 줄을 입력하기 위해 한 줄 간격만큼 아래로 이동하는 것을 LF(Line Feed), 그리고 한 줄을 모두 입력해서 잉크를 찍는 부분이 종이의 가장 오른쪽에 위치해있으니 다시 처...Jul 30, 2024·2 min read
[트러블 슈팅] 재고 관리 서비스의 동시성 테스트 및 문제 해결(2) - Redis LockRedis 설정 Lettuce Netty기반(비동기 이벤트 지원) 성능↑ 지연시간↓ PipeLining지원(Redisson 보다 뛰어남) spring-data-redis의 기본 구현체 기본 Spin Lock 사용 - Lock을 대기하는 상황에서, Lock을 획득할 수 있는지 계속 요청 따라서 Lock을 획득하려는 스레드가 많을 경우 Redis에 부하집중 Lock에 대한 타임아웃이 없어, Unlock(잠금 해제) 호출을 하지 못한 경...Jul 29, 2024·6 min read