CS/네트워크

HTTP 기본

Junuuu 2021. 12. 22. 13:12

HTTP란?

HyperText Transfer Protocol의 약자로 HTML을 전송하는 프로토콜로 시작되었으나 현재는 모든 것을 HTTP 메시지를 통해 전송합니다.

HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML 등 거의 모든 형태의 데이터를 전송할 수 있으며 서버 간에 데이터를 주고받을 때도 대부분 HTTP를 사용합니다.

 

웹 상에서 클라이언트와 서버가 서로 정보를 주고받을 수 있도록 하는 규약입니다.

클라이언트는 URI로 된 HTTP를 통해 서버에게 정보 송신을 요청하고 서버는 클라이언트의 요청을 해석하고 클라이언트의 요청에 준하는 정보를 클라이언트에게 송신합니다.

 

하이퍼텍스트(HyperText)란?

일반 텍스트와 달리 문장이나 단어 등이 링크를 통해 서로 연결된 네트워크처럼 구성된 문서를 말한다.

대표적인 하이퍼텍스트에는 HTML 문서가 있다.

 

프로토콜이란?

통신 시스템이 데이터를 교환하기 위해 사용하는 통신 규칙이다.

사람과 사람이 통신하기 위해 서로 이해할 수 있는 언어로 대화하는것 처럼 컴퓨터와 컴퓨터가 서로 이해할 수 있는 규칙을 사용하는 것이 통신 규칙입니다.

 

URI란?

https://junuuu.tistory.com/32?category=974977 

 

URI란? (URI VS URL VS URN)

URI란? Uniform Resource Identifier의 약자로 "자원을 식별하는 통합된 방법"을 뜻합니다. 인터넷에 있는 자원을 나타내는 유일한 주소이며, 사람으로 치면 주민등록증 같은 의미를 가집니다. 자원이란 U

junuuu.tistory.com

URI뿐만 아니라 HTTP 메시지를 이해할때도 도움이 되기 때문에 먼저 읽고 이 글을 읽으시면 이해에 도움이 됩니다.

 

HTTP의 특징

1. 클라이언트 서버 구조

Request(요청), Response(응답) 구조로 클라이언트는 서버에 요청을 보내고 서버는 요청에 대한 결과를 만들어서 응답합니다.

 

클라이언트 서버가 분리된 구조를 가짐으로써 서버에 비즈니스 로직과 데이터를 저장하고, 클라이언트는 UI, 사용성에 집중함으로써 각각 독립적으로 진화할 수 있습니다.

 

만약 서버에 트래픽이 갑자기 증가한다면 클라이언트는 관여하지 않고 서버 쪽에서만 처리해주면 됩니다.

2. 무상태 프로토콜(Stateless)

서버가 클라이언트의 상태를 보존하지 않는 무상태(Stateless) 프로토콜이다.

 

그러면 상태 유지(Stateful)은 무엇이고 무상태(Stateless)는 무엇일까?

상태 유지(Stateful)

상태가 유지되는 때에는 점원A가 고객의 주문 상태에 대해 기억하고 있다.

고객 : 노트북이 얼마인가요?

점원A : 100만 원입니다.

고객 : 2개 구매하겠습니다

점원 A : 200만 원입니다.

 

만약 점원 A가 아닌 점원 B가 고객을 응대한다고 가정해보자

고객 : 노트북이 얼마인가요?

점원 A : 100만 원입니다.

고객 : 2개 구매하겠습니다

점원 B: 어떤 것을 2개 구매하시겠어요?

 

이처럼 중간에 다른 점원으로 바뀔 경우에는 문제가 발생할 수 있습니다.

점원 A가 고객의 상태를 기억하고 있는 것을 상태 유지라고 합니다.

 

무상태 유지(Stateless)

무상태에서는 고객이 자신의 주문을 기억하고 있다면 중간에 다른 점원으로 바뀌어도 주문을 할 수 있습니다.

만약 고객이 갑자기 증가하더라도 무상태에서는 점원을 대거 투입할 수 있습니다. (= 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있습니다 = 무한한 서버 증설 가능)

 

