infrastructure-automation

2 개의 포스트

Workers가 내부 유지 관리 (새 탭에서 열림)

Cloudflare가 전 세계 330개 이상의 도시로 인프라를 확장함에 따라, 수동으로 수행하던 데이터 센터 점검 및 네트워크 유지보수 작업의 복잡도가 임계점을 넘었습니다. 이를 해결하기 위해 Cloudflare는 Workers를 기반으로 네트워크 전체 상태를 실시간으로 파악하고 안전 제약 조건을 프로그래밍 방식으로 강제하는 중앙 집중식 자동화 스케줄러를 구축했습니다. 이 시스템은 유지보수 중 발생할 수 있는 잠재적 충돌을 사전에 차단하여 고객 서비스의 가용성과 안정성을 보장합니다. ### 유지보수 자동화의 필요성과 위험 관리 * **중복성 보장:** 특정 지역의 메트로 네트워크에서 게이트웨이 역할을 하는 에지 라우터들이 동시에 오프라인이 되어 데이터 센터 연결이 끊기는 상황을 방지해야 합니다. * **고객 맞춤형 서비스 보호:** 'Aegis(Dedicated CDN Egress IPs)'와 같이 고객이 특정 데이터 센터를 지정해 트래픽을 송출하는 경우, 해당 데이터 센터들이 동시에 점검에 들어가면 지연 시간이 급증하거나 5xx 에러가 발생할 위험이 있습니다. * **수동 조정의 한계:** 인프라 규모가 커지면서 사람이 실시간으로 모든 중첩된 점검 요청이나 고객별 라우팅 규칙을 추적하는 것이 불가능해졌으며, 이를 자동화된 "두뇌" 시스템으로 대체했습니다. ### 데이터 처리의 한계와 지역화 전략 * **메모리 제약 문제:** 초기에는 모든 서버 관계, 제품 구성, 메트릭 데이터를 단일 Worker에 로드하려 했으나, 플랫폼의 메모리 제한으로 인해 'Out of Memory' 오류가 발생했습니다. * **데이터 선별 로드:** 모든 데이터를 불러오는 대신, 특정 지역(예: 독일 프랑크푸르트)의 점검이 계획되면 해당 지역과 연관된 인접 데이터 센터 및 제품 데이터만 로드하도록 최적화했습니다. * **상관관계 분석:** 특정 데이터 센터의 가동 중단이 어떤 고객의 워크로드에 영향을 주는지 제품 API를 통해 관계성을 파악하고, 최소 하나 이상의 경로가 활성화 상태를 유지하도록 설계했습니다. ### Graph 기반의 관계 처리 (TAO 모델 도입) * **객체와 연관성 모델링:** Facebook의 TAO 연구 논문에서 영감을 얻어, 인프라 데이터를 '객체(Vertices)'와 '연관성(Edges)'으로 구성된 그래프 구조로 모델링했습니다. * **타입화된 API 설계:** 라우터를 객체로, 해당 라우터를 사용하는 고객 서비스(Aegis 풀 등)를 연관성으로 정의하여 프로그래밍 방식으로 빠르게 조회할 수 있는 인터페이스를 구축했습니다. * **제약 조건 검증:** 유지보수 제안이 들어오면 그래프 인터페이스를 통해 영향을 받는 모든 하위 구성 요소를 탐색하고, 점검 일정이 안전 제약 조건을 위반하는지 즉각적으로 분석합니다. Cloudflare의 사례는 대규모 분산 시스템의 운영 효율성을 높이기 위해 인프라 관리 프로세스를 어떻게 코드화하고 자동화할 수 있는지 보여줍니다. 특히 서버리스 플랫폼인 Workers의 제약을 그래프 기반의 효율적인 데이터 모델링으로 극복함으로써, 네트워크 안정성을 해치지 않으면서도 신속한 유지보수 일정을 수립할 수 있게 되었습니다.

Nginx 설정 통합과 Loki 연동으로 설계한 유연한 멀티사이트 아키텍처 (새 탭에서 열림)

