AWS

AWS Lambda + API GateWay를 활용한 REST API 사용하기

Joon0464 2021. 7. 3. 22:34

우선 시작하기에 앞서 간단하게 API와 AWS의 API Gateway가 무엇인지 알아보고 시작하겠다.

API란?

컴퓨터의 기능을 실행시키는 방법이다.

ex) 파이썬: print("hello world")

     자바스크립트: document.write('hello world')

 

REST API란?

남의 컴퓨터(서버)의 기능을 실행시키는 명령, HTTP 프로토콜을 잘 활용하기 위해 규정해놓은 약속

 

PUT: 내용 전체를 업데이트

PETCH: 일부분 업데이트

 

API Gateway란?

Amazon API Gateway는 규모와 관계없이 REST 및 WebSocket API를 생성, 게시, 유지, 모니터링 및 보호하기 위한 AWS 서비스이다.

- 특징

  • 다양한 버전과 단계의 API를 호스팅 및 사용
  • 개발자에게 API키를 생성 및 배포
  • AWS Lambda와 긴밀하게 통합된다.

 

구축 실습

 

구성도

1. Lambda 함수 생성

Lambda 콘솔에서 함수 생성을 클릭한다.

 

함수이름과 런타임을 지정하고 나머지는 기본값으로 함수를 생성한다.
코드를 위와 같이 수정하고 Depoly를 눌러 배포한다.

exports.handler = async (event, context, callback) => {
    const operation = event.httpMethod;
    switch (operation) {
        case 'GET':
            let data = {
                'id': 1,
                'name': '송현준'
            }
            callback(null , {
                'statusCode': 200,
                'headers': {},
                'body': JSON.stringify(data)
            });
            break;
        case 'POST':
            callback(null, {
                'statusCode': 200
            });
            break;
        default:
            callback(new Error('Operaiton Error "${operation}"'))
    }
};
  • Lambda는 event, context, callback이라는 총 3가지 파라미터를 가진다.
  • event는 클라이언트의 요청에 대한 내용이 담긴 파라미터이다.
  • event.httpMethod를 작성하면 클라이언트가 어떤 메서드로 접속을 시도했는지 확인할 수 있다.
  • case GET을 지정하여 메서드 GET으로 클라이언트가 요청하면 id는 1이라는 값과 name은 송현준 이라는 값을 클라이언트에게 반환하도록 작성한다.
  • callback은 웹사이트에 출력될 반환되는 정보이다.
  • 상태코드는 200, header는 비워두고, body에는 위에서 지정한 id와 name값을 JSON형태로 출력하게 설정한다.
  • POST 방식으로 사용자가 접속하면 단순하게 상태코드 200을 반환하도록 지정한다.
  • POST는 클라이언트가 웹서버에 정보를 저장시키거나 제출할때 사용하는 HTTP 메서드이다.
  • 마지막 default 부분을 작성하여 POST, GET이 아닌 이외의 요청이 들어올 경우 어떤 메서드로 접속했는지 출력하도록 작성한다.

2. API Gateway 생성 및 리소스와 GET 메서드 설정

API GateWay 콘솔로 이동하여 REST API 구축을 클릭한다.
API 이름을 지정하고 API를 생성한다.
생성한 API에서 리소스를 생성한다.
리소스 이름을 지정하고 리소스를 생성한다.
리소스에 메서드를 추가한다.
GET으로 지정하여 메서드를 추가한다.
GET 방식으로 board 리소스에 접근하면 Lambda 함수가 실행되도록 설정한다.
Lambda 프록시 통합 사용에 대한 공식 설명이다. 이 설정을 체크해야 API 게이트웨이를 거친 사용자의 요청이 event라는 파라미터에 담겨서 Lambda로 전달될 수 있다.
확인을 누르면 리소스 및 메서드가 생성된다.
board 리소스에 대해 API 배포를 클릭한다.
배포는 버전별로 관리가 가능하므로 스테이지 이름에 날짜를 적어주었다.
Lambda 함수를 새로고침하면 Lambda 함수에 API 게이트웨이가 이벤트로서 붙게된다.
API 게이트웨이를 클릭하면 앤드포인트 정보도 확인할 수 있다.
코드에 설정된 GET으로 요청받았을 때의 응답이 정상적으로 출력된다.

3. API Gateway POST 메서드 설정

GET과 동일하게 board 리소스에 메서드를 생성한다.
메서드를 POST로 지정하고 GET과 동일하게 설정한 다음 저장한다.
POST 메서드를 API 배포한다.
이전에 GET 메서드를 API 배포할 때 생성했던 동일한 배포 스테이지에 배포하도록 설정한다.

4. POST 메서드로 요청 테스트

https://chrome.google.com/webstore/category/extensions?hl=ko

위 링크인 크롬 웹스토어에 접속한다.

Talend API Test를 검색하여 다운로드 받는다.
설치가 완료되면 실행시켜준다.
프로그램을 이용하여 API Gateway로 POST 메서드를 사용하여 HTTP 요청을 보내본다.
200번 상태 코드가 출력되고 코드에서 설정한 것 처럼 POST로 요청시 BODY에 아무런 내용이 출력되지 않는다.

 

 

참고 문헌

해당 게시물 내용은 모두 아래 링크의 유튜브를 보고 참고했습니다.

제 글은 단지 기록을 남기기 위한 것으로 제대로 된 강의를 보고싶다면 아래 링크로 이동하셔서 보는걸 추천드립니다.

https://www.youtube.com/watch?v=x0iyaENTxU0&list=PLIwfMZmh7kK--JcUP_iD_CzANJK8t1Cqq&index=4&t=1s&ab_channel=%EB%8F%99%EB%B9%88%EB%82%98