Page 14 -
P. 14
5.1 구성(그리고 복잡성) 관리
S P R I N G M I C R O S E R V I C E S
클라우드에서 실행하는 마이크로서비스에서는 마이크로서비스의 인스턴스가 사람의 개입을 최
소화하여 신속하게 시작되어야 하므로 애플리케이션 구성을 관리하는 것은 중요하다. 사람이
서비스를 배포하기 위해 수동으로 구성하거나 건드려야 한다면 애플리케이션에서 구성 불일치 5
(configuration drift)나 예기치 않은 장애, 확장 문제 대응을 위한 지연 시간 등이 발생할 수 있다. 앞
으로 지킬 네 가지 원칙을 세워 애플리케이션 구성 관리에 대한 논의를 시작해 보자.
● 분리(segregate): 서비스의 물리적 배포에서 서비스 구성 정보를 완전히 분리해야 한다. 실제 스프링 클라우드 컨피그 서버로 구성 관리
로 애플리케이션 구성 정보는 서비스 인스턴스와 함께 배포되어서는 안 되며, 시작 중인 서
비스에 환경 변수로 전달되거나 서비스가 시작할 때 중앙 저장소에서 읽어 들여야 한다.
● 추상화(abstract): 서비스 인터페이스 뒷단에 있는 구성 데이터의 접근 방식을 추상화해야 한
다. 애플리케이션 구성 데이터를 조회하는 데 서비스 저장소(파일 기반 또는 JDBC 데이터
베이스 기반)에서 직접 읽어 오는 코드를 작성하기보다 REST 기반 JSON 서비스를 사용해
야 한다.
● 중앙 집중화(centralize): 클라우드 기반의 애플리케이션에는 실제로 수백 개의 서비스가 실행
될 수 있어 구성 데이터를 보관하는 데 사용되는 여러 저장소 수를 최소화하는 것이 중요하
다. 가능한 적은 수의 저장소로 애플리케이션 구성 정보를 모아야 한다.
● 견고화(harden): 애플리케이션 구성 정보는 배포되는 서비스와 완전히 분리되고 중앙 집중화
되므로 사용하고 구현할 솔루션은 가용성이 높고 이중화가 필요하다.
명심해야 할 핵심 사항 중 하나는 구성 정보를 실제 코드 외부로 분리할 때 외부 의존성이 생겨서
이를 관리하고 버전 제어한다는 것이다. 애플리케이션 구성을 제대로 관리하지 못하면 탐지하기
어려운 버그와 예기치 않은 장애의 온상이 되기 때문에 애플리케이션 구성 데이터는 추적 가능하
고 버전을 제어할 수 있어야 한다고 아무리 강조해도 지나치지 않다.
165
macrospring_06.indd 165 2022-06-20 오후 1:09:01