웹 기본 지식 (2)

리진아·2022년 12월 27일
0

웹 기본 지식

목록 보기
2/3
post-thumbnail

모든 개발자를 위한 HTTP 웹 기본 지식 (2)

인터넷에서 컴퓨터는 어떻게 통신하는지 알 수 있는 기본적인 내용
(4) HTTP 메서드
(5) HTTP API 설계
(6) HTTP 상태코드


4️⃣ HTTP 메서드

1. HTTP API 만들기

➡️ Cpater 5에서 자세하게 다룸
URI는 계층구조 활용

회원 정보 목록 조회, 등록, 수정, 삭제
보통은 이렇게 생각 함 🔽 좋은 방법이 아님.
/read-member-list
/read-member-by-id
/create-member
/update-member
/delete-member

✓ 리소스 : 회원이라는 개념 자체가 리소스임. 회원을 조회하라는 것이 리소스가 아님.
회원이라는 리소스만 식별하면 됨 -> 회원 리소스를 URI에 매핑

다 같은 리소스에 대해 같아짐,,
-> 리소스와 행위를 분리!

URI는 리소스만 식별
리소스(명사) : 회원
행위(동사) : 조회, 등록, 수정, 삭제

✓ 메서드 = 행위라고 생각하면 됨

2. HTTP 메서드 - GET, POST, PUT, PATCH, DELETE

(1) GET

리소스 조회

GET/search?q=hello&hl=ko HTTP/1.1

✓ 서버에 전달하고 싶은 데이터를 query(쿼리 파라미터)를 통해서 전달

  1. 메세지 전달 GET으로..
  2. 서버 도착, 리소스 조회
  3. 응답 데이터 Response

(2) POST

✓ 요청 데이터 처리, 메세지 바디를 통해 서버로 요청 데이터 전달

POST/members HTTP/1.1
Content-Type: application/json
{
	"username":"hello"
}
  1. 클라이언트가 메세지 전달
  2. 서버에서 받은 데이터를 등록하고 신규 리소스 생성
  3. 응답 데이터를 Response

✔︎ 정리 : 대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청. 회원가입, 주문, 게시판 등
✓ 리소스 URI에 POST 요청이 오면 요청 데이터를 어떻게 처리할지 리소스마다 따로 정해야 함

  • 새 리소스 생성(등록) - 아직 식별하지 않은 새 리소스
  • 요청 데이터 처리 - 단순 데이터를 생성, 변경하는 것을 넘어 프로세스를 처리해야 하는 경우 (주문을 받고 배달을 시키기 위해 배달시작 버튼을 누름, 이후에 라이더한테 요청이 갈 때도 POST 사용)
  • 다른 메서드로 처리하기 애매한 경우 - JSON으로 조회 데이터를 넘길 때, GET 메서드를 사용하기 어려운 경우

(3) PUT

리소스를 대체 (덮어쓴다)
✔︎ 중요! 클라이언트가 리소스를 식별
클라이언트가 리소스의 위치를 완전히 알고 URI를 식별
(POST와 다르게 클라이언트가 위치를 알고 URI 지정)

-> username이 사라지고 age필드만 남음

이런 경우 때문에 PATCH를 사용!!

(4) PATCH

리소스 부분 변경

(5) DELETE

리소스 제거

3. HTTP 메서드의 속성

(1) 안전

✓ 호출해도 리소스를 변경하지 않음.
GET은 안전 (조회만 하기 때문)
PUT, POST, DELETE, PATCH 안전X <- 변경되기 때문

(2) 멱등

✓ 한 번, 두 번, 백 번 호출하든 결과는 동일.
GET, PUT, DELETE, 멱등
POST는 멱등이 아님 <- 결제를 두 번 결제했을 때 생각하면 2배의 금액이 나감

사용자 여러명이 데이터를 수정했을 때 -> 외부요인으로 중간에 리소스가 변경되는 것까지는 고려하지 않는다. -> 멱등하지 않는다.

(3) 캐시가능

