Node.js

[Node.js] 에러 메시지를 만났을 때 대처법

김만규 2024. 5. 22. 12:50
728x90
반응형

 

내일배움캠프를 수강하면서 수강생분들이 에러를 만났을 때 어떻게 대처해야 하는지 알았으면 하는 마음에 이 글을 작성합니다. 개발을 하다 보면 에러는 피할 수 없는 부분입니다. ChatGPT를 통해 빠르게 해결할 수도 있지만, 이렇게 하면 에러의 원인을 제대로 파악하기 어려울 수 있습니다. 에러의 원인을 이해하고 해결하는 능력은 개발자로서 중요한 부분입니다.

 

1. 에러 로그와 경로 파악하기

에러를 만났을 때 가장 먼저 해야 할 일은 에러 메시지와 로그를 확인하는 것입니다. 에러 메시지는 대부분 문제가 발생한 위치와 원인에 대한 힌트를 제공합니다. 다음과 같은 절차를 따라 에러를 파악해보세요.

 

  • 에러 메시지 읽기: 에러 메시지를 천천히 읽어보세요. 메시지에는 종종 문제의 원인과 발생 위치가 명확하게 나타나 있습니다.
  • 스택 트레이스 확인: 스택 트레이스를 확인하여 에러가 발생한 파일과 줄 번호를 찾으세요. 이를 통해 어떤 코드에서 문제가 발생했는지 알 수 있습니다.
  • 로그 파일 확인: 애플리케이션이 생성한 로그 파일을 확인하여 추가적인 정보와 에러의 전후 상황을 파악하세요.

 

에러 예시!!

 

흔히 볼수있는 에러로 가지고 와봤습니다. 여기서 우리가 에러가 발생했을 때 당황하지말고 천천히 확인해봅시다.

 

  1. 에러 확인: "Error: listen EADDRINUSE: address already in use :::3095" 에러 메시지가 발생했습니다.
  2. 스택 트레이스 확인: "file:///Users/gimmangyu/Desktop/123/app.js:22:5"에서 22번째 줄에서 에러가 발생한 것을 확인할 수 있습니다.

 

에러 결론: app.js 파일의 22번째 줄에서 3095 포트가 이미 열려 있어 한 번 더 사용하려고 하면서 에러가 발생했습니다!

2. 구글링을 통한 에러 검색

에러 메시지를 통해 어느 정도 문제의 단서를 찾았다면, 이제 구글링을 통해 더 많은 정보를 찾아볼 차례입니다. 구글링은 에러를 해결하는 데 매우 유용한 도구입니다. 다음과 같은 팁을 참고하세요.

 

  • 구체적인 에러 메시지 검색: 에러 메시지 전체를 구글에 복사하여 검색해보세요. 많은 경우 다른 개발자들도 동일한 문제를 겪었고, 해결 방법을 공유했을 가능성이 높습니다.
  • 관련 기술 스택 검색: 사용하는 프레임워크나 라이브러리 이름을 함께 검색하여 문제를 더 구체적으로 좁혀보세요.

 

우리는 먼저 에러 로그를 통해 원인을 찾았습니다. 이제 해결 방법을 찾아야 합니다. 구글링을 할 때, 에러 로그를 그대로 복사해서 검색하면 이 에러에 대한 많은 블로그 글을 찾을 수 있습니다. 하지만 모든 블로그를 하나하나 확인할 수는 없기 때문에, 블로그를 들어가서 현재 내가 마주한 상황과 같은지 빠르게 파악하는 것이 중요합니다.

 

3. API 데이터 사용 문제 해결

