Spring 에서 Controller(domain), Service 와 Repository 를 분리하는 기준이란? 왜 분리를 해야할까?

강준호·2024년 1월 12일

김영한 JPA활용편1

목록 보기
7/8

이를 분리하는 이유??

  • 단일 책임 원칙을 지키기 위해!

  • 계층형 아키텍처 지향

  • 인터페이스가 명확해짐!


Domain

@Entity
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;
    private String author;
    private BigDecimal price;

    // Constructors, getters, setters, and other domain methods...
}
  • 애플리케이션의 주요 비즈니스 개념을 나타내는 엔티티를 정의
  • 비즈니스 도메인을 모델링하여 실제 엔티티와 그 관계를 나타내기!

Repository

public interface BookRepository extends JpaRepository<Book, Long> {
    List<Book> findByAuthor(String author);
    // Other query methods...
}
  • 주로 데이터 액세스 및 조작과 관련!

  • 데이터베이스와 상호 작용하고 CRUD(생성, 읽기, 업데이트, 삭제) 작업

  • 데이터베이스와 상호 작용한 데이터를 서비스 계층으로 다시 반환합니다.


Service

@Service
public class BookService {
   private final BookRepository bookRepository;

   @Autowired
   public BookService(BookRepository bookRepository) {
       this.bookRepository = bookRepository;
   }

   public Book saveBook(Book book) {
       // Business logic before saving a book
       return bookRepository.save(book);
   }

   public List<Book> findBooksByAuthor(String author) {
       return bookRepository.findByAuthor(author);
   }

   // Other business methods...
}
  • 웹 계층과 리포지토리 계층 사이에서 중간다리!

  • 애플리케이션의 비즈니스 로직이 포함!

  • Repository 를 사용 (호출)하여 데이터베이스와 상호작용하며 비즈니스 규칙을 구현한다!

  • Controller 와 상호작용

0개의 댓글