코드 순서에 따른 런타임 에러

이종훈·2025년 4월 27일
2

개발 일지

목록 보기
10/21
post-thumbnail

문제 상황

const invitation = await getInvitationById(id);
const oldImgUrl = invitation.imgUrl;

if (!invitation) {
  res.status(StatusCodes.NOT_FOUND).json({ message: "해당 초대장이 존재하지 않습니다." });
  return;
}

if (!oldImgUrl) {
      res.status(StatusCodes.BAD_REQUEST).json({ message: "청첩장의 대표 이미지가 존재하지 않습니다." });
      return;
    }

상단의 코드는 params로 전달받은 id 값을 통해 invitation 테이블의 imgUrl column을 조회하는 로직을 수행하며, id로 조회한 invitation과 invitation의 imgUrl column에 대해서 존재 여부 검사를 수행합니다.

이때 invitation.imgUrl을 invitation이 존재하는지 확인하기 전에 먼저 꺼내고 있기 때문에, 만약 invitation이 존재하지 않는다면 invitation에 대한 if문을 들어가기 전에 invitation.imgUrl 값을 변수에 할당하는 코드에서 런타임 에러가 먼저 발생하게 됩니다.

이로 인해 의도한 catch 문으로 빠지지 않고 런타임 에러가 발생하여 코드가 의도치 않게 종료하게 되는 문제가 발생합니다.


해결 방법

const invitation = await getInvitationById(id);

if (!invitation) {
      res.status(StatusCodes.NOT_FOUND).json({ message: "해당 초대장이 존재하지 않습니다." });
      return;
    }

const oldImgUrl = invitation.imgUrl;

if (!oldImgUrl) {
      res.status(StatusCodes.BAD_REQUEST).json({ message: "청첩장의 대표 이미지가 존재하지 않습니다." });
      return;
    }

해결 방법은 간단합니다.

id로 꺼낸 invitaion을 먼저 조회한 후, invitation의 imgUrl 값을 꺼내어 값을 조회하도록 수정합니다.

각 invitation과 invitation.imgUrl에 대한 검사를 순차적으로 수행하여 값이 없을 시에는 StatusCode에러를 발생시키며 의도한 대로 코드를 종료시킬 수 있습니다.

profile
종훈리의 개발일지

0개의 댓글