본문 바로가기

Spring boot

왜 HTTP Status Code를 사용해야하는가??

반응형

현재 스프링없이 바닐라 JAVA로 WAS를 구현하고 있다.

//404헤더를 보내준다
    private void response404Header(DataOutputStream dos)
    {
        try {
            String body = "<html><head><title>404 Not Found</title></head><body><h1>404 Not Found</h1></body></html>";
            byte[] bodyBytes = body.getBytes("UTF-8");
            dos.writeBytes("HTTP/1.1 200 OK \r\n");
            dos.writeBytes("Content-Type: text/html ;charset=utf-8\r\n");
            dos.writeBytes("Content-Length: " + bodyBytes.length + "\r\n");
            dos.writeBytes("\r\n");
            responseBody(dos,bodyBytes);
        } catch (IOException e) {
            logger.error(e.getMessage());
        }
    }

 

잘못된 url이 들어 왔을때 404헤더를 보내주는 코드이다.

보면 알겠지만 헤더에 HTTP/1.1 200 OK 를 보내주고 있다.

물론 body에다가는 404 Not Found를 넣어줬기에 브라우저에서는 404Not Found를 출력한다.

 

그럼 걍 body에다가만 내용 잘 넣어주면서 잘못된 url 요청이 오면 잘 매칭시켜주면 되지 왜 Status Code를 지켜주면서 header를 반환해야하는가?? 하는 근본적인 호기심이 생겼다.

 

 

역시 GPT에게 물어봤다.

정말 가슴에 와닿는 답변 하나가 왔다.

 

 

  • HTTP 표준 준수:
    • HTTP 프로토콜은 클라이언트와 서버 간의 통신을 정의하는 표준입니다. 상태 코드는 요청의 결과를 나타내며, 클라이언트가 요청에 어떻게 반응해야 하는지 알려줍니다.
    • 404 상태 코드는 "Not Found"를 의미하며, 서버가 클라이언트의 요청을 이해했지만 요청한 리소스를 찾을 수 없다는 것을 나타냅니다.
  • 클라이언트와의 명확한 커뮤니케이션:
    • 브라우저나 다른 HTTP 클라이언트는 상태 코드를 기반으로 요청의 성공 또는 실패를 판단합니다. 200 OK는 요청이 성공적으로 처리되었음을 나타내고, 404 Not Found는 요청된 리소스를 찾을 수 없음을 명확히 나타냅니다.
    • 200 OK로 모든 응답을 보내면 클라이언트는 요청이 성공한 것으로 착각할 수 있으며, 이는 클라이언트가 잘못된 결정을 내리게 할 수 있습니다.
  • 디버깅과 문제 해결:
    • 서버 로그와 클라이언트 로그에서 상태 코드를 통해 요청의 결과를 쉽게 파악할 수 있습니다. 예를 들어, 404 오류는 잘못된 URL을 요청했음을 빠르게 인식하게 도와줍니다.
    • 상태 코드가 항상 200 OK라면, 실제 문제를 디버깅하는 데 어려움이 있을 수 있습니다.
  • SEO(검색 엔진 최적화):
    • 검색 엔진 크롤러는 상태 코드를 기반으로 웹사이트의 상태를 판단합니다. 404 Not Found를 올바르게 사용하면 검색 엔진이 해당 페이지가 존재하지 않음을 이해하고, 검색 결과에 잘못된 링크를 포함하지 않게 됩니다.
  • 사용자 경험 개선:
    • 올바른 상태 코드와 메시지를 사용하면 사용자에게 더 나은 피드백을 제공할 수 있습니다. 404 페이지를 커스터마이징하여 사용자가 잘못된 URL을 요청했을 때 도움이 되는 정보를 제공할 수 있습니다.

이 중에서 4번째 SEO 부분이 가장 가슴에 와닿고 이해가 쉽게 되었다.

 

 

 

 

여기 보면 분명 /index.html/abc 라는 파일은 서버에 존재하지 않기에 404 Not Found를 날렸어야 한다.

하지만 난 200 OK 를 날렸고, 그 결과 검색 엔진 크롤러(여기서는 크롬)에서 정상 url 로 판단하고 자동완성이 가능하게 했다.

이건 SEO(검색엔진최적화) 측면에서 매우매우 안좋다.

 

그리고 사실 지금은 내가 다루는 상태 코드가 200,404 두 개 밖에 없어서 아는거지 만약 모든 상태 코드를 다룬다고 가정할 시, 어떤 상태코드를 받았는지 알아야 디버깅하고 유지보수 하기 편하지 않겠는가

 

그리고 HTTP 표준이라니깐 걍 불만 갖지 말고 쓰도록 해야겠다.

반응형

'Spring boot' 카테고리의 다른 글

Spring boot 끄적끄적(3)  (0) 2024.07.16
NoSQL vs SQL  (0) 2024.07.16
Spring boot 끄적 끄적(2)  (1) 2024.07.09
Spring boot 생성자 주입 vs 필드 주입  (0) 2024.06.28
Spring boot 끄적 끄적(1)  (0) 2024.06.25