개요
송주영 아키텍트님이 올리신 http/https 차이에 대한 영상을 보고 갑자기 생각나서 작성해본다.
HTTP/S 차이?
HTTP → 웹에서 사용되는 사용자와 서버간의 통신 규약이다.
HTTPS → HTTP에 TLS라는 과정(레이어)를 추가한 방식의 통신 규약이다.
과정
HTTP
[과정]
1. DNS 조회: 도메인 이름을 IP 주소로 변환하기 위해 수행
2. TCP 연결: 3-Way HandShake가 동작
3. HTTP 요청: 클라이언트 → 서버로 요청 전송
4. HTTP 응답: 서버 → 클라이언트로 응답 반환
5. TCP 연결 종료: 4-way-handshake가 동작
3-way-handshake가 뭔가요?
- TCP연결을 수립할때 사용되는 절차이다.
그걸 왜하나요?
- TCP는 신뢰성 있는 전송을 보장하기 위해, 통신 전에 서로 연결 상태를 확인하고 시퀀스 번호를 동기화해야 하기 때문에 사용됨
[과정]
1. 클라이언트가 SYN와 seq = x를 보냄
2. 서버가 SYN과 seq = y, ACK(ACK = x + 1)값을 보냄
3. 클라이언트가 ACK(ACK = y + 1)값을 보내며 서로의 시퀀스 번호를 동기화하고 연결이 성립됨
엥? 4-way-handshake도 있네요?
- 이건 TCP가 연결을 종료할때 쓰이는 절차이다.
그건 또 왜 쓰나요?
- 데이터 송/수신을 양방향으로 독립적으로 종료해야하기 때문에 사용한다.
왜 4번이나 해야하죠? 연결은 3번이면 되는데?
- TCP는 양방향 통신이 독립적이기 때문에, 각 방향에서 종료 요청과 응답이 각각 필요하다.
[과정]
1. 클라이언트가 FIN, seq = u값을 보내며 종료를 선언함
2. 서버가 seq u에 대한 ACK(ACK = u + 1)를 보내며 종료에 대한 응답을 반환함
3. 서버가 FIN, seq = v를 보내며 종료를 선언함
4. 클라이언트가 서버에게 seq v에 대한 ACK(ACK = v +1)를 반환하며 양측 연결이 종료됨
HTTPS
[과정]
1. DNS 조회: 도메인 이름을 IP 주소로 변환하기 위해 수행
2. TCP 연결: 3-Way HandShake가 동작
3. TLS 핸드셰이크: HTTPS만의 추가 과정
4. HTTP 요청: 클라이언트 → 서버로 요청 전송
5. HTTP 응답: 서버 → 클라이언트로 응답 반환
6. TCP 연결 종료: 4-way-handshake가 동작
여기엔 TLS라는 추가과정이 들어간다.
[과정]
1. 클라이언트가 Client Hello → 지원 가능한 암호화 방식, 난수 등 보냄
2. 서버가 Server Hello + 인증서 + 공개키 → 서버는 자신의 인증서와 함께 공개키 전송
3.클라이언트가 서버 인증서 검증 → 루트 인증서를 기반으로 CA(인증기관)를 신뢰할 수 있는지 판단
4. 클라이언트가 Pre-Master Secret을 서버 공개키로 암호화해 보냄 → 이후 둘만 아는 대칭키 생성됨
5. 서로 "Finished" 메시지를 주고받고 → 이제부터는 모든 HTTP 요청/응답이 암호화된 채널 위에서 이루어짐
즉 HTTPS과정의 4,5가 전부 암호화 되어 진행된다는 의미이다.
6은 TCP레벨의 종료 절차이기 때문이다. (HTTP, HTTPS는 7계층이고 TCP는 4계층)
프로세스/쓰레드 차이
프로세스: 실행 중인 프로그램 하나를 의미함 = 집
쓰레드: 프로세스 내부에서 실행되는 작업 단위 = 가족 구성원
비유하면 아래와 같다.
각 집은 자원(메모리, 전기, 수도)을 각자 따로 씀 → 격리됨
가족은 하나의 집 안에서 가구를 공유하면서 각자 할 일을 함 → 효율적인 인원 배분이지만 한 명이 사고치면 집 전체에 영향
단일 프로세스/단일 쓰레드
→ 단일 스레드는 모든 로직을 하나의 흐름에서 순차적으로 처리하기 때문에 구조가 단순하고 동기화 문제도 없다.
하지만 CPU 코어를 하나만 사용하므로 속도가 느릴 수 있고, 스레드가 죽으면 프로세스 전체가 종료되기에 조심해야한다.
단일 프로세스/멀티쓰레드
→ 여러 스레드가 같은 프로세스 내 자원을 공유하면서 동시에 작업을 처리하므로 응답성이 빨라지고 자원 사용 효율도 높아질 '수'도 있다.
하지만 스레드 간 동기화가 어렵고, 하나의 스레드가 잘못된 메모리 접근을 할 경우 전체 프로세스에 영향을 줄 수 있다.
(예: 경쟁 조건, 데드락, 메모리 충돌 등)
---
결론
CS지식은 다양한 분야 (OS, Program등)에서 많이 사용된다.
이는 구체적인걸 알지 못해도 알고 있으면 트러블 슛팅에서 큰 도움을 얻을 수 있고, 새로운 분야를 공부할때 이해하기도 참 쉽다.
나도 까먹었던 TLS과정을 다시 한번 복기하여 아주 뜻 깊은 블로그 시간이였다.