# 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`를 지정합니다.