JPA란?

KOO HEESEUNG·2021년 6월 24일
0

Springboot with JPA

목록 보기
3/4
post-thumbnail

1. JPA는 Java Persistence API 이다.

1.1. 영속성

영속성(Persistence) : 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성

RAM은 휘발성 메모리이기 때문에 컴퓨터가 꺼지면 데이터가 사라진다. 데이터가 사라지지 않도록 비휘발성인 하드디스크에 저장하는 것을 "영속성"이라 한다.

자바에서는 데이터 저장을 DBMS로 관리한다. 즉, JPA는 자바 프로그래밍을 할 때 데이터를 영구히 기록할 수 있는 환경을 제공하는 API를 말한다.

1.2. API

API는 Application Programming Interface의 약자로, 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 말한다.

2. JPA는 ORM 기술이다.

2.1. ORM이란?

Object Relational Mapping. 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 건물을 짓기 위해 설계도를 만들고, 건물을 모델링하듯, 클래스를 먼저 만들고, 이를 통해 DB에 테이블이 자동으로 생성되게 할 수 있다.

ORM은 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다. DB는 객체 저장이 불가능하지만, 자바는 객체저장이 가능하기 때문에, 자바에서 프로그래밍할 때는 객체를 저장하고, 이걸 DB에 넣을 때는 JPA가 자동으로 Foreign Key를 심어준다.

2.2. ORM의 장단점

장점
  • 객체지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.

  • 재사용 및 유지보수의 편리성이 증가한다.

  • DBMS에 대한 종속성이 줄어든다.

단점
  • 완벽한 ORM으로만 서비스를 구현하기는 어렵다.
✔︎ 참고

3. JPA는 영속성 컨텍스트를 가지고 있다.

3.1. 영속성 컨텍스트(Persistence Context)란?

영속성 컨텍스트는 물리적인 개념이 아닌, 논리적인 개념으로, "엔티티를 영구 저장하는 환경"이라고 할 수 있다.(번역하기 어렵지만 대략 이렇게 정의할 수 있다.)

J2EE나 스프링과 같은 컨테이너 환경에서는 여러 개의 엔티티 매니저가 하나의 영속성 컨텍스트에 접근하게 된다.(N:1)

영속성 컨텍스트는 내부에 1차 캐시를 갖고 있어, 영속 상태의 엔티티는 모두 이곳에 저장된다. 엔티티를 조회하게 되면 JPA는 기본적으로 1차 캐시를 먼저 찾고, 여기에 엔티티가 없다면 DB에서 조회한다. 또한, 엔티티의 등록/수정/삭제도 영속성 컨텍스트를 통하게 된다.

즉, 자바는 항상 영속성 컨텍스트를 통해서 데이터베이스에 데이터를 저장하고, DB의 데이터도 이 영속성 컨텍스트를 통해서 자바로 전달이 되며, 이러한 모든 작업들은 자동으로 처리가 된다.

img

✔︎ 참고

4. 방언처리가 용이하여 Migration과 유지보수에 용이하다.

DB는 ORACLE, MySQL, MariaDB 등 그 종류가 다양하고, 이들은 경우에 따라 문법과 함수가 조금씩 다르다. 이러한 SQL 표준을 지키지 않는 특정 벤더별 기능을 방언(Dialect)이라 부르고, JPA는 특정 DB에 종속되지 않아 별도의 방언처리를 해주면 JPA가 그 DBMS에 맞는 쿼리를 생성한다.

✔︎ 참고

0개의 댓글