HTTP와 HTTPS: 두 판 사이의 차이

기술노트
(CS 용어 정리 - HTTP와 HTTPS 추가)
 
(Gemini 벌크 업로더로 자동 업로드)
 
1번째 줄: 1번째 줄:
== HTTP와 HTTPS ==
== HTTP와 HTTPS ==


HTTP와 HTTPS는 상에서 클라이언트와 서버 간의 통신을 위한 프로토콜입니다. HTTPS는 HTTP에 보안 계층이 추가된 버전입니다.
'''HTTP(HyperText Transfer Protocol)'''는 월드 와이드 (WWW)에서 클라이언트(웹 브라우저)와 웹 서버가 데이터를 주고받기 위한 애플리케이션 계층의 프로토콜입니다. 반면, '''HTTPS(HTTP Secure)'''는 HTTP에 '''SSL/TLS(Secure Sockets Layer/Transport Layer Security)''' 프로토콜을 결합하여, 통신 내용을 암호화함으로써 보안을 강화한 버전입니다.


=== HTTP (HyperText Transfer Protocol) ===
----
HTTP는 HYPERTEXT TRANSFER PROTOCOL의 약자입니다.


* '''Hypertext''': 컴퓨터 화면이나 전자 기기에서 볼 수 있는 데이터이며, 다른 데이터와 연결될 수 있는 주소를 참조하고 있습니다.
=== 🌐 HTTP (HyperText Transfer Protocol)의 특징 ===
* '''Transfer''': 사람들이 브라우저를 통해 확인하는 웹 상의 데이터는 HTTP에 의해 전달됩니다.
* '''Protocol''': 규칙 혹은 규약을 뜻합니다.


, 웹 상에서 클라이언트와 서버가 서로 정보를 주고받을 수 있도록 하는 규약입니다.
* '''비연결성 (Connectionless)''' : 클라이언트가 서버에 요청을 보내고 응답을 받으면 바로 연결을 끊습니다. 이는 서버 자원을 효율적으로 사용하게 하지만, 매번 새로운 연결을 맺어야 하는 단점이 있습니다. (HTTP/1.1의 Keep-Alive로 일부 개선)
* '''무상태성 (Stateless)''' : 서버는 클라이언트의 이전 요청 상태를 기억하지 않습니다. 각 요청은 독립적으로 처리되어 서버의 확장성을 높이지만, 사용자의 상태를 유지하기 위해 쿠키(Cookie)나 세션(Session) 같은 별도의 기술이 필요합니다.
* '''평문(Plain Text) 통신''' : 통신 과정에서 주고받는 데이터가 암호화되지 않아, 중간에서 데이터를 가로채는 '스니핑(Sniffing)' 공격에 매우 취약합니다.


* '''클라이언트''': 서버에 정보(데이터) 전송을 요청(Request)할 수 있는 클라이언트 소프트웨어(크롬, IE, 사파리 등 웹 브라우저가 대표적)가 설치된 컴퓨터(스마트폰 등을 포괄하는, 연산하는 기계의 개념)를 의미합니다.
----
* '''서버''': 응답하는(Response) 소프트웨어(아파치, nginx, IIS 등이 유명)가 설치된 컴퓨터를 의미합니다. 서버는 클라이언트의 요청을 해석하고 클라이언트의 요청 및 서버 관리자가 설정한 알고리즘에 준하는 정보를 클라이언트에게 송신합니다.


==== HTTP 통신 과정 ====
=== 🔒 HTTPS (HTTP Secure)의 특징과 동작 원리 ===
1. 클라이언트가 보고 싶은 정보를 서버에게 HTTP를 통해 요청 → HTTP Request
2. 서버는 알맞은 응답 메시지 및 정보를 클라이언트에게 전달
3. 응답 메시지 및 정보 중 HTTP body 내용이 클라이언트가 설정한 클라이언트의 용처에 도달 → HTTP Response


==== HTTP Message ====
HTTPS는 HTTP의 모든 특징을 가지면서, SSL/TLS 계층을 통해 다음과 같은 보안 기능을 추가로 제공합니다.
* 서버 주소(Host), 요청 메서드(Post), 상태 코드(403,404), target path, 헤더 정보, 바디 정보 등이 포함됩니다.
* 요청 메시지, 응답 메시지의 모양이 다릅니다.
* HTTP/1.1 메시지는 사람이 읽을 수 있어 통신 상태 문제점 파악이 가능합니다.


