TIL | [AWS] API Gateway

bubblegum·2024년 4월 21일
0

Today I learn(TIL)

목록 보기
83/84

AWS API Gateway

AWS API Gateway는 Amazon Web Services가 제공하는 완전 관리형 서비스로, 개발자가 HTTP, RESTful, WebSocket API를 쉽게 생성, 배포, 유지 관리할 수 있도록 설계되었습니다. 이 서비스는 클라이언트와 백엔드 시스템 사이의 요청과 응답을 처리하는 중앙 집중식 역할을 합니다.

API Gateway의 주요 용도:

  1. API 생성 및 배포: API Gateway를 사용하면 RESTful API와 WebSocket API를 손쉽게 생성하고 배포할 수 있습니다. 이를 통해 웹, 모바일 앱에서 백엔드 서비스와 통신할 수 있습니다.

  2. 액세스 제어: API Gateway는 API에 대한 액세스를 제어할 수 있는 기능을 제공합니다. AWS Identity and Access Management(IAM) 또는 Amazon Cognito와 같은 서비스를 사용하여 API 액세스 권한을 관리할 수 있습니다.

  3. 트래픽 관리: 사용자는 API Gateway를 통해 트래픽 제어, 요청 제한, API 버전 관리 등을 수행할 수 있습니다. 이를 통해 백엔드 시스템에 과부하가 가지 않도록 보호할 수 있습니다.

  4. 모니터링 및 로깅: AWS CloudWatch와 통합하여 API 호출에 대한 로깅, 모니터링, 알람 설정을 할 수 있습니다. 이를 통해 성능 문제를 신속하게 파악하고 대응할 수 있습니다.

  5. 성능 최적화 및 비용 절감: API 캐싱 기능을 통해 백엔드 시스템의 부하를 줄이고, 응답 시간을 개선할 수 있습니다. 또한 사용한 만큼만 비용을 지불하는 요금제로 비용을 절감할 수 있습니다.

사용 사례:

  1. 마이크로서비스 아키텍처: 다양한 백엔드 서비스나 마이크로서비스에 대한 단일 진입점으로 사용됩니다. 클라이언트는 API Gateway를 통해 여러 백엔드 서비스와 통신할 수 있으며, API Gateway는 해당 요청을 적절한 서비스로 라우팅합니다.

  2. 모바일 백엔드: 모바일 애플리케이션의 백엔드 서비스를 효율적으로 관리할 수 있습니다. 예를 들어, API Gateway를 사용하여 모바일 앱에서 필요한 데이터를 제공하는 RESTful API를 생성하고 관리할 수 있습니다.

  3. 서버리스 아키텍처: AWS Lambda와의 통합을 통해 서버리스 백엔드 애플리케이션을 구현할 수 있습니다. API Gateway는 클라이언트의 요청을 받아 Lambda 함수를 호출하고, 그 결과를 클라이언트에게 반환합니다.

  4. 보안 API 노출: 내부 시스템이나 서비스의 API를 외부에 안전하게 노출할 수 있습니다. API Gateway는 API에 대한 액세스 제어, 요청 유효성 검사, 요청 및 응답 변환 등의 기능을 제공합니다.

NestJs로 API 구축하고 Gateway로 API에 접근하기

네스트(NestJS) 웹 프레임워크를 사용하여 API를 구축하고, API Gateway를 통해 해당 API에 접근하는 방법에 대한 예시를 들어볼게요. NestJS는 Node.js를 위한 효율적이고 확장 가능한 서버 사이드 애플리케이션을 구축하기 위해 설계된 프레임워크입니다. 여기서는 간단한 REST API를 NestJS로 구축하고, AWS API Gateway를 통해 이 API에 접근하는 방법을 설명합니다.

Step 1: NestJS로 API 구축하기

  1. NestJS 프로젝트 생성
npm i -g @nestjs/cli
nest new project-name
  1. 간단한 컨트롤러 생성

src 폴더 안에 users 폴더를 만들고, 그 안에 users.controller.ts 파일을 생성합니다.

import { Controller, Get } from '@nestjs/common';

@Controller('users')
export class UsersController {
  @Get()
  findAll(): string {
    return 'This action returns all users';
  }
}
  1. 모듈에 컨트롤러 추가

AppModuleUsersController를 추가합니다.

import { Module } from '@nestjs/common';
import { UsersController } from './users/users.controller';