응답 결과 리소스를 캐시해서 사용할 수 있는가
GET, HEAD, PATCH 캐시가능 (구현이 쉽지는 않늠)

4. HTTP메서드 활용

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

데이터 전달 방식
1. 쿼리 파라미터를 통한 데이터 전송 (GET 정렬, 검색)
2. 메세지 바디를 통한 데이터 전송 (POST, PUT, PATCH 회원가입, 상품주문)

  • 정적 데이터 조회
    쿼리 파라미터 미사용
    이미지, 정적 텍스트 문서, 조회는 GET 사용

  • 동적 데이터 조회
    쿼리 파라미터 사용
    주로 검색, 목록 정렬 등 사용 GET사용
    GET은 쿼리 파라미터 사용해서 데이터를 전달

  • HTML Form 데이터 전송
    쿼리 파라미터랑 유사함
    POST전송(데이터를 바꿀 때) GET전송(검색) 가능(쿼리파라미터 형식으로,,)

  • HTTP API 데이터 전송
    백엔드 서버를 통신할 때 사용
    앱 클라이언트(아이폰, 안드로이드) 통신을 할 때
    웹 클라이언트 "
    POST, PUT, PATCH : 메세지 바디를 통해 데이터 전송
    GET 조회는 무조건 쿼리 파라미터로 전달


5️⃣ HTTP API 설계

  1. HTTP API - 컬렉션
    POST 기반 등록
  2. HTTP API - 스토어
    PUT 기반 등록
  3. HTTP FORM 사용
    GET과 POST만 지원

<회원관리 시스템>
POST기반 등록

목록, 조회 > GET
등록 수정 > POST
수정 > PATCH
수정 > PUT
삭제 > DELETE

클라이언트는 등록될 리소스의 URI를 모른다
✓ 서버가 새로 등록된 리소스 URI를 생성해준다
컬렉션 - 서버가 관리하는 디렉토리

PUT기반 등록

목록, 조회 > GET
등록 > PUT (기존에 파일이 있으면 덮어 씀. 없으면 생성)
삭제 > DELETE
대량등록 > POST

✓ 클라이언트가 리소스 URI를 알고 있어야 한다. (PUT으로 신규 자원 등록하기 때문)
클라이언트가 직접 리소스의 URI를 지정한다.
스토어 - 클라이언트가 관리하는 리소스 저장소

HTML FORM 사용
GET, POST만 지원
순수한 HTML form을 사용


6️⃣ HTTP 상태코드

: 클라이언트가 보낸 요청의 처리 상태를 응답해서 알려주는 기능

  • 299 ??? -> 2XX (Successful)

(1) 2XX

200 OK 요청 성공

201 created 요청 성공해서 새로운 리소스가 생성됨
<생성된 리소스의 응답의 Location 헤더 필드로 식별함.>

202 Accepted 요청이 접수는 되었으나 처리가 완료되진 않음.

204 No Content 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음

(2) 3XX - 리다이렉션

✓ 요청을 완료하기 위해 유저에이전트(웹 브라우저)의 추가 조치 필요

✔︎ 리다이렉션 : 3XX 응답의 결과에 Location 위치로 자동 이동되는 것

  • 영구 리다이렉션 : 영구적으로 이동 > 301, 308
  • 일시 리다이렉션 : 일시적인 변경 > 302, 307, 303
  • 특수 리다이렉션 : 결과 대신 캐시를 사용 > 304

(3) 4XX - 클라이언트 오류

✓ 오류의 원인이 클라이언트에 있음
복구 불가능
400 서버가 요청을 처리할 수 없을 때 ex)요청 파라미터가 잘못됐을 때
401 클라이언트가 해당 리소스에 대한 인증이 필요함
403 서버가 요청을 이해했지만 승인을 거부함
404 요청 리소스를 찾을 수 없음

(4) 5XX - 서버오류

✓ 서버 오류
복구 가능
500 서버 문제
503 서비스 이용 불가

profile
알맹이가 가득 찬 개발자가 되기 위해 한 걸음 더 다가가는,

0개의 댓글