icon

안동민 개발노트

1장 : 네트워크 기초와 인터넷

네트워크란 무엇인가


개발을 시작하면 API를 호출하고, 서버에 배포하고, 브라우저에서 결과를 확인합니다.

그런데 이 모든 과정의 뒤편에는 네트워크라는 보이지 않는 인프라가 동작하고 있습니다.

네트워크를 모르고 개발하는 것은, 도로 체계를 모르고 물류 사업을 운영하는 것과 비슷합니다. 보통 때는 괜찮지만 문제가 생기면 어디서부터 추적해야 할지조차 감이 잡히지 않습니다.

이 절에서는 네트워크가 정확히 무엇인지, 어떤 구성 요소로 이루어져 있는지, 그리고 왜 개발자도 반드시 이 개념을 이해해야 하는지를 살펴봅니다.


네트워크의 정의와 목적

네트워크(Network)란 둘 이상의 장치가 데이터를 주고받기 위해 연결된 시스템을 말합니다. 여기서 말하는 장치란 컴퓨터, 서버, 스마트폰, IoT 기기 등 통신이 가능한 모든 것을 포함합니다.

네트워크가 존재하는 이유는 단순합니다. 혼자서는 할 수 없는 일을 연결을 통해 가능하게 만드는 것입니다.

구체적으로 세 가지 핵심 목적이 있습니다.

  • 자원 공유: 프린터, 파일 서버, 데이터베이스 등을 여러 사용자가 함께 사용합니다. 모든 사람이 각자의 프린터를 가질 필요가 없어지는 셈입니다.

  • 통신: 이메일, 메신저, 영상 통화 등 사람과 사람 사이의 소통을 가능하게 합니다. 지구 반대편에 있는 동료와 실시간으로 협업할 수 있는 것도 네트워크 덕분입니다.

  • 분산 처리: 하나의 작업을 여러 컴퓨터에 나누어 처리합니다. 빅데이터 분석, 머신러닝 학습처럼 하나의 컴퓨터로는 감당이 어려운 작업을 가능하게 만듭니다.

네트워크가 없었다면 모든 데이터는 USB 같은 물리적 매체로만 이동할 수 있었을 것입니다. 지금처럼 실시간 스트리밍, 클라우드 컴퓨팅, 글로벌 서비스가 가능한 이유는 전적으로 네트워크 기술 덕분입니다.


노드와 링크

네트워크를 구성하는 가장 기본적인 요소는 노드(Node)링크(Link)입니다. 마치 지도 위의 도시와 도로처럼, 이 두 가지만으로도 네트워크의 구조를 설명할 수 있습니다.

노드는 네트워크에 연결된 장치를 의미합니다. 여러분의 랩톱, 회사의 서버, 중간에서 데이터를 전달하는 라우터와 스위치 — 이 모든 것이 노드입니다.

링크는 노드와 노드를 연결하는 통신 경로입니다. 이더넷 케이블이나 광섬유 같은 유선 매체가 될 수도 있고, Wi-Fi나 블루투스처럼 눈에 보이지 않는 무선 전파가 될 수도 있습니다.

[PC] ──── 유선 ──── [스위치] ──── 유선 ──── [서버]

[폰] ···· Wi-Fi ···· [AP]

모든 네트워크는 결국 이 노드와 링크의 조합으로 이루어집니다. 인터넷이라는 거대한 시스템도 수억 개의 노드와 링크가 그물처럼 얽혀 있는 것뿐입니다.

네트워크 장비의 종류

각 노드는 역할에 따라 이름이 다릅니다.

장비계층역할
허브(Hub)물리받은 신호를 모든 포트에 복제 (무차별)
스위치(Switch)데이터 링크MAC 주소를 보고 해당 포트에만 전달
라우터(Router)네트워크IP 주소를 보고 최적 경로로 전달
방화벽(Firewall)다양보안 규칙에 따라 패킷 필터링
로드 밸런서응용/전송트래픽을 여러 서버로 분산
AP(Access Point)물리/데이터 링크무선 신호 ↔ 유선 변환

