Framework/JPA
JPA / Hibernate / Spring Data JPA
시나민
2023. 5. 1. 16:08
JPA (Java Persitent API)
JPA란 자바의 ORM (Object Relational Mapping) 기술에 대한 API 표준 명세를 의미한다.
자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스를 모아놓은 것으로
특정 기능을 하는 라이브러리가 아니다.
Hibernate
JPA는 말그대로 인터페이스이기 때문에 구현체가 필요하고, Hibernate는 그 구현체 중 하나이다.
이 외에도 EclipseLink, DataNucleus 등이 있지만 가장 범용적으로 다양한 기능을 제공하기 때문에
가장 많이 사용된다.
Hibernate를 사용하면 SQL문을 직접 작성하지 않아도 직관적 코드를 통하여 데이터를 조작할 수 있다.
Hibernate의 장단점
장점
- 생산성이 좋다.
- SQL문을 직접 사용하지 않고, 메서드 호출만으로 쿼리가 수행되므로 반복적인 작업을 하지 않다도 된다. - 유지보수성이 좋다.
- 테이블 컬럼이 변경 되었을 때 Mybatis의 경우 해당 테이블과 관련된 DAO의 파라미터, 결과, SQL 등을 모두 확인 후
수정해야하지만, JPA를 사용하면 이를 대신해주기 때문에 유지보수성이 좋다. - 특정 벤더에 종속적이지 않다.
- 여러 DB 벤더 (MySQL, ORACLE 등)마다 SQL 사용이 조금씩 다르기 때문에 초기 DB를 나중에 바꾸기는 어렵다.
하지만 JPA는 추상화된 데이터 접근 계층을 제공하기 때문에 특정 DB벤더에 종속적이지 않다. - 객체지향적 개발이 가능하다.
- 데이터를 객체지향적으로 관리할 수 있어서 비지니스 로직에 더 집중할 수 있다.
단점
- 러닝커브가 높다.
- JPA에는 많은 내용이 담겨 있기 때문에 잘 사용하기 위해서는 그만큼 알아야 할 것이 많다.
이를 무시하고 그냥 사용하게 된다면 데이터 손실 등을 초래할 수 있다. - 성능이 떨어질 수 있다.
- SQL을 직접 작성하는 것이 아닌 메서드 호출만으로 쿼리를 수행하기 때문에 아무래도
직접 SQL을 작성하는 것보다 성능이 떨어질 수 있다. - 세밀함이 떨어진다.
- 메서드 호출로 SQL을 실행하기 때문에 세밀함이 떨어질 수 있고, 연관 관계 매핑이 잘못되거나,
JPA를 잘못 사용하면 의도치 않은 동작이 실행될 수 있다.
또한 복잡한 통계 분석 쿼리를 단순 메서드 호출만으로 수행하기에는 힘들다.
이러한 경우에는 JPA에서 지원하는 JPQL을 사용하거나 직접 SQL문을 작성할 수 있다.
Spring Data JPA
Spring Data JPA는 Spring에서 JPA를 좀 더 편하게 사용할 수 있게 만들어놓은 모듈이다.
JPA를 사용하기 위해서는 EntityManager를 주입받아 사용해야 하지만,
Spring Data JPA에서는 JPA를 좀 더 추상화 시킨 Repository 인터페이스를 제공한다.
Repository 인터페이스에 규칙대로 메소드를 입력하면, Spring에서 해당 메소드 이름에 적합한
쿼리를 날리는 구현체를 만들어 Bean으로 등록해준다.