Home [Spring] JPA
Post
Cancel

[Spring] JPA

JPA

๐Ÿ”—JPA(Java Persistence API/Jakarta Persistence API)

  • Java ์ง„์˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ORM(Object-Relational Mapping) ๊ธฐ์ˆ ์˜ ํ‘œ์ค€ ์‚ฌ์–‘(๋˜๋Š” ๋ช…์„ธ, Specification)
  • Java์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์–‘์ด ์ •์˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— JPA๋ผ๋Š” ํ‘œ์ค€ ์‚ฌ์–‘์„ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋Š” ๋”ฐ๋กœ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ๊ตฌํ˜„์ฒด : ๐Ÿ”—Hibernate ORM, EclipseLink, DataNucleus ๋“ฑ
    • Hibernate ORM์€ JPA์—์„œ ์ •์˜ํ•ด๋‘” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด
    • JPA์—์„œ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ ์ด์™ธ์— Hibernate ์ž์ฒด์ ์œผ๋กœ ์‚ฌ์šฉ API ์—ญ์‹œ ์ง€์›

๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต JPA ์œ„์น˜

img

  • JPA๋Š” ๋ฐ์ดํ„ฐ ์—‘์„ธ์Šค ๊ณ„์ธต์˜ ์ƒ๋‹จ์— ์œ„์น˜
  • ๋ฐ์ดํ„ฐ ์ €์žฅ, ์กฐํšŒ ๋“ฑ์˜ ์ž‘์—…์€ JPA๋ฅผ ๊ฑฐ์ณ Hibernate ORM์„ ํ†ตํ•ด ์ด๋ค„์ง
  • Hibernate ORM์€ ๋‚ด๋ถ€์ ์œผ๋กœ JDBC API๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผ

Persistence

JPA ์˜ P (Persistence)

  • Persistence : ์˜์†์„ฑ, ์ง€์†์„ฑ
    • ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ธˆ๋ฐฉ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ์˜ค๋ž˜ ์ง€์†๋˜๊ฒŒ ํ•œ๋‹ค

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ(Persistence Context)

img

  • ORM : ๊ฐ์ฒด(Object)์™€ DB ํ…Œ์ด๋ธ”์˜ ๋งคํ•‘์„ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๊ฐ์ฒด ์•ˆ์— ํฌํ•จ๋œ ์ •๋ณด๋ฅผ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๋Š” ๊ธฐ์ˆ 
  • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ : ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ์ •๋ณด
    • ์—”ํ‹ฐํ‹ฐ ์ •๋ณด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์ˆ˜์ •, ์กฐํšŒ, ์‚ญ์ œ์— ์‚ฌ์šฉ
  • 1์ฐจ ์บ์‹œ : JPA์—์„œ ์—”ํ‹ฐํ‹ฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ
  • ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ : DB์— ๋ณด๋‚ด์ง€ ์•Š์€ Query๋ฅผ ์ €์žฅํ•œ ๊ณณ

JPA API

build.gradle ์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

1
2
3
4
dependencies {
      implementation 'org.springframework.boot:spring-boot-starter-data-jpa' 
      ...
}

JPA ์„ค์ •(application.yml)

๐Ÿ”—ddl-auto : ์—”ํ‹ฐํ‹ฐ ํ…Œ์ด๋ธ” ์ž๋™ ์ƒ์„ฑ

1
2
3
4
5
6
7
8
9
10
11
spring:
h2:
console:
  enabled: true
  path: /h2     
datasource:
url: jdbc:h2:mem:test
jpa:
hibernate:
  ddl-auto: create  # (1) ์Šคํ‚ค๋งˆ ์ž๋™ ์ƒ์„ฑ
show-sql: true      # (2) SQL ์ฟผ๋ฆฌ ์ถœ๋ ฅ

์ƒ˜ํ”Œ ์ฝ”๋“œ ์‹คํ–‰ ์œ„ํ•œ Config ์˜ˆ์‹œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Configuration
public class JpaBasicConfig {
    private EntityManager em;
    private EntityTransaction tx;
    
    @Bean
    public CommandLineRunner testJpaBasicRunner(EntityManagerFactory emFactory) {
        this.em = emFactory.createEntityManager();
        this.tx = em.getTransaction();
        
        return args -> {
            tx.begin();
            Member member = new Member("hgd@gmail.com");
            
            em.persist(member);
            
            tx.commit();
            
            Member resultMember = em.find(Member.class, 1L);
            
            System.out.println("Id: " + resultMember.getMemberId() +
                          ", email: " + resultMember.getMemberEmail());
    }
}

JPA API Methods

Method์„ค๋ช…
emEntityManager. EntityManagerFactory์—์„œ createEntityManager ๋ฉ”์„œ๋“œ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ๋‹ค
txEntityTransaction. EntityManager์—์„œ getTransaction ๋ฉ”์„œ๋“œ ํ†ต์ƒˆ ๊ฐ€์ ธ์˜จ๋‹ค
tx.begin()Transaction ์‹คํ–‰ ์œ„ํ•œ ๋ฉ”์„œ๋“œ
em.persist()์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์—”ํ‹ฐํ‹ฐ ์ €์žฅ
tx.commit()๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ๊ฐ์ฒด๋ฅผ DB์— ์ ์šฉ
em.flush()tx.commit() ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ JPA ๋‚ด๋ถ€์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์–ด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๋ณ€๊ฒฝ๋‚ด์šฉ์„ DB์— ๋ฐ˜์˜
em.find(.class, )์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๋ฐ์ดํ„ฐ ์กฐํšŒ
This post is licensed under CC BY 4.0 by the author.

[Spring] JDBC

[Java-Effective] JVM