728x90

HTTP

웹 서버로부터 대량의 정보를 빠르고, 간편하고, 정확하게 웹 브라우저로 옮길 수 있게 해주는 프로토콜

 

신뢰성 있는 데이터 전송 프로토콜을 사용해 전송 중 손상되거나 꼬이지 않음을 보장하기 때문에

사용자는 정보를 얻는 것에 있어서 걱정할 필요가 없고

개발자는 전송 중 발생할 결함이나 약점에 대한 걱정 없이 개발에만 집중할 수 있다.

 

 

웹 클라이언트와 서버

웹 서버는 웹 콘텐츠가 존재하는 곳으로 클라이언트와 HTTP 프로토콜로 의사소통한다.

 

클라이언트가 서버에게 HTTP 요청을 보내면

서버는 요청된 데이터를 HTTP 응답으로 돌려준다.

https://www.naver.com/index.html

 

우리가 크롬이나 엣지 같은 브라우저(클라이언트)를 통해 위의 주소로 요청을 보내는 경우

https://www.naver.com

 

위의 서버에 index.html를 찾아달라는 HTTP 요청을 보낸 것이고

서버는 클라이언트가 요청한 데이터와 타입, 길이 등의 정보를 담아 HTTP 응답을 돌려준다.

 

 

리소스

리소스는 웹 서버가 관리하고 제공하는 웹 콘텐츠의 원천이다.

 

대표적으로 텍스트, HTML, 이미지, 동영상 등의 웹 서버 파일 시스템의 정적 파일이 있고

요청에 따라 콘텐츠를 생산하는 프로그램 같은 동적 콘텐츠 리소스 등이 있다.

 

또한, 웹 게이트웨이, 검색엔진, 데이터베이스 검색 등 모두 리소스가 될 수 있다.

즉, 종류에 상관 없이 모두 리소스가 될 수 있다.

 

 

미디어 타입

MIME(Multipurpose Internet Mail Extensions, 다목적 인터넷 메일 확장)

 

HTTP는 웹에서 전송되는 수천 가지 데이터 타입을 다루기 위해

전송되는 객체 각각에 MIME 타입이라는 데이터 포맷 라벨을 붙인다.

 

웹 서버는 모든 HTTP 객체 데이터에 MIME 타입을 붙여 클라이언트에게 객체를 전달하고

클라이언트는 MIME 타입을 보고 다룰 수 있는 객체인지 확인할 수 있다.

Content-type : image/jpeg

text/html
image/gif

 

MIME 타입은 위와 같이 주 타입/부 타입 형태로 이루어진 라벨이다.

 

 

URI (Uniform Resource Identifier, 통합 자원 식별자)

리소스를 고유하게 식별하고 위치를 지정할 수 있는 식별자로

이를 통해 클라이언트는 관심 있는 리소스를 지목할 수 있다.

http://www.shop.com/items/book.jpg

 

위의 URI를 해석하면

HTTP 프로토콜을 사용해 www.shop.com으로 이동해

items/book.jpg라는 리소스를 가져오라는 것이다.

 

URI는 URL과 URN 두 가지가 있다.

 

URL (Uniform resource locator, 통합 자원 지시자)

http://www.shop.com/items/book.jpg
http://www.shop.com/index.html
http://www.shop.com/get?item=1234

 

가장 흔한 형태의 리소스 식별자로 특정 서버의 한 리소스에 대한 구체적 위치를 서술한다.

 

대부분 scheme, 서버의 주소, 웹 서버의 리소스 세 부분으로 이루어진 표준 포맷을 따른다.

scheme : 리소스에 접근하기 위해 사용되는 프로토콜로 HTTP, FTP 등이 있다.

 

URN (Uniform resource Name)

리소스에 대한 위치에 영향받지 않는 고유한 이름으로

리소스의 위치가 옮겨지더라도 URN이 변하지 않는 한 접근할 수 있다.

 

 

트랜잭션

HTTP 트랜잭션은 클라이언트가 서버로 보내는 요청 명령과 서버가 클라이언트에 돌려주는 응답 결과로 구성되어 있다.

 

HTTP 요청 메시지는 다음과 같이 명령과 URI를 포함하고

GET /items/book.jpg HTTP/1.0
Host: www.shop.com

 

HTTP 응답 메시지는 다음과 같이 트랜잭션의 결과를 포함하며

HTTP/1.0 200 OK
Content-type: image/jpeg
Content-length: 4321

 

이러한 두 메시지를 하나의 HTTP 트랜잭션이라고 한다.

 

메서드

서버에게 특정 동작을 취하게 할 수 있게 지원하는 여러 가지 종류의 요청 명령이다.

 

GET 지정한 리소스를 보내라
PUT 클라이언트가 보낸 데이터를
지정한 이름의 리소스로 저장하라
(리소스의 대체)
PATCH 지정한 리소스의 일부분을 변경하라
DELETE 지정한 리소스를 삭제하라
POST 클라이언트의 데이터를
서버 게이트웨이 애플리케이션으로 보내라
(리소스의 추가)
HEAD 지정한 리소스에 대한 응답에서
HTTP 헤더 부분만 보내라

 

상태 코드

서버가 클라이언트에게 요청이 성공했는지 실패했는지 혹은 추가 조치가 필요한지 알려주는 세 자리 숫자

 

 

메시지

단순한 일반 텍스트로 이루어진 줄 단위의 문자열로 요청 메시지와 응답 메시지를 말한다.

시작줄  GET /items/book.jpg HTTP/1.0

