프로젝트 임팩트 산정하는 것은 매우 중요하고 또 어려운 일이라고 생각한다. 약 2년 동안 근무하면서 이 임팩트를 계산하고 판단해야 하는 일이 있었는데 그 때 당시 혼자 엔지니어링 업무를 진행했었기 때문에 생각보다 간단했다. 그러나 어느정도 규모가 있고 다른 팀과 협업해서 진행해야 하는 업무가 있다면 이를 정량화하고 정확히 파악하는 것은 프로젝트의 성공과 향후 개선의 핵심이라고 느껴진다. 원티드랩에서는 임팩트를 원화 단위의 가치로 환산해 산정한다고 한다. 굉장히 흥미롭고 현실적인 조언을 주셔서 리뷰해보기로 했다 :)
기술 블로그 출처
목표 설정
Apache Kafka를 도입하기 전까지 대부분 데이터를 배치로 처리하고 실시간성이 필요한 사용자 행동 데이터의 경우 외부 툴(Amplitude)에 의존해왔다. 실시간 인프라의 부재를 느껴 여러 조사를 했고 Apache Kafka가 적합하다고 판단하여 채택했다.
* Amplitude: 실시간으로 사용자 행동 데이터를 수집하고 분석하는 데 도움을 주는 분석 및 통계 도구이다. 주로 모바일 앱 및 웹 애플리케이션의 데이터를 수집하고 이를 시각화하여 제품의 사용자 경험과 성과를 평가하는데 사용된다.
주요 목표
- 이벤트: 수많은 외부 SDK 사용 → 단일 endpoint로 통합
- 실시간 인프라가 있기 전에는 SDK를 통해 사용자 행동 데이터를 분석 플랫폼으로 전송했다. 하지만 다양한 툴을 도입하면서 이벤트 데이터는 점점 산재되고 클라이언트의 이벤트 전송 코드는 길어졌다. 카프카 도입 후 모든 이벤트를 중앙으로 모은 후, 그 곳에서 각각의 툴로 전송하는 방식으로 바꿨다.
- CDC를 실시간 이벤트로 전환
- 기존에는 이를 배치로 처리해 history 기록 이상으로 사용하기 어려웠으나 kafka를 통해 row 변경 이력을 이벤트 처럼 사용할 수 있게 되었다. 예를 들어, 이력서 변경사항을 실시간으로 수집하는 기능이나 검색 시스템 색인을 업데이트 하는 기능 등이 있다.
* SDK: SDK란 Software Development Kit의 약자로 하드웨어 플랫폼, 운영 체제 또는 프로그래밍 언어 제작사가 제공하는 일련의 툴이다. SDK는 개발자들이 특정 플랫폼, 응용 프로그램, 또는 하드웨어와 상호작용할 수 있도록 필요한 도구, 라이브러리, 문서 등을 제공하는 패키지이다.
* CDC: CDC란 Change Data Capture의 약자로 변경된 데이터를 사용하여 동작을 취할 수 있도록 데이터를 결정하고 추적하기 위해 사용되는 여러 소프트웨어 디자인패턴들의 모임이다.
임팩트 산정
세가지 방법이 있는데 첫번째 방법은 개발한 프로젝트로 인해 절약되는 개발 시간의 기회 비용으로 임팩트를 산정하는 것이고, 두번째 방법은 유사한 서비스를 운영하는 회사와 비교해 임팩트를 산정하는 것이다. 마지막으로 세번째 방법은 서비스 구현시 인프라 사용량 절약을 통한 임팩트를 산정하는 것이다.
1. 개발한 프로젝트로 인해 절약되는 개발 시간의 기회 비용으로 임팩트 산정하기
구성원의 평균 근무 시간당 가치를 N원이라고 사정해보자.
- SDK → 단일 endpoint
- 현재 클라이언트 개발자들이 amplitude 등 이벤트에 쏟는 시간은 대략 전체 업무의 10%이다.
- Kafka를 사용할 경우 작업 소요시간이 1/2로 줄어든다고 가정한다.
- 시간당 현재 비용: 스쿼드 별 3명, 영향 받는 스쿼드 개수 8개 → N * 3명 * 8스쿼드 * 10% = 2.4N
- 현재 연간 총 이벤트 삽입 비용: 영업일 252일, 근무시간 8시간 → 2.4N * 252 영업일 * 8 시간 = 4838.4N
- 총 절약 비용: 4838.4N * 50% (소요시간 단축 비율) = 2419.2N
- 임팩트: 평균 근무 시간당 가치 N ₩100,000 = ₩241,920,000
- CDC 실시간 이벤트 전환
- 리서치부터 구현까지 절약한 시간 비율을 어림잡아 1/2라고 가정한다.
- 시간당 현재 비용: 스쿼드 별 2명, 영향 받는 스쿼드 개수 5개, 연간 2스프린트 소모 → N * 2 명 * 8 시간 * 10 영업일(1스프린트) * 2스프린트 * 5스쿼드 = 1,600N
- 총 절약 비용: 1,600N * 50% (소요시간 단축 비율) = 800N
- 임팩트: 평균 근무 시간당 가치 N ₩100,000 = ₩80,000,000
2. 유사한 서비스를 운영하는 회사와 비교해 임팩트 산정하기
이벤트 관련 SaaS를 제작하는 A사에서 비슷한 서비스를 개발하는 팀에 대한 기사를 참고했다. 내용에는 백엔드 엔지니어 19명, 데이터 엔지니어 7명이 풀타임으로 프로젝트에 매진한다고 한다. 그리고 해당 플랫폼을 이용할 경우 내야하는 금액은 연간 ₩25,000,000이다.
- A사의 서비스 개발 비용: N * (19 + 7) 명 * 8 시간 * 252 영업일 + ₩25,000,000 플랫폼 지불 비용 = 52,416N + ₩25,000,000
- 원티드 서비스 개발 비용: N * 4(1 리더, 2 엔지니어, 1 거버넌스 매니저) * 8 시간 * 252 영업일 = 8,064N
- 임팩트: 평균 근무 시간당 가치 N ₩100,000 = (52,416N + ₩25,000,000) — 8,064N = ₩4,460,200,000 (약 45억원)
3. 서비스 구현시 인프라 사용량 절약을 통한 임팩트 산정하기
일반적으로 컨슈머는 항상 떠있는 상태로 메세지를 소비하나 원티드의 경우 특정 컨슈머는 상시로 떠있을 필요가 없어 1시간에 한번 씩 배치로 처리했다. 이 때 컨슈머 구현은 AWS ECS Fargate를 사용했다.
- ECS Fargate 비용은 시간당 대략 0.01 USD이다.
- 배치 방식을 도입한 컨슈머는 총 32개이다.
- Kafka 파티션 당 서버 instance가 하나씩 붙는데 평균 파티션 수는 3개이다.
- 상시로 서버 instance가 떠있는 경우
- 시간당 비용: $0.01 * 32 (컨슈머 수) * 3 (평균 파티션 개수) = $0.96
- 연간 비용: $0.96 * 24 *365 = $8,409.6
- 배치코드는 1시간에 한번, 1분 동안만 실행한다.
- 상시 서버에 비해 1/60 사용량이 책정된다.
- 총 절약 비용: $8,409.6 — (8,409.6 * 1/60) = $8,269.44
- 임팩트: 달러 당 환율 ₩1,300 = ₩10,750,272
첫번째 방법의 임팩트는 약 3억 2천만원이고 두번째 방법의 임팩트는 약 45억원, 세번째 방법은 약 천만원으로 산정되었다. 어떤 지표로 산정하냐에 따라 금액이 천차만별로 나왔지만 변하지 않는 핵심은 작업에 들어가는 리소스를 파악하고 이 작업이 해결하는 영향 범위를 파악하는 것이다.