Page 13 -
P. 13

소프트웨어 개발자는 애플리케이션 구성 정보(configuration)와 코드를 분리하는 것이 중요하다는

                   말을 항상 듣는다. 대부분 이 말은 코드에서 하드코딩된 값을 사용하지 않는 것을 의미한다. 이 원
                   칙을 무시하면 구성 정보가 변경될 때마다 애플리케이션을 재컴파일하고 재배포해야 하므로 애플
                   리케이션이 더 복잡해진다.

                   애플리케이션 코드에서 구성 정보를 완전히 분리하면 개발자와 운영자가 재컴파일 과정을 거치지
                   않고 구성 정보를 변경할 수 있다. 하지만 개발자에게는 애플리케이션과 함께 관리하고 배포해야
                   할 또 다른 산출물이 생겨 복잡함도 가중된다.

                   많은 개발자가 프로퍼티 파일(YAML, JSON, XML)을 사용해서 구성 정보를 저장한다. 이러한 파
                   일 안에 애플리케이션 구성을 설정하는 것은 간단한 작업이므로 대부분의 개발자는 구성 파일을

                   소스 제어(있다면)에 추가하고 애플리케이션의 한 부분으로 배포하는 것 이상을 하지 않는다. 애
                   플리케이션 수가 적은 경우 효과가 있지만 수백 개의 마이크로서비스가 많은 인스턴스를 실행하
                   고 있는 클라우드 기반의 애플리케이션을 처리하고 있다면 이 방식은 문제가 된다. 갑자기 쉽고
                   간단한 프로세스가 중차대한 문제로 급부상해서 전체 팀은 전체 구성 파일과 씨름해야 한다.

                   예를 들어 수백 개의 마이크로서비스가 있고 각 마이크로서비스에는 세 가지 환경에 대해 서로 다
                   른 환경 구성이 포함되어 있다고 가정해 보자. 이 파일을 외부에서 관리하지 않는다면 변경 사항

                   이 있을 때마다 코드 저장소에서 파일을 검색하고, 코드 저장소에서 검색해서 통합 과정(있다면)
                   을 따라 애플리케이션을 재시작해야 한다. 이러한 재앙적인 상황을 피하려면 클라우드 기반 마이
                   크로서비스 개발을 위한 모범 사례로 다음 사항을 고려해야 한다.


                      ●    배포되는 실제 코드와 구성 정보를 완전히 분리한다.
                      ●    여러 환경에서도 절대 변경되지 않는 불변(immutable) 애플리케이션 이미지를 빌드한다.

                      ●    서버가 시작할 때 마이크로서비스가 읽어 오는 환경 변수 또는 중앙 저장소를 통해 모든 애
                        플리케이션 구성 정보를 주입한다.

                   이 장에서는 클라우드 기반의 마이크로서비스 애플리케이션의 구성 데이터를 관리하는 핵심 원칙
                   과 패턴을 소개한다. 그런 다음 구성 서버를 구축하고 스프링과 스프링 부트 클라이언트와 통합하

                   여 보다 중요한 구성 정보를 보호하는 방법을 배운다.












             164




         macrospring_06.indd   164                                                               2022-06-20   오후 1:09:01
   8   9   10   11   12   13   14   15   16   17   18