API Gateway는 무엇일까?
> 경로와 엔드포인트로 구성되어 정의된 HTTP 서버
> 각 경로는 해당 경로를 처리하는 리소스와 연결
> 서버리스 아키텍처에서 이러한 핸들러는 FaaS 기능을 종종 사용
> 즉, API Gateway는 각 API 요청의 관문 역할
> API Gateway는 요청을 수신하면 요청과 일치하는 라우팅 구성을 찾고, 관련된 FaaS 기능을 호출
> 일반적으로 API Gateway는 HTTP 요청 매개변수에서 FaaS 기능을 간결한 입력으로의 매핑을 허용하거나 전체 HTTP 요청이 일반적으로 JSON 객체로 전달되도록 허용
> FaaS 기능은 로직을 실행하고 결과를 API Gateway에 반환하며, 차례로 이 결과를 원래 호출자에게 다시 전달하는 HTTP 응답으로 변환
> Amazon API Gateway는 다른 API Gateway 공급업체와도 유사한 기능을 제공
> Amazon의 API Gateway는 사용자가 구성하지만 직접 실행하거나 프로비저닝할 필요는 없음
API Gateway가 중요해진 배경은?
> 전통적인 모놀리틱 아키텍처 기반의 대용량 서비스가 점점 유지보수의 어려움을 겪으며 마이크로서비스 아키텍처가 기존 모놀리틱 아키텍처의 단점을 보완하는 역할을 함
> MSA를 구성할 때 접목한 서비스가 API Gateway
> API Gateway는 마이크로서비스를 연결하는 중간다리 역할을 담당하며, MSA에서 핵심적으로 필요한 기능이 되었음
API Gateway를 사용하는 이유?
> 마이크로서비스의 사용 증가로 인해 API 게이트웨이가 더 많이 사용되고 있음
> 각 마이크로서비스는 자체 기능을 필요로 하기 때문에 애플리케이션을 느슨하게 결합된 여러 서비스로 분해될 수 있음
> 마이크로서비스를 사용하면 애플리케이션의 다양한 기능을 더 쉽게 개발, 배포 및 유지 관리할 수 있지만 고객이 애플리케이션에 빠르고 안전하게 액세스하기가 더 어려워질 수도 있음
> 이때 API 게이트웨이가 이 문제를 해결할 수 있음
> 고객이 각 마이크로서비스에 대한 액세스를 개별적으로 요청하는 대신 게이트웨이는 요청에 대한 단일 진입점(entrypoint)으로, 해당 요청을 적절한 서비스에 연결하고 결과를 수집하여 요청자에게 다시 전달하게 도와줌
> 이 기능을 라우팅이라고 함
> 고객을 서비스와 연결하는 주요 프록시인 게이트웨이는 인증, 메트릭 수집, 입력 유효성 검사 및 응답 변환을 포함한 중요한 관리 및 보안 기능을 지원
API Gateway는 어떠한 종류가 있을까?
- Zuul - 넷플릭스 API Gateway
- AWS API Gateway
- Azure API Gateway
- 익스프레스 API Gateway
API Gateway 기능
- IP 화이트리스팅
- IP 주소 범위를 제한하거나 화이트리스트에 추가한다. 액세스는 일반적으로 액세스 정책 관리자를 통해 구성된다. 액세스 정책 관리자는 Gateway가 처리하는 방법 및 제한 사항을 사용자에게 표시하는 방법과 함께 제한 사항을 구현할 수 있다. AWS의 API Gateway를 예로 들면, 자원 정책 기능은 사용자가 리소스에 대한 JSON 정책 문서를 할당하고 IAM 그룹, 사용자 또는 역할이 그들에 액세스 할 수 있는지 확인할 수 있다.
- 전송 메시지 암호화
- API Gateway를 통과하는 서비스 간의 메시지를 보호하는 역할을 하며 전송 중인 모든 정보에 공통 표준이 적용되도록 한다. Amazon API Gateway의 경우 적절한 최소 보안 표준을 설정하는 암호화되지 않은 워크로드를 지원하지 않는다.
- 속도 제한
- 스로틀링 메커니즘을 사용하여 대기열 및 경우에 따라 요청 우선순위를 관리하게 된다. 속도 제한은 요청 우선순에 따라 API에 대한 요청 수를 제한하는 기능이다. 정책 수준으로 구성이 정의되며 모든 요청 및 프로토콜에 적용된다. 속도 제한은 DDOS 공격의 영향을 잠재적으로 제한하기 때문에 보안 기능으로도 간주된다.
- API 구성 및 라우팅
- API Gateway의 작업은 서비스에서 서비스로 요청을 라우팅하는 것뿐만 아니라 성능과 효율성도 고려한다. API 구성 또는 집계는 서로 다른 서비스로의 쿼리 결과를 단일 응답으로 결합하는 프로세스다. 이것은 대규모 데이터 세트에 이상적이지는 않지만 요청자에서 서비스까지 이상적인 경로를 제공하는 매우 간단하고 효율적인 방법이다.
- 캐싱
- TTL이 만료될 때까지 요청이 서비스를 모두 적중할 필요가 없도록 API Gateway 수준에서 캐싱할 수 있다. 캐싱은 대부분의 API Gateway에 공통적인 기본 기능이지만 구성의 세분성은 제품 제공 및 구현에 따라 다르다.
- 로깅 추적
- 즉시 사용 가능한 로깅 기능을 제공하여 API Gateway를 통과하는 모든 API 트래픽의 추적을 가능하게 하고 Gateway에서 들어오고 나가는 요청, URL, 관점에서 수행하는 방식과 함께 요청되는 매개변수에 대한 지표를 표시한다.
- Gateway의 다른 모니터링 기능도 중요하다. 예를 들어 AWS Cloudwatch를 사용하여 Rest API 실행과 같은 API Gateway의 지표를 표시한다. 이는 서로 다른 API 간에 비교 지표를 제공할 수 있기 때문에 많은 가치가 있다.
- API 버전 관리
- 다양한 버전의 API를 처리하는 것은 API Gateway의 중요한 기능이다.
- API 버전 관리는 소비자와 함께 기존 API에 대한 코드 해독 변경을 방지하는 데 도움이 되는 중요한 전략으로 개발자가 사용자에게 미치는 영향을 최소화하면서 여전히 사용 중인 API의 이전 버전을 천천히 감가상각할 수 있다. 이는 내부 API 사용자에게 중요하지만 실제 개발자와 같이 도메인 소유자에게 직접 액세스할 수 없는 API의 제3자 소비자와 작업할 때는 훨씬 더 중요하다.
AWS API Gateway의 장점
- 트래픽 측정
- API 키 별로 일련의 플랜을 정의하고, 제한과 할당량 한도를 구성할 수 있다.
- API에 대한 트래픽을 측정하기 때문에 각 API 키에 대한 사용률 데이터를 추출할 수 있다.
- 보안
- AWS IAM과 Amazon Cognito 같은 AWS관리 및 보안 도구를 사용해서 API에 대한 액세스 권한을 부여할 수 있다.
- AWS에서 자체 API를 확인할 때 사용한 것과 동일한 방법론을 사용하여 서명된 API 호출을 확인한다.
- AWS Lambda 함수로 작성된 사용자 정의 권한 부여자를 사용하여, 수신되는 전달자 토큰을 확인하도록 지원하여 백엔드 코드의 인증 문제를 해결한다.
- 복원력
- 조절을 통해 트래픽을 관리하므로 트래픽 스파이크가 발생해도 백엔드에서 처리할 수 있다.
- 매번 백엔드를 호출하지 않도록 API 호출 결과를 캐싱하여 최종 사용자가 경험하는 API 성능 및 지연 시간을 개선할 수 있다.
- 작업모니터링
- API가 게시되고 사용되면 API Gateway에서 서비스에 대한 호출을 모니터링할 수 있는 지표 대시보드를 제공한다.
- 대시보드는 Amazon CloudWatch와 통합을 통해 API 호출, 지연 시간 데이터, 오류 발생률 등 백엔드 성능 지표를 제공한다.
- API의 각 메서드에 대한 상세 지표를 활성화하고 CloudWatch log에 있는 오류, 액세스 또는 디버그 로그로 수신할 수 있다.
- 수명 주기 관리
- API를 게시한 후에는 이전 버전을 개선하거나 새로운 기능을 추가한 새로운 버전을 구축 및 테스트해야 하는 경우가 많다. API Gateway를 사용하면 여러 API 버전과 각 버전의 여러 스테이지를 동시에 운영할 수 있으므로 새로운 API 버전이 게시된 후에도 기존 애플리케이션에서 이전 버전을 계속 호출할 수 있다.
- 개발자를 위한 설계
- API를 신속하게 생성하고 API 응답에 대한 정적 콘텐츠를 할당하여 팀 간 개발 노력을 줄이고 애플리케이션 출시 시간을 단축할 수 있습니다.
- 개발자의 API를 사용하는 팀은 개발자가 백엔드 프로세스를 구축하는 동안 개발을 시작할 수 있다.
- 실시간 양방향 통신
- 서버를 실행하거나 관리할 필요 없이 채팅 앱, 스트리밍 대시보드 및 알림 같은 실시간의 양방향 통신 애플리케이션을 구축할 수 있다.
- API Gateway를 사용하면 연결된 사용자 간에 영구 연결이 유지되며 이러한 사용자 간에 메시지를 전송할 수 있다.
'DevOps BootCamp > 마이크로서비스' 카테고리의 다른 글
서버리스 사진첩 (0) | 2023.05.11 |
---|---|
AWS 서버리스 애플리케이션 배포 (0) | 2023.05.09 |
AWS Lambda (0) | 2023.05.09 |
CQRS (0) | 2023.05.08 |
메시지 브로커를 이용한 비동기식 통신 (0) | 2023.05.08 |