티스토리 뷰

반응형

API Gateway를 제대로 써보기 위해서 API를 정의하고, 하나씩 생성하면서 알아보고 있는데요. 지난 시간에 /books 라는 POST 용 API를 생성하고 Lambda 함수와 연결 시켜보았습니다. 이 상태에서 한번 테스트를 해볼까요? API Gateway는 자체에서 테스트 할 수 있도록 지원 하고 있습니다.

이렇게 테스트 라고 적혀 있는 블록을 선택해서 들어가서 가운데 하단에 테스트라고 파란색으로 보이는 버튼을 한번 눌러봅시다. 아직 아무것도 세팅하지 않은 상태에서 Lambda 까지 잘 연결되느냐만 보기 위함입니다.

상태 코드는 200이고 296ms 가 걸렸으며 응답본문은 statusCode:200에 body 에 Hello from Lambda 라고 되어있습니다. 전 시간에서 booksPost라고 생성한 Lambda 는 빈 함수는 아니고, 아래와 같이 코딩되어 있으니 정상적으로 Lambda 까지 갔다왔음을 알 수 있습니다.

아직 본격적은 개발 보다는 백엔드 서버를 직접 개발 하지 않고 AWS의 서비스를 이용해서 백엔드를 구성하고 있는 단계로 보시면 됩니다. 궁극적으로 개발자는 Lambda 함수 안에 내용을 잘 구현하는게 중요하구요. 물론 리턴에 대한 정의는 API Gateway에서도 가지고 있으니 하나씩 살펴보도록 하겠습니다.

Parameter 설정하기

/books POST의 경우 path, query 파라메터는 없고 body 파라메터만 있습니다, 책을 등록하는 것이기 때문에 어떤 책인지, 종류가 무엇인지 등 확장 가능성 들이 있기 때문에 query 파라메터 보다는 body 파라메터에 넣는 것이 적합합니다. 메서드 요청 블록을 눌러서 들어가면 아래와 같은 화면이 보이고 body 파라메터의 경우 '요청본문'을 확인합니다.

이제 요청 본문에 먼가 넣어야 하는데 어떻게 넣어야 할까요? 본문에 들어가야할 내용은 앞서 정의 아래와 같은 형태입니다.

{
    "name": "3분 딥러닝 텐서플로맛", 
    "type": "개발"
}

json 형태로 본문을 전달하는 것이 일반적이니 Json 형태이되, key 값은 name과 type이고 각 키의 값은 string 타입입니다. 이걸 json model을 만들어 사용하기 때문에 요청 본문쪽을 보니 '모델 추가' 버튼이 보이네요! 눌러서 모델을 만들려고 보니 Error와 Empty 모델 뿐이군요. 왼쪽 메뉴에서 모델을 클릭하여 생성해봅시다.

위 처럼, book이라는 object 구조에 properties를 name과 type으로 가지고 있고, 각 key 값의 type은 스트링인지 정수 인지 각각 기입합니다. 이와 같이 스키마를 작성하는 방법은 아래 사이트에서도 연습할 수 있으니 확인해보시면 좋겠습니다.

https://editor.swagger.io/

 

Swagger Editor

 

editor.swagger.io

book이라는 모델을 생성했으면 다시 돌아와서 본문요청에 모델을 추가하기 눌러서 나오는 리스트 중 book을 선택하도록 합니다.

만약, 본문이 잘 못 들어오면 어떻게 할까요? 당연히 API Gateway 자체에서도 걸러 낼 수 있어야 겠지요? 설정 부분을 보면 요청 검사기 하고 없음으로 되어 있는데 연필 모양을 눌러서 들어가 본문검사를 선택합니다. books의 경우 Query 파라메터가 없으니 본문 검사만 하면 됩니다. 이외 승인이라는 메뉴는 별도로 인증 관련해서 실습할 때 설명하도록 하겠습니다.

다시 테스트하기로 들어가서 요청 본문에 object 안에 name과 type을 스트링이 아닌 숫자로 넣고 요청해보도록 하겠습니다.



상태코드는 400 즉 배드 리퀘스트로, 잘못된 요청이라는 뜻이고 지연시간이 4ms 인것을 보아 Lambda에 갔다오지 않고 API Gateway 에서 본문 검사 후 바로 리턴한걸 알 수 있습니다. 이렇게 AWS에서는 API Gateway라는 것을 두어 굳이 불필요한 콜링을 줄여 줄 수 있게 했으니, Lambda에서 처리해야할 부분이 크게 줄어들 수 있습니다. 

다시 정상적인 값을 해서 요청해 봅니다. 상태코드가 200 이었고 Lambda에서 리턴 한 값을 보여주고 있습니다. 다만 아직 Lambda의 구현을 상세하게 하지 않았기 때문에 기본 메시지가 body에 담겨 리턴 되었네요. 조금 신기한 것은 지연시간인데요  59ms 라서 이게 Lambda를 거쳐 갔다 온것인지 불분명 해 보입니다. 그도 그럴 것이 처음에는 200ms 정도 걸렸다가 400 에러 났을때는 겨우 4ms 였었거든요. 그 이유는 Lambda 자체에 있습니다. Lambda는 AWS 서비스로 실제로는 컨테이너 화 되어 있어서 항상 동작하지 않고, 아무런 사용이 없으면 sleep 모드와 같이 잠시 대기상태로 들어갑니다. 이 때 요청이 오면 컨테이너가 다시 idle 상태로 올라오는 시간을 포함해서 지연시간이 200ms 정도 걸리게 되는 것이죠. 다만 idle 상태에서 요청시 저렇게 50ms 정도 걸리는 것입니다. 이 개념이 Lambda 콜드 스타트와 왐 스타트의 차이로 보면 되겠습니다.

이제 요청에 대한 세팅을 마쳤으니, 리턴에 대해서 설정은 다음시간에 하도록 하겠습니다. 

반응형
댓글