상위 네트워크의 구조: 서버 확장에서 로드 밸런서, DNS, ISP, BGP, Anycast까지

서버 한 대에서 출발해 수평 확장과 MSA, 로드 밸런서, DNS, ISP, BGP, Anycast까지 대규모 서비스의 상위 네트워크 구조를 문답 형식으로 정리합니다.

일반 독자들이 잘 모르는 상위 네트워크의 구조

인터넷을 사용하는 사람이라면 누구나 한 번쯤 이런 생각을 해본 적이 있을 것이다.

"구글처럼 수천만 명이 사용하는 서비스는 도대체 어떻게 그 많은 요청을 처리하는 걸까?"

개발자라면 조금 더 구체적인 질문을 던질 수도 있다.

"서버가 늘어난다고 하는데, 서버를 여러 대 복제한다는 뜻인가?"

"그럼 모놀리스 서버를 여러 대 띄우는 건가, 아니면 MSA로 전환하는 건가?"

"구글은 www.google.com이라는 하나의 도메인으로 접속하는데, 수많은 서버가 있다면 IP 주소는 어떻게 처리되는가?"

"IP 하나로 수천만 명의 요청을 받을 수 있는가?"

"로드 밸런서 하나가 그 모든 트래픽을 처리하는 건가?"

"인터넷을 연결해주는 ISP는 이 과정에서 무슨 일을 하는가?"

"BGP와 Anycast는 도대체 어디에 등장하는가?"

이 질문들은 각각 별개의 주제처럼 보이지만, 실제로는 하나의 흐름으로 연결되어 있다.

이번 장에서는 작은 스타트업의 서버 한 대에서 출발해, 모놀리스의 수평 확장, MSA, 로드 밸런서, DNS, ISP, BGP, Anycast까지 차례대로 올라가 보자.


1. "서비스가 커지면 서버가 늘어난다"는 말은 무슨 뜻일까?

질문자: 서비스가 성장하면 "서버가 늘어난다"고 하잖아요. 정확히 무슨 의미인가요?

전문가: 가장 먼저 이 표현을 구분할 필요가 있습니다.

"서버가 늘어난다"와 "서비스 구조가 바뀐다"는 서로 다른 이야기입니다.

스타트업 A가 처음 쇼핑 서비스를 만들었다고 해보죠.

사용자
   │
   ▼
Application Server
   │
   ▼
PostgreSQL

애플리케이션 서버 한 대가 회원, 상품, 주문, 결제, 게시판 등의 모든 기능을 가지고 있다고 합시다.

이것이 전형적인 모놀리스(Monolith) 구조입니다.

처음에는 사용자가 많지 않으니 서버 한 대로 충분합니다.

그런데 서비스가 성공해 사용자가 급격히 증가했다고 해봅시다.

처음에는 초당 50개의 요청을 처리하면 됐는데 어느 순간 초당 500개의 요청이 들어옵니다.

서버가 감당할 수 있는 한계를 넘어서는 순간부터 문제가 시작됩니다.


2. 서버를 늘리는 가장 단순한 방법

질문자: 그러면 서버를 늘리면 되는 건가요?

전문가: 방법은 크게 두 가지가 있습니다.

첫 번째는 **수직 확장(Scale-up)**입니다.

기존 서버가 4코어 CPU와 8GB RAM이었다면 이를 16코어, 64GB RAM으로 교체하는 것입니다.

4 Core / 8GB
      ↓
16 Core / 64GB

쉽고 직관적이지만 한계가 있습니다.

아무리 좋은 서버를 사도 하드웨어에는 한계가 있기 때문입니다.

두 번째 방법이 **수평 확장(Scale-out)**입니다.

서버 한 대를 더 좋은 것으로 교체하는 대신, 동일한 애플리케이션 서버를 여러 대 실행합니다.

                 Load Balancer
                  /    |    \
                 ▼     ▼     ▼
             Server1 Server2 Server3
                 \      |      /
                  \     |     /
                       DB

여기서 중요한 점이 있습니다.

이 구조는 여전히 모놀리스입니다.

Server 1, Server 2, Server 3에 모두 똑같은 모놀리스 애플리케이션이 실행되고 있기 때문입니다.

