[CS]Http 상태코드

Gooder·2021년 7월 23일
1

CS 면접 준비하기

목록 보기
4/5

컴퓨터를 사용하다보면 아래와 같은 페이지를 자주는 아니지만 간혹가다가 만나게됩니다.

HTTP 통신을 기반으로 하고있는데, 통신을 할 때, 그 결과를 알려주기위해서 HTTP 상태코드라는 것을 사용합니다.

이번 게시글에서는 HTTP 상태 코드에대해서 알아보겠습니다. 이 글을 읽고난 이후에는 간혹가다 만나는 에러페이지에 당황하지않고 어떤 상황인지 알고 주변에 도움을 요청하거나 스스로 해결하는데 도움이 되면 좋겠습니다.


HTTP 상태코드

클라이언트가 보낸 요청의 처리 상태를 알려주는 기능을 함.
404에러, 500 에러 등등..

1xx - 요청이 수신되어 처리중

잘 사용하지않는다.

2xx - 정상 처리됨

  1. 200 - ok(정상적으로 잘 처리해서 반환 한 경우)

  2. 201 - created(post등으로 서버에서 자원을 생성한 경우)

  3. 202 - accepted(요청이 접수되었으나 처리가 안된 경우 - 배치 처리 같은 곳에서 사용한다.)

  4. 204 - no content(성공적으로 수행했는데, 응답 페이로드 본문에 보낼게 없는 경우)

3xx - 요청을 완료하려면 추가 행동이 필요

  • 웹 브라우저는 3xx 응답 결과에 Location header가 있으면 그 위치로 자동으로 이동한다.

  • 영구 리다이렉션 - 특정 리소스의 URI가 영구적으로 이동(301,308), 원래의 URL을 사 용하지않아서 검색 엔즌 등에서도 변경을 인지한다.

  • 일시 리다이렉션 - 일시적인 변경(302,307,303), URI가 일시적으로 변경. 따라서 검색 엔진 등에서 URL을 변경하면 안된다. 302를 가장 많이 쓰는데, 303과 307을 권장함

  • 특수 리다이렉션 - 결과 대신 캐시를 사용(300,304),

  • PRG (Post/Redirect/Get) - Post했을 때, 이미 있으면 302 로 Location 주면서 일시적으로 리다이렉션하게해서 중복 주문과 같은 오류를 방지할 수 있다.

  1. 300 - multiple choices(거의 안씀)

  2. 301 - Moved Permanently
    리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음.

  3. 308 - Permanent Redirect
    301과 기능은 같지만 리다이텍트시 요청 메서드와 본문을 유지한다.

  1. 302 - Found
    리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다. 301이랑 똑같다.

  2. 303 - See Other
    리다이렉트시 요청 메서드가 GET으로 변경된다.

  3. 307 - Temporary Redirect
    302와 기능이 같음. 리다이렉트시 요청 메서드와 본문이 유지된다. 요청 메서드 변경은 절대 불가능

  4. 304 - Not Modified
    캐시를 목적으로 사용. 클라이언트에게 리소스가 수정되지않았음을 알려줌. 캐시에 있는게 써도되는건지 물어본거에 써도 된다고 알려줌. 바디메세지를 포함하면 안된다.(로컬캐시를 사용해야하기 때문이다)

4xx - 클라이언트 오류가 나서 서버가 요청을 처리할 수 없음.(잘못된 문법 등등)

오류의 원인이 클라이언트에 있는 경우를 의미

  1. 400 - Bad Request
    요청이 잘못된 것(요청 구문이나 API 스펙이 안맞은 경우) 백엔드에서 철저하게 다 막아줘야한다.

  2. 401 - Unauthorized
    인증이 안된 경우. WWW-Authenticate 헤더와 함꼐 인증 방법을 설명
    인증(누구인지 확인) 인가(권한부여, ADMIN 권한처럼 특정 리소스에 접근할 수 있는 권한)

  3. 403 - Forbidden
    요청은 이해했으나, 승인은 거부한 경우. 인증은 됐지만, 인가가 안된 경우

  4. 404 - Not Found
    요청 리소스가 서버에 없음. 또는 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때.

405 Method Not Allowed
요청한 메소드는 서버에서 알고 있지만, 제거되었고 사용할 수 없습니다. 예를 들어, 어떤 API에서 리소스를 삭제하는 것을 금지할 수 있습니다. 필수적인 메소드인 GET과 HEAD는 제거될 수 없으며 이 에러 코드를 리턴할 수 없습니다.

5xx - 서버 문제, 서버가 정상 요청을 처리하지 못하는 경우.

  • 서버 문제(디비 접근이 불가능하거나 NullPointerException이 터지는 경우 등등)

  • 503 - Service Unavailable
    섭다하고 작업할 때 보여주는거. Retry-After헤더로 공지사항도 띄워줄 수 있음.

  • 서버에서 문제가 터졌을 때, 500대 에러를 만들어야함. 데이터 숨기거나 할거는 다 400대로 던져야한다.

  • 즉, 비즈니스 로직 상의 예외케이스는 500대를 던지면 안된다.

500대를 내는거는 쿼리에 문제가 있거나 디비에 문제가 있거나 널포인트가 뜬다거나하는 상황에서 사용한다.


인식할 수 없는 상태코드를 서버가 반환하면 클라이언트는 그 상위 개념에서 이해하면된다. ex) 299 -> 2xx 대로 생각.

참고문헌

더 다양한 http 상태 코드는 아래에서 확인하시면 됩니다.
http 상태코드 문서

profile
세상을 변화시킬 신스틸러 서비스를 만들고싶은 개발자 Gooder 입니다.

0개의 댓글