ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 외부 설정 4 - 설정 데이터
    스프링/스프링부트 2023. 9. 30. 16:22

    지금까지 학습한 OS 환경 변수, 자바 시스템 속성, 커맨드 라인 옵션 인수는 사용해야 하는 값이 늘어날 수록 사용하기가 불편해진다. 실무에서는 수많은 설정값을 사용하기도 하므로 이런 값들을 프로그램을 실행할 때 마다 입력하게 되면 번거롭고 관리도 어렵다.

     

    대안으로 설정값을 파일에 넣어서 관리한 다음에 애플리케이션 로딩 시점에 파일을 읽는 방법이 있다.

     

     

    1. 외부 파일

    사진 : 인프런 스프링 강의

    application.properties를 각각의 소스코드에 위치시키는 것이 아니라 외부 설정 파일로 각각 서버에 두는 것이다.

     

    빌드 후에 빌드 파일이 있는 경로에 가서 application.properties라는 파일을 만들어준다.

     

    url=dev.db.com
    username=dev_user
    password=dev_pw

    파일에 위의 내용을 입력해주면 자동으로 key=value로 들어가며 외부 설정이 자동으로 된다.

     

     

    운영 서버에서는

    url=prod.db.com
    username=prod_user
    password=prod_pw

    이 파일을 넣어주면 개발 서버와는 다른 외부 설정이 된다.

     

     

    이 방식도 서버가 너무 많으면 여러 파일을 계속해서 만들어줘야 한다는 불편함이 있다. 또한, 설정 파일이 별도로 관리되기 때문에 설정값의 변경을 확인하기 어렵다.

     

     

     

     

    2. 내부 파일 분리

    설정 파일을 외부에 관리하는 것은 설정을 변경할 때마다 서버에 들어가서 각각의 변경 사항을 수정해야하기 때문에 번거롭다.

     

    이 문제를 해결하기위해 설정 파일을 프로젝트 내부에 포함해서 관리하고 빌드 시점에서 함께 빌드되게 한다.

    jar 하나로 설정 데이터까지 포함해서 관리하는 것이다.

    사진 : 인프런 스프링 강의

    0. 프로젝트 안에 소스 코드 뿐만 아니라 각 환경에 필요한 설정 데이터도 함께 포함해서 관리한다.
         개발용 설정 파일: application-dev.properties
         운영용 설정 파일: application-prod.properties


    1. 빌드 시점에 개발, 운영 설정 파일을 모두 포함해서 빌드한다. 


    2. app.jar 는 개발, 운영 두 설정 파일을 모두 가지고 배포된다.


    3. 실행할 때 어떤 설정 데이터를 읽어야 할지 최소한의 구분은 필요하다.
         개발 환경이라면 application-dev.properties 를 읽어야 하고,
         운영 환경이라면 application-prod.properties 를 읽어야 한다.


         실행할 때 외부 설정을 사용해서 개발 서버는 dev 라는 값을 제공하고, 운영 서버는 prod 라는 값을 제공하자.

         -> 편의상 이 값을 프로필이라 하자.


         dev 프로필이 넘어오면 application-dev.properties 를 읽어서 사용한다.
         prod 프로필이 넘어오면 application-prod.properties 를 읽어서 사용한다.

     

     

    스프링이 이미 설정 데이터를 내부에 파일로 분리해두고 외부 설정값(프로필)에 따라 각각 다른 파일을 읽는 방법을 다 구현해뒀다.

     

    src/resources의 경로에 application-dev.properties와 application-prod.properties를 만든다.

    application-dev.properties

    url=dev.db.com
    username=dev_user
    password=dev_pw

    application-prod.properties

    url=prod.db.com
    username=prod_user
    password=prod_pw

     

    스프링은 이런 곳에서 사용하기 위한 프로필이라는 기능을 지원ㄴ한다.

    spring.profiles.active 외부 설정에 값을 넣으면 해당 프로필을 사용한다고 판단한다.

     

    예를 들어 spring.profiles.active=dev라 하면 dev 프로필이 활성화 되며 application-dev.properties를 설정 데이터로 사용한다.

     

    dev로 바꾸면 application-dev.properties가 설정 데이터로 사용 됨

    VM option이나 OS 환경변수, 커맨드 라인 아무에다 설정 값을 주면 자동으로 해당 설정 데이터를 사용한다.

     

     

     

    jar 실행

    jar로 실행할 때에는 아래처럼 사용하면 된다.

    java -Dspring.profiles.active=dev -jar external-0.0.1-SNAPSHOT.jar

    java -jar external-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

    dev가 아니라 prod를 사용하면 운영 서버로 실행되게 된다.

     

     

     

     

     

    3. 내부 파일 합체

    설정 파일을 각각 분리해서 관리하면 한 눈에 전체가 들어오지 않는다는 단점이 있어서 스프링은 이런 단점을 보완하기 위해서 하나의 파일 안에서 영역을 구분하는 방법을 제공한다.

     

    application.properties

    spring.config.activate.on-profile=dev
    url=dev.db.com
    username=dev_user
    password=dev_pw
    #---
    spring.config.activate.on-profile=prod
    url=prod.db.com
    username=prod_user
    password=prod_pw

    spring.config.activate.on-profile="서버 이름"을 지정한 다음 key=value 값을 적으면 하나의 파일 안에서도 영역을 구분할 수 있다. 중간에 #---또는 !---를 입력하면 영역이 구분된다.

     

    속성 파일 구분 기호에는 선행 공백이 없어야하며 정확히 #--- 또는 !---으로 입력되어야 하며 위, 아래 줄은 공백이면 안된다.

     

     

     

    실제에서는 3번 내부 파일 합체를 많이 사용하고, 상황에 따라서 분리할 때도 있다고 한다.

Designed by Tistory.