비연결성(Connectionless)

 

TCP/IP는 연결을 유지한다.

요청 <-> 응답 형태

 

근데 서버에 연결된 클라이언트가 많아지면 서버의 부하가 많이 된다.

 

비연결성의 사용 이유!

연결을 유지하지 않는 모델은 서버가 유지해야 하는 자원이 줄어서 좋다.

 

HTTP는 기본적으로 연결을 유지하지 않는다.

Request, Response 형식으로 요청하고 응답이 오면 종료한다.

연결을 바로바로 끊게 되면 수천 명이 사용해도 동시에 들어오는 건 매우 적다.

 

비연결성의 단점

1.TCP/IP 연결에 필요한 3 way handshake 시간이 계속 추가된다.

2. 웹 브라이저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, css, 추가 이미지 등 수많은 자원이 함께 다운로드된다.

 

처리방법

하나당 연결 후 끊는 게 아니라 다천리 될 때까지는 연결을 유지한다.

연결
자바스트립트
css
추가이미지
종료
형식으로 사용한다.

http 메시지

 

http는 모든 바이너리 데이터를 다 전송할 수 있다.(이미지, html, json 등등)

http를 사용하는 이유!

 

http 메시지 구성 형식

Start-line 시작라인
Header 헤더
Empty line 공백 라인(CRLF) <- 무조건 있어야한다.
Message body

공식 스펙도 이렇게 되어있다.

 

Request(요청)

요청 시 메시지 구성요소에 들어가는 것

시작 라인 request-line

1.Http 메서드

- GET, POST, PUT, DELETE 등이 있다.

 

2. 요청 대상

- 대부분 절대 경로 이후의 값이 들어간다.

- /search?q=hello&hl=ko

3.Http 버전

- HTTP/1.1

 

Request(응답)

응답 시 메시지 구성요소에 들어가는 것

시작 라인 status-line

1.Http 버전

 

2.HTTP상태 코드(요청 성공, 실패를 나타냄)

- 200 : 성공

- 400 : 클라이언트 요청 오류

- 500 : 서버 내부 오류

 

3. 이유 문구

- 사람이 읽을 수 있는 오류 문구


Http header  

Key:Value 형태로 구성된다.

Key는 대소문자 구분하지 않는다.

value는 당연히 대소문자를 구분한다.

 

Http header 용도

http 전송에 필요한 부가 정보가 모두 포함되어있다.

서버와 협의 시에 부가 정보도 추가할 수 있다. 

ex) 특정 헤더 값 추가

KEY-TEST : "바보"


HTTP 메시지 바디

실제로 전송할 데이터가 포함된다.

 

 

 

URI

 

URI (Uniform Resource Identifier) : 

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

Resource = 자원, URI로 식별할 수 있는 모든 것

Identifier = 다른 항목과 구분하는데 필요한 정보

 

 

URI? URL? URN?

URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다.

 

즉, URI는 가장 큰 개념으로 생각하면 된다.

URL, URN을 포함한다.

 

URL = 리소스가 있는 위치를 지정

URN = 리소스에 이름을 부여

 

URL을 쓰고 URN을 잘 안 쓰는 이유?

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

 

또, URN는 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되지 않았다.

 

URL 분석

url예제 :  https://www.google.com/search?q=hello&hl=ko

 

https = 프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙

ex) http, https, ftp

 

www.google.com = 호스트명 : 도메인명이나 IP주소 사용

 

/search = path : 리소스 경로, 계층적 구조

 

?q=hello = query : (key : value) 형태로 되어있다. 

Query parameter, query string이라고 불린다.

 

#fragment = http안에서 사용한다. 서버로 가지는 않음.


웹브라우저 요청 흐름

 

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

참고사항 https는 433 포트가 생략되어있다.

DNS 조회 www.google.com/

PORT 조회 433포트

http 요청 메시지 생성 전달

서버에서 응답받은 메시지로 페이지 구성

 


위에 동작을 글로 표현한다면? 

클라이언트

 

소켓 라이브러리로 

구글 서버와 연결

TCP/IP로 포장 후 전송 데이터(http메시지) 전송

 

서버

http메시지 분석 후 동작

http 응답 메시지를 전송해준다.


http

HyperText Transfer Protocol

모든 것을 http으로 전송할 수 있다.

 

Http/1.1을 가장 많이 사용한다.

 

기반 프로토콜

http/1.1, http/2는 TCP 기반

http/3은 UDP 기반이다.

 

현재는 http/1.1이 많이 사용된다.

 

관리자 도구에서 프로토콜을 확인할 수 있다.

