☕️ JPA?
- Java persistence api
- 자바의 ORM 기술 표준
🍪 ORM?
Object-relational mapping : 객체 관계 매핑
- 객체는 객체대로 설계됨
- 관계형 데이터베이스는 관계형 데이터베이스대로 설계됨
- ORM 프레임워크가 중간에서 매핑함
☕️JPA 동작
- JPA는 애플리케이션과 JDBC사이에서 동작함
- JPA가 데이터베이스와 상호작용을 직접 처리하지 않고 JDBC를 사용해 간접적으로 데이터베이스와 통신한다는 의미
JDBC란
- JDBC는 자바프로그램에서 RDB(관계형 데이터베이스)에 접근할 수 있도록 하는 표준 API
- JDBC는 자바애플리케이션과 DB의 다리 역할을 함
- SQL쿼리를 실행하고 데이터베이스와 상호작용할 수 있도록 함
JDBC의 구성요소
1. JDBC Driver
- 데이터베이스 벤더가 제공하는 JDBC 드라이버를 통해 DB와 연결함
- 드라이버는 특정 DBMS의 프로토콜을 처리하는 라이브러리
- JDBC API
- 개발자가 db와 상호작용할 수 있도록 제공되는 표준 인터페이스
- DriverManager: 데이터베이스 연결을 관리.
• Connection: 데이터베이스와의 연결을 나타냄.
• Statement / PreparedStatement: SQL 실행을 위한 객체.
• ResultSet: SQL 쿼리 결과를 저장하는 객체.
동작과정: 애플리케이션 -> JPA -> JDBC -> DB
1. 엔티티 저장(insert)
@Entity
public class User {
@Id @GeneratedValue
private Long id;
private String name;
private String email;
}
public void saveUser(EntityManager em) {
em.getTransaction().begin();
User user = new User();
user.setName("wondi");
user.setEmail("wondi@velog.com");
em.persist(user);
em.getTransaction().commit();
}
내부동작
- 애플리케이션이 EntityManager.persist() 호출
- JPA는 User 객체 상태를 감지, SQL insert문으로 변환함
- JPA는 JDBC API를 사용해 SQL을 실행
- JDBC가 SQL을 실행, 데이터베이스에 저장
- 엔티티조회(select)
User user = em.find(User.class, 1L);
내부동작
- 애플리케이션이
EntityManager.find()를 호출
- JPA는 1차 캐시에서 ID가 1L인 user를 찾음 (없으면 데이터베이스로 요청)
- JPA가 select문을 생성하고 JDBC를 사용해 실행함
- JDBC결과 반환, JPA는 데이터를 User 객체로 매핑하고 반환
JPA와 JDBC의 관계
-
JPA
- 객체 지향적인 API 제공 후, SQL작성과 DB처리 추상하
- 개발자는 엔티티 객체만 조작하면 됨
-
JDBC
- JPA가 생성한 SQL문을 데이터베이스로 전달하고 결과를 반환
- DB와 통신을 수행하는 역할
JPA 동작 - 저장

JPA 동작 - 조회

- JPA는 표준 명세를 구현한 하이버네이트, EclipseLink, DataNucleus 구현체.
JPA의 장점
- 객체와 관계형 데이터베이스의 매핑
- SQL 중심 개발에서 객체 중심으로 개발 가능 -> 생산성, 유지보수 증가
- JPA가 SQL변환 및 실행을 처리
- 변경감지_dirty check
- JPA가 엔티티 상태를 자동으로 감지, SQL생성(insert, update, delete등)
- 간단한 코드
- JPA 사용 시 JDBC 반복 코드 필요없어짐
- 데이터베이스 독립성
- 애플리케이션이 데이터베이스에 의존하지 않음
- 데이터접근 추상화와 벤더 독립성
- 패러다임의 불일치 해결
생산성 증가(JPA & CRUD)
- 저장 :
jpa.persist(mem)
- 조회 :
Member mem = jpa.find(memberid)
- 수정 :
member.setName("변경이름")
- 삭제 :
jpa.remove(mem)
유지보수
- JPA 필드만 추가하면 되며, SQL은 JPA가 처리해줌
성능 최적화
- 1차 캐시와 동일성 보장
- 트랜잭션을 지원하는 쓰기 지연
- 지연 로딩