JPA 란

2024. 1. 15. 08:57

내가 JPA 강의를 보고 작성한 VELOG 시리즈

CSS 사용 출처

공부하게 된 계기

SpringBoot JPA 가 무엇인지, Hibernate 가 무엇인지 모르고 사용했었다.
Querydsl을 SpringBoot 환경에서 사이드 프로젝트를 하면서 내가 사용하고 있는 것에 대해 너무 모른다고
생각이 들어 인프런에서 자바 ORM 표준 JPA 프로그래밍 - 기본편 등 여러가지 강의와
해당 강사님이 집필 하신 자바 ORM 표준 JPA 프로그래밍 책을 구매해서 공부하였고,
강의를 보고 무지성으로 정리를 했지만 스스로 정리해나가며 이해하는게 좋을 거 같아서 지금 이것을 작성중이다.

 

JPA란

자바 진영에서의 ORM 표준 명세, 즉 자바 진영에서 사용하는 ORM 인터페이스들을 말한다.
자바에서 관계형 데이터 베이스의 데이터를 다룰 때 생기는 여러가지 문제점을 보안하며,
SQL 에 의존적인 개발이 아닌 객체 지향 스러운 개발이 가능하게 도와준다.

https://docs.oracle.com/javaee/6/tutorial/doc/bnbpz.html

Hibernate란

JPA (Java Persistence API) 의 구현체 중 하나
앞서 말했듯이, JPA 는 자바에서 표준으로 내놓은 ORM 기술의 인터페이스들을 말한다. 이 인터페이스들을 구현한 많은 구현체들이 있다.(EclipseLink, OpenJPA, Hibernate)
그 구현체들 중 가장 많이 사용되는 구현체가 Hibernate 이다.

 

Spring Data JPA

스프링에서 어플리케이션 개발을 쉽게 하기 위해 JPA 에 여러가지 기능을 포함한 프레임워크
Spring Data JPA 를 사용하면 다양한 툴을 제공받아 영속성 관리를 보다 쉽게 할 수 있다.

https://spring.io/projects/spring-data-jpa/

 

JPA 동작 구조 

JPA 에서 JDBC 를 통해 DB 조작을 진행한다.
영속성 컨텍스트라는 개념을 도입하여 데이터 베이스와 연결할 객체들을 관리한다.

 

영속성 컨텍스트 ( Persistence Context )

내가 그린 그림..

영속성 컨텍스트란 자바에서 데이터 베이스 테이블과 Mapping 할 객체 ( Entity ) 를 관리하는 환경이다.
영속성 컨텍스트의 1차 캐시, 프록시 객체 개념들을 적용하여 지연로딩, 변경 감지 기능등을 사용할 수 있다.
간단하게 알아보자면.. 

PersistenceUnit : JPA 설정정보 및 DB 커넥션 정보가 들어있는 파일 

EntityManagerFactory : 어플리케이션 로딩 시에 동작하며 PersistenceUnit 을 사용하여 EntityManger 인스턴스를 생성하는 객체 .

EntityManger : 영속성 컨텍스트를 조작하는 인스턴스로 Entity 의 생명주기를 관리하며 Transaction 과 동일한 생명 주기를 가지며 공유되지 않는다.

Flush : 영속성 컨텍스트의 1차 캐시에 엔티티가 조작이되면 생성 되는 쿼리를 DB 에 적용시키는 모듈이며, EntityManager 가 Commit 되면 자동으로 실행 된다.

 

JPA 를 사용해야하는 이유

MyBatis 과 같은 SQL Mapper 와는 달리 SQL Query 양이 줄어든다.
상속이나 그래프 탐색 처럼 객체 지향적으로 개발하는 것도 가능하며 연관관계 정의도 쉽다.
하지만 복잡한 쿼리를 위해서라면 Querydsl 이라던지 SQL Mapper 를 양립해서 사용해야할 수도 있다.
SQL 쿼리에 대해서 더욱 자세히 알아야 사용할 수 있는 기능인 것 같다. 

BELATED ARTICLES

more