Service
Srvice 계층은 비즈니스 로직을 수행하는 계층이다.
컨트롤러에서 요청을 받고
- 데이터베이스에서 데이터를 조회
- 도메인 모델을 생성
- 트랜잭션을 관리
하는 등의 작업을 수행한다.
Service 계층은 @Service 어노테이션을 사용하여 생성할 수 있다.
@Service
public class UserService{
}
Service 계층은 Repository 계층을 @Autowired 어노테이션을 사용하여 의존성을 주입받아 사용한다.
@Service
@RequiredArgsConstructor
public class UserService{
private final UserRepository userRepository;
}
Service 단의 주요 역할은 총 5가지이며, 특징은 다음과 같다.
- 비즈니스 로직 구현
- Service 계층은 비즈니스 로직을 구현하기 때문에 Entity, DTO를 가공 및 변환하여
다양한 연산을 수행하여 비즈니스 규칙을 충족시키는 역할을 한다.
예를 들어 사용자 등록, 주문 처리, 결제 처리 등과 같은 비즈니스의 기능을
Service 계층에서 구현하는 것이다.
- 트랜잭션 관리
- Service 계층은 트랜잭션을 관리하는 책임을 가진다.
여러개의 데이터 액세스 작업이 한 단위로 묶여야 하는 경우,
Service 계층에서 트랜잭션을 시작하고 커밋 또는 롤백을 하는 작업을 수행한다.
이를 통해 데이터 일관성과 안정성을 유지할 수 있다.
- 외부 서비스 통합
- Service 계층은 외부 서비스나 API와의 통합을 수행할 수 있다.
다른 서비스와의 통신, 외부 데이터의 처리, 외부 시스템과의 연동 등을
Service 단에서 처리할 수 있다. 이를 통해 모듈화와 결합도가 낮은 설계를 구현한다.
- 비즈니스 예외 처리
- Service 계층에서 비즈니스 규칙에 의한 예외를 처리할 수 있다.
예를 들어 잘못된 입력 데이터, 중복된 데이터, 권한 오류 등에 대한 예외를
적절하게 처리하고 컨트롤러로 전달할 수 있다.
- 단위 테스트
- Service 계층은 단위 테스트를 수행하기에 적합한 계층이다.
비즈니스 로직이 복잡할 경우, Service 단에서 단위 테스트를 작성하여
각 비즈니스의 기능이 정확하게 동작하고 있는지 확인할 수 있다.