JPA = JAVA Persistence API 즉 영구히 기록되는 영속성을 사용한다
하드디스크의 일부 공간을 DBMS를 통해 데이터를 기록한다
API = Aplication Programing Interface
Protocal vs Interface
프로토콜 : 동일한 관계에서의 약속
인터페이스 : 상하 관계에서의 약속
JAVA Persistence API = 자바 프로그램을 만들때 데이터를 영구히 기록하기 위해 사용되는 인터페이스
JPA는 ORM기술이다
ORM = Object Relational Mapping
ORM은 나의 하인이다?
모델링 = 추상적인 설계도를 구체적인 현실의 것으로 만드는 것
자바와 DB가 가지는 데이터 타입이 다르다
1. TRM = 테이블 형식으로 만들어진 데이터를 class로 모델링 한다
2. ORM = class를 만들면 JPA의 인터페이스를 따라 테이블을 자동으로 생성한다
JPA는 반복적인 CRUD작업을 생략하게 해준다
C = Insert, R = Select, U = update, D = Delete를 하는 단순 반복 작업이다
1. 자바가 DB에 연결을 시도하면 DB는 세션을 오픈한다
2. 자바는 커넥션(연결을 위한 객체)을 가지고 DB에 쿼리를 전송한다
3. DB는 자바에게 테이블 형식의 데이터를 전송한다
4. JSON을 이용해서 중간에 치환한다
5. 데이터가 자바 객체로 받아진다
위의 과정을 JPA에서는 간단한 함수로 대체한다
JPA는 영속성 컨텍스트를 가진다
컨텍스트 = 그 대상에 대한 모든 정보를 가지는것
자바 <-> 영속성 컨텍스트 <-> DB
데이터 타입 : 자바==영속성 컨텍스트 != DB
1-1. 자바에서 동물 데이터 생성
1-2. 영속성 컨텍스트에 동물 데이터 생성
1-3. DB에 동물 데이터 생성
2-1. 자바에서 영속성 컨텍스트에는 없고 DB에만 존재하는 과일 데이터 요청
2-2. 영속성 컨텍스트에 과일 데이터 생성
2-3. 자바에 과일데이터 리턴
3-1. 자바에서 과일 데이터를 딸기로 변경
3-2. 영속성 컨텍스트에서도 딸기로 변경
3-3. DB에서도 UPDATE실행
영속성 컨텍스트 = 자바에서 데이터와 관련되 모든 작업이 저장되어 있는곳 및 자동으로 처리 되는 곳
중요! JPA는 DB와 OOP의 불일치성으로 해결하기 위한 방법론을 제공한다
TEAM | PLAYER | |||
ID | NAME | ID | NAME | TEAMID |
1 | SKT | 1 | A | 1 |
2 | KT | 2 | B | 1 |
3 | LG | 3 | C | 2 |
player와 team을 연결하기 위해선 조인을 하거나 SELECT을 두번 해야 한다
ORM은 이러한 방법대신 OOP를 이용해서 훨씬 간결하게 처리한다
class Player{
int ID;
String NAME;
TEAM team;
}
자바에서는 객체를 사용할 수 있으니 이런식으로 클래스를 만들면 JPA가 자동으로 데이터를 변환해서 DB에 넣는다
ORM을 사용하면 자바가 주도권을 가지고 있는 모델링을 만들 수 있다
JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다
상속 = IS-A
결합 = HAS-A
상속 -> 클래스에 변수 추가 -> 테이블에 칼럼추가
결합 -> 클래스에 객체 찍기 -> FK만들어서 테이블끼리 매핑 시킴
방언 처리가 용이하여 Migration하기 좋고 유지보수에도 좋다
JPA는 다양한 방언(dialect) 즉, 오라클 ,마리아, mysql 등등에서 사용할 수 있다
JPA가 추상화된 객체를 생성하고 적절한 DB에 연결해서 사용한다
'SpringBoot > 기본개념(Meta)' 카테고리의 다른 글
3-Springboot 동작 원리(METACODING-SPRINGBOOT-개념정리) (0) | 2024.02.07 |
---|---|
1강-기본개념잡기(METACODING-SPRINGBOOT-개념정리) (0) | 2024.02.03 |