Domain/Spring

[Spring] JPA (2)

by Donghwan 2021. 9. 28.

왜 JPA를 사용해야 하는가?

JPA는 자바 0RM 기술에 대한 API 표준 명세다. 쉽게 이야기해서 인터페이스를 모아둔 것입니다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 선택해야 합니다. Hibernate, EclipseLink, DataNucleus이 있고 보통 Hibernate를 많이 사용합니다.

JPA라는 표준 덕분에 특정 구현 기술에 대한 의존도를 줄일 수 있고 다른 구현 기술로 쉽게 이동할 수 있는 장점이 있습니다. 그리고 JPA 표준은 일반적이고 공통적인 기능의 모음이다. 따라서 표준을 먼저 이해하고 필요에 따라 JPA 구현체가 제공하는 고유의 기능을 알아가면 됩니다.

1. 생산성
JPA를 사용하면 다음 코드처럼 자바 컬렉션에 객체를 저장하듯이 JPA에게 저장할 객체를 전달하면 됩니다. 지루하고 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성하지 않아도 됩니다. 더 나아가서 JPA에는 CREATE TABLE 같은 DDL 문을 자동으로 생성해주는 기능도 있습니다. 이런 기능들을 사용하면 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역전시킬 수 있습니다.
public class Member { ... }

//CRUD
//저장
jpa.persist(member);

//조회
Member member = jpa.find(memberId);

//수정
member.setXXX("");

//삭제
jpa.remove(member)​
2. 유지보수
SQL을 직접 다루면 엔티티에 필드를 하나만 추가해도 관련된 등록, 수정, 조회 SQL과 결과를 매핑하기 위한 JDBC API 코드를 모두 변경해야 했습니다. 반면에 JPA를 사용하면 이런 과정을 JPA가 대신 처리해주므로 필드를 추가하거나 삭제해도 수정해야 할 코드가 줄어듭니다. 따라서 개발자가 작성해야 했던 SQL과 JDBC API 코드를 JPA가 대신 처리 해주므로 유지보수해야 하는 코드가 줄어듭니다.
3. 패러다임의 불일치 해결
1부에서 패러다임의 불일치 문제에 대해 다루었고, JPA를 통한 해결책도 간단히 보았습니다. JPA는 상속, 연관관계, 객체 그래프 탐색, 비교하기와 같은 패러다임의 불일치 문제를 해결해줍니다.
4. 성능
JPA는 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회를 제공합니다. JPA는 애플리케이션과 데이터베이스 사이에서 동작합니다. 이렇게 애플리케이션과 데이터베이스 사이에 계층이 하나 더 있으면 최적화 관점에서 시도해 볼 수 있는 것들이 많습니다.
String memberId = "hellold";
Member memberl = jpa.find (memberId);
Member member2 = jpa.find (memberId);

이것은 같은 트랜잭션 안에서 같은 회원을 두 번 조회하는 코드의 일부분입니다. JDBC API를 사용해서 해당 코드를 직접 작성했다면 회원을 조회할 때마다 SELECT SQL을 사용해서 데이터 베이스와 두 번 통신했을 것입니다. 하지만 JPA를 사용하면 회원을 조회하는 SELECT SQL을 한 번만 데이터베이스에 전달하고 두 번째는 조회한 회원 객체를 재사용합니다. 참고로 Hibernate는 SQL 힌트를 넣을 수 있는 기능도 제공합니다.

트랜잭션을 커밋할 때까지 INSERT SQL을 모아서 DB 접근을 한번에 실행할 수 있습니다. JDBC BATCH SQL 기능을 사용합니다. JPA를 사용하면 디테일한 설정을 알지 못하더라도 옵션을 이용하여 쉽게 사용이 가능합니다.
5. 데이터 접근 추상화와 벤더 독립성
관계형 데이터베이스는 같은 기능도 벤더마다 사용법이 다른 경우가 많습니다. 단적인 예로 페이징 처리는 데이터베이스마다 달라서 사용법을 각각 배워야 합니다. 결국, 애플리케이션은 처음 선택한 데이터베이스 기술에 종속되고 다른 데이터베이스로 변경하기는 매우 어렵습니다. 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 합니다. 만약 데이터베이스를 변경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 됩니다. 예를 들어 JPA를 사용하면 로컬 개발 환경은 H2 데이터베이스를 사용하고 개발이나 상용 환경은 오라클이나 MySQL 데이터베이스를 사용할 수 있습니다.
6. 표준
JPA는 자바 진영의 ORM 기술 표준이다. 앞서 이야기했듯이 표준을 사용하면 다 른 구현 기술로 손쉽게 변경할 수 있습니다.

 


참고자료

  • 자바 ORM 표준 JPA 프로그래밍
  • 인프런 자바 ORM 표준 JPA 프로그래밍 (기본편)
728x90
반응형

'Domain > Spring' 카테고리의 다른 글

[Spring] JPA 영속성 컨텍스트  (0) 2021.11.18
[Spring] Context ( RootContext, ServletContext )  (0) 2021.11.18
[Spring] JPA (1)  (0) 2021.09.27
[Spring] Jar와 War  (0) 2021.09.18
[Spring] @Controller, @Service, @Repository  (0) 2021.09.18

댓글