허브는 현재 거의 사용되지 않습니다. 모든 포트에 신호를 복제하므로 대역폭 낭비가 심하고 보안 위험(스니핑)이 있습니다. 스위치가 그 역할을 완전히 대체했습니다.


LAN, WAN, MAN 분류

네트워크는 커버하는 물리적 범위에 따라 분류합니다.

LAN(Local Area Network)은 건물 하나나 사무실 내부처럼 좁은 범위를 다루는 네트워크입니다. 회사의 사내망이나 가정에서 공유기에 연결된 기기들이 바로 LAN을 구성합니다. 물리적 거리가 짧기 때문에 속도가 빠르고(1~10Gbps), 관리하기도 비교적 쉽습니다.

MAN(Metropolitan Area Network)은 도시 규모의 네트워크입니다. 여러 LAN을 묶어 같은 도시 안에서 통신할 수 있게 합니다. 대학의 여러 캠퍼스를 연결하거나, 도시의 공공 Wi-Fi 네트워크가 MAN에 해당합니다.

WAN(Wide Area Network)은 국가나 대륙 단위의 광범위한 네트워크입니다. 인터넷이 가장 대표적인 WAN이죠. ISP가 제공하는 회선을 통해 전 세계의 LAN을 연결합니다.

분류범위대표 속도예시
PAN개인 (수 m)~3Mbps블루투스 이어폰
LAN건물 (~1km)1~10Gbps사무실, 가정
MAN도시 (~50km)100Mbps~1Gbps캠퍼스 네트워크
WAN국가/대륙가변인터넷
network_classifier.py
def classify_network(distance_km):
    """거리 기반 네트워크 분류"""
    if distance_km < 0.01:
        return "PAN (Personal Area Network)"
    elif distance_km < 1:
        return "LAN (Local Area Network)"
    elif distance_km < 50:
        return "MAN (Metropolitan Area Network)"
    else:
        return "WAN (Wide Area Network)"

cases = [0.005, 0.1, 30, 5000]
for d in cases:
    print(f"{d}km → {classify_network(d)}")

네트워크 토폴로지

토폴로지(Topology)는 노드와 링크가 물리적·논리적으로 어떤 형태로 연결되어 있는지를 뜻합니다.

버스(Bus)           스타(Star)          링(Ring)
──┬──┬──┬──        ┌──[B]           [A]──[B]
  A  B  C          │                 │    │
                [A]─[Hub]─[C]       [D]──[C]

                  [D]

메시(Mesh)          트리(Tree)
[A]───[B]          [Root]
│ \  / │          / │ \
│  \/  │       [A] [B] [C]
│  /\  │        │       │
│ /  \ │       [D]     [E]
[C]───[D]
토폴로지장점단점실무 사용
버스구축 저렴한 곳 끊기면 전체 영향과거 이더넷
스타관리 용이, 장애 격리중앙 장비 고장 시 전체 마비현재 LAN의 표준
충돌 없음한 곳 끊기면 전체 영향토큰 링 (과거)
메시높은 내결함성비용 높음인터넷 백본, 데이터센터
트리계층적 확장 용이루트 장애 시 하위 영향대규모 기업 네트워크

현재 대부분의 LAN은 스타 토폴로지를 사용합니다. 중앙 스위치에 모든 장비가 연결되어 관리가 편하고, 한 케이블이 끊어져도 다른 장비에 영향이 없습니다. 인터넷 백본은 메시 토폴로지에 가까워서, 어떤 경로가 끊어져도 우회 경로가 존재합니다.


클라이언트-서버 모델 vs P2P 모델

네트워크에 연결된 장치들이 데이터를 주고받는 방식, 즉 통신 구조는 크게 두 가지 모델로 나뉩니다.

클라이언트-서버 모델(Client-Server Model)에서는 역할이 명확하게 나뉩니다. 서비스를 제공하는 쪽이 서버이고, 서비스를 요청하는 쪽이 클라이언트입니다.

