1. application.yaml vs application.properties 비교
application.yaml과 application.properties는 모두 Spring Boot 애플리케이션에서 설정을 정의하는 데 사용되는 파일 형식이지만, 몇 가지 주요 차이점이 있습니다.
구조:
- application.yaml: YAML (YAML Ain't Markup Language) 형식을 사용하며, 계층 구조와 들여쓰기를 사용하여 설정을 구성합니다. 이는 읽기 쉽고 코드 작성하기 편리하다는 장점이 있습니다.
- application.properties: 키-값 쌍 형식을 사용하며,
=
기호로 키와 값을 구분하고 줄 바꿈으로 각 속성을 구분합니다. 이는 간단하고 친숙한 형식이지만, 계층 구조를 표현하는 데 어려움이 있습니다.
데이터 형식:
- application.yaml: 문자열, 숫자, 불리언, 배열, 객체 등 다양한 데이터 형식을 지원합니다.
- application.properties: 기본적으로 문자열만 지원하며, 다른 데이터 형식은 문자열로 변환해야 합니다.
사용:
- application.yaml: Spring Boot 2.x 버전부터 기본 설정 파일 형식으로 사용됩니다.
- application.properties: Spring Boot 1.x 버전에서 기본 설정 파일 형식으로 사용되었으며, 2.x 버전에서도 여전히 사용할 수 있습니다.
선택:
- 새로운 Spring Boot 프로젝트를 시작하는 경우 application.yaml 사용을 추천합니다.
- 기존 Spring Boot 1.x 프로젝트를 가지고 있거나 application.properties 형식에 더 익숙한 경우 계속 사용해도 문제 없습니다.
2. application.yaml 포맷 구조
application.yaml 파일은 다음과 같은 구조를 가지고 있습니다.
- 루트 수준: 설정 키-값 쌍 또는 하위 그룹을 포함할 수 있습니다.
- 하위 그룹: 들여쓰기를 사용하여 구성되며, 키-값 쌍 또는 다른 하위 그룹을 포함할 수 있습니다.
- 키-값 쌍:
키: 값
형식으로 구성되며, 키는 문자열이고 값은 다양한 데이터 형식이 될 수 있습니다. - 데이터 형식: 문자열, 숫자, 불리언, 배열, 객체 등을 지원합니다.
- 주석:
#
으로 시작하는 행은 주석으로 처리됩니다.
예시:
# 루트 수준 설정
debug: false
# 하위 그룹
logging:
level:
com.fc.springprojectboard: debug
org.springframework.web.servlet: debug
org.hibernate.type.descriptor.sql.BasicBinder: trace
# 키-값 쌍
spring:
datasource:
url: jdbc:mysql://localhost:3306/board
username: hyeseong
password: thisisTEST!@#
driver-class-name: com.mysql.cj.jdbc.Driver
# 하위 그룹 및 키-값 쌍
spring:
jpa:
defer-datasource-initialization: true
hibernate.ddl-auto: create
show-sql: true
properties:
hibernate.format_sql: true
hibernate.default_batch_fetch_size: 100
# 주석
# 이는 주석입니다.
3. application.yaml에 자주 사용하는 프로퍼티
application.yaml 파일에서 자주 사용하는 프로퍼티 몇 가지를 소개합니다.
- server.port: 애플리케이션이 실행되는 포트 번호를 설정합니다.
- spring.datasource.url: 데이터베이스 연결 URL을 설정합니다.
- spring.datasource.username: 데이터베이스 사용자 이름을 설정합니다.
- spring.datasource.password: 데이터베이스 사용자 비밀번호를 설정합니다.
- spring.jpa.hibernate.ddl-auto: Hibernate가 데이터베이스 스키마를 어떻게 처리할지 설정합니다 (예:
create
,update
,none
). - logging.level.:** 특정 패키지 또는 클래스에 대한 로깅 레벨을 설정합니다 (예:
debug
,info
,warn
,error
).
4. 제공된 application.yaml 파일 설명
1. 디버깅 설정:
debug: false
: 전체 애플리케이션에 대한 디버그 로깅을 비활성화합니다.
2. 액추에이터 엔드포인트 노출:
management.endpoints.web.exposure.include: "*"
: 모든 액추에이터 엔드포인트를 HTTP를 통해 노출합니다. 주의: 프로덕션 환경에서는 보안 위험이 될 수 있으므로 특정 엔드포인트만 노출하도록 설정하는 것이 좋습니다.
3. 로깅 설정:
logging.level
: 애플리케이션의 여러 패키지에 대한 로깅 레벨을 설정합니다.com.fc.springprojectboard: debug
:com.fc.springprojectboard
패키지의 로깅 레벨을debug
로 설정합니다.org.springframework.web.servlet: debug
:org.springframework.web.servlet
패키지의 로깅 레벨을debug
로 설정합니다.org.hibernate.type.descriptor.sql.BasicBinder: trace
:org.hibernate.type.descriptor.sql.BasicBinder
클래스의 로깅 레벨을trace
로 설정합니다.- 주의:
trace
레벨은 매우 상세한 로깅 정보를 출력하므로 디버깅에만 사용하고, 프로덕션 환경에서는 설정하지 않는 것이 좋습니다.
- 주의:
4. 데이터베이스 연결 설정:
spring.datasource
: 데이터베이스 연결 정보를 설정합니다.url: jdbc:mysql://localhost:3306/board
: MySQL 데이터베이스에 대한 연결 URL을 설정합니다.localhost
는 데이터베이스가 실행되는 서버를 의미하며,3306
은 기본 MySQL 포트 번호입니다.board
는 사용할 데이터베이스 이름입니다.username: hyeseong
: 데이터베이스 사용자 이름을 설정합니다.password: thisisTEST!@#
: 데이터베이스 사용자 비밀번호를 설정합니다.- 주의: 비밀번호를 직접 입력하는 것은 보안 위험이 될 수 있으므로 환경 변수를 사용하는 것이 좋습니다.
driver-class-name: com.mysql.cj.jdbc.Driver
: MySQL 연결에 사용할 JDBC 드라이버 클래스 이름을 설정합니다.
5. JPA 설정:
spring.jpa
: JPA(Java Persistence API) 설정을 정의합니다.defer-datasource-initialization: true
: 실제 JPA 엔티티 관리자가 사용될 때까지 데이터 소스 초기화를 지연합니다. 이는 애플리케이션 시작 시간을 개선하는 데 도움이 될 수 있습니다.hibernate.ddl-auto: create
: Hibernate가 데이터베이스 스키마를 어떻게 처리할지 설정합니다.create
는 테이블이 없으면 생성하고,update
는 필요한 경우 테이블을 업데이트하며,none
은 테이블을 변경하지 않습니다.show-sql: true
: 생성된 SQL 문을 콘솔에 출력합니다. 이는 디버깅에 유용할 수 있습니다.properties
: 추가적인 Hibernate 속성을 설정합니다.hibernate.format_sql: true
: 출력되는 SQL을 가독성을 위해 형식화합니다.hibernate.default_batch_fetch_size: 100
: 엔티티 일괄 fetch 크기의 기본값을 설정합니다. 이는 대용량 데이터 세트에 대한 성능을 향상시킬 수 있습니다.
6. H2 콘솔 설정
spring.h2.console.enabled: true
: H2 콘솔을 활성화합니다. H2 콘솔은 인 메모리 데이터베이스에 대한 웹 기반 접근을 제공합니다.
7. 데이터베이스 스키마 초기화 모드 설정
spring.sql.init.mode: always
: Spring Boot가 시작될 때마다 데이터베이스 스키마를 초기화합니다. 주의: Spring Boot 3에서는spring.jpa.hibernate.ddl-auto
속성을 사용하여 스키마 초기화를 관리해야 합니다.spring.sql.init.mode
는 더 이상 사용되지 않으며, 설정해도 작동하지 않습니다.
Spring Boot 3에서 스키마 초기화 관리:
Spring Boot 3에서는 spring.jpa.hibernate.ddl-auto
속성을 사용하여 스키마 초기화 방식을 설정해야 합니다. 가능한 값은 다음과 같습니다.
create
: 테이블이 없으면 생성하고, 기존 테이블은 변경하지 않습니다.update
: 필요한 경우 테이블을 업데이트하고, 새로운 테이블은 생성하지 않습니다.validate
: 테이블 구조가 정의된 스키마와 일치하는지 확인하고, 변경하지 않습니다.none
: 스키마를 변경하지 않습니다.
주의 사항:
always
모드는 데이터 손실 위험이 있으므로 프로덕션 환경에서는 사용하지 않는 것이 좋습니다.- 스키마 변경을 자주 수행하는 경우
create-drop
모드를 사용할 수 있습니다. 이 모드는 시작 시 모든 테이블을 삭제하고 새로 생성합니다. - 테이블 구조 변경이 거의 없는 경우
none
모드를 사용하는 것이 좋습니다.
추가 정보:
- Spring Boot 3 공식 문서: https://docs.spring.io/spring-boot/index.html
- Spring Boot 3에서 스키마 초기화: https://docs.spring.io/spring-boot/docs/2.1.x/reference/html/howto-database-initialization.html
주의: 위 정보는 일반적인 참고용이며, 실제 애플리케이션에 적용하기 전에 테스트와 조정이 필요할 수 있습니다.
'프레임워크 > 자바 스프링' 카테고리의 다른 글
콘서트 예매 서비스에서 발생할 수 있는 동시성 이슈와 처리 (0) | 2024.07.20 |
---|---|
JPA 테스트 코드 작성시 UPDATE Query 생성이 안되네? (0) | 2024.05.28 |
JPA 연결 테스트 코드 (0) | 2024.05.28 |
로깅 출력 어느 것으로?(feat.Interpolation vs Concatenation) (0) | 2024.04.22 |
findById vs getReferenceById 차이 (0) | 2024.04.22 |