기술 블로그

자바 스프링 MSA 환경에서 카프카를 이용해 주문 취소 기능을 구현하며 발생한 문제와 해결 방법에 대해 작성한다. 소개구현하고자 하는 바는 다음과 같다.사용자는 자신의 주문에 대해 '주문 취소'를 요청한다.주문 서비스는 주문 취소 작업 처리 후 카프카에 '주문 취소 토픽'에 이벤트를 발행한다.이때 주문 취소 토픽은 하나의 파티션으로 구성되어 있다.상품 서비스와 결제 서비스는 '주문 취소 토픽'에서 이벤트를 소비해서 작업을 처리한다. 문제주문 서비스에서 주문 상태를 취소로 변경하고 주문 취소 이벤트를 카프카 주문 취소 토픽에 발행해 상품 서비스와 결제 서비스에서 해당 주문 취소 토픽을 구독하고 이벤트를 소비하려 했다. 그러나 테스트 결과는 달랐다. 이벤트가 제대로 발행되는 것은 확인했으나, 두 서비스 모두..
서론상품의 주문 처리 속도는 고객 만족도에 직접적인 영향을 미친다.데이터베이스로 재고를 관리하는 방법은 데이터의 일관성을 유지하는 데는 효과적이지만, 높은 트래픽이 발생하면 데이터베이스에 과부하가 걸려 사용자 경험에 부정적인 영향을 미친다.이 문제를 해결하기 위해, 데이터베이스 대신 Redis 캐시를 사용하여 상품 재고를 관리하는 방식으로 시스템을 개선하기로 결정하였다. Redis는 고성능 키-값 저장소로, 빠른 읽기 및 쓰기 속도를 제공한다.성능 개선 과정은 크게 세 단계로 나누어 진행했다.Write-Through 쓰기 전략: Redis와 데이터베이스 모두 데이터를 쓰는 방식Write-Back 쓰기 전략: Redis에만 데이터를 쓰고 특정 조건에서 데이터베이스에 데이터를 업데이트하는 방식Redis의 L..
주문 요청이 들어오면, 상품 서비스에서 요청을 받게 된다. 그러면 상품 서비스는 상품 재고를 검사하고 해당 상품이 현재 구매 가능한 시각인지 검사 그리고 재고를 감소시키는 작업을 수행한다. 시간 효율성을 위해 상품 재고를 Redis에 Cache하여 사용하려 한다. 트러블 슈팅현재 상품 재고를 레디스에 캐싱하여 관리한다. 또한 동시성 제어를 위해 Redisson Lock을 사용한다.주문 요청이 들어오면 상품 서비스에서 로직은 다음과 같다.레디스에서 상품 재고 조회재고가 부족하다면 재고 부족 예외 발생레디스에 상품 재고 정보가 없다면 데이터베이스에서 조회 후 캐싱데이터베이스로부터 상품 조회구매 가능한 시간인지 검사구매가 불가능한 시간이라면 예외 발생레디스 상품 재고 감소데이터베이스 상품 재고 감소 기존 코드..
채팅 기능 기본 설정 설명에 앞서, 시스템에서 채팅 기능이 어떻게 동작하는지 로직을 우선 설명하도록 한다. 웹소켓 생명주기 관리🥸우리 시스템의 대략적인 웹소켓 연결 과정은 다음과 같다. 웹소켓 연결 초기화사용자가 로그인을 완료하면, "ISLOGIN" 쿠키 값을 확인하여 로그인 상태(True)일 경우에 한 번만 웹소켓 연결을 요청한다.웹소켓 연결 유지 관리웹소켓 연결이 성공적으로 이루어지면, 서버는 사용자의 ID를 웹소켓 세션에 저장한다.리액트 클라이언트는 웹소켓을 통한 모든 통신 과정을 진행하기 전에 웹소켓 연결 상태를 확인한다. 연결이 끊어진 경우, 자동 재연결 시도와 함께 필요한 토픽 구독을 재요청한다.토픽 구독 및 메시지 처리사용자는 서버로부터 자신의 ID를 받고, 이를 사용하여 알림 및 채팅방 ..
개발자가 될 사람
'기술 블로그' 카테고리의 글 목록 (2 Page)