2017년 8월 27일 일요일

[AWS] aws-serverless-express에서 binary(이미지 파일) 지원하는 방법

aws-serverless-express에서 binary(이미지 파일) 지원하는 방법

[How to support binary(image file) in aws-serverless-express]
지난 포스팅에서 AWS Lambda에서 aws-serverless-express를 이용하고 AWS API Gateway와 연결하여 웹 어플리케이션을 서버리스(Serverless)로 서비스하는 방법을 정리해보았습니다.
( 링크 : https://walkinpcm.blogspot.kr/2017/08/awsaws-lambda-express-react-application.html )
그런데, 위 포스팅의 절차대로만 했을때 이미지 파일이 화면에 그려지지 못하는 문제가 있었습니다.
개발자도구를 이용해서 확인해보면 분명 파일을 받아오는 요청은 200 OK 를 받지만 이미지가 그려지지 않았습니다.
알아보니 API Gateway와 Lambda에서는 기본적으로는 binary를 지원하지 않았던게 문제였습니다.
그래서 이번 포스팅에서는 그 문제를 해결하는 방법을 정리합니다.

0. 해결방법

해결방법은 단순합니다.
API Gateway와 Lambda(aws-serverless-express 사용부분)에서 binary를 지원하도록 설정해주면 되었습니다.
단, 두 군데 모두 설정이 되어야 제대로 binary를 지원합니다.

1. API Gateway 이진 지원 설정

API Gateway에서 사용할 API를 선택하면 좌측 하위 메뉴에 '이진 지원' (Binary Support)가 있습니다.
해당 메뉴를 클릭하고 '이진 미디어 형식' (Binary media types)에 아래 세 항목을 각각 추가합니다.
(jpg와 png 파일을 지원하고자 하여 아래 image/jpeg와 image/png를 입력합니다. 필요에 따라 다른 항목을 추가하시면 됩니다.)
image/jpeg
image/png
*/*

2. aws-serverless-express 코드에서 이진 형식 설정

기본적으로 aws-serverless-express를 이용해서 express 어플리케이션을 Lambda에서 구동시킬때는 아래와 같은 코드가 작성됩니다.
(자세한 코드는 맨 위에 링크된 지난 포스팅을 참고해주세요.)
const server = awsServerlessExpress.createServer(app);
binary를 지원하기 위해서는 createServer()를 호출할 때 지원할 binary가 무엇인지 알려줘야합니다.
코드는 아래와 같이 수정됩니다.
const binaryMimeTypes = [
    'image/jpeg',
    'image/png'
];

const server = awsServerlessExpress.createServer(app, null, binaryMimeTypes);


끝났습니다ㅎㅎㅎ
이렇게 간단하게 해결될 것을 저는 이래저래 헤맷네요..
그리고 항상 API Gateway는 배포를 해줘야 적용이 됩니다 ㅎㅎ
이 글을 쓰면서도 배포를 빼먹어서 잠시 또 헤맷네요..ㅎㅎㅎ
이상입니다. 감사합니다.

댓글 없음:

댓글 쓰기