본문 바로가기
Network/Network - Experience

[Network] HTTP / HTTPS / TLS+SSL / 대칭키+비대칭키

by ymkim 2025. 3. 26.

 

https://sw-ym.tistory.com/manage/newpost/193?type=post&returnURL=ENTRY

 

이번 시간에는 웹의 기본 통신 규약인 HTTP부터 통신의 보안을 위한 HTTPS와 TLS/SSL에 대해 알아보자.

01. HTTP?

HTTP는 HyperText Transfer Protocol의 약자이며, 웹(Web)상에서 클라이언트와 서버 간에 데이터를 주고받는 통신 규약을 의미한다. HTTP는 기본적으로 다양한 리소스(HTML, TEXT, 이미지, 영상, 음성, 파일, JSON, XML.. 등)를 전달할 수 있으며, 기본적으로 암호화 되지 않는 평문으로 이루어져 있다. 또한, HTTP는 TCP/IP 통신 위에서 동작하게 된다.

01-1. HTTP 통신 구조

클라이언트(Client)와 서버(Server)는 왜 분리되어 있을까?

HTTP는 기본적으로 클라이언트(Client)가 요청을 보내고, 서버(Server)가 그 요청에 응답하는 구조로 동작한다.

클라이언트와 서버가 분리되어 있는 이유는 각자의 역할에 집중하기 위함이다. 클라이언트는 복잡한 비즈니스 로직을 처리하지 않고, 사용자 인터페이스(UI) 렌더링에만 집중하며, 서버는 비즈니스 로직과 데이터 처리에 전념한다. 이러한 구조를 통해 책임을 명확히 분리할 수 있고, 클라이언트와 서버를 독립적으로 개발 및 운영할 수 있다는 장점이 있다.

그렇다면 다음으로는 HTTP의 특징 중 하나인 Stateless(무상태성)에 대해 알아보자.

01-2. Stateless vs Stateful

Stateless?

https://developing-move.tistory.com/286

 

 

HTTP는 기본적으로 Stateless(무상태성) 프로토콜이다. 각 요청은 독립적이며, 서버는 클라이언트의 이전 요청이나 상태를 기억하지 않는다. 즉, 서버는 클라이언트의 요청을 받을 때 처음 요청을 받는 것처럼 동작하며, 세션 관리의 책임은 클라이언트에게 주어진다. 대표적인 Stateless 프로토콜로는 UDP와 HTTP 등이 존재한다.

 

장점으로는 Stateless는 서버가 상태를 기억하지 않기 때문에, 어떠한 서버가 요청을 받아도 상관이 없다. 그렇기에 로드밸런싱이나 확장이 간단하며, 서버의 리소스를 아낄 수 있기 때문에 리소스 효율화 측면에서도 효율적이다.

 

단점으로는 서버가 상태를 기억하지 않으므로, 클라이언트에서 서버로 요청을 보낼 때 매번 필요한 데이터를 함께 요청해야 한다. 또한, 로그인 유지나 장바구니 같이 상태를 기억해야 하는 기능 구현에 어려움이 있을 수 있다. 하지만 실 서비스에서는 쿠키, 세션, JWT Token과 같은 기능을 통해 Stateless의 장점은 유지하면서 상태를 기억하기 위한 방법이 함께 사용 된다.

Stateful?

Stateful은 서버(Server)가 클라이언트(Client)의 상태를 기억하는 것을 의미한다. 예를 들어 사용자가 로그인을 수행하면, 상태를 기억하고 있기 때문에 사용자의 개인 정보 또는 인가된 데이터를 수시로 확인할 수 있다는 장점이 존재한다. 하지만 Stateful은 서버에 상태 정보를 저장하기 때문에, 자칫하면 서버의 부하로 이어질 수 있으며 서버가 중단되거나 교체 되어야 하는 경우에는 클라이언트의 상태 정보가 유실 되는 경우도 발생하게 된다. 최근에는 이러한 부분을 방지하기 위해 서버간 세션을 공유하거나, 아니면 외부 캐시 저장소인 Redis를 사용하기도 한다.