┌────────────┐     요청 (Request)   ┌───────────┐
│ 클라이언트 │ ──────────────────→  │   서버    │
│ (브라우저) │ ←──────────────────  │  (Nginx)  │
└────────────┘     응답 (Response)  └───────────┘

웹 브라우저가 웹 서버에 페이지를 요청하는 것이 가장 전형적인 예입니다. 서버가 중앙에서 데이터를 관리하기 때문에 보안과 관리가 용이하지만, 서버에 장애가 나면 모든 클라이언트가 영향을 받습니다.

P2P 모델(Peer-to-Peer)에서는 모든 참여자가 서버이자 클라이언트 역할을 동시에 수행합니다.

[Peer A] ←──→ [Peer B]
   ↕              ↕
[Peer D] ←──→ [Peer C]

토렌트(BitTorrent)가 대표적입니다. 파일을 다운로드하면서 동시에 다른 사용자에게 업로드합니다. 블록체인도 P2P 모델의 변형입니다.

비교클라이언트-서버P2P
관리중앙 집중분산
확장성서버 용량에 제한참여자 증가 = 용량 증가
장애 내성서버 장애 = 서비스 중단일부 노드 장애에 강함
보안통제 용이통제 어려움
예시웹, API, DB토렌트, 블록체인, WebRTC

실무에서는 대부분 클라이언트-서버 모델을 기반으로 시스템을 설계합니다. 하지만 WebRTC를 이용한 실시간 화상 통화나, 분산 시스템의 일부 컴포넌트에서는 P2P적 요소를 채택하기도 합니다.


개발자가 네트워크를 알아야 하는 이유

프레임워크가 다 해주는데 네트워크를 왜 알아야 하나요?라는 질문은 자연스러운 의문입니다.

실제로 대부분의 프레임워크는 네트워크의 복잡성을 매우 잘 숨겨줍니다. fetch()를 호출하면 응답이 돌아오고, Next.js에서 API 라우트를 만들면 서버가 알아서 동작합니다.

하지만 네트워크 지식이 반드시 필요한 순간은 문제가 발생했을 때 찾아옵니다.

증상가능한 네트워크 원인
API 간헐적 타임아웃TCP 재전송, 혼잡, MTU 문제
특정 지역 접속 불가DNS 문제, 라우팅, 방화벽
Docker 컨테이너 간 통신 끊김브리지 네트워크, iptables
CORS 에러HTTP 헤더, 프록시 설정
HTTPS 인증서 만료TLS 설정, 인증서 관리
WebSocket 연결 끊김프록시 타임아웃, Keep-Alive

이런 상황에서 네트워크 기초가 없으면 문제의 원인이 어느 계층에 있는지조차 판단할 수 없습니다. 코드를 아무리 뒤져도 답이 나오지 않는 이유는, 문제가 코드 밖 — 네트워크 레벨에 있기 때문입니다.

network_debug.sh
# 1. DNS 확인 — 도메인이 IP로 변환되는가?
nslookup api.example.com

# 2. 연결 확인 — 서버까지 도달하는가?
ping -c 4 api.example.com

# 3. 포트 확인 — 서비스가 열려있는가?
nc -zv api.example.com 443

# 4. 경로 확인 — 어디서 느려지는가?
traceroute api.example.com

# 5. HTTP 확인 — 응답이 올바른가?
curl -v https://api.example.com/health

네트워크를 이해하면 이런 문제를 계층별로 분리해서 체계적으로 진단할 수 있게 됩니다. DNS 문제인가, TCP 연결 문제인가, HTTP 헤더 문제인가?를 구분하는 것만으로도 해결 속도가 근본적으로 달라집니다.

이 교재 전체를 관통하는 목표가 바로 이것입니다. 네트워크 용어를 외우는 것이 아니라, 문제를 계층별로 나눠서 생각하는 능력을 기르는 것입니다.

목차