개발자 미니민의 개발스터디

[HTTP] 웹과 HTTP 기본 지식 - 1

by mini_min

HTTP (HyperText Transfer Protocol)

HTTP 는 클라이언트에서 서버까지 일련의 흐름을 결정하는 것이다. 

 

IP (인터넷 프로토콜)

역할 : 지정한 IP 주소에 데이터를 전달한다. 이때, 패킷이라는 통신 단위로 데이터를 전달한다.

한계 : 1) 비연결성 2) 비신뢰성

IP 인터넷 프로토콜은 패킷을 받을 대상이 없어졌거나, 서비스 불능 상태가 되어도 패킷을 전송한다. 또한 패킷을 보내는 순서가 없고 중간에 패킷이 사라져도 책임을 지지 않기 때문에 100% 신뢰할 수 없는 한계를 갖는다. 

추가로 같은 IP 를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상인 경우에도 문제가 생긴다.

 

TCP (전송 제어 프로토콜)

인터넷 프로토콜 스택의 4계층에서 TCP 는 전송 계층에 자리한다.

 

IP 패킷 정보에는 전송 데이터와 출발지IP, 목적지IP, 기타 정보들이 해당되는데, 여기에 TCP 세그먼트를 포함하면, IP 패킷이 가진 한계를 극복할 수 있다. 

TCP 세그먼트에는 출발지 포트 정보, 목적지 포트 정보, 전송 제어, 순서 및 검증 정보가 포함된다.

 

특징 : 연결 지향 (3 way handshake 가상 연결), 데이터 전달 보증, 순서 보장 

신뢰할 수 있는 프로토콜으로 현재 대부분 TCP 를 사용한다.

 

TCP 3 way handshake

클라이언트와 서버 같에 3번의 connect, 연결 과정을 거치는 것

1. SYN : 접속 요청

2. SYN + ACK : 서버로 부터 요청 수락받음

3. ACK : 데이터 전송 가능 

 

UDP (사용자 데이터그램 프로토콜)

비연결 지향 프로토콜이다. 

데이터 전달 보증 X 

순서 보장 X

데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다. 

 

PORT

TCP 에 추가되는 정보 중에 출발지 포트, 도착지 포트가 있었다. 만약 한 명의 클라이언트가 서버에 다양한 요청을 해야하는 상황이 발생한다면, 이 요청들을 구분할 수 있을까? 

바로 포트는 같은 IP 내에서 프로세스를 구분하는 역할을 한다. 

0 ~ 65535 : 할당 가능한 포트이다. 

 

DNS (도메인 네임 시스템)

IP 는 항상 같을 수 없고, 변경될 수 있기에 DNS 를 사용한다. 도메인명을 IP 로 변환할 수 있기 때문이다.

 


URI (Uniform Resource Identifier)

URI 는 URL 과 URN 을 포괄한 개념이다. URL 은 로케이터, URN 은 이름이다.

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

Resource : 자원이다. URI 로 식별 가능한 모든 것 

Identifier : 식별 가능한 것을 참조하는 오브젝트 (식별자) 다른 항목과 구분하는데 필요한 정보 

 

URL 은 리소스 위치를 지정하고 URN 은 리소스에 이름을 부여한다. 

 

URL

http 는 80 포트, https 는 443 포트를 주로 사용하며 포트는 생략 가능하다.

userinfo 는 사용자 정보를 포함해서 인증을 받는건데 거의 사용하지 않음

host 는 호스트 명으로 도메인명 또는 IP 주소를 직접 사용함

port 는 접속 포트이다. 일반적으로 생략한다.

path 는 리소스 경로로, 보통 계층적 구조를 이룬다.

query 는 키-값 형태로 ?로 시작하고 &로 추가 가능하다. 웹 서버에 제공하는 파라미터, 문자 형태이다.

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

 

HTTP 메시지 전송

1. 웹 브라우저가 HTTP 메시지를 생성한다.

2. SOCKET 라이브러리를 통해 전달한다. (TCP/IP를 연결하고 데이터를 전달한다.)

3. TCP/IP 패킷을 만들고 HTTP 메시지를 포함하여 LAN 장비를 통해 서버에 전송한다.

4. 서버에서 응답받은 메시지는 웹 브라우저 HTML 렌더링으로 클라이언트가 확인할 수 있다. 

 


HTTP (HyperText Transfer Protocol)

HTTP 는 거의 모~든 것을 데이터로 전송한다!

- HTML, TEXT, 이미지, 음성, 파일, JSON, XML, 거의 모든 형태의 데이터 전송! 서버간에 데이터를 주고 받을 때도 대부분 HTTP 를 사용한다. 

HTTP 는 현재 HTTP/1.1 (1997년) 버전을 가장 많이 사용한다. 

 

HTTP 구조 특징

클라이언트 서버 구조이며, 무상태 프로토콜, 비연결성, 단순하며 확장이 용이하다.

 

클라이언트 서버 구조 

Request, Response 구조

클라이언트가 서버에 요청을 보내고, 응답을 대기한다. 그러면 서버는 요청 결과를 만들어 응답한다.

 

무상태 프로토콜

서버가 클라이언트의 상태를 보존하지 않는 것이다. 장점은 서버 확장성이 높고, 단점으로는 클라이언트가 추가 데이터를 전송해야하는 점이 있다. (무상태는 응답 서버를 쉽게 바꿀 수 있다.)

= 중간에 서버가 장애나도 문제 없다! 

 

실무 한계

하지만, 모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다. 예를 들어 로그인 같은 경우는 상태 유지가 필요하다. 그래서 상태 유지는 최소한만 사용한다.

 

비 연결성

HTTP 는 기본이 연결을 유지하지 않는 모델이다. 일반적으로 초 단위 이하의 빠른 속도로 응답한다. 

그렇기 때문에 서버 자원을 매우 효율적으로 사용할 수 있다.

반면, TCP/IP  연결을 새로 해야하는 점이 문제가 되어 지금은 HTTP 지속 연결로 문제를 해결한다. 

 


HTTP 시작라인

요청 메시지 : HTTP 메서드 (GET, POST ..) + 요청 대상 + HTTP Version 이 들어간다.

응답 메시지 : HTTP 버전 + HTTP 상태 코드 (요청 실패, 성공 등) + 이유 문구가 들어간다.

 

HTTP 헤더

필드 이름 + OWS 필드 값이 들어간다. (필드 이름은 대소문자 구분이 없다)

HTTP 전송에 필요한 모든 부가 정보가 들어간다.

표준 헤더는 너어무 많고, 필요시 임의의 헤더도 추가 가능하다.

 

HTTP 메시지 바디

실제 전송할 데이터가 들어간다. (거의 모든 데이터)

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기