Method

 · 5 mins read

HTTP Web Network

영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의 HTTP Web Network 강의 노트

  • HTTP Method

HTTP 메서드

  • GET : 리소스 조회
  • POST : 요청 데이터 처리(등록)
  • PUT : 리소스 대체, 없으면 생성
  • PATCH : 리소스 부분 변경
  • DELETE : 리소스 삭제

API URI 설계

  • 좋은 URI 설계는 리소스 식별이 중요
    • 회원 = 리소스
    • 회원 목록 조회 /members
    • 회원 조회 /members/{id} GET
    • 회원 등록 /members/{id} POST
    • 회원 수정 /members/{id} PUT
    • 회원 삭제 /members/{id} DELETE
  • 리소스(회원)와 행위(조회, 등록, 삭제, 변경)를 분리
    • URI는 리소스만 식별

GET

  • 리소스 조회
  • 전달 데이터는 query parameter OR query string 을 통해 전달

POST

  • 새 리소스 생성(등록)
  • 요청 데이터 처리
    • 프로세스 처리
    • 컨트롤 URI
  • massage body를 통해 서버로 요청 데이터 전달

PUT

  • 리소스가 있으면 대체, 없으면 생성 (덮어쓰기)
  • 클라이언트가 리소스 위치를 알고 URI 지정 (POST와의 차이)
    • PUT /members/100 HTTP/1.1
    • POST /members HTTP/1.1

PATCH

  • 리소스 부분 변경
    • PATCH /members/100 HTTP/1.1

DELETE

  • 리소스 제거
    • DELETE /members/100 HTTP/1.1

HTTP 메서드의 속성

HTTP 속성

  • 안전(Safe)
    • 리소스 변경이 일어나지 않는 것 (ex. GET, HEAD ..)
  • 멱등(Idempotent)
    • 몇 번을 호출하든 결과는 같다 (GET, PUT, DELETE)
    • 자동 복구 메커니즘에서 활용
  • 캐시가능(Cacheable)
    • 응답 결과 리소스를 캐시해서 사용 (GET, HEAD 정도만 캐시로 사용)

HTTP 메서드 활용

클라이언트에서 서버로 데이터 전송

  • Query Parameter를 통한 데이터 전송
    • GET
    • ex) 정렬 필터(검색)
  • Message Body를 통한 데이터 전송
    • POST, PUT, PATCH
    • ex) 회원가입, 상품주문, 리소스 등록, 리소스 변경

정적 데이터 조회

  • GET
  • 이미지, 정적 텍스트 문서
  • Query Parameter 없이 리소스 경로로 단순 조회

동적 데이터 조회

  • GET
  • 게시물 검색, 정렬, 필터
  • Query Parameter 사용

HTML FORM을 통한 데이터 전송

  • POST
  • 등록, 변경
  • Content-Type
    • application/x-www-form-urlencoded
      • form 내용을 Message Body를 통해 전송
      • 전송 데이터를 url encoding 처리
    • multipart/form-data
      • 파일 업로드 같은 바이너리 데이터 전송 시 사용
      • 다른 종류의 여러 파일과 폼 내용을 함께 전송 가능
  • HTML Form 전송은 GET, POST만 지원

HTTP API를 통한 데이터 전송

  • Server to Server 통신
  • 모바일 앱 클라이언트
  • Ajax 웹 클라이언트
  • GET -> Query Parameter로 데이터 전달 후 조회
  • POST, PUT, PATCH -> Message Body를 통해 데이터 전송
  • Content-Type : application/json

HTTP API 설계 예시

POST 기반 등록

서버가 관리하는 리소스 디렉토리 (Collection)

  • 회원 목록 /members -> GET
  • 회원 등록 /members -> POST
  • 회원 조회 /members/{id} -> GET
  • 회원 수정 /members/{id} -> PATCH, PUT, POST
  • 회원 삭제 /members/{id} -> DELETE

PUT 기반 등록

클라이언트가 관리하는 리소스 저장소 (Store)

  • 파일 목록 /files -> GET
  • 파일 조회 /files/{filename} -> GET
  • 파일 등록 /files/{filename} -> PUT
  • 파일 삭제 /files/{filename} -> DELETE
  • 파일 대량 등록 /files -> POST

HTML FORM 사용

HTML FORM은 GET, POST만 지원하므로 Control URI 사용

  • 회원 목록 /members -> GET
  • 회원 등록 폼 /members/new -> GET
  • 회원 등록 /members/new -> POST
  • 회원 조회 /members/{id} -> GET
  • 회원 수정 폼 /members/{id}/edit -> GET
  • 회원 수정 /members/{id}/edit -> POST
  • 회원 삭제 /members/{id}/delete -> POST

REST Resource Naming Guide

  • 컬렉션과 문서로 최대한 해결하고 그 후에 컨트롤 URI 사용

HTTP 상태코드

2xx (Successful): 요청 정상 처리

Code

  • 200 OK
  • 201 Created (POST)
  • 202 Accepted (batch)
  • 204 No Content

3xx (Redirection): 요청을 완료를 위해 추가 행동 필요

Redirect

  • 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동
  • 영구 리다이렉션 : 특정 리소스의 URI가 영구적으로 이동 (301, 308)
  • 일시 리다이렉션 : 일시적인 변경 (302, 303, 307)
    • PRG(Post/Redirect/Get)에 사용 / 새로고침 중복 주문 방지
  • 특수 리다이렉션 : 결과 대신 캐시 사용

Code

  • 300 Multiple Choices (X)
  • 301 Moved Permanently
    • 리다이렉트 시 Get으로 변하고, 본문 손실
  • 302 Found
    • 리다이렉트 시 GET으로 변하고, 본문 제거
  • 303 See Other
    • 리다이렉트 시 GET으로 변경
  • 304 Not Modified
    • 클라이언트에게 리소스가 수정되지 않았음을 알려줌 (캐시 재사용)
  • 307 Temporary Redirect
    • 리다이렉트 시 메서드와 본문 유지
  • 308 Permanent Redirect
    • 리다이렌트 시 POST, 본문 유지

4xx (Client Error)

  • 오류의 원인은 클라이언트

Code

  • 400 Bad Request
    • 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
  • 401 Unauthorized
    • 클라이언트가 해당 리소스에 대한 인증이 필요
    • 인증(Authentication): 로그인
    • 인가(Authorization): 권한
  • 403 Forbidden
    • 서버가 요청을 이해했지만 승인을 거부 (접근 권한 제한)
  • 404 Not Found
    • 요청 리소스를 찾을 수 없음

5xx (Server Error)

  • 서버 문제로 오류 발생

Code

  • 500 Internal Server Error
    • 서버 내부 문제로 오류 발생 (애매하면 500)
  • 503 Service Unavailable
    • 서비스 이용 불가

스프링 완전 정복 로드맵