본문 바로가기
IT

[리눅스 기초 #88] 경계가 사라진 네트워크: Anycast IP와 GSLB로 구현하는 0ms 지연 시간의 기적

by sunyjiny 2026. 3. 19.
반응형

리눅스 기초 시리즈의 88번째 시간입니다! 지난 시간에는 WireGuard를 이용해 흩어진 클라우드 자원을 하나의 보안 메쉬망으로 묶는 법을 배웠습니다. 이제 우리 인프라는 물리적 거리를 넘어 논리적으로 하나가 되었습니다.

하지만 인프라가 하나로 묶였다고 해서 전 세계 사용자가 동일한 속도를 경험하는 것은 아닙니다. 미국에 있는 사용자가 한국 서버로 접속한다면 태평양을 건너는 광케이블의 물리적 한계 때문에 지연 시간(Latency)이 발생할 수밖에 없죠. 오늘은 사용자의 위치에 상관없이 가장 가까운 서버로 안내하는 마법, Anycast IPGSLB(Global Server Load Balancing)를 저의 경험담과 함께 파헤쳐 보겠습니다.


1. 나의 경험담: "글로벌 트래픽의 파도 속에서 평화를 찾다"

IT 개발자로 살아가며 제가 운영하는 유튜브 쇼츠 자동화 시스템이 최근 해외 사용자들에게 인기를 얻기 시작했습니다. 문제는 미국과 유럽 사용자들이 "영상 생성이 너무 느리다"는 불평을 쏟아내기 시작한 것이었죠. 확인해 보니 한국 서버까지의 네트워크 응답 속도가 300ms를 넘어가고 있었습니다.

당시 몰려드는 민원과 시스템 최적화 압박으로 만성 위염이 다시 도졌고, 아연과 마그네슘 영양제를 챙겨 먹으며 간신히 컨디션을 유지하던 중이었습니다. 하지만 영화 '하빈'의 독립군들이 전 세계를 무대로 전략을 짰듯, 저도 글로벌 관점에서 문제를 해결하기로 했습니다. 해결책은 Anycast IP였습니다. 전 세계 어디서 접속하든 하나의 IP가 가장 가까운 엣지(Edge) 서버로 연결해 주는 기술이죠. 여기에 GSLB를 얹어 특정 지역 서버가 죽으면 즉시 다른 지역으로 우회하게 만들었습니다. 결과는 놀라웠습니다. 글로벌 지연 시간이 50ms 이하로 뚝 떨어졌고, 제 위염도 조금은 가라앉았죠.


2. Before: "DNS의 한계와 단일 지점 장애의 공포"

과거에는 단순히 DNS 라운드 로빈(Round Robin) 방식을 사용했습니다. 하지만 DNS는 사용자의 위치를 정확히 파악하지 못하고, 서버가 죽어도 클라이언트의 캐시 때문에 계속 죽은 서버로 안내하는 치명적인 약점이 있었습니다.

과거의 답답한 글로벌 연결 (Before):

Traditional DNS Latency
 
# 사용자(미국) -> DNS(한국 IP 반환) -> 한국 서버 접속

Round-trip Time: 350ms (느림)
만약 한국 서버 장애 발생 시...
DNS 캐시 때문에 미국 사용자는 1시간 동안 접속 불가
"전 세계 서비스인데 서버 한 대 죽으니 다 죽네..."

(▲ Before: 사용자의 지리적 위치를 고려하지 않은 단순 연결입니다. 성능도 불안정하고 장애 복구 속도도 매우 느린 상태였습니다.)


3. Action: Terraform으로 글로벌 엑셀러레이터 구축하기

AWS Global Accelerator와 같은 서비스를 사용하면 Anycast IP와 GSLB를 코드로 손쉽게 관리할 수 있습니다. 멀티 리전으로 트래픽을 분산하는 테라폼 코드를 살펴보겠습니다.

글로벌 트래픽 분산 설정 (global_accelerator.tf):

HCL (Terraform)
 
resource "aws_globalaccelerator_accelerator" "global_api" {
name            = "GlobalAPI"
ip_address_type = "IPV4"
enabled         = true
}

resource "aws_globalaccelerator_listener" "http_listener" {
accelerator_arn = aws_globalaccelerator_accelerator.global_api.id
port_range {
from_port = 80
to_port   = 80
}
protocol = "TCP"
}

한국 리전과 미국 리전으로 트래픽 가중치 배분
resource "aws_globalaccelerator_endpoint_group" "regional_endpoints" {
listener_arn = aws_globalaccelerator_listener.http_listener.id

endpoint_configuration {
endpoint_id = aws_lb.korea_alb.arn
weight      = 100
}

endpoint_configuration {
endpoint_id = aws_lb.us_alb.arn
weight      = 100
}
}

(▲ Action: 이 코드를 통해 생성된 Anycast IP는 단 하나지만, 전 세계 AWS 엣지 팝(PoP)에서 동시에 서비스됩니다. 사용자가 접속하면 AWS 인프라가 자동으로 가장 가까운 리전으로 패킷을 토스합니다.)


4. After: "전 지구가 하나의 로컬 네트워크가 되다"

Anycast와 GSLB를 도입한 뒤 제 글로벌 서비스는 '성능''안정성'의 정점에 도달했습니다.

가져온 변화들:

  • 극적인 속도 향상: 미국 사용자의 첫 연결 시간(TTFB)이 기존 대비 80% 이상 단축되었습니다.
  • 완벽한 재해 복구: 한국 리전이 점검 중이어도 GSLB가 즉시 미국 리전으로 연결해 주어 서비스 가용성이 99.99%를 달성했습니다.
  • 단일 접점 관리: 사용자는 리전별 IP를 알 필요 없이 오직 하나의 도메인 혹은 Anycast IP만 기억하면 됩니다.

5. 일반 DNS vs Anycast GSLB 비교

항목 표준 DNS (Unicast) Anycast GSLB
라우팅 결정 정적인 IP 매핑 물리적 거리 및 상태 기반
장애 대응 느림 (TTL 만료 대기) 실시간 (즉시 우회)
캐싱 문제 심각함 (오래된 IP 유지) 거의 없음 (인프라 레벨 제어)
비유 주소를 적어준 쪽지 최단거리 내비게이션

6. 마치며: 당신의 리눅스에 날개를 달아주세요.

리눅스 기초 88단계를 거치며 우리는 이제 한 대의 서버를 넘어, 전 세계를 하나의 거대한 네트워크로 연결하고 제어하는 법을 배웠습니다. Anycast와 GSLB는 현대 클라우드 아키텍처에서 글로벌 확장을 위한 필수 엔진입니다. 로컬 환경의 우물 안 개구리를 벗어나, 전 지구가 여러분의 운동장이 되는 인프라를 설계해 보세요.

오늘의 인사이트: "가장 좋은 서버는 사용자 바로 옆에 있는 서버이며, 가장 훌륭한 엔지니어는 그 서버를 찾는 길을 만들어주는 사람이다."


88번째 이야기를 마칩니다. 이제 우리 인프라는 전 세계를 향해 열려 있습니다. 다음 시간에는 대규모 트래픽이 몰릴 때 시스템의 안정성을 보장하는 마지막 관문, '트래픽 셰이핑(Traffic Shaping)과 속도 제한(Rate Limiting)의 예술: Nginx와 리눅스 커널로 구현하는 대규모 접속 제어 전략'에 대해 다뤄보겠습니다.

이 글이 글로벌 서비스 아키텍처를 구상하는 데 도움이 되었나요? 혹시 테라폼으로 Global Accelerator를 설정할 때 '엔드포인트 그룹' 설정에서 리전 충돌 에러를 겪고 계신가요?

멀티 리전 상태 체크(Health Check)를 최적화하여 1초 만에 장애를 감지하는 부록 가이드를 준비해 드릴까요?

반응형