Study/Node.JS

[Node.js / Express 5] 서버와 네트워크 기초

the.Dev.Cat 2026. 3. 25. 12:13
서버와 네트워크 기초

서버란 무엇인가

서버는 클라이언트의 요청에 적절한 응답을 반환하는 주체다.

  • 클라이언트: 서버로부터 서비스를 요청하는 주체 (웹 브라우저, 앱 등)
  • 서버: 클라이언트의 요청을 받아 처리하고 응답을 돌려주는 주체

브라우저에서 URL을 입력하는 순간부터 화면이 뜰 때까지의 흐름은 대략 이렇다.

Client Browser DNS IP 변환 TCP 연결 Handshake HTTP 요청 GET / POST Server 응답

인터넷과 인터넷 구성

인터넷은 데이터를 전달하는 장치들이 이루는 거대한 네트워크 망이다. 크게 세 영역으로 나뉜다.

구성 요소역할예시
Network Edge데이터를 생성하거나 수신하는 끝단 (End System)브라우저, 스마트폰, 서버 애플리케이션
Access NetworkEnd 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로 구분한다.

포트프로토콜
80HTTP
443HTTPS
3306MySQL
5432PostgreSQL
3000Node.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 수범위 예시
/321개특정 단일 IP
/24256개192.168.1.0 ~ 192.168.1.255
/1665,536개192.168.0.0 ~ 192.168.255.255
/816,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
Client Server SYN SYN + ACK ACK 연결 수립 완료
Web Server + WAS 아키텍처
Client (Browser) Web Server (Nginx) 정적 파일 · SSL 종료 WAS (Node.js) 비즈니스 로직 · 동적 응답 Database (MySQL)

2. 데이터 전달 보증

데이터를 받으면 ACK를 돌려보낸다. ACK가 오지 않으면 소실로 판단하고 재전송한다.

3. 순서 보장

패킷마다 Sequence Number를 붙여 전송한다. 순서가 잘못 도착하면 재전송을 요청한다.

UDP (User Datagram Protocol)

UDP는 IP에 PORT와 체크섬만 추가한 프로토콜이다. 신뢰성 기능이 없는 대신 빠르다.

항목TCPUDP
연결 방식연결 지향 (3-way handshake)비연결
데이터 전달 보증OX
순서 보장OX
속도상대적으로 느림빠름
신뢰성높음낮음
사용 예시HTTP, 파일 전송스트리밍, 게임, DNS

HTTP vs HTTPS

항목HTTPHTTPS
포트80443
암호화XO (TLS/SSL)
보안취약 (패킷 도청 가능)안전 (암호화 전송)
인증서불필요SSL/TLS 인증서 필요
속도빠름약간 느림 (암호화 오버헤드)

HTTPS는 TLS 프로토콜로 데이터를 암호화한다. 서버 인증서로 신뢰할 수 있는 서버임을 증명한 뒤 암호화된 통신을 수행한다.


Web Server와 WAS

Web Server 정적
  • 정적 리소스 처리 (HTML, CSS, 이미지)
  • 이미 만들어진 파일을 그대로 반환
  • 대표: Apache, Nginx
WAS 동적
  • 동적 리소스 처리 (DB 조회, 비즈니스 로직)
  • 사용자마다 다른 응답 생성
  • 대표: Tomcat, Node.js

WAS는 Web Server 기능도 포함되어 있어 정적 리소스도 처리할 수 있다. 그럼에도 둘을 함께 쓰는 이유가 있다.

  • 비용 효율: WAS는 부하가 많다. 정적 요청이 많을 때 Web Server만 추가로 늘리면 절약된다.
  • 장애 처리: WAS 장애 시 Web Server가 에러 페이지를 대신 보여줄 수 있다.
  • 보안: Web Server에서 SSL 종료, 요청 필터링을 담당하고, Reverse Proxy로 WAS의 IP를 숨긴다.

실제 서비스 아키텍처에서는 이런 구조를 자주 본다.

클라이언트 (브라우저)
Web Server (Nginx)
정적 파일 직접 처리 · SSL 종료 · 보안
↓ 동적 요청만 전달
WAS (Node.js)
비즈니스 로직 · DB 쿼리 · 동적 응답 생성
Database (MySQL)

Node.js는 JavaScript 런타임으로 WAS 역할을 직접 수행한다. 실제 서비스에서는 Node.js 앞에 Nginx를 두는 구성이 일반적이다.


클라이언트-서버 전체 통신 흐름

