AWS 서비스로 웹 애플리케이션 만들기

Jeongmin Yeo (Ethan)·2021년 1월 22일
5
post-thumbnail

2021.01.21 AWS Builders Online Series - AWS 서비스로 웹 애플리케이션 만들기 세션을 보고 정리한 글입니다.

정리한 내용은 다음과 같습니다.

  • 웹 어플리케이션의 정의
  • AWS 컴퓨팅 서비스
  • Amazon EC2 기반 웹 어플리케이션 아키텍처
  • Amazon EC2
  • Amazon RDS
  • Amazon Simple Storage Servcie S3
  • 컨테이너 기반 웹 어플리케이션
  • Amazon EKS 기반 웹 어플리케이션 아키텍처
  • Amazon EKS
  • Amazon ECR
  • 서버리스 웹 어플리케이션
  • Amazon Serverless 웹 어플리케이션 아키텍처
  • AWS Lambda
  • AWS DynamoDB

1. 웹 어플리케이션 정의

웹 어플리케이션은 인터넷을 통해 웹 브라우저에서 이용할 수 있는 응용 프로그램입니다.

보이는 이미지 처럼 사용자가 웹 브라우저를 통해 서비스를 요청하면 서버쪽에서 요청을 처리해 서비스를 제공해주는 어플리케이션입니다.

서비스를 제공하는 웹 어플리케이션은 다양한 구성요소가 있습니다.

그런 요소들을 하나하나씩 소개해보겠습니다.


2. AWS 컴퓨팅 서비스

AWS 컴퓨팅 서비스는 다음과 같이 다양하게 있습니다.

1. Amazon EC2

AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공하는 서비스로 Amazon EC2를 사용하면 하드웨어에 투자할 필요가 없는 클라우드 환경에서의 애플리케이션을 더 빨리 개발하고 배포할 수 있습니다.

2. Amazon ECS, EKS and Fargate

EC2 기반 managed cluster 위에서 실행되는 도커를 관리하기 위한 컨테이너 관리 서비스입니다.

3. AWS Lambda

이벤트 또는 외부 요청 또는 일정에따라 코드를 실행하는 서비스입니다.


3. EC2 기반 웹 어플리케이션 아키텍처

웹 어플리케이션은 개발자들의 개발의 편의성을 위해 일반적으로 프레젠테이션 레이어, 애프리케이션 레이어, 데이터베이스 레이어 이렇게 3티어로 나뉩니다.

Amazon EC2를 기반으로 이 멑티 티어 웹 어플리케이션을 구축한다면 위에 있는 이미지와 같은 아키텍처를 가집니다.

이 아키텍처의 특징으로는 온프레미스에서 클라우드로 옮길때 단순히 OS나 리소스를 옮기는 lift-and-shfit 작업만 수행하면 됩니다.

EC2 기반 웹 어플리케이션 아키텍처의 구성요소는 다음과 같습니다.

1. Amazon Route 53

사용자가 요청했을 때 가장 처음으로 만나는 부분이며 DNS 웹 서비스입니다. 도메인 명을 등록 구매 관리할 때 사용됩니다.

2. Amazon CloudFront

콘텐츠 전송 네트워크 서비스(CDN)으로 짧은 지연속도와 빠른 전송속도로 컨텐츠를 전송해주는 서비스 입니다.

이 CloudFront를 기점으로 정적인 콘텐츠 전송과 동적인 컨텐츠 전송이 나뉩니다.

3. Amazon S3

html, css, js 파일부터 이미지나 동영상 같은 정적인 컨텐츠를 저장하는 서비스 입니다.

4. Elastic Load Balancing(ELB)

애플리케이션 동적인 컨텐츠를 처리하는 곳입니다.

애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수등을 여러 대상에 자동으로 분산시키는 서비스를 제공해줍니다.

5. Amazon EC2 Auto Scaling Group

Amazon EC2의 경우 트래픽을 탄력적으로 처리하기 위해 Auto Scaling Group을 이용합니다.

Auto Scaling Group을 ELB에 걸어주면 Load Balancer를 통해 유입되는 요청을 여러 EC2로 분산할 수 있습니다.

