HTTP란 무엇인가?
- HTTP (HyperText Transfer Protocol)는 월드 와이드 웹(WWW)에서 클라이언트(주로 웹 브라우저)와 서버 간에 정보를 주고받기 위한 프로토콜입니다.
HTML
문서, 이미지, 동영상, API 데이터 등 다양한 형태의 리소스를 전송할 수 있습니다.
HTTP
는 애플리케이션 계층에서 동작하며, TCP/IP
프로토콜을 기반으로 통신을 수행합니다.
기본적으로 암호화되지 않은 텍스트 형태로 데이터를 전송하므로 보안에는 취약합니다.
HTTP의 주요 특징
- 비상태성(Stateless)
HTTP
는 요청과 응답이 독립적으로 이루어지며, 서버는 클라이언트의 상태를 유지하지 않습니다.
- 클라이언트와 서버 간의 연결은 요청/응답이 끝나면 종료됩니다.
- 상태를 유지하려면 쿠키(Cookie), 세션(Session), 또는 JWT 등을 사용해야 합니다.
- 클라이언트-서버 모델
- 클라이언트가 요청(Request)을 보내고, 서버가 응답(Response)을 반환하는 구조입니다.
- 클라이언트는 요청에서 필요한 정보를 명시하고, 서버는 이에 맞는 데이터를 반환합니다.
- 문서 중심
- 처음에는 HTML 문서를 전송하기 위해 설계되었지만, 현재는
JSON
, XML
, 이미지, 동영상 등 다양한 데이터 형식을 지원합니다.
- 포트 번호
HTTP의 작동 원리
HTTP
는 요청(Request)과 응답(Response)으로 구성됩니다.
1. 클라이언트 요청
클라이언트는 서버에 HTTP
요청을 보냅니다.
요청 메시지는 다음과 같은 구성요소로 이루어집니다:
- HTTP 메서드: 요청의 목적을 나타냅니다. (예:
GET
, POST
, PUT
, DELETE
)
- URL: 요청할 리소스의 경로입니다.
- 헤더(Header): 요청에 대한 추가 정보를 포함합니다. (예:
User-Agent
, Content-Type
)
- 본문(Body): 요청 데이터(주로 POST/PUT 요청에서 사용).
2. 서버 응답
서버는 요청을 처리한 후 HTTP
응답 메시지를 클라이언트에게 반환합니다.
응답 메시지는 다음과 같습니다:
- 상태 코드(Status Code): 요청 처리 결과를 나타냅니다. (예:
200
, 404
, 500
)
- 헤더(Header): 응답에 대한 메타데이터를 포함합니다. (예:
Content-Type
, Content-Length
)
- 본문(Body): 요청한 데이터나 HTML 문서,
JSON
응답 등이 포함됩니다.
HTTP 메서드
HTTP 메서드는 요청의 목적을 나타냅니다.
메서드 | 설명 | 예시 |
---|
GET | 서버에서 데이터를 요청합니다. (주로 읽기 작업) | 웹페이지 열기 (GET /index.html ) |
POST | 서버에 데이터를 전송합니다. (주로 데이터 생성 작업) | 사용자 등록 (POST /users ) |
PUT | 서버의 데이터를 수정하거나 생성합니다. | 사용자 정보 업데이트 (PUT /users/123 ) |
DELETE | 서버에서 데이터를 삭제합니다. | 사용자 삭제 (DELETE /users/123 ) |
HEAD | GET 과 유사하지만 응답 본문은 제외하고 헤더 정보만 반환합니다. | 리소스 메타정보 확인 (HEAD /index.html ) |
OPTIONS | 서버에서 지원하는 HTTP 메서드를 확인합니다. | 서버의 메서드 목록 확인 (OPTIONS /users ) |
PATCH | 리소스의 일부만 업데이트합니다. | 특정 사용자 속성 변경 (PATCH /users/123 ) |
HTTP 상태 코드
HTTP 상태 코드는 요청에 대한 서버의 응답 결과를 나타냅니다.
상태 코드 | 설명 | 예시 |
---|
1xx | 정보(Informational) | 요청을 수신했으며, 처리 중입니다. |
2xx | 성공(Success) | 요청이 성공적으로 처리되었습니다. |
3xx | 리다이렉션(Redirection) | 클라이언트가 다른 URL로 이동해야 합니다. |
4xx | 클라이언트 오류(Client Error) | 요청에 문제가 있어 처리되지 않았습니다. |
5xx | 서버 오류(Server Error) | 서버가 요청 처리 중 오류를 발생시켰습니다. |
주요 상태 코드
- 200 OK: 요청이 성공적으로 처리됨.
- 301 Moved Permanently: 요청한 리소스가 다른 URL로 영구 이동.
- 404 Not Found: 요청한 리소스를 찾을 수 없음.
- 500 Internal Server Error: 서버에서 요청 처리 중 오류 발생.
HTTP의 장점
- 간단하고 확장성 높음
- 텍스트 기반이므로 구현이 쉽고, 확장성이 뛰어납니다.
- 유연성
- 다양한 데이터 형식과 메서드를 지원하여 다양한 애플리케이션에 활용 가능합니다.
- 플랫폼 독립성
- 클라이언트와 서버가 서로 다른 플랫폼이어도 문제없이 작동합니다.
HTTP의 단점
- 보안 취약성
- HTTP는 데이터를 암호화하지 않으므로 도청이나 데이터 변조에 취약합니다.
- 비상태성
- 요청 간의 상태 정보를 유지하지 않으므로, 상태 관리가 필요한 경우 추가적인 구현이 필요합니다.
- 네트워크 비용
- 비효율적인 방식으로 데이터를 주고받으면 네트워크 자원을 많이 소비할 수 있습니다.
HTTPS란 무엇인가?
- HTTPS (HyperText Transfer Protocol Secure)는 인터넷을 통해 안전하게 데이터를 전송하기 위한 프로토콜입니다. 이는 HTTP의 보안 확장판으로, 데이터를 암호화하여 중간에서 데이터가 도청되거나 변조되는 것을 방지합니다.
HTTPS
는 SSL/TLS (Secure Sockets Layer/Transport Layer Security)``프로토콜을 사용하여
HTTP`통신을 암호화합니다.
HTTPS의 주요 구성 요소
- SSL/TLS 프로토콜
- HTTPS
는 SSL/TLS
를 통해 보안을 제공합니다. TLS
는 SSL
의 개선된 버전으로 현재 더 많이 사용됩니다.
- 데이터 암호화, 데이터 무결성, 그리고 인증 기능을 제공합니다.
- 공개키 암호화 (Public Key Encryption)
- 비대칭 암호화: 서버와 클라이언트는 공개키(public key)와 비밀키(private key)를 사용하여 데이터를 암호화하고 복호화합니다.
- 서버는 인증서를 통해 공개키를 클라이언트에게 제공합니다.
- 디지털 인증서
- HTTPS
연결은 디지털 인증서(SSL 인증서)를 통해 신뢰성을 보장합니다.
- 인증서는 인증 기관(CA, Certificate Authority)에 의해 발급되며, 서버의 신원을 증명합니다.
HTTPS의 주요 기능
- 데이터 암호화
- 전송 중인 데이터는 암호화되어 중간에서 가로채도 내용을 알 수 없습니다.
- 데이터 무결성
- 데이터가 전송 중에 변경되지 않음을 보장합니다.
- 암호화된 데이터는 무단 변경 시 클라이언트와 서버에서 이를 감지할 수 있습니다.
- 서버 인증
- 클라이언트는 서버의 인증서를 통해 신뢰할 수 있는 서버와 통신하고 있음을 확인합니다.
- 클라이언트 인증 (선택적)
- 서버가 클라이언트를 인증하는 경우, 추가적인 보안을 제공합니다. 예: 금융 서비스에서 사용하는 2차 인증.
HTTPS가 작동하는 방식
- 클라이언트 요청
- 클라이언트(웹 브라우저)는 서버에 HTTPS
요청을 보냅니다.
- 서버 인증서 전달
- 서버는 인증 기관(CA)에서 발급받은 SSL
인증서를 클라이언트에게 보냅니다.
- 인증서에는 서버의 공개키와 서버 정보가 포함됩니다.
- 클라이언트 인증
- 클라이언트는 인증서를 확인하여 신뢰할 수 있는 서버인지 검증합니다.
- 세션 키 교환
- 클라이언트와 서버는 비대칭 암호화를 사용해 세션 키를 교환합니다.
- 이후 통신은 대칭 암호화 방식으로 진행되며, 이 방식은 속도가 빠릅니다.
- 암호화된 데이터 전송
- 데이터를 암호화하여 클라이언트와 서버 간에 안전하게 전송합니다.
HTTPS와 HTTP의 차이점
특징 | HTTP | HTTPS |
---|
보안 | 암호화되지 않아 보안 취약 | SSL/TLS 암호화를 통해 데이터 보호 |
포트 | 기본 포트: 80 | 기본 포트: 443 |
속도 | 더 빠름 | 암호화 및 복호화로 인해 약간 느림 |
인증 | 서버 인증 없음 | 서버 인증서 필요 |
사용 사례 | 비보안 웹사이트 (일반 정보 전송) | 보안이 필요한 사이트 (로그인, 결제 등) |
HTTPS를 사용하는 이유
- 보안 강화
- 데이터가 암호화되어 해커가 데이터를 탈취하거나 변조하기 어렵습니다.
- 신뢰성 제공
- 사용자에게 안전한 웹사이트라는 신뢰를 제공합니다.
- 브라우저는 HTTPS
가 아닌 웹사이트에 대해 경고 메시지를 표시할 수 있습니다.
- SEO(검색 엔진 최적화) 이점
- HTTPS
를 사용하는 사이트는 검색 엔진에서 더 높은 순위를 얻을 가능성이 큽니다.
- 브라우저 호환성
- 최신 웹 브라우저는 HTTPS
를 기본적으로 요구하며, HTTP
연결은 제한하거나 경고합니다.
HTTPS를 구현하는 방법
-
SSL 인증서 구매
- 인증 기관(CA)에서 인증서를 구매합니다. 무료 인증서 옵션으로는 Let's Encrypt가 있습니다.
-
서버 설정
- 웹 서버(Nginx, Apache 등)에 SSL/TLS
를 설정합니다.
-
HTTPS 강제 적용
- 서버 설정이나 리디렉션을 통해 HTTP 요청을 HTTPS
로 강제 전환합니다.
-
테스트
- SSL/TLS
가 제대로 설정되었는지 SSL Labs 등의 도구를 사용해 테스트합니다.
HTTPS의 단점
- 속도 저하
- 데이터 암호화/복호화 과정으로 인해 약간의 성능 저하가 발생합니다.
- 비용
- 일부 고급 인증서(예: EV SSL 인증서)는 비용이 발생합니다.
- 복잡성
- 초기 설정 및 유지 관리가 HTTP
보다 복잡할 수 있습니다.
HTTPS의 최신 동향
- TLS 1.3 도입
- 더 빠르고 안전한 암호화 프로토콜.
- 2018년에 표준화되었으며, 대부분의 최신 브라우저와 서버에서 지원합니다.
- HSTS (HTTP Strict Transport Security)
- 클라이언트가 항상 HTTPS로 연결하도록 강제하는 정책.
- 무료 인증서 제공
- Let's Encrypt 같은 기관이 무료 SSL 인증서를 제공하여 HTTPS 채택을 가속화하고 있습니다.
- HTTPS 기본화
- 웹 브라우저 및 검색 엔진은 HTTPS를 기본으로 설정하고 HTTP 사용을 점점 더 제한하고 있습니다.
회고
-
챌린지반 과제로 HTTP
, HTTPS
에 대해 공부했다.
둘 다 거기서 거기인줄 알았는데, 정보보호에 차이가 있다는것을 알게됐다.
-
대칭키와 비대칭키에 대해서 아직은 잘모르겠지만
차차 알아나가보자.
그럼이만