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 메서드의 속성
- 안전(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
- 파일 업로드 같은 바이너리 데이터 전송 시 사용
- 다른 종류의 여러 파일과 폼 내용을 함께 전송 가능
- application/x-www-form-urlencoded
- 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
- 컬렉션과 문서로 최대한 해결하고 그 후에 컨트롤 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
- 서비스 이용 불가
스프링 완전 정복 로드맵
- 스프링 입문 > 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
- 스프링 핵심 원리 > 기본편
- 모든 개발자를 위한 HTTP 웹 기본 지식
- 스프링 웹 MVC 1편
- 스프링 웹 MVC 2편
- 스프링 DB 1편 > 데이터 접근 핵심 원리
- 스프링 DB 2편 > 데이터 접근 활용 기술
- 스프링 핵심 원리 > 고급편
- 실전! 스프링 부트