본문 바로가기
[JAVA]/JPA

JPA(Java Persistence Application)

by 팡펑퐁 2022. 11. 25.
728x90

SQL 중심적인 개발의 문제점

  • 애플리케이션을 개발할 때 보통은 객체지향언어로 개발을 한다.
  • 데이터베이스는 보통 관계형 DB를 사용한다.
  • 즉, 객체를 관계형 DB에 관리한다.
  • 이를 위해서는 수많은 SQL을 사용해야 한다.
  • 무한 반복되는 SQL 쿼리, 지루한 코드
    • 자바 객체 -> SQL
    • SQL -> 자바 객체
  • 하지만, 관계형 데이터베이스를 사용하기 위해서는 SQL에 의존적인 개발을 피할 수 없다.
  • 따라서 객체를 관계형 데이터로 바꿀 때 누군가 SQL을 작성해야 한다.(SQL 매퍼)
  • 객체답게 모델링을 할수록 매핑 작업이 엄청나게 늘어난다.
  • 객체를 자바 컬렉션에 저장하듯이(쉽게 넣다 뺄 수 있는) DB에 저장할 수 없을까?
    • -> JPA

 

 

JPA까지의 역사

EJB- 엔티티빈(자바 표준)

  • 기술이 너무 복잡하고 성능이 좋지 않아 개발자들이 사용하지 않았음

 

하이버네이트(Hibernate)(오픈 소스)

  • 게빈 킹과 그의 동료들이 엔티티빈의 실용성에 불만을 품고 직접 오픈 소스를 제작하여 만든 자바 진영의 ORM 프레임워크로, 객체 지향 도메인 모델을 관계형 데이터 베이스 모델로 매핑하기 위한 프레임워크를 제공한다.

 

JPA(Java Persistence Application)

  • 자바 진영에서 기존의 엔티티빈을 대체하는 새로운 표준 사양을 만들기 위해 게빈 킹을 영입하였다.
  • 게빈 킹이 개발한 덕분에 기존의 하이버네이트와 거의 흡사하다.
  • 자바 진영에서 사용하는 ORM 기술의 표준 사양(또는 명세)이 되었다.
  • JPA는 인터페이스의 모음이며, JPA2.1 표준 명세를 구현한 대표적인 구현체로는 하이버네이트, EclipseLink, DataNucleus가 있다. 그러나 대부분 구현체로 하이버네이트를 쓴다.(하이버네이트를 만든 개발자가 만들었으니 당연한 결과인 듯)
  • 따라서 JPA를 학습한다는 말은 JPA 표준사양을 구현한 구현체에 대해 학습한다는 의미이다.
  • JPA는 JAVA 애플리케이션과  JDBC 사이에서 동작한다.
  • 엔티티를 JPA에 던지면 JPA가 엔티티를 분석하고, INSERT SQL을 생성하며, 패러다임의 불일치를 해결해 준다.

 

ORM이란?

  • Object-relational mapping(객체 관계 매핑)
  • 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다.
  • ORM 프레임워크가 이를 중간에서 매핑한다.
  • 대중적인 언어에는 대부분 ORM 기술이 존재한다.

 

 

왜 JPA를 사용해야 하는가?

  • SQL 중심적인 개발에서 객체 중심적인 개발로
  • 생산성, 유지보수성, 성능 향상
  • 패러다임 불일치 해결
  • 데이터 접근 추상화와 벤더 독립성
  • 무엇보다 표준임

 

 

JPQL

  • JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.
  • SQL 문법과 유사하며, SELECT, FROM, WHERE, GRUOP BY, HAVING, JOIN을 지원한다.
  • SQL이 데이터베이스 테이블을 대상, JPQL은 엔티티 객체를 대상으로 한다.
  • SQL을 추상화하여 특정 데이터베이스 SQL에 의존하지 않는다.
  • JPQL을 한마디로 정의하면 객체 지향 SQL임

 

 

 

참고

김영한 - 자바 ORM 표준 JPA 프로그래밍

728x90

'[JAVA] > JPA' 카테고리의 다른 글

JPA - 필드와 컬럼 매핑  (0) 2022.11.27
JPA - 객체와 테이블 매핑  (0) 2022.11.27
JPA - flush(플러시)  (0) 2022.11.26
JPA - 영속성 컨텍스트  (0) 2022.11.26
JPA 애노테이션 정리  (0) 2022.11.25