Spring Boot - JPA란?
데어프로그래밍 님의 스프링 부트 강의를 듣고 정리하는 글입니다.
JPA란?
Java Persistence API이다. -> Persistence(영속성)은 데이터를 생성한 프로그램이 종료되도 사라지지 않는 데이터의 속성이다. JPA는 자바의 데이터를 영구히 기록할 수 있는 API다. API라는 것은 인터페이스라는 것이고, 그렇다면 그것을 구현하는 무언가가 있어야 한다.
ORM 기술이다. -> Object Relational Mapping. Object를 DB와 매핑하는 방법이다. JPA의 인터페이스를 이용해 자바의 클래스와 맞는 DB의 테이블을 자동 생성해준다.
반복적인 CRUD 작업을 생략하게 해준다. -> 자바 프로그램과 DB와의 연결, 쿼리 전송, 데이터 타입 변환 등등의 기능을 함수로 제공한다.
영속성 컨텍스트를 가지고 있다 -> 컨텍스트는 대상의 정보다. 자바와 DB 사이에는 영속성 컨텍스트라는 것이 있다. 자바와 DB는 이것을 거쳐 데이터를 주고 받는다. 영속성 컨텍스트는 DB와 자바의 데이터를 동기화해 줄 수 있다.
DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다.(DB -> 자바) -> DB는 객체 타입의 데이터를 가질 수 없다. 그러나 테이블을 클래스로 모델링할 때, ORM을 이용하면 모델링된 클래스는 객체를 가질 수 있다.
OOP의 관점에서 테이블을 모델링할 수 있게 해준다.(상속, 컴포지션, 연관관계)
- 상속: 상속 받은 클래스를 모델링할 때, 상속 받은 필드도 테이블의 컬럼에 추가한다.
- 컴포지션: JPA가 클래스를 테이블로 모델링할 때, 클래스의 필드 중 객체(클래스)가 있다면 그 객체에 대한 테이블을 따로 만들고 그 객체에 대한 id 컬럼을 만들어 관리한다.
방언 처리가 용이하여 Migration하기 좋다. 유지보수에 좋다. -> 여러 데이터베이스의 쿼리를 지원한다. JPA는 추상화 객체와 연결되어 있고, DB는 이 추상화 객체와 연결된다. 그래서 추상화 객체 하나만 바라보고 JPA를 사용할 수 있다.