소프트웨어 개발

HTTPS & HTTP 네트워크

인어공쭈 2024. 9. 17. 11:18

개념 설명

 

HTTP (Hypertext Transfer Protocol)는 클라이언트와 서버 간의 통신을 위한 프로토콜이다. 웹 브라우저를 통해 웹 페이지를 요청하고, 서버는 해당 요청에 대한 응답을 제공하는데 사용된다. HTTP는 클라이언트와 서버 간의 데이터 전송 방식, 헤더와 본문의 구조, 요청 및 응답의 상태 코드 등을 정의하고 있다.

 

HTTPS (Hypertext Transfer Protocol Secure)는 HTTP의 보안 버전으로, 클라이언트와 서버 간의 통신을 암호화하여 보안성을 강화한 프로토콜이다. HTTPS는 HTTP와 동일한 구조와 기능을 가지고 있지만, 데이터의 안전한 전송을 해 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용한다.

 

  HTTP HTTPS
기능 웹 서버와 클라이언트 간의 데이터 전송을 위한 프로토콜  보안 기능이 추가된 HTTP의 버전
보안 데이터가 평문으로 전송되므로 보안에 취약  데이터를 암호화하여 안전하게 전송
암호화 암호화되지 않음  SSL/TLS 프로토콜을 사용하여 데이터 암호화
인증서 인증서 필요 없음  SSL/TLS 인증서를 사용하여 웹 사이트의 신원 확인
검색 엔진 최적화 SEO에 불리할 수 있음  검색 엔진에 노출되기 쉽고 신뢰성이 높을 수 있음
사용 사례 보안이 크게 요구되지 않는 일반적인 웹 페이지  로그인, 결제, 개인정보 전송 등 보안이 필요한 상황

 

HTTP 구조

  1. 클라이언트(Client): 웹 브라우저나 앱과 같은 클라이언트는 서버로부터 웹 페이지나 리소스를 요청하고 응답을 받는 역할을 한다. 일반적으로 사용자가 웹 브라우저를 통해 웹 사이트에 접속할 때 클라이언트 역할을 한다.
  2. 서버(Server): 웹 서버는 클라이언트로부터 요청을 받아 해당 요청에 대한 처리를 수행하고 응답을 반환하는 역할을 한다. 서버는 클라이언트의 요청에 따라 필요한 데이터를 제공하거나, 동적인 처리를 수행하여 데이터를 생성한다.
  3. 요청(Request): 클라이언트가 서버에게 보내는 요청 메시지. 요청은 메서드, URL, 헤더, 본문 등으로 구성됩니다. 일반적으로 GET, POST, PUT, DELETE 등의 메서드를 사용하여 웹 페이지나 리소스를 요청한다.
  4. 응답(Response): 서버가 클라이언트에게 보내는 응답 메시지. 응답은 상태 코드, 헤더, 본문 등으로 구성된다. 상태 코드는 요청의 처리 결과를 나타내며, 일반적으로 200 OK, 404 Not Found, 500 Internal Server Error 등이 사용된다.

 

HTTP 통신

HTTP 통신은 주로 TCP/IP 프로토콜을 기반으로 이루어져 있다. 클라이언트와 서버는 TCP/IP 네트워크를 통해 서로 통신하며, 요청과 응답 메시지는 TCP/IP 패킷으로 나뉘어 전송된다. 이러한 과정을 통해 웹 브라우저를 통해 웹 페이지를 로드하거나, 웹 애플리케이션과 서버 간의 데이터 교환 등이 이루어지게 된다.

차이점 정리

  • 보안: HTTP는 데이터를 암호화하지 않지만, HTTPS는 데이터를 암호화하여 보안성을 제공한다.
  • 인증: HTTPS는 인증서를 통해 서버의 신뢰성을 보장한다.
  • 속도: HTTPS는 암호화 과정을 거치기 때문에 약간 느릴 수 있지만, 최신 기술을 통해 성능 차이를 최소화할 수 있다.

 

HTTP/HTTPS 요청의 구조

서버가 클라이언트의 요청에 응답할 때의 구조는 다음과 같다.

  1. 시작줄(Request Line)
  2. 헤더(Header)
  3. 빈 줄(Blank Line)
  4. 본문(Body) (옵션)
POST /login HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

username=eric&password=1234

 

구조 설명:

  1. 요청 시작줄:
    • POST: 메서드
    • /login: 서버의 리소스 URI
    • HTTP/1.1: HTTP 버전
  2. 헤더:
    • Host: 서버의 도메인 (www.example.com)
    • User-Agent: 클라이언트 정보 (브라우저)
    • Content-Type: 데이터 형식 (폼 데이터)
    • Content-Length: 본문 데이터의 길이 (27바이트)
  3. 빈 줄: 헤더와 본문을 구분하는 빈 줄
  4. 본문: 실제 전송할 데이터 (username=eric&password=1234)

 

HTTP/HTTPS 응답의 구조

서버가 클라이언트의 요청에 응답할 때의 구조는 다음과 같다.

  1. 상태줄(Status Line)
  2. 헤더(Header)
  3. 빈 줄(Blank Line)
  4. 본문(Body) (옵션)
HTTP/1.1 200 OK
Date: Mon, 21 Sep 2024 12:00:00 GMT
Content-Type: text/html
Content-Length: 1234

<html>
  <head><title>Welcome</title></head>
  <body>Welcome to our website!</body>
