공공부하자개발 · 영어 학습 노트
자바
실무 확장Excel · 파일 업로드 · DB 연동0/22 완료
  • 01Excel(XLSX) 구조와 순수 JDK로 읽기/쓰기
  • 02Apache POI로 Excel 업로드/다운로드
  • 03파일 업로드/다운로드 서버 (HttpServer)
  • 04JDBC 기초와 트랜잭션 (H2)
  • 05MyBatis 어노테이션 매퍼로 쿼리 연동
  • 06MyBatis XML 매퍼 · Oracle 방언 · PageHelper · Spring Boot
  • 07REST API 서버와 JSON
  • 08Vue 3 SPA 와 Java 서버 연동
  • 09@Scheduled 운영
  • 10로깅 실무: 레벨·계층, MDC 추적, 예외·성능, 마스킹, 롤링, JSON 로그
  • 11외부 API 연동
  • 12테스트 실무
  • 13암호화·개인정보 보호
  • 14인코딩·한글 실무
  • 15@Transactional 심화
  • 16긴 작업 비동기 처리와 진행률
  • 17SFTP·FTP 파일 연계
  • 18로컬 캐시와 @Cacheable
  • 19메일·알림 발송
  • 20웹 보안 체크리스트
  • 21빌드 도구와 폐쇄망 의존성 반입
  • 22성능 측정: p50·p95·p99, 측정 계층, JFR, JMH 함정, 자체 부하 테스트, 병목 순위
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 실무 확장 › 15 / 22

@Transactional 심화

전파·격리·readOnly·롤백 규칙·self-invocation·REQUIRES_NEW·락
섹션 7진행 0 / 22
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

5. 자주 하는 실수 (Tip)

실수 1: rollbackFor 없이 checked 예외로 실패를 표현한다

기본 규칙은 unchecked 만 롤백입니다. checked 예외도 롤백해야 하면 rollbackFor 를 명시해야 합니다.

실수 2: 같은 클래스 안에서 this 로 호출한다

self-invocation 은 프록시를 건너뛰어 트랜잭션이 아예 적용되지 않습니다. 자기 프록시 주입이나 빈 분리로 피해야 합니다.

실수 3: 내부 실패를 catch 로 조용히 삼킨다

rollback-only 로 표시된 트랜잭션은 커밋 시점에 UnexpectedRollbackException 을 던집니다. 삼킬 거면 트랜잭션 경계 자체를 다시 설계해야 합니다.

실수 4: 트랜잭션 메서드에 외부 API 호출을 넣는다

외부 API 가 느려지면 커넥션을 오래 점유해 풀 전체가 고갈됩니다. 외부 호출은 트랜잭션 밖으로 빼야 합니다.

실수 5: readOnly=true 를 안전장치로 오해한다

Oracle 은 이 힌트만으로 쓰기 SQL 을 막아 주지 않습니다. 의도 표시와 약간의 성능 이득으로만 받아들여야 합니다.

실수 6: 계좌를 잠그는 순서가 요청마다 다르다

순서가 뒤섞이면 데드락(ORA-00060)이 발생합니다. 항상 같은 기준(예: ID 오름차순)으로 잠가야 합니다.

실수 7: 배치 전체를 트랜잭션 하나로 묶는다

실패하면 처음부터 다시 처리해야 하고, 커넥션도 오래 점유합니다. 청크 단위로 나누고 실패 로그는 REQUIRES_NEW 로 남깁니다.

실수 8: private·final 메서드에 @Transactional 을 붙인다

프록시가 오버라이드하거나 노출할 수 없는 메서드라 어노테이션이 조용히 무시됩니다. public 메서드로 옮겨야 합니다.

자주 하는 실수 (Tip)
  • 실수 1: rollbackFor 없이 checked 예외로 실패를 표현한다
  • 실수 2: 같은 클래스 안에서 this 로 호출한다
  • 실수 3: 내부 실패를 catch 로 조용히 삼킨다
  • 실수 4: 트랜잭션 메서드에 외부 API 호출을 넣는다
  • 실수 5: readOnly=true 를 안전장치로 오해한다
  • 실수 6: 계좌를 잠그는 순서가 요청마다 다르다
  • 실수 7: 배치 전체를 트랜잭션 하나로 묶는다
  • 실수 8: private·final 메서드에 @Transactional 을 붙인다
이전 섹션4 응용 변형 예제5 / 7다음 섹션6 연습 문제