==== HTTP Header ====
* '''데이터 암호화 (Encryption)''' : 제3자가 데이터를 가로채도 내용을 알 수 없도록 하여 '기밀성'을 보장합니다.
* HTTP 메시지의 헤더에는 콘텐츠 관련 정보(Content-Type), 인증 관련 정보(Authorization), 쿠키 정보, 캐시 관련 정보 등 서버와 클라이언트간 통신 시 필요한 정보를 담습니다.
* '''데이터 무결성 (Integrity)''' : 데이터가 중간에 위변조되지 않았음을 보장합니다.
* 클라이언트 요청 시, 서버 응답 시 모두 헤더에 정보를 담을 있습니다.
* '''서버 인증 (Authentication)''' : 접속하려는 서버가 신뢰할 있는 서버인지 'SSL/TLS 인증서'를 통해 확인합니다.


==== HTTP Status Code ====
'''[SSL/TLS Handshake 동작 과정]'''
* HTTP 요청 시, 클라이언트는 요청의 결과에 대한 상태 정보를 얻습니다.
1.  '''Client Hello''' : 클라이언트가 서버에 접속하며, 지원하는 암호화 방식 목록과 랜덤 데이터를 전송합니다.
* 200, 400, 500 등 숫자 코드와, OK, NOT FOUND 등의 텍스트로 이루어집니다.
2.  '''Server Hello''' : 서버가 클라이언트의 암호화 방식 중 하나를 선택하고, 서버의 '공개키'가 포함된 'SSL/TLS 인증서'와 랜덤 데이터를 클라이언트에 전송합니다.
* 코드를 이용해 각 결과에 해당하는 행위를 할 수 있습니다.
3.  '''Client Verification & Key Exchange''' : 클라이언트는 서버의 인증서가 신뢰할 수 있는 CA(Certificate Authority)로부터 발급되었는지 확인합니다. 신뢰할 수 있다면, 앞으로 실제 데이터를 암호화할 '대칭키'를 생성하여 서버의 '공개키'로 암호화한 후 서버에 전송합니다.
4.  '''Handshake Finish''' : 서버는 자신의 '개인키'로 암호화된 대칭키를 복호화하여 획득합니다. 이후, 클라이언트와 서버는 공유된 '대칭키'를 사용하여 안전하게 통신합니다.


==== HTTP 응답 상태 코드 그룹 ====
----
* '''응답 (100번대)''': 정보 제공
* '''성공적인 응답 (200번대)''': 요청 성공
* '''리다이렉트 (300번대)''': 다른 리소스로 이동
* '''클라이언트 에러 (400번대)''': 요청 오류
* '''서버 에러 (500번대)''': 서버 처리 오류


예를 들어, 알 수 없는 URL로 들어갔을 때 나타나는 '''404 Error'''는 Not Found로, 클라이언트가 HTTP를 통해 송신 요청한 정보를 서버가 가지고 있지 않을 때 등장합니다. URL 중 서버까진 맞았는데 그 다음이 틀렸을 때 서버가 보유하지 않은 정보 자원임을 의미합니다.
=== 💡 개발자 핵심 Point ===


==== HTTP 요청 메서드 ====
* HTTPS는 HTTP보다 안전하지만, 암호화/복호화 과정 때문에 약간의 성능 저하가 발생할 있습니다. 그러나 현대의 하드웨어 발전으로 차이는 거의 무시할 수 있는 수준입니다.
* HTTP에서 클라이언트가 서버로 요청을 보낼 때 사용합니다.
* 개인정보를 다루거나, 로그인/결제 기능이 있는 모든 웹사이트는 반드시 HTTPS를 사용해야 합니다.
* 요청 시 요청 메서드로 특정 요청에 대한 동작을 정의합니다.
* 최신 브라우저들은 HTTP 사이트를 '안전하지 않음'으로 표시하며, 구글 등 검색엔진은 HTTPS 사이트에 SEO(검색엔진 최적화) 가산점을 부여하므로, 이제 '''HTTPS는 선택이 아닌 필수'''입니다.
* 주요 메서드: GET, POST, PUT, PATCH, DELETE 등
* SSL/TLS Handshake 과정에서는 안전한 키 교환을 위해 '''비대칭키(공개키/개인키)''' 방식을 사용하고, 실제 데이터 통신은 연산 속도가 빠른 '''대칭키''' 방식을 사용하는 하이브리드 암호화 방식을 채택하여 효율성을 높입니다.
 
