DevLake를 활용한 DORA Metrics 지표 수집 및 시각화 도입기
안녕하세요, 비브로스 DevOps 엔지니어 박도준 입니다.
최근 DevOps 팀에서는 개발 효율성과 안정성을 객관적인 지표로 검증하기 위한 다양한 작업들을 수행하고 있습니다.
그중 이번 글에서는 DORA Metrics 도입 사례를 소개하려 합니다. 지표를 어떻게 수집하고 시각화했는지, 그리고 그 과정에서 겪은 이슈들을 어떻게 해결했는지에 대해 공유드리겠습니다.
DORA Metrics 도입 배경
DORA Metrics를 도입한 배경은 아래 두가지입니다.
첫째, 지난 1~2년간은 CI/CD 환경을 자동화하고 안정화하는 데 집중했고, 이제는 그 결과를 객관적인 지표로 검증하고 개선할 수 있는 환경이 필요해졌습니다.
둘째, AI 도구의 빠른 발전과 확산으로 사내에서도 업무 효율 향상을 위해 AI를 적극 활용하고 있습니다.
그러던 중 문득 아래와 같은 궁금증이 생겼습니다.
“AI 도입으로 실제 생산성이 향상되었을까?”
”AI 사용이 안정성에 부정적인 영향을 주지는 않을까?”
위 두 가지 배경은 "측정할 수 없다면, 개선할 수도 없다"는 피터 드러커의 말처럼 객관적인 지표가 필요했고, 최종적으로 DORA Metrics를 활용한 측정 체계를 도입하게 되었습니다.
DORA Metrics란?
DORA Metrics는 소프트웨어 딜리버리 성과를 정량적으로 측정하기 위한 핵심 지표 체계입니다.
여기서 DORA(DevOps Research and Assessment)는 지난 10년 이상 우수한 소프트웨어 팀과 조직의 성과, 문화, 관행 및 측정 방법을 연구해온 연구 프로젝트입니다.
해당 연구에서 반복적으로 검증된 4가지 핵심 지표를 정의했고, 이를 DORA Four Keys라고 부릅니다. 이 지표는 크게 소프트웨어 변경의 처리량과 안정성 두 가지 항목으로 분류됩니다.
- 변경 리드 타임 (Change Lead Time):** 코드 커밋 또는 변경 사항이 성공적으로 프로덕션에 배포되는 데 걸리는 시간
- 배포 빈도 (Deployment Frequency): 애플리케이션 변경 사항이 프로덕션에 얼마나 자주 배포되는지를 측정
- 변경 실패율 (Change Fail Rate): 프로덕션에 배포된 변경 사항 중 실패를 유발해 핫픽스나 롤백이 필요한 배포의 비율
- 실패한 배포 복구 시간 (Failed Deployment Recovery Time): 프로덕션에서 발생한 실패로부터 복구하는 데 걸리는 시간
환경 구성
도구 선정
DORA Metrics 수집 및 시각화를 위해 다양한 도구를 검토했습니다.
내부 인프라 환경과 운영 방식에 맞춰, 다음과 같은 기준으로 후보 도구들을 비교 분석했습니다.
- 오픈소스 여부 : 비용 최소화 및 커스터마이징 가능성
- 시각화 연동성 : Grafana 등 기존 대시보드와의 통합 여부
- 데이터 연동 범위 : Github, Jira 등 기존 도구와의 통합 가능성
- 설치/운영 제약 : 클라우드 의존성, 설치 복잡도, 유지보수 상태 등
아래는 주요 도구에 대한 비교 표입니다.
도구 | 오픈소스 | Grafana 연동 | GitHub 연동 | Jira 연동 | 기타 제약 사항 |
---|---|---|---|---|---|
Apache DevLake | ✅ | ✅ | ✅ | ✅ | Docker/Kubernetes 필요 |
Four Keys (by Google) | ✅ (아카이브됨) | ✅ | ✅ | ❌ (제한적) | GCP 필요, 유지보수 중단 |
Sleuth | ❌ | ❌ | ✅ | ✅ | 커스터마이징 어려움 |
Atlassian Compass | ❌ | ✅ | ✅ | ✅ | 서비스형 중심, 확장성 제한 |
위 비교 결과를 바탕으로, Apache DevLake를 최종 선택했습니다.
설치를 위해 Docker/Kubernetes 환경이 필요하다는 제약이 있지만, 이미 내부적으로 EKS 환경을 운영하고 있어 큰 제약이 되지 않았습니다.
DevLake 구성
[DevLake 아키텍처 요약]
DevLake는 다양한 DevOps 도구로부터 데이터를 수집하고 정제한 뒤, 이를 시각화하여 엔지니어링 효율성과 개발자 경험 개선에 도움이 되는 인사이트를 제공하는 오픈소스 플랫폼입니다.
DevLake의 전체 구성은 아래와 같이 이루어져 있습니다.
- Config UI
- 블루프린트를 생성·실행·디버깅할 수 있는 웹 UI로, 데이터 소스 위치, 수집 범위, 변환 방식, 동기화 주기 등을 설정합니다.
- API Server
- DevLake의 메인 API 인터페이스로, 설정된 정보를 바탕으로 Runner 및 Dashboard와 통신합니다.
- Runner
- 실제 수집 작업을 실행하는 컴포넌트로, 플러그인을 통해 데이터를 가져옵니다.
- 기본적으로 API Server 안에서 작동하며, 시간 기반 실행도 지원합니다. (beta)
- Database
- 수집된 메타 데이터와 사용자 데이터를 저장합니다. (MySQL 및 PostgreSQL 지원)
- Plugins
- GitHub, Jira, Jenkins 등 다양한 DevOps 도구와 연동되는 플러그인을 통해 데이터를 수집·분석할 수 있습니다.
- Dashboards
- Grafana 기반의 대시보드에서 데이터를 시각화하여 인사이트를 제공합니다.
[데이터 처리 구조]
DevLake의 데이터 수집 흐름은 3단계 레이어 구조로 구성되어 있으며, 다양한 도구의 데이터를 통일된 형태로 가공하는 데 유리합니다.
- Raw Layer (원시 레이어)
- DevOps 도구의 API 응답을 JSON 형태로 저장합니다.
- 이는 중복 호출 방지, 캐시 활용, 후처리 편의성을 위한 원시 데이터 저장소 역할을 합니다.
- Tool Layer (도구 레이어)
- Raw 데이터를 DevOps 도구별 스키마에 맞게 가공합니다.
- Domain Layer (도메인 레이어)
- 다양한 도구의 데이터를 공통 도메인 모델로 추상화합니다
- 예를 들어, GitHub PR과 GitLab PR은 tool layer에선 별도 테이블이지만, domain layer에선 하나의 테이블로 통합됩니다.