📋 JPA 기본 개념
JPA (Java Persistence API)는 JAVA 객체와 관계형 데이터베이스 사이의 매핑을 담당하는 ORM 표준 입니다.
JPA의 목적은 SQL을 완전히 숨기는 것이 아니라, 객체 중심으로 애플리케이션을 설계하면서도 관계형 DB와 안전하게 통신 할 수 있도록 돕는 것입니다.
즉, JPA는 쿼리 생성기가 아니라
👉 객체 상태를 DB 상태로 동기화하는 관리자에 가깝습니다.
1️⃣ JPA가 필요한 이유
Java 애플리케이션은 객체(Object) 중심으로 동작하지만,
데이터베이스는 테이블(Table) 중심으로 데이터를 저장합니다.
이 두 세계 사이에는 근본적인 차이가 존재합니다.
🔹 객체 vs 관계형 DB의 간극
- 객체: 참조(reference), 상속, 캡슐화
- DB: FK, JOIN, 정규화
이 차이를 직접 해결하려면:
- SQL 직접 작성
- 조회 결과를 객체로 변환
- 변경 감지 후 UPDATE 작성
- 연관 관계 수동 관리
👉 반복적이고 실수하기 쉬운 코드가 대량 발생합니다.
JPA는 이 문제를 ORM(Object–Relational Mapping) 으로 해결합니다.
2️⃣ 핵심 개념 요약
- JPA는 ORM 표준이다
- SQL을 없애지 않는다
- 객체의 상태 변화를 추적한다
- 트랜잭션 단위로 DB와 동기화한다
📌 키워드로 정리하면
Mapping + State Tracking + Synchronization
3️⃣ JPA vs JDBC
🔹 JDBC 방식
String sql = "UPDATE member SET name = ? WHERE id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "newName");
ps.setLong(2, id);
ps.executeUpdate();
- SQL 직접 작성
- 객체 상태 추적 ❌
- 변경 누락 위험 ⬆️
🔹 JPA 방식
Member member = em.find(Member.class, id);
member.setName("newName");
- SQL 작성 없음
- 객체 상태 변경만 표현
- 트랜잭션 종료 시 자동 UPDATE
👉 “무엇을 변경할지”만 말하고,
“어떻게 SQL을 만들지”는 JPA가 담당
4️⃣ JPA는 SQL을 숨기지 않는다
❌ JPA = SQL 안 써도 되는 기술
✅ JPA = SQL을 덜 직접적으로 다루는 기술
- 내부적으로는 반드시 SQL 생성
- 성능 튜닝 시 SQL 이해 필수
- 필요하면 JPQL / Native Query 사용
👉 SQL을 모르면 JPA도 잘 쓰지 못함
5️⃣ 내부 동작 관점 요약
JPA의 동작 흐름은 다음과 같습니다.
- 객체(Entity) 생성
- 영속성 컨텍스트에 등록
- 객체 상태 변화 추적
- 트랜잭션 커밋 시점에
- 변경 사항을 SQL로 변환 후 DB 반영
👉 JPA의 중심에는 “객체 상태 관리” 가 존재합니다.