Bin's Blog

쉽게 이해하는 AWS - 1편(제어 플레인) 본문

Backend

쉽게 이해하는 AWS - 1편(제어 플레인)

hotIce 2024. 1. 29. 14:37
728x90

들어가며

처음에 내가 AWS 관련된 문서를 읽을 때 너무 혼란스러웠다. 왜냐하면 무슨 말인지 도통 알 수가 없었기 때문이다. 그래서 동료에게 묻거나 한글과 영어자료를 계속 찾아나가면서 최대한 내가 이해하기 쉽게 써봤다. 다만 큰 맥락에서만 짚고 넘어가기 때문에 세심하게 들어가지 않는다. 따라서 내용의 깊이적인 측면에서 떨어지는 점 유념해 줬으면 좋겠다. 이 글을 쓴 이유는 처음 AWS를 접하는 분들에게 도움이 됐으면 좋겠으면 하는 바람 때문이다. AWS 서비스의 내용이 많기 때문에 하나의 글에 담으면 가독성과 집중력이 떨어질 수 있다고 판단했기 때문에 1편과 2편으로 나눠서 작성될 예정이다.

 

 

AWS란?

AWS 로고

AWS는 아마존 웹 서비스(Amazon Web Service)의 약자로 아마존 닷컴의 클라우드 컴퓨팅(가상화된 컴퓨팅 리소스 제공) 서비스인데 쉽게 말해 독립된 컴퓨터를 임대해 주는 서비스이다. 예전에는 서버를 관리하려면 직접 물리적으로 서버를 관리해야 했다. 그러나 AWS를 사용하면 클라우드 컴퓨팅으로 직접 물리적 서버를 관리하거나 자체 서버에서 소프트웨어 애플리케이션을 실행하지 않아도 된다. 쉽게 말해, AWS를 통해 우리는 보이지 않는 가상 컴퓨터를 갖고 있을 수 있게 된다.

 

AWS는 기본적으로 컨테이너 서비스를 제공한다. 크게 제어 플레인데이터 플레인으로 나눠진다. 

 

제어 플레인

제어 플레인(Control plane)이란 AWS에서 서비스를 관리하고 제어하는 부분으로, 일종의 "클라우드 뇌"라고 생각할 수 있다. 여기에는 다양한 작업과 결정이 이루어진다.

아래는 AWS의 제어 플레인을 이해하는 데 도움이 될 수 있는 간단한 비유와 설명이다. 

 

AWS의 뇌: AWS의 제어 플레인은 AWS 클라우드에서 모든 일을 조직하고 관리하는 중앙 제어 센터로 생각할 수 있다. 

이 뇌는 사용자가 클라우드에서 필요한 서비스 및 리소스를 만들고 구성하는 방법을 알고 있다. 

 

사용자의 명령 해석: 사용자는 AWS Management Console, AWS CLI, 또는 다른 도구를 통해 명령을 내린다. 이 명령은 제어 플레인에 도착하게 된다. 제어 플레인은 사용자가 요청한 동작을 이해하고 적절한 AWS 서비스에 대한 명령을 생성한다. 

인프라의 지시 사항: 제어 플레인은 클라우드의 물리적 및 가상화된 인프라에 대한 지시 사항을 생성한다. 예를 들어, 새로운 서버를 생성하거나, 데이터베이스를 설정하거나, 보안 규칙을 업데이트하는 등의 작업이 여기에 해당한다.

 

인증 및 권한 부여: 사용자의 신원 확인 및 사용자에게 허용된 권한을 확인하는 작업도 제어 플레인이 처리한다. 이를 통해 AWS는 보안을 유지하고 사용자가 정당한 권한 내에서 작업을 수행할 수 있도록 한다. 

 

서비스 간의 조정: 여러 AWS 서비스 간에 작업이 필요한 경우, 제어 플레인이 이를 조정하고 관리하여 사용자가 원하는 기능이 올바르게 동작하도록 한다. 이러한 방식으로, 제어 플레인은 사용자의 요청에 따라 클라우드 인프라를 효율적으로 관리하고 구성한다. 이것이 가능한 덕분에 사용자는 AWS를 사용하여 원하는 서비스를 쉽게 프로비저닝(생성하고 설정)하고 관리할 수 있다. 

 

 

