개요
이 실습에서는 간단한 FAQ 마이크로서비스를 생성합니다. 이 마이크로서비스는 AWS Lambda 함수를 호출하는 Amazon API Gateway 엔드포인트를 사용하여 임의의 질문과 대답 쌍을 포함하는 JSON 객체를 반환합니다. 이 마이크로서비스의 아키텍처 패턴은 다음과 같습니다.
이 실습에서 다루는 주제
이 실습을 마치면 다음을 할 수 있게 됩니다.
- AWS Lambda 함수 생성
- Amazon API Gateway 엔드포인트 생성
- Amazon CloudWatch를 사용하여 API Gateway 및 Lambda 디버깅
수강 전 권장 사항
약간의 프로그래밍 및 애플리케이션 개발 경험이 있다면 도움이 되지만 이 실습을 수행하는 데 반드시 필요한 것은 아닙니다. 하지만 이 실습을 수행하기 전에 AWS Lambda 입문 자습형 실습을 완료해야 합니다.
기타 AWS 서비스
IAM 정책에 따라 본 실습에 액세스하는 시간에는 실습에 필요한 서비스 외에 다른 AWS 서비스는 비활성화됩니다. 또한 이 실습에서 사용하는 서비스의 기능은 실습에서 필요한 수준으로 제한되며, 일부의 경우에는 실습 설계의 의도에 따라 추가로 제한될 수 있습니다. 다른 서비스에 액세스하거나 실습 안내서에서 제공하는 것 외의 작업을 수행하는 경우 오류가 발생할 수 있습니다.
기술적 개념
마이크로서비스 아키텍처
『마이크로서비스 아키텍처 스타일은 단일 애플리케이션을 일단의 소규모 서비스로 개발하는 접근 방식으로, 각 서비스는 자체 프로세스에서 실행되고 경량 메커니즘(흔히 HTTP 리소스 API)를 사용하여 통신합니다. 이러한 서비스는 비즈니스 기능을 중심으로 빌드되고 완전 자동화된 배포 시스템에 의해 독립적으로 배포 가능합니다. 이러한 서비스에 대한 중앙집중식 관리는 최소한에 그치고 다양한 프로그래밍 언어로 작성될 수 있고 데이터 스토리지 기술을 사용할 수 있습니다.』 – James Lewis & Martin Fowler
마이크로서비스 아키텍처의 아이디어는 복잡한 대규모 시스템을 관리 및 확장이 용이하도록 분리된 독립적 서비스로 분할한다는 것입니다. 그러면 개발자가 확장성, 가용성, 유지 관리성 같은 핵심 설계 목표를 달성할 수 있습니다.
Amazon API Gateway와 AWS Lambda는 복잡한 소프트웨어 시스템의 기초가 될 수 있는 마이크로서비스 모음을 손쉽게 빌드, 전달, 유지 관리할 수 있는 완벽한 조합의 웹 서비스를 제공합니다.
이 실습에서는 훨씬 규모가 큰 시스템의 일부분을 나타내는 간단한 마이크로서비스를 개발, 배포, 디버그하는 방법을 배우게 됩니다. 이 마이크로서비스는 RESTful API와 사용자가 엔드포인트에 도달하면 실행되는 함수의 두 부분으로 구성됩니다.
애플리케이션 프로그래밍 인터페이스(API)
애플리케이션 프로그래밍 인터페이스, 즉 API는 개발자가 애플리케이션과 상호 작용하는 방법을 정의하는 지침의 모음입니다. API의 취지는 애플리케이션이 제공하는 다양한 서비스와 상호 작용하는 표준화된 방법을 구축하는 것입니다. API는 소프트웨어 개발 키트(SDK) 와 함께 사용하도록 설계되는데, SDK는 개발자가 손쉽게 API를 기반으로 다운스트림 애플리케이션을 빌드할 수 있는 도구 모음입니다.
API 우선 전략
많은 소프트웨어 조직에서는 자체 스택의 각 서비스가 먼저 항상 API로 릴리스되는 API 우선 전략을 채택하고 있습니다. 서비스를 설계할 때 해당 서비스를 사용할 수 있는 다양한 애플리케이션을 모두 알 수는 없습니다. 예를 들어 이 실습의 FAQ 서비스는 외부 웹사이트에서 FAQ 페이지를 시작하기에 이상적일 것입니다. 하지만 한 클라우드 교육 회사에서는 이 FAQ를 플래시 카드 또는 교육 문서용 교육 자료에 삽입하기를 원할 수도 있습니다. 이 FAQ가 단순히 고정 웹사이트였다면 교육 회사에서의 삽입 프로세스가 매우 어려웠을 것입니다. 마이크로서비스는 _표준 형식으로 사용_할 수 있는 API를 제공함으로써 서비스를 중심으로 한 에코시스템 구축과 초기에 고려하지 않았던 사용 사례를 조장합니다.
RESTFUL API
REST(Representational State Transfer)는 6개 제약 조건을 따르는 아키텍처를 말합니다.
- 클라이언트-서버 모델을 통해 문제를 분리합니다.
- 상태가 클라이언트에만 저장되고 클라이언트와 서버 간 통신은 상태 비저장입니다.
- 클라이언트가 데이터를 캐시하여 네트워크 효율을 개선합니다.
- 서버와 클라이언트 간에 균일한 인터페이스(API라는 형식)가 존재합니다.
- 시스템 복잡도가 증가하면 계층이 도입됩니다. 여러 계층의 RESTful 구성 요소가 존재할 수 있습니다.
- 코드를 즉석에서 다운로드하고 클라이언트를 업데이트하지 않고 변경할 수 있는 code-on-demand 패턴을 따릅니다(이 실습에서는 Lambda에서 구현됨).
이 실습은 RESTful 모델을 따릅니다. 클라이언트가 백엔드 Lambda 함수(서버)로 요청을 전송합니다. 서비스 로직은 Lambda 함수에 캡슐화되고 클라이언트가 사용할 균일한 인터페이스를 제공합니다.
RESTFUL API 빌드 모범 사례
API를 빌드하는 핵심 목표는 서비스 집합을 중심으로 혁신 에코시스템을 구축하는 것입니다. 따라서 API를 직관적이고 사용하기 쉽게 만드는 것이 중요합니다. 일반적으로 따라야 할 명명 및 메서드 체계는 다음과 같습니다.
작업URL함수GET/questions모든 질문을 반환합니다.GET/questions/1717번 질문을 반환합니다.POST/questions새 질문을 생성합니다.PUT/questions/1717번 질문을 업데이트합니다.PATCH/questions/1717번 질문은 부분적으로 업데이트합니다.DELETE/questions/1717번 질문을 삭제합니다.특정 질문을 가져오는 방법에서 API 엔드포인트는 /question/name이 아니라 /questions/identifier입니다. 그러면 API 디자이너가 /questions 엔드포인트를 사용하여 질문 그룹(모든 질문일 수도 있음)을 반환하고 /questions/identifier를 사용하여 단일 레코드 응답을 반환하는 기능을 제공할 수 있습니다. 자세한 내용은 이 실습 안내서의 마지막에 있는 추가 리소스 섹션을 참조하십시오.
다음은 훌륭한 RESTful API 예제입니다.
- AWS Elemental MediaConvert
- Spotify
- Twitch
- Netflix Genie
- Slack
AMAZON API GATEWAY 및 AWS LAMBDA
Amazon API Gateway를 사용하는 마이크로서비스는 API Gateway의 정의된 리소스 및 연결된 메서드(GET, POST, PUT 등)와 백엔드 대상으로 구성됩니다. 이 실습에서는 백엔드 대상이 Lambda 함수입니다. 그러나 백엔드 대상은 다른 HTTP 엔드포인트(타사 API 또는 수신 대기 웹 서버), AWS 서비스 프록시 또는 자리표시자로 사용할 모의 통합일 수도 있습니다.
AMAZON API GATEWAY
API Gateway는 간편하게 API 빌드, 배포, 유지 관리할 수 있도록 AWS에서 제공하는 관리형 서비스입니다. API Gateway에는 다음과 같은 기능이 포함됩니다.
- 수신 API 요청의 본문 및 헤더를 백엔드 시스템과 일치하도록 변환
- 발신 API 응답의 본문 및 헤더를 API 요구 사항에 맞게 변환
- AWS Identity and Access Management를 통해 API 액세스를 제어
- 타사 개발을 위한 API 키를 생성 및 적용
- API 모니터링을 위해 Amazon CloudWatch 통합을 사용
- 응답 시간 단축을 위해 Amazon CloudFront를 통해 API 응답을 캐시
- API를 여러 단계로 배포하여 개발, 테스트, 프로덕션, 버전 관리 간에 간편하게 구별
- 사용자 지정 도메인을 API에 연결
- API 요청 및 응답 변환을 표준화할 수 있는 모델을 정의
AMAZON API GATEWAY 및 AWS LAMBDA 용어
- 리소스: URL 엔드포인트 및 경로로 표현됩니다. 예: api.mysite.com/questions. HTTP 메서드를 리소스와 연결하고 각 메서드마다 다른 백엔드 대상을 정의할 수 있습니다. 마이크로서비스 아키텍처에서는 리소스가 시스템 내의 단일 마이크로서비스를 나타냅니다.
- 메서드: API Gateway에서 메서드는 리소스 경로와 HTTP 동사(예: GET, POST, DELETE)의 조합으로 식별됩니다.
- 메서드 요청: API Gateway의 메서드 요청 설정에서는 메서드 권한 설정을 저장하고 클라이언트로부터 수신하는 URL 쿼리 문자열 파라미터 및 HTTP 요청 헤더를 정의합니다.
- 통합 요청: 통합 요청 설정에서는 메서드와 함께 사용되는 백엔드 대상을 정의합니다. 또한 이 설정에서 수신 요청을 백엔드 대상에서 요구하는 형식으로 변환하기 위한 매핑 템플릿을 정의할 수도 있습니다.
- 통합 응답: 통합 응답 설정에서는 백엔드 대상의 응답과 API Gateway의 메서드 응답 간에 매핑이 정의됩니다. 또한 백엔드 대상이 반환하는 데이터를 최종 사용자 및 애플리케이션에서 요구하는 형식으로 변환할 수도 있습니다.
- 메서드 응답: 메서드 응답 설정에서는 메서드 응답 유형, 해당 헤더 및 콘텐츠 유형을 정의합니다.
- 모델: API Gateway에서 모델은 형식(스키마 또는 형태라고도 함)을 정의합니다. 보다 간편하게 매핑 템플릿을 생성하려면 모델을 빌드하여 사용합니다. API Gateway는 주로 JSON(JavaScript Object Notation) 형식 데이터를 사용하도록 설계되었기 때문에 API Gateway는 JSON Schema를 사용하여 필요한 데이터 스키마를 정의합니다.
- 단계: API Gateway에서 단계는 API 배포를 액세스할 수 있는 경로를 정의합니다. 일반적으로 버전을 구별하고, 개발 엔드포인트와 프로덕션 엔드포인트를 구별하는 등에 사용됩니다.
- 블루프린트: Lambda 블루프린트는 Lambda 함수를 생성하는 기반으로 사용할 수 있는 예제 Lambda 함수입니다.