아래 사진은 http/3을 사용하는 걸 확인할 수 있다.


HTTP 특징

1. 클라이언트 서버 구조

2. 무상태 프로토콜 (스테이스 리스), 비연결성

HTTP 메시지

단순함, 확장 가능

 

1. 클라이언트 서버 구조

 

Request Response 구조

 

클라이언트는 서버에 요청을 보내고, 응답을 대기

서버가 요청에 대한 결과를 만들어서 응답

 

클라이언트 -> 요청 -> 서버

클라이언트 <- 응답 <- 서버

 

클라이언트는 ui를 그리는데 집중한다.

비즈니스 로직은 서버에 다 처리한다.

 

대용량 트래픽 처리에 유리하다

백앤드에서 아키텍처를 정해 비즈니스 로직을 처리한다.

 

2. 무상태 프로토콜

 

서버가 클라이언트의 상태를 보존 X

장점 : 서버 확정성 높음(스케일 아웃)

단점 : 클라이언트가 추가 데이터 전송

 

Stateful 상태 유지

무상태의 반대!

서버가 이전 상태를 보존한다.

같은 서버로 항상 유지되어야 한다.

또 사용 서버가 장애 날 경우 처음부터 다시 시작해야 한다.

 

Stateless 무상태

프런트에서 데이터를 저장하고 있고

서버에 전달한다.

 

상태 유지는 서버가 바뀔 경우 장애가 난다.

무상태는 서버가 바뀌어도 결제할 수 있다.

 

즉, 필요한 데이터를 그때그때 모두 주기에

 서버를 대량 증설해도 문제없다.

 

Stateless 한계 및 단점

모든 것을 무상태로 설계할 수 없다.

http데이터를 많이 보내야한다.

HTTP

 

인터넷 네트워크

 

인터넷 통신이라고 함은? 클라이언트와 서버가 통신하는 것을 말한다..

 

클라이언트 <- 인터넷 -> 서버

 

중간 노드(서버)들을 거쳐서 데이터가 전달된다.

 

IP(인터넷 프로토콜)

데이터를 전달하려면 주소가 필요한데 그것이 IP이다.

 

IP주소를 통해 데이터를 전달한다.

패킷단위로 전송한다.

 

패킷에 출발지IP,목적지IP등이 저장된다.

클라이언트 -> 서버, 서버 -> 클라이언트

양쪽 다 모두 동일하다.


IP만 있을 때 문제점!

1. 비연결성

상대 주소가 있는 없든 보낸다.

대상 서버가 패킷을 받을 수 있는지 모른다.

 

2. 비신뢰성

패킷 전송 중 패킷이 사라질 때?

패킷의 용량이 클 때 패킷이 순서대로 안 갈 수 있다.

 

3. 프로그램 구분

여러 개 프로그램 구동


이 문제를 해결하기 위해

TCP\UDP를 사용된다.

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

4단계 형식으로 감싸 진다 

 

즉, IP 위에 TCP를 이용해 사용할 수 있게 한다고

생각하면 된다.

 

4단계 예제

ex) 채팅

socket(애플리케이션 계층)

 (socket(애플리케이션계층),TCP)

((socket(애플리케이션 계층), TCP), IP)

 

식으로 감싸서 전달한다.

 

TCP를 통해 IP에서 부족한 것을 채워준다.

 

IP : 출발지 IP, 목적지 IP

TCP : 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보

 

TCP 사용 이유

연결 지향 - 먼저 연결해보고 메시지를 보낸다.

물리적으로 연결된 게 아니라

논리적으로 연결되어 있다.

TCP 3 way handshake

  1. SYN (클라이언트-> 서버)
  2. SYN + ACK (서버 -> 클라이언트)
  3. ACK (클라이언트 -> 서버) 데이터도 함께 전송 가능

 

데이터 전달 보증 - 메시지 누락을 체크할 수 있다.

순서 보장

 

UDP - 기능이 거의 없다.

IP와 동일하지만 PORT가 추가되었다.

장점 속도가 빠르다.

 

최근엔 UDP를 많이 사용하려 한다.


PORT

 

PORT는 애플리케이션 하나에 하나씩 할당된다.

한 번에 둘 이상을 연결하기 위해 사용한다.

IP만 있다고 생각하면 패킷들을 분리할 방법이 없다.

 

IP는 서버를 찾고 PORT는 애플리케이션을 구분한다.


DNS(Domain Name System)

 

IP는 기억하기 어렵다.

또 IP는 변경될 수 있다.

 

도메인명으로 IP주소를 연결한다.

도메인명은 그대로있고 변경된 IP주소를 연결하면된다.

+ Recent posts