==== REST API (Representational State Transfer API) ====
* HTTP 규약을 어떻게 잘 활용해서 서버와 클라이언트 사이의 통신을 구축할 수 있을지에 대한 지침입니다.
* API(Application Programming Interface): 사용자가 특정기능을 사용할 수 있도록 제공하는 함수를 의미합니다.
* REST API는 HTTP의 요청 메서드에 응하는 서버 API와 클라이언트 간 통신의 구조가 지켜야 할 좋은 방법을 명시한 것입니다.
* 구체적인 내용으로는 요청 메서드의 의미, URI 설계, 클라이언트의 상태에 대한 동작 등을 정의합니다.
 
=== HTTPS (HyperText Transfer Protocol Secure) ===
* HTTPS(HyperText Transfer Protocol over Secure Socket Layer)는 HTTP를 보완하는 수단입니다.
* HTTP는 암호화되지 않았기 때문에 도난이나 변조, 도청이 가능합니다.
* HTTPS는 HTTP의 일반 텍스트(text)에 SSL(보안 소켓 계층)이나 TLS(전송 계층 보안) 프로토콜을 씌워 데이터를 암호화하는 기법이며, 로그인이나 결제화면에서 주로 쓰입니다.
* SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버 브라우저가 민감한 정보를 주고받을 때 이것이 도난당하는 것을 막아줍니다.
* HTTPS를 사용하는 경우 URL에서 http:// 대신 https://를 사용합니다.
 
==== HTTPS의 보안성 ====
* HTTP와 HTTPS의 주요 차이점은 SSL 인증서입니다.
* HTTPS는 쉽게 말해서 HTTP 프로토콜에 보안 기능을 추가한 것입니다.
* SSL 인증서는 사용자가 사이트에 제공하는 정보를 암호화합니다. 쉽게 말해서 데이터를 암호로 바꿉니다. 이렇게 전송된 데이터는 중간에서 누군가 훔쳐 낸다고 하더라도 데이터가 암호화되어있기 때문에 해독할 없습니다.
* 외에도 HTTPS는 TLS(전송 계층 보안) 프로토콜을 통해서도 보안을 유지합니다.
* TLS은 데이터 무결성을 제공하기 때문에 데이터가 전송 중에 수정되거나 손상되는 것을 방지하고, 사용자가 자신이 의도하는 웹사이트와 통신하고 있음을 입증하는 인증 기능도 제공합니다.
 
==== HTTPS 확인 방법 ====
브라우저에서 URL을 확인하여 웹사이트에 HTTPS 보호 기능이 있는지를 확인할 수 있습니다. 도메인 이름 앞에 자물쇠 아이콘이 있으면 이 사이트는 HTTPS로 인해 안전한 것입니다.
 
=== HTTPS의 SEO 효과 ===
HTTPS는 검색 엔진 최적화(SEO)에도 긍정적인 영향을 미칩니다:
 
==== 1. 더 나은 사용자 경험 제공 ====
* 사용자 경험(UX)은 SEO의 큰 부분을 차지합니다.
* Google Chrome은 SSL 인증서가 없는 사이트를 방문할 때 "안전하지 않음" 레이블을 표시하여 사용자에게 경고합니다.
* 이러한 경고는 사용자 경험을 해치고 이탈률을 높일 수 있습니다.
 
==== 2. 사이트 체류시간 증가 ====
* 사용자가 검색결과로 돌아가기 전에 웹 페이지를 분석하는 데 걸리는 시간인 체류시간은 SEO에 중요한 요소입니다.
* HTTPS가 없는 웹 사이트는 "안전하지 않음" 메시지로 인해 사용자가 빠르게 이탈할 수 있어 페이지 체류시간을 줄입니다.
 
==== 3. 사이트 로딩 속도 개선 ====
* HTTPS는 HTTP보다 최대 300% 이상 더 빠르게 로딩될 수 있어 SEO에 유리합니다.
 
==== 4. SEO 전략 확인 및 검증 ====
* HTTPS를 사용하는 보안 웹사이트는 분석 대시보드에서 해당 리퍼러(Referral) 정보를 보호하고 표시합니다.
* 웹 사이트에 대한 최적의 트래픽 소스를 명확하게 찾아내고 정확하게 확인할 수 있습니다.
 
