다시 웹, 백엔드로/스프링

설정 데이터

EnoughTT 2023. 9. 4. 13:55

설정 데이터

 

외부 파일

OS 환경 변수, 자바 시스템 속성, 커맨드 라인 옵션 인수는 사용해야 하는 값이 늘어날 수록 사용하기가 불편해짐

 

대안은 설정값을 파일에 넣어서 관리하고, 애플리케이션 로딩 시점에 해당 파일을 읽어들이면 됨

.properties 파일은 key=value 형식을 사용해서 설정값을 관리하기에 적합

 

 

개발, 운영 서버에 각각 application.properties 외부파일을 생성

애플리케이션 로딩시점에 해당 파일을 읽어 속에있는 값들을 외부 설정값으로 사용  
파일 이름이 같으므로 애플리케이션코드는 그대로 유지할수 있음

 

스프링과 설정 데이터

스프링은 해당 파일을 읽어서 사용할 수 있는 PropertySource의 구현제를 제공함

application.properties 파일을 설정 데이터 (Config data) 라고 함, Environment 를 통해 조회 할 수 있음

 

jar 로 빌드 후 build/libs 위치에 application.properties 파일을 생성

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

jar 를 실행 시 옵션으로 application.properties를 넣어주면 됨

username이 윈도우 계정으로 나오는데.. 이건 좀 찾아봐야겠다....

 

 

내부 파일 분리

설정 파일을 외부에 관리하는 것은 상당히 번거로운 일임

이 문제를 해결하는 간단한 방법은 설정 파일을 프로젝트 내부에 포함해서 관리하고 빌드 시점에 같이 빌드 되게 하는 것

  • 코드 뿐만 아니라 각 환경에 필요한 설정 데이터도 함께 포함해서 관리
    • 개발용 설정 : application-dev.properties
    • 운영용 설정 : application-dev.properties
  • 빌드 시점에 개발, 운영 설정 파일을 모두 포함해서 빌드
  • app.jar는 개발, 운영 두 설정 파일을 모두 가지고 배포됨
  • 하지만 실행 할 때 어떤 설정 데이터를 읽어야 할지 최소한의 구분은 필요함
    • 개발환경 : application-dev.properties
    • 운영환경 : application-prod.properties
    • 개발서버는 dev, 운영서버는 prod 라는 값을 제공
      1. dev ➡️ application-dev.properties 사용
      2. prod ➡️ application-prod.properties 사용

 

스프링과 내부 설정 파일 읽기

main/resources 경로에 application-dev.properties, application-prod.properties 파일 추가

 

프로필

스프링은 프로필이라는 개념을 지원

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

다음과 같은 큐칙으로 해당 프로필에 맞는 내부 파일 (설정 데이터)을 조회함

application-{profile}.properties

 

 

실행

 

 

내부 파일 합체

설정 파일을 분리 했기때문에 한눈에 전체가 들어오지 않는 단점이 있음

스프링은 물리적인 하나의 파일 안에서 논리적으로 영역을 구분하는 방법을 제공함

 

 

  • 기존에는 두개의 설정 파일이 필요했지만 논리적으로 영역을 구분하는 방법을 제공함
    • properties 구분 방법 #--- 또는 !---
    • yml 구분 방법 ---

 

설정 데이터를 하나의 파일로 통합

application-dev.properties, application-prod.properties # 을 이용해 주석처리

 

application.properties 작성

선행 공백 x, 정확히 3개의 하이픈이여야함!

파일을 분할하는 주석 위, 아래는 주석 x

 

실행

 

 

 

 

 

 

 

 

 

 

feat. 스프링부트 - 핵심 원리와 활용 (김영한)

'다시 웹, 백엔드로 > 스프링' 카테고리의 다른 글

외부설정 사용 - 1  (0) 2023.09.07
우선순위  (0) 2023.09.05
외부 설정 - 2  (0) 2023.09.01
외부 설정 - 1  (0) 2023.09.01
자동 구성 라이브러리 만들기/사용  (0) 2023.08.31