따라서:

서버가 여러 대가 되었다 = MSA가 되었다

는 공식은 성립하지 않습니다.


3. 그렇다면 MSA는 언제 등장하는가?

질문자: 그럼 MSA는 서버를 늘리는 것과 다른 문제인가요?

전문가: 그렇습니다.

MSA는 서버의 개수보다 애플리케이션의 구조를 어떻게 나누느냐의 문제입니다.

처음에는 모든 기능이 하나의 애플리케이션에 들어있습니다.

Monolith
├── 회원
├── 상품
├── 주문
├── 결제
├── 검색
└── 알림

서비스가 거대해지면 이것을 논리적으로 분리할 필요가 생길 수 있습니다.

User Service
Product Service
Order Service
Payment Service
Search Service

이렇게 각 서비스를 독립적으로 배포하고 운영하는 것이 MSA의 방향입니다.

그러면 다음과 같은 구조도 가능합니다.

              Load Balancer
                    │
        ┌───────────┼───────────┐
        ▼           ▼           ▼
    User Service Product      Order
                   Service     Service
        ×2          ×10          ×5

상품 서비스에 트래픽이 몰리면 상품 서비스만 10개, 20개로 늘릴 수 있습니다.

여기서 우리는 두 가지 개념을 분리해서 생각해야 합니다.

애플리케이션을 여러 서비스로 분리하는 것

→ MSA

하나의 서비스를 여러 인스턴스로 실행하는 것

→ 수평 확장

둘은 동시에 사용될 수 있지만 같은 개념은 아닙니다.


4. 그런데 여기서 새로운 질문이 생긴다

질문자: 알겠습니다. 모놀리스든 MSA든 서버를 여러 대 띄울 수 있다는 건 이해했습니다.

그런데 구글 같은 서비스는 서버가 도대체 몇 대인가요?

제가 www.google.com의 IP를 조회해보니 172.217.209.113이 나오는데요.

수천만 명이 동시에 Google을 사용한다면, 결국 그 수많은 요청이 이 IP로 들어오는 것 아닌가요?

전문가: 바로 여기서 우리가 평소 생각하는 "IP 주소 = 서버 한 대"라는 관념을 버려야 합니다.

172.217.209.113이라는 IP 주소가 있다고 해서 다음과 같은 구조라고 생각하면 안 됩니다.

172.217.209.113
       │
       ▼
   서버 한 대
       │
      NIC

대규모 인터넷 서비스는 이렇게 동작하지 않습니다.

IP 주소는 물리적인 서버 한 대를 의미하는 이름표가 아닙니다.

IP는 네트워크에서 사용되는 논리적인 주소입니다.


5. 그렇다면 IP 하나로 여러 서버를 사용할 수 있는가?

질문자: 그렇다면 하나의 IP 주소를 여러 서버가 사용할 수도 있다는 건가요?

전문가: 그렇습니다.

다만 여기서 중요한 것은 어떤 방식으로 여러 서버에 분산시키느냐입니다.

우리가 가장 먼저 떠올릴 수 있는 것이 로드 밸런서입니다.

                 사용자
                    │
                    ▼
              Load Balancer
               /    |    \
              ▼     ▼     ▼
           Server1 Server2 Server3

사용자는 하나의 진입점을 바라보지만, 내부에서는 요청이 여러 서버로 분산됩니다.

그런데 Google 정도의 규모가 되면 여기서 한 단계 더 생각해야 합니다.

"그렇다면 Load Balancer 하나가 모든 Google 사용자의 요청을 받아야 하는 것 아닌가?"

당연히 그렇지 않습니다.

로드 밸런서 역시 여러 대이고, 네트워크 자체도 여러 지역에 분산되어 있습니다.


6. "로드 밸런서 하나의 NIC로 수천만 명을 처리하는가?"

질문자: 그러면 로드 밸런서 한 대의 NIC가 그 모든 요청을 처리하는 건가요?

전문가: 아닙니다.

대규모 서비스에서는 로드 밸런서도 분산되어 있습니다.

