
이를 분리하는 이유??
단일 책임 원칙을 지키기 위해!
계층형 아키텍처 지향
인터페이스가 명확해짐!
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 와 상호작용