01-3. TCP vs UDP

TCP 왜 필요한가?

TCP를 알아보기 전에, 인터넷에서 데이터를 어떻게 주고 받는지를 먼저 알아보자. 인터넷 상에서는 데이터를 패킷(Packet)이라는 작은 단위로 쪼개어 주고받는다. 이렇게 데이터를 패킷으로 나눈 이유는, 크고 무거운 데이터를 한 번에 전송할 경우 네트워크 회선에 문제가 발생했을 때 이를 다시 전송하기 위해 많은 리소스가 소모되기 때문이다. 따라서 데이터를 효율적으로 전송하기 위해 패킷으로 분할한 후, 각각의 패킷을 전송 가능한 최적의 경로를 통해 전달한다.

다만, 문제는 패킷 단위로 데이터를 전송하더라도, 모든 패킷이 순서대로 정확히 도착했는지를 확인하기 어렵다는 점이다. IP를 통해 데이터를 전송하는 방식이 존재하지만, IP데이터를 정확한 주소로 전달하는 데만 집중할 뿐, 데이터의 송수신 여부나 순서에 대해서는 보장하지 않는다. 이러한 문제를 해결하기 위해 TCP(Transmission Control Protocol)이라는 프로토콜이 등장하게 되었다.

TCP 프로토콜 특징

https://hstory0208.tistory.com/entry/TCP와-UDP의-차이-개념에-대해-쉽게-알아보자

TCP 특징

  1. TCP는 연결지향 프로토콜, SYN → SYN+ACK → ACK 순으로 연결
  2. TCP는 데이터를 주고 받을때, 데이터의 손실유무 판단 후 재전송 요청
  3. TCP는 패킷의 전송순서 보장, 순서가 안맞으면 재전송 or 재정렬 수행

TCP 3-way handshake의 흐름 과정을 다시 한번 보자

TCP의 연결 과정은 3-way handshake 방식으로 이루어진다. 먼저, 클라이언트는 서버와 연결하기 위해 SYN 패킷을 보내고, 자신의 초기 시퀸스 번호(100번)를 함께 전송한다. 그 다음, 서버는 클라이언트의 연결을 수락하고, 자신의 시퀸스 번호(300번)을 담은 SYN+ACK 패킷을 응답으로 보낸다. 마지막으로 클라이언트는 서버의 시퀸스 번호(300번)에 대해 ACK 응답을 보내 최종 연결을 수행한다. 후에, 본격적인 데이터 통신을 진행한다.

UDP(User Datagram Protocol)?

TCP신뢰성 있는 데이터 전송을 보장하지만, 이를 위해 많은 확인 절차를 거치기에 속도가 느리다는 단점이 있다. 일반적인 텍스트나 이미지는 문제가 없지만, 음성이나 영상같은 실시간성이 중요한 데이터의 경우 로딩 지연이 발생할 수 있다. 이러한 이유로, TCP와 유사한 역할을 하면서 속도효율성에 중점을 둔 UDP가 등장하였다. UDP는 TCP처럼 연결을 설정하지 않고, 데이터를 빠르게 전송하는 비연결형 프로토콜이다. 수신 여부, 순서 보장없이 데이터를 전송하기에 지연 시간이 없으며 오버헤드가 적으며,실시간 스트리밍, 화상 통화 등 빠른 속도가 중요한 서비스에서 주로 사용된다.

02. HTTPS 그리고 SSL/TLS

현재까지 HTTP는 웹 통신을 위한 기본적인 통신 규약으로 자리 잡았다고 볼 수 있다. 그러나 웹 기술의 고도화에 따라 다양한 해킹 기술이 등장했고, 이에 따라 데이터를 안전하게 전달하기 위한 보안 체계의 필요성이 높아졌다. 이에 HTTP 통신에 보안을 강화한 HTTPS가 등장하였으며 TLS/SSL과 같은 개념도 생겨났다. 이번에는 HTTPS와 TLS/SSL란 무엇인지 알아보는 시간을 갖는다.

