개인 공부 (23.07~

EntityManager(순수 JPA) vs JpaRepository(Spring Data JPA)

Song쏭 2023. 9. 4. 16:23

EntityManager를 사용해서 간단히 만들어보면서

JpaRepository 상속받아서 만드는 것이랑 어떤 점이 다른지 궁금해져서 알아보았다.

 

EntityManager와 JpaRepository를 사용하는 두 가지 일단 두가지 접근 방법은

데이터 엑세스에 있어서 다르게 동작한다.

이 두 방법의 차이점은 순수 JPA와 Spring Data JPA의 차이점을 대표하는 것이기도 하다.

 

EntityManager (순수 JPA)

직접적인 제어 : EntityManager는 JPA의 핵심 클래스로, Entity의 생명주기를 관리한다.

이를 통해 Entity를 영구 저장소에 저장하거나 검색하는 등의 작업을 수행할 수 있다.

유연성 : EntityManager를 사용하면 JPA를 더 세밀하게 제어할 수 있다.

복잡한 쿼리나 동적 쿼리를 작성할 수 있으며, 트랜잭션을 더 세세하게 제어할 수 있다.

복잡성 : 그만큼 API 사용이 복잡하고, 별도로 DAO(Data Access Object) 클래스를 작성해야할 수도 있다.

public class HotelRepository {

	private final EntityManager em;
    
    public HotelRepository find(Long id) {
    	return em.find(HotelEntity.class, id);
    }
}

 

JpaRepository (Spring Data JPA)

간편성 : Spring Data JPA는 데이터 액세스 계층을 더 쉽게 구현할 수 있도록 해주는 프레임워크이다.

JpaRepository 인터페이스를 상속받아 간단한 설정으로 CRUD 연산을 수행할 수 있다.

고수준 API : JpaRepository를 사용하면 고수준의 메서드를 제공받을 수 있어 코드가 간결해진다.

예를들어, findAll(), findById(), save(), deleteById() 등의 메서드가 미리 정의되어 있다.

컨벤션 기반 쿼리 생성 : 메서드 이름만으로 쿼리를 생성할 수 있어 특별한 쿼리 메서드를 쉽게 추가할 수 있다.

pulic interface HotelRepository extends JpaRepository<HotelEntity, Long> {
	List<HotelEntity> findByName(String name);
}

 

결론

EntityManager는 더 낮은 수준의 작업을 할 때 유용하고, 세밀한 제어가 필요할 떄 사용된다.

JpaRepository는 일반적인 데이터 엑세스 작업에 더 편리하며, 빠른 개발을 지원한다.

두 방식은 각각의 장단점이 있으며, 프로젝트의 요구 사항과 복잡성에 따라 적절한 방식을 선택할 수 있다.

 

나는 지금까지 SQL 매핑 프레임워크인 MyBatis만 사용해보았다.(물론 왕기초만 만들어봄,,)

JPA를 배우면서 확실히 하나하나 sql문을 작성하지 않아도 되니 엄청 편리하다는 것을 느꼈다.

다만, 실제 SQL을 직접 구상해보지 않아서..

오히려 데이터베이스의 동작 방식, 최적화, 쿼리 튜닝 등을 직접 학습하지 못하게 되니

DB부분도 따로 꾸준히 공부해야겠다는 생각도 든다...