[도커를 활용한 마이크로서비스 배포] 빌드&배포하는데 겪는 어려움과 해결 방법 (Feat. Docker)

날아올라돼지야·2024년 8월 26일
0

배포는 어떻게 할 것인가?

마이크로서비스 아키텍처에서는 수백 개의 독립적인 마이크로서비스를 배포해야 합니다. 모놀리식 애플리케이션에서는 하나의 서버에 단일 애플리케이션 파일(JAR, WAR, EAR 등)만 배포하면 되지만, 마이크로서비스에서는 여러 개의 애플리케이션을 개별적으로 배포해야 합니다.

따라서 어떻게 수백 개의 마이크로서비스를 효율적으로 배포할 수 있는가?가 중요한 과제가 됩니다. 단순히 여러 개의 서버나 가상 머신을 사용하는 것은 비용과 관리 측면에서 비효율적이며, 실제로 실현 가능하지 않습니다.

환경을 어떻게 구성할 것인가?

코드가 개발자의 로컬 환경에서 시작되어 최종적으로 프로덕션 환경에 배포될 때까지 여러 환경을 거칩니다. 이 과정에서 각 환경의 요구사항에 맞게 애플리케이션을 수정하고 구성하는 작업은 매우 복잡하고, 특히 수백 개의 마이크로서비스에 대해 동일한 작업을 반복해야 할 경우 큰 부담이 됩니다.

예를 들어, 특정 JDK 버전이나 특정 웹 서버 설정, 폴더 구조, 데이터베이스 구성 등 다양한 요구사항을 가진 마이크로서비스가 있을 수 있습니다. 이러한 이식성 문제를 어떻게 최소한의 노력과 비용으로 해결할 수 있는가?가 또 다른 도전 과제입니다.

확장은 어떻게 할 수 있을까?

모놀리식 애플리케이션의 확장은 상대적으로 쉽습니다. 하나의 서버를 복제하여 트래픽 증가에 대응할 수 있습니다. 하지만 마이크로서비스에서는 각 서비스가 독립적으로 확장되어야 하며, 필요한 경우에만 확장되고, 트래픽이 줄어들면 자동으로 축소될 수 있어야 합니다.

따라서 어떻게 특정 마이크로서비스를 필요에 따라 자동으로 확장하고 축소할 수 있을까?가 중요한 문제로 떠오릅니다.

해결책 >> 컨테이너

이러한 문제를 해결하기 위해 컨테이너화(Containerization)가 필요한데, 이는 애플리케이션을 자체적으로 격리된 환경에서 실행할 수 있도록 패키징하는 것을 의미합니다. 컨테이너는 애플리케이션이 실행되는 데 필요한 모든 것을 포함하며, 이를 통해 다양한 환경에서 일관된 동작을 보장할 수 있습니다.

컨테이너화를 구현하기 위한 도구 : Docker

컨테이너화를 구현하기 위한 대표적인 도구가 Docker입니다. Docker는 애플리케이션을 컨테이너로 패키징하고, 이를 다양한 환경에서 실행할 수 있도록 지원합니다. Docker를 사용하면 애플리케이션을 Docker 이미지로 변환하고, 이를 어디서나 실행할 수 있는 Docker 컨테이너로 배포할 수 있습니다.

  • Docker 컨테이너: 애플리케이션이 필요한 모든 종속성을 포함하는 경량화된 환경.
  • 장점: 컨테이너는 특정 JDK 버전, 웹 서버 설정, 데이터베이스 구성 등을 포함하여 다양한 환경에서 동일하게 실행될 수 있습니다. 이를 통해 이식성 문제를 해결할 수 있습니다.

컨테이너화의 개념을 이해하기 쉽게 설명하기 위해 선박과 컨테이너의 비유를 사용할 수 있겠습니다. 선박이 다양한 물품을 효율적으로 운송하기 위해 각 물품을 별도의 컨테이너에 담아 운송하듯이, 마이크로서비스도 컨테이너에 담아 격리된 환경에서 실행할 수 있습니다.

비유적으로 표현하면, 선박의 컨테이너를 생각할 수 있겠습니다.
선박의 컨테이너는 물품을 최적의 조건에서 보호하고, 공간을 효율적으로 사용하게 해줍니다. 이와 마찬가지로, Docker 컨테이너는 각 마이크로서비스가 필요한 환경을 자체적으로 포함하여 일관된 실행을 보장합니다

이제 Docker와 컨테이너화를 통해 마이크로서비스를 패키징하고 배포하는 방법을 알아보겠습니다.

profile
무슨 생각하며 사니

0개의 댓글