더북(TheBook)

1.9.6 마이크로서비스 빌드 및 배포 패턴

마이크로서비스 아키텍처의 핵심 부분 중 하나는 마이크로서비스의 각 인스턴스가 모두 동일해야 한다는 것이다. 서버가 배포된 이후의 변경 때문에 발생하는 ‘구성 편차(configuration drift)’는 애플리케이션 안정성을 해치므로 허용될 수 없다.

Note 너무 자주 듣는 말

“스테이지 서버에서 정말 조금 변경했는데 그만 운영 환경 서버에서는 빠뜨렸어요.”

수년 간 심각한 상황에 처한 팀에서 일할 때 시스템이 다운되면 개발자나 시스템 관리자가 해결했다며 자주 하는 말이다. 엔지니어는(대개 사람들 대부분이) 좋은 의도로 작업하며, 실수하거나 시스템을 다운시킬 목적으로 일하는 것이 아니다. 최선을 다하지만 간혹 바쁘거나 산만해지기도 한다. 서버에서 어떤 것을 수정하고 이 변경 사항을 확실히 모든 환경에 적용하려고 마음을 먹는다.

나중에 장애가 발생하고 모두가 운영 서버의 하부 환경에 어떤 차이가 생겼는지 머리를 긁적이며 궁금해한다. 필자는 작고 제한된 범위의 마이크로서비스가 ‘불변 인프라스트럭처(immutable infrastructure)’라는 개념을 도입할 절호의 기회를 가져다 준다는 것을 깨달았다. 이 개념은 서비스가 배포되고 나면 서비스가 실행 중인 인프라스트럭처를 절대로 사람이 직접 건드려서는 안 된다는 것이다.

운영 환경에서 시작하는 특정 마이크로서비스의 모든 인스턴스 사이에 동일성을 보장해야 하기 때문에 불변 인프라스트럭처는 마이크로서비스 아키텍처를 성공으로 이끄는 매우 중요한 요소다.


이를 위한 목표는 인프라스트럭처 구성을 빌드 배포 프로세스에 통합해 더 이상 자바 WAR나 EAR처럼 소프트웨어 산출물을 이미 실행한 인프라스트럭처에 배포하지 않는 것이다. 그 대신 마이크로서비스와 빌드 프로세스 일부로 마이크로서비스가 실행되는 가상 서버 이미지를 빌드하고 컴파일해야 한다. 그렇게 한 후에 마이크로서비스를 배포할 때 서버가 실행될 머신 이미지를 배포할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.