๐ ์์์ฑ(Persistence)
๋ฐ์ดํฐ๋ค์ด ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋์ด๋ ์ฌ๋ผ์ง์ง ์๊ณ , ์ด๋ค ๊ณณ์ ์ ์ฅ๋๋ ๊ฐ๋
๐JDBC (Java Database Connectivity)
Java์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ๋ฐ ์ ๋ฐ์ดํธํ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ Java์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์๋ฐ API
โ ORM์ JDBC ํ๋ก๊ทธ๋๋ฐ์ ๋ณต์กํจ์ด๋ ๋ฒ๊ฑฐ๋ฌ์ ์์ด ๊ฐ๋จํ ์์ ๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋๋๋ ์์คํ ์ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ๋ Persistance Framework
๐ ORM
- ๊ฐ์ฒด์ DB์ ํ ์ด๋ธ์ ์๋์ผ๋ก ์ฐ๊ฒฐ(Mapping) ์์ผ RDB ํ ์ด๋ธ์ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ํด์ฃผ๋ ๊ธฐ์
- ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฒด๋ฅผ RDB ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ํ ํด์ฃผ๋ ๊ฐ๋
- ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ , ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ์ ์ฌ์ฉ
- ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๊ด๊ณํ ๋ชจ๋ธ ๊ฐ์๋ ๋ถ์ผ์น๊ฐ ์กด์ฌํ๋๋ฐ, ORM์ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก SQL์ ์๋์ผ๋ก ์์ฑํ์ฌ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐ
Java์์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ORM
| ์ฅ์ | ๋จ์ |
|---|---|
| ์ง๊ด์ ์ด๊ณ ๊ฐ๋ ์ฑ ์ข์ ์ฝ๋ | ์๋ชป ๊ตฌํ๋ ์ฝ๋๋ก ์ธํ ์๋ ์ ํ |
| ๊ฐ์ฒด ์งํฅ์ ์ ๊ทผ์ผ๋ก ์ธํ ์์ฐ์ฑ ์ฆ๊ฐ | ๋ณต์กํ Query๋ฌธ ์ฒ๋ฆฌ ๋ถ๊ฐ โ QueryDSL ์ฌ์ฉ |
| ์ฌ์ฌ์ฉ ๋ฐ ์ ์ง๋ณด์์ ์ฉ์ด์ฑ ์ฆ๊ฐ | |
| DBMS์ ๋ํ ์ข ์์ฑ ๊ฐ์ |
๐JPA์ ๋ฑ์ฅ๋ฐฐ๊ฒฝ
- ๊ธฐ์กด JDBC API๋ ์ฟผ๋ฆฌ๋ฌธ์ ๊ฐ๋ฐ์๋ค์ด ์ง์ ์์ฑํด์ผํ๋ ์ง๋ฃจํจ์ด ์กด์ฌ
โ SQL ์ค์ฌ์ ์ธ ๊ฐ๋ฐ๋ก ์ธํด ๊ฐ์ฒด์ ํ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด๋นํ๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฌธ์ ์ฐพ์ ๊ฐ๋ฐ์๊ฐ ์์ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ฌ์์ด ์กด์ฌ
- ๊ฐ์ฒด์ ๊ด๊ณํ DB์ ํจ๋ฌ๋ค์ ๋ถ์ผ์น
SQL ์งํฅ์ ์ธ ๊ฐ๋ฐ๋ก ์ธํ ๋ฌธ์ ์ ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ฑ์ฅ
โ ๊ฐ์ฒด์ ๊ด๊ณํ DB์ ํจ๋ฌ๋ค์ ์ฐจ์ด๋ก ์ธํด ๊ฐ์ฒด์งํฅ์ ํ๋ก๊ทธ๋๋ฐ์ ํ์ง๋ชปํ๊ณ , DB์ ์ข ์์ ์ธ ๊ฐ๋ฐ์ ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ JPA

JPA
- JPA๋ ์๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ ์ํ ์ธํฐํ์ด์ค
- ์ธํฐํ์ด์ค โ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ๋์ง๋ฅผ ์ ์ํ๋ ํ ๋ฐฉ๋ฒ
- ๋จ์ํ ๋ช ์ธ์ด๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ด ์๋ค
package javax.persistence;
import ...
public interface EntityManager {
public void persist(Object entity);
public <T> T merge(T entity);
public void remove(Object entity);
public <T> T find(Class<T> entityClass, Object primaryKey);
// More interface methods...
}
Hibernate
- JPA์ ๊ตฌํ์ฒด
javax.persistence.EntityManager์ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ๊ตฌํํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ

