CI/CD

102 개의 포스트

datadog원문

테스트 시간을 50 (새 탭에서 열림)

개발 효율성을 저해하는 길고 불안정한 CI 파이프라인 문제를 해결하기 위해, 테스트와 소스 코드 간의 의존성을 분석하여 변경된 코드와 관련된 테스트만 선택적으로 실행하는 '테스트 영향 분석(Test Impact Analysis)' 기술이 주목받고 있습니다. Datadog은 Ruby 환경에서 이를 실현하기 위해 성능 저하를 최소화하면서도 기존 도구와 호환되는 전용 라이브러리를 개발하였으며, 이는 전체 테스트 시간을 절반 수준으로 단축하는 성과를 거두었습니다. 이 과정에서 개발 팀은 Ruby 내장 모듈의 한계를 극복하기 위해 C 확장을 통한 저수준 인터프리터 이벤트 활용 방식을 채택했습니다. ## 테스트 영향 분석(TIA)의 개념과 필요성 - 소프트웨어 규모가 커짐에 따라 전체 테스트 수트 실행 시간은 비대해지며, 코드 변경과 무관한 '불안정한 테스트(Flaky tests)'로 인해 CI가 실패하는 빈도가 높아집니다. - 테스트 영향 분석은 각 테스트가 실행될 때 접근하는 소스 파일 목록을 동적으로 맵핑하여 저장하는 기술입니다. - Git 커밋 시 변경된 파일과 맵핑된 파일 목록에 교집합이 있는 테스트만 실행함으로써, 불필요한 리소스 낭비를 줄이고 파이프라인의 안정성을 높일 수 있습니다. - Datadog의 'Intelligent Test Runner'는 이러한 원리를 바탕으로 정확성, 성능, 사용자 투명성을 핵심 가치로 설계되었습니다. ## 기존 Ruby 솔루션의 성능 한계 - **내장 Coverage 모듈:** Ruby 3.1에서 추가된 resume/suspend 메서드를 통해 테스트별 커버리지를 측정할 수 있으나, `simplecov`와 같은 기존 도구와 충돌하며 약 300% 수준의 매우 높은 성능 오버헤드가 발생합니다. - **TracePoint API:** 코드 실행 시 이벤트를 구독하는 표준 API로 구현이 용이하고 호환성도 뛰어나지만, 순수 코드 실행 위주의 벤치마크(RuboCop 등)에서 200~400%의 오버헤드를 기록하여 실무 적용이 어렵습니다. - 이러한 기존 방식들은 대규모 테스트 수트를 빠르게 실행하려는 원래의 목적에 부합하지 않는 성능 결과(기존보다 3~4배 느려짐)를 보였습니다. ## C 확장을 이용한 저수준 인터프리터 이벤트 활용 - 성능 문제를 해결하기 위해 Ruby VM의 내부 동작을 분석하고, C 언어로 직접 커버리지 수집 도구를 개발했습니다. - Ruby 인터프리터 내부에서 사용하는 `rb_thread_add_event_hook` 함수를 활용해 `RUBY_EVENT_LINE` 이벤트를 직접 훅(hook)하는 방식을 취했습니다. - 테스트 시작(start)과 종료(stop) 시점에만 이벤트 훅을 등록 및 해제하며, 실행되는 파일의 경로가 프로젝트 루트 내에 있는지 C 수준에서 빠르게 필터링하여 해시 구조에 저장합니다. - 이 방식은 Ruby 레벨의 추상화 단계를 건너뛰고 VM 이벤트에 직접 접근함으로써, 데이터 수집의 정확성을 유지하면서도 실행 오버헤드를 획기적으로 낮추는 기반이 되었습니다. Ruby 기반의 대규모 프로젝트를 운영 중이라면 매번 전체 테스트를 실행하기보다, 변경 사항에 기반한 지능형 테스트 실행 방식을 도입하여 CI 비용과 시간을 최적화할 것을 권장합니다. 특히 성능에 민감한 환경에서는 표준 API에 의존하기보다 저수준 최적화가 포함된 전문적인 모니터링 도구를 활용하는 것이 효과적입니다.

datadog원문

테스트 시간을 50% 단축하는 Ruby 라이브러리를 만든 방법 (새 탭에서 열림)

소프트웨어 프로젝트의 규모가 커짐에 따라 발생하는 길고 불안정한 CI 파이프라인은 개발 생산성을 저해하는 주요 원인입니다. 데이터독(Datadog)은 코드 변경 사항과 관련된 테스트만 선택적으로 실행하는 '테스트 영향 분석(Test Impact Analysis)' 기술을 통해 이 문제를 해결하고자 했으며, 성능 오버헤드를 최소화한 Ruby용 Intelligent Test Runner를 구축했습니다. 이를 위해 기존 도구들의 한계를 넘어 Ruby VM 인터프리터 이벤트를 직접 활용하는 C 익스텐션을 개발함으로써 테스트 시간을 절반으로 단축하는 성과를 거두었습니다. **테스트 영향 분석의 개념과 필요성** * CI 파이프라인의 병렬 실행은 속도를 높일 수 있지만, 클라우드 컴퓨팅 비용이 증가하고 관련 없는 코드의 결함으로 인한 테스트 실패(Flaky tests) 문제를 해결하지 못합니다. * 테스트 영향 분석은 각 테스트와 해당 테스트가 실행하는 소스 파일 간의 매핑 정보를 동적으로 생성하여 관리합니다. * Git 커밋에서 변경된 파일과 특정 테스트가 의존하는 파일 목록이 겹칠 때만 해당 테스트를 실행하고, 관련이 없는 경우 건너뜁니다. * 이 시스템은 정확성(필요한 테스트를 거르지 않음), 성능(매 커밋마다 실행 가능할 정도로 낮은 오버헤드), 투명성(사용자 코드 수정 없음)이라는 세 가지 핵심 요구사항을 충족해야 합니다. **기존 Ruby 솔루션의 한계** * **내장 Coverage 모듈:** Ruby 3.1에서 추가된 테스트별 커버리지 수집 기능은 `SimpleCov`와 같은 기존 커버리지 도구와 호환되지 않으며, 성능 오버헤드가 약 300%에 달해 테스트 속도가 4배나 느려지는 단점이 있습니다. * **TracePoint API:** VM 이벤트를 구독하는 `TracePoint` 방식은 사용이 간편하고 기존 도구와 충돌하지 않지만, 여전히 200~400% 수준의 높은 성능 저하를 유발하여 실제 개발 환경에 적용하기 어렵습니다. **Ruby VM 이벤트를 활용한 맞춤형 C 익스텐션** * 성능 최적화를 위해 Ruby 소스 코드의 `coverage.c`와 `thread.c`를 분석하여, C 언어 수준에서 직접 인터프리터 이벤트를 가로채는 방식을 채택했습니다. * Ruby의 C API인 `rb_add_event_hook2`를 사용하여 `RUBY_EVENT_LINE` 이벤트를 등록함으로써, 코드가 실행되는 시점에 즉각적으로 파일 정보를 수집하도록 설계했습니다. * `dd_cov_update_line_coverage`와 같은 콜백 함수 내에서 실행 중인 파일이 프로젝트 루트 내에 있는지 확인하는 필터링 로직을 구현하여 데이터 수집의 효율성을 높였습니다. * 이 접근 방식은 Ruby 인터프리터 내부 메커니즘을 직접 활용함으로써 성능 오버헤드를 획기적으로 낮추고, 대규모 테스트 수트에서도 무리 없이 작동합니다. 규모가 큰 Ruby 프로젝트에서 테스트 속도 정체와 CI 비용 증가 문제를 겪고 있다면, 전체 테스트를 매번 실행하는 대신 테스트 영향 분석 도구를 도입하여 파이프라인의 효율성을 극대화할 것을 권장합니다. 특히 성능이 중요한 환경이라면 Ruby 내장 도구에만 의존하기보다 VM 이벤트를 직접 제어하는 방식이 유효한 해결책이 될 수 있습니다.

