본문 바로가기
컴퓨터 기초, 개념/HTTP, REST, 웹 통신

[HTTP/HTTPS] HTTP(s) 통신 기본 개념

by Pendine 2025. 4. 9.
728x90
반응형

1. HTTP란?

아주 단순한 질문으로 어딜가도, 누가봐도 쉽게 이해 할 수 있는 내용을 제공하기 위해, 위키피디아 내용을 첨부한다

 

HTTP(HyperText Transfer Protocol, 초본문전송규약, 하이퍼본문전송규약)는 W3 상에서 정보를 주고받을 수 있는 통신 프로토콜이다. 주로 'HTML 문서를 전송'하는 용도에 쓰인다. TCP를 사용하고 HTTP/3부터는 UDP 및 80번 포트를 사용한다. 1996년 버전 1.0, 그리고 1999년 1.1이 각각 발표되었다.

HTTP는 클라이언트와 서버 사이에 이루어지는 상호 대화를 위한 요청-응답 프로토콜이다. 예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML)나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 이 정보가 모니터와 같은 출력 장치를 통해 사용자에게 나타나는 것이다.

HTTP를 통해 전달되는 자료는 http:로 시작하는 URL(인터넷 주소)로 조회할 수 있다.

https://ko.wikipedia.org/wiki/HTTP

 

 

2. 하이퍼본문전송규약이란?

HTTP 통신은 본질적으로 문서의 내용을 받기 위한 프로토콜로 문자열 자체를 주고받는 평문 통신이 이루어진다.

 평문 통신이란 클라이언트와 서버 간 통신의 메시지 내용을 평문으로 전송하며 wireshark를 통해 확인해보면 어떤 내용이 전달되는지 평문으로 볼 수 있다는 뜻이다.

예시) http 요청과 응답 패킷

http 요청 패킷 (클라이언트) 여기에서는 클라이언트가 서버에 127.0.0.1:8080/index 로 정보 요청시 사용한 메시지 내용을 확인 할 수 있다.

 

http 응답 패킷 (서버) 여기에서는 서버가 클라이언트에게 받은 요청 - 127.0.0.1:8080/index 에 대한 응답 메시지 내용을 확인할 수 있다.

 

 

3. HTTP / HTTPS 포트번호

HTTP는 80 , HTTPS는 443 포트번호를 사용한다.

웹사이트 접속시 브라우저는 사용자가 접속하는 주소의 포트번호가 명시되어있지 않다면 포트번호를 자동으로 삽입하여 사용한다.

네이버를 예로 들어, 네이버 접속시 사용하는 URL은 다음과 같다

이때 브라우저에서는 사용자가 포트번호를 명시하지 않은 주소를 입력했기 때문에, 자동으로

위와 같이 포트번호를 443 으로 자동 삽입하여 처리하여 접속을 수행한다.

 

4. HTTP 연결 / 통신 특징

HTTP 통신은 TCP/IP 기반에서 이루어지며, 각 요청은 독립적으로 처리된다.
이 구조적 특성은 보안, 인증, 상태 유지와 같은 고급 기능을 구현할 때 프론트엔드와 백엔드 간의 통신을 더 복잡하게 만들 수 있는 핵심 원인이 된다.

 

4-1. TCP기반이다.

  • HTTP는 기본적으로 TCP 연결 위에서 동작한다.
  • 클라이언트가 서버에 연결할 때는, TCP의 3-way handshake 절차를 통해 연결을 수립한다.
  • 전송하는 HTTP 메시지가 클 경우, 운영체제의 TCP 스택이 이를 작게 조각내어 전송하며, 수신 측에서 다시 조립한다.

HTTPS는 TCP 위에서 TLS(SSL) 을 덧붙인 구조

  • HTTPS는 일반 HTTP 위에 보안 계층 (TLS) 을 추가한 통신 방식이다.
  • 연결이 수립될 때, TLS는 인증(서버 인증서), 암호화, 무결성을 처리하여 보안 연결을 만든다.
  • 참고: MDN - TLS 소개

정확히 말하자면, 전송계층(TCP - OSI 4계층) 과 다른 계층인 응용계층(TLS - OSI 7계층)에서 구성되는 메시지를 사용하여

연결 수립시, 인증과 암호화, 무결성 절차를 수행하지만 이해를 돕기위해 TCP위에 덧붙인 구조라는 내용이라 작성하였다.

 

 

4-2. HTTP는 Stateless (비연결지향적인 동작)

HTTP는 설계 자체가 stateless 하다.
즉, 각 요청은 그 자체로 완전해야 하며, 서버는 사용자의 이전 요청, 행동을 기억하지 않는다.

  • 서버는 요청을 받으면 그에 대한 응답을 보내고 즉시 연결을 종료한다.
  • 클라이언트가 같은 서버에 다시 요청을 보내더라도, 서버 입장에선 새로운 사용자의 요청처럼 보일 수 있다.

이로 인해:

  • 로그인 상태 유지, 장바구니 유지, 페이지별 사용자 상태 관리 등을 하기 위해서는
    쿠키, 세션, 토큰 기반 인증(JWT) 등의 별도 상태 관리 기술이 필요하다.

예시:

 HTTP는 마치 학창시절에, 수업시간 중 특정 친구에게 '전달할 내용'과 '내가 누구' 인지 쪽지에 적고,
친구들을 통해 전달한 쪽지와 같다.

 그런데 이 쪽지는 전달 도중 잃어버릴 수도 있고, 누군가 중간에 열어볼 수도 있다.
쪽지를 여러개, 보낼 때는 순서가 섞일 수 있다.

 그래서 서버는 매번 "쪽지를 보낸 사람이 누구인지", "무슨 내용인지"만 보고 판단할 뿐,
이전 쪽지가 어떤 내용이었는지 전혀 기억하지 않는다.
 바로 이 점이 HTTP가 stateless하다는 의미다.

 

728x90
반응형

댓글