고객 : 노트북이 얼마인가요?

점원 A : 100만 원입니다.

고객 : 노트북 2개 구매하겠습니다.

점원 B : 노트북 2개는 200만 원입니다. 신용카드, 현금 중에 어떤 걸로 구매하시나요?

고객 : 노트북 2개를 신용카드로 구매하겠습니다.

점원 C : 네 알겠습니다.

 

 

그러면 무조건 무상태 유지로 설계하는 것이 좋을까요?

무상태로 설계하는 것이 좋지만 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있습니다.

 

무상태 : 로그인이 필요 없는 단순한 서비스 소개 화면

상태 유지 : 로그인

 

로그인한 사용자의 경우 로그인했다는 상태를 서버에 유지합니다. (브라우저 쿠키, 세션, 토근 등)

상태 유지는 최소한만 사용합니다.

 

서버 개발자들이 가장 어려워하는 업무 = 정말 같은 시간에 딱 맞추어 발생하는 대용량 트래픽 (선착순 이벤트)

최대한 Stateless 하게 설계하도록 노력해야 합니다.

실제 이벤트 전에 순수한 HTML을 통하여 사용자들이 그 페이지에 머물도록 하는 방식도 있습니다.

 

3., 비연결성(Connectionless)

연결 지향

연결을 유지하는 모델에서는 클라이언트가 요청을 보내지 않더라도 계속 연결을 유지합니다.

따라서 연결을 유지하는 서버의 자원이 계속 소모됩니다.

 

비연결성

실제로 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊습니다.

일반적으로 초 단위의 이하의 빠른 속도로 응답하며 이를 통해 최소한의 자원으로 서버 유지를 합니다.

1시간 동안 수천 명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십 개 이하로 매우 작습니다.

따라서 서버 자원을 매우 효율적으로 사용할 수 있습니다.

 

그러면 비연결성을 사용하는 것이 무조건 좋을까요?

클라이언트는 서버에게 HTML 뿐만 아니라 Javascript, css, 이미지 등 수많은 자원을 요청하는데 계속 연결을 끊게 되면 TCP/IP 연결을 새로 맺어야 하기 때문에 3-way-handshake 시간이 소모됩니다.

 

지속 연결(Persitent Connections)을 통해 이를 해결합니다.

지속 연결이란 TCP/IP 연결을 한 뒤 요청과 응답이 모두 끝날 때까지 연결을 유지한 뒤 종료합니다.

 

 

4.  HTTP 메시지

HTTP의 특징 1번에서 HTTP는 클라이언트 서버 구조에서 요청과 응답 구조를 가진다고 했습니다.

이때 요청과 응답이 HTTP 메시지를 통해 이루어지기 때문에 HTTP 요청 메시지와 HTTP 응답 메시지가 존재합니다.

 

HTTP 메시지 구조

1. start-line(시작 라인)

요청 수행에 대한 성공 또는 실패가 기록되어 있습니다.

request-line(요청 메시지)과 status-line(응답 메시지)으로 구성되어 있으며

request-line는 method, request-target, HTTP-version로 이루어져 있습니다.

 

method란?

HTTP method를 뜻하며 서버가 수행해야 할 동작을 지정합니다.

GET, POST, PUT, DELETE 등이 있습니다.

GET은 리소스를 조회하며 POST는 요청 내역을 처리합니다.

 

request-target이란?

절대경로 "/"로 시작하며 URI의 path와 query가 합쳐서 들어가게 됩니다

 

 

status-line은 HTTP-version, status-code, reason-phrase로 이루어져 있습니다.

 

status-code란?

클라이언트가 보낸 요청이 성공했는지 실패했는지를 나타냅니다.

200대는 보통 성공이며, 400대는 클라이언트 요청 오류, 500대는 서버 내부 오류를 나타냅니다.

 

reason-phrase란?

status-code를 나타내는 사람이 읽을 수 있는 글

 

2. header(헤더)

HTTP 전송에 필요한 모든 부가정보로 요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어갑니다.

필요시 임의의 헤더를 추가할 수 있고 표준 헤더는 많이 존재합니다.

