//
요즘 개발자를 위한 시스템 설계 수업 · 디렌드라 신하, 테자스 초프라
2부의 첫 장은 사용자 요청이 시스템에 들어오는 경로를 따라간다. 도메인 이름을 IP로 바꾸는 DNS, 그 IP로 도착한 트래픽을 여러 서버에 나누는 로드 밸런서, 그리고 그 앞에서 라우팅과 보안을 담당하는 애플리케이션 게이트웨이 순이다.
DNS(Domain Name System)는 사람이 이해하기 쉬운 도메인 이름을 기계가 사용하는 IP 주소로 변환하는 시스템이다. 중요한 전제가 하나 있다. DNS는 하나의 서버가 아니라 수많은 서버가 이루는 네트워크다.
사용자 쿼리에 응답하는 DNS 서버를 네임 서버(Name Server) 라 부르고, 매핑 정보는 리소스 레코드(RR, Resource Record) 라는 단위로 저장된다.
| 레코드 유형 | 역할 |
|---|---|
| A | 호스트 이름을 IP 주소에 매핑 |
| NS | 도메인의 DNS 요청을 처리할 권한 있는 네임 서버를 매핑 |
| CNAME | 하나의 도메인 이름에 별칭을 부여해 실제 도메인 이름으로 연결 |
| MX | 도메인을 메일 서버에 매핑 |
네임 서버는 계층적으로 구성된다. 이 계층 구조 덕에 DNS가 인터넷 규모의 쿼리 부하를 감당할 수 있다.
쿼리 방식은 두 가지다.
우리가 일상적으로 쓰는 인터넷은 재귀적 쿼리 방식이다. ISP나 네트워크가 제공하는 로컬 리졸버에 IP 주소를 요청하고 결과만 받아 온다. 그리고 자주 접근하는 리소스 레코드는 DNS 캐싱으로 임시 저장해 두어 매번 계층을 타지 않는다.
DNS는 2장에서 본 세 축이 실제로 어떻게 구현되는지 보여주는 좋은 예다.
| 축 | 구현 방식 |
|---|---|
| 확장성 | 전 세계에 분산된 루트 서버 인스턴스가 약 1,000개 규모로 존재하며, 이들이 요청의 시작점을 나누어 받아 TLD 서버로 전달한다 |
| 신뢰성 | 웹 브라우저, 운영 체제, 로컬 네트워크, ISP, 리졸버의 여러 단계에서 캐싱한다. 응답은 대부분 UDP를 쓰지만 응답이 없으면 재전송해 보완한다 |
| 일관성 | 강한 일관성을 포기하고 성능을 택했다. 레코드에 TTL을 두어 최종 일관성을 적용한다 |
DNS는 대표적인 최종 일관성 시스템이다. 레코드를 바꿔도 전 세계 리졸버 캐시가 만료되기까지는 이전 값이 계속 응답된다. 그래서 IP 변경이 예정된 도메인은 변경 며칠 전에 TTL을 미리 낮춰 두는 것이 실무 관행이다. TTL을 낮춘 변경이 전파된 다음에 실제 IP를 바꾸고, 안정화된 뒤 TTL을 원래대로 올린다.
로드 밸런서는 트래픽을 여러 서버에 고르게 분산시키는 장치다. 주요 특징을 정리하면 이렇다.
부수적으로 얻는 이점도 크다. 헬스 체크로 서버 상태를 관리해 접근할 수 없는 서버에 요청을 보내지 않고, TLS 연결을 종료해 암호화된 데이터를 미리 복호화한 뒤 전달함으로써 백엔드 서버가 본연의 작업에만 집중하게 만든다.
| 알고리즘 | 방식 |
|---|---|
| 라운드 로빈 | 서버를 순차적으로 돌아가며 배정 |
| 가중치 기반 라운드 로빈 | 가중치가 높게 설정된 서버에 더 많이 배정 |
| 최소 연결 | 현재 연결 수가 가장 적은 서버에 배정 |
| 최소 응답 시간 | 응답 시간이 가장 빠른 서버에 배정 |
| IP 해시 / URL 해시 / 일관성 해시 | 클라이언트 IP나 URL 정보를 해싱해 특정 서버로 고정 배정 |
이 알고리즘들은 두 축으로 다시 분류된다.
스테이트풀 로드 밸런서는 클라이언트 정보를 들고 어느 서버로 보낼지 결정하므로 가용성과 신뢰성을 높이는 방향이고, 스테이트리스 로드 밸런서는 단일 로드 밸런서 내부의 로컬 상태만으로 요청을 처리하므로 빠르고 확장성이 높으며 구현이 간단하다.
전역 서버 로드 밸런싱(GSLB) 은 사용자 위치, 데이터 센터 상태, 서버 수 같은 요인을 기반으로 전역 트래픽을 적절한 데이터 센터로 보낸다. 로컬 로드 밸런싱은 자신이 관리하는 서버들의 상태와 용량 정보를 GSLB에 전달하는 역할을 한다.
그런데 DNS도 여러 IP를 번갈아 반환하는 방식으로 전역 로드 밸런싱 역할을 할 수 있다. 책은 이 방식의 한계를 네 가지로 짚는다.
"DNS 라운드 로빈으로 로드 밸런싱한다"는 접근이 왜 위험한지가 이 목록에 다 들어 있다. 특히 네 번째가 치명적이다. 서버 하나가 죽어서 DNS 레코드에서 제거해도, 이미 그 IP를 캐싱한 클라이언트들은 TTL이 만료될 때까지 죽은 서버로 계속 접속을 시도한다. 장애 복구 시간을 TTL이 결정해 버리는 구조다.
OSI 모델은 시스템의 내부 구조나 특정 기술과 관계없이 네트워크 기능을 표준화하는 개념적 프레임워크다. 로드 밸런서는 주로 두 계층에서 동작한다.
| 전송 계층(4계층) LB | 응용 계층(7계층) LB | |
|---|---|---|
| 판단 기준 | TCP/UDP 프로토콜 정보 | HTTP 헤더, URL, 쿠키, 사용자 ID 등 |
| 특징 | 낮은 계층에서 동작해 상대적으로 빠름 | 애플리케이션 정보를 활용해 정교한 분배 가능 |
| 강점 | 연결 지향 프로토콜에 안정성 제공 | 부하 최적화, 경로 기반 라우팅 |
그리고 실제 대규모 시스템에서는 이 계층들이 단계적으로 겹쳐 배치된다.
원칙은 간단하다. 하위 계층일수록 기본적인 트래픽 분배를 담당하고, 상위 계층일수록 더 많은 정보를 바탕으로 세밀하게 분산 처리한다.
| 형태 | 특징 |
|---|---|
| 하드웨어 LB | 독립 장치로 동작. 성능은 뛰어나지만 가격과 유지보수 비용이 높다 |
| 소프트웨어 LB | 유연한 프로그래밍이 가능해 다양한 분배 방식을 상황에 맞게 적용할 수 있다 |
| 클라우드 LB (LBaaS) | 로컬 분산과 리전 간 글로벌 트래픽 관리를 함께 제공. 용이성, 확장성, 사용량 기반 과금, 고급 모니터링이 장점 |
애플리케이션 게이트웨이는 클라이언트와 백엔드 서비스 사이에서 트래픽을 가로채며 라우팅, 보안 강화, 성능 가속, 분석을 담당한다. 로드 밸런서와 역할이 겹치지만, 게이트웨이는 애플리케이션 관심사를 중앙으로 끌어올리는 것에 초점이 있다.
| 기능 | 내용 |
|---|---|
| 고급 요청 라우팅 | 호스트 이름, 경로, 헤더, 요청 IP 등 다양한 조건에 따라 적합한 백엔드로 전달 |
| 보안 | 인증, 접근 제어, TLS 종료, DDoS 방어를 중앙에서 관리. WAF를 통합해 OWASP가 정의한 위협에 대응 |
| 가속화와 오프로딩 | 캐싱, 압축, TCP 연결 관리, TLS 오프로딩으로 성능 향상 |
| 모니터링 | 로그, 메트릭, 트레이스를 중앙에서 통합 수집해 애플리케이션 상태를 종합 파악 |
| 적응성 | 요청과 응답을 조정해 백엔드 서비스의 변화를 유연하게 흡수 |
이 기능 목록이 의미 있는 이유는 마이크로서비스 아키텍처와 짝을 이루기 때문이다. 하나의 큰 시스템을 독립적이고 재사용 가능한 여러 서비스로 나누고, REST/HTTP 같은 가벼운 프로토콜로 통신하게 만들면, 인증이나 속도 제한 같은 공통 관심사를 각 서비스가 중복 구현하는 문제가 생긴다. 게이트웨이는 그 중복을 한곳으로 모은다.
| 환경 | 대표 서비스 |
|---|---|
| AWS | API Gateway(API 생성·배포·관리·보안), Application Load Balancer(서비스·컨테이너 트래픽 라우팅) |
| Azure | Application Gateway(응용 계층 로드 밸런싱, WAF, SSL 오프로딩, 종단 간 TLS, 자동 확장) |
| GCP | Cloud Armor(DDoS 방어, 구글 네트워크 인프라 연동 방화벽) |
| 쿠버네티스 | Istio, Kong, Traefik, Ambassador 등 인그레스 컨트롤러가 API 게이트웨이 역할 |
| 온프레미스 | Kong, Tyk, NGINX, HAProxy 같은 오픈 소스 플랫폼 |
이 장은 분산 시스템의 세 가지 기본 구성 요소를 전반적으로 훑는다. 다만 각 주제의 깊이는 고르지 않았다.
DNS는 상대적으로 자세히 다뤄지지만, 계층 구조와 쿼리 방식 이상으로 파고들지는 않는다. 캐싱 동작이나 DNSSEC, 애니캐스트 같은 주제를 더 보고 싶은 지점에서 멈춘다. DNS를 단일 주제로 다루는 책을 따로 찾아 읽는 편이 나을 것 같다.
로드 밸런서는 기본 개념과 알고리즘 나열 위주다. 실무에 바로 참고하기에는 다소 추상적인데, 이 주제는 더 깊이 들어간다고 해서 결정적으로 달라지는 부분이 많지 않기도 하다. 오히려 소프트웨어 로드 밸런서를 실제로 다룰 기회에 개념을 적용해 보며 사례를 늘려 가는 편이 실질적이다.
애플리케이션 게이트웨이는 주로 클라우드 서비스 중심으로 소개된다. 관리형 서비스를 쓰지 않는 환경에서는 이 구조를 소프트웨어 단계에서 어떻게 재현할지, 즉 공통 모듈과 인증 레이어를 어떤 경계로 나눌지의 문제로 옮겨 생각해 볼 만하다.
이 글이 도움이 되셨나요?