[API] UnexpectedRollbackException 500 Error
2025. 1. 10. 23:17ㆍiOS
반응형
org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only
오류 메시지에서 알 수 있는 점은 다음과 같습니다:
- 오류 타입
org.springframework.transaction.UnexpectedRollbackException은 Spring Framework의 트랜잭션 관리에서 발생하는 예외입니다. 이 예외는 트랜잭션이 커밋되기 전에 이미 "롤백 전용(rollback-only)"으로 표시되었을 때 발생합니다. - 오류 원인
트랜잭션이 rollback-only 상태가 되는 이유는 다양합니다:- 트랜잭션 내부에서 **예외(Exception)**가 발생했을 때, 트랜잭션 관리자가 이를 감지하고 롤백 전용으로 설정했을 수 있습니다.
- 개발자가 명시적으로 TransactionStatus.setRollbackOnly() 메서드를 호출했을 수 있습니다.
- 선언적 트랜잭션 관리에서 예외 처리가 올바르게 설정되지 않아 예상치 못한 동작이 발생했을 수 있습니다.
- 오류 메시지
Transaction silently rolled back because it has been marked as rollback-only는 트랜잭션이 정상적으로 완료될 수 없는 상태로 변경되었기 때문에 커밋 대신 롤백이 발생했다는 의미입니다. - 관련 HTTP 상태 코드
ret = 500은 HTTP 500 내부 서버 오류를 나타냅니다. 이는 서버에서 처리되지 않은 예외나 비정상적인 동작이 있었음을 의미합니다.
문제 해결 방법
- 로그 분석
rollback-only 상태로 변경된 시점을 찾기 위해 전체 트랜잭션 흐름과 관련된 로그를 분석하세요. - 예외 처리 확인
트랜잭션 내에서 발생한 예외를 확인하고 올바르게 처리되었는지 검토하세요.- try-catch 블록으로 필요한 예외를 잡고 처리하세요.
- @Transactional 설정에서 rollbackFor와 noRollbackFor 속성을 확인하세요.
- 코드 디버깅
트랜잭션 경계(transaction boundary) 내부 코드에서 명시적으로 setRollbackOnly()가 호출되었는지 확인하세요. - 트랜잭션 설정 확인
선언적 트랜잭션(@Transactional)이 올바르게 설정되었는지 확인하세요.- 트랜잭션 전파(Propagation) 속성
- 예외 변환(Exception Translation) 설정
- Spring AOP 또는 트랜잭션 관리자 확인
PlatformTransactionManager의 설정이나 AOP 기반 트랜잭션 처리 로직에서 문제는 없는지 점검하세요.
이 메시지는 주로 트랜잭션과 관련된 로직의 오류에서 발생하므로, 위 단계를 통해 문제의 원인을 파악할 수 있을 것입니다.
반응형
'iOS' 카테고리의 다른 글
[API] 400 Bad Request (1) | 2025.01.10 |
---|---|
[iOS] Method cannot be marked @objc because the type of the parameter 5 cannot be represented in Objective-C (0) | 2025.01.10 |
[RxSwift] zip, combineLate (2) | 2025.01.09 |
[RxSwift] Button rx.tap (2) | 2025.01.09 |
iOS Universal Links (유니버셜 링크) (1) | 2025.01.09 |