본문 바로가기
웹 개발/JPA

[JPA] JPA는 왜 사용하나요?

by 어썸오184 2021. 7. 13.
728x90
반응형

JPA란 무엇인가

JPA(Java Persistence API)는 javax.persistence 패키지에 정의되어 있는 자바 진영의 ORM 기술 표준이다. ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매팡한다는 것인데, 쉽게 말하면 객체를 데이터베이스에 저장할 때 마치 자바 컬렉션에 저장하듯이 SQL문을 직접 작성하지 않고도 프로그래밍할 수 있도록 도와주는 기술이다.

JPA는 자바 ORM 기술에 대한 API 표준 명세, 즉 인터페이스의 집합이다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 사용해야한다. 대표적으로 하이버네이트, EclipseLink, DataNucleus 등이 있다.

image


출처: 자바 ORM 표준 JPA 프로그래밍

왜 JPA를 사용해야 하는가

SQL 중심 개발의 문제점

현대의 애플리케이션은 대부분 객체지향 언어로 개발한다. 근데 데이터베이스는 관계형 데이터베이스가 주류를 이루고 있다. 이 둘을 사용해서 프로그램을 개발하려면 결국 개발자가 중간에서 객체를 테이블로 변환하는 작업을 해주어야한다. 또 DB의 데이터를 가져다 쓰려면 이를 다시 객체로 변환해서 사용해야한다. 문제는 이 작업이 생산성과는 관계없는 지루하고 반복적인 작업이라는 것이다.

  • CRUD 무한 반복
    • 자바 객체 -> SQL, SQL -> 자바 객체
    • 객체에 필드 추가 -> 쿼리문 수정
    • 개발자가 객체와 SQL 사이에서 변환 작업을 계속 해주어야함 -> 너무나 반복적인 작업

또 객체와 RDB는 지향하는 목적이 서로 다르므로 둘의 기능과 표현 방법도 다르다. 이를 패러다임 불일치 문제라고 한다.

  • 패러다임의 불일치
    • 상속: 객체는 상속관계가 있지만, RDBMS는 슈퍼타입-서브타입을 사용한다. 상속 관계의 객체를 DB에 저장하려면 INSERT 문을 두 번 작성해야한다.
    • 연관관계: 객체는 참조로, RDBMS는 외래키로 연관관계를 표현한다. 객체는 참조가 있는 방향으로만 조회가 가능하지만, RDBMS는 외래키를 통해 양방향 조회 가 가능하다.
    • 객체 그래프 탐색: 객체는 객체 그래프를 자유롭게 탐색 가능하다. 그러나 RDBMS는 처음 실행하는 SQL에 따라 탐색 범위가 결정된다.
    • 비교: 객체는 동일성(identity) 비교와 동등성(equality) 비교를 사용한다. RDBMS는 기본 키를 통한 ROW 구분으로 비교한다.

객체를 마치 자바 컬렉션에 저장하듯이 DB에 저장할 수 없을까? 하는 고민에서 탄생한 것이 바로 JPA이다.

JPA를 사용하면…

JPA는 자바 객체를 RDB에 저장하기 위한 SQL 매핑과 패러다임 불일치 문제를 모두 해결해준다!

즉 JPA를 사용하면 다음과 같은 장점이 있다.

  • SQL 중심적 개발을 벗어나 객체 중심 개발을 할 수 있다.
  • 반복적인 쿼리문 작성에서 벗어나 생산성을 높일 수 있다.
  • 객체지향적 코드로 유지보수하기가 더 편해진다.
  • RDBMS와 객체지향의 패러다임 불일치 해결
    • 상속
    • 연관관계
    • 객체 그래프 탐색
    • 비교 - 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장
  • 성능상의 이점
    • 1차 캐시와 동일성 보장
    • transactional write-behind
    • Lazy Loading
  • 데이터 접근 추상화와 벤더 독립성 - 사용하는 DB 제품을 바꿔도 코드를 수정할 일이 없다.
  • Java 진영의 ORM 표준
728x90
반응형

댓글