※ 스트림 (stream) : 시간이 지남에 따라 사용할 수 있게 되는
일련의 데이터 요소를 가리키는 데이터 흐름
※ 개인키 : 비밀키라고도 하며,
개인이 소유하고 있는 키이자 반드시 자신만이 소유해야 하는 키
※ 공개키 : 공개되어 있는 키
※ 해시 : 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값
※ 해싱 : 임의의 데이터를 해시로 바꿔주는 일이며, 해시 함수가 이를 담당
※ 해시 함수 : 임의의 데이터를 입력으로 받아 일정한 길의의 데이터로 바꿔주는 함수
HTTP 프로토콜이란?
HTTP(Hyper Text Transfer Protocol)이란, 데이터를 주고받기 위한 프로토콜이며
서버/클라이언트 모델을 따른다.
HTTP는 상태 정보를 저장하지 않는 Stateless의 특징과
클라이언트의 요청에 맞는 응답을 보낸 후 연결을 끊는 Connectionless의 특징을 가진다.
장점
- 통신 간의 연결 상태 처리나 상태 정보를 관리할 필요가 없어 서버 디자인이 간단하다.
- 각각의 HTTP 요청에 독립적으로 응답만 보내주면 OK
단점
- 이전 통신의 정보를 모르기 때문에 매번 인증을 해줘야 한다.
- 이를 해결하기 위해 쿠키(cookie)나 세선(session)을 사용해서 데이터를 처리한다.
HTTP와 HTTPS
HTTP (HyperText Transfer Protocol)
인터넷 상에서 클라이언트와 서버가 자원을 주고받을 때 쓰는 통신 규약
HTTP의 구조
HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다.
HTTP는 상태를 가지고 있지 않은 Stateless 프로토콜이며
Method, Path, Version, Headers, Body 등으로 구성된다.
🚨 HTTP는 텍스트 교환(암호화가 되지 않은 평문 데이터를 전송하는 프로토콜)이므로,
누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다.
→ 이런 보안 문제를 해결해주는 프로토콜이 'HTTPS'
HTTPS (HyperText Transfer Protocol Secure)
인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해
클라이언트와 서버가 자원을 주고받을 때 쓰는 통신 규약.
즉, HTTPS는 SSL의 껍질을 덮어쓴 HTTP라고 할 수 있다.
(HTTP에 데이터 암호화가 추가된 프로토콜)
※ SSL(Secure Socket Layer) : 인터넷을 통해 전달되는 정보를 보호하기 위해 개발한 통신 규약
HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고
SSL이 TCP와 통신함으로써 암호화와 증명서, 안전성 보호를 이용할 수 있게 된다.
✔️ 대칭키 암호화와 비대칭키 암호화
HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식을 모두 사용한다.
💡 대칭키 암호화
- 암호화와 복호화에 사용되는 키가 동일함
- 해당 키를 아는 사람만이 문서를 복호화해 볼 수 있음
- 장점
- 공개키 암호화 방식에 비해 속도가 빠르다.
- 단점
- 키를 교환해야 한다는 문제가 있다.
- 키를 교환하는 도중 중간자가 도청해 키를 복호화 할 수 있다.
- 키를 교환해야 한다는 문제가 있다.
💡 공개키(비대칭키) 암호화
- 대칭키의 키교환 문제를 해결하기 위해 등장한 방법이다.
- 모든 사람은 각자의 공개키와 개인키를 가지고 있다.
- 공개키는 모든 사용자가 접근 가능한 키이고,
- 개인키는 본인만이 접근 가능한 키이다.
- A는 B의 공개키로 암호화하고, B는 자신의 개인키로 복호화한다.
- 개인키를 가지고 있는 수신자만이 암호화된 데이터를 복호화할 수 있으므로, 일종의 인증기능 제공.
- 장점
- 키 교환을 할 필요가 없어짐
- 단점
- 대칭키 암호화 방법에 비해 시간이 오래 걸림
비대칭키 암호화는 공개키 / 개인키 암호화 방식을 이용해 데이터를 암호화한다.
공개키와 개인키는 서로를 위한 1쌍의 키이다.
- 공개키 : 모두에게 공개 가능한 키
- 개인키 : 나만 가지고 알고 있어야 하는 키
요약 정리
[HTTP와 HTTPS]
HTTP는 암호화가 추가되지 않았기 때문에 보안에 취약한 반면,
HTTPS는 안전하게 데이터를 주고받을 수 있다.
하지만 HTTPS를 이용하면 암호화 / 복호화의 과정이 필요하기 때문에
HTTP보다 속도가 느리다.
또한 HTTPS는 인증서를 발급하고 유지하기 위한 추가 비용이 발생한다.
그렇다면 언제 HTTP를 쓰고, 언제 HTTPS를 쓰는 것이 좋을까?
→ 개인 정보와 같은 민감한 데이터를 주고받아야 한다면 HTTPS를 이용해야 하지만,
노출이 되어도 괜찮은 단순한 정보 조회 등 만을 처리하고 있다면 HTTP를 이용하면 된다.
www.naver.com에 에 접속할 때 생기는 과정
웹 동작 방식 이해
1. 사용자가 브라우저에 URL(www.naver.com)을 입력
2. DNS 서버에 도메인 네임으로 서버의 진짜 주소를 찾음
3. IP 주소로 웹 서버에 TCP 3 handshake로 연결 수립
4. 클라이언트는 웹 서버로 HTTP 요청 메시지 보냄
5. 웹 서버는 HTTP 응답 메시지를 보냄
6. 도착한 HTTP 응답 메시지는 웹 페이지 데이터로 변환되고, 웹 브라우저에 의해 출력
출처
- https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/HTTP%20%26%20HTTPS.md
- https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network#http%EC%99%80-https
- https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network#http%EC%9D%98-get%EA%B3%BC-post-%EB%B9%84%EA%B5%90
- https://mangkyu.tistory.com/98
- https://dev-coco.tistory.com/161
'CS > Network' 카테고리의 다른 글
TCP/IP 흐름제어 & 혼잡제어, TCP의 신뢰성 보장 (0) | 2023.02.12 |
---|---|
[Network] HTTP의 GET과 POST 비교 (0) | 2023.01.18 |
[Network] 네트워크 기기 & IP 주소 (0) | 2023.01.16 |
[Network] 네트워크의 기초 & TCP/IP 4계층 모델 (0) | 2023.01.16 |
[Network] TCP와 UDP (0) | 2023.01.15 |