AWS Cloud School 8th/<transit gateway, lambda> Simple Todo

0번째 todo가 삭제되지 않는 문제

Randy, the engineer 2025. 3. 21. 14:10

simple todo 앱을 만들면서 todo에 대한 CRUD를 api gateway와 lambda를 활용해서 해결하고자 하고 있습니다.

 

로그인, todo 작성, DB조회, 수정까지는 가능한데 삭제가 되질 않습니다.

 

다만 어떤 todo는 삭제가 되고, 어떤 todo는 삭제가 되지 않는 문제였습니다.

문제를 처음 보는 입장에서 todo 삭제가 어떨땐 잘 되다가, 어떨땐 잘 안되다가 했기 때문에 문제를 찾기가 어려웠습니다.

 

결국 문제는 AWS 람다 함수 내부에 있었습니다.

delete 함수를 수행하는 람다 코드는 다음과 같았는데요:

    if (!userId || !todoId) {
      return {
        statusCode: 400,
        body: JSON.stringify({ message: 'userId or todoId is missing in body' , userId, todoId}),
      };
    }

 이 코드를 잘 보시면, userId가 없거나 todoId가 없을 때 에러를 리턴한다는 내용입니다.

그리고 db table을 구성할 때 제일 처음 만들어지는 todo의 todoId는 0이었습니다.

 

자바스크립트는 숫자 0을 boolean으로 판단해야 할 때가 왔을 때 false로 판단합니다.

따라서 위의 코드의 if 조건문에 들어맞게 되고, 에러가 실행되어 todo가 삭제되지 않았던 것이었습니다.

설명
0 숫자 0
"" 빈 문자열
null 값 없음
undefined 정의되지 않음
false 거짓
NaN Not a Number

 

위의 값들은 모두 자바스크립트에서 boolean 처리를 해야할 때 false로 처리하는 것들입니다.

 

문제 해결

    if (!userId || todoId== null) {
      return {
        statusCode: 400,
        body: JSON.stringify({ message: 'userId or todoId is missing in body' , userId, todoId}),
      };
    }

 

db 테이블을 변경하진 않았고,

!todoId가 아닌 todoId == null로 설정하여 todoId가 0일 때도 delete 람다 함수가 정상적으로 동작하도록 설정했습니다.