기본 규칙을 외웠는지보다, Checked/Unchecked 함정과 자기 호출·전파·비동기 같은 경계에서 롤백이 어떻게 갈리는지 판단할 수 있는지를 본다.
Spring 선언적 트랜잭션은 기본적으로 RuntimeException과 Error만 롤백하고, Checked Exception은 커밋한다. 이 기본값은 EJB 시절의 관행을 그대로 따른 것이라, 도메인에서 만든 Checked Exception(예: 결제 실패)을 던져도 트랜잭션이 그냥 커밋되는 함정이 생긴다. 그래서 예외 계층을 어떻게 설계하느냐와 @Transactional(rollbackFor=...)를 어디까지 명시하느냐가 곧 트랜잭션 정책 자체다.
Checked로 던진 도메인 예외가 커밋돼 데이터가 어긋난 경험이 있다면, 예외 계층을 RuntimeException으로 재설계한 과정과 연결할 수 있다
try-catch로 예외를 삼켰다가 롤백이 안 돼서 디버깅한 경험이 있다면, 트랜잭션 경계와 예외 전파 책임을 어떻게 정리했는지 말할 수 있다
REQUIRES_NEW·비동기 호출에서 바깥이 롤백되지 않아 보상 로직을 추가한 경험이 있다면, 트랜잭션 경계 설계 이야기로 풀어낼 수 있다
테스트는 통과했는데 운영에서 부분 커밋이 난 경험이 있다면, 거짓 음성 테스트 문제와 통합 테스트 전략 개편 이야기로 연결할 수 있다
아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.