33 KiB
33 KiB
SVN/Git 커밋 내역 연동 작업계획서
작성일: 2026-01-10 예상 기간: 2~3주 우선순위: 7 선행 작업: 2번 (사업-프로젝트 계층 구조)
1. 기능 개요
1.1 핵심 컨셉
- 프로젝트별 SVN/Git 저장소 주소 관리 (다중 가능)
- 해당 주차 커밋 이력 자동 수집
- 주간보고 작성 시 커밋 코멘트 참고용 표시
- 작성자가 커밋 내용 보고 업무 내용 작성에 활용
1.2 전체 흐름
[관리자/PM - 프로젝트 설정]
프로젝트별 저장소 주소 등록
↓
[시스템 - 자동 수집]
주기적으로 커밋 이력 수집 (Cron)
↓
[개발자 - 주간보고 작성]
해당 주차 본인 커밋 내역 참고하며 작성
1.3 결정 사항
| # | 항목 | 결정 |
|---|---|---|
| 1 | 저장소 타입 | SVN, Git 둘 다 지원 |
| 2 | 저장소 개수 | 프로젝트당 다중 저장소 가능 |
| 3 | 수집 방식 | 하이브리드: 스케줄(1일1회) + 새로고침 버튼 |
| 4 | VCS 아이디 관리 | 도메인(서버) 단위로 사용자별 아이디 관리 |
| 5 | 커밋 매칭 | VCS 서버 + 아이디 → 시스템 사용자 매칭 |
| 6 | 용도 | 참고용 표시 (자동 입력 X) |
| 7 | 조회 화면 | 프로젝트별 VCS 주소 기준 커밋 조회 |
2. 데이터 모델
2.1 VCS 서버 테이블 (도메인 단위)
-- VCS 서버 (도메인) 관리
CREATE TABLE wr_vcs_server (
server_id SERIAL PRIMARY KEY,
server_type VARCHAR(10) NOT NULL, -- SVN, GIT
server_url VARCHAR(300) NOT NULL, -- github.com, svn://192.168.1.100
server_name VARCHAR(100), -- 표시용 이름 (예: "사내 SVN", "GitHub")
description TEXT,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT NOW(),
UNIQUE(server_url)
);
-- 예시 데이터
INSERT INTO wr_vcs_server (server_type, server_url, server_name) VALUES
('GIT', 'github.com', 'GitHub'),
('GIT', 'gitlab.company.com', '사내 GitLab'),
('SVN', 'svn://192.168.1.100', '사내 SVN');
2.2 사용자별 VCS 계정 테이블
-- 사용자별 VCS 서버 계정 (도메인별로 아이디 관리)
CREATE TABLE wr_employee_vcs_account (
account_id SERIAL PRIMARY KEY,
employee_id INTEGER NOT NULL REFERENCES wr_employee_info(employee_id),
server_id INTEGER NOT NULL REFERENCES wr_vcs_server(server_id),
vcs_username VARCHAR(100) NOT NULL, -- SVN/Git 사용자명
vcs_email VARCHAR(100), -- Git 커밋 이메일 (Git만 해당)
created_at TIMESTAMP DEFAULT NOW(),
UNIQUE(employee_id, server_id) -- 사용자당 서버별 1개
);
CREATE INDEX idx_vcs_account_employee ON wr_employee_vcs_account(employee_id);
CREATE INDEX idx_vcs_account_server ON wr_employee_vcs_account(server_id);
2.3 저장소 정보 테이블
-- 프로젝트별 저장소 (VCS 서버 하위)
CREATE TABLE wr_repository (
repo_id SERIAL PRIMARY KEY,
project_id INTEGER NOT NULL REFERENCES wr_project_info(project_id),
server_id INTEGER NOT NULL REFERENCES wr_vcs_server(server_id),
repo_name VARCHAR(100), -- 표시용 이름
repo_path VARCHAR(500) NOT NULL, -- 저장소 경로 (예: /company/frontend.git, /pims/trunk)
branch_name VARCHAR(100), -- Git: 브랜치명 (기본: main)
is_active BOOLEAN DEFAULT true,
last_sync_at TIMESTAMP,
last_sync_status VARCHAR(20), -- SUCCESS, FAILED
last_sync_message TEXT,
created_at TIMESTAMP DEFAULT NOW(),
created_by INTEGER REFERENCES wr_employee_info(employee_id)
);
CREATE INDEX idx_repository_project ON wr_repository(project_id);
CREATE INDEX idx_repository_server ON wr_repository(server_id);
-- 전체 URL = wr_vcs_server.server_url + wr_repository.repo_path
-- 예: github.com + /company/frontend.git = github.com/company/frontend.git
2.4 커밋 이력 테이블
CREATE TABLE wr_commit_log (
commit_id SERIAL PRIMARY KEY,
repo_id INTEGER NOT NULL REFERENCES wr_repository(repo_id),
commit_hash VARCHAR(100) NOT NULL, -- Git: SHA, SVN: revision
commit_message TEXT,
commit_author VARCHAR(200), -- 커밋 작성자 (원본)
commit_email VARCHAR(200), -- 커밋 이메일 (Git)
commit_date TIMESTAMP NOT NULL,
employee_id INTEGER REFERENCES wr_employee_info(employee_id), -- 매칭된 사용자
files_changed INTEGER,
insertions INTEGER,
deletions INTEGER,
synced_at TIMESTAMP DEFAULT NOW(),
UNIQUE(repo_id, commit_hash)
);
CREATE INDEX idx_commit_repo ON wr_commit_log(repo_id);
CREATE INDEX idx_commit_date ON wr_commit_log(commit_date);
CREATE INDEX idx_commit_employee ON wr_commit_log(employee_id);
2.5 데이터 관계도
┌─────────────────┐
│ wr_vcs_server │ (도메인 단위: github.com, svn://192.168.1.100)
└────────┬────────┘
│
┌────┴────┐
↓ ↓
┌─────────┐ ┌──────────────────────┐
│wr_repos │ │wr_employee_vcs_account│
│itory │ │ (사용자별 도메인 아이디)│
└────┬────┘ └──────────────────────┘
│
↓
┌──────────────┐
│wr_commit_log │ (커밋 이력)
└──────────────┘
3. API 설계
3.1 VCS 서버 관리 API (관리자)
| Method | Endpoint | 설명 |
|---|---|---|
| GET | /api/vcs-server | VCS 서버 목록 |
| POST | /api/vcs-server | VCS 서버 추가 |
| PUT | /api/vcs-server/[id] | VCS 서버 수정 |
| DELETE | /api/vcs-server/[id] | VCS 서버 삭제 |
3.2 사용자 VCS 계정 API
| Method | Endpoint | 설명 |
|---|---|---|
| GET | /api/my/vcs-accounts | 내 VCS 계정 목록 |
| POST | /api/my/vcs-account | VCS 계정 등록/수정 |
| DELETE | /api/my/vcs-account/[serverId] | VCS 계정 삭제 |
3.3 저장소 관리 API
| Method | Endpoint | 설명 | 권한 |
|---|---|---|---|
| GET | /api/project/[id]/repositories | 프로젝트 저장소 목록 | 멤버 |
| POST | /api/project/[id]/repository | 저장소 추가 | PM+ |
| PUT | /api/repository/[id] | 저장소 수정 | PM+ |
| DELETE | /api/repository/[id] | 저장소 삭제 | PM+ |
| POST | /api/repository/[id]/sync | 수동 동기화 | PM+ |
3.4 커밋 조회 API
| Method | Endpoint | 설명 |
|---|---|---|
| GET | /api/project/[id]/commits | 프로젝트 커밋 목록 (필터: 기간, 작성자) |
| GET | /api/commits/my-weekly | 내 이번 주 커밋 (주간보고용) |
| POST | /api/project/[id]/commits/refresh | 최신 커밋 새로고침 |
4. 화면 설계
4.1 관리자 - VCS 서버 관리 (/admin/vcs-server)
┌─────────────────────────────────────────────────────────────────┐
│ ⚙️ VCS 서버 관리 [+ 서버 추가] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 🟢 [Git] GitHub │ │
│ │ github.com │ │
│ │ [수정] [삭제] │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 🟢 [Git] 사내 GitLab │ │
│ │ gitlab.company.com │ │
│ │ [수정] [삭제] │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 🔶 [SVN] 사내 SVN │ │
│ │ svn://192.168.1.100 │ │
│ │ [수정] [삭제] │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
4.2 마이페이지 - VCS 계정 설정
┌─────────────────────────────────────────────────────────────────┐
│ 마이페이지 > VCS 계정 설정 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ※ 커밋 내역 조회 시 아래 정보로 본인 커밋을 찾습니다. │
│ │
│ ─────────────────────────────────────────────────────────────── │
│ │
│ 🟢 GitHub (github.com) │
│ 사용자명: [hyosung_______________] │
│ 이메일: [hyosung@gmail.com_____] │
│ │
│ 🟢 사내 GitLab (gitlab.company.com) │
│ 사용자명: [cho.hyosung___________] │
│ 이메일: [hyosung@company.com___] │
│ │
│ 🔶 사내 SVN (svn://192.168.1.100) │
│ 사용자명: [hyosung_______________] │
│ │
│ ─────────────────────────────────────────────────────────────── │
│ │
│ [저장] │
│ │
└─────────────────────────────────────────────────────────────────┘
4.3 프로젝트 상세 - 저장소 관리
┌─────────────────────────────────────────────────────────────────┐
│ 프로젝트: PIMS 시스템 [수정] [삭제] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 📋 기본 정보 │
│ ... │
│ │
│ 📁 저장소 관리 [+ 저장소 추가]│
│ ─────────────────────────────────────────────────────────────── │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 🔶 [SVN] 메인 저장소 │ │
│ │ 사내 SVN > /pims/trunk │ │
│ │ 마지막 동기화: 2026-01-10 06:00 ✅ │ │
│ │ [동기화] [수정] [삭제] │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 🟢 [Git] Frontend │ │
│ │ GitHub > /company/pims-frontend.git (main) │ │
│ │ 마지막 동기화: 2026-01-10 06:00 ✅ │ │
│ │ [동기화] [수정] [삭제] │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 🟢 [Git] Backend │ │
│ │ GitHub > /company/pims-backend.git (main) │ │
│ │ 마지막 동기화: 2026-01-10 06:00 ✅ │ │
│ │ [동기화] [수정] [삭제] │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ [📊 커밋 내역 보기] │
│ │
└─────────────────────────────────────────────────────────────────┘
4.4 프로젝트 커밋 조회 (/project/[id]/commits)
┌─────────────────────────────────────────────────────────────────┐
│ 📊 PIMS 시스템 - 커밋 내역 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 기간: [2026-01-06] ~ [2026-01-10] │
│ 저장소: [전체 ▼] 작성자: [전체 ▼] │
│ [검색] [🔄 새로고침] │
│ │
│ ───────────────────────────────────────────────────────────────│
│ 날짜 저장소 작성자 메시지 │
│ ───────────────────────────────────────────────────────────────│
│ 01-10 14:30 [Git] Frontend 조효성 로그인 버그 수정 │
│ 01-10 11:00 [Git] Backend 조효성 OAuth 콜백 처리 │
│ 01-10 09:00 [Git] Frontend 서혜원 대시보드 차트 수정 │
│ 01-09 16:00 [SVN] 메인 r1234 조효성 사용자 관리 수정 │
│ 01-09 14:00 [Git] Backend 홍길동 API 엔드포인트 추가│
│ 01-08 10:30 [SVN] 메인 r1233 조효성 DB 스키마 변경 │
│ ... │
│ │
│ ───────────────────────────────────────────────────────────────│
│ 이번 주 커밋: 총 25건 | +1,234줄 / -456줄 │
│ │
│ [1] [2] [3] ... [5] │
│ │
└─────────────────────────────────────────────────────────────────┘
4.5 주간보고 작성 - 커밋 내역 참고
┌─────────────────────────────────────────────────────────────────┐
│ 📝 주간보고 작성 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 연도/주차: [2026] 년 [2] 주차 │
│ 프로젝트: [PIMS 시스템 ▼] │
│ │
│ ─────────────────────────────────────────────────────────────── │
│ │
│ 📋 이번 주 내 커밋 (참고용) [🔄 새로고침]│
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 01-10 금 14:30 [Git-Frontend] 로그인 기능 버그 수정 │ │
│ │ │ │
│ │ 01-10 금 11:00 [Git-Backend] OAuth 콜백 처리 추가 │ │
│ │ │ │
│ │ 01-09 목 16:00 [SVN] r1234 사용자 관리 페이지 수정 │ │
│ │ │ │
│ │ 01-08 수 10:30 [SVN] r1233 DB 스키마 변경 │ │
│ │ │ │
│ │ ─────────────────────────────────────── │ │
│ │ 총 4건 | +156줄 / -42줄 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ※ VCS 계정 미등록 시: │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ VCS 계정이 등록되지 않았습니다. │ │
│ │ [마이페이지 > VCS 계정 설정]에서 등록해주세요. │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ─────────────────────────────────────────────────────────────── │
│ │
│ 금주 업무: │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ (위 커밋 내역 참고하여 작성) │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
5. 커밋 수집 로직
5.1 수집 방식 (하이브리드)
┌─────────────────────────────────────────────────────────────────┐
│ 커밋 수집 방식 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ [자동 스케줄] │
│ └─ 매일 새벽 6시 Cron으로 전체 저장소 동기화 │
│ └─ 수집된 커밋 → wr_commit_log 테이블에 저장 │
│ │
│ [주간보고 작성 시] │
│ └─ DB에서 바로 조회 (빠름!) │
│ │
│ [새로고침 버튼] │
│ └─ 해당 프로젝트 저장소만 최신 동기화 │
│ └─ 방금 커밋한 내용도 확인 가능 │
│ │
└─────────────────────────────────────────────────────────────────┘
5.2 작성자 매칭 로직
// 커밋 작성자 → 시스템 사용자 매칭
async function matchCommitAuthor(
serverId: number,
commitAuthor: string, // 커밋 작성자명
commitEmail: string // 커밋 이메일 (Git)
): Promise<number | null> {
// VCS 계정 테이블에서 매칭
// 같은 서버에서 username 또는 email이 일치하는 사용자 찾기
const matched = await db.query(`
SELECT e.employee_id
FROM wr_employee_vcs_account a
JOIN wr_employee_info e ON a.employee_id = e.employee_id
WHERE a.server_id = $1
AND (a.vcs_username = $2 OR a.vcs_email = $3)
`, [serverId, commitAuthor, commitEmail]);
if (matched.rows.length > 0) {
return matched.rows[0].employee_id;
}
return null; // 매칭 실패
}
5.2 Git 커밋 수집
// simple-git 라이브러리 사용
import simpleGit from 'simple-git';
async function syncGitCommits(repo: Repository) {
const git = simpleGit();
// 임시 디렉토리에 clone 또는 pull
const repoPath = `/tmp/repos/${repo.repo_id}`;
if (existsSync(repoPath)) {
await git.cwd(repoPath).pull();
} else {
await git.clone(repo.repo_url, repoPath, ['--branch', repo.branch_name]);
}
// 최근 커밋 조회 (마지막 동기화 이후)
const logs = await git.cwd(repoPath).log({
'--since': repo.last_sync_at || '1 week ago',
'--format': '%H|%an|%ae|%aI|%s'
});
// DB에 저장
for (const commit of logs.all) {
await saveCommit({
repo_id: repo.repo_id,
commit_hash: commit.hash,
commit_message: commit.message,
commit_author: commit.author_email,
commit_date: commit.date,
// ...
});
}
}
5.3 SVN 커밋 수집
// svn 명령어 실행
import { exec } from 'child_process';
async function syncSvnCommits(repo: Repository) {
const since = repo.last_sync_at
? `{${repo.last_sync_at.toISOString()}}`
: 'HEAD-100';
const command = `svn log ${repo.repo_url} -r ${since}:HEAD --xml`;
// 인증 정보 추가
if (repo.auth_username) {
command += ` --username ${repo.auth_username} --password ${repo.auth_credential}`;
}
const result = await execPromise(command);
const logs = parseXml(result); // XML 파싱
for (const entry of logs) {
await saveCommit({
repo_id: repo.repo_id,
commit_hash: entry.revision,
commit_message: entry.msg,
commit_author: entry.author,
commit_date: entry.date,
});
}
}
5.5 서버 인증 정보 관리
VCS 서버 접근 시 필요한 인증 정보 (서버 레벨)
-- VCS 서버에 인증 정보 추가 (필요 시)
ALTER TABLE wr_vcs_server
ADD COLUMN auth_type VARCHAR(20) DEFAULT 'NONE', -- NONE, BASIC, TOKEN, SSH_KEY
ADD COLUMN auth_username VARCHAR(100),
ADD COLUMN auth_credential TEXT; -- 암호화 저장
※ 공개 저장소는 인증 불필요 ※ 사내 SVN/GitLab은 서버 레벨 인증 또는 사용자별 인증 선택
6. 환경 설정
6.1 필요 패키지
# Git 연동
npm install simple-git
# SVN 연동 (시스템에 svn 명령어 필요)
# Ubuntu: apt install subversion
# macOS: brew install svn
6.2 환경 변수
# 커밋 수집 설정
COMMIT_SYNC_ENABLED=true
COMMIT_SYNC_CRON=0 6 * * * # 매일 새벽 6시
COMMIT_SYNC_TEMP_DIR=/tmp/repos # 임시 저장소 디렉토리
# 보안 (인증 정보 암호화 키)
REPO_CREDENTIAL_SECRET=your-secret-key
7. 보안 고려사항
7.1 인증 정보 보안
| 항목 | 처리 방식 |
|---|---|
| 비밀번호/토큰 | AES-256 암호화 저장 |
| SSH 키 | 파일로 저장, 권한 제한 (600) |
| 환경 변수 | 민감 정보 노출 방지 |
7.2 접근 권한
| 역할 | 권한 |
|---|---|
| 관리자 | 모든 저장소 관리, 전체 커밋 조회 |
| PM | 담당 프로젝트 저장소 관리 |
| 멤버 | 본인 커밋만 조회 |
8. 작업 일정
Phase 1: DB + VCS 서버/계정 관리 (3일)
- 시작:
- 완료:
- 소요시간:
작업 내용:
- wr_vcs_server 테이블 생성
- wr_employee_vcs_account 테이블 생성
- wr_repository 테이블 생성
- wr_commit_log 테이블 생성
- VCS 서버 관리 API + UI (관리자)
- 마이페이지 VCS 계정 설정 UI
Phase 2: 저장소 관리 (2일)
- 시작:
- 완료:
- 소요시간:
작업 내용:
- 저장소 CRUD API
- 프로젝트 상세에 저장소 관리 UI
- 저장소 추가/수정 모달
Phase 3: Git 커밋 수집 (3일)
- 시작:
- 완료:
- 소요시간:
작업 내용:
- simple-git 연동
- Git 커밋 수집 로직
- 작성자 매칭 (VCS 계정 기반)
- 수동 동기화 API
Phase 4: SVN 커밋 수집 (3일)
- 시작:
- 완료:
- 소요시간:
작업 내용:
- SVN 명령어 연동
- SVN 커밋 수집 로직
- XML 파싱
- 작성자 매칭
Phase 5: 커밋 조회 화면 (3일)
- 시작:
- 완료:
- 소요시간:
작업 내용:
- 프로젝트별 커밋 조회 API
- 프로젝트 커밋 조회 페이지 (/project/[id]/commits)
- 주간보고 작성 시 커밋 참고 UI
- 새로고침 버튼 (최신 동기화)
Phase 6: 자동화 + 테스트 (2일)
- 시작:
- 완료:
- 소요시간:
작업 내용:
- Cron Job 설정 (매일 새벽 자동 동기화)
- 인증 정보 암호화
- 전체 플로우 테스트
- 오류 처리
작업 완료 결과
Phase별 작업 시간
| Phase | 작업 내용 | 시작 | 완료 | 소요시간 |
|---|---|---|---|---|
| 1 | DB + VCS 서버/계정 관리 | - | - | - |
| 2 | 저장소 관리 | - | - | - |
| 3 | Git 커밋 수집 | - | - | - |
| 4 | SVN 커밋 수집 | - | - | - |
| 5 | 커밋 조회 화면 | - | - | - |
| 6 | 자동화 + 테스트 | - | - | - |
| 총 소요시간 | - |
생성/수정된 파일
| 구분 | 파일 | 작업 |
|---|---|---|
| DB | wr_vcs_server | 신규 테이블 |
| DB | wr_employee_vcs_account | 신규 테이블 |
| DB | wr_repository | 신규 테이블 |
| DB | wr_commit_log | 신규 테이블 |
| API | backend/api/vcs-server/* | 신규 (CRUD) |
| API | backend/api/my/vcs-accounts.get.ts | 신규 |
| API | backend/api/my/vcs-account.post.ts | 신규 |
| API | backend/api/project/[id]/repositories.get.ts | 신규 |
| API | backend/api/project/[id]/repository.post.ts | 신규 |
| API | backend/api/repository/[id].put.ts | 신규 |
| API | backend/api/repository/[id]/sync.post.ts | 신규 |
| API | backend/api/project/[id]/commits.get.ts | 신규 |
| API | backend/api/project/[id]/commits/refresh.post.ts | 신규 |
| API | backend/api/commits/my-weekly.get.ts | 신규 |
| Frontend | frontend/pages/admin/vcs-server.vue | 신규 |
| Frontend | frontend/pages/mypage.vue | 수정 (VCS 계정) |
| Frontend | frontend/pages/project/[id].vue | 수정 (저장소 관리) |
| Frontend | frontend/pages/project/[id]/commits.vue | 신규 |
| Frontend | frontend/pages/report/write.vue | 수정 (커밋 참고) |
| Backend | backend/services/git-sync.ts | 신규 |
| Backend | backend/services/svn-sync.ts | 신규 |
| Backend | backend/jobs/commit-sync.ts | 신규 (Cron) |
| Utils | backend/utils/crypto.ts | 신규 (암호화) |
9. 기술 스택
- Backend: Nitro (H3) + PostgreSQL
- Frontend: Nuxt3 + Vue3 + Bootstrap 5
- Git 연동: simple-git (npm 패키지)
- SVN 연동: svn CLI (시스템 명령어)
- 스케줄링: node-cron 또는 시스템 crontab
- 암호화: crypto (Node.js 내장)
10. 주의사항
10.1 서버 환경
- SVN 사용 시 서버에
svn명령어 설치 필요 - Git 사용 시 서버에
git명령어 설치 필요 - 임시 디렉토리 용량 관리 필요
10.2 네트워크
- 내부 SVN 서버 접근 가능해야 함
- GitHub/GitLab 등 외부 서비스 접근 가능해야 함
- 방화벽 설정 확인
10.3 성능
- 대용량 저장소는 shallow clone 고려
- 커밋 수집 시 서버 부하 주의 (새벽 실행 권장)
11. 향후 확장 고려
- AI 연동: 커밋 메시지 → 주간보고 자동 생성 초안
- 코드 통계: 라인 수, 파일 수 통계 대시보드
- 커밋-업무 연결: 커밋을 특정 업무 항목에 연결
- GitLab/GitHub API: CLI 대신 API 직접 연동
- WebHook: Push 이벤트 시 실시간 수집