DevOps

【기초 CS지식 파기 1편】 부제: HTTP/S 차이와 프로세스/쓰레드의 차이

흑당망고 2025. 7. 23. 07:24

개요

송주영 아키텍트님이 올리신 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과정을 다시 한번 복기하여 아주 뜻 깊은 블로그 시간이였다.