microsoft원문

관리형 DevOps 풀 – 탄생 비 (새 탭에서 열림)

마이크로소프트는 전사적으로 파편화되어 있던 5,000개 이상의 자가 호스팅 Azure DevOps 풀을 '1ES 호스팅 풀(1ES Hosted Pools)'이라는 단일 서비스로 통합하여 인프라 효율성과 보안성을 극대화했습니다. 이 시스템을 통해 인프라 비용을 60% 이상 절감하고 개발자들이 인프라 관리 대신 제품 개발에 집중할 수 있는 환경을 구축했으며, 내부적인 성공을 바탕으로 최근 외부 고객을 위한 '관리형 데브옵스 풀(Managed DevOps Pools, MDP)'을 출시했습니다. ### 분산된 자가 호스팅 환경의 문제점 * **중복 투자와 비효율:** 수천 개의 팀이 각자 유사한 인프라 관리 도구를 구축하는 데 개발 자원을 낭비했으며, 자동 스케일링 기능 부재로 사용하지 않는 자원에 비용이 지출되었습니다. * **낮은 신뢰성 및 지원 체계:** 팀 규모에 따라 지원 수준이 달라 장애 발생 시 CI/CD 파이프라인 복구 속도에 차이가 발생했습니다. * **보안 및 규정 준수의 어려움:** 인프라가 파편화되어 있어 보안 패치 여부를 추적하기 어렵고, 전사적인 보안 정책이나 컴플라이언스 기준을 일괄 적용하고 감사하는 데 막대한 시간이 소요되었습니다. ### 1ES 호스팅 풀의 핵심 기술적 기능 * **유연한 네트워크 및 이미지 구성:** 사설 네트워크 연결을 지원하여 내부 패키지 저장소나 비밀 관리자에 안전하게 접근할 수 있으며, 팀별 맞춤형 이미지를 베이스 이미지 위에 구축해 사용할 수 있습니다. * **상태 유지 및 성능 최적화:** 기본적으로는 작업마다 새 에이전트를 생성하는 상태 비저장(Stateless) 방식이지만, 로컬 캐시 활용이 필요한 경우 상태 유지(Stateful) 옵션을 제공하며 디스크 공간에 따른 자동 리사이클링을 지원합니다. * **지능형 리소스 관리:** 다양한 Azure SKU 선택은 물론, 과거 데이터를 기반으로 한 에이전트 사전 예열(Standby Agents) 기능을 통해 파이프라인 시작 시간을 단축했습니다. * **비즈니스 연속성 보장:** 특정 지역의 장애에 대비해 여러 지역에 백업 풀을 구성하여 에이전트를 즉시 가동할 수 있는 체계를 갖추었습니다. ### 표준화 시스템 도입의 성과 * **비용 절감:** Azure SPOT VM 활용과 워크로드에 최적화된 SKU 선택, 데이터 기반의 자원 활용도 개선을 통해 인프라 비용을 60% 이상 줄였습니다. * **보안 강화 및 중앙화:** Confidential VM, Trusted Launch, SecureTPM 등 고급 보안 기능을 모든 풀에 일괄 적용했으며, 일관된 텔레메트리 데이터를 통해 규정 준수 여부를 즉각적으로 확인할 수 있게 되었습니다. * **개발 생산성 향상:** 수천 개의 자가 호스팅 풀이 수십 개로 줄어들면서 인프라 관리 부담이 사라졌고, 팀 간 이동 시에도 동일한 도구를 사용하게 되어 개발 환경 적응 기간이 단축되었습니다. 현재 자체적으로 VM 확장 집합(Scale Set)이나 자가 호스팅 에이전트를 운영하며 관리 부담을 느끼고 있다면, 마이크로소프트의 내부 운영 노하우가 집약된 **Managed DevOps Pools(MDP)**로 전환하는 것을 추천합니다. 이를 통해 보안 수준을 높이는 동시에 운영 비용과 관리 오버헤드를 획기적으로 줄일 수 있습니다.

datadog원문

정적 분석기를 Java에서 Rust로 마이그레이션한 방법 (새 탭에서 열림)