이 Auto Scaling Group은 다음과 같은 두가지 기능을 제공해줍니다.

  1. Fleet management (비정상 인스턴스 교체) - 손상된 인스턴스를 자동으로 교체해줍니다.

  2. Dynamic Scaling (트래픽에 따른 확장) - 특정 metric 값을 기반으로 수평적 확장을 해줍니다.

6. Amazon RDS

실질적인 데이터를 가지고 있는 데이터 티어입니다.

NoSQL을 쓰고 싶다면 Amazon DynamoDB를 사용하기도 합니다.

이후 자세하게 설명하겠습니다.


4. Amazon EC2

Amazon EC2의 특징은 다음과 같습니다.

  • 크기 조정이 가능한 컴퓨팅 파워를 제공합니다.

  • AWS CLI, API로도 수행할 수 있지만 클릭만으로 간단하게 배포할 수 있습니다.

  • 워크로드 목적에 따른 다양한 인스턴스 타입을 제공합니다.

    • 웹 서버의 경우 컴퓨팅, 메모리 및 네트워킹 리소스를 비교적 균형있게 사용합니다. 그러므로 이런 경우 인스턴스의 타입은 M타입이나 T타입이 선호됩니다.
  • 고객의 요구사항에 따라 비용을 최적화 할 수 있는 다양한 구매 옵션을 제공합니다.

    • On-Demand

      • 사용한 만큼만 지불할 때 사용되는 옵션이며 단기에 갑작스럽게 트래픽이 튈 때 사용하는 옵션으로 적합합니다.
    • Savings Plans

      • 사용량을 약정하는 옵션입니다.
    • Reserved Instance

      • 용량 예약을 통해 할인을 제공하는 옵션입니다.
    • Spot Instance

      • 온디멘드보다 최대 90%까지 저렴하게 사용할 수 있는 옵션으로 비딩을 통해 구입이 가능한 방식입니다.

      • Stateless한 성격을 지닌 서비스에 사용하면 비용 효율화를 꾀할 수 있습니다.

      • 또는 응용. 프로그램의 실행 시기와 응용 프로그램이 언제 중단되는지 알 수 있는 경우에 적합한디ㅏ.

  • 보안 및 네트워크 구성과 관련 스토로지를 제공합니다.

  • NginX AMI나 Bitnami AMI같은 다양한 AMI를 제공합니다.


5. Amazon RDS

Amazon RDS의 특징은 다음과 같습니다.

  • 관리형 관계형 데이터베이스

  • MySQL, PostgreSQL, MariaDB, MS SQL Oracle과 같은 다양한 데이터베이스 엔진을 제공합니다.

  • 하드웨어 준비나 DB 소프트웨어 설치 및 관리 작업이 필요 없습니다.

  • 다중 AZ(가용영역)은 active-standby DB를 서로 동기식 복제를 통한 자동화된 백업, 스냅샷, 장애조치를 취할 수 있습니다.

    • RDS에서 하나의 기본 DB 인스턴스를 생성하면 동시에 다른 가용 영역(AZ)의 예비 인스턴스에 데이터를 복제합니다. 그리고 이런 각 AZ는 물리적으로 분리된 자체 독립 인프라에서 실행되므로 안정성을 제공합니다.

    • 이를 통해 인프라 장애가 발생하더라도 RDS가 예비 인스턴스로 자동 장애 조치를 수행해서 바로 데이터베이스 작업을 재개하는게 가능합니다.

    • 장애 조치 후에도 DB 엔드포인트가 달라지진 않습니다.

    • active-standby란 기본적인 HA(High Availability) 방법이며 두대 중 하나는 활성화 되어 동작하고 하는 장애 등의 경우를 대비해서 대기시키는 구성입니다.

  • 몇번의 클릭으로 다운 타임 없이 컴퓨팅 및 스포토지 확장 가능합니다.

    • 스토로지 auto scaling 기능을 통해 용량을 자동으로 확장시킬 수 있습니다.
  • 성능을 위해 SSD 스트로지를 제공하고 보장된 I/O를 제공합니다.

  • 다양한 서비스와 연동중 저장 및 전송에 암호화를 지원합니다.

  • 확장성을 위해서 읽기 전용 복제본을 추가하고 AZ 장애 발생 시 데이터베이스 가용성을 유지하는게 가능합니다.

