ABOUT ME

Today
Yesterday
Total
  • 코드 오류의 유형과 수정 방법
    Node.js 2023. 12. 5. 13:23

    1. 오류의 유형

    1. 구문 오류 Syntax Errors : 오타나 괄호 등 요소를 빼먹은  경우
    2. 런타임 오류Runtime Errors : 구문 오류는 발생하지 않으나 서버 실행 시 오류가 발생
    3. 논리 오류Logical Errors : 알고리즘 등 논리 구조에서 발생

     

    2. 구문 오류 찾기 및 수정 

    • 잘 찾아서 수정하면 된다.
    • VS Code 등 IDE가 수정안을 제대로 제시는 못해도 어디가 이상하다고 잘 찾아주긴 한다.

     

    3. 런타임 오류 찾기 및 수정

    const fs = require("fs");
    
    const requestHandler = (req, res) => {
      const url = req.url;
      const method = req.method;
    
      if (url === "/") {
        res.write("<html>");
        res.write("<head><title>Enter Message</title></head>");
        res.write(
          '<body><form action="/message" method="POST"><input type="text" name="message"><button type-"submit">Send</button></form></body>'
        );
        res.write("</html>");
    
        return res.end();
      }
      
        res.setHeader("Content-type", "text/html");
      res.write("<html>");
      res.write("<head><title>My First Page</title></head>");
      res.write("<body><h1>Hello from my Node.js Server!</h1></body>");
      res.write("</html>");
    
      res.end();
      }

     

    위와 같은 코드 구조에서

    if 문 안에서 return을 빼먹었다고 해보자.

     

    npm start를 입력해보면 실행은 잘 된다. 그러나 페이지에 접속하려고 하면

     

    오류가 발생한다.

     

    이 오류를 자세히 살펴보자.

    첫 줄에서 http header관련 오류임을 알 수 있다.

    그 다음에서 '응답을 보낸 후에 헤더를 설정할 수 없다'고 한다.

    그 다음에서 문제가 되는 함수부를 찾아주고 있다.

     

    즉, if문 안에서 res.end()로 응답을 이미 보냈는데 함수가 종료되지 않아(return이 없어서)

    코드를 계속 실행해나갔다.

    그런데 res.setHeader()로 헤더를 설정해주려고 하니

    이미 배 떠났는데 뭘 더 설정하려고 하냐? 하는 것이다.

     

    이처럼 런타임 오류가 발생했을 때,

    오류메세지를 잘 읽어보고

    코드의 어느 부분이 잘못되었는지 유추할 수 있어야 한다.

     

    다시 return을 달아주면 잘 실행된다.

     

    3. 논리 오류 찾기 및 수정

    디버그 모드를 활용하면 좋다.

    다음 게시물로

Designed by Tistory.