티스토리 뷰
Configure Service?
최근에 많이 사용되는 MSA(Micro Service Architecture)는 여러 개의 서비스를 분산 시스템으로 구성한다. 이러한 분산 시스템에서 Server/Client 구성에 필요한 application.yml 파일과 같은 설정정보를 외부 시스템에서 관리해주는 서비스를 말한다.
이러한 Configure Service 는 실제 설정파일이 저장되는 저장소가 별도로 존재하고 이러한 저장소를 Configure Service 와 연결하게 된다. 따라서 설정파일이 저장되는 저장소를 어떤 것으로 할지도 결정해야 한다.
그리고 Configure Service 를 구성할 때 고려해야되는 부분중 하나는 설정 값이 변경되었을 때의 동작이다.
- 서버 재기동 (최악의 방법이다)
- Actuator Refresh
- 설정정보를 변경한 후 [POST] /actuator/refresh 를 호출하면 설정정보가 갱신된다. (Spring Cloud Config 기준)
- 하지만 여전히 모든 분산 서비스에 대해서 HTTP Request 를 보내야 하는 번거로움이 존재한다. - Spring Cloud Bus 이용 (굉장히 효과적인 방법)
- 자세한 내용은 추후에 추가할 예정이다.
이 방법이 전부인지는 모르겠지만 이와 같은 방법 중에서 설정 값이 변경되었을 때 어떤 동작을 통해서 서비스의 설정 정보를 갱신할지 결정해야 한다.
Why Configure Service?
그러면 언제나 그랬듯이 이러한 Configure Service 를 왜 사용하는지 알아보자.
- 설정정보가 변경되더라도 서비스를 다시 빌드하고 실행시킬 필요가 없다.
변경된 설정정보가 자동으로 서비스에 적용된다. - 분산된 여러 서비스에서 공통적으로 사용되는 설정정보를 중앙에서 관리할 수 있다.
기존에 해당 설정정보가 변경되면 여러 서비스의 설정파일을 일일히 수정해줘야 하는 번거로움이 있었다. - 개발, 테스트, 배포 환경을 구분해서 각각 다른 설정파일을 사용해 관리할 수 있다.
(이러한 기능을 Spring 에서 Profile 이라고 한다)
Configure Repository
Configure Service 자체가 설정정보를 저장하기 위한 저장소가 되는 것이 아니다. 따라서 별도의 설정파일을 저장하기 위한 저장소를 두고 Configure Service 에서 해당 저장소를 연결해 사용하게 된다.
일반적으로 설정파일 저장소로 사용되는 유형에는 Local Git Repository, Global Git Repository, Secure File Storage 등이 존재한다. 일반적으로 Git Repository 를 통해 설정정보를 보관하고 이를 Configure Service 와 연결하여 사용하게 된다. 그러면 이러한 설정파일 저장소에 저장되는 설정파일을 어떤 서비스를 위한 것이고, 어떤 Profile 을 위한 것인지 구분하는 방법에 대해서 살펴보자.
설정파일을 구분하기 위해 설정파일의 이름을 달리하는 방법이 있다.
application.yml # Common Configure File
application-name.yml # Configure File for name Service
application-name-profile.yml # Configure File for name Service, profile Profile
# 예시
application.yml
application-user.yml
application-user-dev.yml
...
이와 같이 설정파일의 이름을 다르게 함으로써 어떤 서비스의 어떤 Profile 을 위한 서비스인지 명시할 수 있다.
Spring Cloud Config
Spring Cloud 에서 제공하는 Spring Cloud Config 를 사용해 간단한 Configure Service 를 만들어 보도록 하자.
'개발 > Concept' 카테고리의 다른 글
[Concept] Composition, Aggregation, Delegation 개념정리 (2) | 2022.03.12 |
---|---|
[Concept] API 성능테스트 (feat. nGrinder 를 이용한 성능 테스트) (1) | 2021.10.31 |
[Git] Git 좀 세울줄 아는 남자-2 (0) | 2021.07.05 |
[Git] Git 좀 세울줄 아는 남자-1 (1) | 2021.07.04 |
[Concept] JWT(Json Web Token)? (0) | 2021.06.06 |