[Node.js / Express 5] 서버와 네트워크 기초
서버란 무엇인가
서버는 클라이언트의 요청에 적절한 응답을 반환하는 주체다.
- 클라이언트: 서버로부터 서비스를 요청하는 주체 (웹 브라우저, 앱 등)
- 서버: 클라이언트의 요청을 받아 처리하고 응답을 돌려주는 주체
브라우저에서 URL을 입력하는 순간부터 화면이 뜰 때까지의 흐름은 대략 이렇다.
인터넷과 인터넷 구성
인터넷은 데이터를 전달하는 장치들이 이루는 거대한 네트워크 망이다. 크게 세 영역으로 나뉜다.
| 구성 요소 | 역할 | 예시 |
|---|---|---|
| Network Edge | 데이터를 생성하거나 수신하는 끝단 (End System) | 브라우저, 스마트폰, 서버 애플리케이션 |
| Access Network | End System을 인터넷에 연결하는 구간 | 랜선, 와이파이, 셀룰러 기지국 |
| Network Core | 패킷을 최적 경로로 전달하는 핵심부 | 라우터, 스위치 |
End System → Access Network → Network Core → Access Network → End System
(클라이언트) (라우터들) (서버)핵심 키워드 정리
IP (Internet Protocol)
IP는 Network Layer에서 작동하며, 인터넷상에서 유일하게 상대를 식별하는 주소다.
- IPv4:
192.168.0.1(32bit) - IPv6:
2001:db8::1(128bit, IPv4 주소 고갈 대응)
클라이언트가 패킷 생성
→ IP 주소를 담아 Access Network로 전송
→ Network Core의 라우터가 IP를 보고 경로 설정
→ 목적지 서버의 Network Layer에서 자신의 IP인지 확인
→ 일치하면 Transport Layer로 전달PORT
PORT는 같은 IP 내에서 프로세스를 구분하는 번호다. 범위는 0~65535.
하나의 서버에서 여러 프로그램이 실행될 때, 어느 프로그램으로 데이터를 보낼지 PORT로 구분한다.
| 포트 | 프로토콜 |
|---|---|
80 | HTTP |
443 | HTTPS |
3306 | MySQL |
5432 | PostgreSQL |
3000 | Node.js 개발 서버 (관례) |
https://example.com:443에서example.com은 도메인,443은 PORT다. HTTPS의 기본 포트가 443이므로 보통은 생략한다.
CIDR (Classless Inter-Domain Routing)
CIDR은 IP 주소를 범위(블록)로 표현하는 방식이다. 192.168.1.0/24에서 /24는 앞의 24비트가 네트워크 부분이고, 나머지 8비트(2⁸=256개)가 호스트 부분임을 뜻한다.
| CIDR | 사용 가능 IP 수 | 범위 예시 |
|---|---|---|
/32 | 1개 | 특정 단일 IP |
/24 | 256개 | 192.168.1.0 ~ 192.168.1.255 |
/16 | 65,536개 | 192.168.0.0 ~ 192.168.255.255 |
/8 | 16,777,216개 | 192.0.0.0 ~ 192.255.255.255 |
AWS VPC, 보안 그룹 설정에서 자주 마주치는 표기법이다.
TCP (Transmission Control Protocol)
TCP는 Transport Layer에서 작동하는 연결 보증 프로토콜이다. IP만으로는 해결하지 못하는 세 가지 문제를 해결한다.
1. 연결 확인 — 3-way Handshake
TCP 3-way Handshake
Web Server + WAS 아키텍처
2. 데이터 전달 보증
데이터를 받으면 ACK를 돌려보낸다. ACK가 오지 않으면 소실로 판단하고 재전송한다.
3. 순서 보장
패킷마다 Sequence Number를 붙여 전송한다. 순서가 잘못 도착하면 재전송을 요청한다.
UDP (User Datagram Protocol)
UDP는 IP에 PORT와 체크섬만 추가한 프로토콜이다. 신뢰성 기능이 없는 대신 빠르다.
| 항목 | TCP | UDP |
|---|---|---|
| 연결 방식 | 연결 지향 (3-way handshake) | 비연결 |
| 데이터 전달 보증 | O | X |
| 순서 보장 | O | X |
| 속도 | 상대적으로 느림 | 빠름 |
| 신뢰성 | 높음 | 낮음 |
| 사용 예시 | HTTP, 파일 전송 | 스트리밍, 게임, DNS |
HTTP vs HTTPS
| 항목 | HTTP | HTTPS |
|---|---|---|
| 포트 | 80 | 443 |
| 암호화 | X | O (TLS/SSL) |
| 보안 | 취약 (패킷 도청 가능) | 안전 (암호화 전송) |
| 인증서 | 불필요 | SSL/TLS 인증서 필요 |
| 속도 | 빠름 | 약간 느림 (암호화 오버헤드) |
HTTPS는 TLS 프로토콜로 데이터를 암호화한다. 서버 인증서로 신뢰할 수 있는 서버임을 증명한 뒤 암호화된 통신을 수행한다.
Web Server와 WAS
- 정적 리소스 처리 (HTML, CSS, 이미지)
- 이미 만들어진 파일을 그대로 반환
- 대표: Apache, Nginx
- 동적 리소스 처리 (DB 조회, 비즈니스 로직)
- 사용자마다 다른 응답 생성
- 대표: Tomcat, Node.js
WAS는 Web Server 기능도 포함되어 있어 정적 리소스도 처리할 수 있다. 그럼에도 둘을 함께 쓰는 이유가 있다.
- 비용 효율: WAS는 부하가 많다. 정적 요청이 많을 때 Web Server만 추가로 늘리면 절약된다.
- 장애 처리: WAS 장애 시 Web Server가 에러 페이지를 대신 보여줄 수 있다.
- 보안: Web Server에서 SSL 종료, 요청 필터링을 담당하고, Reverse Proxy로 WAS의 IP를 숨긴다.
실제 서비스 아키텍처에서는 이런 구조를 자주 본다.
Node.js는 JavaScript 런타임으로 WAS 역할을 직접 수행한다. 실제 서비스에서는 Node.js 앞에 Nginx를 두는 구성이 일반적이다.
클라이언트-서버 전체 통신 흐름
브라우저에서 https://example.com에 접속할 때 내부에서 일어나는 일을 순서대로 정리하면 이렇다.
TCP/IP 계층 구조
네트워크 통신은 계층으로 나뉜다. TCP/IP 모델은 OSI 7계층을 실용적으로 단순화한 5계층 모델이다.
Node.js로 작성하는 Express 코드는 Application Layer에 위치한다. Transport Layer 아래는 OS와 네트워크 장비가 담당하므로 직접 신경 쓸 일은 없다. 하지만 포트 충돌, 연결 타임아웃, SSL 인증서 같은 문제를 만날 때 이 구조를 알고 있으면 어디를 봐야 하는지 감이 잡힌다.
자가 점검
아래 질문에 답할 수 있으면 이 글의 내용은 이해한 것이다.
10.0.0.0/24가 나타내는 IP 범위를 설명해보라.
▼