반응형
Notice
Recent Posts
Recent Comments
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 덩크로우
- stockx.com
- Dunk Low
- 주식
- 파이썬
- dunklow
- react
- GIT
- dunk high
- 제이쿼리
- 리눅스
- Java
- 코로나19
- draw
- 드로우
- 주식공부
- 오라클
- 자바스크립트
- Nike
- jQuery
- Linux
- 리액트
- sacai
- JavaScript
- 덩크 하이
- 발매예정
- oracle
- Python
- 나이키
- 덩크 로우
Archives
- Today
- Total
Life goes slowly...
[JPA] 초보자가 쉽게 이해하는 JPA 동작구조 본문
728x90
반응형

JPA가 코드 내부적으로 데이터를 관리와 데이터베이스와 소통 핵심 구성 요소를 동작구조에 대해서 설명하도록 하겠습니다.
JPA의 동작 구조를 이해할 때 가장 중요한 것은 **'영속성 컨텍스트(Persistence Context)'**라는 입니다.
1. JPA의 핵심 구성 요소
- EntityManagerFactory (공장): 딱 한 번만 만들어지는 커다란 공장입니다. 애플리케이션이 실행될 때 생성되어 DB 연결 정보 등을 준비합니다.
- EntityManager (일꾼): 고객의 요청(트랜잭션)이 올 때마다 공장에서 파견되는 일꾼입니다. DB에 저장하거나 수정하는 모든 일을 이 일꾼이 처리합니다.
- Persistence Context (영속성 컨텍스트): 일꾼이 들고 다니는 *임시 메모리 저장소(장바구니)*입니다. 자바 객체를 DB에 바로 던지기 전에 여기에 먼저 담아둡니다.
2. JPA의 동작 과정 (데이터 저장 예시)
우리가 자바 코드에서 em.persist(user)라고 명령을 내리면 다음과 같은 일이 일어납니다.
- 1차 캐시에 저장: 객체(User)가 DB로 바로 가는 게 아니라, 영속성 컨텍스트 내부의 **'1차 캐시'**에 먼저 저장됩니다.
- 쓰기 지연 SQL 저장소: JPA는 바로 INSERT 쿼리를 날리지 않고, 전송할 SQL 문을 차곡차곡 쌓아둡니다.
- 트랜잭션 커밋 (플러시): 작업이 다 끝나고 commit을 하는 순간, 쌓아뒀던 쿼리들을 DB에 한꺼번에 보냅니다. (이것을 쓰기 지연이라고 합니다.)
3. 왜 이런 복잡한 구조를 가질까요?
이런 '장바구니(영속성 컨텍스트)' 구조 덕분에 자바 개발자는 장점을 가지게 됩니다.
- 1차 캐시 (조회 성능 향상): 똑같은 데이터를 두 번 조회하면, DB에 가지 않고 메모리(1차 캐시)에서 바로 꺼내옵니다.
- 변경 감지 (Dirty Checking): 데이터를 수정할 때 별도의 update() 메서드를 호출할 필요가 없습니다. 자바 객체의 값만 바꾸고 커밋하면, JPA가 처음 상태와 비교해서 알아서 UPDATE 쿼리를 날려줍니다.
- 동일성 보장: 같은 ID로 조회한 객체는 자바 코드 상에서 항상 같은 객체(== 비교 시 true)임을 보장합니다.
728x90
반응형
'프로그래밍 > Java' 카테고리의 다른 글
| [JPA] JPA 핵심 개념 5가지!!! (0) | 2026.01.26 |
|---|---|
| [JPA] 초보자가 쉽게 이해하는 Spring Data JPA 설명 (3) | 2026.01.24 |
| [Java] 자바에서 객체 정렬하기 - Comparable, Comparator (0) | 2020.10.17 |
| [Java] 자바의 폴더 생성 함수 - mkdir(), mkdirs() (2) | 2020.10.16 |
| [Java] java.lang.NullPointerException 원인 그리고 해결방법 (0) | 2020.10.14 |
| [Java] 자바 로직 분리 - DAO / DTO / VO (0) | 2020.10.14 |
| [Java] 자바 Log 유틸 - Apache Log4j (0) | 2020.10.13 |
| [Java] 자바 - 현재 날짜,시간 조회하기 (0) | 2020.10.13 |
Comments