프로젝트에 들어가기 전 서버 연결 및 통신 방식에 대해 공부할 기회가 생겨 해당 부분에 대해 정리하게 되었다.
한번쯤은 다 들어봤던 단어들이지만, 이번 기회에 제대로 그 역할과 순서에 대해 잡고 가고자 한다.
전체 흐름도
[사용자 클릭]
↓
[HTTP / WebSocket 선택] : 통신 프로토콜 계층
↓
[TCP 3-way handshake]
↓
┌──────────────┬──────────────┐
│ HTTP │ WebSocket │
│ 요청→응답 │ 연결 유지 │
│ 바로 종료 │ 메시지 주고받음│
└──────────────┴──────────────┘
↓
[서버 스레드풀 / 이벤트루프] : 서버 런타임 모델
↓
[응답 or 메시지]
통신 프로토콜 계층
통신 방식 계층에서는 어떻게 데이터를 주고 받을지를 고민하는 계층이다.
케이스1: 사용자가 행동해야만 데이터가 바뀜
사용자가 클릭을 하는 등의 행동을 통해 화면/데이터가 변하는 경우, 혹은 사용자가 어떠한 행동을 하지 않았을 때 보여지는 데이터가 변함이 없어도 되는 경우
처음 1번 데이터를 전달하는 걸로 충분하다. 한 번 요청 -> 한 번 응답으로 연결을 계속 유지할 필요가 없기에, HTTP가 제일 적합하다.
예: 상품 목록 조회, 로그인, 게시글 상세 보기
케이스2: 사용자가 가만히 있어도 데이터가 바뀜
사용자가 어떤 행동을 하지 않아도 데이터의 변동이 생길 때마다 즉각적으로 화면갱신이 필요한 경우
이럴 땐 실시간으로 계속 변경해야하므로, WebSocket을 추천한다.
예: 채팅 메시지 도착, 알림 푸시, 게임 상태 변경
서버 런타임 모델
서버로 들어온 일을 어떻게 처리할지 고민하는 계층이다.
스레드가 필요한 이유
여러 요청을 동시에 처리하기 위해
전통적인 서버 모델 Spring, Tomcat
특징
멀티스레드, 코드 이해 쉬움.
단점
스레드 = 메모리. 웹소켓 연결 많으면 부담이 큼.
만약 감당할 수 있는 양 이상으로 데이터가 들어올경우 나머지는 대기가 아닌 아예 버려진다. loss 발생.
그래서 등장한 이벤트 기반 모델
이벤트 기반 모델 Node.js, Vert.x
Vert.x의 경우
이벤트 루프(싱글 스레드) 이벤트 버스(멀티)
이벤트 버스는 "비동기 작업 분산기"
메시지를 큐에 넣고
처리 가능한 스레드에 전달.
총 정리
HTTP와 WebSocket은 데이터 전달 규칙을 정의하는 통신 방식이고,
스레드풀이나 이벤트 루프는 서버가 동시에 들어오는 작업을 처리하는 실행 모델이다.
전통적인 서버(Spring, Tomcat)는 스레드풀 기반의 멀티스레드 모델을 사용하고,
Node.js나 Vert.x는 이벤트 루프 기반의 비동기 모델을 사용해
대규모 동시 연결을 효율적으로 처리한다.
우선 대강 이렇게 정리해보았는데,
추가적으로 네트워크에 대해 보다 체계적으로 공부할 필요성을 느끼게 되었다.
보다 알맞은 서버 환경을 선택하고 작업 환경에 맞춰 설계해야하기 때문이다.
'CS & Math > Computer Science' 카테고리의 다른 글
| RSA 암호화 (3) | 2025.07.24 |
|---|---|
| HTTP HTTPS 보안정책 (1) | 2025.07.11 |
| 보수, signed unsigned (1) | 2025.06.13 |
| IP, Domain, DNS (0) | 2025.05.09 |