브라우저에서 https://example.com에 접속할 때 내부에서 일어나는 일을 순서대로 정리하면 이렇다.

1
DNS 조회
브라우저 → DNS 서버: "example.com의 IP는?" → "93.184.216.34"
2
TCP 3-way Handshake
클라이언트 --SYN→ 서버 / 클라이언트 ←SYN+ACK-- 서버 / 클라이언트 --ACK→ 서버
3
TLS Handshake
HTTPS라면 암호화 채널 수립 (인증서 교환 → 세션 키 생성)
4
HTTP 요청 전송
패킷 구성: 목적지 IP + PORT + HTTP 메서드 + URL
5
Network Core 통과
Access Network → 라우터들이 IP를 보고 경로 설정 → 서버 도착
6
서버에서 계층별 처리
Physical → Data Link → Network Layer(IP 확인) → Transport Layer(PORT 확인) → WAS
7
HTTP 응답 전송
상태 코드(200 등) + HTML/JSON 데이터를 역방향으로 전송
8
브라우저 렌더링
HTML 파싱 → CSS 적용 → JavaScript 실행 → 화면 표시

TCP/IP 계층 구조

네트워크 통신은 계층으로 나뉜다. TCP/IP 모델은 OSI 7계층을 실용적으로 단순화한 5계층 모델이다.

Application Layer
HTTP, HTTPS, FTP, DNS, SMTP 등 애플리케이션 프로토콜
Transport Layer
TCP, UDP · PORT 번호로 프로세스 구분
Network Layer
IP · IP 주소로 목적지 식별 및 라우팅
Data Link Layer
Ethernet, Wi-Fi · MAC 주소 기반 로컬 네트워크 통신
Physical Layer
전기신호, 광신호, 무선 신호 전송

Node.js로 작성하는 Express 코드는 Application Layer에 위치한다. Transport Layer 아래는 OS와 네트워크 장비가 담당하므로 직접 신경 쓸 일은 없다. 하지만 포트 충돌, 연결 타임아웃, SSL 인증서 같은 문제를 만날 때 이 구조를 알고 있으면 어디를 봐야 하는지 감이 잡힌다.


자가 점검

아래 질문에 답할 수 있으면 이 글의 내용은 이해한 것이다.

Q1클라이언트가 서버에 요청을 보낼 때, IP와 PORT는 각각 어떤 역할을 하는가?
IP는 인터넷상에서 목적지 서버를 식별하는 주소고, PORT는 그 서버 내에서 어느 프로세스(프로그램)로 전달할지 구분하는 번호다.
Q2TCP 3-way handshake의 3단계를 순서대로 설명해보라.
1) SYN: 클라이언트가 서버에 연결 요청 / 2) SYN+ACK: 서버가 응답하며 자신도 연결 가능한지 물음 / 3) ACK: 클라이언트가 수신 확인 → 연결 수립
Q3TCP가 UDP보다 신뢰성이 높은 이유 3가지를 설명해보라.
1) 연결 확인 (3-way handshake) / 2) 데이터 전달 보증 (ACK 없으면 재전송) / 3) 순서 보장 (Sequence Number로 순서가 틀리면 재요청)
Q4Web Server와 WAS의 차이점은 무엇인가?
Web Server는 HTML, CSS, 이미지 같은 정적 리소스를 처리하고(Nginx, Apache), WAS는 DB 조회와 비즈니스 로직을 실행하여 동적 응답을 생성한다(Node.js, Tomcat).
Q5실제 서비스에서 Web Server(Nginx)와 WAS를 함께 쓰는 이유 2가지를 말해보라.
1) 비용 효율: 정적 요청은 Web Server가 처리해 WAS 부하를 줄임 / 2) 보안: Web Server에서 SSL 종료 및 요청 필터링, Reverse Proxy로 WAS IP를 숨김
Q6HTTPS가 HTTP보다 안전한 이유는 무엇인가?
TLS/SSL 프로토콜로 데이터를 암호화하여 전송하기 때문에 패킷을 도청해도 내용을 볼 수 없다. 서버 인증서로 신뢰할 수 있는 서버인지도 확인한다.
Q7CIDR 표기법 10.0.0.0/24가 나타내는 IP 범위를 설명해보라.
앞의 24비트가 네트워크 주소 고정, 나머지 8비트(2⁸=256개)가 호스트 범위다. 즉 10.0.0.0 ~ 10.0.0.255 사이의 256개 IP 주소를 나타낸다.