← 질문 목록
#140깊이 0
외부 롤백과 무관한 기록은 어떻게 남기는가?
감사 기록을 별도 빈의 REQUIRES_NEW 메서드로 호출한다. 기존 트랜잭션을 보류하고 새 트랜잭션에서 커밋해야 외부 롤백과 분리된다.
- 외부 작업
그다음은 기존 트랜잭션입니다. 변경 수행
기존 트랜잭션그다음은 프록시 빈입니다. 감사 기록 호출
프록시 빈그다음은 새 트랜잭션입니다. 기존 작업 보류
새 트랜잭션그다음은 DB입니다. 기록 독립 커밋
DB
REQUIRED는 기존 트랜잭션에 합류한다. 내부 예외를 잡아도 이미 rollback-only가 됐다면 마지막 커밋에서 예상치 못한 롤백이 발생한다.
REQUIRES_NEW는 외부 연결을 잡아 둔 채 새 연결을 요구할 수 있다. 동시 요청 수에 비해 풀이 작으면 연결 고갈이나 교착 위험이 커진다.
NESTED는 같은 물리 트랜잭션의 savepoint로 부분 롤백한다. 외부 트랜잭션이 롤백하면 내부 변경도 사라지므로 독립 커밋과 다르다.
같은 객체 안의 self-invocation은 보통 프록시를 지나지 않는다. 전파 설정이 적용되도록 별도 빈 경계를 만들거나 호출 구조를 바꿔야 한다.