AWS에서는 서비스의 규모에 따라 소규모의 경우 Lightsail, Beanstalk 대규모의 경우 ECS와 EKS로 나뉜다. 

 

소규모 애플리케이션 

Lightsail

AWS - Lightsail

 

Lightsail은 AWS에서 만든 가상 프라이빗 서버(VPS)이다. 

VPS는 물리 서버를 여러 개의 가상 서버로 쪼개어 사용하는 것을 말하고, 가상 서버를 여러 명의 사람들이 나눠 쓰는데, 하나의 물리 서버를 공유하지만, 각자 독립적인 서버 공간을 가지는 것이 가능하다. 

 

장점

  • 가격이 상대적으로 저렴하다.
  • 클라우드 구성의 핵심 요소를 이해하지 않고 애플리케이션, 웹 사이트 및 개발 환경을 쉽고 빠르게 배포할 수 있다. 

단점

  • 트래픽이나 리소스의 급격한 증가가 예상되는 애플리케이션에는 적합하지 않다. 따라서 입문자나 간단한 프로젝트에 적합하다.
  • 다른 서비스에 비해 더 제한된 기능을 제공하기 때문에 고급 설정이나 특정 환경에 대한 세밀한 제어를 필요하는 경우 적합하지 않다. 

 

Beanstalk

AWS Beanstalk

 

Beanstalk은 AWS 클라우드에서 애플리케이션을 쉽고 더 편한 기능으로 간단하게 배포하고 관리할 수 있는 서비스이다. 

로드밸런싱, 오토 스케일링, 모니터링 설정을 한곳에서 할 수 있다.

  • 로드밸런싱은 여러 서버 간의 작업 부하를 분산시켜 성능과 안전감을 향상시키는 매커니즘이다. 
  • 오토 스케일링은 트래픽 변동에 자동으로 대응하여 컴퓨터 리소스를 동적으로 확장 또는 축소하는 기능이다. 

Beanstalk은 Lightsail과 마찬가지로 소규모 프로젝트에 적합하다. 

 

장점

  • 추가 비용 없이 애플리케이션을 저장 및 실행하는데 필요한 AWS 리소스에 대해서만 요금을 지불하면 된다.
  • 인프라 구성, 운영, 애플리케이션 스택을 관리해 주기 때문에 사용자가 관리에 시간을 들일 필요가 없다.
  • 배포가 간단하다. 

단점

  • 간단한 사용을 목적으로 하기 때문에, 일부 고급 설정이나 커스텀 하는데 한계가 있다. 
  • 모든 서버 언어에 대한 배포를 지원하지 않는다. 
  • 서버의 세부적인 설정을 다루기 위해서는 추가적인 지식이 필요하다. 

 

대규모 애플리케이션 

ECS

AWS ECS

 

ECS는 AWS에서 제공하는 Elastic Container Service의 줄임말이며, 완전 관리형 컨테이너 오케스트레이터(컨테이너들을 지휘하는 메인 컨트롤러가 있고 그 지휘에 맞춰 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 것)이다.

 

장점

  • 관리형 서비스로 클러스터와 컨테이너 인스턴스의 배포, 로깅, 확장 등과 같은 작업들을 자동으로 처리해 주니까 개발자가 운영 부담을 줄일 수 있고 개발에 더 집중할 수 있다.
  • 간편하고 쉽게 애플리케이션을 설정하고 관리할 수 있다.
  • 애플리케이션의 요구에 따라 오토 스케일링 할 수 있어서 비용을 효과적으로 관리할 수 있다. 
  • 데이터 플레인 중에서 serverless 형태인 Fargate와 같이 사용할 수 있어서 인프라 관리를 최소화 할 수 있다. 

