일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- Spring
- 김영한
- 클린 아키텍처
- vm
- 배치
- 스프링
- 자바
- outbox
- OpenAI
- PS
- chatGPT
- MSA
- 로버트마틴
- CDC
- EDA
- boj
- 백준
- Kafka
- C++
- 프로젝트
- 로버트 C. 마틴
- 레이어드 아키텍처
- 엉클 밥
- API
- K8S
- 헥사고날 아키텍처
- JPA
- 개발
- 톰 홀버그
- debezium
- Today
- Total
목록Spring (4)
코딩 해파리

들어가며현재 프로젝트 목표 중에 높은 트래픽 상황을 견디며 처리하는 성능이 좋은 서버를 구축하는 부분이 있었습니다. 하지만, 기존에는 주문 생성 이벤트가 들어올 때마다 매번 DB에 쓰기 작업을 수행하도록 설계되어 있었기 때문에, 주문이 발생하였을 때 상품 재고 감소 처리 로직(재고 차감 로직)에서 심각한 성능 저하가 발생했습니다. 이렇게 많은 이벤트를 단건 단위로 처리하다 보니, 트래픽이 폭주할 때 자원 사용량 증가로 시스템 전반에 병목 현상이 생겼습니다.이 글에서는 이벤트 배치 처리 방식을 도입하여 성능을 최적화한 과정을 공유합니다. 기존 문제점N건의 이벤트에 대해 N번의 DB 쓰기주문 생성 이벤트가 1건 들어올 때마다 상품 서비스에서 재고 차감 로직을 실행 → DB에 직접 쓰기.이벤트가 폭발적으로 증..

기존 시스템 구조와 문제점주문-결제-상품 서비스 간 흐름주문 서비스는 주문 요청을 받은 뒤, 상품 서비스에 REST 방식으로 재고 차감을 요청합니다.이후 주문 서비스는 내부 스케줄러를 통해 주기적으로 pending 상태의 주문을 확인하고, 5분 내에 결제 완료 웹훅이 오지 않으면 결제 실패로 간주하고 상품 서비스에 재고 복원 요청을 보냅니다.반대로 5분 내에 결제 완료 웹훅이 도착하면, 해당 주문은 성공 처리됩니다.현재 구조의 문제점1. 서비스 간 강한 결합과 복잡한 예외 처리주문이 실패하거나 결제가 실패한 경우, 추가로 상품 서비스에 ‘재고 복원’ 요청을 동기적으로 보내야 합니다.이런 방식은 비즈니스 로직이 꼬리에 꼬리를 물며 연결되고, 하나의 서비스가 장애가 발생하면 다른 서비스에까지 장애가 전파될 ..

들어가며이 포스팅은 "MSA 환경에서 이벤트를 주고받으며 프로세스를 진행할 때 발생할 수 있는 데이터 정합성 불일치 문제 발생"을 주제로 합니다. 제 졸업 프로젝트에서 MSA를 적용할 때, 서비스를 분리하기만 하면 끝나는 줄 알았지만 실제론 이벤트가 중복 처리되거나 외부시스템(DB)이 커밋을 실패하거나... 하는 등의 이유로 전체 데이터 정합성이 깨질 수 있는... 곤란한 일이 생길 수 있다는 사실을 깨닫고 많은 고민을 하며 해결했던 과정을 정리해보았습니다.1. 네트워크와 브로커는 100% 신뢰가 어렵다네트워크 장애로 인하여 패킷 손실 혹은 타임아웃 등으로 인해 오프셋이 커밋되지 않는 등의 이유로 재전송이 여러 번 이뤄져 중복 이벤트 컨슘 상황이 발생할 수 있습니다. 또한, 모종의 이유로 이벤트를 발행한..

언어: javaSpring Boot ver: 3.3.4IDE: intelliJSDK: JDK 21의존성 관리툴: GradleMac 안녕하세요!이번에 작성할 내용은 이미 개발한 스프링 부트 기반 프로젝트를어떻게 하면 간단하게 AWS사의 EC2, Google사의 VM인스턴스 등등의 가상머신에 띄울 수 있을지에 대한 방법입니다!분명 여러가지 방법이 있습니다..! AWS사 혹은 GCP(Google)사의 관리형 프로그램을 사용하여 배포하는 방법JAR 파일을 직접 전송해서 가상머신에서 실행하는 방법스프링부트 프로젝트를 도커(Docker) 이미지로 만들고 푸쉬(push)하고, 가상 머신에서 그 이미지를 풀(pull) 해서 실행하는 방법 - Docker Hub, GHCR(GitHub Container Registry)..