@Module({
  imports: [],
  controllers: [UsersController],
  providers: [],
})
export class AppModule {}
  1. 애플리케이션 실행
npm run start

이제 localhost:3000/users에 접근하면 "This action returns all users" 메시지를 볼 수 있습니다.

Step 2: AWS API Gateway 설정

  1. API 생성: AWS Management Console에서 API Gateway 서비스로 이동하여 'Create API'를 선택합니다. REST API를 선택하고, 새 API 설정을 완료합니다.

  2. 리소스 및 메소드 생성: 생성된 API 내에 새 리소스(/users)를 생성하고, 이 리소스에 대해 GET 메소드를 설정합니다. 이 메소드가 NestJS 애플리케이션의 엔드포인트(http://localhost:3000/users)와 연결되도록 합니다.

  3. 배포: 설정이 완료되면, API를 배포합니다. 이를 위해 새로운 스테이지를 생성하고, API를 해당 스테이지에 배포합니다.

  4. 테스트: 배포된 API Gateway의 URL을 사용하여, GET /users 요청을 보냅니다. NestJS 애플리케이션에서 설정한 응답이 반환되어야 합니다.

위의 단계를 통해 NestJS로 구축된 API에 AWS API Gateway를 통해 접근하는 기본적인 구성을 완료할 수 있습니다. 실제 환경에서는 보안, 인증, 환경 변수 설정 등 추가적인 설정이 필요할 수 있습니다.

API 통합 유형

API Gateway에서 API를 생성할 때, 클라이언트에서 백엔드 서버로의 요청을 어떻게 처리할지 결정하는 중요한 부분이 통합 유형(Integration type)입니다. 여기서는 API Gateway에서 사용할 수 있는 주요 통합 유형 5가지를 소개하겠습니다.

  1. 람다 함수(Lambda Function): API Gateway는 AWS 람다와 직접 통합될 수 있습니다. 이 통합을 통해 클라이언트의 요청을 람다 함수로 전달하고, 람다 함수의 실행 결과를 클라이언트에게 반환할 수 있습니다. 이 방식은 서버리스 아키텍처를 구현할 때 매우 유용하며, 복잡한 인프라 관리 없이도 백엔드 로직을 실행할 수 있게 해줍니다.

  2. HTTP: API Gateway를 사용하여 HTTP 백엔드 엔드포인트(예: RESTful API 서버)에 직접 요청을 전송할 수 있습니다. 이 유형의 통합은 API Gateway가 HTTP 메소드와 리소스 경로에 따라 들어오는 요청을 HTTP 엔드포인트로 라우팅하고, 백엔드의 응답을 클라이언트에게 반환하도록 합니다.

  3. Mock: Mock 통합 유형을 사용하면, 실제 백엔드 없이 API Gateway에서 직접 응답을 생성하여 반환할 수 있습니다. 이는 API의 초기 설계 단계에서 클라이언트와의 인터페이스를 테스트하거나, 백엔드 서비스 개발 전에 API 동작을 시뮬레이션하는 데 유용합니다.

  4. AWS 서비스: API Gateway는 AWS의 다양한 서비스와 직접 통합할 수 있습니다. 이를 통해, 예를 들어 DynamoDB, S3, Kinesis와 같은 AWS 서비스에 직접 요청을 전달하고 응답을 받을 수 있습니다. AWS 서비스 통합을 사용하면, 복잡한 인증 절차 없이도 AWS 서비스들을 안전하게 활용할 수 있습니다.

  5. VPC 링크(VPC Link): VPC 링크 통합을 사용하면, API Gateway를 통해 AWS Virtual Private Cloud(VPC) 내의 리소스(예: EC2 인스턴스, ECS 컨테이너, 또는 온프레미스 서버)에 안전하게 접근할 수 있습니다. 이는 프라이빗 네트워크 내의 서비스를 인터넷을 통해 공개하지 않으면서도 API를 통해 접근할 수 있게 해줍니다. VPC 링크는 API Gateway와 VPC 사이의 안전한 연결을 생성하여, 프라이빗 네트워크 리소스를 공개적으로 노출하지 않고도 API를 통해 접근할 수 있게 해줍니다.

각각의 통합 유형은 특정한 사용 사례와 요구 사항에 따라 선택할 수 있으며, AWS API Gateway를 사용하여 다양한 백엔드 서비스와의 연결을 유연하게 구성할 수 있습니다.

profile
황세민

0개의 댓글

관련 채용 정보