</html>

 

구조 설명:

  1. 상태줄:
    • HTTP/1.1: HTTP 버전
    • 200 OK: 상태 코드 및 메시지 (요청 성공)
  2. 헤더:
    • Date: 응답이 전송된 시간
    • Content-Type: 응답 본문의 형식 (HTML)
    • Content-Length: 응답 본문의 크기 (1234바이트)
  3. 빈 줄: 헤더와 본문을 구분하는 빈 줄
  4. 본문: 응답 데이터 (HTML)
더보기
  • API는 소프트웨어 간 상호작용을 가능하게 하는 인터페이스이다.
  • HTTP API는 HTTP 프로토콜을 통해 서버와 클라이언트 간의 데이터를 교환하는 API이며, 다양한 HTTP 메서드와 상태 코드, 헤더를 사용한다.
  • RESTful API는 HTTP API의 일종이지만, REST 아키텍처의 원칙을 따르는 API이다.
  • RESTful API는 무상태성, 리소스 중심 설계, 일관된 메서드 사용을 요구하는 점에서 일반적인 HTTP API와 차이가 있다.

 

HTTP Cache

개념

HTTP 캐시는 브라우저가 서버로부터 받아온 데이터를 로컬에 저장해두고, 동일한 데이터를 다시 요청할 때 서버로부터 다시 받지 않고 저장된 데이터를 사용하는 메커니즘이다. 이를 통해 웹 페이지 로딩 속도를 향상시키고, 네트워크 사용량을 줄이며 서버 부하를 줄일 수 있다.

작동 방식

  1. 캐시 저장: 브라우저가 서버에서 리소스를 다운로드할 때, 로컬에 저장해 캐시로 사용한다.
  2. 캐시 재사용: 동일한 리소스 요청 시, 서버에 요청을 보내지 않고 캐시에 저장된 데이터를 사용한다.
  3. 조건부 요청: 캐시된 리소스가 최신인지 확인하기 위해 브라우저가 서버에 조건부 요청을 보낼 수 있다. 서버에서 변경이 없다고 응답하면 캐시된 데이터를 그대로 사용한다.

캐싱을 제어하는 HTTP 헤더

  • Cache-Control: 캐시의 동작 방식을 제어하는 가장 중요한 헤더이다.
    • max-age: 리소스를 캐시할 수 있는 최대 시간(초).
    • no-cache: 서버에 검증 후 캐시를 사용.
    • no-store: 리소스를 캐시하지 않고 항상 서버에서 새로 가져온다.
  • ETag: 리소스의 고유 식별자로, 리소스가 변경되었는지 확인하는 데 사용된다.
  • Expires: 캐시의 만료 시간을 명시하는 헤더로, 리소스가 언제 만료되는지 설정할 수 있다.
  • Last-Modified: 리소스가 마지막으로 수정된 날짜를 나타내며, 이를 기반으로 서버에서 변경 여부를 확인한다.

장점

  • 성능 향상: 브라우저가 서버에서 데이터를 재다운로드하지 않으므로 웹 페이지 로딩 속도가 빨라진다.
  • 네트워크 트래픽 절감: 중복된 데이터를 다시 요청하지 않아 네트워크 트래픽이 줄어든다.
  • 서버 부하 감소: 요청이 줄어 서버의 처리 부하가 감소한다.

단점

  • 데이터 최신성 문제: 캐시된 데이터가 오래되면 사용자가 최신 정보를 확인하지 못할 수 있다.
  • 메모리 사용 증가: 캐시를 저장하기 위해 로컬 저장 공간이나 메모리를 더 많이 사용하게 된다.

 

HTTPS와 캐시

HTTPS에서도 HTTP 캐시가 동작한다. HTTPS는 데이터를 암호화하지만, 여전히 HTTP 캐시 메커니즘을 사용해 성능을 최적화할 수 있다.

 

 

TCP/IP/DNS

 

TCP (Transmission Control Protocol)은 인터넷 상에서 데이터를 신뢰성 있게 전송하기 위한 프로토콜이다. TCP는 패킷의 분할 및 재조립, 흐름 제어, 오류 검출 및 재전송 등을 담당하여 데이터의 정확한 전달을 보장힌다. TCP는 연결 지향형 프로토콜로, 클라이언트와 서버 간에 가상의 연결을 설정하고 이를 통해 데이터를 주고받는다.

 

IP (Internet Protocol)는 인터넷 상에서 컴퓨터들이 통신하기 위해 사용되는 프로토콜이다. IP는 패킷을 라우팅하고, IP 주소를 할당하고, 패킷의 전달을 관리하는 역할을 한다. IP는 패킷 스위칭 네트워크에서 데이터의 출발지와 목적지를 식별하기 위해 IP 주소를 사용한다.

 

DNS (Domain Name System)는 인터넷에서 도메인 이름을 IP 주소로 변환하는 시스템이다. DNS는 사용자가 읽기 쉬운 도메인 이름 (예: www.example.com)을 컴퓨터가 이해하는 IP 주소 (예: 192.168.0.1)로 매핑해주는 역할을 한다. 사용자는 도메인 이름을 입력하여 웹 사이트에 접속하거나 이메일을 보낼 수 있으며, DNS는 도메인 이름과 해당 도메인의 IP 주소를 연결하여 통신이 이루어지게 한다.

 

 

반응형