피드로 돌아가기
토스 기술블로그DevOps
원문 읽기
수천 개의 API/BATCH 서버를 하나의 설정 체계로 관리하기
토스페이먼츠가 복사-붙여넣기 설정 체계를 오버레이 아키텍처와 템플릿 패턴으로 개편해 수천 개 API/배치 서버를 단일 설정 체계로 관리
AI 요약
Context
수천 개의 API 서버와 배치 설정을 복사-붙여넣기로 관리하면서 설정 오류가 발생했고, 이는 50억 규모 정산 배치의 오타 설정 같은 인프라 장애로 이어졌다. 설정 중복은 코드 중복처럼 버그로 연쇄되었고, AWS와 IDC 하이브리드 클라우드 환경에서 수천 개 서버 설정 동기화는 수동으로 불가능했다.
Technical Solution
- 오버레이 아키텍처 도입: global → cluster → app-group → phase → app 계층으로 설정을 계층화하고, 하위 계층이 상위 계층을 덮어쓰는 구조로 기본값과 환경별 차이를 분리
- 템플릿 패턴 적용: JVM_OPTION 같은 긴 문자열 내부에 중괄호
{{MAX_HEAP}}문법으로 변수를 삽입해 JVM 힙 메모리 같은 단일 값만 재정의 가능하게 변경 - 설정 파일에 코드 삽입: Python 코드를 설정 파일에 주입해 난수 생성이나 원격 API 호출로 동적 설정값 계산
- 조건부 값 적용: 배열 내부에 조건부 로직을 추가해 환경에 따라 특정 설정만 선택적으로 적용
- 배치의 선언형 구조: Groovy 코드로 배치 실행 정책을 선언하고, Dynamic Provisioning으로 필요시 자동으로 장비를 할당받아 병렬 실행
Impact
- JDK 버전 변경을 수백 수천 대 장비에 순식간에 적용 가능
- Pinpoint 같은 새로운 APM 도구를 수백 대 장비에 즉시 배포 가능
- 적은 수의 DevOps 엔지니어가 수십 명의 개발자 인프라를 지원
Key Takeaway
대규모 인프라를 운영할 때 설정도 소프트웨어처럼 DRY 원칙을 적용하고 계층화된 재사용 가능한 구조로 설계하면, 개발자와 DevOps 간의 단일 인터페이스를 구축해 반복적인 설정 변경 작업을 제거할 수 있다.
실천 포인트
수천 개 이상의 서버 설정을 관리하는 팀에서 오버레이 아키텍처(전역 → 환경 → 서비스 계층)와 템플릿 문법을 결합하면, 설정 중복을 제거하면서도 각 계층에서 필요한 값만 선택적으로 재정의할 수 있어 설정 오류로 인한 인프라 장애를 방지할 수 있다.