1. 독립적인 애플리케이션 구성요소
마이크로서비스 아키텍처를 사용하는 경우 애플리케이션을 개별 구성요소 서비스로 분리할 수 있습니다.
이러한 서비스는 다른 서비스에 영향을 미치지 않고 개발, 배포, 운영하고 크기를 조정할 수 있습니다.
특정 서비스에서 발생하는 장애의 범위는 해당 서비스로 격리됩니다.
모놀리식 인프라의 경우 웹 서버와 애플리케이션 서버에 강하게 결합되어 있습니다.
하나라도 중단이 발생하면 시스템에 치명적인 영향을 줄 수 있고, 한 계층에 서버를 추가 또는 제거하는 경우 연결된 모든 계층의 모든 서버도 연결해야 합니다.
반면 느슨한 결합을 사용하는 경우 관리형 솔루션을 시스템 계층 간의 중간자로 사용할 수 있습니다.
이렇게 하면 중계자가 구성요소 또는 계층의 장애 및 크기 조정을 자동으로 처리합니다.
구성요소를 분리하는 주요 솔루션 중 2가지는 로드밸런서와 메시지 대기열입니다.
마이크로서비스:
마이크로서비스는 소프트웨어 개발에 대한 구조적이고 조직적 접근 방식입니다.
마이크로서비스 방식을 사용하면 소프트웨어를 소규모 서비스 모음으로 설계할 수 있습니다.
각 서비스는 독립적으로 배포되고 잘 정의된 API를 통해 통신합니다.
이 프로세스를 진행하면 배포 주기의 가속화, 유지관리와 확장성 향상을 기대할 수 있습니다.
2. 컨테이너의 이점
컨테이너는 애플리케이션의 코드, 구성 및 종속성을 하나의 객체로 패키징 하는 표준화된 방식을 제공합니다.
이러한 구성 방식으로 인해 기본 하드웨어에 관계없이 일관된 애플리케이션 환경이 제공됩니다.
컨테이너는 서버에 설치된 운영체제를 공유하며, 리소스가 격리된 프로세스 형태로 실행되므로 환경에 상관없이 빠르고 안정적이며 일관된 배포를 진행할 수 있습니다.
컨테이너는 VM보다 더 빠른 가동/중단 속도를 제공하며 이식성과 확장성이 뛰어납니다.
컨테이너와 마이크로서비스:
각 마이크로서비스를 컨테이너에 구축할 수 있습니다.
각 마이크로서비스는 별도의 구성요소이므로 장애를 더 잘 견딜 수 있습니다.
컨테이너에 장애가 발생할 경우 컨테이너를 종료하고 그 특정 서비스에 새 컨테이너를 신속하게 시작할 수 있습니다.
특정 서비스에 트래픽이 많은 경우 그 마이크로서비스를 처리하는 컨테이너를 스케일아웃할 수 있습니다.
이러한 구성 방식으로 인해 전체 애플리케이션을 지원하기 위해 서버를 추가로 배포할 필요가 없습니다.
마이크로서비스와 컨테이너는 지속적 배포에도 적합합니다.
애플리케이션의 다른 구성요소에 영향을 주지 않고 개별 서비스를 업데이트할 수 있습니다.
3. 컨테이너화된 애플리케이션의 관리 옵션
컨테이너 이미지용 리포지토리로 Amazon ECR을 사용할 수 있습니다.
Kubernetes를 사용하는 경우에는 컨테이너 오케스트레이션에 Amazon EKS를 사용할 수 있습니다.
컨테이너 오케스트레이션에 Amazon ECS를 사용하는 경우 다른 AWS 서비스와 통합할 수 있습니다.
Amazon EC2에서 컨테이너를 호스트 할 수도 있고, AWS Fargate를 선택하여 서버리스 컨테이너 호스팅을 사용할 수도 있습니다.
이러한 리소스를 컨테이너의 시작 유형이라고도 합니다.
Amazon ECR:
Amazon Elastic Container Registry(Amazon ECR)는 관리형 Docker 컨테이너 레지스트리입니다.
컨테이너 이미지를 Amazon ECR로 푸시 한 다음 해당 이미지를 끌어와서 컨테이너를 시작할 수 있습니다.
Amazon ECR을 사용하면 컨테이너 이미지에 대한 압축, 암호화 및 제어할 수 있습니다.
또한 버전 관리 및 이미지 태그도 관리할 수 있습니다.
각 AWS 계정에 Amazon ECR 프라이빗 레지스트리가 제공됩니다.
레지스트리에 리포지토리를 하나 이상 생성한 후 리포지토리에 이미지를 저장할 수 있습니다.
Amazon ECS:
Amazon Elastic Container Service(Amazon ECS)는 Docker 컨테이너를 지원하는 컨테이너 관리 서비스입니다.
Amazon ECS는 컨테이너화된 애플리케이션의 크기 조정, 유지관리 및 연결을 관리합니다.
Amazon ECS를 사용하면 ECS 태스크를 시작하는 ECS 서비스를 생성할 수 있습니다.
Amazon ECS 태스크는 하나 이상의 컨테이너 이미지를 사용할 수 있습니다.
Amazon ECS 서비스는 애플리케이션의 수요를 충족하도록 실행 중인 태스크 수를 조정합니다.
AWS Fargate에서 관리하는 서버리스 인프라에서 태스크 및 서비스를 실행할 수 있습니다.
Amazon ECS는 다음과 같은 기능을 제공합니다:
완전 관리형 | 컨트롤 플레인, 노드 또는 추가 기능 관리 불필요 |
서비스 검색 | -도메인 이름 시스템(DNS) 이름에 ECS 서비스 등록 가능 - 동일한 Virtual Private Cloud(VPC) 내에서 서로 검색 가능 - 서비스 검색 사용하면 마이크로서비스 구성요소가 생성 및 종료될 때 자동으로 검색되어 네임스페이스에 추가 |
AWS 통합 | - Amazon ECR과 통합 - 컨테이너화된 애플리케이션이 컨테이너 이미지에 액세스하여 해당 이미지 실행 가능 - IAM과 통합 - 각 컨테이너에 세분화된 권한 배정으로 컨테이너 격리 가능 - Amazon CloudWatch Logs 및 Container Insights와 통합 - 컨테이너화된 애플리케이션과 인스턴스러그를 한 곳에서 확인 가능 |
유연한 호스팅 옵션 | - Amazon EC2, 그리고 AWS Fargate를 통한 서버리스 호스팅 사용 가능 - 리소스 요구사항, 격리정책 및 가용성 요구사항에 따라 클러스터 전체에 컨테이너 배치 예약 가능 |
개발 워크플로 | - 지속적 통합/지속적 배포(CI/CD)를 지원 - 다음 작업을 수행하는 CI/CD 파이프라인을 생성 가능: 1. 소스 코드 리포지토리의 변경사항 모니터링 2. 해당 소스에서 새 Docker 이미지 구축 3. Amazon ECR, Docker Hub 등의 이미지 리포지토리에 이미지 푸시 4. 애플리케이션에서 새 이미지를 사용하도록 Amazon ECS 서비스 업데이트 |
Amazon EKS:
Kubernetes는 컨테이너화된 애플리케이션을 대규모로 배포하고 관리하는데 사용할 수 있는 오픈소스 소프트웨어입니다.
Kubernetes는 Amazon EC2 컴퓨팅 인스턴스의 클러스터를 관리하고 배포, 유지관리 및 스케일링의 프로세스를 통해컨테이너를 실행합니다.
Kubernetes를 사용하면 온프레미스나 클라우드에서 동일한 도구들을 사용하여 원하는 유형의 컨테이너화된 애플리케이션을 실행할 수 있습니다.
Amazon EKS는 자체 Kubernetes 클러스터를 설치 및 운영할 필요가 없는 관리형 서비스입니다.
Amazon EKS를 사용하면 AWS에서 고가용성 서비스 및 업그레이드를 사용자 대신 관리합니다.
Amazon EKS는 세 가용 영역에서 3개의 Kubernetes 관리자를 실행합니다.
Amazon EKS에서 실행되는 애플리케이션은 모든 표준 Kubernetes 환경에서 실행되는 애플리케이션과 호환됩니다.
AWS Fargate:
AWS Fargate는 서버 또는 클러스터를 관리할 필요 없이 컨테이너를 실행하는데 사용할 수 있는 Amazon ECS와 Amazon EKS를 위한 기술입니다.
Fargate를 사용하면 컨테이너를 실행하기 위해 VM 클러스터를 프로비저닝 및 구성하고 크기를 조정할 필요가 없습니다.
컨테이너를 시작하면 Fargate가 모든 기본 컨테이너 인프라를 관리합니다.
AWS 컨테이너 서비스 선택:
AWS에 관리형 컨테이너 솔루션을 배포하려면 오케스트레이션 도구와 시작 유형을 선택해야 합니다.
https://aws.amazon.com/ko/ecs/features/
Amazon ECS는 수동 구성 작업을 줄이고, 다른 AWS 서비스와 더 쉽게 통합할 수 있는 관리형 솔루션을 제공합니다.
https://aws.amazon.com/ko/eks/features/
Amazon EKS는 자체 Kubernetes 클러스터를 설치 및 운영할 필요 없이 AWS 클라우드 또는 온프레미스에서 Kubernetes 애플리케이션을 유동적으로 시작 및 실행하고 크기를 조정할 수 있습니다.
이 옵션은 오픈소스 도구를 사용하는 조직에 적합합니다.
Amazon EKS를 사용하려면 구성을 추가로 수행해야 하지만 환경을 더욱 잘 제어할 수 있습니다.
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/cluster-auto-scaling.html
Amazon EC2에서 컨테이너를 호스트 하려면 구성을 추가로 수행해야 하지만 호스트 하는데 사용하는 리소스를 더욱 자세하게 제어할 수 있습니다.
또한 Amazon EC2에서는 더욱 비용 효율적으로 컨테이너를 호스트 할 수 있습니다.
https://aws.amazon.com/ko/fargate/
AWS Fargate에서 컨테이너를 호스팅 할 때는 서버리스 기술을 사용하는 자율 컨테이너 운영 기능이 제공됩니다.
그러므로 구성, 패치 적용 및 보안 관련 작업에 소요되는 시간을 줄일 수 있습니다.
Architecting on AWS 7.4.6 (KO): Student Guide 참고