외부 API 연동 시 데이터 정합성 보장 설계 — Fast-Fail + Kafka 보상 트랜잭션
·
Backend/Server
들어가며금융 서비스에서 외부 협력사 API를 연동할 때, "외부는 성공했는데 내부는 실패한" 상황을 어떻게 처리할 것인가는 피할 수 없는 문제다.근무하고 있는 회사에서 협력사와 연동된 출금 기능을 운영하던 중, 내부 DB 잔액과 협력사의 실제 카드 잔액이 불일치하는 문제가 발생했다. 이 글에서는 문제를 어떻게 발견하고, 원인을 분석하고, 어떤 설계로 해결했는지를 정리한다. 문제 발견어떤 목표를 설정하고 돈을 모을 수 있는 A통장 서비스(가칭으로 하겠습니다)에서, 특정 시점 이후 출금이 불가능하다는 문의가 들어왔다. 확인해보니 내부 DB 잔액과 협력사의 실제 카드 잔액이 일치하지 않는 상황이었다. 원인 분석1단계: 거래 로그 확인해당 날짜의 거래 로그를 확인한 결과, 출금이 **'실패'**로 기록되어 있..
Naver Cloud MySQL Replication Delay 트러블슈팅
·
Backend/Server
들어가며운영 중인 서비스에서 Naver Cloud Platform의 Cloud DB for MySQL을 사용하고 있었는데, Master DB가 다운되면서 서비스가 중단되는 장애가 발생했다.장애 이후 원인을 분석하는 과정에서, 장애 당일 새벽부터 Standby Master DB Replication Delay 알림이 연속으로 수신되고 있었다는 것을 확인했다. 처음 알림의 Delay가 약 5,700초(약 1시간 35분)였고, 4시간 간격으로 6,500초 → 7,500초 → 12,400초(약 3시간 28분)로 점점 악화되고 있었다. 이 글에서는 장애의 원인을 어떻게 파악했고, 어떤 방식으로 해결했는지를 정리한다.Standby Master DB Replication Delay란?Naver Cloud의 Cloud..
스프링부트3.2.3 HTTP메세지 로그레벨 변경 (debug->trace)
·
Backend/Spring
스프링부트는 기본적으로는 내장 톰캣의 내부로그와 HTTP요청에 대한 상세한 내용을 표시하지 않는다.각 로그 레벨에 대해 표시하는 내용은 아래와 같이 오름차순으로 나타내는 정보가 자세하지 않다. 로그레벨 TRACE가장 상세한 로그 레벨로, 애플리케이션의 실행 흐름과 디버깅 정보를 상세히 기록한다.주로 디버깅 시에 사용된다. DEBUG디버깅 목적으로 사용되며, 개발 단계에서 상세한 정보를 기록한다.애플리케이션의 내부 동작을 이해하고 문제를 분석하는 데 도움을 준다. INFO정보성 메시지를 기록한다.애플리케이션의 주요 이벤트나 실행 상태에 대한 정보를 전달한다. WARN경고성 메시지를 기록한다.예상치 못한 문제나 잠재적인 오류 상황을 알리는 메시지이다.애플리케이션이 정상적으로 동작하지만 주의가 필요한 상황..