[CS]프로토콜과 HTTP

코린이의 성장일기·2023년 8월 27일

프로토콜(Protocol)

프로토콜의 정의

  • 컴퓨터 사이에서 통신을 위한 데이터 교환 방식을 정의하는 체계
  • 즉, (쉽게 말하면) 통신을 위한 약속

OSI 7계층 (Open Systems Interconnection 7 layer)

  • 개방형 시스템 상호연결 참조 모델
  • 네트워크 통신이 일어나는 과정을 7단계로 표현한 것 Screenshot 2023-06-15 at 8.59.07 PM.png
  • 1계층
    • 물리 계층 (Physical Layer)
    • 전기적 신호로 데이터를 전송하는 계층
    • 리피터, 허브, 광케이블
  • 2계층
    • 데이터링크 계층 (Data Link Layer)
    • MAC 주소 기반으로 프레임 정보를 전달하고 흐름제어, 에러 검출등을 수행
    • 대표 프로토콜) MPLS, Ethernet
  • 3계층
    • 네트워크 계층 (Network Layer)
    • 네트워크상에서 경로를 설정하고 경로에 따라 패킷 정보를 전달
    • (대표 프로토콜) IP, IPSec
  • 4계층
    • 전송 계층 (Network Layer)
    • 종단간 신뢰성 있는 세그먼트 데이터 전송
    • (대표 프로토콜) TCP, UDP
      • 너무나 중요한 프로토콜
      • 구글링 반드시 해봅시다
      • (Click) ⇒ link
  • 5계층
    • 세션 계층 (Session Layer)
    • 통신하는 프로세스, 호스트 간 연결 유지
    • (대표 프로토콜) SSL, TLS
  • 6계층
    • 표현 계층 (Presentation Layer)
    • 전송 데이터의 표현 방식을 결정 (데이터 포맷, 암축, 암/복호화 등)
    • JPEG, MPEG, MIDI, GIF 등
  • 7계층
    • 어플리케이션 계층 (Application Layer)
    • 최종 목적지로서 응용 서비스를 수행하는 계층
    • (대표 프로토콜) HTTP, FTP, SSH, SMTP

HTTP란?

HTTP의 정의

  • HyperText Transfer Protocol
  • 클라이언트와 서버가 메시지를 교환하기 위한 프로토콜
  • 웹 서비스는 모두 HTTP 프로토콜 위에서 동작 → 웹 개발자라면 반드시 알아야만 하는 개념
  • TCP 기반 프로토콜 (HTTP 2.0까지 / 3.0부터는 UDP 기반)

요청과 응답 (클라이언트 서버 구조)

  • 클라이언트의 요청이 선행 되어야만 서버가 응답을 하는 구조 Screenshot 2023-06-16 at 12.15.55 AM.png
  • 다음과 같이 서버가 먼저 클라이언트에게 응답을 줄수 없습니다.
    • 클라이언트의 요청이 없었음에도 서버가 응답을 주려면 웹소켓 사용을 고려해야 함

      Screenshot 2023-06-16 at 12.45.06 AM.png

Stateless (무상태)

  • 서버가 클라이언트의 상태를 기억하지 않는 특징
  • 서버의 확장성이 높다는 장점이 있지만
  • 요청을 할 때마다 클라이언트를 기억하지 못하기 때문에 추가적인 조치가 필요 (세션, 쿠키) Screenshot 2023-06-16 at 1.05.34 AM.png

Connectionless (비 연결성)

  • 요청을 주고받을때만 연결을 유지하는 특성
  • 단점) 요청을 주고받을때마다 3 way handshaking 발생
  • 장점) 서버의 자원을 효율적으로 사용할 수 있다

HTTP의 구성요소

HTTP 요청/응답 메시지 (참조링크)

  • 클라이언트와 서버는 약속한 포맷에 맞는 메시지를 주고 받습니다.
  • 요청 메시지 형태 Screenshot 2023-06-16 at 1.20.29 AM.png
    • 첫번째 line → Method + URI + Version
    • 두번째 line 부터 → HTTP 요청 Header 정보
    • 공백 + Body
  • 응답 메시지 형태 Screenshot 2023-06-16 at 1.17.34 AM.png Screenshot 2023-06-16 at 1.15.38 AM.png
  • 첫번째 line → Version + Status + Status Message
  • 두번째 line 부터 → HTTP 응답 Header 정보
  • 공백 + 응답 Body

HTTP Method

  • 클라이언트와 서버간 통신에서 서버가 취해야 할 행동을 명시
  • 참고자료/출처
  • 주요 Method
    Method행동비고
    GET조회(params) /api/movies/1
    (querystring) /api/movies?movieId=1&genre=action
    POST생성요청 메시지의 body 사용
    PUT(전체) 수정요청 메시지의 body 사용
    PATCH(일부) 수정요청 메시지의 body 사용
    DELETE삭제리소스를 제거
  • 기타 Method
    Method역할
    HEADGET과 유사하지만 응답 Body 없이 헤더만 응답 (서버 상태 조회)
    TRACE요청 패킷과 응답 패킷의 변조 유무를 체크
    OPTIONS서버에서 허용가능한 요청 Method 조회하기

HTTP Header

HTTP status

  • 클라이언트 요청에 대한 응답 결과 코드
  • (참고 링크)
  • 200 status
    • 200대의 상태 코드는 성공적인 응답을 의미합니다.

      status code의미
      200http 요청이 성공적으로 수행 됨
      201(Created 의 의미) 요청한 리소스 생성이 성공적으로 수행 (보통-POST)
  • 300 status
    • 300대의 상태 코드는 리다이렉션의 의미입니다.

      status code의미
      301요청한 리소스의 경로가 변경되었음을 의미
      304클라이언트에게 응답이 수정되지 않았음을 의미 (캐시)
  • 400 status
    • 400대의 상태 코드는 “클라이언트” side 에서 발생한 에러를 의미합니다.

      status code의미
      400클라이언트가 약속과는 다른 형식으로 서버에게 요청
      401인증되지 않은 사용자의 접근
      403인가 되지 않아서 리소스에 접근할 수 없음
      404요청한 리소스를 찾을 수 없음
  • 500 status
profile
작동하는 코드만 만들면 반은 완성이다.

0개의 댓글