백엔드 개발 · 중급
Spring의 @Transactional 애노테이션의 propagation 속성에 대해 설명하고, REQUIRED와 REQUIRES_NEW의 차이점을 설명해주세요.
힌트 · 트랜잭션 전파 방식과 각각의 사용 사례를 생각해보세요.
트랜잭션 전파REQUIREDREQUIRES_NEW물리적 트랜잭션논리적 트랜잭션
모범답안
@Transactional 애노테이션의 propagation 속성은 트랜잭션 경계 내에서 다른 트랜잭션이 호출될 때 어떻게 동작할지를 결정합니다. 즉, 기존 트랜잭션이 있을 때 새로운 트랜잭션을 어떻게 처리할지 정의하는 것이죠.
REQUIRED는 기존 트랜잭션이 있으면 참여하고, 없으면 새로운 트랜잭션을 시작합니다. 가장 일반적인 설정이며, 대부분의 경우에 적합합니다.
REQUIRES_NEW는 항상 새로운 트랜잭션을 시작합니다. 기존 트랜잭션이 있더라도 잠시 중단하고 새로운 물리적인 트랜잭션을 시작합니다. 예를 들어, 핵심 로직의 트랜잭션 실패와 관계없이 항상 로그를 기록해야 하는 경우에 유용합니다. 로그 기록 실패가 핵심 로직 트랜잭션에 영향을 주지 않도록 분리하는 것이죠. REQUIRED는 논리적인 트랜잭션으로 묶이지만, REQUIRES_NEW는 물리적으로 분리된 트랜잭션을 사용합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Java / Spring 면접 질문
- Java의 Checked Exception과 Unchecked Exception의 차이점과 사용 지침에 대해 설명해주세요.
- Spring의 프로파일(Profile) 기능은 무엇이며, 어떻게 활용하나요?
- Java의 String, StringBuilder, StringBuffer의 차이점은 무엇인가요?
- Spring Bean의 생명주기(Lifecycle)에 대해 설명해주세요. 초기화와 소멸 콜백은 어떻게 처리하나요?
- Spring에서 AOP(Aspect Oriented Programming)란 무엇이며, 어떤 상황에서 사용하나요?
- Spring Boot의 자동 설정(Auto Configuration)은 어떻게 동작하나요?