헤더  Accept: text/*
시작줄  HTTP/1.0 200 OK

헤더  Content-type: image/jpeg
헤더  Content-length: 4321

본문 This is Content!

 

위와 같이 시작줄, 헤더, 본문으로 이루어져 있다.

 

시작줄 : 무엇을 해야 하는지 혹은 무슨 일이 일어났는지 나타낸다.

헤더 : 0개 이상 존재할 수 있으며 각 헤더 필드는 쌍점(:)으로 구분되어 하나의 이름과 값으로 구성된다.

본문 : 어떤 종류의 데이터든 들어갈 수 있는 메시지 본문으로 웹 서버로 데이터를 보내거나 클라이언트에 데이터를 반환할 때 사용한다.

 

 

TCP 커넥션

TCP/IP

TCP와 IP가 층을 이루는 패킷 교환 네트워크 프로토콜로

HTTP는 애플리케이션 계층의 프로토콜로 네트워크 통신의 세부사항에는 신경을 쓰지 않기 때문에

대중적이고 신뢰성 있는 인터넷 전송 프로토콜인 TCP/IP를 사용한다.

 

TCP는 다음과 같은 기능을 제공한다.

  • 오류 없는 데이터 전송
  • 데이터를 언제나 보낸 순서대로 도착하게 보장
  • 언제든 어떤 크기로든 보낼 수 있는 조각나지 않는 데이터 스트림

TCP/IP는 각 네트워크와 하드웨어의 특성을 숨기고,

어떤 종류의 컴퓨터와 네트워크라도 서로 신뢰성 있는 의사소통을 하게 해 준다.

HTTP (애플리케이션 계층)
TCP (전송 계층)
IP (네트워크 계층)
네트워크를 위한 링크 인터페이스 (데이터 링크 계층)
물리적인 네트워크 하드웨어 (물리 계층)

 

개념상 위와 같이 HTTP 프로토콜은 TCP 위의 계층이고

HTTP는 자신의 메시지 데이터를 전송하기 위해 TCP를 사용하는 것이다.

 

접속 / IP 주소 / 포트 번호

HTTP가 서버에 메시지를 전송하기 위해서는 IP 주소와 포트 번호를 사용해

클라이언트와 서버 사이에 TCP/IP 커넥션을 맺어야 한다.

 

IP 주소가 친구네 집 전화번호라면

친구의 집(IP 주소)에 전화해 친구(포트 번호)를 바꿔 달라는 것과 비슷하다.

 

즉, 서버의 컴퓨터에 접근해 웹 서버가 사용 중인 포트까지 접근해야 실제 웹 서버와 통신이 가능한 것이다.

  1. 브라우저는 서버의 URL에서 호스트 명을 추출
  2. 서버의 호스트 명을 IP로 변환
  3. URL에 포트번호가 있다면 추출, 없으면 80이 기본값
  4. 웹 서버와 TCP 커넥션 생성
  5. 서버에 HTTP 요청
  6. 서버가 브라우저에 HTTP 응답 반환
  7. 커넥션이 닫히면 브라우저가 문서를 보여준다.

위와 같은 과정을 통해 우리가 브라우저의 주소창에 URI를 입력하면 페이지가 보이게 된다.

 

 

웹의 구성요소

프록시

보안, 애플리케이션 통합, 성능 최적화 등을 위한 중요한 구성요소 중 하나다.

 

클라이언트와 서버 사이에 위치해

클라이언트의 모든 HTTP 요청을 받아 대부분 요청을 수정해 서버에 전달하는

사용자를 대신해 서버에 접근하는 역할을 수행한다.

 

모든 웹 트래픽의 흐름 속에서 신뢰할 만한 중개자 역할을 하기 때문에

주로 보안을 위해 사용하거나 요청과 응답 필터링 등에 사용된다.

 

캐시

자신을 거쳐 가는 문서들 중 자주 찾는 문서의 사본을 저장하는 곳으로

클라이언트의 다음 요청에 같은 문서를 요청하면 캐시가 갖고 있는 사본을 받을 수 있어

멀리 떨어진 웹 서버보다 가까운 캐시에서 빠르게 문서를 받을 수 있다.

 

게이트웨이

다른 서버들의 중개자로 동작하는 서버로, 주로 HTTP 트래픽을 다른 프로토콜로 변환할 때 사용한다.

 

항상 자신이 실제 리소스를 갖고 있는 진짜 서버인 것처럼 요청을 다루기 때문에

클라이언트는 자신이 실제 서버와 통신하는 것이 아니라 게이트웨이와 통신하는 것을 알 수 없다.

 

예를 들면, 클라이언트가 HTTP 요청을 HTTP/FTP 게이트웨이에 보내면

해당 요청을 FTP 프로토콜로 처리해 다시 클라이언트에 HTTP 응답을 반환한다.

 

터널

두 커넥션 사이에 데이터를 열어보지 않고 그대로 전달해주는 HTTP 애플리케이션으로

주로 HTTP 데이터가 아닌 것을 HTTP 연결을 통해 전달하고자 할 때 사용된다.

 

에이전트

사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램으로

사람의 통제대로 동작하거나 혹은 통제 없이 동작하는 자동화된 에이전트도 있다.

 

예를 들어, 스파이더라는 에이전트는 스스로 웹을 돌아다니며

검색엔진의 DB 같은 유용한 웹 콘텐츠 보관소를 만든다.

'Book' 카테고리의 다른 글

[친절한 SQL 튜닝] SQL 처리 과정과 I/O  (0) 2025.03.02
[HTTP 완벽 가이드] URL과 리소스  (0) 2024.03.08

+ Recent posts