SpringCloud Config 활용
데이터베이스 비밀번호 암호화
설정파일에 비밀번호와 같은 값이 그대로 노출될 경우를 방지하기 위해 암호화된 값으로 치환하여 작성하고 실제 사용시엔 복호화하여 사용할 수 있도록 한다.
암호화 사용을 위해 config-server 모듈에서 resources 하위에 bootstrap.yml 파일을 만들고 암호화 설정을 적어준다.
bootstrap을 통해 암복호화 기능에 필요한 라이브러리 의존성 추가
현재 local 프로필에서 사용중인 item-service-local.yml 파일에 DB 비밀번호는 !qwer1234이다.
config-server 모듈을 실행시키고 postman을 열어
http://localhost:8080/encrypt URI 경로로 body에 비밀번호를 보내면 암호화한 코드가 응답된다.
해당 암호문을 item-service-local.yml 파일에 작성한다.
암호화 값 앞에 cipher 라는 값을 지정해야한다.
복호화 키값도 SECU100 으로 설정해준다.
http://localhost:8080/decrypt URI 경로로 body에 암호문을 요청하면 다시 복호화된 비밀번호를 받을 수 있다.
item-service 모듈을 실행시키고 다시 postman으로 물품 등록이 잘 되는지 확인하면
재배포 없이 설정 정보 갱신
실행중인 config-server와 item-service가 운영중인 서버라고 했을 때 설정 파일만 변경된다면 설정이 적용되기 위해 config-server와 item-service 모듈을 재부팅 하려면 스케쥴 잡고 작업하는데 부담이 생긴다.
재시작 없이 변경된 설정정보를 적용시키는 방법을 알아본다.
item-service 모듈에 spring-boot-starter-actuator 의존성 추가
item-service 모듈 bootstrap.yml에 actuator 설정 추가
actuator는 microservice에 대해 API를 통해 애플리케이션 상태나 정보를 확인할 수 있도록 지원하는 라이브러리다.
include에 적용된 refresh 설정은 변경된 설정 파일에 대해 프로세스 재실행 없이 reload를 할 수 있도록 도와주는 옵션이다. health는 현재 상태, beans는 spring에 등록한 bean 확인 기능 적용 설정이다.
item-service 재시작후 item-service-local.yml 파일에 log 파일명을 변경하고 마이크로 서비스에 post 방식으로 refresh 요청을 하면 actuator 라이브러리를 통해 config-server에서 변경된 설정을 인식해서 reload가 된다.
요청을 날린후 돌아오는 응답 메세지는 200 이지만 response body에 아무것도 찍히지 않는다.
원래 변경된 설정 옵션 항목을 출력해주는데 빈 배열과 물품등록 요청시 api-local2.log 라는 로그파일이 생성되어야 하나 로그파일도 생성이 되지 않는다.
찾아보다 강사님에게 물어보니
http://localhost:8080/item-service/local
로 접속하여 파일내용이 변경되는지 확인해보니 로그파일명을 변경해도 적용이 되지 않는 것을 확인하였다.
구글을 서치한 결과
왜 인지는 모르겠지만 클래스패스 경로 하위로 설정하면 config-server를 리스타트 해야 반영이 된다고 해서
config-server에 application.yml 파일 search-locations 경로를 파일패스로 수정하였다.
만약 운영이나 개발서버에 올려놓고 작업을 한다면 classpath가 작동을 할것이고 보통 깃이나 별도의 서버 주소로 접근할 수도 있기 때문에 해당 문제는 로컬에 인텔리제이로 프로젝트를 구성했을 때 국한된 문제 같다.
이클립스 프로젝트로 구성하여 해보니 문제없이 classpath가 되는걸 보면 인텔리제이에서 classpath 경로를 다르게 설정한거 같은데 원인은 못찾고 일단 파일패스로 진행.
item-service에 /actuator/refresh 요청시 변경된 로그파일 항목 확인
물품 등록 진행
api-local2.log 파일 생성 확인으로 config-server의 설정정보 변경이 적용된 것을 확인
actuator 라이브러리를 사용하여 API요청으로 설정 파일의 변경사항을 reloading 처리할 수 있는 방법을 알아보았다.
Java 마이크로서비스(MSA) 프로젝트 실습 강의 - 질문 & 답변 | 인프런
수강생이 남긴 질문과 지식공유자의 답변을 확인할 수 있어요. 질문 & 답변 | 인프런
www.inflearn.com