LINE NEXT는 빠르게 확장되는 글로벌 서비스 환경에 대응하기 위해 파편화된 웹 서버 인프라를 중앙 집중형 네이티브 Nginx 멀티사이트 구조로 전환했습니다. 기존의 수동 구성 방식과 Ingress Nginx의 제약을 극복하고자 Ansible 기반의 자동화와 설정 통합을 도입했으며, 이를 통해 서비스 론칭 리드 타임을 80% 이상 단축하고 고급 Nginx 기능을 유연하게 구현할 수 있는 환경을 마련했습니다. **Nginx 인프라 아키텍처의 3단계 진화** * **PMC 기반 초기 구조**: 사내 배포 도구인 PMC와 `rsync`를 이용해 서비스별로 독립된 Nginx 서버와 로드밸런서를 운영했습니다. 하지만 서버 발급부터 설정까지 최대 2주의 시간이 소요되었고, 보안망 내 SSH 포트 개방 리스크와 설정 파편화로 인한 유지보수 어려움이 있었습니다. * **Ingress Nginx 기반 구조**: 쿠버네티스 환경에서 헬름 차트를 통해 도메인과 설정을 추상화하여 배포 속도를 높였습니다. 그러나 로드밸런서 프락시 모드 사용 시 클라이언트의 실제 IP(Remote Address) 확인이 어렵고, GeoIP 등 Nginx 네이티브 모듈 활용에 제약이 발생하는 한계가 있었습니다. * **네이티브 Nginx 멀티사이트 구조(현재)**: Ingress Nginx의 설정 중심 방식과 네이티브 Nginx의 기능적 자유도를 결합한 하이브리드 모델입니다. 별도의 Ansible 배포 서버를 구축하여 공통 설정은 유지하되 서비스별로 유연한 기능을 탑재할 수 있도록 개선했습니다. **효율적인 관리와 확장성을 위한 설정 통합** * **마스터 설정과 서버 블록 분리**: Apache의 구성 방식에서 영감을 얻어 `events` 및 `http` 블록의 공통 설정(timeout, log format 등)을 마스터 설정으로 추출하고, 서비스별 가상 호스트 설정은 `sites-available` 디렉터리 내 개별 파일로 관리합니다. * **멀티사이트 아키텍처**: 단일 Nginx 인스턴스에서 다수의 도메인과 서비스를 동시에 서빙할 수 있도록 구조화하여, 신규 서비스 추가 시 설정 파일만 배포하면 즉시 반영되는 환경을 구축했습니다. * **환경별 독립 관리**: 알파, 베타, RC, 프로덕션 등 각 배포 환경에 맞는 설정을 독립적인 리포지터리 구조로 관리하여 운영 안정성을 높였습니다. **Ansible 기반의 안정적인 배포 자동화** * **자동화 프로세스**: 사용자가 타깃 서버와 환경을 지정하면 Ansible이 최신 설정을 클론하여 배포하며, `Nginx Verify`를 통한 문법 검사와 프로세스 상태 체크를 자동으로 수행합니다. * **롤링 배포(Rolling Deployment)**: 서비스 중단을 방지하기 위해 순차적으로 배포를 진행하며, 특정 단계에서 오류가 발생하면 즉시 배포를 중단하여 서비스 영향을 최소화합니다. * **고급 기능 통합**: GeoIP 모듈을 통한 국가별 트래픽 처리, Loki 연동을 통한 실시간 로그 수집, SSL 인증서 자동화 등 복잡한 요구사항을 공통 템플릿 내에서 손쉽게 관리할 수 있게 되었습니다. 다수의 도메인을 운영하고 빠른 서비스 론칭이 필요한 환경이라면, 클라우드 네이티브의 편의성과 네이티브 소프트웨어의 제어권을 모두 챙길 수 있는 'Ansible+네이티브 Nginx' 조합의 멀티사이트 구조 도입을 적극 권장합니다. 이를 통해 인프라 리드 타임 감소는 물론, 보안과 로그 수집 같은 공통 요구사항을 표준화된 방식으로 해결할 수 있습니다.