목차
1. HTTP란?
2. HTTP 프로토콜의 특징
3. URL이란?
4. HTTP/1.1 과 HTTP/2.0의 차이
5. HTTPS는 HTTP의 차이
6. 공개키 (비대칭키) 방식이 뭔가?
1. HTTP란?
HyperText Transfer Protocol
- 인터넷에서 데이터(HTML과 같은 문서)를 주고 받을 수 있는 프로토콜(규약)
- 클라이언트 ↔ 서버 간에 HTTP(S) 프로토콜을 이용해 서로 통신한다.
2. HTTP 프로토콜의 특징
(1) 클라이언트 ↔ 서버 구조
클라이언트가 서버에 요청을 보내면 서버가 요청에 대한 응답을 보내는 구조
(2) 무상태 프로토콜 (Stateless)
HTTP에선 서버가 클라이언트의 상태를 보존하지 않는다. 따라서 응답과 요청이 독립적이다.
- 장점: 응답 서버를 쉽게 바꿀 수 있어 서버의 확장성이 높다. 중간에 요청이 다른 서버로 유입되어도 클라이언트의 상태를 보존하지 않으므로 문제가 되지 않는다. 따라서 무상태는 응답 서버를 쉽게 바꿀 수 있기 때문에 서버 증설이 가능하다 (
Scale Out
)
또한 서버에서 클라이언트 요청에 관한 데이터를 따로 저장할 필요가 없어 추가적인 저장 공간을 필요로 하지 않는다. - 단점: 매 요청마다 클라이언트가 추가 데이터를 전송해줘야 한다. 로그인처럼 유저의 상태를 유지해야 하는 서비스의 경우 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지해야 하는 추가적인 작업이 필요하다.
(3) 비연결성 (Connectionless)
TCP/IP 프로토콜은 기본적으로 연결을 유지하는 모델이기 때문에 클라이언트가 요청을 보내지 않더라도 계속 연결을 유지해야 하고, 따라서 연결을 유지하는 서버의 자원이 계속 소모되는 단점이 있다.
하지만 TCP/IP를 기반으로 만들어진 HTTP에서는 실제로 요청을 주고받을 때만 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊는다. 따라서 최소한의 자원으로 서버를 유지할 수 있다.
- 장점: 일반적으로 초 단위 이하의 빠른 속도로 응답한다. 트래픽이 많지 않고 빠른 응답을 제공할 수 있는 경우에 효율적이다.
- 단점: 비연결성의 한계. TCP/IP 연결을 새로 맺어야 하는
3-way handshake
비용이 추가로 든다! 따라서 트래픽이 많고 큰 규모의 서비스를 운영할 때 비효율적이다.
3. URL이란?
Uniform Resource Locator
- 웹 상에서 특정한 '자원에 대한 주소'
- *특정한 자원 = HTML 문서, CSS 문서, 이미지 등
4. URL의 구성
- Scheme(Protocol): 브라우저가 자원을 요청하기 위해 사용해야 하는 프로토콜
- Domain Name: 요청이 전달되는 웹 서버를 가리키며, IP 주소로도 표현이 가능하다.
- Port : 웹 서버에서 자원에 접근하기 위한 기술적 Gate를 가리킨다. 일반적으로 웹 서버는 well-known port number를 사용하기 때문에 기입을 생략한다.💡 http 프로토콜 뒤에 ://를 붙이는 포맷은 URL의 다음 파트가 Authority가 옴을 표현한다.
- 🔼 이 2가지를 합해 Authority 파트라고 한다.
- Path to the file: 웹 서버 내에서의 경로를 표현하는 파트
- Parameters: 웹 서버에 제공되는 부가적인 인자들. key-value 쌍을 & 심볼을 구분자로 사용해 연속적으로 작성한다.
- Anchor(Fragment):
#
으로 구분하며, 리소스 내부에서 일종의 북마크 역할을 한다. HTML 페이지에서 북마크 된 위치로 스크롤이 이동하여 페이지를 보여줄 수 있다.
5. HTTP/1.1과 HTTP/2.0의 차이
HTTP/1.1 특징
- 기본적으로 Connetion 당 1개의 요청을 처리 하도록 설계
- 동시 전송이 불가능하고 요청과 응답이 순차적으로 이뤄짐
- HTTP 문서 안에 포함된 다수의 리소스(이미지, CSS, JavaScript 등)를 처리하려면 요청할 리소스 개수에 비례해 Latency(대기 시간)이 길어짐
여기엔 단점이 있었으니..
- HOL(Header of Line) Blocking: 특정 응답의 지연으로 인한 문제. 순차적으로 자원을 요청할 때, 앞에서 응답 처리가 완료되기 전까지 뒤의 응답들은 대기해야 한다. 이 때 앞의 요청에 대한 응답이 지연되면 뒤의 대기 응답들은 계속해서 대기해야 하는 현상
- RTT(Round Trip Time) 증가: 일반적으로 하나의 Connetion에 하나의 요청을 처리하므로 매 요청별로 Connection을 만들게 되어 TCP 상에서 동작하는 HTTP의 특성 상 3 way handshake가 반복적으로 일어난다. 따라서 불필요한 RTT가 증가하여 네트워크 지연을 초래할 수 있다.
- 무거운 Header 구조: http/1.1의 헤더에는 많은 메타정보들을 저장한다. 매 요청마다 이전 요청과 중복되는 Header 값을 전송하게 되며, 또한 쿠키 정보도 매 요청마다 헤더에 포함되어 전송되어진다. → 전송하려는 값보다 헤더 값이 더 큰 경우가 자주 발생한다.
이를 보완한 HTTP/2.0
- Multiplexed Streams(다중화): 한 Connection으로 동시에 여러 개의 요청을 Stream으로 받아 동시에 처리하고 응답할 수 있다. 즉 특정 요청이 먼저 끝나면 해당 요청에 대해 먼저 응답하는 식으로 HOL blocking 문제를 해결할 수 있다.
- Stream Prioritization(우선순위 설정): 리소스 간 우선순위 설정을 할 수 있다.
- Server Push 기법: 기존 HTTP/1.1에선 클라이언트가 요청한 HTML 문서를 수신한 후, HTML 문서를 해석하면서 필요한 리소스를 재요청하는 방식이었다. 하지만 HTTP/2.0에선 클라이언트가 요청하지 않은 (HTML 문서에 포함된) 리소스를 push해주는 방법으로, 클라이언트의 요청을 최소화하여 성능 향상이 가능하다.
- Header Compression: Header 정보를 압축하기 위해
Static/Dynamic Header Table
을 사용하여 중복 Header를 검출하고, 중복된 Header는 index값만 전송하고, 중복되지 않은 새로운 Header 정보는 인코딩 처리를 하여 기존의 무거웠던 Header 정보를 최대한으로 줄여서 전송한다.
6. HTTP와 HTTPS의 차이
- HTTP에 데이터 암호화가 추가된 프로토콜. 네트워크 상에서 중간에 제 3자가 정보를 볼 수 없도록 암호화를 지원하고 있다.
- HTTP는 기본적으로 클라이언트와 서버 사이에서 데이터를 주고받는 통신 프로토콜이다. 그러나 HTTP에는 단점이 있는데, 주고 받는 데이터가 전송될 때 암호화되지 않기 때문에 보안에 취약하다는 것이었다. 이러한 문제를 해결하기 위해 중요한 정보를 주고 받을 때 도난당하는 것을 막게 하는 프로토콜이 만들어졌고, 이게
HTTPS(Secure)
이다. 즉 보안 문제로 기존의 HTTP를 암호화한 버전이 HTTPS가 된 것이다. - 기존의 HTTP/1.1은
SSL
(Secure Socket Layer. 전송 계층 보안) 암호화 프로토콜이라고 해서 어떤 받는 정보를 암호화하여 인터넷 연결을 보호하는 기술을 사용했는데, HTTPS는 SSL을 한층 더 보안을 강화한TLS
(Transport Layer Security)를 사용한다. 현재는SSL/TLS
라는 단어를 혼용해서 사용하고 있다.
7. HTTP / HTTPS의 암호화 방식
- HTTP/HTTPS에서 대칭암호화, 비대칭암호화 방식을 적절히 사용하여 암호화 한다.
- HTTP의 암호화 방식에선 중간자 공격의 취약함이 있어 HTTPS에선 신뢰할 수 있는 제 3자(CA 인증)을 통한 암호화 방식이 이뤄진다.
대칭키 암호화 방식
- 클라이언트 & 서버가 동일한 키를 사용해 암호화/복호화를 진행한다.
- 키가 노출되면 매우 위험하지만 연산 속도가 빠르다.
공개키 (비대칭키) 암호화 방식
- 1개의 쌍으로 구성된 공개키-개인키를 암호화/복호화 하는 데 사용. 데이터를 암호화할 땐 공개키를, 데이터를 복호화할 땐 개인키를 이용한다.
- 공개키가 노출되어도 안전하다. 하지만 암호화 & 복호화에 CPU를 사용해야 하고 연산 속도가 상대적으로 느리다.
- *공개키: 모두에게 공개 가능한 키
- *개인키: 나만 가지고 알고 있어야 하는 키
*자세한 암호화 방식은 아래 참조 사이트를 추천합니다.
참고 사이트
SSL과 TLS: 차이점, 비교 등!
두 프로토콜 모두 인터넷을 통해 전송되는 데이터를 암호화하지만, SSL과 TLS에는 뚜렷한 차이가 있습니다.
powerdmarc.com
HTTP/HTTPS통신 암호화 과정(MITM란? PKI란? CA란?)
Intro 웹브라우저를 통해 웹서비스를 이용할 때 사용자는 HTTP/HTTPS 프로토콜로 데이터를 주고 받게 됩니다. HTTPS/HTTP 통신은 대칭암호화, 비대칭암호화 방식을 적절하게 혼합하여 데이터를 암호화
kim-dragon.tistory.com
'CS > Web' 카테고리의 다른 글
[Web] SEO에 대한 고찰 (1) | 2023.11.12 |
---|---|
[Web] Flux 디자인 패턴이란? (feat. MVC 아키텍처 패턴) (0) | 2023.10.12 |
CORS 에러란? (w. 해결방법) (0) | 2023.06.21 |
[Web] SSR, CSR, SSG의 특징 (0) | 2023.05.09 |