[JAVA] 트랜잭션 분리 안 해서 장애 난 사례: 외부 API 호출과 DB 저장을 같은 트랜잭션에 묶으면 생기는 일
Java와 Spring Boot로 서비스를 만들다 보면 트랜잭션을 너무 넓게 잡는 코드가 생각보다 쉽게 나옵니다. 처음에는 단순해 보이지만, 외부 API 호출이나 느린 로직이 DB 트랜잭션 안에 들어가면 운영 중 장애로 이어질 수 있습니다. 트랜잭션 분리를 하지 않아 문제가 커졌던 사례를 기준으로, 원인과 개선 방향을 정리해보겠습니다.Java 트랜잭션 장애가 발생한 실제 문제 상황Java 기반의 주문 처리 서비스에서 발생한 문제였습니다. 사용자가 결제를 완료하면 서버는 주문 상태를 변경하고, 결제 승인 결과를 저장한 뒤, 외부 정산 API를 호출하는 흐름을 가지고 있었습니다.처음 코드는 보기에는 단순했습니다. 하나의 서비스 메서드에 @Transactional을 붙이고, 그 안에서 주문 조회, 상태 변경,..