Pink Spider/2개의 @Transactional

Created Thu, 01 May 2025 23:40:45 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
624 Words 3 min

@Transactional 어노테이션은 Java에서 트랜잭션 처리를 위한 핵심 수단으로, springframework.transaction.annotation.Transactionaljakarta.transaction.Transactional은 비슷해 보이지만 다음과 같은 주요 차이점이 있습니다:


1. 패키지 출처

항목 Spring 어노테이션 Jakarta 어노테이션
어노테이션 경로 org.springframework.transaction.annotation.Transactional jakarta.transaction.Transactional
소속 Spring Framework Jakarta EE (구 Java EE)
API 레벨 Spring 전용 기능 Java 표준 사양 (JSR-907 등) 기반

2. 적용 대상의 차이

  • Spring @Transactional

    • Spring AOP 기반으로 동작.
    • 프록시 방식으로 트랜잭션을 관리.
    • Spring Data JPA, Spring JDBC, MyBatis 등 다양한 Spring 기술 스택과 자연스럽게 통합됨.
    • 세밀한 제어가 가능: propagation, isolation, timeout, rollbackFor, readOnly 등 속성 다양.
  • Jakarta @Transactional

    • Java EE 표준으로, 예전에는 javax.transaction.Transactional.
    • 보통 Jakarta EE 환경 (예: JBoss, WildFly, Payara 등)에서 사용.
    • 속성은 제한적이며 rollbackOn, dontRollbackOn, value, TxType만 제공.

3. 속성 비교

속성 Spring @Transactional Jakarta @Transactional
propagation
isolation
rollbackFor ❌ (대신 rollbackOn)
readOnly
timeout
TxType (REQUIRED, REQUIRES_NEW 등) 일부 속성과 매핑 가능 ✅ (기본값: REQUIRED)

4. 주 용도와 사용 시점

  • Spring @Transactional

    • Spring 기반 애플리케이션에서 기본으로 사용.
    • 대부분의 개발자에게 익숙하며 유연함이 많음.
    • 트랜잭션을 Bean 단위로 설정.
  • Jakarta @Transactional

    • Jakarta EE 기반 컨테이너 환경에서 사용.
    • CDI Bean, EJB, JAX-RS 등의 환경에서 더 자연스럽게 적용.
    • Java 표준이므로 이식성은 뛰어남.

결론 및 추천

  • **Spring 환경 (Spring Boot 등)**에서 개발 중이라면 **무조건 org.springframework.transaction.annotation.Transactional**을 사용하는 것이 좋습니다.
  • Jakarta 어노테이션은 EE 컨테이너 기반 시스템 또는 CDI 환경에서 사용할 때에만 고려하세요.