Sample App Features

Application 에서는 기본적으로 object 에 대한 Create, Read, Update, Delete 의 기능을 제공한다. 이러한 기능을 제공하는 App 을 CRUD Application 이라고도 부른다.

Data Access Obejct

DAO 는 Data Access Obejct, 즉 Database 접근을 위한 obejct 로, database 와 interfacing 하는 기능을 담당하는 object 또는 Design Pattern 을 의미한다.

주로 위에서 언급한 CRUD 작업을 처리하며, Business Logic 과 Data Access Logic 을 분리시키기 위하여 사용된다.

DAO 는 다음 몇 가지의 methods 를 가진다.

  • save(...)
  • findById(...)
  • findAll()
  • findByLastName(...)
  • update(...)
  • delete(...)
  • deleteAll()

또한 DAO 는 이전에 JPA 를 통하여 Database 의 data 를 save 하는 방법에서 언급한 JPA Entity Manager 라는 것을 필요로 하게 된다.

JPA Entity Manager

JPA Entity Manger 는 entity 들을 saving 하고 retrieving 하기 위한 핵심 Interface 이자 component 이다. 이를 통하여 entity 의 lifecycle 을 관리하고, Database 에 대한 CRUD 작업 및 JPQL query 를 실행할 수 있다.

또한 다시 JPA Entity Manager 는 Data Source 라는 것을 필요로 하게 되는데, Data Source 는 Database 와의 연결을 관리하기 위한 Interface 로, Java 에서 Database 연결을 설정하고 제공하는 역할을 수행한다.

이들 JPA Entity Manager 와 Data Source 는 application.properties file 에서의 설정(JDBC URL, user id, password 등)을 기반으로 Spring Boot 가 자동으로 생성한다.

이후 개발자는 Spring Boot 가 자동으로 생성한 Entity Manager 를, 원하는 DAO 에 autowire 하거나 inject 하여 사용할 수 있다.

Entity Manger vs JpaRepository

우선 JpaRepository 는 Spring Data JPA module 에서 제공하는 Interface 로, 최소한의 coding 으로 Database 에 대한 CRUD 작업을 매우 간단하게 처리할 수 있도록 도와준다.

다음은 Entity Manager 와 JpaRepository 에 대한 차이점이다.

항목EntityManagerJpaRepository
정의JPA 표준 API 로, entity 의 lifecycle 관리 및 DB 와 직접 상호작용하는 InterfaceSpring Data JPA 에서 제공하는 Interface 로, 기본 CRUD 작업과 Paging 및 Sorting 기능을 자동으로 구현
기능Entity 저장, 수정, 삭제, 조회 및 JPQL 작성 가능기본 CRUD method(savefindByIdfindAll 등) 와 Paging 및 Sorting 기능 제공
복잡한 Query 처리복잡한 동적 query 작성에 적합하며, native SQL 을 사용할 수 있음method 이름으로 간단한 query 작성 가능하지만 복잡한 쿼리는 제한적이며 @Query로 처리 가능.
적합한 사용 사례복잡한 query 나 native SQL을 사용해야 하는 경우간단한 CRUD 작업 및 paginateion, sorring 처리가 필요한 경우

Data Access Layer 에서 사용할 수 있는 기술 중 어떤 것을 선택해야 할지는 project 의 spec 에 따라서 선택해야 한다. 아마 두 개 모두 사용하는 경우도 있을 것이다.