Amazon RDS Performance Insights

Amazon RDS Performance Insights는 데이터베이스 성능을 표시해서 성능 문제를 분석하도록 도와주는 툴입니다.

부하를 일으키는 SQL 문 파악 및 원인을 알 수 있고 대기시간, SQL 문, 호스트 또는 사용자 기준으로 부하 필터링이 가능합니다.

그리고 사용자를 위한 대시보드는 커스터마이징이 가능합니다.


6. Amazon Simple Storage Servcie S3

Amazon Simple Storage Service(S3) 특징은 다음과 같습니다.

  • 정적인 컨텐츠를 보관하는 서비스입니다.

  • 뛰어난 확장성, 데이터 가용성 및 보안과 성능을 제공하는 객체 스토로지 서비스입니다.

  • 99.999999999% (11개의 9)의 데이터 내구성을 가지고 있기 때문에 데이터 손실 걱정이 없습니다.

  • 비용 효율적인 스토로지 클래스이며 간편한 데이터 관리와 엑세스 제어가 가능합니다.

  • 데이터의 성격에 따라 각기 다른 스토로지 클래스에 배치하는게 가능합니다.

  • Static Website content hosted 기능을 제공합니다. 이 기능을 이용해 S3에 있는 파일을 인터넷에 배포하는게 가능합니다.


7. 컨테이너 기반 웹 어플리케이션

근래 들어 많은 기업 및 조직은 모던 애플리케이션을 통해 애플리케이션을 설계 구축 및 관리하는 방식을 모듈식 아키텍처 패턴
서비리스 운영패턴, 마이크로 서비스 아키텍처등으로 바꾸고 있습니다.

컨테이너 기반 웹 어플리케이션에서 제공하는 오케스트레이션 툴은 Amazon ECS, Amazon EKS가 있습니다.

Amazon ECS는 Docker 컨테이너를 지원하는 컨테이너 관리 서비스입니다.

Amazon EKS는 오픈 소스인 k8s의 경험을 control plane 설치와 운영 필요 없이 사용할 수 있는 관리형 서비스입니다.

컨테이너를 구동시킬 컴퓨팅 레이어는 Amazon EC2와 컨테이너에 적합한 서비리스 컴퓨팅 엔진인 AWS Fargate가 있습니다.


8. Amazon EKS 기반 웹 어플리케이션 아키텍처

Amazon EKS 기반 웹 어플리케이션 아키텍처의 구성요소는 다음과 같습니다.

1. Amazon Route 53, Amazon CloudFront, Amazon S3

2. Application Load Balancer

사용자의 요청이 Route 53 CloudFront를 타고 도달하는 곳으로 해당 트래픽은 K8s pod에 도달해 요청을 처리합니다.

3. EKS Worker Nodes

EKS Worker Node가 EC2 인스턴스들이라고 생각하면 편합니다.

기존의 EC2 대신 컨테이너 워크로드로 넘어오면서 하나의 큰 EC2 웹 서버가 서비스 단위로 쪼개지고 이러한 서비스 단위들이 pod들로 올라가는 것입니다.

4. 데이터 티어 (Amazon DynamoDB)

고성능을 제공하는 DynamoDB를 사용하는 경우가 많습니다.

5. Amazon ECR(Elastic Container Registry)

컨테이너 이미지를 관리하는 곳입니다.

6. Amazon CloudWatch

Amazon CloudWatch는 애플리케이션 및 인프라를 모니터링 기능을 사용하여 서비스를 관리합니다.


9. Amazon EKS