02-1. HTTPS?

https://brunch.co.kr/@swimjiy/47

 

HTTPS(Hypertext Transfer Protocol Secure)는 HTTP에 보안(secure) 기능이 추가된 프로토콜이다. HTTP는 기본적으로 데이터를 평문(암호화되지 않은 상태)으로 전송하기 때문에, 클라이언트와 서버 간의 데이터가 감청당하기 쉽다. 반면, HTTPS데이터를 호화하여 전송함으로써, 중간에서 정보가 노출되거나 변조되는 것을 방지할 수 있어 보다 안전한 통신이 가능하다.

하지만 HTTP의 보안은 HTTPS가 아닌 SSL(Secure Socket Layer)에 의해 보안 설정이 된다. 이 말이 무엇인지는 아래 내용을 통해 알아보자.

02-2. SSL/TLS?

앞서 언급했듯이, HTTP의 보안은 HTTPS가 아닌 SSL/TLS가 담당한다. SSL/TLSHTTP 통신을 암호화하는 보안 계층(OSI 4~5계층 사이)으로, 이를 통해 암호화된 HTTP 통신 방식을 HTTPS라 할 수 있다. 또한, OSI 계층은 독립적이기 때문에 SSL은 HTTPS 외에도 FTP, SMTP 같은 다른 응용 계층 프로토콜과 함께 사용할 수 있다. 한편, SSL과 TLS는 같은 계열의 보안 프로토콜로, 1990년대 후반 SSL 2.0의 취약점을 개선한 SSL 3.0 이후부터 TLS로 이름이 변경되었다. 지금은 대부분 TLS를 사용하지만, 여전히 관습적으로 SSL이라는 용어가 널리 쓰이고 있다.

02-3. SSL의 동작 방식 그리고 대칭키, 공개키 암호화 방식?

그렇다면, SSL은 어떤 방식으로 동작을 할까? 2차 세계대전 당시 각국이 기밀 정보를 암호화해 주고받았던 것처럼, 컴퓨터 세상에서도 데이터를 안전하게 전송하기 위해 다양한 암호화 방식이 사용되었다. 이 때, 중요한 요소는 바로 키(Key)다. 키는 데이터를 암호화 및 복호화 하는데 사용되며, SSL은 공개키 + 대칭키 방식을 함께 사용하는 하이브리드 구조를 갖고 있다.

https://brunch.co.kr/@swimjiy/47

 

대칭키 기법하나의 키암호화, 복호화를 모두 수행하는 암호화 기법이다. 예를 들어, 하나의 키로 금고를 열고 잠그는 것과 비슷하다. 웹 통신에서는 클라이언트와 서버가 동일한 키(ex: 1234)를 공유하여 데이터를 암호화하고 복호화 하는 과정을 거친다. 대칭키 기법은 속도가 빠르다는 장점이 있지만, 같은 키를 공유해야 하기 때문에, 전송 중 키가 탈취될 위험이 존재한다.

https://brunch.co.kr/@swimjiy/47

 

이러한 대칭키 기법의 문제를 해소하기 위해 탄생한 암호화 방식이 공개키 기법이다. 공개키 기법은 서로 다른 2개의 키, 즉 공개키와 개인키를 사용해 암호화와 복호화를 수행한다. 또한, 공개키는 누구나 가질 수 있지만, 개인키는 소유자만 보관하며, 이 2개의 키는 한쌍으로 동작한다. 따라서, 공개키와 개인키가 모두 있어야 암복호화가 가능해진다.

중요한 부분은 공개키 기법은 서로 다른 두개의 열쇠(ex: 빨간키, 파란키)로 구성되며, 하나로 잠그만 반드시 다른 하나로만 열수가 있다. 즉, 서버가 개인키를 보유하고 클라이언트에게 공개키를 전달하면, 누군가 공개키를 탈취하여도 개인 없이는 복호화가 불가능하기에 안전하게 보호할 수 있다. 하지만, 비대칭키 방식은 안전하게 데이터를 주고 받을 수 있지만, 암호화 과정이 복잡하기에 속도가 느리다는 단점이 존재한다.

