개요
이 가이드 에서는 하이버네이트 ORM용 MongoDB 확장이 제공하는 Spring Boot 스타터를 구성하는 방법을 학습 수 있습니다. 스타터를 설치하고 이를 사용하는 애플리케이션 만드는 방법을 학습 보려면 Spring Boot 스타터 시작하기를 참조하세요.
스타터 활성화
스타터를 활성화하려면 다음 예시 와 같이 애플리케이션의 application.properties 파일 에서 spring.jpa.database-platform 속성 을 MongoDB 로 설정하다 .
spring.jpa.database-platform=MongoDB
스타터는 이 표준 Spring Boot 속성 사용하며 자체 전용 구성이 필요하지 않습니다. 속성 에 다른 값이 있거나 설정되지 않은 경우 스타터는 비활성 상태로 유지됩니다. 비활성 스타터는 애플리케이션 에 영향을 주지 않습니다.
연결 구성
스타터는 Spring Boot가 spring.mongodb.* 속성에서 생성하는 MongoClient 인스턴스 재사용합니다. 스타터는 자체 클라이언트 생성하지 않고 클라이언트의 라이프사이클을 관리 하지 않으므로 애플리케이션 은 JPA( Java Persistence API ) 지속성, 상태 확인, 지표 및 클라이언트 사용하는 기타 구성 요소를 위해 하나의 연결 풀 사용합니다.
스타터는 spring.mongodb.database 속성 에 설정하다 데이터베이스 이름을 사용합니다. 해당 속성 설정하다 하지 않으면 스타터는 spring.mongodb.uri 속성 에서 설정하다 연결 문자열 의 데이터베이스 이름을 사용합니다.
이 클라이언트 사용자 지정하려면 MongoClientSettingsBuilderCustomizer 빈을 선언합니다. 이 인터페이스는 Spring Boot가 클라이언트 생성하기 전에 MongoClientSettings.Builder 인스턴스 사용자 지정합니다.
JPA 속성 설정
스타터는 표준 spring.jpa.* 속성을 사용합니다. 다음 표에서는 일반적으로 사용되는 속성에 대해 설명합니다.
속성 | 설명 |
|---|---|
| 하이버네이트 ORM이 스타트업 시 수행하는 스키마 관리 조치 지정합니다. MongoDB 지원 지속성 단위의 기본값 은 |
| 최대 절전 모드 ORM이 생성하는 명령문을 기록할지 여부를 지정합니다. |
| 최대 절전 모드 ORM 구성 속성을 최대 절전 모드 ORM에 직접 전달합니다. |
| 웹 요청 기간 동안 지속성 컨텍스트를 열어 둘지 여부를 지정합니다. 이 속성 서블릿 웹 애플리케이션에서 기본값 으로 활성화되어 있습니다. |
| 스타터가 Spring Data JPA 리포지토리 스캔을 활성화할지 여부를 지정합니다. 이 속성 기본값 으로 활성화되어 있습니다. |
HibernatePropertiesCustomizer 및 EntityManagerFactoryBuilderCustomizer 빈을 선언하여 스타터가 빌드하는 구성을 수정할 수도 있습니다. HibernatePropertiesCustomizer 인터페이스는 스타터가 EntityManagerFactory에 전달하는 하이버네이트 ORM 속성을 사용자 지정하고, EntityManagerFactoryBuilderCustomizer 인터페이스는 이를 생성하는 빌더를 사용자 지정합니다.
엔티티 및 리포지토리 스캔
스타터는 @EntityScan 주석을 사용하여 등록하는 패키지의 엔터티를 스캔합니다. 패키지를 등록하지 않으면 스타터는 @SpringBootApplication 클래스의 패키지 와 해당 하위 패키지를 스캔합니다.
다음 예시 와 같이 메인 애플리케이션 클래스에서 @EntityScan 주석을 선언합니다.
public class MovieApplication { // ... }
스타터는 동일한 패키지 범위에서 Spring Data JPA 리포지토리를 활성화합니다. @EnableJpaRepositories 주석을 직접 선언하는 경우, 사용자의 선언이 스타터보다 우선합니다.
스타터는 SQL DataSource 없이 이러한 리포지토리를 활성화하고 SQL 연결 풀 가져오지 않습니다. 따라서 MongoDB 전용 애플리케이션 spring.datasource.url 속성 필요하지 않으며, Spring Boot는 해당 DataSourceAutoConfiguration 클래스를 사용하지 않습니다.
필드 이름 지정 구성
기본값 으로 엔터티 속성을 snake_case 열 이름에 매핑하는 SQL Spring Boot 애플리케이션 과 달리 스타터는 각 엔터티 속성 동일한 이름의 문서 필드 에 매핑합니다. 스타터를 통해 부트스트랩하는 엔터티는 Hibernate ORM을 통해 직접 부트스트랩하는 엔터티와 동일한 방식으로 지속됩니다.
다른 이름 지정 전략을 사용하려면 다음 예시 와 같이 애플리케이션의 application.properties 파일 에 전략을 명시적으로 설정하다 .
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategySnakeCaseImpl
경고
명명 전략 변경 전 문서 마이그레이션
명명 전략을 변경하면 전략 변경 후에 애플리케이션 작성하는 문서에만 영향을 미칩니다. MongoDB 기존 문서를 마이그레이션 하지 않으므로 컬렉션 여러 유형의 필드 이름을 사용하는 문서가 포함될 수 있습니다. 명명 전략을 변경하기 전에 기존 문서를 마이그레이션하세요.
시작 오류 문제 해결
스타터가 활성 상태이지만 지속성 단위를 구성할 수 없는 경우 스타트업 시 오류를 보고합니다. 다음 표에서는 이러한 오류에 대해 설명합니다.
오류 | 해상도 |
|---|---|
스타터가 사용할 수 있는 |
|
사용할 수 있는 데이터베이스 이름이 없습니다. |
|
전용 클라이언트 사용
다른 자격 증명 가진 클라이언트 와 같이 스타터만 사용하는 클라이언트 통해 연결하려면 클라이언트 와 데이터베이스 이름을 설정하는 MongoConfigurationContributor 빈을 선언합니다. 이 빈을 선언하면 스타터는 Spring 관리 클라이언트 대신 클라이언트 사용합니다.
둘 이상의 MongoConfigurationContributor 빈을 선언하는 경우, 스타터는 @Order 주석을 사용하여 지정한 순서대로 적용하며, 값을 설정하는 마지막 빈이 해당 값을 결정합니다.
제한 사항
스타터에는 다음과 같은 제한 사항이 있습니다.
@DataJpaTest주석은 지원되지 않습니다. MongoDB 에 대해 테스트하려면 전체 애플리케이션 컨텍스트를 로드하는@SpringBootTest주석을 사용합니다.스타터는 단일 지속성 단위를 구성합니다. 지속성 단위를 두 개 이상 사용하려면 추가 단위를 직접 구성합니다.