@Transactional과 @Service 알고 사용하자
KUKJIN LEE • 7개월 전 작성
@Transactional
-
목적: @Transactional 어노테이션은 해당 클래스나 메소드에 트랜잭션 관리를 적용하겠다는 것을 Spring에 알립니다. 트랜잭션이란 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위를 말하며, 이 어노테이션을 사용함으로써 해당 작업이 전부 성공적으로 이루어지거나, 하나라도 실패할 경우 전체를 취소(롤백)하는 것을 보장합니다.
-
사용처: 주로 서비스 레이어나 데이터 액세스 레이어(DAO)에서 사용되며, 데이터의 일관성과 무결성을 유지하는데 필수적입니다.
-
기능: 선언적 트랜잭션 관리를 제공하여, 개발자가 트랜잭션 관리 코드를 직접 작성하지 않아도 되게 합니다.
@Service
-
목적: @Service 어노테이션은 해당 클래스가 서비스 레이어의 컴포넌트임을 Spring에 알립니다. 서비스 레이어는 비즈니스 로직을 처리하는 곳으로, 컨트롤러(Controller)와 데이터 액세스 오브젝트(DAO) 사이의 중간 단계에 위치합니다.
-
사용처: 비즈니스 로직을 구현하는 서비스 클래스에 사용됩니다. 이는 Spring의 컨테이너에 의해 관리되는 빈(Bean)으로 등록되어, 의존성 주입(Dependency Injection)과 같은 기능을 사용할 수 있게 합니다.
-
기능: 클래스를 서비스 레이어의 컴포넌트로 명시적으로 표시하며, Spring에서 이를 인식하여 관리할 수 있게 합니다. 이는 컴포넌트 스캔(Component Scan) 기능을 통해 자동으로 빈으로 등록됩니다.
기능적 차이: `@Service`는 주로 스프링이 관리하는 빈으로 등록하기 위한 목적이며, `@Transactional`은 해당 작업의 실행을 트랜잭션으로 묶어주는 역할을 합니다.
일반적으로, 서비스 클래스에는 `@Service`를 사용하여 이를 서비스 레이어 컴포넌트로 명시하고, 필요에 따라 `@Transactional`을 추가하여 메소드 또는 클래스 전체에 트랜잭션 관리를 적용합니다. 두 어노테이션은 서로 다른 측면을 다루므로 함께 사용될 수 있으며, 각각의 역할에 따라 적절히 사용되어야 합니다.