02-4. SSL 통신 과정

TCP 3-Way Handshake: OSI 4계층(전송 계층)에서 연결 자체를 맺는 행위
TLS Handhake: OSI 5 ~ 7계층(세션, 프레젠테이션, 애플리케이션 계층)에서 보안을 협상하는 단계

SSL(Secure Socket Layer)의 통신 과정은, 3단계악수(handshake), 세션, 세션 종료로 이루어진다.

1단계: 클라이언트는 서버에 연결 요청

우선, 클라이언트는 서버에 인사를 건넨다. 이 요청을 ClientHello라고 하며, 이 때 랜덤한 데이터(”Hi”)와 클라이언트가 지원 할 수 있는 암호화 방식, TLS 버전 등을 서버에 전달한다. 암호화 방식을 전달하는 이유는 다양한 암호화 방식이 존재하기에, 서로 어떤 암호화 방식을 사용할지 협의가 필요하기 때문이다.

2단계: 서버가 인증서와 공개키를 클라이언트에 전달

클라이언트에게 인사를 받은 서버도 인사를 한다. 이 때, 서버는 3가지 내용을 전달하는데, 앞서 클라이언트가 전달한 랜덤 데이터(”Hello”), 지원 가능한 암호화 방식, 인증서(공개키 포함)를 전달한다. 클라이언트에서는 인증서를 확인하고 검증한 후 서버의 공개키를 안전하게 획득한다.

3단계: 클라이언트는 임시 키를 생성한다

본격적으로 키를 주고 받기 위해 클라이언트는 실제 데이터 통신에서 사용할 임시 키를 생성한다. 임시 키는 클라이언트와 서버가 주고받은 랜덤 데이터를 조합해 임시 키(pre master secret)를 생성하며, 서버로부터 받은 공개키를 기반으로 암호화해 해당 임시 키를 서버로 전달한다.

4단계: 서버에서 키 해독

서버는 클라이언트로부터 암호화된 임시 키를 받으면, 자신의 개인키를 사용하여 공개키로 암호화된 데이터를 복호화합니다. 복호화된 데이터 내에 포함된 임시 키를 통해, 서버는 클라이언트와 동일한 대칭키를 갖게 된다.

5단계: 세션 키(대칭키) 생성 및 안전한 통신

클라이언트와 서버는 공유한 임시 키와 서로 주고 받은 랜덤 값을 조합하여, 동일한 세션 키(대칭키)를 생성한다.

그 이후 단계인 세션 단계에서는 앞서 생성한 세션 키를 이용해 대칭키 기법으로 데이터를 암호화해서 통신하고, 데이터 전송이 끝나면 세션을 종료해 통신을 마친다. 이 때 통신에 사용한 세션 키도 함께 삭제한다.

99. 참고 자료

 

[Network] TCP / UDP의 개념과 특징, 차이점

전송 계층에서 사용되는 프로토콜 (TCP / UDP) TCP와 UDP는 OSI 표준모델과 TCP/IP 모델의 전송계층에서 사용되는 프로토콜입니다. 전송계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP

coding-factory.tistory.com

 

그림으로 쉽게 보는 TCP

그래서 TCP/IP의 TCP가 뭘까 | 저번 시간에 우리는 원활한 인터넷 통신을 위한 프로토콜인 IP에 대해 알아봤습니다. IP는 데이터가 원하는 주소로 정확하게 전송될 수 있도록 사회적으로 약속한 규

brunch.co.kr

 

TCP, UDP | 모든 개발자를 위한 HTTP 웹 기본 지식

TCP, UDP

www.inflearn.com

'Network > Network - Experience' 카테고리의 다른 글

[Network] DNS(Domain Name Server)란?  (0) 2025.03.07