- 기본 세팅 application.yml은 그대로 github에 올리지만, db정보나 기타 중요한 정보들은 application-dev.yml, application-prd.yml처럼 환경에 따라 정보 가져올 수 있도록 한다.
- 이런 파일들은 aws s3에서 관리한다.
-> spring cloud config를 사용해보자
공식문서 (https://docs.spring.io/spring-cloud-config/docs/current/reference/html/)
-> 여러 서비스들의 환경 설정 정보를 중앙에 모아 관리하는 라이브러리
그림처럼 여러 서비스들의 환경변수들을 한 군데 모아 두고 config server에서 가져올 수 있음
환경변수가 변경되어도 한 곳에서만 변경하고 refresh를 통해 변경된 환경변수 세팅 가능
내가 해야할 것은 s3이지만, 공식 문서를 보니 git이나 redis등등 지원 중
main 설정
@EnableConfigServer 추가
application.yml 설정
- AWS S3를 사용하기 위한 profiles.active
- 지역은 ap-northeast-2를 사용하고 bucket은 my-bucket을 사용하겠다
- 여기에는 빠져있지만 현재 로컬에 aws credential 이미 세팅되어 있다 -> accessKey, secretKey 접근로 접근 (추후 글 작성 예정)
현재 s3의 my-bucket안에 application-dev.yml 파일 존재
호출 url: http://localhost:8888/${S3-FILE-NAME}/${PROFILE-NAME}
즉, 지금의 경우 http://localhost:8888/application/dev 로 정보 호출
호출 시 "source" 하위에 yml 파일 환경변수들이 나타난다
application.yml 설정
spring.config.import 부분에 cloud config server url 작성
spring.cloud.config 부분에 불러올 파일 세팅
actuator는 환경변수가 변경됐을 경우 refresh를 통해 가져오려고 세팅
나의 경우 application.yml에 db정보를 세팅해놓고 가져오는 방식을 사용했기 때문에 datasource부분이 추가되어 있다
TestController 설정
정확한 값이 호출되는지 확인을 위한 컨트롤러
호출해보자
세팅한 값이 나온다
그렇다면 환경변수의 값이 변경되었을 경우에는?
-> 위에서 세팅한 actuator로 확인해보자
먼저, s3에 있는 application-dev.yml 파일을 수정 (나의 경우 'hong gil dong'으로 수정하였다)
refresh를 호출하니 변경된 값들이 나타나는 듯 하다
다시 TestController를 호출해보자
변경된 값 'hong gil dong'이 표시된다
하여 이 방법으로 application.yml 파일을 관리하려고 하였으나,
지금 서비스도 많이 없는데 굳이 config server를 하나 더 만들어야 하는가? 라는 생각이 들어서 다른 방법을 찾아보았다.
다른 방법은 다음 글에..