Datadog은 정적 분석 도구의 성능 병목 현상을 해결하고 제한된 CI 환경에서의 효율성을 극대화하기 위해 기존 Java 기반의 엔진을 Rust로 완전히 재작성했습니다. 이 과정에서 ANTLR 대신 Tree-sitter를 도입하고 JavaScript 규칙 실행 엔진을 GraalVM에서 Deno(V8)로 교체함으로써, 분석 속도는 3배 향상시키고 메모리 사용량은 10배 절감하는 성과를 거두었습니다. 결과적으로 이번 전환은 고성능 정적 분석을 위해 언어와 런타임 수준의 근본적인 변화가 필수적이었음을 보여줍니다. **Java 기반 정적 분석기의 한계와 환경적 제약** * **CI 자원 최적화 문제:** 고객의 CI 환경(예: GitHub Actions)에서 분석기를 실행할 때, 2코어 및 7GB RAM과 같은 제한된 자원 내에서 Java 분석기는 수천 개의 파일을 스캔하는 데 5분 이상 소요되어 목표치(3분 이내)를 충족하지 못했습니다. * **환경 충돌 및 오버헤드:** Java 기반 분석기는 최신 JVM(17+)을 요구하는데, 이는 고객의 기존 CI 환경에 설치된 Java 버전과 충돌을 일으키거나 불필요한 설정 부담을 주었습니다. * **파싱 성능 저하:** 기존에 사용하던 ANTLR은 대규모 저장소에서 파싱 속도가 느렸고, 특정 언어에 대한 지원이 부분적이라는 기술적 한계가 있었습니다. **Tree-sitter 도입과 Rust로의 전환 결정** * **파서 교체:** 성능 향상을 위해 C로 구현되어 속도가 빠르고 오픈소스 커뮤니티가 활발한 Tree-sitter를 채택했습니다. * **Java 라이브러리의 한계:** Tree-sitter용 Java 라이브러리는 분석기 최적화에 필수적인 패턴 매칭 기능을 지원하지 않는 등 기능이 제한적이었습니다. * **언어 선택의 기로:** Tree-sitter가 가장 견고하게 지원하는 언어가 Rust라는 점에 착안하여, 예측 가능한 성능을 위해 Rust로의 전체 재작성이라는 도전적인 경로를 선택했습니다. **Rust 기반의 새로운 아키텍처 구성** * **AST 구축(Tree-sitter):** Rust는 Tree-sitter 생태계의 "일등 시민(First-class citizen)"으로, 직접적인 라이브러리 연동을 통해 별도의 Java 바인딩 유지보수 없이도 강력한 파싱 기능을 확보했습니다. * **자바스크립트 규칙 실행(Deno):** 정적 분석 규칙은 자바스크립트로 작성되는데, 기존 Java의 GraalVM 대신 Deno(deno-core)를 런타임으로 도입했습니다. * **보안 및 효율성:** Deno의 V8 엔진을 활용하되, 분석 규칙이 디스크나 네트워크에 접근하지 못하도록 `deno-core` 크레이트만 통합하여 보안이 강화된 샌드박스 환경을 구축했습니다. **마이그레이션 결과 및 기술적 권고** 성공적인 Rust 전환을 통해 동일한 프로그램에 대해 Java 버전과 일치하는 분석 결과를 보장하면서도 성능은 3배, 메모리 효율은 10배 개선되었습니다. 특히 리소스가 제한된 CI/CD 파이프라인에서 정적 분석 도구를 운영해야 한다면, JVM과 같은 무거운 런타임보다는 Rust와 같이 저수준 제어가 가능하고 메모리 오버헤드가 적은 언어를 선택하는 것이 장기적으로 유리합니다.

figma원문

C++ 빌드 시간 단축하기 (새 탭에서 열림)

피그마(Figma)는 C++ 코드베이스가 10% 증가할 때 빌드 시간이 50%나 급증하는 문제를 해결하기 위해, 컴파일러로 전송되는 데이터 양(바이트)을 줄이는 전략을 채택했습니다. 하드웨어 업그레이드나 캐싱만으로는 한계가 있음을 깨닫고, 불필요한 헤더 포함을 자동으로 찾아내고 방지하는 자체 도구인 'DIWYDU'와 'includes.py'를 개발하여 빌드 시간을 절반으로 단축했습니다. 결과적으로 빌드 시간의 핵심 지표가 전처리 후의 바이트 수에 비례한다는 점을 입증하며 대규모 개발 환경에서의 생산성을 확보했습니다. ### 헤더 포함 방식과 빌드 속도의 상관관계 * C++ 컴파일 과정에서 전처리기(Pre-processor)는 소스 파일에 포함된 모든 헤더 파일을 하나의 거대한 파일로 합치며, 이는 전이적 의존성(Transitive dependency)을 포함해 컴파일러가 처리해야 할 바이트 수를 기하급수적으로 늘립니다. * 피그마의 분석 결과, 실제 추가된 코드량보다 전처리 후 컴파일러로 전달되는 바이트 수의 증가 폭이 훨씬 컸으며, 이것이 빌드 시간 지연의 주요 원인으로 파악되었습니다. * 대형 파일에서 불필요한 헤더를 수동으로 제거하는 실험을 진행한 결과, 컴파일 바이트는 31%, 콜드 빌드 시간은 25% 감소하며 가설이 증명되었습니다. ### DIWYDU: 불필요한 헤더 제거 자동화 * 구글의 IWYU(Include What You Use)가 너무 엄격하여 적용이 어렵자, 피그마는 더 유연한 자체 도구인 DIWYDU(Don’t Include What You Don’t Use)를 개발했습니다. * 이 도구는 `libclang`의 파이썬 바인딩을 사용하여 추상 구문 트리(AST)를 분석하며, 특정 파일이 포함한 헤더에서 함수, 타입, 변수 등을 직접적으로 사용하는지 확인합니다. * 직접적인 의존성이 없는 헤더를 찾아내어 삭제하도록 플래그를 표시함으로써 모든 기능 브랜치에서 빌드 속도 저하를 방지합니다. * 다만, STL(표준 템플릿 라이브러리)의 프라이빗 헤더 구조나 `libclang` 파이썬 바인딩의 AST 노드 접근 제한(UNEXPOSED_EXPR 등)과 같은 기술적 한계는 존재합니다. ### includes.py를 통한 회귀 방지 및 측정 * 헤더를 실제로 사용하더라도 파일 크기가 너무 커서 빌드 속도를 늦추는 경우를 대비해, 전이적 바이트 수를 측정하는 `includes.py`를 구축했습니다. * Clang을 사용하지 않고 순수 파이썬으로 작성되어 실행 속도가 매우 빠르며(수 초 내외), CI(지속적 통합) 시스템에서 각 PR이 빌드 시간에 미치는 영향을 바이트 단위로 측정합니다. * 특정 PR이 컴파일 바이트 수를 과도하게 늘릴 경우 경고를 발생시켜 개발자가 전방 선언(Forward Declaration)을 사용하거나 헤더를 분리하도록 유도합니다. * 표준 라이브러리는 피그마 내부의 래퍼(Wrapper) 디렉토리를 통해 관리되므로, 표준 헤더의 바이트는 계산에서 제외하여 효율성을 높였습니다. C++ 프로젝트의 빌드 속도를 유지하기 위해서는 단순한 캐싱을 넘어 컴파일러가 처리하는 데이터의 총량을 관리해야 합니다. 불필요한 헤더 의존성을 제거하는 자동화 도구를 CI 파이프라인에 통합하고, '컴파일 바이트 수'를 성능 지표로 모니터링하는 것이 대규모 코드베이스의 개발 효율을 높이는 실질적인 방안이 될 수 있습니다.

