티스토리 뷰

반응형

AWS API Gateway에 관련한 4번째 글입니다. 이번엔 API Gateway 자체에 대해서는 완결편이 되겠네요. 리턴 설정을 해보면서 API Gateway에서 마무리하도록 하겠습니다.

리턴 설정하기

리턴은 메서드 응답 블록과 통합 응답 블록으로 설정 할 수 있습니다. 먼저 메서드 응답 블록으로 들어가 보자. 아직 HTTP 상태 200만 선언되어 있으니 404와 400을 추가 해보도록 하겠습니다.

응답 추가 시 무엇인가 넣어야할 것 같은 추가적인 칸들이 있지만 우선 나두고 다시 통합응답 블록에 들어가서 Lambda에서 리턴되는 오류를 Regex 정규식을 잡아서 처리하도록 하겠습니다.

API Gateway는 모든 에러에 대한 처리를 할 수 가 없습니다. 예를 들어 파라메터의 타입을 스트링으로 정의 했는데 숫자가 온다거나 하는 것은 알아 낼 수 있지만 타입이 같을 경우 Lambda에서 오롯이 판단해야 합니다. Capability 같은 것이 Lambda에서만 처리할 수 있는 것인데, 어떤 리소스를 가져올때 숫자라고 한다면 범위가 1에서 10까지만 가능한데 11을 요청한다면 400 에러라고 볼 수 있지만 타입은 틀리지 않았기 때문에 클라이언트 입장에서는 알수가 없습니다. 이때 statusCode와 함께 적절한 error message를 클라이언트에게 전달하면 클라이언트 개발자 역시 서버와 인터랙션 시 나오는 에러처리를 좀더 쉽게 할 수 있을 것인데요. 물론 이런 에러에 대한 것도 Swagger와 같은 문서 타입으로 정리되어 있으면 가장 좋습니다.

이때 매핑템플릿을 통해서 리턴에 의한 값도 메시지를 파싱해서 리턴을 만들어 줄 수 있습니다.

Python내에서 오류 Regex 매핑

1. Lambda 내에서 return 문 대신 아래와 같은 raise문을 사용    

raise Exception(json.dumps({

              'statusCode' : 400,

              'message' : “Invalid Parameter"

      }))
  • 이때 json.dumps 는 json stringify와 같은 역할을 하며, 반드시 사용할 필요는 없습니다.
  • 만약 json.dumps를 쓰지 않는다면 코드는 아래와 같습니다.
      raise Exception({ 'statusCode' : 400, 'message' : "Invalid Parameter", })

 

2. API Gateway에서 API 메서드 내 통합 응답을 클릭

3. regex를 작성하는데, lambda 함수에서 json.dumps를 사용했을 때와 안 했을 때는 아래와 같이 구분하여 작성

 - json.dumps를 사용했을 때

.     *\"statusCode\":400.*

 - json.dumps를 사용하지 않을 때 

     .*'statusCode':400.*

 - 차이점

  • stringify된 error response와 같은 경우 역슬래시를 쌍따옴표 앞에 붙입니다.
  • stringify되지 않은 error reponse의 경우, 단따옴표로 작성하며, 역슬래시를 붙이지 않습니다.

 - 띄어쓰기와는 관계 없음

Lambda에서는 위와 같은 포맷팅으로 리턴해처리를 해주도록 하면됩니다. 400에러라는 리턴 자체가 비단 Capability 이슈 도 있지만 DB가 문제가 있다던지 여러가지 있기 때문에 각 에러에 적합한 메시지를 message에 담아서 리턴하면 매핑탬플릿에 errorMessageObj에 message 부분을 파싱헤서 다시 API Gateway에서 재정의한 message에 담아주는 방식입니다.

실행결과

Lambda에서 무조건 raise 시켜서 400 상태코드가 리턴되고 Invalid Parameter라는 메시지가 담겨서 응답 본문에 표시 됨을 확인 할 수 있습니다.

여기까지 API Gateway 설정 방법에 대해서 설명해보았는데 어떠신가요? AWS 서버시는 기능이 무지 많기 때문에 지금 설명한 것은 일부의 기능이며 필수적인 것들 위주로 설명드린 것입니다. 지속적으로 개발도 되어있기에 앞으로 더 풍부한 서비스가 되어 우리가 만들려고 하는 백엔드를 쉽고 안정적으로 구현할 수 있는 AWS API Gateway! 한번 여러분도 써보시길 권장합니다.!

반응형
댓글