관리 메뉴

Life goes slowly...

[JPA] 초보자가 쉽게 이해하는 JPA 동작구조 본문

프로그래밍/Java

[JPA] 초보자가 쉽게 이해하는 JPA 동작구조

빨강소 2026. 1. 25. 09:43
728x90
반응형

 

<출처:gemini>

 

JPA가 코드 내부적으로 데이터를 관리와 데이터베이스와 소통 핵심 구성 요소를 동작구조에 대해서 설명하도록 하겠습니다.

JPA의 동작 구조를 이해할 때 가장 중요한 것은 **'영속성 컨텍스트(Persistence Context)'**라는 입니다.


1. JPA의 핵심 구성 요소

  • EntityManagerFactory (공장): 딱 한 번만 만들어지는 커다란 공장입니다. 애플리케이션이 실행될 때 생성되어 DB 연결 정보 등을 준비합니다.
  • EntityManager (일꾼): 고객의 요청(트랜잭션)이 올 때마다 공장에서 파견되는 일꾼입니다. DB에 저장하거나 수정하는 모든 일을 이 일꾼이 처리합니다.
  • Persistence Context (영속성 컨텍스트): 일꾼이 들고 다니는 *임시 메모리 저장소(장바구니)*입니다. 자바 객체를 DB에 바로 던지기 전에 여기에 먼저 담아둡니다.

 

2. JPA의 동작 과정 (데이터 저장 예시)

우리가 자바 코드에서 em.persist(user)라고 명령을 내리면 다음과 같은 일이 일어납니다.

  1. 1차 캐시에 저장: 객체(User)가 DB로 바로 가는 게 아니라, 영속성 컨텍스트 내부의 **'1차 캐시'**에 먼저 저장됩니다.
  2. 쓰기 지연 SQL 저장소: JPA는 바로 INSERT 쿼리를 날리지 않고, 전송할 SQL 문을 차곡차곡 쌓아둡니다.
  3. 트랜잭션 커밋 (플러시): 작업이 다 끝나고 commit을 하는 순간, 쌓아뒀던 쿼리들을 DB에 한꺼번에 보냅니다. (이것을 쓰기 지연이라고 합니다.)

 

3. 왜 이런 복잡한 구조를 가질까요? 

이런 '장바구니(영속성 컨텍스트)' 구조 덕분에 자바 개발자는 장점을 가지게 됩니다.

  • 1차 캐시 (조회 성능 향상): 똑같은 데이터를 두 번 조회하면, DB에 가지 않고 메모리(1차 캐시)에서 바로 꺼내옵니다.
  • 변경 감지 (Dirty Checking): 데이터를 수정할 때 별도의 update() 메서드를 호출할 필요가 없습니다. 자바 객체의 값만 바꾸고 커밋하면, JPA가 처음 상태와 비교해서 알아서 UPDATE 쿼리를 날려줍니다.
  • 동일성 보장: 같은 ID로 조회한 객체는 자바 코드 상에서 항상 같은 객체(== 비교 시 true)임을 보장합니다.
728x90
반응형
Comments