개념적으로는 다음과 같은 형태에 가깝습니다.

                       Internet
                           │
              ┌────────────┼────────────┐
              ▼            ▼            ▼
           Edge/LB       Edge/LB      Edge/LB
              │            │            │
           ┌──┼──┐      ┌──┼──┐      ┌──┼──┐
           ▼  ▼  ▼      ▼  ▼  ▼      ▼  ▼  ▼
          App App App   App App App   App App App

따라서 "Google IP 하나"와 "Google 서버 한 대"를 1:1로 연결해서 생각하면 안 됩니다.

IP 하나가 존재하더라도 그 뒤에는 수많은 네트워크 장비와 서버가 있을 수 있습니다.

그렇다면 여기서 또 하나의 질문이 생깁니다.

"그런데 인터넷은 어떻게 IP 하나를 여러 지역으로 보낼 수 있는가?"

여기서 등장하는 것이 Anycast와 BGP입니다.


7. Anycast — 같은 주소를 여러 곳에서 사용하기

질문자: Anycast가 그 문제를 해결하나요?

전문가: 정확히는 Anycast는 동일한 IP 주소 또는 IP Prefix를 여러 네트워크 위치에서 서비스하는 방식이라고 이해하면 됩니다.

가상의 IP 8.8.8.8이 있다고 해봅시다.

                 8.8.8.8
                /    |    \
               ▼     ▼     ▼
             한국    미국    유럽
             Edge    Edge    Edge

한국 사용자도 8.8.8.8로 접속하고,

미국 사용자도 8.8.8.8로 접속합니다.

하지만 실제 패킷이 도착하는 네트워크 위치는 서로 다를 수 있습니다.

즉,

같은 IP 주소를 가지고 있지만, 실제 서비스 지점은 여러 곳에 존재할 수 있습니다.

그런데 여기서 새로운 문제가 생깁니다.

"인터넷 라우터는 한국, 미국, 유럽 중 어디로 보내야 하는지 어떻게 알지?"

그 역할에 등장하는 핵심 기술이 BGP입니다.


8. BGP — 인터넷의 거대한 길 안내 시스템

질문자: BGP는 정확히 뭘 하는 건가요?

전문가: BGP는 인터넷의 서로 다른 네트워크들이 어떤 IP 대역으로 가는 경로를 서로 알려주는 프로토콜입니다.

인터넷은 하나의 거대한 네트워크가 아닙니다.

여러 조직의 네트워크가 서로 연결되어 있습니다.

예를 들어:

KT
SK Broadband
LG U+
Google
Cloudflare
Amazon
Microsoft

등이 각각 거대한 네트워크를 운영합니다.

이런 네트워크를 **AS(Autonomous System)**라는 단위로 볼 수 있습니다.

그리고 AS와 AS 사이에서 경로 정보를 교환하는 대표적인 프로토콜이 BGP입니다.


9. ISP는 여기서 어디에 등장하는가?

질문자: 그러면 ISP는 어디에 들어가나요?

전문가: 우리가 집에서 사용하는 인터넷을 예로 들어봅시다.

내 PC
  │
  ▼
집 공유기
  │
  ▼
ISP
  │
  ▼
Internet
  │
  ▼
Google

예를 들어 ISP가 KT라면:

내 PC
  │
  ▼
집 공유기
  │
  ▼
KT 네트워크
  │
  ▼
다른 네트워크
  │
  ▼
Google 네트워크

가 됩니다.

ISP는 단순히 "인터넷을 판매하는 회사"가 아니라, 거대한 네트워크 자체를 운영하는 사업자입니다.

그리고 그 네트워크에는 수많은 라우터가 있습니다.

               KT
      ┌───────────────────┐
      │ Access Router     │
      │        ↓          │
      │ Core Router       │
      │        ↓          │
      │ Core Router       │
      │        ↓          │
      │ Border Router     │
      └─────────┬─────────┘
                │
                ▼
          다른 네트워크

10. 그렇다면 ISP가 BGP와 Anycast를 담당하는가?

질문자: 그러면 ISP 업체들이 BGP와 Anycast를 담당한다고 보면 되나요?

전문가: 여기서는 둘을 구분해야 합니다.

BGP

ISP는 BGP를 매우 중요하게 사용합니다.

하지만 BGP가 ISP 전용인 것은 아닙니다.

