...
API Gateway 서비스
API Gateway란 규모에 상관없이 API 생성, 유지 관리, 모니터링과 보호를 할 수 있게 해주는 서비스이다.
말 그대로 Client에서 server로 통신할 때 사용하는 많은 api들의 대문(게이트웨이)과 같은 역할을 한다고 보면 된다.
즉, API가 지나가는 통로인 셈이다.
API Gateway를 이용하면 통합적으로 엔드포인트와 REST API를 관리할 수 있다.
API 게이트웨이를 등록해주면, 모든 클라이언트는 각 서비스의 엔드포인트 대신 API Gateway로 요청을 전달하여 관리가 용이해 진다. 사용자가 설정한 라우팅 설정에 따라 각 엔드포인트로 클라이언트를 대리하여 요청하고 응답을 받으면 다시 클라이언트에게 전달하는 프록시(proxy) 역할을 하기 때문이다.
API Gateway 서비스는 단순히 api 경유지 역할 뿐만 아니라, 엔드포인트 서버에서 공통으로 필요한 인증/인가, 사용량 제어, 요청/응답 변조 등의 다양한 기능을 플러그인 형태로 제공하고 있다.
이러한 플러그인을 API 게이트웨이에서 사용하면, 각 엔드포인트의 서버마다 위의 기능들을 구현하지 않아도 되기 때문에 개발자 입장에서는 개발 비용을 줄일 수 있다는 효과도 있다.
특히 API Gateway를 통해 Lambda와 연동하여 Serverless 서비스를 구축하는데 많이 사용된다.
API Gateway - 제공 API 유형
API Gateway에서 제공하는 API는 대표적으로 3종류가 있다.
- HTTP API : API 프록시 기능정도만 필요할 때 적합. 단순 / 저렴하고 빠르다.
- REST API : API 관리 기능, 요청/응답에 대한 제어가 필요할 경우 적합, 복잡 / 비싸고 느리다.
- WebSocket API : 웹소켓 용도. 실시간 애플리케이션에서 주로 사용한다.
HTTP API
- HTTP를 통신 방식으로 사용하는 API를 HTTP API라고 한다.
- HTTP API는 Endpoint를 API gateway로 활용하여 HTTP 요청을 통해서 서버에 접근할 수 있도록 만들어준다.
- HTTP API는 데이터만 주고 받고 UI 화면이 필요하면 클라이언트가 별도로 처리한다. 대게 앱/웹/서버 to 서버에서 사용된다.
- 대부분의 Web API가 HTTP API로 이루어지고 있다.
REST API
- REST API는 HTTP API에 여러가지 제약 조건이 추가된 형태이다.
- 자원의 식별
- 메시지를 통한 리소스 조작
- 자기서술적 메세지
- 애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어
- REST는 웹 서비스의 구조를 만드는데 활용되는 패턴이며 위의 4가지 제약조건을 만족해야 RESTFUL 하다라고 말할 수 있다.
- 대표적으로 CRUD 메서드 동작을 일컫는다. CREATE(post), READ(get), UPDATE(put), DELETE(delete)
- 그런데 이런 부분을 완벽하게 지키면서 개발하는 것은 현실적으로 어렵고, 또 추가 개발 비용대비 효과가 있는 것도 아니어서, 이미 많은 사람들이 해당 조건을 지키지 않아도 REST API라고 하기 때문에, HTTP API나 REST API를 거의 같은 의미로 사용하고 있는 현실이다. (물론 엄격하게는 다르다)
WEBSOCKET API
- 요청을 받고 응답하는 REST API와 달리 WebSocket API는 클라이언트 앱과 백엔드 간의 양방향 통신을 지원한다.
- 웹 소켓은 사용자의 브라우저와 서버 사이의 인터액티브 통신 세션을 설정할 수 있게 하는 고급 기술 이다.
- 채팅 앱 및 스트리밍 대시보드와 같은 실시간 양방향 통신 애플리케이션을 구축하여 백엔드 서비스와 클라이언트 간의 메시지 전송을 처리하기위해 지속적인 연결을 유지한다.
API Gateway - 요금 정책
API Gateway는 람다와 같이 서버리스 서비스이며, 수신한 API 호출에 대해서만 지불한다.
다만 HTTP API / REST API / WEBSOCKET API 각각 모두 요금대가 다르다.
프리티어 계정은 1년동안 매달 3개의 API마다 100만 건씩 무료로 제공된다.
만일 월별 호출 수가 100만 개를 초과하는 경우, API Gateway 사용 요금이 청구된다.
API Gateway 실전 사용 (HTTP API)
HTTP API 게이트웨이 생성
API 게이트웨이 콘솔 메뉴로 이동한 뒤, API 생성 버튼을 누른다.
이렇게 API 게이트웨이 생성을 완료했다.
하단의 스테이지 이름 쪽의 주소가 바로 api 대문 역할을 할 대표 url 엔드포인트 주소인 것이다.
현재는 API 게이트웨이에 아무 경로도 설정하지 않았기 때문에 엔드포인트 url에 접속해도 현재는 NOT FOUND가 뜰 것이다.
이제 라우팅을 설정해보자.
HTTP API 게이트웨이 경로 설정
다음과 같이 서버로 요청이 들어오는 method와 path를 설정해 줄수 있다.
예를들어 method는 GET 그리고 경로는 /users 로 하면, api엔드포인트/users로 GET 요청이 들어온 경우 어떠한 서버 주소 (나중에 설정)로 연결해 주겠다는 의미이다.
경로를 설정해줬으니, 이제 해당 경로에 실질적으로 어느 도메인으로 연결할지 통합 연결을 설정해준다.
통합 경로 설정을 마쳤으면, 브라우저에 API 게이트웨이 엔드포인트 주소에 경로를 쳐서 접속해보자.
네이버 사이트로 잘 라우팅 됨을 확인 할 수 있다.
https://meqigwf7f2.execute-api.ap-northeast-2.amazonaws.com/topics
두번째 경로 설정도 추가로 해본다. 이번엔 다음 사이트로 라우팅 되도록 설정해준다.
만약 EC2와 연결하고 싶다면, instance의 public 주소를 입력하면 된다.
만약 로드밸런서를 사용해서 ELB를 생성했다면 ELB DNS 주소를 입력하면 된다.
API Gateway는 기본적으로 자동 배포가 된다. 자동배포를 원하지 않는 경우 배포/스테이지 부분을 설정해주면 된다.
API Gateway 실전 사용 (REST API)
이번에는 좀더 복잡하면서도 규칙적으로 API를 이용할수 있는 REST API 게이트웨이를 생성해보자.
REST API 게이트웨이 생성
[엔드포인트 유형]
지역 : 특정 리전(ap-northeat-2) 안에서 사용
최적화된 에지 : CloudFront를 사용 (일반적인 인터넷 상)
프라이빗 : AWS 내 VPC에서만 접근 가능
REST API 게이트웨이 경로 설정
API를 생성하면 위의 HTTP API와는 달리 REST API는 구성 화면이 약간 복잡하게 되어있다. (HTTP API보다 제공 기능이 많아서 그렇다)
차근차근 따라와 보자.
먼저 작업 메뉴를 눌러 리소스 생성을 한다. 리소스는 실제 api를 호출하는 api url을 정의한다라고 보면 된다.
두번째 path를 설정하기 위해 또다시 리소스 생성을 해준다.
리소스 경로 쪽에 {userid} 와 같이 중괄호로 묶어 줬는데, 중괄호로 묶어주면 경로 파라미터로서 사용할수 있다.
경로 파라미터란, 예를들어 아래 URL 경로와 같이
http://localhost/hello/12
http://localhost/hello/667
http://localhost/hello/55
서비스 특성상 뒤의 경로가 고정되어있지 않고, 여러개의 경로값을 사용할경우 이들을 묶는 일종의 변수 역할이라고 보면 된다.
두개의 경로를 설정해 줬으니 이제 요청할 메서드 설정을 해준다.
통합 유형으로 HTTP를 선택하고, 엔드포인트 URL에는 요청을 보낼 목저지를 설정한다.
- https://api.github.com/users/{userid}
위 url은 깃헙에서 무료로 제공하는 api로서, {userid} 부분에 깃헙 프로필 닉네임을 적고 요청하면 해당 깃헙 프로필 정보를 json으로 반환해준다.
REST API 게이트웨이 테스트 및 배포
메서드 등록이 완료되면, 아래와 같은 메서드 실행 환경으로 접근된다.
이 화면에서는 테스트 및 각종 HTTP Request를 관리할 수 있다.
좌측의 번개모양의 테스트 버튼을 클릭하여 테스트를 진행해보자.
{userid} 경로 파라미터에 닉네임 아무거나 적는다.
그리고 하단의 테스트 버튼을 클릭하면, 우측 이에 대한 응답 결과를 보여주어 사전에 테스트 할수 있다.
결과에는 요청 URL, 상태, 지연 시간 그리고 HTTP Response가 나타난다.
테스트까지 완료되면 다음과 같이 완성된 REST API를 API Gateway에 정식 배포 한다.
작업 > API 배포를 선택하여 API를 스테이지에 등록한다.
스테이지 등록이 완료되면, 상단에 정식으로 발행된 REST API Gateway 엔드포인트 URL이 뜨게 된다.
이 API 게이트웨이 엔드포인트 URL로 /hello/jeff 경로를 설정하고 브라우저에 요청하면 실제로 깃헙 프로필 정보가 응답 받게 된다.
이로써 HTTP API보다는 복잡하지만 좀더 RESTFUL 하게 규칙적으로 API를 이용하는 REST API 설정에 대해 알아보았다.
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.