그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록Spring
Spring

private 메서드에 @Transactional을 붙이면 트랜잭션이 동작하나요?

실무4/5
설계3/5
인간4/5
기초2/5

면접관의 질문 의도

@Transactional을 "붙이면 동작한다"로 알고 있는지, 아니면 프록시 기반 AOP의 한계와 self-invocation까지 이해하고 우회 패턴을 제시할 수 있는지를 가른다.

큐레이션 답변

학습 자료

스프링 기본의 @Transactional은 빈(Bean)을 감싼 프록시가 메서드 호출을 가로챌 때 트랜잭션 어드바이스를 적용한다. private 메서드는 프록시가 오버라이드할 수 없어 어드바이스가 걸리지 않고, 같은 클래스 내부에서 this.method()로 부르는 self-invocation도 프록시를 거치지 않기 때문에 트랜잭션이 시작되지 않는다. 그래서 트랜잭션 경계가 필요한 메서드는 public으로 두고, 분리가 필요하면 메서드를 다른 빈으로 빼서 외부 호출로 만들어야 한다. AspectJ 위빙을 쓰면 프록시 한계를 우회할 수 있지만 그건 별도 설정이 필요한 예외 경로다.

좋은 답변 구조

  1. 01스프링 기본의 @Transactional이 프록시를 통한 호출에서만 어드바이스를 적용한다는 원리부터 짚는다
  2. 02private 메서드와 self-invocation이 왜 프록시를 우회하는지 호출 흐름으로 단계별로 보여 준다
  3. 03트랜잭션이 안 걸렸을 때 어떤 증상이 나타나는지(부분 반영, 롤백 누락) 분기로 설명한다
  4. 04메서드를 다른 빈으로 분리하거나 AspectJ 위빙을 쓰는 등의 우회 패턴으로 마무리한다

자주 실수하는 포인트

@Transactional이 "붙기만 하면" 항상 동작한다고 단정한다
private에서 동작하지 않는 이유를 "리플렉션 한계"로만 설명하고 프록시 구조를 빠뜨린다
self-invocation 해결책으로 "@Transactional을 한 번 더 붙이면 된다"고 답한다
REQUIRES_NEW 같은 전파 옵션을 self-invocation 해결책으로 잘못 제시한다

실무 맥락

  • 한 서비스 클래스 안에서 "검증 → 저장 → 후처리"를 내부 호출 체인으로 묶었는데 일부만 반영되는 사고를 추적하는 상황
  • 배치 작업에서 부분 실패 시 롤백되어야 할 항목이 그대로 커밋되는 운영 문제
  • 리팩터링 중 public이던 메서드를 private로 바꿨다가 트랜잭션이 조용히 사라지는 회귀

본인 경험에 녹이는 힌트

트랜잭션이 "안 도는" 사고를 디버깅하다 self-invocation을 발견한 경험이 있다면 "호출 경로가 곧 어드바이스 적용 여부다"로 일반화할 수 있다

내부 호출을 외부 빈으로 분리해 트랜잭션 경계를 정상화한 경험이 있다면 우회 패턴의 실제 사례로 보여 줄 수 있다

AspectJ 위빙이나 TransactionTemplate을 도입해 본 경험이 있다면 프록시 한계의 대안 이야기로 이어갈 수 있다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1self-invocation을 피하기 위한 가장 권장되는 구조는 무엇인가요
Q2public 메서드인데도 트랜잭션이 안 타는 케이스에는 어떤 게 있나요
Q3AspectJ 위빙은 프록시 방식과 비교해 어떤 트레이드오프가 있나요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문