AWS Copilot, Amazon ECS, Docker 및 AWS Fargate를 사용하여 모놀리스 애플리케이션을 마이크로서비스로 분할
자습서
소개
개요
이 자습서에서는 모놀리스 Node.js 애플리케이션을 Docker 컨테이너에 배포한 다음, 가동 중단 없이 애플리케이션을 마이크로서비스로 분해합니다. 이 Node.js는 사용자 간의 스레드와 메시지를 담은 간단한 메시지 보드를 호스트하는 애플리케이션입니다.
이 자습서가 중요한 이유
기존의 모놀리스 아키텍처는 확장하기가 어려웠습니다. 애플리케이션의 코드 기반이 커질수록 업데이트하고 유지 관리하기가 복잡해집니다. 새로운 기능과 언어, 프레임워크, 기술을 도입하기가 굉장히 어렵기 때문에 새로운 아이디어와 혁신에 제약이 있습니다.
마이크로서비스 아키텍처에서는 각각의 애플리케이션 구성 요소가 자체 서비스로 실행되며, 잘 정의된 API를 통해 다른 서비스와 통신합니다. 비즈니스 기능 위주로 구축된 마이크로서비스는 서비스마다 한 가지 기능을 수행합니다. 다양한 프레임워크와 프로그래밍 언어로 마이크로서비스를 작성한 다음 단일 서비스 또는 서비스 그룹 형태로 독립적으로 배포할 수 있습니다.
학습 목표
이 자습서에서는 Docker 컨테이너에서 간단한 모놀리스 애플리케이션을 실행하는 방법, 같은 애플리케이션을 마이크로서비스로 배포하는 방법, 가동 중단 없이 트래픽을 마이크로서비스로 전환하는 방법을 알아봅니다. 과정을 마친 뒤 이 자습서와 여기 수록된 코드를 템플릿으로 사용하여 컨테이너화된 자체 마이크로서비스를 AWS에서 구축하고 배포해 보세요.
모놀리식 아키텍처
Node.js 애플리케이션 전체가 하나의 서비스로 컨테이너 안에서 실행되며, 각 컨테이너에는 다른 모든 컨테이너와 동일한 기능이 있습니다. 한 가지 애플리케이션 기능에 대한 수요가 급증하면 해당 아키텍처 전체를 확장해야 합니다.
마이크로서비스 아키텍처
Node.js 애플리케이션의 각 기능이 자체 컨테이너 안에서 별도의 서비스로 실행됩니다. 원하는 서비스를 나머지 서비스와 독립적으로 확장하고 업데이트할 수 있습니다.
모듈
이 자습서는 다음과 같은 모듈로 구성되어 있습니다. 각 모듈을 완료해야 다음 모듈로 진행할 수 있습니다.
- 설치(20분): 이 모듈에서는 AWS CLI를 설치 및 구성하고, AWS Copilot을 설치하고, Docker를 설치합니다.
- 모놀리스 컨테이너화 및 배포(30분): 이 모듈에서는 애플리케이션을 컨테이너화하고, AWS Copilot을 사용하여 EC2 컴퓨팅 인스턴스의 관리형 클러스터를 인스턴스화하고, 이미지를 클러스터에서 실행되는 컨테이너로 배포합니다.
- 모놀리스 분할(20분): 이 단계에서는 Node.js 애플리케이션을 상호 연결된 여러 서비스로 분할하고 각 서비스의 이미지를 Amazon Elastic Container Registry(Amazon ECR) 리포지토리에 푸시합니다.
- 마이크로서비스 배포(30분): 이 모듈에서는 Node.js 애플리케이션을 Application Load Balancer(ALB) 배후의 일련의 상호 연결 서비스로 배포합니다. 그런 다음, ALB를 사용하여 트래픽을 모놀리스에서 마이크로서비스로 원활하게 전환할 수 있습니다.
- 정리(10분): 이 모듈에서는 이 자습서에서 생성한 리소스를 종료합니다. Amazon ECS에서 서비스 실행을 정지하고, ALB를 삭제하고, AWS CloudFormation 스택을 삭제하여 모든 기본 EC2 인스턴스를 포함한 Amazon ECS 클러스터를 종료하게 됩니다.