일반적으로 데이터베이스 연결 정보, 파일 스토리지 정보와 같은 구성 정보를 변경하고자 할 시 해당 마이크로서비스를 재배포, 중단해야 합니다. 그러나 클라우드 인프라 환경에서 CNA의 마이크로서비스는 일일이 재배포하기 어렵고 변경 시점에 서비스가 스케일-아웃을 통해 여러 개 존재하는 경우 마이크로서비스의 구성 정보가 불일치할 수도 있습니다. 따라서 마이크로서비스가 사용하는 자원의 설정 정보를 쉽고 일관되게 변경 가능하도록 관리할 필요가 있습니다. 이를 위해 마이크로서비스의 구성 정보를 외부 저장소에서 일괄적으로 관리할 수 있는데 이러한 패턴을 외부 구성 저장소 패턴이라고 합니다.
외부 저장소는 각 마이크로서비스의 외부 환경 설정 정보를 저장하는 백업 저장소입니다.
Heroku는 클라우드 네이티브 애플리케이션의 원칙 Twelve-Factor를 제안하였는데, 이 중 세 번째 규칙에 해당하는 'Config'는 애플리케이션이 배포되는 환경 (스테이징, Prod, Dev, Uat)이 매번 달라지기 때문에 코드에서 사용하는 환경 설정 정보는 코드와 완전히 분리되어야 함을 명시하고 있습니다. 즉, 클라우드에서 운영되는 애플리케이션은 특정 배포 환경에 종속된 정보를 코드에 두어선 안됩니다. 만일 이러한 정보를 애플리케이션에 포함시킨다면 배포 환경이 변경되었을 때 애플리케이션 또한 변경되어야 하기 때문입니다.
스프링 재단에선 외부 저장소 패턴 구현을 편리하게 할 수 있도록 Spring Cloud Config 라이브러리를 제공하는데 Spring Cloud Config를 이용하면 각 마이크로서비스들의 구성 정보를 코드에서 분리하고 Config Service를 통해 런타임 시 주입되게 할 수 있습니다. 환경 정보는 Git과 같은 별도의 형상관리 리포지토리에 보관하고 Config Service는 해당 서비스가 특정 환경에 배포될 때 적절한 환경 정보를 형상관리 저장소에서 가져와 해당 서비스에 주입합니다. Scale-Out된 서비스들 간의 불일치성을 보완하기 위해 외부 저장소 서비스 시 MQ를 통해 일부 마이크로서비스의 구성 정보가 변경되면 해당되는 모든 마이크로서비스들에 자동 주입 되도록 구성할 것을 권장드립니다.
쿠버네티스는 외부 구성 저장소 패턴을 쿠버네티스 컨피그맵 (ConfigMap)을 통해 제공하고 있습니다.