http.png

HTTP 기초

1. 인터넷 네트워크

1-1. IP(인터넷 프로토콜)

  • IP 주소를 통해 패킷이라는 통신 단위로 데이터를 전달한다.
  • IP는 대상을 쉽게 분별할 수 있다는 장점이 있다.
  • 패킷을 받을 대상의 상태와 관계없이 패킷을 전송하거나, 패킷이 유실되어도 알 수 없다는 점 등의 단점이 있다.

1-2. TCP 프로토콜

  • IP 패킷 안에 들어가 있고 PORT, 전송제어, 순서 등의 정보를 가지고 있어 IP의 단점을 보완해준다.
  • TCP는 전송제어 프로토콜이다.
  • TCP 3 way handshake 연결을 지향하고 데이터 전달을 보증한다.

❓ 3 way handshake?

클라이언트-서버 통신 환경에서 클라이언트가 접속 요청 메세지를 서버에게 보내면 서버가 요청을 수락한다는 메세지와 함께 접속 요청 메세지를 보내고 클라이언트가 서버에게 데이터를 전송하게 되는데, 이 과정을 3 way handshake라고 한다.

1-3. UDP 프로토콜

  • 단순하고 빠르다는 장점이 있다.
  • 데이터 전달 보증과 순서 보장이 되지 않는다는 단점이 있다.

1-4. PORT

  • 같은 IP 내에서 프로세스를 구분할 때 사용한다.

1-5. DNS

  • 도메인 네임 시스템(Domain Name System)의 줄임말이다.
  • IP를 사람이 기억하기 쉬운 이름으로 도메인 명을 IP 주소로 변환한다.

2. URL

url.png

2-1. URI

  • URI(Resource Identifier)는 URL(Resource Locator)와 URN(Resource Name)을 포함하는 단어다.

2-2. URL

  • 리소스가 있는 위치를 지정한다.
  • 주로 프로토콜을 사용하는데, http, https, ftp 등이 있다.
  • #뒤에 오는 리소스를 Fragment라고 부른다.

❓ Fragment?

html 내부 북마크 등에 사용되고 서버에 전송하는 정보가 아니다.

2-3. URN

  • 리소스에 이름을 부여한다.
  • URN 이름으로 실제 리소스를 찾을 수 있는 방법이 보편화 되어있지 않다.

3. HTTP

3-1. 특징

  • 요청을 보내고 응답을 받는 클라이언트-서버 구조이다.
  • 무상태 프로토콜(Stateless)을 지향한다.

❓ Stateless?

서버가 클라이언트의 상태를 보존하지 않는 것을 의미한다.
각 요청이 독립적으로 처리되고 확장성과 유연성을 높일 수 있는 장점을 제공한다.

  • 연결을 유지하지 않는 비 연결성이다.

3-2. HTTP 메서드

  • URI 설계에서 가장 중요한 것은 리소스 식별이다.

메소드 종류

1. GET
  • 리소스 조회
  • 서버에 전달하고 싶은 데이터는 쿼리 파라미터, 쿼리 스트링을 통해 전달한다.
  • 동적 데이터를 조회할 때 쿼리 스트링을 사용한다.
2. POST
  • 요청 데이터 처리
  • 메세지 바디를 통해 서버로 요청 데이터 전달
  • 주로 신규 리소스 등록, 프로세스 처리에 사용된다.
  • Form 데이터를 전송할 때 자주 사용된다.

HTML Form 전송은 GET, POST만 지원된다.

3. PUT
  • 리소스 대체(완전히 덮어쓰기)
  • 리소스가 없으면 생성
  • 클라이언트가 리소스를 식별할 수 있다는 것이 POST와의 차이점이다.
4. PATCH
  • 리소스 부분 변경
5. DELETE
  • 리소스 삭제

4. HTTP 상태 코드

4-1. 1xx(Informational)

  • 요청이 수신되어 처리중

4-2. 2xx(Successful)

  • 요청 정상 처리
  • 종류
  1. 200: 요청 성공
  2. 201(Created): 요청 성공해서 새로운 리소스가 생성됨, 생성된 리소스는 응답의 Location 헤더 필드로 식별, ex) Location: /members/100
  3. 202(Accepted): 요청이 접수되었으나 처리가 완료되지 않았음
  4. 204(No Content): 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음

4-3. 3xx

  • 요청을 완료하려면 추가 행동이 필요
  • 클라이언트는 응답에 Location헤더가 있으면 리다이렉트 시킴
  • 종류
  1. 301(Moved Permanently): 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음, 영구 리다이렉션
  2. 302(Found): 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음, 일시적인 리다이렉션
  3. 303(See Other): 302와 기능은 같음, 리다이렉트 요청 메서드가 GET으로 변경, 일시적인 리다이렉션
  4. 304(Not Modified): 캐시를 목적으로 사용, 클라이언트에게 리소스가 수정되지 않았음을 알려줌, 응답에 메시지 바디를 포함하면 안됨
  5. 307(Temporary Redirect): 302와 기능은 같음, 리다이렉트시 요청 메서드와 본문 유지, 일시적인 리다이렉션
  6. 308(Permanent Redirect): 301과 기능은 같음, 리다이렉트시 요청 메서드와 본문 유지, 영구 리다이렉션

❓ 일시적인 리다이렉션은 언제 사용할까?

1. POST로 주문후에 웹 브라우저를 새로고침하면? -> 중복 주문의 가능성이 있음 -> PRG(Post/Redirect/Get)로 방지
2. POST로 주문후에 주문 결과 화면을 GET으로 리다이렉트 -> 새로고침을 해도 결과 화면을 GET으로 조회

4-4. 4xx

  • 클라이언트 오류. 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
  • 종류
  1. 400(Bad Request): 클라이언트의 잘못된 요청으로 서버가 요청을 처리할 수 없음, 예) 요청 파라미터가 잘못됐거나 API 스펙이 맞지 않을 경우
  2. 401(Unauthorized): 클라이언트가 해당 리소스에 대한 인증이 필요함, 로그인과 같이 본인이 누구인지 확인하는 과정인 인증이 되지 않은 경우
  3. 403(Forbidden): 서버가 요청을 이해했지만 승인을 거부함, 인증 자격 증명은 있지만 권한이 충분하지 않은 경우, 예) 로그인을 한 관리자 권한이 없는 사용자가 관리자 등급의 리소스에 접근하는 경우
  4. 404(Not Found): 요청 리소스를 찾을 수 없음

4-5. 5xx

  • 서버 오류, 서버가 정상 요청을 처리하지 못함
  • 종류
  1. 500(Internal Server Error): 서버 문제로 오류 발생, 애매하면 500 오류
  2. 503(Service Unavailable): 서비스 이용 불가, 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음

📂 참고자료