
책을 통한 학습과 추가적인 내용을 정리해요.
프로파일(Profile)은 Spring Framework에서 제공하는 DI(Dependency Injection) 컨테이너의 기능으로, 환경별로 설정을 그룹화하여 관리할 수 있도록 지원합니다. 주로 프로덕션, 스테이징, 테스트, 로컬 개발 환경 등에서 서로 다른 설정을 적용할 때 사용됩니다.
프로파일의 주요 특징
1. 설정 그룹화
- DI 컨테이너에서 설정을 환경별로 묶어 관리할 수 있는 기능입니다.
예를 들어, 개발 환경에서 로컬 데이터베이스를 사용하고, 프로덕션 환경에서는 클라우드 데이터베이스를 사용하는 식으로, 각 환경에 맞는 빈(bean)이나 설정을 활성화할 수 있습니다.
2. 환경별 적용
- 개발, 테스트, 프로덕션 등의 환경에 따라 서로 다른 동작이 필요할 경우, 프로파일을 사용해 환경별 설정을 정의합니다.
- 코드 변경 없이 애플리케이션이 다른 환경에서 실행될 수 있습니다.
3. 유연한 활성화
- 애플리케이션 실행 시 특정 프로파일을 활성화하여 원하는 설정을 적용할 수 있습니다.
환경에 따른 용어 정리
환경 설명 주요 목적 데이터베이스 주요 특징 로컬 개발 환경 개발자가 로컬 머신에서 애플리케이션을 실행하며 개발 및 디버깅을 수행하는 환경 기능 개발, 디버깅 H2, SQLite 등 임시 DB - 빠른 테스트를 위해 경량화된 설정 사용
- 상세한 디버깅 로그 활성화
- Mock 데이터 또는 API 사용테스트 환경 QA팀이나 CI/CD 파이프라인에서 애플리케이션을 테스트하는 환경 기능 검증, 통합 테스트, 성능 테스트 테스트 전용 데이터베이스 - 실제 환경과 비슷한 설정 사용
- Mock 또는 샘플 데이터 사용
- 테스트 자동화를 위한 스크립트 활용스테이징 환경 프로덕션 환경과 거의 동일하게 구성하여, 배포 전 최종 검증을 수행하는 환경 프로덕션 배포 전 최종 확인 프로덕션과 유사한 데이터베이스 - 프로덕션과 유사한 설정 및 구조 사용
- 가상 데이터 또는 실제 데이터를 변환하여 사용
- 안정성, 성능, 보안 검증 수행프로덕션 환경 실제 사용자가 애플리케이션을 사용하는 환경 실 서비스 제공, 안정성 및 성능 최적화 실제 운영 데이터베이스 - 최대 안정성과 보안 요구
- 민감 데이터 보호
- 모니터링 및 로깅 활성화
- 고가용성과 확장성을 위한 인프라 구성
|
|
|
| 프로파일 설정에 대한 그림<출처: 그림으로 보는 스프링 6> |
프로파일이 설정된 경우
- 프로파일이 활성화되어 있다면, 해당 프로파일에 설정된 빈(bean)이나 설정만 동작합니다.
예를 들어, @Profile("dev")로 설정된 클래스나 빈은 dev 프로파일이 활성화된 경우에만 로드됩니다.
프로파일이 설정되지 않은 경우
- @Profile이 명시되지 않은 설정이나 빈은 모든 프로파일에서 작동합니다.
즉, 별도로 프로파일 조건을 지정하지 않았다면, 이는 기본적으로 모든 환경에서 동작하는 공통 설정으로 간주됩니다.
@Configuration
@Profile("staging")
public class DevConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource("jdbc:h2:mem:devdb");
}
}
@Configuration
@Profile("production")
public class ProdConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource("jdbc:mysql://prod-db-url:3306/proddb");
}
}
활성화 될 프로파일을 java커맨드로 지정
java -jar -Dspring.profiles.active=dev myapp.jar
spring.profiles.active 프로퍼티는 DI 컨테이너가 자동으로 읽어들이는 프로퍼티인데, spring.profiles.active 프로퍼티 값으로 활성화 할 프로파일 이름을 지정한다..
프로파일 이름은 쉼표로 구분해 여러 개를 지정 가능
운영체제의 환경 변수를 이용하는 경우 환경 변수
##linux export SPRING_PROFILES_ACTIVE = 프로파일 이름 java main 메서드를 가진 클래스 이름##Windows set SPRING_PROFILES_ACTIVE = 프로파일 이름 java main 메서드를 가진 클래스 이름