단점

  • 러닝 커브가 존재하기 때문에 기본적인 Docker와 AWS 서비스의 기본적인 이해가 필요하다.
  • 기능이 상대적으로 쿠버네티스와 같은 플랫폼에 비해 부족하다. 
  • 도커의 모든 기능을 사용하기에는 약간 제약이 존재하며, 세부적으로 컨트롤 하기 어렵다는 단점이 존재한다. 

 

ECS의 용어는 다음과 같다. 

  • 태스크(Task) 
    • 컨테이너가 동작하는 컴포넌트
    • 태스크는 하나 이상의 컨테이너로 구성된 애플리케이션의 실행 단위 
      • 이해를 돕기 위해 웹 애플리케이션을 가정해 보자. 이 웹 애플리케이션은 웹 서버 컨테이너, 데이터베이스 컨테이너, 백엔드 API 서버 컨테이너 등으로 구성될 수 있다. 각각의 컨테이너는 독립적으로 실행되지만, 이 컨테이너들이 함께 동작한다. 하나의 Task에 여러 개의 컨테이너를 정의하고 함께 실행할 수 있다.
  • 태스크 정의(Task Definition)
    • Docker 컨테이너가 컨테이너 인스턴스에서 실행되려면 해당 컨테이너가 어떻게 실행되어야 하는지, 얼마만큼의 리소스가 필요한지, 어떤 Docker 이미지를 사용해야 하는지, IAM 역할, CloudWatch Log 출력 등을 정의하는 작은 구성 파일(JSON 형식)을 제공해야 한다. 
      • CloudWatch Log의 경우 시스템을 모니터링 하기 위해 사용된다.
      • IAM은 API 서버가 AWS SQS, S3 등 기능을 사용할 때 리소스에 대해 권한을 줘야한다. 그래서 보통 IAM을 이용해서 AWS service 권한을 준다. 
  • 서비스(Service)
    • 지정한 수만큼 태스크를 유지하는 스케쥴러
    • 실행할 테스크의 수에 맞춰 로드 밸런서(트래픽 분산)와 태스크를 실행할 네트워크를 지정한다.
      • 실행할 네트워크는 크게 Bridge와 AWS VPC 모드로 나뉜다.
        • Bridge 모드는 간단한 애플리케이션 개발이나 로컬 테스트에 적합하고 AWS의 다양한 기능 및 보안 설정을 활용하고자 하는 경우에는 VPC 모드가 더 적합하다.
    • 태스크가 종료되는 경우 태스크 정의를 바탕으로 새로운 태스크를 만들어 지정된 태스크 수를 유지한다.
  • 클러스터(Cluster) 
    • 여러 서비스와 태스크를 관리하며, 작업의 배포와 관리를 담당합니다. 따라서 클러스터는 논리적으로 관련된 작업들을 그룹화하여 효율적으로 운영할 수 있도록 도와준다.

EKS

AWS EKS

 

EKS는 AWS 제공하는 Elastic Kubernets Service의 약자로 완전 관리형 쿠버네티스 서비스이다. 

쿠버네티스는 컨테이너 오케스트레이션 시스템으로, 애플리케이션을 여러 개(기능 단위, 서비스 단위)의 컨테이너로 나누고, 이를 관리하고 배포하는 역할을 한다. 

EKS를 통해 쿠버네티스 제어 플레인 관리를 AWS에 위임하여 건전하게 유지할 수 있다. 

 

장점

  • Fargate를 같이 사용하면 서버리스 환경에서 실행하기 때문에 서버 관리 작업이 줄어든다. 그리고 실행 중인 컨테이너에 대해서만 비용이 발생하므로, 사용량에 따라 과금이 이루어진다. 
  • 자동으로 컨테이너 확장 및 축소가 가능해서 변동하는 트래픽에 대응하여 자원을 효율적으로 사용할 수 있다. 

단점

  • 리소스 상한선이 존재한다.(최대 4vCPU, 30GB 메모리)
  • 데이터베이스나 로그 기록 같이 지속적인 데이터를 유지해야 하는 애플리케이션에 사용하기 어렵다. 

 

 

728x90

'Backend' 카테고리의 다른 글

쉽게 이해하는 AWS - 2편(데이터 플레인)  (0) 2024.02.07