ETC3 [ETC] 스프링 이벤트 (1) 들어가기 전앞선 글에서 분산 트랜잭션의 개념과 이를 해결하기 위한 두 가지 주요 패턴인 2-Phase Commit과 SAGA 패턴을 살펴보았습니다.하지만 서비스 간 트랜잭션 관리뿐만 아니라 시스템의 확장성과 유지보수성을 고려한 아키텍처 설계도 중요한 요소입니다. 특히 모놀리틱 애플리케이션(Monolithic Application) 환경에서는 서비스 간 상호작용이 대부분 직접적인 메서드 호출이나 API 호출을 통해 이루어지지만 서비스의 규모가 커지고 기능 간 의존성이 증가할수록 서비스간 강한 결합이 발생하고 하나의 서비스 변경이 전체 시스템에 영향을 미치는 리스크도 커집니다. 이를 해결하기 위한 접근 방식 중 하나가 이벤트 기반 아키텍처(Event-Driven Architecture, EDA) 이며 이를 .. 2025. 3. 26. [ETC] 분산 트랜잭션 들어가기 전하나의 서비스가 특정 비즈니스 로직을 수행할 때 종종 다른 서비스와 연계되어 함께 작업을 진행해야 할 때가 많습니다. 이때 두 가지 이상의 서비스에서 트랜잭션이 실행되면 "모두 실패하거나" 또는 "모두 성공하거나" 하는 상황이 자연스럽게 요구됩니다. 일부 서비스는 작업이 절반만 완료되고 다른 서비스는 작업이 실패하는 경우를 상정하고 시스템을 설계하지 않을뿐더러 그런 일은 발생해서는 안되기 때문입니다.또 다른 예로 사용자 경험을 개선하기 위해 빠른 응답을 제공하기 위해서 서비스 로직이 비동기로 처리되는 경우도 있습니다. 예를 들어 회원 가입 후 안내 메일을 발송하는 로직을 있을 때 이 메일 발송 기능이 특정 이유로 오래 걸린다면 사용자는 가입이 완료되었다는 응답을 지연받게 됩니다. 이를 방지하기.. 2024. 10. 8. [ETC] Merge 문의 동시성 최근 회사에서 검수 기능을 고도화하는 업무가 있었습니다. 상품을 스캔한 후 적절한 비즈니스 로직에 따라 수량을 데이터베이스에 자동으로 저장하는 로직입니다. @Transactional public void inspectGoods(goods request) { // 상품 정보 조회 Goods goods = findGoods(request); // 상품 상태에 따른 입고 수량 설정 로직 // 상품 검수 merge(goods); } 검수 기능의 흐름은 대략적으로 위 코드와 같습니다. 기존에 존재하던 기능에서 수량 설정 로직만 추가되었고 추가로 QC를 진행 후 정상적인 과정을 통해 운영에 신규 기능이 배포되었습니다. 하지만 며칠 뒤 APM 모니터링을 통해 신규 개발 API 에 primary key violatio.. 2024. 3. 24. 이전 1 다음