JPA
1. Java Persistence API이다.
영속성(persistence)은 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성을 의미한다.

Persistence API = 자바데이터를 기록할 환경을 제공
RAM은 휘발성이라 전원이 꺼지면 데이터가 사라지고, 하드디스크는 비휘발성이라 영구 저장된다.
DBMS는 하드디스크 일부를 관리한다.
API란?
애플리케이션(A) -> 프로그램
프로그래밍(P) -> 프로그래밍! ⤴
인터페이스(I) -> 인터페이스 ⤴
| 프로토콜 | 인터페이스 | |
| 약속 | 동등 | 상하관계 |
| 예시 | A, B, C | A, B, C (B가 나에게 연락할 때는 전화하지 말고 직접 찾아와) |
2. ORM(Object-Relational Mapping) 기술
JAVA 객체와 데이터베이스 테이블을 자동으로 연결해주는 기술

장점: sql문을 java application 내에 적용하지 않아도 된다.
3. 반복적인 CRUD 작업을 생략하게 해준다.

DB ↔ Java ↔ Data (이 모든 과정을 하나의 함수로 제공)
- DB 세션 오픈 → 자바에서 Connection 가짐
- 두 번째 요청 시 쿼리 전송 → DB에서 Data 생성
- Data 응답 → 자바에서 받아서 Java Object로 변환
- 변환 완료 후 세션 종료
C insert/ R select, select all / U upade/ D delect
4. 영속성 컨텍스트를 가지고 있다.
영속성: 데이터 -> 영구적으로 저장!(DB)
- 컨텍스트 : context = 대상의 모든 정보 ( context=모든 것)

- 영속성 컨텍스트 = 자바가 DB에 데이터를 저장해야되는 모든 것을 알고 있는 애
: 영속성 컨텍스트의 데이터와 DB의 데이터는 동기화 ( 삭제하면 삭제, 저장하면 저장 )

1. 자바에서 영속성 컨텍스트에게 과일데이터 요청
2. 영속성 컨텍스트는 DB의 과일데이터 요청, 응답
3. 영속성 컨텍스트에서 과일데이터Type을 자바object로 바꾸고 자바에게 돌려줌 ( 이때 DB의 과일 데이터와는 Type이 다름)
4. 이 때 3개의 과일데이터의 데이터는 일치 ( Type은 불일치 )
# 과일 데이터 변경 시
1. 자바프로그램에서 변경
2. 영속성 컨텍스트에서도 변경
3. 영속성 컨텍스트의 과일데이터와 DB의 과일데이터의 형상이 다르다 -> INSERT가 아닌 UPDATE
결론 : 자바가 DB에 저장, 수정, 삭제하는 모든 데이터는 영속성 컨텍스트가 다 들고있다.
5. DB와 OOP의 불일치성을 해결하귀 위한 방법론을 제공한다.(DB는 객체저장 불가능)

예시로 DB에 team과 player 테이블이 있다. 팀은 ID,Name,Year 컬럼들이 있고 Player는 Id,Name,teamId(FK이며 Team 테이블의 ID를 참조함)를 들고있다.
DB는 Player 이대호의 teamId는 Integer라는 데이터를 갖고있는거지 team 테이블의 Id, Name, Year 3가지 데이터인 오브젝트를 갖지 못한다.
- ORM으로 해결가능 ( JPA가 자동으로 Foreign Key를 집어넣어준다 )
DB에 있을 때 속성은 원래 기본자료형만 들어갈 수 있지만( 자바는 객체 저장가능 ) Team객체를 넣어도 JPA의 ORM을 통해 DB에 테이블을 만들 때 자동으로 외래키를 심어줌
6. OOP의 관점에서 모델링을 할 수 있게 해준다.(상속, 콤포지션, 연관관계)
JPA는 DB를 먼저 만들고 '테이블'을 통한 '클래스'를 모델링하는것이 아닌 '클래스'를 먼저 만들고 클래스를 토대로 DB를 자동 생성
Class Car {
int id; (pk)
String name;
String color;
Engine engine;
}
Class Engine {
int id;
int power;
}
class EntityDate {
TimeStamp createDate;
TimeStamp updateDate;
}
JPA는 클래스에서 테이블을 자동생성 해주기 때문에 아래와 같은식으로 테이블이 생긴다.
Car
| id | name | color | engineId |
| 1 | BMW | White | 2 |
| 2 | SONATA | Black | 1 |
Engine
| id | power |
| 1 | 2000 |
| 2 | 4000 |
EntityDate를 상속받게 되면?
Car
| id | name | color | engineId | createDate | updateDate |
| 1 | BMW | White | 2 | ||
| 2 | SONATA | Black | 1 |
Engine
| id | power | createDate | updateDate |
| 1 | 2000 | ||
| 2 | 4000 |
7. 방언 처리가 용이하여 Migration하기 좋음. 유지보수에도 좋음
스프링에서 DB에 연결할 때 JPA가 MySQL만 사용하는것이 아니라 '방언처리'가 용이하여 Oracle,MariaDB, MsSQL, MySQL등등 정해놓고 사용하는 것이 아니라 '추상화객체'를 하나 두고 DB와 연동을 한다.

JDBC
- java.sql.Connection - 연결
- java.sql.Statement - SQL을 담은 내용
- java.sql.ResultSet - SQL 요청 응답
특징 1. sql / 2.connection 관리 / 3. preparedstatment, resultset 객체
connection객체가 db와 app의 연결을 관리하고 preparedstament가 sql를 전달하며 resultset 객체를 통해 결과값을 전달한다.
Mybatis
MyBatis는 자바에서 SQL Mapper를 지원해주는 Framework이다.
MyBatis의 경우 xml파일을 통해 SQL 쿼리를 별도 관리하며 동적 쿼리 작성
장점: 복잡한 쿼리도 처리할 수 있다.
ORM VS SQL Mapper
| SQL Mapper | ORM |
| SQL <- 매핑 -> Object | 데이터베이스 데이터 <- 매핑-> Object |
check) myBatis는 ORM이다?(X) mybatis는 SQL Mapper다.
출처: 메타코딩
스프링부트 개념정리 with JPA 4강 - JPA란 무엇인가요?
스프링부트 개념정리 with JPA 5강 - ORM이란 무엇인가요?
스프링부트 개념정리 with JPA 6강 - 영속성 컨텍스트란 무엇인가요?
스프링부트 개념정리 with JPA 7강 - OOP 관점에서 모델링이란?
https://www.youtube.com/watch?v=ajZIPOv31yE
'cs > dev' 카테고리의 다른 글
| [CS]OOP의 4가지 특징 (0) | 2025.09.16 |
|---|---|
| [Spring]spring과 spring boot (0) | 2025.09.16 |
| [CS]프로시저란 무엇인가요? (0) | 2025.09.14 |
| [CS]제대로 이해하는 REST API (0) | 2025.09.14 |
| [CS]www.naver.com을 주소창에 치면 무슨 일이 일어날까요? (1) | 2025.09.13 |