JPA๋ž€?

๊ฐœ๋… ์ •๋ฆฌ

JPA, Hibernate, Spring Data JPA์˜ ์ „๋ฐ˜์ ์ธ ๊ทธ๋ฆผ

H2 Database

H2๋Š” ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ RDBMS์ด๋‹ค. Browser console ์ง€์›, ์ €์šฉ๋Ÿ‰(2MB), JDBC API ์ง€์› ๋“ฑ ๋‹ค์–‘ํ•œ ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ตœ์†Œํ•œ์˜ ๋ฆฌ์†Œ์Šค๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋Ÿ‰ DB๋กœ์„œ ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์•Œ๋งž์€ DB์ด๋‹ค.

JPA

JPA(Java Persistence API)๋Š” ํ˜„์žฌ ORM(Object Relational Mapping)์˜ ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ, ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ์ด๋‹ค. ์ฆ‰, ORM์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ชจ์•„๋‘” ๊ฒƒ์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ORM์— ๋Œ€ํ•œ ์ž๋ฐ” API ๊ทœ๊ฒฉ์ด๋ฉฐ Hibernate, OpenJPA ๋“ฑ์ด JPA๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด์ด๋‹ค.

Hibernate

JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ JPA๋ฅผ ๊ตฌํ˜„ํ•œ ORM ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. Hibernate๋Š” JPA ๋ช…์„ธ์˜ ๊ตฌํ˜„์ฒด๋กœ, javax.persistence.EntityManager ์™€ ๊ฐ™์€ JPA์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

Spring Data JPA

Spring Data JPA๋Š” JPA๋ฅผ ์“ฐ๊ธฐ ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋†“์€ ๋ชจ๋“ˆ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ JPA๋ฅผ ๋” ์‰ฝ๊ณ  ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ์ด๋Š” JPA๋ฅผ ํ•œ๋‹จ๊ณ„ ์ถ”์ƒํ™” ์‹œํ‚จ Repository๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ ์ด๋ฃจ์–ด์ง„๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ Repository ์ธํ„ฐํŽ˜์ด์Šค์— ์ •ํ•ด์ง„ ๊ทœ์น™๋Œ€๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, Spring์ด ์•Œ์•„์„œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์— ์ ํ•ฉํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด Bean์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค.

Spring Boot ์„ค์ •

pom.xml

<!-- h2 database -->
<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <scope>runtime</scope>
</dependency>

<!-- jpa  -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

application.yml

spring:
  datasource:
    driverClassName: org.h2.Driver
    url: jdbc:h2:mem:testdb                # testdb ์Šคํ‚ค๋งˆ์— mem์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋กœ ๋™์ž‘
    username: sa
    password:
    sql-script-encoding: utf-8

  h2:
    console:
      enabled: true                            # h2 ์ฝ˜์†” ์‚ฌ์šฉ
      path: /h2                                    # localhost:port/h2 ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
      settings:
        trace: false                        # Print additional trace information 
        web-allow-others: true    # ๋ธŒ๋ผ์šฐ์ €๋กœ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ

  jpa:
    show-sql: true          # sql ์ฟผ๋ฆฌ ์ฝ˜์†” ์ถœ๋ ฅ
    properties:
      hibernate:
        format_sql: true     # sql ๋ณด๊ธฐ์ข‹๊ฒŒ ์ถœ๋ ฅ 
    generate-ddl: false       # @Entity ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ์ค€์œผ๋กœ DDL ์ž‘์—… ๋ฐฉ์ง€
    hibernate:
      ddl-auto: validate      # ๋ณ€๊ฒฝ๋œ ์Šคํ‚ค๋งˆ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ h2 database์— jpa๋ฅผ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋‹ค ๋˜์—ˆ๋‹ค.

์ฐธ์กฐ

Last updated

Was this helpful?