datadog원문

Vale을 사용하여 문서 편집 프로세스를 개선 (새 탭에서 열림)

데이터독(Datadog)은 대규모 오픈 소스 기여자와 수많은 제품군을 보유한 환경에서 문서의 일관성과 품질을 유지하기 위해 'Vale'이라는 오픈 소스 산문 린터(Linter)를 도입했습니다. 이를 통해 수동 편집에 드는 리소스를 대폭 줄이고, 스타일 가이드를 코드로 관리함으로써 문서 검토 과정을 자동화하는 성과를 거두었습니다. 결과적으로 작성자가 코드를 제출하기 전 단계에서부터 스스로 문서를 수정할 수 있는 '시프트 레프트(Shift-left)' 문화를 정착시켜 전체적인 문서화 효율을 높였습니다. ### 대규모 문서 기여 관리의 한계 * 데이터독 문서팀은 약 14명의 작가가 1,400명 이상의 기여자(내부 개발자 및 외부 기여자)가 생성하는 문서를 관리하며, 작가 1인당 개발자 비율은 200대 1에 달합니다. * 2023년 한 해에만 35개 이상의 제품과 수백 개의 API, 통합 서비스에 대해 20,000개 이상의 풀 리퀘스트(PR)를 처리했습니다. * 당번 작가는 하루 평균 40개 이상의 PR을 검토해야 하므로, 수동으로 모든 문법, 어조, 스타일 가이드를 확인하는 것은 물리적으로 불가능한 상황이었습니다. ### Vale를 활용한 문서 스타일 린팅 자동화 * 오픈 소스 CLI 도구인 Vale를 작성 환경과 CI(지속적 통합) 워크플로우에 통합했습니다. * GitHub Actions를 통해 PR이 생성될 때마다 Vale이 HTML 및 마크다운 파일을 스캔하여 스타일 규칙 위반 사항을 자동으로 댓글로 남깁니다. * 너무 긴 문장, 불필요한 수식어 사용, 오래된 타자기 습관(이중 공백 등)을 자동으로 감지하여 작가가 검토하기 전에 기여자가 스스로 수정할 수 있게 합니다. ### 스타일 가이드의 코드화 (Codifying Style Guide) * 과거에는 컨플루언스(Confluence)나 위키 등에 흩어져 있던 편집 가이드라인을 `datadog-vale`이라는 오픈 소스 프로젝트를 통해 코드 형태로 변환했습니다. * YAML 형식을 사용하여 검증하고자 하는 스타일 규칙을 정의하며, 정규 표현식(RegEx)을 통해 특정 패턴(예: 옥스퍼드 콤마 누락)을 감지합니다. * 특정 단어(simply, easily 등)를 지양하게 하는 `words.yml`, 라틴어 약어 대신 쉬운 영어를 쓰게 하는 `abbreviations.yml` 등의 규칙을 통해 일관된 어조를 유지합니다. * 휴고(Hugo) 숏코드와 같이 스타일 검사에서 제외해야 할 영역은 정규 표현식으로 필터링하여 오탐지를 방지합니다. ### 실용적인 제언 대규모 팀이나 프로젝트를 운영하고 있다면 스타일 가이드를 단순히 문서로만 남기지 말고, Vale와 같은 도구를 사용해 자동화된 규칙으로 변환하는 것이 좋습니다. 데이터독이 공개한 `datadog-vale` 규칙을 참고하면 옥스퍼드 콤마 사용이나 전문 용어 관리 등을 손쉽게 자신의 프로젝트에 적용해 볼 수 있습니다.

datadog원문

Vale를 사용하여 문서 편집 프로세스를 개선하는 방법 (새 탭에서 열림)

데이터독(Datadog) 문서화 팀은 수많은 기여자 사이에서 일관된 문서 품질을 유지하기 위해 오픈 소스 산문 린터(Prose Linter)인 'Vale'을 도입하여 스타일 가이드 적용을 자동화했습니다. 개발자들이 코드 린터를 사용하듯 문서에도 자동화된 검사 도구를 통합함으로써, 1,400명이 넘는 기여자가 생성하는 방대한 양의 문서를 효율적으로 관리하고 기술 작가의 리뷰 부담을 획기적으로 줄였습니다. 결과적으로 이 시스템은 고품질의 문서를 더 빠르게 배포할 수 있는 '시프트 레프트(Shift-left)' 전략을 실현했습니다. **대규모 문서 관리의 한계와 자동화의 필요성** * 데이터독은 약 1,400명의 내부 및 외부 기여자가 생성하는 35개 이상의 제품 문서를 관리하며, 연간 20,000개 이상의 풀 리퀘스트(PR)를 처리합니다. * 기술 작가 한 명당 개발자 비율이 1:200에 달하는 상황에서, 모든 문서의 문법, 전문 용어, 시제, 성별 중립적 언어 등을 수동으로 검토하는 것은 불가능에 가깝습니다. * LLM(대형 언어 모델)을 사용하더라도 데이터독 특유의 스타일 가이드(예: 옥스퍼드 콤마 사용, 'currently' 같은 시간 표현 지양 등)를 완벽히 준수하기 어렵기 때문에 자동화된 검증 도구가 필수적입니다. **Vale를 활용한 문서 스타일 린팅** * 오픈 소스 도구인 Vale를 GitHub Actions와 통합하여 CI(지속적 통합) 워크플로우 내에서 문서 스타일을 자동으로 검사합니다. * 기여자가 PR을 생성하면 Vale가 `vale.ini` 설정 파일을 바탕으로 HTML 및 마크다운 파일을 스캔하고, 수정이 필요한 부분에 직접 자동 댓글을 남깁니다. * 이를 통해 기여자는 기술 작가가 리뷰를 시작하기 전에 스스로 문장을 수정할 수 있으며, 작가들은 반복적인 스타일 수정 작업에서 벗어나 콘텐츠의 기술적 정확성에 더 집중할 수 있습니다. **스타일 가이드의 코드화와 규칙 적용** * 기존에 Confluence나 위키에 흩어져 있던 복잡한 편집 지침을 YAML 형식의 린트 규칙으로 변환하여 관리합니다. * **불필요한 단어 제거**: `words.yml` 규칙을 통해 'easily', 'simply'와 같이 객관성이 떨어지는 수식어나 불필요한 전문 용어를 감지하여 경고를 보냅니다. * **구두점 및 문법 강제**: `oxfordcomma.yml`과 같은 규칙에 정규 표현식(Regex)을 사용하여 나열된 항목들 사이에 옥스퍼드 콤마가 누락된 경우를 찾아냅니다. * **약어 대체**: 라틴어 약어(e.g., i.e. 등)를 쉬운 영어 표현(for example, that is 등)으로 대체하도록 유도하는 `abbreviations.yml` 규칙을 적용하여 가독성을 높입니다. **실용적인 제언** 규모가 커지는 조직에서 문서의 일관성을 유지하고 싶다면, 스타일 가이드를 단순한 문서로 남겨두지 말고 Vale와 같은 도구를 통해 '코드로서의 문서(Docs-as-code)' 환경에 통합하는 것이 좋습니다. 처음에는 옥스퍼드 콤마나 금지어 목록 같은 간단한 규칙부터 시작하여 점진적으로 자동화 범위를 넓히면 리뷰 효율을 극대화할 수 있습니다.