์ ์ฌ์ง์ JPA์ Hibernate์ ์์ ๋ฐ ๊ตฌํ๊ด๊ณ์ด๋ค.
Spring Data JPA
- JPA๋ฅผ ์ฐ๊ธฐ ํธํ๊ฒ ๋ง๋ค์ด๋์ ๋ชจ๋
- Spring์์ ์ ๊ณตํ๋ ๋ชจ๋ ์ค ํ๋๋ก, ๊ฐ๋ฐ์๊ฐ JPA๋ฅผ ๋ ์ฝ๊ณ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค๋ค.
- JPA๋ฅผ ํ ๋จ๊ณ ์ถ์ํ ์ํจ
Repository์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ์ด๋ฃจ์ด์ง- ์ ํด์ง ๊ท์น์ ๋ฐ๋ผ ๋ฉ์๋๋ฅผ ์ ๋ ฅํ๋ฉด, Spring์ด ์์์ ํด๋น ๋ฉ์๋ ์ด๋ฆ์ ์ ํฉํ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ๋ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค์ด Bean์ผ๋ก ๋ฑ๋กํด์ค๋ค.
- Spring Data JPA์ Repository์ ๊ตฌํ์์ JPA๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.

| ์์ฑ-1 | ์์ฑ-2 | ์ค๋ช |
|---|---|---|
| database | JPA๊ฐ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ํ๋ ์์ฑ | |
| open-in-view | 'Open EntityManager in View' ํจํด ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ์ง์ ํ๋ ์์ฑ | |
| mapping-resources | JPAย ๋งคํ ํ์ผ์ ์์น๋ฅผ ์ง์ ํ๋ ์์ฑ | |
| generate-ddl | DDL ์์ฑ์ ํ์ฑํํ๋ย ์์ฑ | |
| defer-datasource-initialization | ๋ฐ์ดํฐ์์ค ์ด๊ธฐํ๋ฅผย ์ง์ฐ์ํฌ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํ๋ ์์ฑ | |
| database-platform | ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ซํผ์ย ์ง์ ํ๋ ์์ฑ | |
| show-sql | SQL ์ฟผ๋ฆฌ๋ฅผ ๋ก๊ทธ๋ก ์ถ๋ ฅํ ์งย ์ฌ๋ถ๋ฅผ ์ง์ ํ๋ ์์ฑ | |
| hibernate | ํ์ด๋ฒ๋ค์ดํธ ๊ด๋ จย ์ค์ ์ ์ํ ์์ฑ | |
| ddl-auto | DDL ์๋ ์์ฑ์ ๋ต์ย ์ค์ ํ๋ ์์ฑ | |
| use-new-id-generator-mappings | ์๋ก์ด ID ์์ฑ์ ๋ต์ ์ฌ์ฉํ ์งย ๊ฒฐ์ ํ๋ ์์ฑ | |
| naming.physical-strategy | ๋ฌผ๋ฆฌ์ ๋ค์ด๋ฐ ์ ๋ต์ ์ค์ ํ๋ย ์์ฑ | |
| naming.implicit-strategy | ์์์ ๋ค์ด๋ฐ ์ ๋ต์ ์ค์ ํ๋ ์์ฑ | |
| properties | hibernate.default_schema | ๊ธฐ๋ณธ ์คํค๋ง๋ฅผ ์ค์ ํ๋ย ์์ฑ |
| hibernate.show_sql | SQL ์ฟผ๋ฆฌ๋ฅผ ์ฝ์์ ์ถ๋ ฅํ ์งย ๊ฒฐ์ ํ๋ ์์ฑ | |
| hibernate.use_sql_comments | SQL ์ฃผ์์ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ๋ย ์์ฑ | |
| hibernate.format_sql | SQL ๋ฌธ์ ํฌ๋งทํ ํ ์ง ๊ฒฐ์ ํ๋ย ์์ฑ | |
| hibernate.dialect | ์ฌ์ฉํ SQL ๋ฐฉ์ธ์ ์ค์ ํ๋ย ์์ฑ |
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://localhost:5432/multiflexjpa
username: localmaster
password: 1234
jpa:
database: postgresql
open-in-view: false
hibernate:
ddl-auto: create # or update, create-drop, validate
properties:
hibernate:
show_sql: true
format_sql: true
use_sql_comments: true
| create | ์ธ์ ํฉํ ๋ฆฌ๊ฐ ์์๋ ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋กญ์ ์คํํ ํ ์๋ก ์์ฑํฉ๋๋ค. |
|---|---|
| update | ์ธ์ ํฉํ ๋ฆฌ๊ฐ ์์๋ ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. |
| create-drop | ์ธ์ ํฉํ ๋ฆฌ๊ฐ ์์๋ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋๋กญํ ํ ์๋ก ์์ฑํ๊ณ , ์ธ์ ํฉํ ๋ฆฌ๊ฐ ์ข ๋ฃ๋ ๋ ๋๋กญํฉ๋๋ค. |
| validate | ์ธ์ ํฉํ ๋ฆฌ๊ฐ ์์๋ ๋ ์ํฐํฐ์ ํ ์ด๋ธ์ด ๋งคํ๋์ด ์๋์ง ๊ฒ์ฆํฉ๋๋ค. |
| none | ์๋ฌด ์์ ๋ ์คํํ์ง ์์ต๋๋ค. |
์ถ์ฒ
https://hoehen-flug.tistory.com/47
https://dbjh.tistory.com/77
https://adjh54.tistory.com/422