수진개발서
article thumbnail

어떤 상태의 Http를 사용할까? API url설계는 어떻게 할까?

등등 백엔드 개발자는 HTTP에 관한 고민을 많이 한다.
실무에 꼭 필요한 HTTP 기본지식을 정리해볼까 한다.

 

프로토콜 계층

IP(Internet Protocol)

특징

  • 지정한 IP 주소에 데이터 전달
  • 패킷(Packet) 이라는 통신 단위로 데이터 전달
    • 출발지ip, 목적지ip 로 패킷 전달
    • 수많은 노드들을 걸쳐서 목적지ip 로 도착

IP 프로토콜의 한계

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성
    • 중간에 패킷이 사라져도 알 방법이 없음
    • 패킷의 순서가 보장되지 않음
  • 프로그램 구분
    • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면 올바르게 전달해주지 못함
  • 패킷 소실
    • 중간에 서버에서 문제가 있따면 패킷이 유실되며 소실되도 클라이언트는 알지 못함
  • 패킷 전달 순서 문제 발생
    • 바이트 크기에 쪼개진 패킷들이 서로 다른 노드를 탈 수 있다.
    • 무수히 타다보면 순서가 바뀌어서 도착할 수 있음
      IP의 정보로 바로 데이터를 보내기에는 이러한 많은 문제점이 존재한다. 그래서 우리는 TCP를 사용한다.

TCP(Transmission Control Protocol)

: 전송 제어 프로토콜

특징

  • TCP/IP 패킷 정보: 출발지PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보
    • IP만으로 해결되지 않았던 추가 정보 존재
  • 연결 지향 - TCP 3 way handshaking(가상 연결)
  • 데이터 전달 보증
  • 순서 보장
  • 신뢰할 수 있는 프로토콜

TCP 3Way handshake

TCP 3 Way handshake
1. tcp 프로토콜로 연결을 하면 syn이라는 메세지 전달
2. syn + ack 반환
3. ack 전달데이터 전송

-> 양쪽에서 syn, ack를 보낸다. 총 3번을 주고받는다
-> 이러한 과정을 걸치고 연결을 확인 후에 데이터를 주고받는다.
-> 요즘은 최적화 되어서 3번 ack를 보낼 때 같이 데이터를 전송하는 경우도 있다.

진짜 연결이 아닌 논리적 연결(개념적 연결)이다. 중간에 수많은 서버를 걸치기 때문에 중간에 노드는 모른다.
서로 syn, ack를 주고받기 때문에 연결이 되었구나 하고 생각을 하는 것이다.

장점

    • 데이터 전달 보증
      • tcp는 데이터를 잘 받았따고 서버에서 보내준다. 이는 데이터가 잘 갔는지 보증이 된다.
    • 순서 보장
      • 큰 메세지를 잘라서 패킷 1,2,3 으로 보냈다. 서버에서 순서가 틀리면 다시 보내라고 요청이 온다.
        -> 최적화 되는 경우도 있음 ex)알아서 기다렸다가 패킷을 조합하는 경우 등등

이 모든것은 IP 보다 순서, 검증 등등 정보가 더 많기 때문이다.

단점

  • 신뢰성을 보장하지만 높은 오버헤드를 가져올 수 있음.
  • 데이터의 헤더 사이즈가 큼

UDP(User Datagram Protocol)

: 사용자 데이터그램 프로토콜특징

  • 비 연결성 서비스
  • 이전 IP와 비슷한데 하나만 다른것은 Port, 체크섬의 정보가 추가로 존재하다는 것이다.
  • TCP는 시간과 데이터의 양도 굉장히 많아서 이미 손을 대지 못하는 프로토콜이다.
  • 그 점을 활용해 더 최적화가 가능한 UDP를 커스탐한다.
  • 요즘 각광을 받고있다

PORT

  • 같은 IP내에서 프로세스 구분
  • 여러 패킷에서 해당 애플리케이션을 구분해주는 것

DNS(Domain Name System)

    • IP는 기억하기 어렵다.
    • IP는 변경될 수 있다.

도메인 명을 IP주소로 변환

  • DNS 서버에 IP를 등록할 수 있다.
  • 도메인으로 접근할 수 있음

REFERENCE

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

 

profile

수진개발서

@sujin_park0607

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!