Files
spring-boot-examples/docs/32_jpa 설정.md
2025-04-08 19:56:24 +09:00

105 lines
4.6 KiB
Markdown

# JPA
## `application.yaml` 설정
```yaml
spring:
# 공통 JPA 설정
jpa:
hibernate:
ddl-auto: update # 테이블 자동 생성/업데이트 설정
show-sql: true # SQL 쿼리 로그 출력
properties:
hibernate:
format_sql: true # SQL 포맷팅 출력
# 개발 환경 (H2 데이터베이스)
---
spring:
config:
activate:
on-profile: dev
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
driver-class-name: org.h2.Driver
username: sa
password:
h2:
console:
enabled: true # H2 콘솔 활성화
path: /h2-console
# 프로덕션 환경 (MariaDB 데이터베이스)
---
spring:
config:
activate:
on-profile: prod
datasource:
url: jdbc:mariadb://localhost:3306/mydb
driver-class-name: org.mariadb.jdbc.Driver
username: root
password: mypassword
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MariaDBDialect # MariaDB 전용 dialect
```
### 실행 방법
- `dev` 프로파일: `spring.profiles.active=dev`로 실행 (H2 사용)
- `prod` 프로파일: `spring.profiles.active=prod`로 실행 (MariaDB 사용)
### 설정 옵션
#### 1. 공통 JPA 설정 옵션
| **옵션** | **설명** | **예시 값** |
|-----------------------------|-------------------------------------------------------------------------------------------|-----------------------|
| `spring.jpa.hibernate.ddl-auto` | Hibernate가 데이터베이스 스키마를 생성/업데이트하는 방식 (`create`, `update`, `validate`, `none`) | `update` |
| `spring.jpa.show-sql` | 실행되는 SQL 쿼리를 콘솔에 출력할지 여부 | `true` |
| `spring.jpa.properties.hibernate.format_sql` | 출력되는 SQL을 읽기 쉽게 포맷팅할지 여부 | `true` |
#### 2. H2 데이터베이스 설정 옵션
| **옵션** | **설명** | **예시 값** |
|-----------------------------|-------------------------------------------------------------------------------------------|-----------------------|
| `spring.datasource.url` | H2 데이터베이스 연결 URL (메모리 모드: `jdbc:h2:mem:testdb`) | `jdbc:h2:mem:testdb` |
| `spring.datasource.driver-class-name` | H2 JDBC 드라이버 클래스 | `org.h2.Driver` |
| `spring.datasource.username`| H2 데이터베이스 사용자 이름 (기본값: `sa`) | `sa` |
| `spring.datasource.password`| H2 데이터베이스 비밀번호 (기본값: 빈 문자열) | `` |
| `spring.h2.console.enabled` | H2 웹 콘솔 활성화 여부 (브라우저에서 데이터 확인 가능) | `true` |
| `spring.h2.console.path` | H2 콘솔의 접근 경로 | `/h2-console` |
- **참고**: `DB_CLOSE_DELAY=-1`은 메모리 DB가 애플리케이션 종료 시 닫히지 않도록 유지하며, `DB_CLOSE_ON_EXIT=FALSE`는 연결 종료 시 DB를 닫지 않도록 설정합니다.
#### 3. MariaDB 데이터베이스 설정 옵션
| **옵션** | **설명** | **예시 값** |
|-----------------------------|-------------------------------------------------------------------------------------------|-----------------------|
| `spring.datasource.url` | MariaDB 데이터베이스 연결 URL (예: `jdbc:mariadb://호스트:포트/데이터베이스명`) | `jdbc:mariadb://localhost:3306/mydb` |
| `spring.datasource.driver-class-name` | MariaDB JDBC 드라이버 클래스 | `org.mariadb.jdbc.Driver` |
| `spring.datasource.username`| MariaDB 데이터베이스 사용자 이름 | `root` |
| `spring.datasource.password`| MariaDB 데이터베이스 비밀번호 | `mypassword` |
| `spring.jpa.properties.hibernate.dialect` | Hibernate가 사용할 MariaDB 전용 dialect (SQL 최적화) | `org.hibernate.dialect.MariaDBDialect` |
### 추가 설명
1. **H2 설정**:
- H2는 인메모리 데이터베이스로, 테스트나 로컬 개발에 적합합니다.
- H2 콘솔(`/h2-console`)을 통해 브라우저에서 데이터베이스를 확인할 수 있습니다.
2. **MariaDB 설정**:
- MariaDB는 MySQL과 호환되는 오픈소스 RDBMS로, 프로덕션 환경에서 안정적으로 사용됩니다.
- `dialect` 설정은 Hibernate가 MariaDB에 최적화된 SQL을 생성하도록 돕습니다.
3. **의존성 추가**:
- `pom.xml`에 아래 의존성을 추가해야 합니다:
```kotlin
runtimeOnly("com.h2database:h2")
runtimeOnly("org.mariadb.jdbc:mariadb-java-client")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
```
4. **프로파일 사용**:
- `application.yaml`에서 `---`로 프로파일을 구분하며, 실행 시 `-Dspring.profiles.active=dev` 또는 `prod`를 지정합니다.