API를 개발할 때 데이터가 제대로 사용되지 않는 경우가 종종 발생합니다. 이런 문제를 해결하기 위한 방법을 알아봅시다.

  • 요청 및 응답 데이터 확인: API 요청 및 응답 데이터를 로그로 기록하고, 실제로 전달되는 데이터가 예상과 일치하는지 확인합니다.
  • 유효성 검사: 데이터의 유효성을 검사하여 올바른 형식과 값을 가지는지 확인합니다. 이를 통해 잘못된 데이터가 API에 전달되지 않도록 합니다.
  • 디버깅 도구 사용: Postman, Insomnia와 같은 API 디버깅 도구를 사용하여 API 호출을 테스트하고, 데이터 흐름을 추적합니다.

 

resumesRouter.post('/post', authMiddleware, catchAsync(async (req, res) => {
  const { id } = req.user;
  const resumerData = req.body;
  
  const result = await prisma.resume.create({
    data: {
      userId: id,
      title: resumerData.title,
      content: resumerData.content,
    },
  });
  return res.status(200).json({ data: result });
}));

 

 

 

 

이 코드와 함께 발생하는 문제가 있습니다. API 디버깅 도구를 사용하여 서버에 데이터를 전송하는데, 때로는 title과 content 값이 제대로 전송되지 않는 문제가 발생합니다. 이때 "왜 값이 안들어오지?"라는 의문을 가지게 됩니다.

문제 해결을 위해서는 빠르게 대응해야 합니다. 왜냐하면 데이터 처리를 위해서는 클라이언트에서 데이터가 정상적으로 전송되어야 하기 때문입니다. 이때 우리는 먼저 데이터가 클라이언트에서 제대로 전송되었는지 확인해야 합니다.

문제의 본질을 파악하기 위해선 어떤 종류의 문제가 발생했는지를 명확히 이해해야 합니다. 예를 들어, 데이터가 누락되었는지, 형식이 잘못되었는지 등을 확인해야 합니다.

마지막으로, 이 문제는 주로 두 가지 경우로 나뉩니다. 첫째, 데이터가 클라이언트에서 서버로 정상적으로 전송되지 않는 경우이며, 둘째, 서버에서 데이터를 처리하는 과정에서 문제가 발생하는 경우입니다. 이러한 두 가지 경우를 고려하여 문제 해결에 접근해야 합니다.

 

resumesRouter.post('/post', authMiddleware, catchAsync(async (req, res) => {
  const { id } = req.user;
  const resumerData = req.body;
  console.log(req.body)
  const result = await prisma.resume.create({
    data: {
      userId: id,
      title: resumerData.title,
      content: resumerData.content,
    },
  });
  return res.status(200).json({ data: result });
}));

 

 

먼저, 우리는 주로 첫 번째 경우를 고려해야 합니다. 이 경우를 처리하기 위해, 우리는 console.log(req.body)와 같은 방법을 사용하여 클라이언트에서 서버로 전송되는 데이터를 확인합니다. 다시 한번 확인해보면, req.body에서는 contentt라는 키로 값을 보내고 있는 반면에, 우리는 create 메서드에서 content 키를 사용하려고 하는 것을 알 수 있습니다. 이는 데이터 전송과 처리 사이에 일관성이 없음을 시사합니다.

이런 경우, 우리는 두 가지 접근 방식 중 하나를 선택할 수 있습니다. 첫째, 보내는 측에서 값을 수정하여 일관성을 유지할 수 있습니다. 또는 둘째, 받는 측에서 값을 수정하여 일관성을 유지할 수 있습니다. 이를 통해 우리는 어디서 문제가 발생하는지 정확히 파악하고 적절한 조치를 취할 수 있습니다.

 

결론

에러를 만났을 때 당황하지 말고 체계적으로 접근하는 것이 중요합니다. chatgpt를 사용하여 해결하는것도 좋지만 해결과 동시에 어떠한 이유로 에러가 발생했는지도 파악하는것이 중요합니다. 에러 로그와 경로를 파악하고, 구글링을 통해 문제를 찾아보며, 로깅을 효과적으로 활용하여 문제를 해결하세요. 이러한 접근 방식을 통해 더 나은 개발자가 될 수 있습니다.

 

728x90
반응형