figma4분 읽기큐레이션 요약

Figma를 빠르게 유지하기

Figma는 2018년 한 대의 MacBook으로 운영하던 성능 테스트 체계가 제품과 조직의 성장으로 한계에 이르자 전면적인 개편을 추진했습니다. 플러그인, FigJam, Dev Mode 등 기능이 늘고 코드베이스가 복잡해지면서 기존의 소수 대형 파일 테스트만으로는 성능 회귀를 조기에 발견하기 어려워졌습니다. 이에 Figma는 모든 코드 변경을 대상으로 실제 하드웨어에서 병렬 성능 테스트를 실행하고, 10분 이내에 결과를 제공하는 확장 가능한 시스템을 목표로 삼았습니다. ## 한 대의 MacBook으로 시작한 성능 테스트 - 2018년 Figma는 한 대의 MacBook에서 동일한 테스트 시나리오를 반복 실행했습니다. - 테스트 결과와 실행 시간은 약 한 시간 간격으로 공유 대시보드에 기록됐습니다. - 당시에는 소수의 대형 디자인 파일만으로도 주요 성능 문제를 확인할 수 있었습니다. - 문서 렌더러 구조를 개선하고 WebAssembly 관련 버그를 해결하면서 Figma의 성능을 약 3배 향상시킨 사례도 있었습니다. - 작은 조직에서 단일 컴퓨터로 테스트하는 방식은 단순하고 비용이 낮다는 장점이 있었습니다. ## 제품과 조직의 성장으로 드러난 한계 - 5년 동안 코드베이스가 커지고 다음과 같은 기능이 추가됐습니다. - 플러그인 - Community 기능 - FigJam - Dev Mode - 수많은 제품 업데이트 - 기존에 사용하던 몇 개의 대형 디자인 파일은 늘어나는 기능과 예외 상황을 충분히 대표하지 못했습니다. - 기능별로 세밀한 성능 테스트를 작성하는 것이 이상적이었지만, 엔지니어와 매니저가 400명 이상으로 늘면서 모든 변경 사항을 한 사람이 추적하기 어려워졌습니다. - 성능 테스트 대상과 코드 변경이 많아지면서 단일 노트북만으로는 출시 전 성능 회귀를 안정적으로 발견할 수 없었습니다. - 원격 근무가 시작된 뒤에도 사무실에 있던 MacBook은 계속 테스트를 실행했고, 결국 2020년 10월 과열됐습니다. - 다른 노트북으로 같은 환경을 재현하려 했지만 테스트가 원활하게 실행되지 않아 새로운 시스템이 필요해졌습니다. ## 세밀한 성능 테스트의 필요성 - **세밀한 성능 테스트(granular performance test)**는 특정 기능이나 사용 패턴을 대규모 조건에서 검증하는 테스트입니다. - 예를 들어 Figma는 다음과 같은 상황을 시뮬레이션할 수 있습니다. - 100명의 협업 편집자가 동시에 파일을 편집 - 여러 사용자가 레이어를 이동 - 동시에 새로운 텍스트 입력 - 사용자가 빠르게 화면을 패닝 - 이런 테스트는 특정 기능의 성능 영향을 정확하게 파악하는 데 유용합니다. - 하지만 기능 수와 엣지 케이스가 계속 증가하면 모든 기능을 수동으로 테스트하는 방식은 조직 규모에 맞게 확장되지 않습니다. ## 새 성능 테스트 시스템의 목표 - Figma는 시스템을 처음부터 다시 설계하며 세 가지 문제를 해결하려 했습니다. - 성능에 영향을 줄 수 있는 기능의 증가 - 테스트 하드웨어 운영의 어려움 - 신뢰할 수 있는 성능 지표의 부족 - 메인 모노레포에 제출되는 **모든 코드 변경**을 테스트해 성능 회귀를 개발 초기에 발견하는 것을 목표로 삼았습니다. - 사용자가 버그를 보고한 뒤 대응하는 대신, 기능이 배포되기 전에 성능 문제를 예방하려 했습니다. - Figma 사용자는 하루에도 여러 시간 제품을 사용하기 때문에 작은 지연도 작업 흐름에 큰 영향을 줄 수 있다고 판단했습니다. - 성능을 기능 개발 이후의 사후 대응이 아니라 개발 과정에 포함되는 품질 기준으로 다루려 했습니다. ## 병렬 실행과 10분 성능 가드레일 - 테스트 대기 시간을 줄이기 위해 여러 테스트를 동시에 실행하는 **병렬 실행(parallel runs)**을 핵심 전략으로 채택했습니다. - 기존 CI에서도 클라우드 러너를 이용한 병렬 테스트를 이미 활용하고 있었습니다. - 성능 테스트 역시 수십 개의 스트레스 시나리오를 동시에 실행해야 목표 시간을 달성할 수 있었습니다. - 성능 가드레일 검사는 개발 흐름을 방해하지 않도록 **10분 이내**에 완료되어야 한다는 기준을 세웠습니다. - 모든 풀 리퀘스트를 실제 하드웨어에서 테스트하려면 피크 시점에 동일한 성능의 테스트 러너 약 100대가 필요했습니다. - 따라서 새로운 체계는 단순히 테스트 수를 늘리는 것이 아니라, 하드웨어를 효율적으로 운영하고 결과를 빠르게 수집하는 구조여야 했습니다. ## 실용적인 결론 성능 테스트는 제품과 조직이 작을 때는 단일 장비와 소수의 대표 시나리오만으로도 충분할 수 있지만, 기능·코드·팀 규모가 커지면 자동화와 병렬화가 필수입니다. 특히 사용자 경험에 직접 영향을 주는 성능은 출시 후 모니터링하는 것보다 모든 코드 변경 단계에서 회귀를 차단하는 가드레일로 운영하는 편이 효과적입니다.

