Cloudflare, Akamai, Google Public DNS(8.8.8.8) 같은 글로벌 서비스가 어떻게 전 세계 어디서나 빠르게 응답하는지 궁금했던 적이 있으신가요? 거의 모두 BGP Anycast라는 기술 위에서 동작합니다.
Anycast란 무엇인가
IP 주소 통신 방식은 4가지로 분류됩니다.
| 방식 | 의미 | 예시 |
|---|---|---|
| Unicast | 1대 1 | 일반 웹 접속 |
| Multicast | 1대 N (구독자) | IPTV |
| Broadcast | 1대 전체 (동일 네트워크) | DHCP 요청 |
| Anycast | 1대 N 중 가장 가까운 1대 | CDN, DNS |
Anycast는 “같은 IP 주소를 여러 위치에서 광고하고, 네트워크가 가장 가까운 곳으로 보내준다”는 발상입니다.
BGP가 어떻게 가까운 곳을 고르는가
BGP(Border Gateway Protocol)는 인터넷의 라우팅 결정 프로토콜입니다. AS(Autonomous System) 간 경로 정보를 교환하며, 다음 기준으로 “가장 좋은 경로”를 고릅니다.
BGP 경로 결정 순서 (단순화):
1. AS_PATH 길이 (짧을수록 좋음)
2. Local Preference (사업자 정책)
3. Origin (IGP > EGP > Incomplete)
4. MED (Multi-Exit Discriminator)
5. eBGP > iBGP 선호
6. IGP 코스트
7. 라우터 ID
“가까운 곳”의 정의가 단순한 지리적 거리가 아닌 AS hop 수와 정책의 함수입니다. 그래서 Anycast는 실제로는 “BGP가 좋다고 판단한 곳”으로 가는 셈입니다.
왜 BGP Anycast를 쓰는가
1) 지연 시간 단축
글로벌 사용자가 각자 가장 가까운 PoP으로 자동 라우팅되어 RTT가 줄어듭니다.
2) 부하 분산
한 곳에 트래픽이 몰리지 않고, 지리적으로 분산됩니다.
3) DDoS 분산
공격 트래픽도 자동으로 분산되어 한 곳에서 흡수할 수 없는 규모도 처리 가능합니다.
4) 자동 페일오버
한 PoP이 다운되면 BGP 광고가 사라져 자연스럽게 다른 PoP으로 전환됩니다. DNS 변경 불필요.
5) 단순한 클라이언트 설정
사용자는 IP 하나(예: 1.1.1.1)만 알면 됩니다. 지역별 다른 IP를 관리할 필요가 없습니다.
어떤 서비스에 잘 맞는가
Anycast는 모든 워크로드에 적합한 게 아닙니다.
✅ 잘 맞는 경우
- 상태 없는 단방향 트래픽 — DNS 쿼리·응답
- 읽기 위주 캐시 — CDN 정적 콘텐츠
- 짧은 연결 — 단일 요청·응답
- DDoS 흡수 — 트래픽 분산
⚠ 주의가 필요한 경우
- 상태가 있는 긴 연결(TCP) — 경로가 도중에 바뀌면 연결 끊김
- 세션 어피니티 필요 — 같은 사용자가 같은 서버로 와야 하는 경우
- 쓰기 트래픽 — 어느 PoP에 쓸지 결정 후 동기화 부담
다만 최근에는 TCP·HTTP도 Anycast로 운영하는 사례가 일반화됐습니다. 대부분의 사용자는 한 세션 동안 같은 PoP에 머무는 경향이 강하기 때문입니다.
실제 사용 예시
Public DNS — 1.1.1.1 / 8.8.8.8
전 세계 수백 곳에서 같은 IP를 광고. 사용자는 가장 가까운 곳에서 응답을 받습니다.
CDN — Cloudflare, Fastly, Akamai
Edge 서버가 Anycast IP로 광고하여, 사용자가 가까운 PoP에서 캐시된 콘텐츠를 받습니다.
DDoS 방어 — Cloudflare Magic Transit
공격 트래픽을 전 세계로 분산해 단일 PoP의 대역폭을 초과하지 않게 합니다.
글로벌 로드밸런서 — AWS Global Accelerator, GCP Global LB
NTP — pool.ntp.org
운영 함정
Anycast는 마법이 아닙니다. 운영해보면 다음 문제들이 드러납니다.
1) BGP 경로 변동 시 연결 끊김
TCP 연결 도중 BGP 경로가 바뀌면, 새 경로의 PoP은 그 TCP 세션을 모르기 때문에 RST가 발생합니다.
- 해결: 경로 변화 빈도 모니터링, 연결 짧게 유지
2) PoP 간 응답 일관성 부재
같은 사용자가 짧은 시간 내 다른 PoP으로 갈 수 있어 데이터가 다르게 보일 수 있음.
- 해결: 캐시 일관성 정책(SWR·ETag), DB 동기화
3) 디버깅 어려움
“내 IP는 1.1.1.1에 가는데 어느 PoP에 갔지?” 알기 어렵습니다.
- 해결: 응답 헤더에 PoP 정보 포함 (예:
X-Pop: NRT-1)
4) BGP 광고 손상 시 영향 큼
잘못된 광고가 나가면 모든 사용자가 영향. 2022년 Cloudflare 대규모 장애도 이런 사례.
- 해결: 광고 변경에 엄격한 검토, 점진 롤아웃
5) DDoS 공격이 한 PoP에 집중
공격자가 특정 PoP의 BGP 경로를 의도적으로 노릴 수 있음.
- 해결: PoP별 흡수 용량 충분히 확보
호스팅 환경에서 BGP Anycast 활용
자체 BGP Anycast를 운영하려면 다음이 필요합니다.
- 자체 AS 번호 (ASN) — 신청·할당받기
- PI(Provider-Independent) IPv4/IPv6 블록
- 여러 곳의 데이터센터 + 각자 BGP 피어링
- 각 PoP에서 동일 IP를 광고하는 라우터 설정
- 익명 추적·모니터링 인프라
# 단순화한 BGP 광고 설정 (FRR 예시)
router bgp 65001
neighbor 192.0.2.1 remote-as 64500
address-family ipv4 unicast
network 198.51.100.0/24
exit-address-family
자체 ASN과 PI 블록 보유는 비용·시간이 큽니다. 대부분의 호스팅 사용자는 Cloudflare·Fastly 같은 Anycast CDN을 앞단에 두는 방식이 현실적입니다.
CDN 없이 Anycast의 이점을 누리는 법
자체 Anycast가 무리라면 다음 옵션이 있습니다.
1) Anycast DNS 서비스 사용
도메인의 권한 DNS를 Cloudflare DNS, Route 53, NS1 같은 Anycast 서비스로. 전 세계 사용자에게 빠른 DNS 응답.
2) Anycast CDN 앞단 배치
오리진 호스팅 1대 + Cloudflare/Fastly 앞단. 정적 자원은 CDN에서, 동적 요청은 오리진으로.
3) Global Accelerator 류
AWS Global Accelerator나 GCP Global LB는 자체 Anycast IP를 빌려주고 트래픽을 가까운 리전으로 보냅니다.
TCP 연결도 Anycast 가능한가
전통적으로 “TCP는 Anycast 어렵다”고 했지만, 다음 환경에서 실제로 동작합니다.
- BGP 경로가 비교적 안정적 (수시간 안정)
- 짧은 세션 위주 (HTTP 같은)
- PoP에서 세션 정보를 백엔드에 위임하지 않음 (Edge에서 종단)
Cloudflare·Fastly가 글로벌 HTTPS를 Anycast로 운영하는 게 그 증거입니다.
측정과 검증
자체 운영이든 Anycast 서비스를 쓰든, 다음 측정으로 효과를 확인하세요.
# 어느 PoP에 닿았는지
curl -sI https://example.com | grep -i pop
# 다양한 위치에서의 RTT
mtr --report --report-cycles 50 example.com
# 외부 측정 도구
# https://www.dotcom-monitor.com (여러 도시에서 측정)
# https://www.cloudping.cloud
지리적으로 다른 위치에서 측정해야 Anycast의 효과가 보입니다.
마무리
BGP Anycast는 글로벌 인터넷이 빠르고 회복력 있게 동작하는 핵심 기반입니다. 호스팅 운영자 입장에서 직접 구축은 비현실적이지만, Anycast DNS + Anycast CDN을 앞단에 두는 것만으로도 글로벌 사용자 경험이 크게 향상됩니다.
TCP-80.NET은 일본 도쿄 IDC를 오리진으로 두고 Cloudflare·BGP 라우팅 가이드를 @tcp80net으로 안내합니다. 글로벌 트래픽을 함께 받는 워크로드라면 전용서버 + CDN 조합을 권합니다.