header-field 또는 field-name: field-value로 구성되어 있습니다.

 

3. empty line(공백 라인)

요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄이 삽입됩니다.

즉 헤더의 끝을 의미합니다.

 

4. message body

실제 전송할 데이터이며 HTML 문서 , 이미지, 영상, JSON 등 byte로 표현할 수 있는 모든 데이터를 전송할 수 있습니다.

 

그러면 실제로 요청 메시지와 응답 메시지의 예시를 가지고 알아보겠습니다.

빨간색 부분은 start-line, 노란색 부분은 header, 초록색 부분은 empty line, 파란색 부분은 message body를 의미합니다.

 

요청 메시지는 start-line으로 request-line을 가집니다.

request-line은 method, request-target, HTTP-version으로 구성되어 있으며

method : GET

request-target : /search?q=hello&hl=ko

HTTP-version : HTTP/1.1

를 의미합니다.

 

헤더의 경우는 header-field 또는 field-name : field-value로 구성되어 있습니다.

header-field 또는 field-name : Host

field-value : www.google.com 

를 의미합니다.

 

여기서 message body는  없지만 요청 메시지도 message body를 가질 수 있습니다.

 

응답 메시지는 start-line으로 status-line을 가집니다.

status-line은 HTTP-version, status-code, reason-phrase로 이루어져 있습니다.

HTTP-version : HTTP/1.1

status-code : 200

reason-phrase : OK

를 의미합니다.

 

헤더의 경우는 header-field 또는 field-name : field-value로 구성되어 있습니다.

header-field 또는 field-name : Content-Type

field-value : text/html;charset=UTF-8

 

header-field 또는 field-name : Content-Length

field-value : 3423

를 의미합니다.

 

message body에는 전송할 데이터가 들어가 있습니다.

 

 

5. 단순함, 확장 가능

HTTP는 매우 단순합니다.

단순하기 때문에 확장하기 쉬운 기술이며 따라서 표준 기술로 성공하는 성과를 이뤄냈습니다.

 

 

 

출처

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 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com

https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-http-http%EB%9E%80-%ED%8A%B9%EC%A7%95-%EB%AC%B4%EC%83%81%ED%83%9C-%EB%B9%84%EC%97%B0%EA%B2%B0%EC%84%B1/

 

[네트워크/HTTP] HTTP란? - 특징(무상태와 비 연결성) - 하나몬

⚡️ HTTP 개념, 역사, 특징 간략히 알아보기 ❗️HTTP란? HTTP는 하이퍼텍스트 전송 프로토콜(HyperText Transfer Protocol)이다. HTTP는 1989년부터 1991년에 발명되었다. HTTP는 월드 와이드 웹(WWW)에 내재된 프

hanamon.kr

http://wiki.hash.kr/index.php/%ED%95%98%EC%9D%B4%ED%8D%BC%ED%85%8D%EC%8A%A4%ED%8A%B8

 

하이퍼텍스트 - 해시넷

하이퍼텍스트(hypertext)란 일반 텍스트와 달리 문장이나 단어 등이 링크를 통해 서로 연결된 네트워크처럼 구성된 문서를 말한다. 1960년대 테오도르 넬슨(Theodore Nelson)이 만든 용어이다. 일반 텍스

wiki.hash.kr

https://terms.naver.com/entry.naver?docId=2271799&cid=51207&categoryId=51207 

 

프로토콜

프로토콜(Protocol)은 통신 시스템이 데이터를 교환하기 위해 사용하는 통신 규칙이다. OSI 7계층 모델에서는 각 계층에서 수행되는 프로토콜이 서로 독립적이라고 간주한다. 따라서 계층 1에는 계

terms.naver.com

https://developer.mozilla.org/ko/docs/Web/HTTP/Messages

 

HTTP 메시지 - HTTP | MDN

HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식입니다. 메시지 타입은 두 가지가 있습니다. 요청(request)은 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시지

developer.mozilla.org

http://www.ktword.co.kr/test/view/view.php?m_temp1=4884 

 

HTTP 메세지

HTTP 요청 메세지, HTTP 응답 메세지, 요청 , 응답

www.ktword.co.kr