게임 기능별 RACI 매트릭스 자동 보정 운영 가이드: 실제 이슈 이력으로 책임 체계 업데이트하기
게임 기능별 RACI 매트릭스가 실제 이슈 처리 방식과 어긋나는 이유를 짚고 이슈·리뷰·배포 승인 이력을 근거로 책임 역할을 자동 보정하는 데이터 모델, 점수식, 승인 절차와 운영 지표를 정리합니다.

핵심 요약
게임 기능별 RACI 매트릭스는 기획 시점에 한 번 작성하고 끝내는 문서가 아니라 실제 이슈 처리 이력을 반영해 주기적으로 보정해야 합니다. 이슈 담당자 변경, 코드 리뷰, QA 재현과 승인, 배포 승인 같은 이벤트를 기능 단위로 집계하면 현재의 R, A, C, I 후보를 계산할 수 있습니다.
다만 자동 보정의 결과를 곧바로 확정된 책임자로 반영해서는 안 됩니다. 이슈 이력은 강력한 근거이지만 회의, 메신저, 비공식 지원처럼 기록되지 않는 업무를 포함하지 않으므로 점수와 신뢰도를 함께 표시하고 기능 오너의 승인 절차를 둬야 합니다.
게임 기능별 RACI 매트릭스가 실제 업무와 어긋나는 이유
RACI는 다음 네 가지 역할로 업무 책임을 명확하게 구분하는 도구입니다.
| 역할 | 의미 | 게임 개발에서의 예시 |
|---|---|---|
R Responsible | 실제 작업을 수행하는 사람 또는 팀 | 전투 로직 구현, UI 제작, 테스트 케이스 작성 |
A Accountable | 최종 결과를 승인하고 책임지는 사람 | 기능 오너, 릴리스 승인자, 스코프 결정권자 |
C Consulted | 작업 전에 의견을 제공하거나 리뷰하는 사람 | 서버 엔지니어, QA 리드, UX 디자이너 |
I Informed | 진행 상황과 결과를 공유받는 사람 | 라이브 운영팀, 고객지원, 사업 담당자 |
실무에서는 다음과 같은 이유로 문서상의 RACI와 실제 운영 체계가 달라집니다.
- 프로토타입 단계의 담당자가 정식 개발 단계에서도 계속 책임자로 남는다.
- 기능 범위가 커졌지만
A역할을 갱신하지 않는다. - 팀 이동이나 조직 개편 이후에도 이전 담당자의 이름이 남아 있다.
- 이슈는 여러 개의 하위 시스템으로 분리됐지만 RACI는 기능 전체를 하나의 단위로 다룬다.
- 코드 리뷰와 배포 승인은 다른 팀이 수행하지만 문서에는 반영되지 않는다.
따라서 RACI를 정적 문서로만 관리하면 실제 의사결정 경로와 책임 공백을 발견하기 어렵습니다. 반대로 이슈 이력을 그대로 책임 체계로 간주하면 업무량이 많은 사람에게 책임이 과도하게 집중되는 문제가 생깁니다. 핵심은 이슈 이력을 사실의 전부가 아니라 책임 판단을 위한 증거로 사용하는 것입니다.
자동 보정을 위해 어떤 이슈 이력을 수집해야 하는가?
자동 보정의 품질은 알고리즘보다 이벤트 데이터의 정의에 더 큰 영향을 받습니다. 최소한 다음 이벤트를 수집하는 것이 좋습니다.
| 이벤트 | RACI 판단에 사용하는 신호 | 주요 주의점 |
|---|---|---|
| 이슈 생성 | 문제를 처음 정의한 주체 | 단순 제보자는 R로 보지 않음 |
| 담당자 지정 및 변경 | 실행 책임의 이동 | 임시 대행과 정식 인계를 구분 |
| 상태 변경 | 작업 시작과 완료 | 상태 변경만으로 실제 작업량을 확정하지 않음 |
| 댓글 및 멘션 | 협의와 의사결정 참여 | 자동 알림 댓글은 제외 |
| 리뷰 요청 및 승인 | C와 A 후보 | 승인 권한과 단순 확인을 구분 |
| Pull Request 병합 | 구현 완료에 대한 강한 R 신호 | 아트, 기획, QA 작업은 별도 이벤트 필요 |
| 테스트 결과 및 재오픈 | 품질 책임과 협업 신호 | 실패 원인을 담당자에게 자동 귀속하지 않음 |
| 배포 승인 | 최종 A 후보 | 릴리스 단위와 기능 단위를 연결해야 함 |
| 장애 해결 및 사후 조치 | 운영 책임과 기능 소유권 | 긴급 대응자를 영구 오너로 보지 않음 |
데이터에는 사람 이름만 저장하지 말고 당시의 팀과 역할을 함께 저장해야 합니다. 예를 들면 다음 필드를 사용할 수 있습니다.
| 필드 | 설명 |
|---|---|
feature_key | 기능 식별자. 에픽, 컴포넌트, 기능 코드와 연결 |
issue_key | 원본 이슈 식별자 |
event_type | issue_closed, review_approved, release_approved 같은 이벤트 유형 |
actor_id | 이벤트를 수행한 계정의 내부 식별자 |
actor_role_snapshot | 이벤트 발생 당시의 역할 또는 팀 |
event_at | 이벤트 발생 시각 |
evidence_url | 원본 이슈, 리뷰, 배포 기록 링크 |
is_automated | 봇이나 자동화 이벤트인지 여부 |
기능 키를 정규화하는 과정도 중요합니다. 이슈의 라벨만 사용하는 대신 에픽, 컴포넌트, PR의 브랜치 규칙, 배포 티켓을 함께 참조해야 합니다. inventory-save, inventory_ui, save-data처럼 같은 기능을 다른 이름으로 기록하는 경우 자동 보정 결과가 여러 기능으로 분산되기 때문입니다.
RACI 역할 점수는 어떻게 계산하는가?
먼저 각각의 이벤트를 역할별 증거로 변환합니다. 예를 들어 PR 병합은 R에 높은 점수를 주고 배포 승인은 A에 높은 점수를 줍니다.
| 증거 유형 | R | A | C | I |
|---|---|---|---|---|
| 이슈 직접 해결 | 1.00 | 0.20 | 0.00 | 0.00 |
| PR 구현 및 병합 | 1.00 | 0.25 | 0.00 | 0.00 |
| 릴리스 승인 | 0.10 | 1.00 | 0.10 | 0.00 |
| 설계 또는 코드 리뷰 | 0.10 | 0.30 | 1.00 | 0.10 |
| 재현 결과와 수정 방향 제시 | 0.15 | 0.20 | 0.90 | 0.10 |
| 상태 보고 수신 | 0.00 | 0.00 | 0.10 | 1.00 |
위 값은 조직의 운영 방식에 맞게 조정해야 합니다. 예를 들어 QA가 실제 수정 작업까지 수행한다면 테스트 결과 이벤트의 R 점수를 높일 수 있습니다.
최근 이력에 더 높은 가중치를 주는 방법
2년 전 이벤트와 지난주 이벤트를 같은 비중으로 계산하면 현재 조직 구조를 제대로 반영하기 어렵습니다. 다음과 같은 지수 감쇠를 적용할 수 있습니다.
여기서 Δt는 이벤트 이후 경과한 일수이고 h는 반감기입니다. 일반적인 시작값으로 h = 90일을 사용할 수 있지만 프로젝트 주기가 짧다면 30일, 장기 프로젝트라면 180일처럼 조정해야 합니다.
기능 f에 대한 역할 r의 점수는 다음처럼 계산할 수 있습니다.
e(i,r): 이벤트i가 역할r에 해당하는 기본 증거 점수q_i: 이벤트의 품질 계수. 자동화 이벤트는 낮게, 승인 기록은 높게 설정w(t_i): 이벤트의 최신성을 반영한 가중치
점수만으로 역할을 결정하지 말고 관측 수와 일관성으로 신뢰도를 계산해야 합니다.
Coverage는 해당 기능에 충분한 이력 이벤트가 있는지 나타내고 Consistency는 여러 스프린트에서 같은 역할이 반복됐는지를 나타냅니다. 관측 수가 적거나 팀 간 기록 방식이 크게 다르면 신뢰도를 낮춰야 합니다.
실제 이슈 이력으로 RACI 후보를 만드는 예시
다음 표는 구조를 설명하기 위한 가상 데이터입니다. 실제 운영에서는 Jira, Linear, GitHub, GitLab, 테스트 관리 도구와 배포 시스템에서 동일한 형태로 이벤트를 추출합니다.
| 이슈 | 기능 | 주요 이력 | 역할 후보 | 해석 |
|---|---|---|---|---|
GAME-142 | 인벤토리 저장 | 서버 담당자가 수정 후 종료하고 PR 병합 | 서버 엔지니어 R | 실행 증거가 강함 |
GAME-151 | 인벤토리 저장 | 클라이언트 담당자가 저장 UI 변경을 리뷰하고 승인 | 클라이언트 엔지니어 C | 구현자가 아니라 협의 참여자일 수 있음 |
GAME-153 | 인벤토리 저장 | QA가 재현 절차와 회귀 범위를 기록 | QA C | 수정 책임과 검증 책임을 분리 |
GAME-160 | 인벤토리 저장 | 기능 오너가 릴리스 승인 | 기능 오너 A | 최종 의사결정 증거가 강함 |
GAME-161 | 인벤토리 저장 | 고객지원과 라이브 운영에 배포 결과 공유 | 운영팀 I | 정보 수신 역할로 분류 |
이 데이터를 계산한 결과가 다음과 같다고 가정해 보겠습니다.
| 후보 | R 점수 | A 점수 | C 점수 | I 점수 | 신뢰도 |
|---|---|---|---|---|---|
| 서버 엔지니어 | 0.91 | 0.18 | 0.12 | 0.00 | 0.88 |
| 클라이언트 엔지니어 | 0.24 | 0.20 | 0.79 | 0.10 | 0.74 |
| QA | 0.11 | 0.09 | 0.86 | 0.22 | 0.81 |
| 기능 오너 | 0.18 | 0.94 | 0.31 | 0.35 | 0.91 |
| 라이브 운영팀 | 0.00 | 0.10 | 0.15 | 0.88 | 0.68 |
이 경우 자동 보정 제안은 다음과 같습니다.
R: 서버 엔지니어A: 기능 오너C: QA와 클라이언트 엔지니어I: 라이브 운영팀
여기서 중요한 점은 A를 단순히 가장 많은 이슈를 처리한 사람으로 선택하지 않는 것입니다. A는 실행량이 아니라 최종 승인과 의사결정 증거를 중심으로 판단해야 합니다.
RACI 자동 보정은 어떻게 구현하는가?
전체 과정은 이벤트 수집, 기능 연결, 역할 점수 계산, 정책 검증, 승인 반영의 다섯 단계로 나눌 수 있습니다.
flowchart LR
A[이슈 이력 수집] --> B[기능 키 정규화]
B --> C[역할별 증거 점수 계산]
C --> D[신뢰도와 정책 검증]
D --> E[PM 또는 기능 오너 승인]
E --> F[RACI 문서와 변경 이력 갱신]
1단계: 원본 이벤트를 append-only로 저장한다
원본 이력은 수정 가능한 현재 상태 테이블과 분리해 저장합니다. 그래야 나중에 점수식이나 가중치를 변경해도 과거 결과를 다시 계산할 수 있습니다.
interface IssueEvent {
featureKey: string;
issueKey: string;
eventType: string;
actorId: string;
actorRole: string;
occurredAt: Date;
quality: number;
evidenceUrl: string;
}
interface RoleEvidence {
role: 'R' | 'A' | 'C' | 'I';
baseScore: number;
}
원본 이벤트에는 개인의 민감한 정보가 불필요하게 포함되지 않도록 내부 식별자를 사용하고 RACI 화면에는 팀과 직무 수준만 표시하는 방식이 안전합니다.
2단계: 기능과 이슈를 연결한다
기능 연결 우선순위를 미리 정해 두면 자동 분류 결과를 설명하기 쉽습니다.
- 명시적인
feature_key필드 - 에픽 또는 상위 기능 링크
- 컴포넌트와 제품 영역
- 브랜치, PR, 배포 티켓의 규칙
- 텍스트 유사도 기반 추정
텍스트 유사도만으로 기능을 연결하는 방식은 오탐 가능성이 높습니다. 자동으로 연결된 기능은 inferred 상태로 표시하고 사람의 확인 전에는 보정 점수에 낮은 품질 계수를 적용해야 합니다.
3단계: 역할별 점수를 계산한다
다음은 감쇠와 증거 점수를 적용하는 단순한 TypeScript 예시입니다.
const HALF_LIFE_DAYS = 90;
function recencyWeight(ageDays: number): number {
return Math.pow(2, -ageDays / HALF_LIFE_DAYS);
}
function weightedScore(
events: Array<{ baseScore: number; quality: number; ageDays: number }>
): number {
const numerator = events.reduce((sum, event) => {
return sum + recencyWeight(event.ageDays) * event.baseScore * event.quality;
}, 0);
const denominator = events.reduce((sum, event) => {
return sum + recencyWeight(event.ageDays);
}, 0);
return denominator === 0 ? 0 : numerator / denominator;
}
운영 코드에서는 역할별 점수뿐 아니라 다음 값도 함께 저장해야 합니다.
- 사용한 이벤트 수
- 가장 최근 이벤트 날짜
- 점수에 가장 크게 기여한 증거 링크
- 기존 RACI와 달라진 필드
- 계산에 사용한 알고리즘 버전
알고리즘 버전을 기록하지 않으면 같은 이력으로도 결과가 달라졌을 때 변경 원인을 추적하기 어렵습니다.
4단계: 조직 정책으로 잘못된 결과를 차단한다
계산 결과가 높더라도 다음 제약 조건을 통과해야 합니다.
| 정책 | 목적 |
|---|---|
활성 기능에는 최소 한 명의 R과 한 명의 A가 있어야 함 | 책임 공백 방지 |
기능 단위의 A는 기본적으로 한 명 또는 한 팀으로 제한 | 최종 책임 분산 방지 |
C와 I는 여러 명을 허용 | 협업과 정보 공유 반영 |
| 이벤트 수가 임계값보다 적으면 기존 RACI 유지 | 표본 부족으로 인한 오판 방지 |
긴급 장애 대응자는 일정 기간이 지나면 자동으로 A 후보에서 감쇠 | 임시 대응과 영구 소유권 구분 |
| 휴직, 퇴사, 팀 이동 계정은 현재 조직 정보로 재검증 | 오래된 책임자 노출 방지 |
특히 I 역할은 이슈 댓글의 멘션 수만으로 추론하기 어렵습니다. 메일링 리스트, 릴리스 노트 구독, 운영 대시보드 권한처럼 정보 수신을 직접 나타내는 신호가 있을 때만 자동 제안을 허용하는 편이 좋습니다.
5단계: 승인된 결과만 현재 RACI에 반영한다
자동 보정은 다음 세 가지 상태로 운영할 수 있습니다.
| 상태 | 적용 방식 | 적합한 용도 |
|---|---|---|
| 관찰 | 후보만 계산하고 문서에는 반영하지 않음 | 초기 데이터 품질 점검 |
| 제안 | PM 또는 기능 오너가 승인하면 반영 | 대부분의 개발 조직에 적합 |
| 제한적 자동 반영 | C, I 변경처럼 위험이 낮은 항목만 적용 | 운영 안정화 이후 |
A 변경은 반드시 사람이 승인하도록 권장합니다. 책임 변경은 일정, 스코프, 승인 경로에 직접 영향을 주기 때문입니다.
이슈 이력을 RACI에 반영할 때 자주 생기는 함정
이슈를 많이 닫은 사람이 항상 R인가?
그렇지 않습니다. 대량의 단순 이슈를 처리한 사람과 핵심 기능의 설계와 구현을 담당한 사람은 다를 수 있습니다. 이슈 개수 대신 난이도, 예상 작업량, PR 변경량, 실제 완료 이벤트를 함께 사용해야 합니다.
코드 저장소 이력만 보면 되는가?
게임 개발에서는 기획, 레벨 디자인, 3D 아트, QA, 라이브 운영의 산출물이 코드 저장소에 남지 않을 수 있습니다. 따라서 PR 이력만으로 전체 RACI를 계산하면 클라이언트와 서버 개발자에게 책임이 편향됩니다. 기획 승인, 아트 리뷰, 테스트 실행, 배포 검증 이벤트를 별도 데이터로 연결해야 합니다.
자동 보정 결과가 조직 내 갈등을 만들 수 있는가?
가능합니다. 점수 순위만 공개하면 개인 평가나 업무량 비교로 오해받을 수 있습니다. 화면에는 최종 점수보다 역할 후보, 근거 이벤트, 신뢰도, 변경 사유를 중심으로 표시하고 인사 평가 데이터와 분리해야 합니다.
오래된 이슈를 모두 제거해야 하는가?
완전히 제거하기보다 최신성 가중치를 낮추는 편이 좋습니다. 과거 이력은 기능의 책임 변화를 설명하는 감사 기록으로 필요할 수 있습니다. 다만 폐기된 기능이나 조직이 해체된 프로젝트는 현재 계산 대상에서 제외해야 합니다.
운영 지표로 자동 보정의 품질을 검증하는 방법
자동화가 도입됐다는 사실보다 실제 협업 개선 여부를 측정해야 합니다. 다음 지표를 스프린트 또는 릴리스 단위로 비교할 수 있습니다.
| 지표 | 계산 방법 | 확인할 변화 |
|---|---|---|
| RACI 커버리지 | R과 A가 지정된 활성 기능 비율 | 책임 공백 감소 |
| 자동 제안 승인율 | 승인된 제안 수 / 전체 제안 수 | 추론 품질 |
| 책임자 재지정 시간 | 이슈 생성부터 유효한 R 지정까지의 시간 | 초기 대기 감소 |
| 차단 상태 지속 시간 | 블로커 시작부터 해소까지의 시간 | 의사결정 경로 개선 |
| 재배정률 | 동일 이슈의 담당자 변경 횟수 | 잘못된 책임 배정 감소 |
| 오래된 RACI 비율 | 마지막 검토일이 기준 기간을 넘은 기능 비율 | 문서 최신성 |
커버리지는 다음처럼 정의할 수 있습니다.
지표를 개선하려고 점수 임계값을 무리하게 낮추면 잘못된 자동 보정이 늘어날 수 있습니다. 승인율과 재배정률을 함께 봐야 하며 최소 두세 번의 스프린트 또는 한 번 이상의 릴리스 주기 동안 추세를 확인하는 것이 안전합니다.
도입을 위한 단계별 운영 절차
- 현재 RACI 문서와 최근 90일 이슈 이벤트를 수집합니다.
- 기능 키, 팀, 이벤트 유형, 시간 정보를 정규화합니다.
- 역할별 증거 점수와 최신성 가중치를 적용합니다.
- 표본 수, 신뢰도,
R·A중복과 공백을 검증합니다. - 변경 후보와 근거 링크를 PM 및 기능 오너에게 보여줍니다.
- 승인된 변경만 RACI 문서와 프로젝트 도구에 반영합니다.
- 다음 스프린트에서 재배정률과 승인율을 비교합니다.
- 오탐 사례를 이벤트 점수와 기능 연결 규칙에 반영합니다.
처음부터 모든 기능과 모든 역할을 자동화할 필요는 없습니다. 영향도가 높은 전투, 저장, 매치메이킹, 결제 같은 기능부터 시작하고 R과 A 후보만 제안하는 것이 검증하기 쉽습니다. 데이터 품질이 확인된 뒤 C와 I를 확장하는 방식이 현실적입니다.
자주 묻는 질문 FAQ
RACI 자동 보정 결과를 바로 확정해도 되나요?
권장하지 않습니다. 이슈 이력에 기록되지 않은 회의와 비공식 협업이 있으므로 자동 보정은 기본적으로 제안 상태로 두고 A 변경은 기능 오너나 PM의 승인을 거쳐야 합니다.
기능 하나에 A가 여러 명이어도 되나요?
조직 정책상 공동 책임이 필요할 수 있지만 기본값은 한 명 또는 한 팀이 좋습니다. 서버와 클라이언트처럼 하위 시스템별로 최종 책임자가 다르면 기능을 하위 기능으로 분리한 뒤 각 단위에 A를 지정해야 합니다.
이슈 데이터가 적은 신규 기능은 어떻게 처리하나요?
기존 RACI를 유지하고 신뢰도를 낮게 표시합니다. 이슈가 일정 수 이상 쌓이거나 첫 번째 릴리스 승인과 같은 강한 증거가 생성된 뒤 자동 보정 후보로 전환하는 방식이 안전합니다.
정리
게임 기능별 RACI 매트릭스를 살아 있는 운영 문서로 만들려면 계획 문서와 실제 업무 이벤트를 연결해야 합니다. 이슈 해결, 리뷰, 테스트, 배포 승인 이력을 기능 단위로 정규화하고 최신성 가중치와 역할별 증거 점수를 적용하면 책임 체계의 변화를 지속적으로 감지할 수 있습니다.
가장 중요한 운영 원칙은 자동화의 목적을 사람을 평가하는 데 두지 않는 것입니다. 자동 보정은 책임 공백과 오래된 문서를 발견하고 PM과 기능 오너가 더 빠르게 확인하도록 돕는 협업 장치로 운영해야 합니다.



