[Spring] HTTP 속성 및 상태 코드

늘보·2025년 2월 7일

Spring

목록 보기
8/24
post-thumbnail

속성

안전성

데이터를 변환하는 것불안정 하다고 본다.
GET Method는 변화가 없기 때문에 안전성이라는 속성을 가진다.


멱등성

한번 호출하거나 수천번 호출해도 결과가 같은 것을 의미한다.

  • GET : 데이터가 없기 때문에 항상 같은 조회 결과가 나온다.
  • PUT : 데이터를 덮어쓰기 한 후의 결과는 계속 같다.
  • DELETE : 이미 삭제 되었기 때문에 같은 요청을 해도 삭제된 결과 자체는 같다.

POST ➡︎ 내용은 동일해도 식별자가 다르게 생성되기 때문에 멱등성이 보장되지 않는다.
ex > 계좌 송금, 게시판 글쓰기

💡이러한 멱등성은 실패한 경우 재시도를 하기 위해서 필요하다.
    ➡︎ 멱등성이 보장된다면, 항상 결과가 같기 때문에 언제든 재시도가 가능하다.

🚨멱등하지 않다면, 중복 요청 금지🚨


캐시

클라이언트가 서버에 한번 요청했던 데이터에 대해서 매번 요청할 때 마다 다시 전송할 필요가 없도록 웹 브라우저가 임시적으로 데이터를 보관하는 장소를 의미한다.

  • GET, HEAD, POST 메소드는 캐시가 가능하다. ➡︎ 일반적으로는 GET, HEAD만 캐시로 사용한다.
    주로 HTML, CSS, IMAGE 등 정적 자원을 캐싱한다.

상태코드

1XX, 2XX, 3XX, 4XX, 5XX 상태코드가 있으며, 1XX번대는 잘 사용하지 않는다.

2XX (성공)

요청 처리가 정상적으로 완료된 경우 사용한다.

200 ok ➡︎ 요청 성공

201 created ➡︎ 새로운 리소스 생성

202 accepted ➡︎ 요청 수신은 되었지만 아직 처리되지 않은 상태 (Batch 처리에 사용)

204 No Content ➡︎ 요청은 성공했지만 응답 데이터가 없는 경우 (저장 버튼 클릭)


3XX (리다이렉션)

요청 완료를 하려면 추가 행동이 필요한 상태

📌 리다이렉트 및 forward 참고자료

300X 응답Location HTTP Header가 있으면 Location 위치로 리다이렉트한다.


1. 영구 리다이렉션

URL이 영구적으로 변경된 경우로, 기존 URL은 사용하지 않는다.

301 Moved Permanently ➡︎ 요청 메서드가 GET으로 변하고 본문이 제거 될 수 있다.

308 Permanent Redirect ➡︎ 리다이렉트 요청 시 메서드와 본문이 유지된다.


2. 일시 리다이렉션

URI가 일시적으로 변경된 경우
ex > 상품 주문 후 장바구니 페이지로 이동 ➡︎ PRG (Post, Redirect, get) 패턴을 따른다.

💡Post로 상품을 주문한 후 GET 메서드로 주문 결과 화면을 리다이렉트한다. 따라서 새로고침을 하면 결과화면만 조회된다.

302 Found ➡︎ 307, 303을 권장하지만 현실적으로 이미 많은 애플리케이션 라이브러리들이 302를 기본값으로 사용한다.


3. 기타 리다이렉션

304 Not Modified ➡︎ 캐시 목적으로 사용되며, 리소스가 수정되지 않았다는 것을 의미한다.

💡 임시로 저장된 데이터 즉, 캐시를 활용할 것인지에 대한 여부를 묻는다.


4XX (클라이언트 에러)

클라이언트가 잘못된 문법 등으로 서버가 요청을 수행할 수 없다는 것을 알려준다.

400 Bad Request ➡︎ API 스펙이 일치하지 않는 경우 (숫자를 문자로 혹은 필수 값을 null로 입력한 경우 등)

401 Unauthorized ➡︎ 리소스에 대한 인증 실패(로그인)

403 Forbidden ➡︎ 인가 관련 문제 (일반 유저와 관리자)

404 Not Found ➡︎ 리소스가 없는 경우

📌 [이슈 #3] 아이디 중복 체크시 Http Status값을 어떻게 설정해야 할까?


5XX (서버 에러)

요청은 정상적으로 이루어졌지만 서버가 처리하지 못한 경우

➡︎ 500번대가 발생했다는 것 자체서버가 안정적이지 않다는 의미이기 때문에 발생하지 않는 것이 가장 좋다

500 Interal Service Error ➡︎ 대부분 500으로 처리

503 Service Unavailable ➡︎ 서비스 이용 불가 (Retry-After Header를 사용하면 얼마뒤에 복구되는지 응답할 수 있다.)

profile
누워만 있지 말고 제발 뭐라도 하자.

0개의 댓글