Spring Boot Properties 설정 완벽 가이드
Spring Boot 애플리케이션의 설정은 주로 application.properties 또는 application.yml 파일을 통해 관리됩니다. 이 글에서는 다양한 설정 옵션과 활용 방법을 정리합니다.
서버 설정
포트 변경
server.port=80
server:
port: 80
기타 서버 설정
# 컨텍스트 경로 설정
server.servlet.context-path=/api
# 세션 타임아웃 (분)
server.servlet.session.timeout=30m
# 압축 활성화
server.compression.enabled=true
데이터베이스 설정
MySQL 데이터소스 설정
# Data source
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/MyDB?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=yourpassword
# JPA
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=update
DDL Auto 옵션
| 옵션 | 설명 |
|---|---|
none |
DDL 실행 안 함 (운영 권장) |
validate |
엔티티와 테이블 일치 여부만 검증 |
update |
변경된 스키마만 업데이트 |
create |
시작 시 테이블 생성 |
create-drop |
종료 시 테이블 삭제 |
커넥션 풀 설정
# HikariCP (Spring Boot 2.x 기본)
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=300000
spring.datasource.hikari.connection-timeout=30000
로깅 설정
기본 로깅 레벨 설정
logging.level.org.springframework=info
logging.level.org.hibernate=info
logging.level.org.hibernate.sql=info
logging.level.com.myapp=debug
Web 디버그 로그
Spring Web 관련 상세 로그를 보려면:
logging.level.org.springframework.web=DEBUG
로그 파일 설정
# 로그 파일 경로
logging.file.path=/var/log/myapp
# 또는 로그 파일 이름 직접 지정
logging.file.name=/var/log/myapp/application.log
# 로그 파일 최대 크기
logging.logback.rollingpolicy.max-file-size=10MB
# 로그 파일 보관 기간 (일)
logging.logback.rollingpolicy.max-history=30
Property 값 주입
@Value 어노테이션
@Value("${app.server.host}")
private String applicationHost;
Property 간 참조
설정 파일 내에서 다른 property 값을 참조할 수 있습니다:
propertyA=value
propertyB=${propertyA}/extra # 결과: value/extra
@ConfigurationProperties 활용
구조화된 설정을 타입 안전하게 관리할 수 있습니다.
설정 클래스 정의
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties("app")
class AppConfig {
lateinit var email: String
var projects: List<String> = ArrayList()
}
Properties 파일
app.email=admin@example.com
app.projects[0]=PROJECT1
app.projects[1]=PROJECT2
YAML 파일
app:
email: admin@example.com
projects:
- PROJECT1
- PROJECT2
- PROJECT3
사용 예시
@Autowired
private AppConfig appConfig;
public void printConfig() {
System.out.println(appConfig.getEmail());
appConfig.getProjects().forEach(System.out::println);
}
Profile별 설정
파일 분리
application.properties # 공통 설정
application-dev.properties # 개발 환경
application-prod.properties # 운영 환경
YAML에서 Profile 분리
# 공통 설정
spring:
application:
name: myapp
---
spring:
config:
activate:
on-profile: dev
datasource:
url: jdbc:mysql://localhost:3306/devdb
---
spring:
config:
activate:
on-profile: prod
datasource:
url: jdbc:mysql://prodserver:3306/proddb
Profile 활성화
# application.properties에서
spring.profiles.active=dev
# 또는 실행 시
java -jar myapp.jar --spring.profiles.active=prod
Java 실행 시 Profile 지정
-D 옵션은 -jar 앞에 위치해야 합니다:
java -Dspring.profiles.active=localhost -jar myapp-1.0.0.jar
Gradle에서 Profile 지정
IntelliJ에서 Run Configuration을 편집하여 active profile을 설정하거나, 빌드 시 지정할 수 있습니다:
./gradlew clean bootJar -b app/build.gradle -Pprofile=dev
Maven에서 Profile 지정
mvn clean package --activate-profiles development -Dmaven.test.skip=true
pom.xml Profile 설정:
<profiles>
<profile>
<id>localhost</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<env>localhost</env>
</properties>
</profile>
<profile>
<id>development</id>
<properties>
<env>development</env>
</properties>
</profile>
<profile>
<id>stage</id>
<properties>
<env>stage</env>
</properties>
</profile>
<profile>
<id>production</id>
<properties>
<env>production</env>
</properties>
</profile>
</profiles>
Profile 값 참조는 ${env}로 합니다:
<build>
<finalName>myapp</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/resources.${env}</directory>
</resource>
</resources>
</build>
Multiple Active Profiles
여러 프로파일을 동시에 활성화할 수 있습니다:
spring.profiles.active=slack,facebook
이를 활용하면 특정 서비스만 활성화할 수 있습니다:
@Component
@Profile("facebook")
public class FacebookBot extends Bot {
// Facebook 연동 기능
}
@Component
@Profile("slack")
public class SlackBot extends Bot {
// Slack 연동 기능
}
외부 설정 우선순위
Spring Boot는 다음 순서로 설정을 로드합니다 (아래로 갈수록 우선순위 높음):
- 기본값 (SpringApplication에서 설정)
@PropertySource어노테이션application.properties/application.yml- Profile별 설정 파일
- 명령줄 인수
- 환경 변수
- Java 시스템 속성 (
-D옵션)
유용한 설정 예시
개발 편의 설정
# 에러 상세 정보 표시
server.error.include-message=always
server.error.include-stacktrace=on_param
# JSON 이쁘게 출력
spring.jackson.serialization.indent-output=true
# SQL 파라미터 로깅
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
운영 환경 설정
# 에러 상세 정보 숨김
server.error.include-message=never
server.error.include-stacktrace=never
# Actuator 보안
management.endpoints.web.exposure.include=health,info
management.endpoint.health.show-details=when-authorized
결론
Spring Boot의 Properties 설정은 매우 유연하고 강력합니다. 환경에 맞는 설정을 Profile로 분리하고, @ConfigurationProperties를 활용하여 타입 안전하게 관리하세요. 설정 우선순위를 이해하면 더욱 효과적으로 설정을 관리할 수 있습니다.
Comments