대부분의 Spring Boot 프로젝트는 개발(dev), 운영(prod), 테스트(test) 등 환경에 따라 DB 접속 정보, API 키, 로깅 레벨, 보안 설정 등이 달라집니다. 이러한 설정을 하나의 코드베이스 안에서 깔끔하게 분리하고 유지하려면 Spring Profile 기능을 반드시 이해하고 있어야 합니다.
Spring Profile의 개념과 설정 방법, 실무에서의 활용 팁까지 정리해보겠습니다.
1. Spring Profile이란?
Spring Profile은 빈(Bean) 등록이나 설정 파일 로딩을 조건부로 수행할 수 있도록 도와주는 기능입니다. 즉, dev
, test
, prod
같은 프로파일을 정의하고, 실행 시점에 어떤 프로파일을 활성화할지 지정하면 그에 맞는 설정만 적용되도록 구성할 수 있습니다.
이 기능을 사용하면 코드 수정 없이, 설정만으로도 다양한 환경을 유연하게 대응할 수 있습니다.
2. application.properties vs application-{profile}.yml
Spring Boot는 기본적으로 application.properties
또는 application.yml
파일을 통해 설정을 로딩합니다. 여기에 프로파일을 붙이면 환경별로 구분된 설정을 따로 관리할 수 있습니다.
# 기본 설정
application.yml
# 개발 환경 설정
application-dev.yml
# 운영 환경 설정
application-prod.yml
실행 시 --spring.profiles.active=dev
로 지정하면, application.yml
+ application-dev.yml
이 합쳐져 로딩됩니다.
3. profile 설정 방법
3-1. VM 옵션으로 설정 (가장 일반적)
-Dspring.profiles.active=dev
3-2. application.yml 내부에서 설정
spring:
profiles:
active: dev
단, 이 방법은 jar 배포 이후 바꾸기 어렵기 때문에 운영 환경에서는 외부 설정 파일 또는 시스템 환경변수로 설정하는 걸 권장합니다.
3-3. 환경변수로 설정 (Docker/K8s에서 자주 사용)
SPRING_PROFILES_ACTIVE=prod
3-4. application.yml 내부 분기 (profiles include)
spring:
profiles:
group:
dev: [common, local-db]
prod: [common, rds-db]
복수의 profile을 그룹화해서 재사용할 수 있습니다. Spring Boot 2.4 이상에서 지원합니다.
4. @Profile 어노테이션으로 Bean 조건부 등록
Profile은 설정 파일뿐만 아니라, @Component
나 @Configuration
에도 사용할 수 있습니다.
@Profile("dev")
@Service
public class LocalEmailSender implements EmailSender {
...
}
@Profile("prod")
@Service
public class SmtpEmailSender implements EmailSender {
...
}
이렇게 하면 실행 중인 프로파일에 따라 다른 구현체가 자동으로 주입됩니다.
5. 실무 팁 및 주의사항
- application.yml은 공통 설정만 포함하고, 환경별 설정은 별도 분리하세요.
- 배포 자동화 시 profile 설정 누락으로 인한 사고가 많습니다. CI/CD 파이프라인에서 명확히 지정하세요.
- profile 명칭은
dev/test/stage/prod
처럼 팀 내 컨벤션을 정해두고 일관성 있게 사용하세요. - 운영 환경 정보(DB 주소, API 키 등)는 절대 Git에 커밋하지 마세요. 외부 설정파일 or Parameter Store 활용 추천
6. 설정을 잘 나눠야 운영이 편하다
Spring Profile은 단순히 설정 파일을 나누는 도구가 아닙니다. 실행 환경에 따라 코드를 바꾸지 않고도
다른 구성과 동작을 할 수 있도록 만들어주는 스프링의 강력한 환경 추상화 수단입니다.
잘 구성된 Profile 전략은 유지보수를 훨씬 더 쉽게 해주며, 배포 사고를 줄이고 팀 전체의 생산성을 높여 줄 것입니다.
'개발 > JAVA' 카테고리의 다른 글
Spring Boot DevTools 활용하기 – 개발 생산성을 높이는 자동 리로드 기능 (0) | 2025.09.24 |
---|---|
@Configuration과 @Bean의 차이 – Spring 개발자라면 반드시 짚고 가야 할 핵심 개념 (0) | 2025.09.23 |
@Autowired vs 생성자 주입 – 스프링 DI에서 가장 많이 묻는 질문 (0) | 2025.09.21 |
@Component, @Service, @Repository 차이 – 스프링 개발자를 위한 실전 가이드 (0) | 2025.09.20 |
Spring Bean과 IoC/DI 개념 이해 – 스프링의 핵심 철학 (0) | 2025.09.19 |