SpringBoot/HTTP

HTML 통신 기본

함형우 2023. 2. 1. 09:10
728x90

IP 주소 부여

클라이언트에서 서버로 통신할때 필요한 최소한의 규칙이다. 클라이언트에서도 주소가 필요하고, 내가 데이터를 보낼 서버에도 주소가 필요하다. IP(인터넷 프로토콜)의 역할은 패킷이라는 통신 데이터를 전달하기 위한 매개체이다.

  • IP 패킷
    • 출발지, 목적지의 IP를 넣고 전송할 데이터를 입력한다. 그렇다면 서버에서도 출발지, 목적지의 IP를 넣고 클라이언트쪽으로 돌려보내고 무사히 도착했다면 데이터 전송이 완료된다.
    • 클라이언트에서 전송할때와 서버에서 전송할때 경로가 다를수도 있다.
    • 비 연결성 : 패킷을 받을 대상이 없거나, 서비스 불가 상태여도 패킷은 전송된다. (단방향)
    • 비 신뢰성 : 중간에 패킷이 유실되거나 순서대로 도착하지 않을 수 있다.한계
    • 중복성 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 두개 이상이라면 구분할 수 없다.

💡 이런 문제를 해결하기위해 TCP, UDP(UDP는 간접적인 도움을 준다)를 사용한다.

 

TCP 프로토콜

인터넷 프로토콜 스택의 4계층

  • 애플리케이션 계층 - HTTP,FTP
  • 전송 계층 - TCP,UDP
  • 인터넷 계층 - IP
  • 네트워크 인터페이스 계층

IP 패킷 : 출발지IP, 목적지IP 등 + TCP 세그먼트 : 출발지 PORT, 목적지 PORT, 제어, 순서 검증 정보 등 으로 감싸서 데이터를 전송한다.

TCP란, 전송 제어 프로토콜이다.

  • 연결지향 : 가상연결 ( 연결이 실제로 됐는지 안됐는지 확인 )
    • TCP 3 way handshake ( 연결과정 )
      1. SYN : 접속을 요청하는 신호 - 클라이언트
      2. SYN+ACK : 요청한 접속을 수락하고, 서버측에서도 SYN을 신호를 보낸다. - 서버
      3. ACK : 클라이언트 측에서도 접속을 수락한다. - 클라이언트

물리적인 연결이 아닌, 논리적으로 연결됐다는 의미. 경로상의 노드들간의 연결상황을 알 수 없다.

  • 데이터 전달 보증 : 패킷이 누락이 됐다면 확인이 가능하다.
  • 데이터의 순서를 보장한다.

등등, 여러가지 기능이 있지만, 대략적으로 중요한 것만 추려냈을때 위와 같은 특징이 있다.

UDP란, 사용자 데이터그램 프로토콜이다.

  • 기능이 거의 존재하지 않는다.
  • 연결지향도 없고, 데이터 전달의 보증도 안되며, 순서도 보장해주지 않는다.
  • 데이터 전달 및 순서가 보장되지 않지만 단순하고 빠르다.
  • IP와 거의 비슷하며 PORT 체크섬 정도만 추가된다. 애플리케이션에서 별도로 추가해야한다.

규칙이 많고, 전송할 데이터가 많은 TCP에 비해 간편하기 때문에 더 빠르다. 모든 인터넷이 TCP를 기반으로 설정돼있기 때문에 TCP를 수정하지는 않고, UDP 프로토콜을 추가하여 최적화를 진행한다.

PORT

한번에 두 개 이상의 서버를 연결하려면? 같은 IP내에서 프로세스를 구분해주어야 한다. 이를 수행하는 매개체가 PORT이다. 0 ~ 1023은 잘 알려진 포트들이 많아 사용하지 않는것이 좋다.

DNS

DNS란, 도메인 네임 시스템이다. 전화번호부와 같은 역할을 한다. IP는 가변성이 있기 때문에, 정해진 DNS (도메인) 을 고정시켜 클라이언트 - DNS - 서버 순으로 연결시킨다.

URI (Uniform Resource Identifier)

Uniform : 리소스를 식별하는 통일된 방식

Resource : 자원, URI로 식별 가능한 모든 것

Identitfier : 다른 항목과 구분하는데 필요한 정보

  • URL : Locater :: 리소스가 있는 위치를 지정한다.
  • URN : Name :: 리소스에 이름을 부여한다.

위치는 변할 수 있지만, 이름은 변하지 않다.

웹 브라우저 요청 흐름

💡 http://www.google.com/search?q=hello&hl=ko

  • HTTP 요청 메시지 생성
    1. 웹 브라우저가 HTTP 메시지 생성
    2. SOCKET 라이브러리를 통해 전달한다. A: TCP/IP 연결, B: 데이터 전달
    3. TCP/IP 패킷 생성, HTTP 메시지 포함한다.

HTTP (HyperText Transfer Protocl)

html, text, image, 음성, 영상, json, xml 등, 서버간의 데이터들도 모두 http를 사용하여 정보를 전송한다. http/1.1 에 거의 모든 기능들이 들어가 있고, 2, 3은 성능만 개선된 버전이다.

클라이언트 서버 구조를 가지고 있고, 단순하고 확장이 쉽다.

클라이언트 서버 구조

  • Request, Response 구조
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기
    • 클라이언트와 서버라는 개념을 분리하는것이 중요하다. 두 구조가 각자 발전할 수 있게 됐다는 것에서 큰 의의를 가지고있다.
  • 서버가 요청에 대한 결과를 만들어서 응답

무상태 프로토콜 (Stateless)

  • 서버가 클라이언트의 상태를 보존하지 않는다. 그렇기 때문에 서버의 확장성이 높다, 그러나 클라이언트가 추가 데이터를 전송해야 한다.
  • 상태유지와 다른점 : 중간에 다른 점원으로 바뀌어도 된다. 갑자기 요청이 증가하면 서버를 투입하면 된다. 상태유지는 중간에 다른 서버가 오면 데이터를 인식할 수 없다.
  • 실무에서 한계점이 존재한다. 모든것을 무상태로 설계할 수 있는 없는경우도 존재한다. 로그인같은 경우는 상태 유지가 필요하기 때문에 브라우저 쿠키, 서버 세션을 사용한다. 상태유지는 최소한만 사용한다.
728x90