채널톡, CI 개선으로 15분대 빌드 달성!

by DD
1개월 전
조회수 6

CI 속도 개선을 위해 채널톡 메인 백엔드 서버의 CI 파이프라인을 분석하고, 작은 서비스에서 패턴을 확인 후 적용

PostgreSQL 컨테이너 최적화, prepare 분리, 캐싱(Caching) 도입 등 다양한 시도를 통해 CI 시간 단축

최근 성공 실행 기준 중앙값 15분 38초 달성, 초기 36.6분 대비 획기적인 성능 향상

50노드 실험에서 이미지 풀(Image Pull) 병목 발생, 병렬화가 항상 최선은 아님을 확인

AI는 반복 구현에, 엔지니어는 문제 정의와 시스템 구조화에 집중하며 AI와 엔지니어링의 협업을 강조

CI 개선의 핵심: 문제 정의와 AI 활용

본문은 채널톡 메인 백엔드 서버의 CI 개선 과정을 상세히 설명하며, AI를 활용한 반복 작업 자동화와 엔지니어의 문제 정의 및 시스템 구조화 역량의 중요성을 강조한다.

AI의 역할: 반복적인 구현, 스크립트 변형, 테스트 헬퍼 코드 수정 등 반복적인 작업 자동화에 기여

엔지니어의 역할: 병목 발견, 문제 분해, 해결 우선순위 결정, 시스템 구조 설계 등 문제 정의 및 전략 수립 담당

결론: AI는 도구일 뿐이며, 문제 해결의 핵심은 엔지니어의 문제 분석 능력과 시스템 설계 능력에 달려 있다.

CI 파이프라인 개선 단계별 분석

채널톡은 CI 파이프라인 개선을 위해 여러 단계를 거쳤으며, 각 단계별로 문제점을 분석하고 해결책을 제시했다.

1단계: 공유 상태 제거: pgtestdb 도입, ci-test 타겟 생성, PostgreSQL 컨테이너 최적화를 통해 테스트 병렬화(Test Parallelization)를 가능하게 함

2단계: 반복 생성 제거: 자동 생성 코드 커밋, diff 분리, 백엔드 빌드와 프런트엔드 산출물 검증 분리를 통해 빌드 시간 단축

3단계: 중복 prepare 제거: 병렬 phase 분리, prepare 재사용, 테스트 격리를 통해 테스트 실행 시간 감소

4단계: 대기 시간 제거: S3 병렬화, sparse checkout, prepare와 테스트 초기화 겹치기를 통해 전환 시간 단축

성능 개선을 위한 다양한 시도와 트레이드오프

CI 성능 개선을 위해 다양한 시도를 했으며, 그 과정에서 얻은 교훈과 트레이드오프를 제시한다.

50노드 실험: 러너 수를 늘렸지만, 이미지 풀(Image Pull) 병목으로 인해 오히려 성능 저하. 병렬화의 한계를 보여줌

입력 해시 기반 캐시: Java 소스, 테스트, submodule, build 설정, 런타임 환경 정보를 묶어 해시를 생성하고, 동일한 경우 prepare 결과 재사용. 빌드 시간 단축에 기여

동적 큐 도입: 테스트 분배 방식을 변경하여, 마지막 테스트 노드의 꼬리 시간(Tail Latency)을 줄임. 테스트 실행 시간 균등화에 기여

AI 네이티브 시대의 엔지니어링 역량

AI 시대에도 엔지니어의 핵심 역량은 변하지 않으며, 문제 해결 능력과 시스템 설계 능력이 더욱 중요해짐을 강조한다.

문제 구조화 능력: 복잡한 문제를 작은 하위 문제로 분해하고, 해결 우선순위를 정하는 능력

시스템 사고: 전체 시스템을 이해하고, 각 구성 요소 간의 상호 작용을 고려하는 능력

측정 기반 개선: 측정 가능한 지표를 설정하고, 지속적으로 개선해 나가는 능력

결론적으로, AI는 도구일 뿐이며, 엔지니어는 AI를 활용하여 문제를 해결하고 시스템을 개선하는 역할을 수행해야 한다.

채널톡 메인 백엔드 서버 CI 개선기