Amazon EKS의 특징은 다음과 같습니다.

  • Kubernetes를 손쉽게 실행할 수 있는 관리형 서비스입니다.

    • Upstream k8s이기에 k8s 커뮤니티에 존재하는 플러그인들과 툴들을 그대로 사용할 수 있는 이점이 있다
      고가용성의 안전한 클러스터 제공합니다.
  • AWS가 k8s 컨트롤 플레인 단을 관리해주기 때문에 고가용성의 안전한 클러스터 제공합니다.

  • 패치 적용, 노드 프로비저닝 및 업데이트와 같은 주요 테스크 자동화 가능이 가능합니다.

  • Amazon ECR, ELB, AWS IAM, Amazon VPC와 같은 다양한 AWS 서비스들과 쉽게 연동 가능합니다.

  • re:Invent에서 나온 Amazon EKS의 추가적인 기능은 다음과 같습니다.

    • Amazon EKS Anywhere

      • Amazon EKS를 온프레미스 인프라에 배포할 수 있는 AWS EKS Anywhere이 추가되었습니다.
    • Amazon EKS Distro

      • Amazon EKS에서 오픈소스 K8s의 배포판을 사용할 수 있습니다.
    • Amazon EKS Add-ons and dashboard

      • EKS add-ons을 통해 현재의 클러스터에 add-ons을 구성하고 관리할 수 있습니다.

Amazon EKS Mixed Data Plane

컴퓨팅 레이어인 AWS Fargate와 Amazon EC2 RI 및 Spot 옵션을 통한 비용 감소를 동시에 사용이 가능합니다.


10. Amazon Elastic Container Registry(ECR)

컨테이너 워크로드를 사용한다면 컨테이너 이미지 및 아티팩트를 저장하는 레파지토리가 필요합니다.

Amazon Elastic Container Registry(ECR)의 특징은 다음과 같습니다.

  • 배포 워크플로우 최소화됩니다.

    • ECR에 저장되어 있는 이미지를 Amazon EKS, ECS, Lambda, Fargate에 쉽게 배포할 수 있습니다.
  • 권한 제어 및 수명 주기 정책 규칙 설정이 가능합니다.

  • 이미지 취약성 스캐닝이 추가 비용없이 가능합니다.

  • 기존에 프라이빛 레파지토리만 제공됐다면 이젠 퍼블릭/프라이빗 레파지토리 둘 다 사용 가능합니다.

  • 교차 리전 교차 계정 복제가 가능합니다. 즉 다른 리전이나 다른 계정에 복제할 수 있습니다.


11. 서버리스 웹 어플리케이션

서버리스 웹 어플리케이션은 컨테이너보다 더 작은 소스코드 단위의 함수를 이용해 배포가 가능합니다.

실제 서버가 없는게 아니라 서버에 대한 고민없이 사용할 수 있다는 의미입니다.

서버리스는 Lambda와 Fargate와 같은 컴퓨팅 리소스에 국한된게 아니고 다양한 서비스들이 서버리스로 제공합니다.

기본적으로 AWS 서버리스 서비스들은 관리형 서비스로 들어오는 서비스 요청에 맞게 알아서 스케일링을 관리해줍니다. 따라서 스케일링 걱정을 안해도 됩니다.


12. 서버리스 웹 어플리케이션 아키텍처

서버리스 웹 어플리케이션 아키텍처의 구성요소는 다음과 같습니다.

1. Amazon Route 53

2. Amazon API Gateway

Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스입니다.

API는 애플리케이션이 백엔드 서비스의 데이터, 비즈니스 로직 또는 기능에 액세스할 수 있는 "정문" 역할을 합니다.

API Gateway를 사용하면 실시간 양방향 통신 애플리케이션이 가능하도록 하는 RESTful API 및 WebSocket API를 작성할 수 있습니다.

3. AWS Amplify

AWS Amplify를 이용해 Amazon CloudFront와 S3의 static한 웹 호스팅 역할을 대체할 수 있습니다.

4. AWS Cognito

Amazon Cognito를 사용하면 웹과 모바일 앱에 빠르고 손쉽게 사용자 가입, 로그인 및 액세스 제어 기능을 추가할 수 있습니다.

Amazon Cognito에서는 수백만의 사용자로 확장할 수 있고, Apple, Facebook, Google 및 Amazon과 같은 소셜 자격 증명 공급자와 엔터프라이즈 자격 증명 공급자(SAML 2.0 및 OpenID Connect 사용)를 통한 로그인을 지원합니다.

