봄수의 연구실

Service의 책임 본문

DEV/Java

Service의 책임

berom 2023. 7. 18. 15:49

서비스와 리포지토리 계층 책임의 차이점

서비스 계층과 리포지토리 계층의 주요 차이점은 다음과 같은 책임입니다.

  • 서비스 레이어
    • 비즈니스 로직을 구현
    • 리포지토리 레이어와 상호 작용하여 데이터를 검색 및 저장
    • 트랜잭션을 관리
  • 리포지토리 레이어
    • 데이터 액세스 및 저장
    • 엔터티에 대한 CRUD 작업을 수행
      데이터베이스와 상호 작용

서비스 계층은 비즈니스 규칙 및 작업 실행에 중점을 두는 반면 리포지토리 계층은 데이터 지속성과 관련됩니다.

1 단계: 컨트롤러 계층에서 요청 받기

먼저 서비스 계층은 컨트롤러 계층에서 요청을 받습니다.
요청에는 컨트롤러가 클라이언트로부터 수신하고 검증한 데이터가 포함될 수 있습니다.

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User createUser(User user) {
        return userRepository.save(user);
    }
}

2 단계: 비즈니스 로직 실행

서비스 계층은 애플리케이션의 대부분의 비즈니스 로직이 구현되는 곳입니다.
여기에는 계산, 데이터 변환 또는 비즈니스 규칙 적용과 같은 다양한 작업이 포함될 수 있습니다.

public User createUser(User user) {
    user.setJoiningDate(LocalDate.now());
    if (user.getAge() < 18) {
        throw new IllegalArgumentException("User must be at least 18 years old.");
    }
    return userRepository.save(user);
}

3 단계: 리포지토리 레이어와 상호 작용

비즈니스 로직을 실행한 후 서비스 계층은 종종 리포지토리 계층과 상호 작용하여 데이터베이스의 데이터를 검색하거나 업데이트합니다.
여기에는 엔터티를 저장하고, 속성으로 엔터티를 찾고, 엔터티를 삭제하기 위해 리포지토리에서 제공하는 메서드를 호출하는 것이 포함될 수 있습니다.

public User createUser(User user) {
    if (userRepository.existsByEmail(user.getEmail())) {
        throw new IllegalArgumentException("Email already in use.");
    }
    return userRepository.save(user);
}

4 단계: 컨트롤러 계층에 결과 반환

마지막으로 서비스 계층은 작업 결과를 컨트롤러 계층으로 다시 반환합니다. 이 결과는 컨트롤러가 클라이언트에 다시 보내는 HTTP 응답에 포함될 수 있습니다.

public User createUser(User user) {
    // …
    return userRepository.save(user);
}

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

728x90

'DEV > Java' 카테고리의 다른 글

@Transactional  (0) 2023.07.18
ACID  (0) 2023.07.18
Controller의 책임  (0) 2023.07.18
Custom Exception  (0) 2023.07.18
Body에 상태 코드를 넣는 이유  (0) 2023.07.18