-
트랜잭션 경계는 같이 성공하거나 같이 실패해야 하는 범위입니다AI Agent 2026. 8. 5. 13:00728x90반응형

트랜잭션은 여러 작업을 하나의 성공/실패 단위로 묶어 중간 상태가 밖으로 새지 않게 합니다. 주문 하나를 만든다고 해도 실제로는 여러 테이블이 바뀝니다.
주문 행을 만들고, 재고를 줄이고, 결제 기록을 남기고, 쿠폰 사용 상태를 바꿉니다.
이 중 하나만 성공하고 나머지가 실패하면 데이터는 보기 좋게 깨집니다.경계 안의 작업은 운명을 같이합니다
트랜잭션은 이 작업들을 하나의 운명으로 묶습니다.
전부 성공하면 커밋합니다.
하나라도 실패하면 롤백합니다.
핵심은 SQL 문법이 아니라 경계입니다.
무엇이 반드시 함께 성공해야 하는지 정하는 순간부터 트랜잭션 설계가 시작됩니다.외부 API 호출은 조심해서 넣습니다
트랜잭션 안에 오래 걸리는 외부 API 호출을 넣으면 DB 락을 오래 잡을 수 있습니다.
결제사 호출, 이메일 발송, 웹훅 전송은 DB 트랜잭션과 같은 방식으로 되돌릴 수 없습니다.
이런 작업은 outbox 패턴이나 상태 전이로 나누는 편이 안전합니다.
DB 안에서 닫히는 일과 바깥세상으로 나가는 일을 구분해야 합니다.중간 상태가 보이면 경계가 새는 겁니다
트랜잭션을 배울 때 가장 좋은 질문은 “사용자가 중간 상태를 볼 수 있는가”입니다.
주문은 있는데 결제 기록이 없고, 쿠폰은 사용 처리됐는데 주문은 실패한 상태가 보인다면 경계가 잘못 잡힌 겁니다.
경계는 코드 줄 수가 아니라 실패했을 때 남는 흔적으로 검증합니다.마지막으로 확인할 것은 하나입니다.
이 개념을 외웠는지가 아니라, 실패했을 때 어떤 상태가 남는지 설명할 수 있는지입니다.728x90반응형'AI Agent' 카테고리의 다른 글
스키마 버전은 데이터 모양이 바뀌는 시간을 기록하는 방법입니다 (0) 2026.08.05 캐시 무효화는 빠른 값을 저장하는 문제가 아니라 낡은 값을 버리는 문제입니다 (1) 2026.08.05 프롬프트는 규칙이 아니고, exit 1이 규칙이었다 (0) 2026.08.05 백프레셔는 빠른 생산자에게 천천히 보내라고 말하는 구조입니다 (0) 2026.08.04 레이스 컨디션은 코드 순서가 아니라 실행 순서가 바뀌는 버그입니다 (0) 2026.08.04