개발/Spring

[자바 ORM 표준 JPA 프로그래밍] JPA란?

y_lime 2025. 1. 11. 16:07

JPA(Java Persistence API)는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.

즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.

JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.

 

자바 진영의 ORM 기술 표준이란?

  • 객체 관계 매핑
  • 객체는 객체대로 설계 & 관계형 데이터베이스는 관계형 데이터베이스대로 설계
  • ORM 프레임워크가 중간에서 매핑 (패더라임 불일치 해결해 줌)
  • 대중적인 언어에는 대부분 ORM 기술이 존재

JPA는 표준 명세

  • JPA는 인터페이스의 모음

 

JPA는 애플리케이션과 JDBC 사이에서 동작

출처 : 자바 ORM 표준 JPA 프로그래밍 - 기본편

 

JPA 동작 - 저장

출처 : 자바 ORM 표준 JPA 프로그래밍 - 기본편

JPA에서 멤버 회원 객체를 저장해 주라며 JPA에 던지기만 하면 JPA가 알아서 이 회원 객체를 분석하고 INSERT SQL을 다 만들어준다. 그리고 JDBC API를 사용해서 이를 DB Insert Query까지 다 만들어준다.

 

여기서 중요한 것은 바로.. 패러다임의 불일치를 해결해 준다는 것이다. (이는 뒤에서 설명할 예정)

 

JPA 동작 - 조회

조회도 마찬가지로 회원 아이디 10번 찾아주라고 하면 JPA가 select query를 다 만들어서 JDBC API를 사용하고 result set을 다 매핑하고 패러다임 불일치를 해결해 준다.

출처 : 자바 ORM 표준 JPA 프로그래밍 - 기본편

 

JPA를 왜 사용해야 하는가?

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성
  • 유지보수 
    • 기존: 필드 변경시 모든 SQL 수정
    • JPA: 필드만 추가하면 , SQL JPA 처리
  • 패러다임의 불일치 해결
    • JPA 상속
    • JPA와 연관관계
    • JPA 객체 그래프 탐색 
    • JPA 비교하기
  • 성능
    1. 1 캐시와 동일성(identity) 보장
    2. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
    3. 지연 로딩(Lazy Loading)
  • 데이터 접근 추상화와 벤더 독립성
  • 표준

패러다임 불일치 해결

1. JPA와 상속



2. JPA와 연관관계, 객체 그래프 탐색

3. JPA와  비교하기


성능

지연 로딩과 즉시 로딩

지연 로딩 : 객체가 실제 사용될 때 로딩

즉시 로딩 : JOIN SQL로 한 번에 연관된 객체까지 미리 조회

 

지연 로딩 상황) Member만 주로 사용하고, Team은 드물게 사용되는 경우 적합.

해결) Member만 조회하는 게 성능상 better  미리 Team을 당겨올 필요가 없음

 

즉시 로딩 상황) Team과 Member 객체가 있는데, 로직을 짜다 보니 Member을 조회할 때 항상 Team이 같이 사용되는 상황, Member와 Team을 항상 같이 조회해야 하는 경우 적합.

해결) Member을 조회할 때 Team을 한 번 쿼리로 같이 join으로 조회해서 가지고 오는 것 ⇒ 네트워크 통신 줄어듦 + DB 방문 줄어듦

 

 

 

위와 같이 상황마다 달라진다. 따라서 JPA는 지연 로딩과 즉시 로딩이라는 두 가지의 로딩을 모두 지원한다.

 

 


출처 : 자바 ORM 표준 JPA 프로그래밍 - 기본편