이번 포스팅에서는 AWS의 API Gateway를 이용해서 WebSocket을 설정하고, Client의 처리를 해주는 Lambda의 사용법 및 Trigger설정을 살펴볼 예정입니다. 예제를 위해서 사용될 Client는 Android용 Application을 간단하게 만들어서 WebSocket동작을 살펴볼 예정입니다.
WebSocket이란 OSI 7계층 중 4계층의 TCP 계층에 의존하고 HTTP 포트(80 or 443) 위에서 동작하도록 설계되었고, HTTP 프로토콜과 호환 되는 양방향 통신 방식 중 하나입니다.
기존의 일반적인 HTTP 1.x 통신방식은 client에 의해 요청을 받아서 처리하는 단방향 방식의 Server-Client통신방식인데 반해 WebSocket는 양방향 통신방식으로서 Server-Client가 연결 유지되는 상태에서 data, message들을 interaction할 수 있는 방식의 통신입니다.
WebSocket의 장잠은 기존에 할 수 없었던, client의 요청이 없더라도 Server 에서 Client로 먼저 message를 전송 할 수 있다는 점입니다. 또한 대부분의 browser가 이를 지원하고 있기 때문에 주기 때문에 실시간성이 요구되는 수 많은 web app이나 mobile app에서 solution으로 이용할 수 있게 되었습니다.
<aside> 💡 이 외에도 요즘은 HTTP/2 혹은 HTTP/2 base의 gRPC등 여러 연결 유지 방식이 있기 때문에 Project성격 이나 환경에 맞게 선택할 수 있습니다.
</aside>
<aside> 💡 AWS Console을 이용해서 API Gateway를 설정하기 전에 WebSocket의 Event를 처리해줄 Lambda를 먼저 준비해주세요. connect, disconnect, default 세개의 event를 처리할 예정이므로 최하 하나이상의 Lambda function 을 배포한 상태에서 진행하시면 됩니다.
</aside>
AWs Console의 API Gateway 항목에서 "Create API" 버튼을 누릅니다.
이후 아래와 같이 여러 type의 API가 있는데 오늘은 주제에 맞게 "WebSocket API"를 선택합니다.
이후 API의 name과 Lambda에서 유입되는 데이터의 action type을 구분하는 template를 기록합니다.
다음은 route할 event를 설정합니다. 여기서는 connect, disconnect, default 기본적인 세 event만 등록할 예정입니다. 만약 개발하는 환경에 맞는 여러 route가 필요하다면 custom routes 항목에 추가 해주시면 됩니다.
다음 화면에서는 먼저 설정한 event들이 발생했을때 처리할 method를 설정합니다. 여기에서는 event의 처리를 Lambda에서 할 예정이므로 그림과 같이 Lambda를 선택하고 각각의 event를 처리할 Lambda를 선택합니다. 저는 세개의 Lambda Function들을 이용해서 각 event마다 dedicated 되어 있는 Lambda를 따로 설정했습니다.