# 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 서버 테이블 (도메인 단위) ```sql -- 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 계정 테이블 ```sql -- 사용자별 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 저장소 정보 테이블 ```sql -- 프로젝트별 저장소 (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 커밋 이력 테이블 ```sql 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 작성자 매칭 로직 ```typescript // 커밋 작성자 → 시스템 사용자 매칭 async function matchCommitAuthor( serverId: number, commitAuthor: string, // 커밋 작성자명 commitEmail: string // 커밋 이메일 (Git) ): Promise { // 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 커밋 수집 ```typescript // 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 커밋 수집 ```typescript // 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 서버 접근 시 필요한 인증 정보 (서버 레벨) ```sql -- 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 필요 패키지 ```bash # Git 연동 npm install simple-git # SVN 연동 (시스템에 svn 명령어 필요) # Ubuntu: apt install subversion # macOS: brew install svn ``` ### 6.2 환경 변수 ```env # 커밋 수집 설정 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. 향후 확장 고려 1. **AI 연동**: 커밋 메시지 → 주간보고 자동 생성 초안 2. **코드 통계**: 라인 수, 파일 수 통계 대시보드 3. **커밋-업무 연결**: 커밋을 특정 업무 항목에 연결 4. **GitLab/GitHub API**: CLI 대신 API 직접 연동 5. **WebHook**: Push 이벤트 시 실시간 수집