
Spring Boot의 application.properties는 각 환경에 따른 설정 값을 쉽게 변경할 수 있도록 외부로 분리해서 관리하는 설정 파일입니다.
예를 들어, 개발 환경에서 사용하는 데이터베이스와 운영 환경에서 사용하는 데이터베이스를 서로 다르게 하고 싶다라고 가정해보겠습니다.
데이터베이스 설정을 분리해두지 않고, 코드에 적용하여 사용한다면 운영 환경이 변경될 때마다 코드를 바꾸고 재빌드를 해야 하는데, application.properties로 설정을 외부화 해둔다면 재빌드를 거치지 않고, 같은 jar 파일로도 운영 환경을 테스트 할 수가 있겠죠.
기본 구조는 src/main/resources/application.properties에 위치합니다.
# application.properties
// 덮어쓰고 싶은 properties 파일 명시
spring.profiles.active=prod
server.port=8080
spring.datasource.url=jdbc:h2:mem:defaultdb
logging.level.root=INFO
properties
# application-prod.properties (active=prod)
server.port=9090
logging.level.root=ERROR
Profile(서로 다른 환경)에 따라 설정을 분리하려면
application-dev, application-prod와 같이 원하는 이름으로 지정하면 됩니다.
스프링 부트는 application.properties를 먼저 적용하고, application-dev 파일을 키(key)단위로 덮어쓰기 합니다.
같은 키가 있으면 기존 값을 새 값으로 교체하고, 없는 키는 그대로 유지합니다.
위 설정을 보면 server.port는 8080에서 9090으로 바뀌고 logging level은 ERROR로 바뀌게 되겠죠.
숫자가 낮을수록 우선 순위가 높다는 뜻이빈다. 1번이 가장 마지막에 적용되어 "가장 강한"설정이라는 의미입니다.
1. 커맨드 라인 인수
ex) --server.port=8081
2. 환경 변수(SPRING_APPLICATION_JSON 등)
ex) export SPRING_APPLICATION_JSON='{"server.port":8082}'
3. 외부 /config 디렉터리의 프로파일 파일
ex) /opt/app/config/application-prod.properties
4. 외부 /config 디렉터리의 기본 파일
ex) /opt/app/config/application.properties
5. 클래스패스(src/main/resource)의 프로파일 파일
ex) classpath:/application.properteis
6. 클래스패스의 기본 파일
ex) classpath:/application.properties
데이터베이스 설정:
spring.datasource.url: 데이터베이스 연결 URL을 설정합니다.
spring.datasource.username: 데이터베이스 사용자 이름을 설정합니다.
spring.datasource.password: 데이터베이스 암호를 설정합니다.
spring.jpa.hibernate.ddl-auto: 엔티티 매핑 테이블을 자동으로 생성하는 방식 (create, update, create-drop, none 등)을 설정합니다.
spring.jpa.show-sql: JPA에서 생성되는 SQL 쿼리를 콘솔에 출력할지 여부를 설정합니다.
애플리케이션 설정:
server.port: 애플리케이션 서버 포트를 설정합니다.
server.servlet.context-path: 애플리케이션 컨텍스트 경로를 설정합니다.
spring.application.name: 애플리케이션 이름을 설정합니다.
spring.profiles.active: 활성화할 프로파일 (개발, 프로덕션 등)을 설정합니다.
로깅 설정:
logging.config: 로깅 설정 파일을 설정합니다.
logging.level.org.springframework.web: 스프링 웹 관련 로그 레벨을 설정합니다.
logging.pattern.console: 콘솔 로그 패턴을 설정합니다.
logging.path: 로깅 파일을 저장할 경로를 설정합니다.
이 외에도 다음과 같은 속성들이 자주 사용됩니다.
spring.mvc.view.prefix: 뷰 파일 경로를 설정합니다.
spring.mvc.view.suffix: 뷰 파일 확장자를 설정합니다.
spring.cache.redis.host: Redis 캐시 서버 호스트를 설정합니다.
spring.cache.redis.port: Redis 캐시 서버 포트를 설정합니다.
spring.mail.host: 메일 서버 호스트를 설정합니다.
spring.mail.port: 메일 서버 포트를 설정합니다.
spring.mail.username: 메일 발신자 사용자 이름을 설정합니다.
spring.mail.password: 메일 발신자 암호를 설정합니다.