■ JPA(Java Persistence API) 의 개념 및 정리
1. ORM(Object Relational Mapping) 이란?
ORM은 객체(Object)와 관계형 데이터베이스(Relational Database)를 매핑(Mapping) 해주는 기술
즉, 자바 클래스(객체)를 데이터베이스의 테이블과 연결시켜서 SQL을 직접 작성하지 않고도 DB와 상호작용할 수 있게 도와준다
- 예시
- 자바 객체: User { id, name, email }
- 데이터베이스 테이블: USER (id, name, email)
- ORM은 객체의 필드를 테이블 컬럼과 매핑해서 자동으로 SQL을 만들어 실행해줍니다.
ORM은 “개념”일 뿐, 실제로 동작하려면 구현체가 필요 → JPA 필요
2. JPA란 ?
JPA는 자바 진영의 ORM 표준 인터페이스
- 정식 명칭: Java Persistence API
- ORM을 자바에서 표준화한 인터페이스이기 때문에, JPA 자체가 동작하는 게 아니라 구현체가 필요
대표적인 JPA 구현체:
- Hibernate (가장 널리 쓰임)
- EclipseLink
- OpenJPA
3. 왜 JPA를 써야 할까?
① SQL 작성 부담 감소
JPA를 쓰면 엔티티(Entity) 객체를 저장하거나 수정하면 JPA가 알아서 SQL을 만들어 실행
// 전통적인 JDBC 방식
String sql = "INSERT INTO user (id, name, email) VALUES (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setLong(1, user.getId());
pstmt.setString(2, user.getName());
pstmt.setString(3, user.getEmail());
pstmt.executeUpdate();
// JPA 방식
entityManager.persist(user); // 끝
② 객체지향적인 코드 유지
SQL 중심 개발 → 객체지향적 코드와 괴리 발생
JPA → 자바 클래스 중심 개발 → 유지보수성과 생산성 ↑
③ 데이터베이스 독립성 확보
JPA는 데이터베이스 방언(Dialect)을 제공하기 때문에, 같은 코드로 MySQL, Oracle, PostgreSQL 등 다양한 DB를 지원
DB를 교체해도 코드 대부분을 수정할 필요가 없음
④ 캐시 및 성능 최적화
JPA는 1차 캐시, 지연 로딩(Lazy Loading), 쓰기 지연(Write-behind) 같은 다양한 최적화 기능을 제공
4. JPA의 주요 개념
① 엔티티(Entity)
- DB 테이블과 매핑되는 클래스
- @Entity 어노테이션 사용
┌──────────────┐ ┌───────────────┐
│ User (객체) │ │ USER (테이블) │
├──────────────┤ ├─────────── ───┤
│ id: Long │◀ ──▶│ id (PK) │
│ name: String │◀─ ─▶│ name (VARCHAR) │
│ email: String │◀──▶│ email (VARCHAR) │
└───────────────┘ └────────────────┘
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
private String email;
}
② 엔티티 매니저(EntityManager)
- JPA에서 DB 작업을 담당하는 핵심 객체
- 엔티티 저장, 수정, 삭제, 조회 기능 제공
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
User user = new User("홍길동", "hong@test.com");
em.persist(user); // 저장
em.getTransaction().commit();
③ 영속성 컨텍스트(Persistence Context)
- 엔티티를 관리하는 JPA의 내부 메모리
- 1차 캐시 역할 → 같은 트랜잭션 내에서 동일한 엔티티는 동일한 객체로 관리됨
- 변경 감지(Dirty Checking) → 엔티티 값만 수정해도 JPA가 알아서 UPDATE SQL 실행
④ JPQL(Java Persistence Query Language)
- SQL과 유사하지만, 테이블이 아닌 엔티티 객체를 대상으로 질의하는 언어
- DB 독립성 보장
List<User> users = em.createQuery("SELECT u FROM User u WHERE u.name = :name", User.class)
.setParameter("name", "홍길동")
.getResultList();
5. 요약
- ORM은 객체와 테이블을 매핑하는 개념
- JPA는 자바 진영의 ORM 표준
- Hibernate는 JPA 구현체
- JPA를 사용하면 SQL 작성 부담을 줄이고, 객체지향적으로 DB를 다룰 수 있으며, DB 독립성까지 확보 가능
- 단, 성능 문제와 러닝 커브를 이해하고 올바르게 써야 함
"JPA는 객체지향 프로그래밍과 데이터베이스 사이의 다리 역할을 하는 자바 ORM 표준"
'Write it > Spring Boot' 카테고리의 다른 글
Spring Boot) Junit test 연습 (0) | 2025.09.09 |
---|---|
Spring Boot) Oracle연동 JPA 이용 테이블 생성, 질문 등록 예제 (0) | 2025.09.08 |
Spring Boot) H2 이용 질문 테이블 만들기 (0) | 2025.09.08 |
Spring Boot에서 Mybatis 이용 간단한 예제 만들어보기 (0) | 2025.09.05 |
Spring Boot) 스프링 부트란? (0) | 2025.09.04 |