[Spring] 환경 분리 방법

2023. 10. 29. 19:32·JVM/Spring

 

환경 분리가 왜 필요한가?

애플리케이션은 로컬, 개발, 운영, 테스트 등 다양한 환경을 지원하고 싶을 수 있다.

각 환경마다 다른 자원, 스팩을 사용하는 일은 생각보다 자주 마주친다.

SpringBoot 는 이를 지원하기 위한 매커니즘으로 Profile 을 제공한다.

 

 

yaml 파일로 환경 분리하기

사전 준비

SpringBoot 앱이 로드되자마자 Yaml 파일을 읽어 로깅하도록 지정했다.

어노테이션은 주석을 참고하자.

 

(1) 하나의 application.yaml 에 때려박기

 

(2) 환경별 yaml 파일 분리하기

profile 을 환경별로 분리하여 정의하고  `application.yaml` 에서 `spring.profiles.active` 값만 지정해줘야한다.

해당 값 미지정시 어느 프로파일로 실행할지 결정하지 못해 Runtime 에러가 발생할 수 있다.

 

환경별로 파일을 분리할 때
application-{env-name}.yaml 네이밍을 따르면
spring.config.activate.on-profile 속성은 생략 가능하다.

 

그럼 반드시 application.yaml 의
`spring.profiles.active` 값이 우선되나요?

아니다.

CLI 로 수동 설정하거나

Configuration class 로 profile active 값을 주입할 수 있다.

 

 

기타 Profile 지정 방법 

CLI 로 profile 지정하기

gradle 을 사용한다고 가정한다.

# application.yaml 설정값보다 CLI arguments 가 우선순위가 높다.
$ gradlew bootRun --args='--spring.profiles.active=prod'

기본 활성 환경이 `local`이라도 CLI 인자로 입력한 'prod' 가 지정된다.

 

@ActiveProfiles 어노테이션 사용하기

어느 Profile 의 property 를 읽어올 것인지 ApplicationContext (Spring Bean Container ) 초기화시 결정한다.

우선순위가 높다. `spring.profiles.default` `spring.profiles.active` 값이 달라도 어노테이션 값으로 읽어온다.

SpringBootUnitTest 클래스를 상속받은 모든 유닛테스트 클래스에서 SpringBoot 를 로드할 때 'test' 프로파일 즉, application-test.yaml 설정을 따라간다.

 

 

 

test 디렉토리보다 main 소스 resource 에서 한번에 관리하는 것을 권한다.

 

@ActiveProfiles 어노테이션은 오로지
`test` 패키지 하위 클래스에서만 사용 가능하다.

 

Profile 적용 우선순위

CLI arguments > environment variables > @ActiveProfiles 또는 application properties > default properties

 

 

Profile 적용 방법

(1) default profile

`spring.profiles.default` 에 명시된 항목. 

기본값은 `default` profile

 

(2) Active profile

application.yaml 에 명시가 가능하다.

 

  • CLI arguments
  • application.yaml 명시
    `spring.profiles.active`

 

 

Application,yaml 의 `spring.profiles.active` 의 마지막 원소가
어느 application-{profile}.yaml 를 load할지 결정한다.
저작자표시 (새창열림)

'JVM > Spring' 카테고리의 다른 글

[Spring] ConfigurationProperties POJOs 설계  (0) 2025.10.23
[Spring] DataJpa - Query methods, @Query  (0) 2024.12.14
[Spring] Servlet Container, Servlet  (0) 2023.03.19
[Spring] logback-spring.xml  (0) 2023.02.21
[Spring] ConfigurationProperties + ConfigurationPropertiesScan  (0) 2023.02.13
'JVM/Spring' 카테고리의 다른 글
  • [Spring] ConfigurationProperties POJOs 설계
  • [Spring] DataJpa - Query methods, @Query
  • [Spring] Servlet Container, Servlet
  • [Spring] logback-spring.xml
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • 전체
    오늘
    어제
    • 분류 전체보기 (429) N
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (문제풀이) (56)
        • Algorithm (이론) (23)
      • JVM (64) N
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (23) N
        • Error (7)
      • 기타 (68)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (12)
        • git (19)
        • 잡동사니 (26)
      • 재테크 (11)
        • 세무 (4)
        • 투자 (3)
        • 보험 (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • 시스템 보안 (5)
      • 네트워크 (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • 저작권과 스마트폰의 이해 (0)
      • 생각 뭉치 (6)
      • 궁금증 (2)
      • Private (4)
        • 이직 경험 (0)
        • 꿈을 찾아서 (1)
      • Android (21)
        • OS (4)
  • 블로그 메뉴

    • 홈
    • WEB
    • 알고리즘
    • DataBase
    • Linux
    • Mobile
    • C
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    docker
    PostgreSQL
    algorithm
    linux
    javascript
    Programmers
    java
    android
    Spring
    C++
    JPA
    프로그래머스
    kafka
    Git
    알고리즘
    Bitcoin
    ubuntu
    database
    백준
    Kotlin
  • hELLO· Designed By정상우.v4.10.3
M_Falcon
[Spring] 환경 분리 방법
상단으로

티스토리툴바