Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 티스토리챌린지
- 쿠키
- BindingResult
- JPA
- 리눅스
- Git
- 커밋 되돌리기
- 컴파일 타임 상수
- spring
- intelij spring config
- 백준
- 기본키 전략
- JDBC
- API
- 알고리즘
- allocationSize
- application layer
- DTO
- 쉘 스크립트
- 프로그래머스
- m:n
- 파이썬
- 은행원알고리즘
- compgen
- @Autowired
- 편향된 지수
- 오블완
- @SubscribeMapping
- 런타임 상수
- 무한정 대기
Archives
- Today
- Total
둘셋 개발!
[JPA 기본편] Jpa 구동방식 본문
전체적으로 다음그림과 같이 Jpa가 동작한다
1. 설정 정보 조회
✔️Persistence라는 클래스가 persistence.xml에 있는 설정정보를 조회한다
다음은 persistence.xml 예시이다
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<properties>
<!-- 필수 속성 -->
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/jpashop2"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<!-- 옵션 -->
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
<property name="hibernate.jdbc.batch_size" value="10"/> <!--sql을 한번에 db에 넣음-->
<!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
</properties>
</persistence-unit>
</persistence>
➡️ 데이터베이스에 연결하기 위한 설정이 바로 여기에 있다
➡️ 특정 데이터베이스만의 고유한 기능을 jpa 에서는 방언이라고 하는데 방언을 여기서 지정해준다. 즉, jpa는 특정 데이터베이스에 종속적이지 않는다.
2. EntityManagerFactory 생성
✔️persistence.xml의 설정정보를 조회하고 이를 토대로 엔티티매니저 팩토리(emf 라고 줄여서 쓰겠다..)를 생성한다.
✔️emf는 딱 하나만 생성해서 애플리케이션 전체에서 공유한다
- persistence.xml 설정정보를 읽어서 jpa를 동작시키기 위한 기반 객체를 만들고 jpa 구현체에 따라서 데이터베이스 커넥션 풀도 생성하기 때문에 emf 생성비용이 크다. 그래서 딱 하나를 만들고 전체가 공유해야한다..!!
다음은 emf 생성 예시 코드이다
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
➡️ "hello"는 persistence.xml 설정정보에 있는 영속성 유닛이름이다
3. EntityManager 생성
✔️emf 에서 entitymanager을 생성한다
✔️엔티티매니저가 대부분의 jpa 기능을 제공하는데, 대표적으로 엔티티 crud를 할 수 있다
✔️엔티티 매니저는 데이터 커넥션을 유지하면서 데이터베이스와 통신한다.
그래서 쓰레드간에 공유하거나 재사용 하면 안된다
+ 트랜잭션 관리
우선 트랜잭션이란 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.
출처:https://mommoo.tistory.com/62[개발자로 홀로 서기]
✔️jpa를 사용하면 항상 트랜잭션 안에서 데이터를 변경해야 한다
다음은 트랜잭션을 사용하는 예시이다
EntityTransaction tx = em.getTransaction();
tx.begin();
//비지니스 로직 실행
tx.commit();
➡️ 트랜젝션을 시작하려면 엔티티매니저에서 트랜잭션 API를 받아와야 한다
(참고: 인프런 김영한 강사님 - 자바 ORM 표준 JPA 프로그래밍 - 기본편, 강의와 책)
'JPA' 카테고리의 다른 글
[JPA] 다대일에서 update쿼리가 잘못 나갈 수 있다..! (0) | 2023.09.22 |
---|---|
[JPA] Primary Key 자동 생성 전략 (0) | 2023.09.15 |
[API개발과 성능최적화-3] 컬렉션 조회 최적화 (0) | 2021.11.25 |
[API개발과 성능최적화-2] 주문 api 생성 시 성능 최적화 (1) | 2021.11.17 |
[API개발과 성능최적화-1] 회원 api 생성 시 주의점 (1) | 2021.11.13 |