원문 읽기(새 탭에서 열림)
datadog원문

인수 테스트를 신세틱 모니터링으로 마이그레이션한 방법 (새 탭에서 열림)

Datadog의 프론트엔드 개발자 경험(Developer Experience) 팀은 Puppeteer 기반의 불안정한 인수 테스트 시스템을 자사 제품인 'Synthetic Monitoring'으로 전환하여 300명 이상의 엔지니어가 겪던 개발 병목 현상을 해결했습니다. 기존의 수동 스크립팅 방식에서 벗어나 사용자 상호작용을 기록하는 방식으로 전환함으로써 테스트 유지보수 비용을 대폭 절감하고 CI/CD 파이프라인의 안정성을 확보했습니다. 이 과정은 단순한 도구 교체를 넘어, 데이터 기반의 문제 식별과 점진적인 신뢰 구축을 통해 대규모 코드베이스의 테스트 문화를 개선한 사례입니다. ## 기존 Puppeteer 기반 테스트의 문제점 * **높은 불안정성(Flakiness):** 브라우저, 가상 그래픽 엔진, 네트워크 등 제어할 수 없는 외부 요인으로 인해 테스트 결과가 수시로 변하여 개발자들에게 혼란을 주었습니다. * **복잡한 구현 방식:** 버튼 하나를 클릭하기 위해서도 요소의 존재 여부와 활성화 상태를 수동으로 확인하는 스크립트를 작성해야 했으며, 특히 커스텀 드롭다운 같은 복잡한 요소는 구현 난이도가 매우 높았습니다. * **인프라 및 유지보수 부담:** 테스트 코드를 포함한 관련 인프라 코드가 10만 줄에 달했으며, 제품 업데이트 시마다 수동으로 테스트를 수정해야 했습니다. * **긴 실행 시간:** 테스트가 정교해질수록 CI 실행 시간이 늘어나, 가장 긴 작업의 경우 완료까지 약 35분이 소요되는 등 배포 속도를 저해했습니다. ## Synthetic Monitoring을 활용한 솔루션 구축 * **레코딩 기반 테스트:** 코드를 직접 작성하는 대신 실제 페이지 상호작용을 기록하는 방식을 도입하여 스크립팅의 번거로움을 제거했습니다. * **전용 CLI 개발:** CI 환경에서 테스트를 실행하고 결과를 확인할 수 있도록 `synthetics-ci`(이후 `datadog-ci`로 확장)라는 명령줄 도구를 개발했습니다. * **자동화된 워크플로우:** 이 도구는 코드베이스 내의 `.synthetics.json` 파일을 찾아 테스트를 트리거하고, 결과 ID를 폴링(Polling)하여 성공 여부를 사용자에게 가독성 있게 출력합니다. ## 대규모 조직의 성공적인 마이그레이션 전략 * **신뢰 및 데이터 기반 설득:** 정기적인 엔지니어 설문조사를 통해 인수 테스트가 가장 큰 고통임을 데이터로 입증하고, 상세한 문서화와 내부 발표를 통해 새로운 시스템의 이점을 전파했습니다. * **점진적 도입과 비차단(Non-blocking) 모드:** 초기에는 테스트 실패가 전체 빌드를 멈추지 않도록 비차단 작업으로 설정하고 PR 댓글로만 결과를 알림으로써, 개발자들이 시스템에 적응할 시간을 제공했습니다. * **책임 분담과 추적:** Jira를 통해 각 팀에 테스트 소유권을 할당하고 마이그레이션 진행 상황을 추적했으며, 기존 플랫폼을 한 번에 삭제하는 대신 단계적으로 폐지하여 리스크를 최소화했습니다. 이러한 전환 과정은 기술적인 도구의 변화뿐만 아니라, 대규모 조직 내에서 엔지니어들의 신뢰를 얻으며 협업하는 방식의 중요성을 보여줍니다. 새로운 도구가 기존의 고통을 실질적으로 해결해 줄 수 있다는 확신을 주고, 안정적인 전환 프로세스를 제공함으로써 1년여에 걸친 대규모 마이그레이션을 성공적으로 완수할 수 있었습니다.

datadog3분 읽기큐레이션 요약

엔지니어링 스포트

