1. 문제발생이번에 개발한 기능은 Order-Service에서 주문 생성 시 Stock-Service와 연동하여 재고를 차감하고 이후 Delivery-Service에 배송 생성을 요청하는 전체 흐름이다.이 과정에서 예상치 못한 문제가 발생했다. 분명 Stock-Service에서 hubId, price를 잘 반환하고 있는데도 OrderService에서 해당 값이 null, 0으로 들어가는 버그가 발생한 것이다. 디버깅 로그를 찍어보면 다음과 같았다.INFO OrderService - stockResponse.hubId = nullINFO OrderService - totalPrice = 0 하지만 DB에서는 정상적으로 hubId와 price가 존재하는 것을 확인할 수 있었다. 그럼 대체 문제는 어디에 있었..
대규모 트래픽 분산처리 시스템을 MSA 기반으로 개발하던 중 가장 복잡했던 부분은 주문(Order) 생성 시 여러 서비스(재고/배송) 와의 연동 과정에서 발생하는 트랜잭션 처리였다.현재 개발 중인 물류 시스템은 다음과 같은 구조를 가지고 있다.Order-Service: 주문 생성Stock-Service: 재고 확인 및 차감Delivery-Service: 배송 요청 처리 중요한 점은 이 모든 과정을 하나의 트랜잭션처럼 처리하고 싶지만 마이크로서비스 구조(MSA)에서는 분산 트랜잭션을 하나의 DB 트랜잭션처럼 처리할 수 없다는 점이다. Spring Cloud + OpenFeign을 이용해 Order-Service ↔ Stock-Service ↔ Delivery-Service 로직을 연동하고 실패 시 보상 트..
이번 글은 MSA 프로젝트를 진행하면서 겪었던 JPA 트랜잭션 문제와 해결 과정, 그리고 이를 통해 SAGA 패턴과 락(Optimistic Lock & Pessimistic Lock)의 필요성에 대해 깨달은 내용을 공유하고자 한다. 1. 문제 상황 : MSA에서 JPA 트랜잭션이 예상과 다르게 동작Spring Boot 기반 Order Service를 개발하던 중, 주문 생성 과정에서 다음과 같은 오류가 발생하였다. 💥 💥 발생한 오류 (StaleObjectStateException) 💥 💥org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction이 오류는 JPA에서 save() 실행 시 merg..
MSA의 개념을 확립하고자 작은 프로젝트를 하나 해보려고 한다.1. 프로젝트 개요프로젝트명 : MSA 기반 상품 주문 시스템목표 : MSA, JWT 인증, Redis 캐싱, 분산 추적, Docker CI/CD 실습2. 아키텍처 설계 흐름Client -> Gateway(인증, 인가, 라우팅) -> Eureka로 서비스 발견(Load Balancing) -> 각 서비스 호출(Auth, Product, Order) 3. ERD 설계Auth DB(auth-db)CREATE TABLE users ( user_id BIGSERIAL PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, created..
1. 서킷 브레이커(Circuit Breaker)란?서킷 브레이커(Circuit Breaker)는 마치 전기 회로의 차단기처럼 시스템에서 장애가 발생했을 때 전체 시스템이 마비되는 것을 방지하는 보호 장치이다.특히 마이크로서비스 아키텍처(MSA)나 분산 시스템에서 자주 사용되는데 특정 서비스가 과부하 상태가 되거나 응답이 느려질 경우 해당 서비스로 가는 요청을 일정 기간 차단하여 시스템을 보호하는 역할을 한다.2. 왜 서킷 브레이커가 필요할까?연쇄 장애(캐스케이딩 실패) 방지예를 들어 A 서비스가 B 서비스에 요청을 보내는데, B 서비스가 느려지거나 응답하지 않으면 A 서비스도 계속해서 대기하게 된다.이 상태가 지속되면 A 서비스뿐만 아니라 A 서비스에 의존하는 다른 서비스들도 영향을 받게 되면서 시스템..
1. MSA(마이크로서비스 아키텍처)- 하나의 애플리케이션을 여러 개의 작은 서비스로 나누어 개발하고 운영하는 방식으로 각각의 서비스는 독립적으로 개발되고 배포될 수 있으며, 필요에 따라 확장하거나 수정할 수 있다 [모놀리식 아키텍처 VS 마이크로 서비스 아키텍처]-모놀리식 아키텍처(Monolithic Architecture) 모든 기능이 하나의 애플리케이션에 포함되어 한 개의 코드베이스에서 모든 기능이 동작하는 방식예를들어 온라인 쇼핑몰이라는 하나의 애플리케이션 안에 회원관리, 상품조회, 배송, 결제 시스템 등등 전부 포함되어 있는 것장점 : 단순 구조, 한 번의 배포단점 : 코드 커지면 유지보수 어려움, 특정 기능 수정해도 전체 서비스 재배포 필요 -마이크로서비스 아키텍처기능별로 독립적인 작은 서비스..