5. AWS Lambda

AWS Lambda는 서버 프로비저닝 또는 관리, 워크로드 인식 확장 로직 생성, 이벤트 통합 유지, 또는 런타임 관리 없이 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다.

Lambda에서는 사실상 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행할 수 있습니다.

코드를 ZIP 파일 또는 컨테이너 이미지로 업로드하기만 하면 Lambda는 자동으로 그리고 정확하게 컴퓨팅 실행 능력을 할당하고, 모든 트래픽 규모에 대하여 수신 요청 또는 이벤트를 기반으로 코드를 실행합니다.

6. AWS DynamoDB

AWS DynamoDB는 어떤 규모에서도 10밀리초 미만의 성능을 제공하는 키-값 NoSQL 데이터베이스입니다.

완전관리형의 내구성이 뛰어난 다중 리전, 다중 활성 데이터베이스로서, 인터넷 규모 애플리케이션을 위한 보안, 백업 및 복원, 인 메모리 캐싱 기능을 기본적으로 제공합니다.


13. AWS Lambda

AWS Lambda의 특징은 다음과 같습니다.

  • 서버리스 컴퓨팅 서비스입니다.

    • 서버를 프로비저닝 하거나 관리할 필요없이 코드를 업로드하기만 하면 코드를 실행할 수 있습니다.
  • 이벤트에 대한 응답으로 코드를 진행합니다.

    • Amazon API Gateway와 같은 서비스들이 AWS Lambda를 트리거하기만 하면 실행되는 형태입니다.
  • 다양한 툴을 제공합니다.

    • AWS SAR(Serverless Application Repository)

      • AWS Serverless Application Repository는 서버리스 애플리케이션용 관리형 리포지토리입니다. 이를 사용하여 팀, 조직 및 개인 개발자는 재사용 가능한 애플리케이션을 저장 및 공유가 가능합니다.
    • AWS SAM(Serverless Application Model)

      • AWS Serverless Application Model은 서버리스 애플리케이션을 구축하기 위한 오픈 소스 프레임워크입니다.

      • 함수, API, 데이터베이스 및 이벤트 소스 매핑을 표현하는 단축 구문을 제공합니다. 리소스당 몇 줄만 사용해도 원하는 애플리케이션을 정의하고 YAML을 사용하여 모델링할 수 있습니다.

  • 최대 10GB 메모리를 지원합니다.

    • AWS Lambda에 붙일 수 있는 메모리가 3배 증가해 이젠 10GB 메모리 사용하는게 가능해졌습니다.

    • 즉 멀티 스레드 및 멀티 프로세스 애플리케이션이 더 빠르게 실행될 수 있습니다.

  • 컨테이너 이미지 지원이 가능합니다.

  • 100ms에서 1ms로 실행 시간과금 세분화가 가능해졌습니다.


14. AWS DynamoDB

AWS DynamoDB의 특징은 다음과 같습니다.

  • 어떤 규모에서든 빠르고 유연한 NoSQL 데이터베이스 서비스를 제공합니다.

    • 어떤 규모에서도 10밀리 초 미만의 응답시간을 보장합니다.

    • 수백만의 동시 사용자 및 요청에 대해서도 안전하게 확장이 가능합니다.

  • 용량에 맞게 테이블 자동 확장 축소하는 기능이 있습니다.

  • 글로벌 서비스를 위한 글로벌 데이터베이스 사용이 가능합니다.

  • DynamoDB Stream 기능을 제공합니다.

    • 테이블 업데이트 작업에 대한 기록을 스트리밍으로 받을 수 있는 기능입니다.
  • Amazon DAX(DynamoDB Accelerator) 기능을 제공합니다.

    • DynamoDB를 위한 완전관리형 인 메모리 캐시 서비스를 사용하면 밀리초에서 마이크로초까지 최대 10배의 성능을 출력할 수 있는 기능입니다.
profile
좋은 습관을 가지고 싶은 평범한 개발자입니다.

0개의 댓글