Google, Cloudflare, Amazon 같은 대형 네트워크 사업자 역시 BGP를 사용합니다.

              BGP
               │
       ┌───────┼───────┐
       ▼       ▼       ▼
      ISP    Google   Cloudflare
       AS       AS        AS

Anycast

Anycast 역시 ISP 전용 기술이 아닙니다.

Google이나 Cloudflare처럼 여러 지역에 네트워크를 운영하는 사업자가 동일한 IP를 여러 위치에서 서비스하기 위해 Anycast 구조를 사용할 수 있습니다.

즉:

Anycast를 설계하고 운영하는 주체와, 그 Anycast 경로를 받아 인터넷을 전달하는 ISP는 구분해야 합니다.


11. 그렇다면 BGP와 Anycast는 어떻게 연결되는가?

이 둘의 관계를 이해하면 전체 그림이 완성됩니다.

Google이 여러 지역에서 동일한 IP 대역을 서비스한다고 해봅시다.

             Google IP
                 │
       ┌─────────┼─────────┐
       ▼         ▼         ▼
     서울       도쿄       미국
   Google AS  Google AS  Google AS

Google은 각 위치에서 해당 IP 대역으로 가는 경로를 BGP를 통해 광고할 수 있습니다.

그러면 인터넷의 다른 AS들이 이 경로를 학습합니다.

Google
  │
  │ BGP
  ▼
KT
  │
  ▼
다른 ISP

한국 사용자가 Google IP로 접속하면 한국 ISP의 라우터는 자신이 가지고 있는 BGP 경로 정보를 바탕으로 패킷을 적절한 방향으로 보냅니다.

미국 사용자는 미국 쪽 경로를 통해 Google 네트워크에 도착할 수 있습니다.

따라서 개념적으로:

Anycast
  ↓
"같은 IP를 여러 장소에서 서비스하자"
 
BGP
  ↓
"그 IP로 가는 경로가 여기에도 있다는 사실을
인터넷에 알려주자"
 
ISP
  ↓
"다른 네트워크에서 배운 경로를 바탕으로
패킷을 전달하자"

라고 이해할 수 있습니다.


12. ISP 내부에서는 모든 것이 BGP일까?

질문자: 그러면 ISP 내부의 모든 라우터도 BGP로 움직이나요?

전문가: 그렇지는 않습니다.

이것도 흔한 오해입니다.

BGP는 주로 서로 다른 AS 사이의 라우팅에서 중요한 역할을 합니다.

       AS 1                         AS 2
┌────────────────┐           ┌────────────────┐
│                │           │                │
│ Router ────────┼── BGP ────┼──────── Router │
│                │           │                │
└────────────────┘           └────────────────┘

AS 내부에서는 OSPF, IS-IS 등의 **IGP(Interior Gateway Protocol)**를 사용할 수 있습니다.

즉:

        AS 1                    AS 2
    ┌─────────┐              ┌─────────┐
    │         │              │         │
    │  IGP    │──── BGP ────│   IGP   │
    │         │              │         │
    └─────────┘              └─────────┘

처럼 생각하면 됩니다.


13. 이제 인터넷 전체를 하나로 연결해보자

지금까지의 이야기를 모두 합치면 다음과 같습니다.

                           Google
                    ┌─────────────────┐
                    │    Google AS    │
                    │ Global Network  │
                    └────────┬────────┘
                             │
                      BGP Advertisement
                             │
              "이 IP Prefix는 우리에게 있다"
                             │
          ┌──────────────────┼──────────────────┐
          ▼                  ▼                  ▼
      Google Korea       Google Japan       Google US
       Anycast Edge       Anycast Edge       Anycast Edge
          │                  │                  │
          ▼                  ▼                  ▼
       Load Balancer      Load Balancer      Load Balancer
          │                  │                  │
       App × N             App × N            App × N
 
 
사용자
  │
  ▼
집 공유기
  │
  │ NAT
  ▼
┌──────────────────────┐
│          ISP         │
│                      │
│  Access Network      │
│        ↓             │
│  Core Network        │
│        ↓             │
│  Border Router       │
└──────────┬───────────┘
           │
           │ BGP
           ▼
      Internet / IX
           │
           │ BGP
           ▼
       Google AS