=== 정리 ===
* HTTPS(https://)는 SSL(Secure Socket Layer) 인증서를 사용하는 HTTP(http://)입니다.
* SSL(또는 TLS) 인증서는 일반 HTTP 요청 및 응답을 암호화합니다. 따라서 HTTPS는 HTTP보다 더 안전한 보안용 프로토콜입니다.
* HTTP와 HTTPS의 유일한 차이점은 보안 계층의 추가입니다. HTTPS를 사용한 웹 페이지를 통해 전송되는 모든 데이터는 추가적인 보안 계층인 TLS(전송 계층 보안) 프로토콜을 통해 보호됩니다.
* HTTPS는 SEO(검색 엔진 최적화)에도 유리합니다.
 
=== 관련 항목 ===
* [[웹 브라우저]]
* [[SSL/TLS]]
* [[SEO]]
* [[REST API]]
* [[웹 보안]]
* [[암호화]]

2025년 9월 11일 (목) 16:50 기준 최신판

HTTP와 HTTPS

HTTP(HyperText Transfer Protocol)는 월드 와이드 웹(WWW)에서 클라이언트(웹 브라우저)와 웹 서버가 데이터를 주고받기 위한 애플리케이션 계층의 프로토콜입니다. 반면, HTTPS(HTTP Secure)는 HTTP에 SSL/TLS(Secure Sockets Layer/Transport Layer Security) 프로토콜을 결합하여, 통신 내용을 암호화함으로써 보안을 강화한 버전입니다.


🌐 HTTP (HyperText Transfer Protocol)의 특징

  • 비연결성 (Connectionless) : 클라이언트가 서버에 요청을 보내고 응답을 받으면 바로 연결을 끊습니다. 이는 서버 자원을 효율적으로 사용하게 하지만, 매번 새로운 연결을 맺어야 하는 단점이 있습니다. (HTTP/1.1의 Keep-Alive로 일부 개선)
  • 무상태성 (Stateless) : 서버는 클라이언트의 이전 요청 상태를 기억하지 않습니다. 각 요청은 독립적으로 처리되어 서버의 확장성을 높이지만, 사용자의 상태를 유지하기 위해 쿠키(Cookie)나 세션(Session) 같은 별도의 기술이 필요합니다.
  • 평문(Plain Text) 통신 : 통신 과정에서 주고받는 데이터가 암호화되지 않아, 중간에서 데이터를 가로채는 '스니핑(Sniffing)' 공격에 매우 취약합니다.

🔒 HTTPS (HTTP Secure)의 특징과 동작 원리

HTTPS는 HTTP의 모든 특징을 가지면서, SSL/TLS 계층을 통해 다음과 같은 보안 기능을 추가로 제공합니다.

  • 데이터 암호화 (Encryption) : 제3자가 데이터를 가로채도 내용을 알 수 없도록 하여 '기밀성'을 보장합니다.
  • 데이터 무결성 (Integrity) : 데이터가 중간에 위변조되지 않았음을 보장합니다.
  • 서버 인증 (Authentication) : 접속하려는 서버가 신뢰할 수 있는 서버인지 'SSL/TLS 인증서'를 통해 확인합니다.

[SSL/TLS Handshake 동작 과정] 1. Client Hello : 클라이언트가 서버에 접속하며, 지원하는 암호화 방식 목록과 랜덤 데이터를 전송합니다. 2. Server Hello : 서버가 클라이언트의 암호화 방식 중 하나를 선택하고, 서버의 '공개키'가 포함된 'SSL/TLS 인증서'와 랜덤 데이터를 클라이언트에 전송합니다. 3. Client Verification & Key Exchange : 클라이언트는 서버의 인증서가 신뢰할 수 있는 CA(Certificate Authority)로부터 발급되었는지 확인합니다. 신뢰할 수 있다면, 앞으로 실제 데이터를 암호화할 '대칭키'를 생성하여 서버의 '공개키'로 암호화한 후 서버에 전송합니다. 4. Handshake Finish : 서버는 자신의 '개인키'로 암호화된 대칭키를 복호화하여 획득합니다. 이후, 클라이언트와 서버는 공유된 '대칭키'를 사용하여 안전하게 통신합니다.


💡 개발자 핵심 Point

  • HTTPS는 HTTP보다 안전하지만, 암호화/복호화 과정 때문에 약간의 성능 저하가 발생할 수 있습니다. 그러나 현대의 하드웨어 발전으로 그 차이는 거의 무시할 수 있는 수준입니다.
  • 개인정보를 다루거나, 로그인/결제 기능이 있는 모든 웹사이트는 반드시 HTTPS를 사용해야 합니다.
  • 최신 브라우저들은 HTTP 사이트를 '안전하지 않음'으로 표시하며, 구글 등 검색엔진은 HTTPS 사이트에 SEO(검색엔진 최적화) 가산점을 부여하므로, 이제 HTTPS는 선택이 아닌 필수입니다.
  • SSL/TLS Handshake 과정에서는 안전한 키 교환을 위해 비대칭키(공개키/개인키) 방식을 사용하고, 실제 데이터 통신은 연산 속도가 빠른 대칭키 방식을 사용하는 하이브리드 암호화 방식을 채택하여 효율성을 높입니다.