Amazon API Gateway는 트래픽 관리, 권한 부여 및 액세스 제어, 모니터링, API 버전 관리를 비롯해 최대 수십만 건의 동시 API 호출을 수락 및 처리하는 데 관련된 모든 작업을 처리합니다.
우선 Amazon의 API Gateway를 알아보기전에 아키텍쳐의 구성요소로서의 API Gateway를 간략하게만 알아보자.
이에 대해서는 모놀리식 구조와 MSA구조에 대한 개괄적인 이해가 필요하다.
**참고
모놀리식 구조 : 서비스에 필요한 모든 것들이 하나의 코드베이스에 존재하는 아키텍쳐이다.
MSA(Micro Service Architecture) : 서비스(기능) 별로 각기 작은 코드베이스가 존재하며, 이에 따른 데이터베이스도 각각 존재한다.(테이블 아니고 데이터 베이스), 각 서버(서비스)들이 독립적으로 존재하는것이 가장 큰 특징
1. API Gateway의 필요성 이해
게이트웨이의 필요성을 가장 여실히 느끼기 위해선 인증과 인가를 예시로 들수 있다. 우선 모놀리식 구조에서 인증, 인가는 간단하다. 기호에 맞는 인증, 인가를 미들웨어로 사용하든 특정 API에서만 체크하는 등 여러 방법들이 있다. 그러나 MSA구조에서 인증을 구현한다고 생각해보면 문제점이 보인다.
문제 1: 코드중복
MSA구조는 코드베이스가 각기 독립적으로 존재하기에 모든 코드베이스에 인증, 인가와 관련된 코드를 삽입해주어야 한다. 이에 대한 해결책으로 git submodule같은것들을 활용할 수 있지만 어떻게 하더라도 코드중복에 대한 문제는 생기게 된다.
문제2: 검증에 대한 문제
위에서 MSA구조는 각기 다른 데이터베이스를 가진다고 했다. 그렇다면 회원에 대한 인증을 해야할때 유저서비스가 아닌 다른 서비스들에서는 어떻게 처리 해야할까? 게이트 웨이를 사용하지 않을 경우 해결책은 대체적으로 1. 유저 서비스에 유저 검증을 요청한다. 2. 유저 서비스가 아닌 다른 서비스에서 유저에 대한 정보를 데이터 베이스에 저장한다. 1,2 해결책 모두 가능은 하지만 MSA 아키텍쳐의 의의에 부합하지는 않는다.
이처럼 각 서비스의 앞단에서 공통적으로 처리해야되는 문제들을 API Gateway가 해결해준다.
2. API Gateway의 주요기능
- 서비스 및 클라이언트별 엔드포인트 제공 : 같은 비지니스 로직을 가지는 서비스를 여러개의 엔드포인트로 외부 노출 시킬수 있다.
- 메세지 또는 헤더 기반 라우팅 : HTTP Header에 있는 정보를 가지고 Routing을 할 수도 있다.
- 프로토콜 변환: 각 클라이언트에서 쓰는 다양한 프로토콜들을 게이트 웨이 뒷단 서버에 전달할 때 조작하여 전달 할 수 있다.
- 이외에도 로깅, 미러링, 위에서 설명한것 처럼 공통 로직에 대한 처리(인증이나 인가) 같은 역할을 수행 할 수 있다.
3. AWS API Gateway
AWS에서 제공하는 게이트 웨이 서비스도 기본적으로는 위와같은 사용용도를 가진다. 그에 더해서 AWS에서 제시하는 장점은 다음과 같다.
1) 측정. API Gateway에서 각 API에 대한 제한과 할당량 한도를 구성하여 사용을 제한하거나, API에 대한 트래픽을 자동으로 측정하고 이에 대한 데이터를 추출할 수도 있습니다.
2) 보안. 위 쪽에서 말한 인증과 인가에 대한 문제들을 커스텀하게 처리하는 것 뿐만아니라 AWS의 인증, 인가 시스템은 IAM, Cognito같은 툴들을 활용 할 수 있습니다.
3) 복원력. API Gateway는 조절을 통해 트래픽을 관리하므로 트래픽 스파이크가 발생해도 백엔드 작업에서 이를 처리할 수 있습니다. 또한, API Gateway는 매번 백엔드를 호출하지 않도록 API 호출 결과를 캐싱함으로써 최종 사용자가 경험하는 API 성능 및 지연 시간을 개선할 수 있습니다.
4) 작업 모니터링. API가 게시되어 사용되고 나면 API Gateway에서 서비스에 대한 호출을 모니터링할 수 있는 지표 대시보드를 제공합니다. API Gateway 대시보드는 Amazon CloudWatch와 통합을 통해 API 호출, 지연 시간 데이터, 오류 발생률 등 백엔드 성능 지표를 제공합니다. API의 각 메서드에 대한 상세 지표를 활성화하고 CloudWatch Logs에 있는 오류, 액세스 또는 디버그 로그를 수신할 수도 있습니다.
5) 수명 주기 관리. API를 게시한 후에는 이전 버전을 개선하거나 새로운 기능을 추가한 새로운 버전을 구축 및 테스트해야 하는 경우가 많습니다. API Gateway를 사용하면 여러 API 버전과 각 버전의 여러 스테이지를 동시에 운영할 수 있으므로 새로운 API 버전이 게시된 후에도 기존 애플리케이션에서 이전 버전을 계속 호출할 수 있습니다.
6) 개발자를 위한 설계. 잘 작성된 Swagger같은 기능인데 실제 API가 실행이 불가능 하더라도 Example을 미리 설정하여 개발자의 API를 사용하는 팀은 개발자가 백엔드 프로세스를 구축하는 동안 개발을 시작할 수 있습니다.
7) 실시간 양방향 통신. 서버를 실행하거나 관리할 필요 없이 채팅 앱, 스트리밍 대시보드 및 알림 같은 실시간의 양방향 통신 애플리케이션을 구축할 수 있습니다. API Gateway를 사용하면 연결된 사용자 간에 영구 연결이 유지되며 이러한 사용자 간에 메시지를 전송할 수 있습니다.
4. AWS API Gateway의 종류
- HTTP API : OIDC(openID Connect) 및 OAuth2와 같은 기능과 기본 CORS 지원이 내장된, 지연시간이 짧고 비용 효율적인 REST API 구축시 사용
- REST API : API 관리 기능과 함께 요청 및 응답을 완벽하게 제어할 수 있는 REST API 개발에 사용(HTTP API보다 좀 더 복잡한 설정에 적합)
- WebSocket API : 채팅, 대시보드와 같은 실시간 사용 사례를 위해 지속적연결이 필요한 경우에 사용합니다.
'클라우드(AWS)' 카테고리의 다른 글
AWS Cognito (0) | 2024.04.02 |
---|---|
AWS Step Functions (0) | 2024.04.02 |
AWS Lambda (0) | 2024.04.02 |
ELB(Elastic Load Balancer) (0) | 2024.03.27 |
VPC Peering와 EndPoint (0) | 2024.03.27 |