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

Service

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

My

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

Policy

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

© 2026 그알것 · What Still Matters

질문 목록Spring
Spring

스프링 `@Transactional`의 AOP 동작 흐름을 설명해주세요.

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

면접관의 질문 의도

어노테이션 사용법 암기 수준인지, 프록시·매니저·동기화 매니저의 *역할 분리* 모델까지 들고 와서 자기 호출·전파·롤백 규칙 같은 문제를 같은 모델 위에서 설명할 수 있는지를 가른다.

큐레이션 답변

학습 자료

선언적 트랜잭션에서는 @Transactional이 붙은 빈이 AOP 프록시로 감싸진다. 외부에서 그 메서드가 호출되면 프록시가 먼저 PlatformTransactionManager를 통해 트랜잭션을 시작하고, 필요한 커넥션을 받아 트랜잭션 동기화 매니저에 ThreadLocal로 바인딩한다. 그 뒤 실제 비즈니스 로직이 같은 스레드 문맥에서 동기화된 자원을 공유하며 실행되고, 정상 종료 시 커밋, 롤백 규칙에 걸리는 예외 시 롤백한 뒤 자원을 정리한다. PlatformTransactionManager 추상화 덕분에 JDBC·JPA·JTA 구현체가 바뀌어도 애플리케이션 코드는 그대로 둘 수 있고, 대신 "프록시를 거치지 않으면 이 흐름이 통째로 작동하지 않는다"는 프록시 기반의 한계가 같이 따라온다.

좋은 답변 구조

  1. 01AOP 프록시·`PlatformTransactionManager`·트랜잭션 동기화 매니저 세 컴포넌트의 역할을 짧게 정리한다
  2. 02메서드 진입부터 커넥션 바인딩, 비즈니스 로직 실행, 커밋/롤백, 자원 정리까지의 흐름을 단계 순서로 설명한다
  3. 03`PlatformTransactionManager` 추상화로 JDBC·JPA·JTA 구현이 갈아끼워지는 이점을 짚는다
  4. 04자기 호출·`private` 메서드·체크 예외 롤백 규칙 같은 *프록시 기반의 한계*를 함정으로 마무리한다

자주 실수하는 포인트

`@Transactional`이 메서드 내부 코드 자체에 트랜잭션을 거는 줄 알고, 프록시가 외부에서 가로채야 동작한다는 사실을 빼먹는다
트랜잭션 동기화 매니저(ThreadLocal 기반 커넥션 공유)의 존재를 설명하지 못해 "같은 트랜잭션 안에서 왜 같은 커넥션이 보장되는지"를 답하지 못한다
같은 클래스 안에서 다른 `@Transactional` 메서드를 직접 호출하는 자기 호출이 프록시를 우회한다는 점을 놓친다
체크 예외에서도 자동으로 롤백된다고 단정하고 `rollbackFor` 옵션의 필요성을 설명하지 못한다

실무 맥락

  • 서비스 계층에서 여러 리포지토리 호출을 하나의 트랜잭션으로 묶어야 하는 일반적인 스프링 백엔드 구조
  • JDBC 기반 코드를 JPA로 이관하면서 트랜잭션 경계 동작이 달라지는지를 검증하는 단계
  • 롤백이 안 돌거나 "커밋된 줄 알았는데 안 됐다" 같은 트랜잭션 버그를 디버깅하는 상황
  • 커넥션 풀이 마르거나 대기 시간이 늘어 트랜잭션 보유 시간을 줄여야 하는 운영 환경

본인 경험에 녹이는 힌트

롤백이 안 도는 버그를 추적하면서 자기 호출·체크 예외·`rollbackFor`까지 원인 후보를 좁혀본 경험이 있다면, 그 디버깅 과정을 답변의 "프록시 한계" 설명으로 가져올 수 있다

전파 옵션(`REQUIRES_NEW`, `NESTED` 등)을 조정해 부분 실패·정합성 문제를 해결한 경험이 있다면, 동기화 매니저와 커넥션 공유 이야기를 본인 사례로 풀 수 있다

커넥션 누수·풀 고갈을 의심하며 트랜잭션 보유 시간을 줄여본 경험이 있다면, "트랜잭션 경계와 커넥션 점유" 관점을 자연스럽게 엮을 수 있다

JDBC→JPA 전환에서 트랜잭션 매니저 구현체를 바꾼 경험이 있다면 `PlatformTransactionManager` 추상화 이점을 본인 경험으로 말할 수 있다

커뮤니티 인기 답변

전체 0개

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

관련 꼬리 질문

Q1트랜잭션 동기화 매니저는 같은 트랜잭션 안에서 어떻게 같은 커넥션을 보장하나요
Q2self-invocation에서 `@Transactional`이 동작하지 않는 이유는 무엇이고, 어떻게 우회하나요
Q3`PlatformTransactionManager` 구현체는 어떤 기준으로 고르나요
Q4체크 예외에서 기본적으로 롤백이 일어나지 않는 이유는 무엇인가요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문