Datadog은 Gartner의 2026년 Observability Platforms 매직 쿼드런트에서 ‘Leader’로 선정되었다고 발표한다. 글은 이를 단일 플랫폼에서 인프라·애플리케이션·로그·보안·디지털 경험·소프트웨어 개발·AI까지 폭넓은 데이터를 통합하고 운영할 수 있는 역량의 근거로 제시한다. 다만 제공된 내용은 제품 영역과 링크 중심의 소개로, Gartner 평가의 세부 기준이나 경쟁사 비교 결과는 포함하지 않는다. ## Gartner 매직 쿼드런트 리더 선정 - Datadog은 Gartner® Magic Quadrant™ for Observability Platforms 2026에서 Leader로 이름을 올렸다고 밝혔다. - 이 발표는 Datadog의 관측성 플랫폼 전략과 제품 범위에 대한 외부 평가를 강조하는 데 목적이 있다. - 제공된 본문에는 Gartner의 평가 점수, 세부 강점·약점, 다른 벤더와의 비교 내용은 제시되지 않았다. ## 통합 인프라 및 애플리케이션 모니터링 - 인프라 영역에서는 다음 기능을 제공한다고 소개한다. - 호스트 및 인프라 모니터링 - 메트릭 수집·분석 - 컨테이너와 Kubernetes 모니터링 및 오토스케일링 - 네트워크, 서버리스, GPU 모니터링 - 클라우드 비용 및 스토리지 관리 - 애플리케이션 영역에는 다음 기능이 포함된다. - APM(Application Performance Monitoring) - 서비스 간 동작을 파악하는 Universal Service Monitoring - Continuous Profiler를 통한 코드 성능 분석 - Dynamic Instrumentation - AI 에이전트 관측성 ## 로그·데이터 관측성 - 로그 관리와 민감 정보 탐지를 통해 로그 데이터를 수집하고 보안 위험을 식별한다. - Observability Pipelines를 사용해 로그와 관측성 데이터를 필터링·변환·라우팅할 수 있다고 설명한다. - 데이터베이스, 데이터 스트림, 데이터 품질, 데이터 처리 작업을 각각 모니터링하는 기능도 제공한다. - 이를 통해 애플리케이션뿐 아니라 데이터 파이프라인과 저장 계층까지 관측 범위를 확장한다. ## 보안과 디지털 경험의 결합 - 보안 제품군에는 다음 기능이 포함된다. - SAST, IAST, 소프트웨어 구성 분석(SCA) - IaC 및 클라우드 보안 - 취약점 관리와 컴플라이언스 - Cloud SIEM, 워크로드 보호 - 애플리케이션·API 보호와 시크릿 스캐닝 - 디지털 경험 영역에서는 실제 사용자 모니터링(RUM), 세션 리플레이, 합성 모니터링, 모바일 앱 테스트, 오류 추적 등을 제공한다. - 따라서 백엔드 장애뿐 아니라 실제 사용자 요청, 모바일 환경, API 오류까지 하나의 관측성 체계에서 분석하는 방향을 제시한다. ## 소프트웨어 개발과 서비스 운영 지원 - CI Visibility, 테스트 최적화, 지속적 테스트, 코드 커버리지 등 개발·배포 과정의 상태를 추적한다. - 내부 개발자 포털, 소프트웨어 카탈로그, SLO, 인시던트 대응, 케이스 관리, 워크플로 자동화 기능도 포함한다. - 운영팀과 개발팀이 모니터링 데이터를 공유하고 장애 대응 및 서비스 수준 관리를 수행하도록 지원하는 구조다. ## AI 기반 운영 - Datadog은 AI 영역에서 다음 기능을 강조한다. - Bits AI Agents와 Bits Chat - 장애 원인 분석을 위한 Bits Investigation - 보안 분석을 위한 Bits Security Analyst - 에이전트 구축용 Bits Agent Builder - MCP Server 및 에이전트 디렉터리 - AI 에이전트 자체의 동작을 관측하는 Agent Observability와 GPU Monitoring도 함께 제공한다. - 이는 AI 애플리케이션을 운영하는 데 필요한 인프라 성능, 모델·에이전트 동작, 보안 및 비용을 함께 관리하려는 접근으로 볼 수 있다. ## 실용적인 시사점 Datadog 도입을 검토한다면 ‘Leader’ 선정만으로 판단하기보다 실제 환경에서 필요한 데이터 소스, 저장 비용, 보존 기간, 알림 품질, 통합 범위, 보안·규정 준수 기능을 검증해야 한다. 특히 인프라부터 애플리케이션, 보안, 사용자 경험까지 한 플랫폼으로 통합할 필요가 큰 조직에 적합성이 높을 수 있다.

원문 읽기(새 탭에서 열림)
datadog원문

TUF와 in-toto를 활용한 Datadog Agent 통합 기능의 안전한 배포 (새 탭에서 열림)

Datadog은 에이전트 통합 기능의 배포 주기를 에이전트 본체와 분리하여 자동화하는 동시에, 전체 공급망의 보안을 보장하기 위해 TUF(The Update Framework)와 in-toto를 도입했습니다. 기존의 TLS나 GPG 방식이 해결하지 못하는 인프라 침해 공격에 대응하기 위해, 개발자의 코드 커밋부터 최종 사용자의 설치 단계까지 모든 과정을 검증 가능한 구조로 설계했습니다. 이를 통해 Datadog은 자동화된 배포의 효율성과 '침해 저항성(Compromise-resilience)'을 갖춘 강력한 보안을 동시에 달성했습니다. ## 자동 배포의 필요성과 보안 과제 * **배포 주기 분리:** 수백 개의 통합 패키지를 에이전트 릴리스와 분리하여 독립적으로 업데이트함으로써 사용자에게 최신 기능을 신속하게 제공하고자 했습니다. * **기존 보안의 한계:** TLS 암호화나 단순 GPG 서명은 중간자 공격(MitM)은 방어할 수 있지만, 개발자와 사용자 사이의 인프라가 침해되어 코드가 변조되는 상황에는 취약합니다. * **침해 저항 시스템 구축:** 인프라의 일부가 장악되더라도 소프트웨어의 진본성과 무결성을 보호할 수 있는 CI/CD 시스템이 필요했습니다. ## in-toto를 통한 소프트웨어 공급망 검증 * **단계별 무결성 보장:** 소프트웨어 공급망을 코드 작성, 패키징(Wheel 파일 생성), 서명 등 일련의 고정된 단계로 정의하고 각 단계마다 입력과 출력에 대한 서명된 메타데이터를 생성합니다. * **최종 검증 과정:** Datadog 에이전트는 설치 시 서명된 메타데이터를 검사하여, 해당 패키지가 지정된 담당자에 의해 정의된 절차대로 생성되었는지 확인합니다. * **4단계 워크플로우:** 1. 개발자가 Python 소스 코드와 YAML 설정 파일을 작성합니다. 2. CI/CD 시스템이 소스 코드를 수신하여 Python Wheel(ZIP 파일)로 패키징합니다. 3. CI/CD 시스템이 동일한 Wheel 파일들에 대해 TUF 서명을 수행합니다. 4. 에이전트가 파일을 다운로드하여 개발자가 서명한 코드와 정확히 일치하는지 최종 확인합니다. ## TUF를 활용한 안전한 키 관리 및 전송 * **신뢰의 뿌리(Root of Trust):** in-toto가 공급망 단계를 검증한다면, TUF는 검증에 사용되는 공개키를 안전하게 배포, 취소, 교체하는 역할을 담당합니다. * **공격 방어:** 메타데이터의 일관성과 진본성을 보장하며, 공격자가 이전 버전으로 되돌리는 롤백(Rollback) 공격이나 무한 재생(Replay) 공격을 방지합니다. * **오프라인 부트스트래핑:** TUF를 통해 신뢰를 오프라인에서 구축하고 하드웨어 키로 개발자 서명 키를 보호함으로써 in-toto의 보안 보장을 더욱 공고히 합니다. ## Yubikey 기반의 하드웨어 보안 서명 * **키 유출 방지:** 개발자는 GPG 서명 키를 생성하고 저장할 수 있는 하드웨어 키(Yubikey)를 사용하며, 키는 장치 외부로 내보낼 수 없습니다. * **다중 보호 계층:** 서명 작업을 승인하기 위해서는 비밀번호(PIN) 입력과 장치에 대한 물리적인 터치가 반드시 필요합니다. * **사용 편의성:** CLI 도구를 통해 in-toto와 GPG 호출 과정을 투명하게 처리하여, 개발자의 업무 흐름을 방해하지 않으면서도 키 침해 위험을 최소화했습니다. ## 사용자 경험과 실용적 결론 * **투명한 보안:** 사용자는 평소와 다름없이 에이전트를 통해 통합 기능을 설치하지만, TUF나 in-toto가 공격을 감지하면 즉시 설치를 차단하고 상세한 오류 메시지를 표시합니다. * **업계 표준 지향:** Datadog은 이처럼 두 기술을 밀접하게 통합함으로써 보안 소프트웨어 배포가 단순히 '선택 사항'이 아닌 업계의 '표준'이 되도록 기여하고 있습니다. * **추천 사항:** 자동화된 CI/CD 환경에서 보안을 강화하려는 조직은 소프트웨어 공급망의 각 단계를 투명하게 기록하는 in-toto와 키 관리 체계를 담당하는 TUF의 조합을 검토할 필요가 있습니다.

