알아두면 좋은 AWS 구성 요소 - EC2, S3, RDS, EMR, Lambda, EB

4 minute read

개발 결과물의 프로덕션은 자체 서버를 통할 수도 있지만 클라우드를 이용할 수도 있다. 막상 클라우드를 사용하려 하면 일반 서버와 다른 구성 방식 때문에 환경 이해에 어려움을 겪는다. 가장 많이 사용되는 AWS 클라우드 구성 요소를 알아보며 클라우드 환경에 대해 알아보자.

주요 구성 요소

AWS 클라우드 프로덕트들은 약어로 많이 표현된다. EC2처럼 숫자가 나온 약어는 ECC와 같이 C가 2개된 약어를 한 번 더 축약한 형태로 보면 된다. 그럼 AWS의 주요 구성 요소에 대해 알아보자.

EC2: Elastic Compute Cloud

EC2는 AWS에서 제공하는 독립적인 컴퓨터 서버이다. 원하는 OS를 선택해 새로운 컴퓨터 서버를 클라우드 공간에 생성할 수 있다. 생성된 EC2 하나하나를 인스턴스라고 부르는데 AWS에서는 EC2 인스턴스를 기반으로 많은 서비스들을 만든다.

리눅스 이미지를 선택해 서버를 만들었을 경우 SSH를 통해 EC2 인스턴스에 접근한다. SSH로 서버에 들어가게 되면 우리가 일반 컴퓨터에서 코드 작업을 하는 것처럼 개발을 수행하거나 프로젝트를 배포할 수 있다.

EC2 구성은 여러 단계에 걸쳐 이루어지는데 염두해야 할 몇가지 단계가 있다.

  • AMI(Amazon Machine Image)를 통한 운영체제 선택
    • AMI는 AWS에서 사용하는 미리 구성된 운영체제 이미지이다. 리눅스, 윈도우 등 원하는 이미지를 선택하면 그에 맞는 운영체제로 EC2 서버가 구성된다. 기본적인 OS 이미지 외에 사람들이 필요에 따라 추가적인 프로그램을 설치한 이미지도 존재한다.
  • 가상 서버 사양 선택
    • vCPUs, 메모리, 스토리지, 네트워크 성능 등을 선택할 수 있다. EC2는 기본적으로 EBS(Elastic Block Store)라는 스토리지에 정보를 저장하는데 이는 추후 설정을 통해 용량을 변경할 수 있다.
  • 보안 그룹 구성
    • 방화벽과 유사한 기능이다. 기본적으로 SSH 접근을 위한 22번 포트는 뚫려있다. 방화벽 설정처럼 뚫고 싶은 포트와 허용할 IP 주소 지정을 통해 EC2 접근을 관리한다.
  • SSH 키 페어 선택
    • 마지막으로 SSH 접근을 위한 키 페어 설정 단계가 있다. 기본적으로 EC2는 키 페어를 통해 인증을 하도록 되어있다. AWS EC2 메뉴에서 키 페어를 미리 생성하고 새로운 EC2 생성 시 적용하여 SSH 접근을 위한 키 페어를 설정한다.

생성한 EC2는 웹 콘솔이나 AWS CLI 커맨드를 통해 관리할 수 있다.

ELB: Elastic Load Balancing

ELB는 EC2 인스턴스 간 부하를 조절하기 위한 EC2의 기능이다. 타겟 인스턴스를 설정하면 트래픽을 분산하거나 auto-scaling으로 인스턴스를 생성/삭제하는 방식으로 부하를 조절한다.

S3: Simple Storage Service

AWS에서 사용되는 스토리지 유형 중 하나이고 가장 널리 사용되는 스토리지이다. AWS에서 EC2는 데이터 저장을 위한 공간이라기보다는 서버의 성격이 강해 대용량 데이터를 저장하지 않는다.

빅데이터 환경에서는 파일을 저장하고 관리하는 시스템인 hdfs(hadoop file system)를 S3로 대체해 사용한다. 웹어플리케이션에서는 보통 이미지나 css, 미디어 파일을 s3에 저장해 관리한다.

S3는 이외에도 로그 수집 등 다른 AWS 요소들과 연결되어 사용된다. 형식을 지정하지 않은 채로 원하는 스토리지에 저장하기 전에 데이터를 담아두는 용도로 많이 활용된다.

RDS: Relational Databases Service

RDS는 관계형 데이터베이스를 위한 AWS 서비스다. 서버 컴퓨터 역할을 하는 EC2 내부에 MySQL, PostgreSQL 등을 깔아서 EC2 내부에서 동작하게 만들 수도 있지만 보통은 DB를 위한 별도 RDS를 만들어 작업한다. DB 서버를 분리하는 것과 같은 개념인데 이렇게 해야 서버 부하나 장애도 줄이고 서버를 옮길 때 편리하게 작업할 수 있다.

DB 포트 번호에 맞게 EC2 보안 그룹 설정을 변경한 후에 EC2와 연동해 사용할 수 있다.

DynamoDB

NoSQL을 위한 AWS 서비스이다. 관계형 데이터가 아닌 키 값을 이루어진 데이터를 취급한다. AWS만의 독자적인 DB 서비스이다. 관계형 데이터가 아닌 데이터를 저장하는 상황에서 이용할 수 있는 한 가지 옵션으로 이해하면 좋을 것 같다.

VPC: Virtual Private Cloud

