기본 규칙은 unchecked 만 롤백입니다. checked 예외도 롤백해야 하면 rollbackFor 를 명시해야 합니다.
self-invocation 은 프록시를 건너뛰어 트랜잭션이 아예 적용되지 않습니다. 자기 프록시 주입이나 빈 분리로 피해야 합니다.
rollback-only 로 표시된 트랜잭션은 커밋 시점에 UnexpectedRollbackException 을 던집니다. 삼킬 거면 트랜잭션 경계 자체를 다시 설계해야 합니다.
외부 API 가 느려지면 커넥션을 오래 점유해 풀 전체가 고갈됩니다. 외부 호출은 트랜잭션 밖으로 빼야 합니다.
Oracle 은 이 힌트만으로 쓰기 SQL 을 막아 주지 않습니다. 의도 표시와 약간의 성능 이득으로만 받아들여야 합니다.
순서가 뒤섞이면 데드락(ORA-00060)이 발생합니다. 항상 같은 기준(예: ID 오름차순)으로 잠가야 합니다.
실패하면 처음부터 다시 처리해야 하고, 커넥션도 오래 점유합니다. 청크 단위로 나누고 실패 로그는 REQUIRES_NEW 로 남깁니다.
프록시가 오버라이드하거나 노출할 수 없는 메서드라 어노테이션이 조용히 무시됩니다. public 메서드로 옮겨야 합니다.