datadog3분 읽기큐레이션 요약

ChatOps로 클라우

Datadog은 Gartner의 2026년 Observability Platforms Magic Quadrant에서 ‘Leader’로 선정되었다고 소개한다. 제공된 내용은 이 평가의 세부 근거보다는 Datadog의 제품군과 기능 범위를 보여주는 웹사이트 메뉴 중심으로 구성되어 있어, 리더 선정의 구체적인 점수나 비교 분석은 확인할 수 없다. ## Gartner Magic Quadrant 리더 선정 - Datadog이 **Gartner® Magic Quadrant™ for Observability Platforms 2026**에서 Leader로 평가받았다는 소식을 전한다. - 상세 보고서와 평가 기준은 별도 Gartner 자료 링크로 연결된다. - 제공된 본문에는 다음과 같은 내용은 포함되어 있지 않다. - Gartner의 평가 점수 - 경쟁 업체와의 비교 - 리더로 선정된 구체적인 기술적 근거 - Gartner의 장단점 분석 ## 인프라 및 애플리케이션 모니터링 - 인프라 영역에서는 다음 기능을 제공한다. - 호스트 및 인프라 모니터링 - 메트릭 수집·분석 - 컨테이너와 Kubernetes 모니터링 - 네트워크, 서버리스, 스토리지 모니터링 - 클라우드 비용 및 GPU 모니터링 - Cloudcraft를 통한 클라우드 아키텍처 시각화 - 애플리케이션 영역에는 다음 제품이 포함된다. - APM(Application Performance Monitoring) - Universal Service Monitoring - 지속적 프로파일링 - Dynamic Instrumentation - AI 에이전트 관측성 ## 로그·데이터 관측성 - 로그 관리와 보안 분석을 위한 기능을 제공한다. - Log Management - Sensitive Data Scanner - Audit Trail - Observability Pipelines - 데이터 플랫폼 영역에서는 다음을 다룬다. - 데이터베이스 모니터링 - 데이터 스트림 모니터링 - 데이터 품질 모니터링 - 데이터 작업 및 잡 모니터링 ## 보안 통합 - Datadog은 관측성뿐 아니라 애플리케이션과 클라우드 보안 기능도 함께 제공한다. - 주요 보안 기능은 다음과 같다. - SAST, IAST, 소프트웨어 구성 분석(SCA) - IaC 보안 - CSPM과 CIEM - 취약점 관리 및 컴플라이언스 - Cloud SIEM - 워크로드 보호 - 애플리케이션·API 보호 - 시크릿 스캐닝 ## 사용자 경험과 소프트웨어 전달 - 디지털 경험 관측성 기능으로 실제 사용자 행동과 애플리케이션 품질을 분석한다. - 브라우저·모바일 RUM - 세션 리플레이 - Synthetic Monitoring - 오류 추적 - 제품 분석 및 실험 - 소프트웨어 개발·배포 과정도 관측 대상으로 포함한다. - CI Visibility - 테스트 최적화와 지속적 테스트 - 코드 커버리지 - Feature Flags - IDE 플러그인 - 내부 개발자 포털 ## 서비스 관리와 AI 기능 - 운영팀의 대응과 자동화를 지원하는 기능을 제공한다. - 이벤트 관리 - 서비스 카탈로그 - SLO 관리 - 인시던트 대응 - 워크플로 자동화 - 케이스 관리 - AI 관련 기능으로는 다음이 소개된다. - AI 에이전트 관측성 - Bits AI Agents와 Bits Chat - AI 기반 조사 및 보안 분석 - MCP Server와 Agent Builder - GPU 모니터링 및 AI 통합 ## 실용적인 결론 이 자료는 Datadog이 인프라·애플리케이션·로그·보안·디지털 경험·개발·AI를 하나의 플랫폼에서 통합하려는 전략을 보여준다. 다만 실제 도입을 검토할 때는 Gartner 보고서의 원문뿐 아니라 수집 비용, 데이터 보존 정책, 기존 도구와의 연동성, 팀별 사용성 및 벤더 종속성까지 별도로 비교해야 한다.

원문 읽기(새 탭에서 열림)