[개발 일기] 2025.02.28 - @Profiles, @ActiveProfiles

2025. 2. 28. 12:49·개발 일기

💡 개요

Spring에서 실제 배포 환경과 로컬 환경 등 각각 다른 설정을 적용해야 할 때 사용할 수 있는 @Profile과 @ActiveProfiles에 대해 정리해 보자.

 

 

 

📕 @Profiles

@Profiles 어노테이션은 주로 특정 빈을 활성화시킬 때 사용한다.

 

 

그렇기 때문에 @Configuration 이나 @Componet, @Service, @Repository 와 함께 사용한다.

 

 

다음은 실제 배포 환경에서만 사용해야 할 빈의 예시 코드이다.

 

 

@Profile("prod")
@Component
public class ProdDataSource implements DataSource {
    // 운영 환경 전용 데이터 소스 설정
}

 

 

만약 현재 활성화된 프로필이 test나 dev라면 ProdDataSource 는 빈 객체로 등록되지 않는다.

 

 

 

📕 @ActiveProfiles

@ActiveProfiles 어노테이션은 테스트 코드 동작 시, 어떤 프로필을 사용할지 설정할 때 사용한다.

 

 

그렇기 때문에 주로 @SpringBootTest와 함께 사용된다.

 

 

@SpringBootTest
@ActiveProfiles("test")
public class ServiceTest {
    @Autowired
    private Service service;

    @Test
    public void test() {
        // 'test' 프로필이 활성화된 상태에서 실행
    }
}

 

 

 

🚀 @ActiveProfiles과 application.yml의 관계

 

@ActiveProfiles는 테스트에서 특정 프로필을 강제로 활성화하는 역할을 한다.

 

 

즉, application.yml의 spring.profiles.active 설정과 상관없이 테스트 코드에서 지정한 프로필을 사용한다.

 

 

@SpringBootTest
@ActiveProfiles("test")
public class ServiceTest {

    @Autowired
    private DataSource dataSource;

    @Test
    public void test() {
        // 'test' 프로필이 활성화된 상태에서 실행
    }
}

 

 

application.yml에서 spring.profiles.active=dev 인 경우

 

위 테스트 코드를 실행할 때, 기본 프로필이 dev인 경우엔 DevDataSource가 주입되어야 하지만, @ActiveProfiles 이 "test" 로 설정되어 있기 때문에 TestDataSource 가 주입된다.

 

 

즉, @ActiveProfile은 활성화된 프로필보다 우선순위가 더 높기 때문에 테스트에서는 @ActiveProfiles가 application.yml의 설정을 무시하고, 지정한 프로필을 활성화한다.

 

 

 

📕 프로필 활성화

참고로 프로필을 활성화시킬 땐 application.yml을 통해 설정할 수도, 명령어를 사용해 설정할 수 있다.

 

 

터미널에서 명령어를 사용해 활성화 프로필 설정

 

java -jar -Dspring.profiles.active=dev myapp.jar

 

 

application.yml에서 기본 프로필 설정

 

spring:
  profiles:
    active: dev

 

 

application.yml에서 여러 개의 프로필 설정

 

# 기본 설정
server:
  port: 8080

---

# dev 환경 설정
spring:
  profiles: dev
server:
  port: 8081

---

# prod 환경 설정
spring:
  profiles: prod
server:
  port: 9090

 

 

그리고 application.yml (기본 프로필), application-dev.yml(dev 프로필), application-prod.yml(prod 프로필) 와 같이 파일명으로 프로필 별 환경변수를 설정할 수 있다.

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.03.02 - Thread 조정 (종료)  (1) 2025.03.02
[개발 일기] 2025.03.01 - Redis 직렬화  (1) 2025.03.01
[개발 일기] 2025.02.26 - Dangling quantifier '+’ 에러  (0) 2025.02.26
[개발 일기] 2025.02.25 - 전략 패턴  (0) 2025.02.25
[개발 일기] 2025.02.24 - == 연산자 vs Objects.isNull()  (0) 2025.02.24
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.03.02 - Thread 조정 (종료)
  • [개발 일기] 2025.03.01 - Redis 직렬화
  • [개발 일기] 2025.02.26 - Dangling quantifier '+’ 에러
  • [개발 일기] 2025.02.25 - 전략 패턴
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.02.28 - @Profiles, @ActiveProfiles
상단으로

티스토리툴바