MAX+1 충돌이 무관 주문 데이터 혼입으로 번진 이유: 주문 단위로 정합성 복구하기
거의 동시에 등록된 주문이 같은 하위 식별자를 얻은 뒤, 식별자 하나만 신뢰한 후속 조회에서 서로 무관한 주문 데이터가 섞인 원인과 보수적인 복구 방식을 정리합니다.
TOPIC ARCHIVE
트랜잭션, 동시성, 상태 이력과 데이터 손실 방지 조건을 다룬 기록입니다.
CURATED NOTES
각 글은 하나의 대표 주제에만 분류했습니다. 시리즈가 있는 글에서는 구현 순서와 앞뒤 글도 함께 확인할 수 있습니다.
트랜잭션·데이터 정합성 · 10개 글 · 작성일 최신순
거의 동시에 등록된 주문이 같은 하위 식별자를 얻은 뒤, 식별자 하나만 신뢰한 후속 조회에서 서로 무관한 주문 데이터가 섞인 원인과 보수적인 복구 방식을 정리합니다.
요청 파라미터 접근을 줄이기 위해 HttpServletRequest를 static 필드에 보관한 유틸에서 동시 요청 간 상태가 덮어써진 원인을 재현하고 추적한 과정
고객 이메일 조회 메서드의 숨은 입력값 변경이 반복 처리와 결합해 이전 고객의 상태를 다음 주문에 남긴 원인과, 영향 범위를 줄인 수정 및 장기적인 무부수효과 설계를 다룹니다.
분산된 미수주문 접수 로직을 서버에서 통합하는 과정에서 화면의 부분 객체를 전체 주문 데이터처럼 사용해 기존 업무값이 누락된 원인과, 현재 데이터를 다시 조회하도록 저장 경계를 고친 과정을 다룹니다.
한 Job에 여러 주문이 연결되면서 성적서 대상 행이 중복되고, Java 반복문의 채번 증가가 행 수만큼 실행돼 Report ID가 +N씩 건너뛴 원인을 조회 책임 분리로 해결한 과정입니다.
완료·재반응·휴일 정보가 뒤늦게 바뀌는 업무에서 전일 집계만으로는 과거 지표를 고칠 수 없어, 최근 14일을 반복 재집계하도록 설계한 과정입니다.
DB Link를 직접 DataSource 접근으로 바꾼 뒤, Mapper를 분리하면서도 Service의 트랜잭션 경계를 유지하기 위해 Atomikos 기반 JTA 구성을 적용한 판단과 검증 한계를 정리했습니다.
Spring Service의 공유 가변 상태가 동시 요청 사이의 데이터 혼입 위험을 만드는 이유와, 요청 상태 지역변수화·공통 인터페이스·회귀 테스트로 이를 제거한 과정을 정리합니다.
공인 성적서의 원본·재발급·폐기 상태를 덮어쓰기 대신 발행 순번과 이력 관계로 모델링하고, 진위확인·동시 재발급까지 검증한 과정을 정리합니다.
@Transactional 메서드 내부에서 삼킨 예외가 부분 반영을 만든 원인과 RuntimeException 재전파, API 업무 응답 검증, 외부 부수효과의 한계를 설명합니다.