이 그림에서 각각의 역할은 명확하게 다릅니다.


14. 그러면 Google까지 패킷 하나가 어떻게 이동할까?

마지막으로 실제 사용자의 요청 하나를 따라가 보겠습니다.

사용자가 브라우저에:

https://www.google.com

을 입력합니다.

① DNS

먼저 도메인을 IP 주소로 해석합니다.

www.google.com
       ↓
      DNS
       ↓
Google IP

② 집

PC의 패킷은 공유기를 거칩니다.

PC
 ↓
공유기
 ↓
NAT

③ ISP

공유기에서 ISP로 들어갑니다.

공유기
  ↓
ISP Access Network
  ↓
ISP Core Network

④ 인터넷

ISP의 경계 라우터에서 다른 AS와 연결됩니다.

ISP AS
  │
  │ BGP
  ▼
Internet / IX / Peering / Transit
  │
  ▼
Google AS

⑤ Google

Google의 네트워크에 도착한 뒤:

Google Edge
     ↓
Load Balancer
     ↓
Application Server
     ↓
Cache / Search System / Database

등을 거쳐 실제 응답을 만들어냅니다.


15. 결국 인터넷을 "도로"라고 생각하면 쉽다

마지막으로 비유 하나만 남겨두겠습니다.

인터넷을 거대한 도로망이라고 생각해봅시다.

ISP

도로망을 운영하는 대형 교통 회사입니다.

KT
SKB
LGU+
...

각자 자신들의 도로망을 가지고 있습니다.

BGP

도로망 운영자들이 서로 주고받는 길 안내 정보입니다.

"Google로 가려면 우리 네트워크를 통해 갈 수 있습니다."

Anycast

전국 여러 지역에 같은 목적지 이름을 붙여놓는 방식입니다.

"Google이라는 목적지가 서울에도 있고 도쿄에도 있고 미국에도 있습니다."

Load Balancer

도착한 뒤 어느 주차장으로 들어갈지 결정하는 안내 시스템입니다.

Google Edge
    │
    ├── Server 1
    ├── Server 2
    ├── Server 3
    └── Server 4

Application Server

실제로 요청을 처리하는 곳입니다.


마무리 — 우리가 처음 가졌던 의문으로 돌아가 보자

처음에는 아주 단순한 질문에서 출발했습니다.

"Google은 수천만 명이 사용하는데, www.google.com의 IP가 하나 보인다면 그 IP의 서버 한 대가 모든 요청을 받는 것 아닌가?"

이제는 이 질문에 답할 수 있습니다.

아니다.

IP 주소는 서버 한 대와 1:1로 대응하지 않습니다.

대규모 서비스에서는:

도메인
  ↓
DNS
  ↓
IP
  ↓
인터넷 라우팅(BGP)
  ↓
여러 지역의 Edge / Anycast
  ↓
Load Balancer
  ↓
수많은 Application Server
  ↓
Cache / Database / Storage

라는 여러 계층을 거칠 수 있습니다.

그리고 그 과정에서 ISP는 사용자의 인터넷 접속을 담당하면서 자신의 네트워크를 운영하고, 다른 AS와 BGP를 통해 경로를 교환합니다.

결국 우리가 브라우저에서 보는 것은:

www.google.com

이라는 아주 단순한 주소 하나지만, 그 뒤에는 수많은 네트워크와 라우터, 데이터센터, 서버가 계층적으로 연결된 거대한 시스템이 존재합니다.

인터넷을 처음 배울 때는 흔히 "내 컴퓨터가 서버의 IP로 접속한다"고 배웁니다.

틀린 말은 아닙니다.

하지만 인터넷의 규모가 커지면 "IP = 서버"라는 사고방식으로는 더 이상 설명할 수 없습니다.

그때부터 IP는 하나의 서버를 가리키는 주소가 아니라, 거대한 네트워크 시스템으로 들어가기 위한 논리적인 목적지로 보이기 시작합니다.

그리고 바로 그 지점에서 DNS, ISP, BGP, Anycast, Load Balancer라는 서로 다른 개념들이 하나의 그림으로 연결됩니다.