JPA는 Persistence API이다.
영속성(persistency)이란 데이터를 영구적으로 저장하는 것을 의미합니다. 따라서 영속성 컨텍스트란 직역하자면 데이터를 영구적으로 저장하는 환경정도로 해석.
JAVA Persistance API(JPA)라는것은 JAVA에 있는 데이터를 영구히 기록할 수 있는 환경을 제공하는 API 이다. 특정 하드 디스크의 영역에 DBMS로 관리할 수 있도록 공간을 만들어서 저장처리 한다.
결국 JPA를 해석풀어서 쓴다면 → Java Persistence Application Programming Interface 인데...
Java 프로그램을 할때 영구적으로 저장하기 위해서 필요한 인터페이스가 JPA이다.
JAP는 ORM이다
Object Relational Mapping.
쉽게 말해서 Object를 데이터베이스에 연결하는 방법론.
모델링 : 추상적인것을 현실적으로 뽑아내는 것.
그러면...
Java와 데이터베이스간에 Input과 Output이 이루어지는데, 이떄 Java가 들고있는 데이터 타입과 데이터베이스가 들고있는 데이터 타입이 다르다. 그래서 class를 통해서 데이터베이스에 있는 테이블을 모델링 해야 한다. 그래서 데이터베이스에 있는 형태를 본따서 Java세상에 모델링 한다.
데이터베이스
ID : INT
NAME : VARCHAR
YEAR : VARCHAR
자바
class team{
int id;
String name;
String year;
}
위와 같이 데이터베이스에 있는 데이터를 자바세상에 모델링한다.
결국 ORM은 테이블을통한 관계 맵핑이 아니라 오브젝트를 통한 관계 맵핑이다. class를 먼저 만들고 class를 통해서 데이터베이스를 자동생성할 수 있다. 이때 필요한것이 JPA가 가지고있는 인터페이스이다. 이 인터페이스의 규칙을 지키면 내가 클래스를 만들어서 실행을 하면 데이터베이스의 테이블이 자동으로 생성되도록 하는 기법을 ORM이라고 한다.
JPA는 반복적인 CRUD작업을 생략하게 해준다
전송되는 쿼리에 대한 응답이 있을때 해당 결과를 Java Object로 바꾸고, 연결된 세션을 끊고 이러한 모든 일련의 작업들을 함수화되어 있다 .따라서 이러한 반복적인 작업 CRUD를 알아서 처리해준다.
내가 해야하는 귀찮은 모든것들을 ORM이 다 해결해준다. 그래서 매우 편하다.
JPA는 영속성 컨텍스트를 가지고 있다
우선 JPA 영속성 컨텍스트를 알기위해서는 컨텍스트라는 개념 자체를 알고 넘어갈 필요가 있다.
컨텍스트란?
모바일을 개발한다던지 어떠한 어플리케이션을 개발할때에는 그 대상에 항상 컨텍스트라는것이 따라붙는다. 이 컨텍스트라는것은 그 대상에 대해서 모든것을 알수있도록 만들어둔 것인데, 이 컨텍스트만 있으면 그 대상에 대해서 접근하여 정보를 손쉽게 알 수 있다.
즉, 컨텍스트는 대상에대한 모든 정보를 가지고 있는 것.
JPA는 영속성 컨텍스트를 가지고 있다라는 말은 결국 자바라는 프로그램에서 데이터베이스에 접근하기 위해서 영속성컨텍스트에 접근하여 모든 정보를 알 수 있다는 것이다.
영속성컨텍스트는 JAVA라는 애가 데이터베이스에 저장하고 데이터베이스에 접속하여 셀렉트해서 가지고오는 모든 일련의 작업들은 영속성컨텍스트를 통해서 확인할 수 있다. JAVA는 항상 영속성컨텍스트를 통해서 데이터베이스에 저장하고 데이터도 영속성컨텍스트를 통해서 JAVA쪽으로 전달된다.
JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다.
데이터베이스 컬럼관점에서는 JAVA의 Object를 가지지 못한다.
어쩔수없이 데이터베이스 구조에 맞춘 class를 만들어야하는데 그런데 ORM을 하게되면 모델을 만들때 JAVA가 주도권을 가지고있는 모델을 만들 수 있다.
Class Player{
int id;
String name;
Team tema;
}
위와같이 들어간 데이타를 insert하거나 select하거나 할떄 JPA가 자동으로 맵핑해서 데이타를 Team에 넣어줄것이다. 이러한 일을 하는것이 ORM이다.
DB는 객체저장이 불가능하지만 JAVA는 객체저장이 가능하다.
JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다.
JPA는 OOP관점에서 테이블이 생성된다.
데이타베이스가 달라질때마다 SQL이 엄청나게 많이 달라져야 하는데 JPA를 사용하게되면 어떤 데이터베이스냐에 따라서 고민할 필요 없이 추상화 하여 사용할 수 있어서 편리한점이 있다.