AWS는 VPC를 바탕으로 네트워크 공간을 분리한다. 실제로는 서브넷이라는 개념과 함께 네트워크 공간을 분리해 다른 AWS 공간과 연결을 막는다.

Route 53

AWS의 DNS(Domain Name Service)이다. AWS EC2 인스턴스 등의 도메인 이름을 관리한다.

IAM: Identify Access Management

AWS는 한 계정 안에 다양한 서비스들이 생성되고 관리된다. AWS에서는 사용자라는 개념이 있는데 사용자를 기준으로 서비스들의 접근 및 수정 권한을 관리할 것을 권장한다. 리눅스 운영체제처럼 root 사용자는 모든 서비스에 대한 권한이 존재한다. 실제 AWS를 이용할 때는 root 외 별도 사용자를 만들고 권한을 부여해 특정 서비스만 접근하도록 관리한다.

AWS Lambda

Lambda는 서버 구성 없이 코드로 작성된 함수를 호출할 수 있도록 구성된 서비스이다. 파이썬, 자바스크립트 등 다양한 언어를 바탕으로 람다 서비스를 만들 수 있다. 많은 서버 설정이 필요 없을 때 EC2 대신 람다로 기능을 구현해 사용할 수 있다.

ECR: Elastic Container Registry

AWS에서 관리되는 docker image 저장소이다. 분석 환경이나 배포 환경을 구성할 때 프로젝트를 위한 커스텀 docker image들을 만들고 관리해야 되는데 ECR을 사용하면 AWS 환경 내에서 image들을 관리하고 다른 사람들이 사용하게 할 수 있다.

EMR: Elastic MapReduce

AWS에서 제공하는 빅데이터 프레임워크 클러스터이다. 복잡한 하둡 시스템을 직접 구성하는 것은 굉장히 어려운 일인데 AWS에서는 EMR을 이용해 EC2 구성처럼 원하는 요소를 선택해 쉽고 빠르게 하둡 에코시스템을 구축할 수 있다.

Spark, hive, presto, hdfs 등 거의 대부분의 하둡 요소들을 지원한다.

SageMaker

머신러닝 모델 학습 및 관리를 위한 AWS 서비스이다.

EB: Elastic Beanstalk

웹어플리케이션 배포 및 관리를 용이하게 하기 위한 AWS 서비스이다. .ebextensions 같은 설정파일을 설정하고 ebcli 환경에서 eb deploy 등의 커맨드로 쉽게 서비스를 배포할 수 있다. 직접 모든 구성 요소들을 설정하는 것보다 훨씬 편해 스타트업에서 많이 활용된다고 한다.

가끔 알 수 없는 버그가 발생해 사용에 애를 먹었었다. 특정 라이브러리 버전 사용 시 문제가 될 때가 있지만 전반적으로는 빠른 배포를 도와주는 좋은 서비스라고 생각한다.

기타

주요 구성 요소 외에 AWS 아키텍처를 보다보면 종종 보이는 서비스들이 있다. 몇 가지 알아보자.

AWS Kinesis

스트리밍 데이터 처리를 위한 AWS 서비스이다. 여라가지 종류의 스트리밍 데이터를 수집해서 AWS Lambda, S3 등과 같이 활용해 사용한다.

Amazon ES (Elasticsearch Service)

ElasticSerach는 오픈소스로 만들어진 분산 검색엔진이다. 비정형 정보의 검색 및 활용 분야에서 주요하게 활용되는 기술 스택이다. AWS에서도 서비스 형태로 ElasticSearch 구성 요소를 묶어서 제공한다. Amazon ES는 ElasticSearch 요소 중 Elasticsearch와 Kibana를 합쳐 만들었다. Amazon ES를 이용하면 로그 데이터를 원하는 형태로 저장하고 대시보드 형태로 만들어 모니터링할 수 있다.

참고로 ElasticSearch 주요 구성 요소는 다음과 같다.

  • Logstash: 데이터 처리 파이프 라인으로 데이터를 수집/처리해 임시로 보관하다 필요한 데이터를 ElasticSearch 서버로 보낸다.
  • ElasticSerach: 데이터 저장소 역할을 하며 분산 검색 로직을 바탕으로 원하는 정보를 추출한다.
  • Kibana: ElasticSearch 서버 데이터를 바탕으로 한 시각화 엔진이다.

예시 아키텍처

ELB, EC2, RDS, S3를 활용한 AWS 웹어플리케이션 아키텍처

/assets/images//aws-sample-architecture.png

위에서 설명한 AWS 구성 요소로 만들어진 간단한 웹어플리케이션 아키텍처이다. 여러개의 EC2 웹어플리케이션 서버가 존재하고 ELB를 통해 사용량에 따라 부하가 조절된다. DB는 EC2 내에 존재하지 않고 RDS로 따로 분리되어 있으며, jpeg, css 등의 정적 데이터는 S3에 저장되어 관리된다. 일반적인 웹어플리케이션의 기본 구조여서 AWS에서는 elastic beanstalk를 활용해 위 아키텍처로 손쉽게 배포 환경을 구성할 수 있다.

마치며

처음 AWS를 접했을 때 생소한 개념이 너무 많아 이해하는데 어려움을 겪었었다. 일단은 EC2만 알아도 내가 만든 코드를 웹 상에 배포할 수 있으니 넘어갔었는데 아키텍처 그림들을 보다가 모르겠는 부분이 많아 자주 나오는 요소들에 대해 정리해보았다. 정리한 내용이 AWS 입문자들에게 도움이 되었으면 한다.

References

Leave a comment