[AWS lamda] response 양식 및 encoding 문제

공통 개념, 기타 작업|2022. 3. 17. 13:31

AWS lamda로 api를 작성하는 도중 인코딩 관련 이슈가 생겨 겸사겸사 정리해보았다.

 

1. response 전달 방식

- return JSON;

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

lamda 첫 생성시 샘플용으로 나오는 코드. 말 그대로 JSON 형식의 response를 return 해주어 전달한다.

 

- context 내 함수

exports.handler = async (event, context) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    context.succeed(response);
};

context.succeed(response), context.fail(error), context.done(error, response)이 있다. succeed는 성공, fail은 실패, done은 어떤 경우에서든 사용이 가능하다.

 

- callback();

exports.handler = async (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false;
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    callback(null, response);
};

callback()을 사용하는 방법. context.callbackWaitsForEmptyEventLoop를 false로 설정해주지 않으면 함수가 종료되지 않고 계속 실행중인 느낌이므로 반드시 꺼준다. 자세한 건 공식 문서를 찾아보자.

 

 

AWS Lambda 컨텍스트 객체(Node.js) - AWS Lambda

AWS Lambda 컨텍스트 객체(Node.js) Lambda는 함수를 실행할 때 컨텍스트 객체를 핸들러에 전달합니다. 이 객체는 호출, 함수 및 실행 환경에 관한 정보를 제공하는 메서드 및 속성들을 제공합니다. 컨

docs.aws.amazon.com

 

 

AWS Lambda 함수 핸들러(Node.js) - AWS Lambda

AWS Lambda 함수 핸들러(Node.js) Lambda 함수의 핸들러는 이벤트를 처리하는 함수 코드의 메서드입니다. 함수가 호출되면 Lambda는 핸들러 메서드를 실행합니다. 핸들러가 존재하거나 응답을 반환할 때,

docs.aws.amazon.com

 

2. encoding issue

lambda api에서 찍힌 로그에는 인코딩이 제대로 적용되어 나오는데, response를 받은 후의 로그에는 인코딩이 적용되지 않아 깨지는 issue가 있었다. response 양식을 제대로 지키지 않아 생긴 문제로 추측된다.

encoding 이슈가 생겼을 때 전달한 response는 아래와 같았고,

const response = (code, data) => ({ code: code, data: data });

이후 제대로 동작한 response는 아래와 같았다.

const response = (statuseCode, body) => ({
    statusCode: statusCode,
    body: body
});

다음부터는 샘플 코드를 좀 더 신경 쓰는 걸로...

'공통 개념, 기타 작업' 카테고리의 다른 글

[Firebase] 예약 함수 (Schedule functions) 사용법  (0) 2022.04.29
loop break  (0) 2022.03.17

댓글()