[ 고지 사항 (Disclaimer) ]
본 컨텐츠는 고객의 편의를 위하여 AWS 서비스 설명을 위해 제작, 제공된 것입니다. 만약 AWS 사이트와 컨텐츠 상에서 차이나 불일치가 있을 경우 AWS 사이트 (AWS.amazon.com)가 우선합니다. 또한 AWS 사이트 상에서 한글 번역문과 영어 원문에 차이나 불일치가 있을 경우(번역의 지체로 인한 경우 등 포함), 영어 원문이 우선합니다.
본 문서는 AWS Serverless Multi-Tier Architectures With Amazon API Gateway and AWS Lambda 내용에 기반하여 작성 되었습니다.
이 문서는 정보 제공의 목적으로만 제공됩니다. 본 문서의 발행일 당시 AWS의 현재 제품 오퍼링 및 실행방법 등을 설명하며, 예고 없이 변경될 수 있습니다. 고객은 본 문서에 포함된 정보나 AWS 제품 또는 서비스의 사용을 독립적으로 평가할 책임이 있으며, 각 정보 및 제품은 명시적이든 묵시적이든 어떠한 종류의 보증 없이 “있는 그대로” 제공됩니다. 본 문서는 AWS, 그 자회사, 공급업체 또는 라이선스 제공자로부터 어떠한 보증, 표현, 계약 약속, 조건 또는 보장을 구성하지 않습니다. 고객에 대한 AWS의 책임 및 의무는 AWS 계약에 의해 관리되며 본 문서는 AWS와 고객 사이의 어떠한 계약에도 속하지 않으며 계약을 변경하지도 않습니다.
© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.
개요
이 백서는 AWS (Amazon Web Services)의 혁신 기술을 사용하여 멀티 티어 아키텍처 설계 방식을 변경하고 마이크로 서비스, 모바일 백엔드 및 단일 페이지 애플리케이션과 같은 널리 사용되는 패턴을 구현하는 방법을 보여줍니다.
설계자와 개발자는 Amazon API Gateway, AWS Lambda 및 기타 서비스를 활용하여 멀티 계층 애플리케이션을 생성하고 관리하는 데 필요한 개발 및 운영주기를 줄일 수 있습니다.
소개
멀티 계층 응용 프로그램 (3 계층, n 계층 등)은 수십 년 동안 기초적인 아키텍처 패턴이었으며 사용자 용 응용 프로그램에 널리 사용되는 패턴입니다. 멀티 계층 아키텍처를 설명하는데 사용되는 언어는 다양하지만 일반적으로 멀티 계층 응용 프로그램은 다음 구성 요소로 구성됩니다.
- 프리젠 테이션 계층 : 사용자가 직접 상호 작용하는 구성 요소 (웹 페이지, 모바일 앱 UI 등)
- 논리(로직) 계층 : 사용자 작업을 응용 프로그램 기능 (CRUD 데이터베이스 작업, 데이터 처리 등)으로 변환하는 데 필요한 코드
- 데이터 계층 : 응용 프로그램과 관련된 데이터를 보유하는 저장 매체 (데이터베이스, 객체 저장소, 캐시, 파일 시스템 등)
멀티 티어 아키텍처 패턴은 개별 팀에서 개별적으로 개발, 관리 및 유지 보수 할 수 있는 분리 가능하고 독립적으로 확장 가능한 애플리케이션 구성 요소를 보장하기 위한 일반 프레임 워크를 제공합니다.
네트워크 (계층이 다른 계층과 상호 작용하기 위해 네트워크 호출을 해야 함)의 이러한 패턴의 결과로, 계층 간 경계 역할을 하는 멀티 계층 응용 프로그램을 개발하려면 종종 미분화된 많은 응용 프로그램 구성 요소를 만들어야 합니다. 이러한 구성 요소 중 일부는 다음과 같습니다.
- 계층 간 통신을 위한 메시지 큐를 정의하는 코드
- API와 데이터 모델을 정의하는 코드
- 응용 프로그램에 대한 적절한 액세스를 보장하는 보안 관련 코드.
이러한 모든 예는 멀티 계층 애플리케이션에서는 필요하지만 구현마다 크게 다르지 않은 “보일러 플레이트”구성 요소로 간주 될 수 있습니다.
AWS는 서버리스 멀티 티어 애플리케이션을 생성 할 수 있는 다양한 서비스를 제공하여 이러한 애플리케이션을 프로덕션에 배포하고 기존 서버 관리와 관련된 오버 헤드를 제거하는 프로세스를 크게 단순화합니다. API 생성 및 관리 서비스인 Amazon API Gateway와 임의 코드 기능을 실행하는 서비스인 AWS Lambda를 함께 사용하여 강력한 멀티 티어 애플리케이션 생성을 단순화 할 수 있습니다.
Amazon API Gateway와 AWS Lambda를 통합하면 HTTPS 요청을 통해 사용자 정의 코드 기능을 직접 트리거 할 수 있습니다. 요청 량에 관계없이 API Gateway와 Lambda는 모두 애플리케이션의 요구를 정확하게 지원하도록 자동 확장됩니다 (확장 성 정보는 API Gateway 서비스 제한 참조). 이 두 서비스를 결합하면 애플리케이션에 중요한 코드만 작성하고 고 가용성 설계, 클라이언트 SDK 작성, 서버 / 운영 체제 (OS) 관리, 확장 및 클라이언트 권한 부여 메커니즘 구현
API Gateway 및 Lambda를 사용하면 서버리스 논리 계층을 만들 수 있습니다. 애플리케이션 요구 사항에 따라 AWS는 서버리스 프레젠테이션 계층 (예 : Amazon CloudFront 및 Amazon S3) 및 데이터 계층 (예 : Amazon Aurora, Amazon DynamoDB)을 생성하는 옵션도 제공합니다.
이 백서는 3 계층 웹 응용 프로그램인 멀티 계층 아키텍처의 가장 일반적인 예에 중점을 둡니다. 그러나 일반적인 3 계층 웹 응용 프로그램을 넘어 이 멀티 계층 패턴을 적용 할 수 있습니다.
3 계층 아키텍처 개요
3 계층 아키텍처는 가장 많이 사용되는 멀티 계층 아키텍처이며 단일 프레젠테이션 계층, 논리 계층 및 데이터 계층으로 구성됩니다. 그림 1은 단순하고 일반적인 3 계층 응용 프로그램의 예를 보여줍니다.
일반적인 3 계층 아키텍처 패턴에 대해 자세히 배울 수 있는 많은 유용한 자료가 온라인에 있습니다. 이 백서는 Amazon API Gateway 및 AWS Lambda를 사용하는 이 아키텍처의 특정 구현 패턴에 중점을 둡니다.
서버리스 로직 계층
3 계층 아키텍처의 논리 계층은 애플리케이션의 핵심을 나타냅니다. 여기에서 Amazon API Gateway 및 AWS Lambda를 사용하면 기존의 서버 기반 구현에 비해 가장 큰 영향을 줄 수 있습니다. 이 두 서비스의 기능을 통해 가용성이 높고 확장 가능하며 안전한 서버리스 애플리케이션을 구축 할 수 있습니다. 기존 모델에서는 응용 프로그램에 수천 대의 서버가 필요할 수 있습니다. 그러나 Amazon API Gateway 및 AWS Lambda를 활용하면 어떠한 용량의 서버 관리도 책임지지 않습니다. 또한 이러한 관리 서비스를 함께 사용하면 다음과 같은 이점이 있습니다.
AWS Lambda:
- 선택, 보안, 패치 또는 관리 할 운영 체제가 없습니다.
- 적절한 크기, 모니터링 또는 확장 서버가 없습니다.
- 초과 프로비저닝으로 인한 비용 위험 감소
- 언더 프로비저닝으로 인한 성능 위험 감소
Amazon API Gateway:
- API 배포, 모니터링 및 보안을 위한 단순화 된 메커니즘.
- 캐싱 및 컨텐츠 전달을 통한 API 성능 향상
AWS Lambda
AWS Lambda는 프로비저닝, 관리 또는 스케일링 서버 없이 지원되는 모든 언어 (Node.js, Python, Ruby, Java, Go, .NET)에서 임의의 코드 함수를 실행할 수 있는 컴퓨팅 서비스입니다.
Lambda 함수는 관리되는 격리 된 컨테이너에서 실행되며 이벤트 소스라고하는 AWS에서 제공하는 여러 프로그래밍 방식 트리거 중 하나 일 수 있는 이벤트에 대한 응답으로 트리거 됩니다 (모든 이벤트 소스에 대한 Lambda FAQ 참조).
AWS Lambda의 인기 있는 많은 사용 사례는 Amazon Simple Storage Service (Amazon S3)에 저장된 파일 처리 또는 Amazon Kinesis의 스트리밍 데이터 레코드와 같은 이벤트 중심 데이터 처리 워크 플로우를 중심으로 진행됩니다. Amazon Lambda 함수는 Amazon API Gateway와 함께 사용하면 일반적인 웹 서비스의 기능을 수행합니다. 클라이언트 HTTPS 요청에 대한 응답으로 코드를 실행합니다. Amazon API Gateway는 논리 계층의 정문 역할을 하며 AWS Lambda는 애플리케이션 코드를 실행합니다.
비즈니스 로직은 여기에 있으므로 서버가 필요하지 않습니다.
AWS Lambda는 이벤트에 의해 트리거 될 때 실행되는 핸들러라고 하는 코드 함수를 작성해야 합니다. Amazon API Gateway와 함께 AWS Lambda를 사용하기 위해 API에 대한 HTTPS 요청이 발생할 때 처리기 기능을 트리거하도록 API Gateway를 구성 할 수 있습니다. 서버리스 멀티 티어 아키텍처에서 Amazon API Gateway에서 생성 한 각 API는 필요한 비즈니스 로직을 실행하는 Lambda 함수 (및 처리기)와 통합됩니다.
논리 계층을 구성하기 위해 AWS Lambda 함수를 사용하면 애플리케이션 기능 (API 당 하나의 Lambda 함수 또는 API 방법 당 하나의 Lambda 함수)을 노출하기 위해 원하는 수준의 세분성을 정의 할 수 있습니다. Lambda 함수 내에서 핸들러는 다른 종속성 (예 : 코드, 라이브러리, 기본 바이너리 및 외부 웹 서비스로 업로드 한 다른 메소드) 또는 다른 Lambda 함수에 자유롭게 접근 할 수 있습니다.
Lambda 함수를 만들거나 업데이트하려면 필요한 모든 종속성을 정적 아카이브 (즉, .zip)을 만드는 중입니다. 콘솔 또는 AWS Command Line Interface (AWS CLI)를 통해 함수를 생성 할 때 배포 패키지 내부에서 요청 처리기 역할을 수행 할 메소드를 지정합니다. 여러 Lambda 함수 정의에 동일한 배포 패키지를 자유롭게 재사용 할 수 있습니다. 각 Lambda 함수에는 동일한 배포 패키지 내에서 고유 한 처리기가 있을 수 있습니다.
Lambda Security
Lambda 함수를 실행하려면 AWS Identity and Access Management (IAM) 정책을 통해 허용 된 이벤트 또는 서비스에 의해 트리거 되어야 합니다. IAM 정책을 사용하면 정의한 API 게이트웨이 리소스가 호출하지 않는 한 전혀 실행할 수 없는 Lambda 함수를 생성 할 수 있습니다.
각 Lambda 함수 자체는 Lambda 함수가 배포 될 때 할당 된 IAM 역할을 맡습니다. 이 IAM 역할은 Lambda 함수가 상호 작용할 수있는 다른 AWS 서비스 및 리소스 (예 : Amazon DynamoDB 테이블, Amazon S3)를 정의합니다.
Lambda 함수 내에 민감한 정보를 저장해서는 안됩니다. AWS IAM은 Lambda 실행 역할을 통해 AWS 서비스에 대한 액세스를 처리합니다. Lambda 함수 내부에서 다른 자격 증명 (예 : 데이터베이스 자격 증명, API 키)에 액세스해야하는 경우 환경 변수와 함께 AWS Key Management Service (AWS KMS)를 사용하거나 AWS Secrets Manager와 같은 서비스를 사용하여 이 정보를 유지할 수 있습니다 사용하지 않을 때는 안전합니다.
규모에 따른 성능
AWS Lambda에 업로드 된 코드는 Amazon S3에 저장되며 AWS에서 관리하는 격리 된 환경에서 실행됩니다. Lambda 함수를 확장 할 필요는 없습니다. 함수가 이벤트 알림을 수신 할 때마다 AWS Lambda는 컴퓨팅 집합 내에서 여유 용량을 찾아 정의한 런타임, 메모리, 디스크 및 시간 초과 구성으로 코드를 실행합니다. 이 패턴을 사용하면 AWS는 필요한만큼 함수 사본을 시작할 수 있습니다.
Lambda 기반 로직 계층은 항상 고객 요구에 적합한 크기입니다. Lambda PPU (Pay-Puse-Price) 요금과 함께 관리되는 확장 및 동시 실행을 통해 트래픽 급증을 신속하게 흡수 할 수 있으므로 유휴 컴퓨팅 용량에 대한 비용을 지불하지 않으면서 항상 고객 요청을 충족 할 수 있습니다.
서버리스 배포 및 관리
Lambda 함수를 배포하고 관리 할 수 있도록 다음을 포함하는 오픈 소스 프레임 워크인 AWS SAM (AWS Serverless Application Model)을 사용하십시오.
- SAM 템플릿 사양 : 간단한 업로드 및 배포를 위해 기능을 정의하고 해당 환경, 권한, 구성 및 이벤트를 설명하는 데 사용되는 구문
- SAM 명령 줄 인터페이스 (CLI) : SAM 템플릿 구문을 확인하고, 로컬로 함수를 호출하고, Lambda 함수를 디버깅하고, 패키지 / 배포 기능을 활성화 할 수 있는 명령
일반적으로 Lambda 함수를 배포하면 할당 된 IAM 역할로 정의 된 권한으로 실행되며 인터넷 연결 엔드 포인트에 도달 할 수 있습니다. 논리 계층의 핵심 인 AWS Lambda는 데이터 계층과 직접 통합되는 구성 요소입니다. 데이터 계층에 민감한 비즈니스 또는 사용자 정보가 포함 된 경우이 데이터 계층이 개인 서브넷에서 적절하게 격리되어 있는지 확인해야 합니다.
Lambda 함수가 프라이빗 데이터베이스 인스턴스와 같이 공개적으로 노출 할 수 없는 리소스에 액세스하려면 AWS Lambda 함수를 Amazon Virtual Private Cloud (Amazon VPC) 내에 배치하고 Elastic Network Interface (ENI)를 구성하여 내부 리소스에 액세스 할 수 있습니다.
Lambda를 VPC와 함께 사용하면 비즈니스 로직이 의존하는 데이터베이스 및 기타 스토리지 미디어를 인터넷을 통해 액세스 할 수 없게됩니다. 또한 VPC는 인터넷에서 데이터와 상호 작용할 수있는 유일한 방법은 사용자가 정의한 API와 사용자가 작성한 Lambda 코드 기능을 사용하는 것입니다.
Amazon API Gateway
Amazon API Gateway는 개발자가 모든 규모의 API를 쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 할 수 있도록 하는 완전 관리 형 서비스입니다. 클라이언트 (즉, 프리젠테이션 계층)는 표준 HTTPS 요청을 사용하여 API Gateway를 통해 노출 된 API와 통합됩니다. API Gateway를 통해 서비스 지향 멀티 티어 아키텍처에 노출 된 API의 적용 가능성은 개별 애플리케이션 기능을 분리하고 REST 엔드 포인트를 통해 이 기능을 노출하는 기능입니다. Amazon API Gateway에는 논리 계층에 강력한 기능을 추가 할 수 있는 특정 기능과 특성이 있습니다.
AWS Lambda와 통합
Amazon API Gateway REST API는 리소스와 메소드로 구성됩니다. 리소스는 앱이 리소스 경로 (예 : / tickets)를 통해 액세스 할 수있는 논리적 개체입니다. 메소드는 API 리소스 (예 : GET / 티켓)에 제출 된 REST API 요청에 해당합니다. API Gateway를 사용하면 Lambda 함수를 사용하여 각 메소드를 백업 할 수 있습니다. 즉, API Gateway에 노출 된 HTTPS 엔드 포인트를 통해 API를 호출하면 API Gateway가 Lambda 함수를 호출합니다.
프록시 통합 및 비 프록시 통합을 사용하여 API Gateway 및 Lambda 기능을 연결할 수 있습니다.
프록시 통합
프록시 통합에서 전체 클라이언트 HTTPS 요청은 “있는 그대로” Lambda 함수로 전송됩니다. API 게이트웨이는 전체 클라이언트 요청을 Lambda 핸들러 함수의 이벤트 매개 변수로 전달하고 Lambda 함수의 출력이 직접 클라이언트로 리턴 됩니다. (상태 코드, 헤더 등 포함).
비 프록시 통합
비 프록시 통합에서 클라이언트 요청의 매개 변수, 헤더 및 본문이 Lambda 핸들러 함수의 이벤트 매개 변수로 전달되는 방식을 구성합니다.
또한 Lambda 출력이 사용자에게 다시 변환되는 방식을 구성합니다.
API Gateway는 모의 통합 (초기 애플리케이션 개발에 유용), 프록시를 S3 객체로 직접 전송 등 AWS Lambda 외부의 추가 서버리스 리소스로 프록시 할 수 있습니다.
리전 간 안정적인 API 성능
각 Amazon API Gateway 배포에는 기본적으로 Amazon CloudFront 배포가 포함됩니다. Amazon CloudFront는 Amazon의 엣지 로케이션 네트워크를 API를 사용하는 클라이언트의 연결 지점으로 사용하는 콘텐츠 전송 서비스입니다. 이를 통해 API의 응답 대기 시간을 줄일 수 있습니다. Amazon CloudFront는 전 세계에서 여러 개의 엣지 로케이션을 사용하여 DDoS (분산 서비스 거부) 공격 시나리오에 대처할 수 있는 기능도 제공합니다. 자세한 내용은 DDoS 탄력성에 대한 AWS 모범 사례 백서를 참조하십시오.
Amazon API Gateway를 사용하여 선택적인 메모리 캐시에 응답을 저장하여 특정 API 요청의 성능을 향상시킬 수 있습니다. 이 방법은 반복 API 요청에 대한 성능 이점을 제공 할뿐만 아니라 Lambda 함수 실행 횟수를 줄여 전체 비용을 줄일 수 있습니다.
내장 기능으로 혁신을 장려하고 오버 헤드를 줄입니다.
새로운 응용 프로그램을 구축하기 위한 개발 비용은 투자입니다. Amazon API Gateway를 사용하면 특정 개발 작업에 필요한 시간을 줄이고 총 개발 비용을 절감 할 수 있으므로 조직은 보다 자유롭게 실험하고 혁신 할 수 있습니다.
초기 응용 프로그램 개발 단계에서는 새로운 응용 프로그램을 더 빨리 제공하기 위해 로깅 및 메트릭 수집 구현이 종종 무시됩니다. 이로 인해 프로덕션 환경에서 실행되는 응용 프로그램에 이러한 기능을 배포 할 때 기술 부채와 운영 위험이 발생할 수 있습니다. Amazon API Gateway는 Amazon CloudWatch와 완벽하게 통합되어 API Gateway에서 원시 데이터를 수집하여 API 실행 모니터링을 위한 거의 실시간으로 읽을 수 있는 실시간 지표로 처리합니다. API Gateway는 구성 가능한 보고서 및 디버깅을 위한 AWS X-Ray 추적을 통한 액세스 로깅도 지원합니다. 이러한 각 기능을 작성하려면 코드를 작성하지 않아도 되며 핵심 비즈니스 로직에 대한 위험 없이 프로덕션 환경에서 실행되는 응용 프로그램에서 조정할 수 있습니다.
응용 프로그램의 전체 수명은 알 수 없거나 수명이 짧은 것으로 알려져 있습니다. 시작 지점에 Amazon API Gateway가 제공하는 관리되는 기능이 이미 포함되어 있고 API가 요청을 수신 한 후 인프라 비용만 발생하는 경우 이러한 애플리케이션을 구축하기 위한 비즈니스 사례를 보다 쉽게 만들 수 있습니다. 자세한 내용은 Amazon API Gateway 요금을 참조하십시오.
신속하게 반복, 민첩성 유지
Amazon API Gateway 및 AWS Lambda를 사용하여 API의 논리 계층을 구축하면 API 배포 및 버전 관리를 단순화하여 사용자 기반의 변화하는 요구에 빠르게 적응할 수 있습니다.
API Gateway에서 API를 배포 할 때는 배포를 API Gateway 단계와 연결해야 합니다. 각 단계는 API의 스냅 샷이며 클라이언트 앱이 호출 할 수 있습니다. 이 규칙을 사용하면 개발, 테스트, 준비 또는 준비 단계에 앱을 쉽게 배포하고 단계간에 배포를 이동할 수 있습니다. API를 스테이지에 배포 할 때마다 필요한 경우 롤백 할 수 있는 다른 버전의 API를 만듭니다. 이러한 기능을 통해 기존 기능 및 클라이언트 종속성을 그대로 유지하면서 새로운 기능을 별도의 API / 함수 버전으로 릴리스 할 수 있습니다.
API Gateway는 카나리아 릴리스 배포 및 사용자 지정 도메인 이름과 같은 API 게시를 단순화하는 데 사용할 수있는 추가 배포 기능을 제공합니다.
API 보안 우선 순위 지정
모든 애플리케이션은 권한이 부여 된 클라이언트 만 API 리소스에 액세스 할 수 있어야 합니다. 멀티 계층 애플리케이션을 설계 할 때 Amazon API Gateway가 논리 계층 보안에 기여하는 여러 가지 방법을 활용할 수 있습니다.
Transit Security
전송중인 암호화를 활성화하기 위해 HTTPS를 통해 API에 대한 모든 요청을 할 수 있습니다.
API Gateway는 기본 제공 SSL / TLS 인증서를 제공합니다. 공개 API에 사용자 지정 도메인 이름 옵션을 사용하는 경우 AWS Certificate Manager를 사용하여 고유 한 SSL / TLS 인증서를 제공 할 수 있습니다.
API 인증
API의 일부로 생성 한 각 리소스 / 메소드 조합에는 AWS IAM 정책에서 참조 할 수 있는 고유한 특정 Amazon 리소스 이름 (ARN)이 부여됩니다.
Amazon API Gateway에서 API에 권한을 추가하는 일반적인 방법에는 세 가지가 있습니다.
- IAM 역할 및 정책 : 클라이언트는 API 액세스에 AWS Signature Version 4 (SigV4) 권한 부여 및 IAM 정책을 사용합니다. 동일한 자격 증명으로 필요에 따라 다른 AWS 서비스 및 리소스 (예 : Amazon S3 버킷 또는 Amazon DynamoDB 테이블)에 대한 액세스를 제한하거나 허용 할 수 있습니다.
- Amazon Cognito 사용자 풀 : 클라이언트는 Amazon Cognito 사용자 풀을 통해 로그인하고 요청의 Authorization 헤더에 포함 된 토큰을 얻습니다.
- Custom Authorizer: 베어러 토큰 전략 (예 : OAuth, SAML)을 사용하거나 요청 매개 변수를 사용하여 사용자를 식별하는 사용자 정의 권한 부여 체계를 구현하는 Lambda 함수를 정의하십시오.
액세스 제한
Amazon API Gateway는 API 키 생성 및 이러한 키와 구성 가능한 사용 계획의 연관을 지원합니다. Amazon CloudWatch로 API 키 사용을 모니터링 할 수 있습니다.
API Gateway는 API의 각 메서드에 대한 제한, 속도 제한 및 버스트 속도 제한을 지원합니다.
Amazon API Gateway와 함께 AWS WAF (Web Application Firewall)를 사용하여 API를 공격으로부터 보호 할 수 있습니다.
데이터 계층
논리 계층으로 AWS Lambda를 사용한다고 해서 데이터 계층에서 사용 가능한 데이터 스토리지 옵션이 제한되는 것은 아닙니다. Lambda 함수는 Lambda 배포 패키지에 적절한 데이터베이스 드라이버를 포함시켜 모든 데이터 스토리지 옵션에 연결하고 IAM 역할 기반 액세스 또는 암호화 된 자격 증명 (AWS KMS 또는 AWS Secrets Manager를 통해)을 사용합니다.
응용 프로그램의 데이터 저장소를 선택하는 것은 응용 프로그램 요구 사항에 따라 크게 달라집니다. AWS는 애플리케이션의 데이터 계층을 구성하는데 사용할 수 있는 많은 서버리스 및 비 서버리스 데이터 스토어를 제공합니다.
서버리스 데이터 스토리지 옵션
Amazon S3는 업계 최고의 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스입니다.
Amazon Aurora는 클라우드용으로 구축 된 MySQL 및 PostgreSQL 호환 관계형 데이터베이스로, 기존 엔터프라이즈 데이터베이스의 성능과 가용성을 오픈 소스 데이터베이스의 단순성과 비용 효율성과 결합합니다. Amazon Aurora는 서버리스 및 기존 사용 모델을 모두 제공합니다.
Amazon DynamoDB는 모든 규모에서 한 자리 밀리 초 성능을 제공하는 키-값 및 문서 데이터베이스입니다. 내장 된 보안, 백업 및 복원, 인터넷 규모의 애플리케이션을위한 인 메모리 캐싱 기능을 갖춘 완전 관리형 서버리스 멀티 리전 멀티 마스터 내구성 데이터베이스입니다.
Amazon Timestream은 IoT 및 운영 애플리케이션을 위한 빠르고 확장 가능하며 완벽하게 관리되는 시계열 데이터베이스 서비스로 관계형 데이터베이스 비용의 1/10에 하루에 수조 건의 이벤트를 쉽게 저장하고 분석 할 수 있습니다. IoT 장치, IT 시스템 및 스마트 산업 기계의 증가에 따라 시간이 지남에 따라 변화하는 방식을 측정하는 데이터 인 시계열 데이터는 가장 빠르게 성장하는 데이터 유형 중 하나입니다.
Amazon QLDB (Amazon Quantum Ledger Database)는 중앙에서 신뢰할 수 있는 기관이 소유한 투명하고 불변의 암호로 확인할 수 있는 트랜잭션 로그를 제공하는 완전 관리형 원장 데이터베이스입니다. Amazon QLDB는 모든 애플리케이션 데이터 변경 사항을 추적하고 시간이 지남에 따라 완전하고 검증 가능한 변경 기록을 유지합니다.
비 서버리스 데이터 스토리지 옵션
Amazon Relational Database Service (Amazon RDS)는 사용 가능한 엔진 (Amazon Aurora, PostgreSQL, MySQL, MariaDB, Oracle 및 SQL Server)을 사용하여 관계형 데이터베이스를 보다 쉽게 설정, 운영 및 확장 할 수 있는 관리 형 웹 서비스입니다. 메모리, 성능 또는 I / O에 최적화 된 여러 다른 데이터베이스 인스턴스 유형에서 실행됩니다.
Amazon Redshift는 클라우드에서 완벽하게 관리되는 페타 바이트 규모의 데이터웨어 하우스 서비스입니다.
Amazon ElastiCache는 Redis 또는 Memcached의 완전 관리형 배포입니다. 널리 사용되는 오픈 소스 호환인 메모리 데이터 저장소를 원활하게 배포, 실행 및 확장 할 수 있습니다.
Amazon Neptune은 빠르고 안정적인 완전 관리형 그래프 데이터베이스 서비스로, 고도로 연결된 데이터 세트와 함께 작동하는 애플리케이션을 쉽게 구축하고 실행할 수 있습니다. Amazon Neptune은 널리 사용되는 그래프 모델인 Property Graph 및 W3C의 RDF와 각각의 쿼리 언어를 지원하므로 고도로 연결된 데이터 세트를 효율적으로 탐색하는 쿼리를 쉽게 작성할 수 있습니다.
Amazon DocumentDB (MongoDB 호환)는 MongoDB 워크로드를 지원하는 빠르고 확장 가능하며 가용성이 높으며 완전히 관리되는 문서 데이터베이스 서비스입니다.
마지막으로 Amazon EC2에서 독립적으로 실행되는 데이터 저장소를 멀티 계층 애플리케이션의 데이터 계층으로 사용할 수도 있습니다.
프리젠테이션 계층
프리젠테이션 티어는 인터넷을 통해 노출 된 API Gateway REST 엔드 포인트를 통해 로직 티어와 상호 작용합니다. 모든 HTTPS 가능 클라이언트 또는 장치는 이러한 앤드포인트와 통신 할 수 있으므로 프레젠테이션 계층에 다양한 형태 (데스크톱 응용 프로그램, 모바일 응용 프로그램, 웹 페이지, IoT 장치 등)를 취할 수있는 유연성을 제공합니다.
요구 사항에 따라 프레젠테이션 계층은 다음 AWS 서버리스 제품을 사용할 수 있습니다.
- Amazon Cognito는 서버없는 사용자 자격 증명 및 데이터 동기화 서비스로, 웹 및 모바일 앱에 사용자 가입, 로그인 및 액세스 제어를 빠르고 쉽게 추가 할 수 있습니다. Amazon Cognito는 수백만 명의 사용자로 확장하고 Facebook, Google 및 Amazon과 같은 소셜 자격 증명 공급자 및 SAML 2.0을 통한 엔터프라이즈 자격 증명 공급자와의 로그인을 지원합니다.
- Amazon CloudFront가 포함 된 Amazon S3 : Amazon S3를 사용하면 웹 서버를 제공하지 않고도 S3 버킷에서 직접 단일 페이지 애플리케이션 (SPA)과 같은 정적 웹 사이트를 제공 할 수 있습니다. Amazon CloudFront를 관리형 콘텐츠 전송 네트워크 (CDN)로 사용하여 성능을 향상시키고 관리 형 또는 사용자 지정 인증서를 사용하여 SSL / TL을 활성화 할 수 있습니다.
네트워킹 구성 및 애플리케이션 요구 사항에 따라 Amazon API Gateway API가 CORS (Cross-Origin Resource Sharing)와 호환되도록 해야 할 수 있습니다. CORS 준수는 웹 브라우저가 정적 웹 페이지 내에서 API를 직접 호출 할 수 있도록 합니다.
Amazon CloudFront가있는 웹 사이트를 배포하면 애플리케이션에 도달 할 수 있는 CloudFront 도메인 이름 (예 : d2d47p2vcczkh2.cloudfront.net)이 제공됩니다. Amazon Route 53을 사용하여 도메인 이름을 등록하여 CloudFront 배포로 보내거나 이미 소유 한 도메인 이름을 CloudFront 배포로 보낼 수 있습니다. 이를 통해 사용자는 익숙한 도메인 이름을 사용하여 사이트에 액세스 할 수 있습니다. Route 53을 사용하여 사용자 지정 도메인 이름을 API Gateway 배포에 할당하면 사용자가 익숙한 도메인 이름을 사용하여 API를 호출 할 수 있습니다.
샘플 아키텍처 패턴
Amazon API Gateway 및 AWS Lambda를 논리 계층으로 사용하여 널리 사용되는 아키텍처 패턴을 구현할 수 있습니다. 이 백서에는 AWS Lambda 기반 논리 계층을 활용하는 가장 인기있는 아키텍처 패턴이 포함되어 있습니다.
- 모바일 백엔드 : 모바일 애플리케이션은 API Gateway 및 Lambda와 통신하여 애플리케이션 데이터에 액세스합니다.
이 패턴은 서버없는 AWS 리소스를 사용하여 프레젠테이션 계층 리소스 (예 : 데스크톱 클라이언트, EC2에서 실행되는 웹 서버 등)를 호스팅하지 않는 일반 HTTPS 클라이언트로 확장 될 수 있습니다.
- 단일 페이지 응용 프로그램 : Amazon S3 및 Amazon CloudFront에서 호스팅되는 단일 페이지 애플리케이션은 API Gateway 및 Lambda와 통신하여 애플리케이션 데이터에 액세스합니다.
이러한 두 가지 패턴 외에도 Lambda 및 API Gateway가 일반적인 마이크로 서비스 아키텍처에 적용되는 방법에 대해 설명합니다. 마이크로 서비스 아키텍처는 일반적인 3 계층 아키텍처는 아니지만 응용 프로그램 구성 요소를 분리하고 서로 통신하는 상태 비 저장 개별 기능 단위로 배포하는 일반적인 패턴입니다.
모바일 백엔드
단일 페이지 애플리케이션
Lambda를 사용한 마이크로 서비스
마이크로 서비스 아키텍처 패턴은 일반적인 3 계층 아키텍처에 구속되지 않습니다. 그러나 이 인기있는 패턴은 서버리스 리소스를 사용하면 큰 이점을 얻을 수 있습니다.
이 아키텍처에서 각 응용 프로그램 구성 요소는 분리되어 독립적으로 배포 및 작동됩니다. Amazon API Gateway로 생성 된 API와 이후에 AWS Lambda에서 실행되는 기능만 있으면 마이크로 서비스를 구축 할 수 있습니다. 팀은 이러한 서비스를 자유롭게 사용하여 환경을 원하는 수준으로 분리하고 조각화 합니다.
일반적으로 마이크로 서비스 환경은 다음과 같은 어려움을 초래할 수 있습니다. 각각의 새로운 마이크로 서비스를 만들기 위한 반복적인 오버헤드, 서버 밀도/활용 최적화 문제, 여러 버전의 마이크로 서비스를 동시에 실행하는 복잡성, 여러 개별 서비스와 통합하기 위한 클라이언트 측 코드 요구 사항의 확산 등입니다.
서버리스 리소스를 사용하여 마이크로 서비스를 만들면 이러한 문제를 해결하기가 더 쉬워지고 경우에 따라 단순히 사라집니다. 서버리스 마이크로 서비스 패턴은 각 후속 마이크로 서비스 생성에 대한 장벽을 낮 춥니 다 (Amazon API Gateway는 기존 API 복제 및 다른 계정에서 Lambda 함수 사용도 가능). 서버 활용 최적화는 더 이상이 패턴과 관련이 없습니다. 마지막으로 Amazon API Gateway는 프로그래밍 방식으로 생성 된 클라이언트 SDK를 널리 사용되는 여러 언어로 제공하여 통합 오버 헤드를 줄입니다.
결론
멀티 계층 아키텍처 패턴은 유지 관리, 분리 및 확장이 쉬운 응용 프로그램 구성 요소를 만드는 모범 사례를 장려합니다. Amazon API Gateway를 통해 통합이 발생하고 AWS Lambda 내에서 계산이 발생하는 논리 계층을 생성하면 이러한 목표를 실현하면서 이를 달성하는 노력의 양을 줄일 수 있습니다. 이러한 서비스를 함께 사용하면 일반적인 서버 기반 인프라 관리와 관련된 오버 헤드를 제거하면서 클라이언트 및 안전한 환경에서 비즈니스 로직을 실행할 수 있는 HTTPS API 프런트 엔드를 제공 할 수 있습니다.
AWS는 IT 인프라 비용을 절감하고 기업의 핵심가치에 더욱 집중할 수 있도록 합니다.
AWS에 대한 자세한 문의사항은 여기를 눌러 주세요.
빌드업웍스는 AWS 컨설팅 파트너로 고객 비즈니스를 최우선으로 하며 고객의 클라우드의 성공적인 시작과 운영을 지원합니다.