Redmine 공정관리 시스템 운영 가이드
PM 서비스(master) ↔ Redmine ↔ Gitea 연동 기반 기능 요구사항 일감 · 실적 관리 워크플로우
🏗️01. 시스템 구성
PM 서비스
단일 master
요구사항 · WBS · 산출물 · 문서
요구사항 · WBS · 산출물 · 문서
▶ 일감 등록
◀ 실적 연동
기능 요구사항
Redmine
일감 · 실적
실적시작/종료 · 진행율
실적시작/종료 · 진행율
◀ 커밋 키워드
cron fetch
Gitea
소스 저장소
커밋 → 실적 갱신
커밋 → 실적 갱신
흐름: PM 서비스가 기능 요구사항 항목을 Redmine 일감으로 등록 → 개발자의 Gitea 커밋이 일감의 실적시작 · 실적종료 · 진행율을 갱신 → 그 실적이 PM 서비스로 자동 연동(역동기화)됩니다. 문서작업은 PM 서비스 내부에서 처리합니다.
| 시스템 | URL | 역할 |
|---|---|---|
| PM 서비스 | https://pm.gc-si.dev |
단일 master — 요구사항 · WBS · 산출물 · 문서 관리, Redmine 일감 등록 · 실적 수신 |
| Redmine | https://redmine.gc-si.dev |
기능 요구사항 일감 관리, 커밋 기반 실적(실적시작/종료 · 진행율) 집계 |
| Gitea | https://gitea.gc-si.dev |
소스 저장소 — 커밋 메시지 키워드로 일감 실적 갱신 (프로젝트당 N개 연결 가능) |
👥02. 역할별 작업 흐름
PM / PL
계획 수립 · 일감 등록
PM 서비스에서 관리
- 요구사항 · WBS · 산출물 작성/관리
- 담당자 · 일정 · 가중치 지정
- 기능 요구사항 항목 → Redmine 일감 등록
- PM 서비스가 Redmine에 일감 push
- Gitea 저장소 연결(프로젝트당 N개)
- 실적은 Redmine에서 자동 수신
개발자
개발 · 커밋으로 실적 반영
Gitea에 커밋 · push
- 커밋 메시지에
키워드 + #일감번호포함 - 진행중 Added/Changed/Security (50%)
- 완료 Fixed/Removed (100%)
- cron이 커밋 fetch → Redmine 실적 갱신
- 실적시작 · 실적종료 · 진행율 자동 반영
- PM 서비스로 실적 역동기화
PMO
모니터링 · 위험 관리
PM 서비스 대시보드 확인
- 계획 진척 vs 실적 진척 비교
- 단계별 진척 · 일정 점검 (WBS)
- 요구사항 ↔ 산출물 추적성 확인
- 지연 · 위험 항목 식별
- 산출물 · 문서 검토 현황 점검
대시보드: pm.gc-si.dev
🔀03. Git 커밋 — Redmine 이슈 연동
Gitea에 push한 커밋 메시지에 이슈 번호를 포함하면, Redmine이 자동으로 해당 이슈에 커밋을 연결합니다.
동기화 방식
1
개발자가 Gitea에 push
커밋 메시지에 키워드 + 이슈 번호 포함
2
cron (5분마다) bare clone fetch
/opt/redmine/repos/<프로젝트>.git 갱신3
Redmine이 새 커밋 읽고 키워드 파싱
refs, fixes 등 키워드 매칭
4
해당 이슈에 커밋 이력 자동 연결
이슈 상세 → "관련 변경분" 탭에 표시
키워드 — Keep a Changelog 규격
참조 키워드 (상태 변경 없음, 커밋-이슈 연결만)
| 키워드 | 효과 |
|---|---|
refs |
이슈에 커밋 참조 연결 |
references |
동일 |
상태 변경 키워드 (커밋 시 이슈 상태/진행률 자동 변경)
| 키워드 | 의미 | Redmine 상태 | 진행률 |
|---|---|---|---|
Added |
새로운 기능 | 진행중 | 50% |
Changed |
기존 기능의 변경사항 | 진행중 | 50% |
Deprecated |
곧 지워질 기능 | 보류 | 유지 |
Removed |
지금 지워진 기능 | 완료 | 100% |
Fixed |
버그 픽스 | 완료 | 100% |
Security |
취약점이 있는 경우 | 진행중 | 50% |
커밋 메시지 작성 규칙
<유형>: <설명> #이슈번호
# 새 기능 추가 → 이슈 진행중 (50%)
git commit -m "Added: 사용자 인증 모듈 추가 #12"
# 버그 수정 → 이슈 완료 (100%)
git commit -m "Fixed: 로그인 실패 시 에러 메시지 미표시 수정 #30"
# 기존 기능 변경 → 이슈 진행중 (50%)
git commit -m "Changed: API 응답 포맷 변경 #15"
# 기능 지원 중단 예정 → 이슈 보류
git commit -m "Deprecated: v1 API 지원 중단 예정 #20"
# 기능 제거 → 이슈 완료 (100%)
git commit -m "Removed: 레거시 인증 방식 제거 #25"
# 보안 패치 → 이슈 진행중 (50%)
git commit -m "Security: XSS 취약점 패치 #35"
# 참조만 (상태 변경 없음)
git commit -m "DB 스키마 설계 refs #12"
# 여러 이슈 동시 참조
git commit -m "Changed: 공통 모듈 리팩토링 #12, #13"
확인 방법: Redmine에서 이슈 상세 페이지 → "관련 변경분" 탭에서 연결된 커밋 확인. 커밋 해시, 작성자, 메시지, 변경 파일 목록이 표시됩니다.
현재 연동 저장소
| 프로젝트 | Gitea 저장소 | Redmine 경로 |
|---|---|---|
| AI 불법조업 | gc/snp-connection-monitoring |
/opt/redmine/repos/snp-connection-monitoring.git |
다중 저장소: 한 프로젝트에 여러 Gitea 저장소(N개)를 연결할 수 있습니다(프론트/백엔드/인프라 등). 저장소마다 고유 식별자(identifier)로 등록하며, 커밋 키워드 상태 연동은 저장소 개수와 무관하게 동일하게 동작합니다.
추가 절차: bare clone 생성(
추가 절차: bare clone 생성(
/opt/redmine/repos/<repo>.git) → 프로젝트 설정 → 저장소에서 등록(고유 identifier) → cron에 git fetch 추가.
🔄04. Redmine 이슈 상태 흐름
상태 흐름은 트래커(일감 종류)에 따라 다릅니다.
기능 트래커 (기본 상태: 대기)
대기
→
진행중
→
완료
↕ 진행중에서 분기:
보류
(상호 전환)
💡 완료 → 진행중 으로 재오픈 가능
비기능 트래커 (기본 상태: 부분)
부분
↔
외부산출물
비기능 트래커는 닫히는(closed) 상태가 없습니다 — 부분 / 외부산출물 모두 진행 상태로 유지됩니다.
상태 정의
| 상태 | ID | 트래커 | closed | 설명 | 실적진척율 |
|---|---|---|---|---|---|
| 대기 | 7 | 기능 | — | 착수 전 | 0% |
| 진행중 | 8 | 기능 | — | 진행 중 | 1~99% |
| 보류 | 12 | 기능 | — | 보류 | 유지 |
| 완료 | 13 | 기능 | ✓ | 완료 | 100% |
| 부분 | 9 | 비기능 | — | 부분 산출 | 유지 |
| 외부산출물 | 11 | 비기능 | — | 외부 산출물 | 유지 |
📦05. 산출물 · 문서 관리
산출물과 문서는 PM 서비스(pm.gc-si.dev)에서 작성 · 관리합니다. PM DB가 단일 master이며, 산출물 대장 · 라이프사이클 · 첨부 · 요구사항 추적성이 모두 PM 서비스 내부에서 제공됩니다.
과거 Redmine 산출물 트래커 · 문서 모듈로 관리하던 방식은 폐기되었습니다. Redmine 일감은 기능 요구사항 항목만 다루며, 산출물 · 문서는 PM 서비스에서 처리합니다.
산출물 메타 (PM 서비스)
| 필드 | 형식 | 값 / 비고 |
|---|---|---|
| 산출물코드 | 텍스트(고유) | AIFS_xx_nn 등 |
| 단계 | 목록 | 프로젝트관리(P) / 시스템개발(S) / AI |
| 산출물유형 | 목록 | 문서 / 데이터 / 폴더 / 코드 |
| 관련요구사항 | 텍스트 | 요구사항 코드(SFR/DAR 등) |
| RFP 산출물 | 텍스트 | RFP 요구 산출물명 |
| 설계감리 / 종료감리 | 예/아니오 | 감리 대상 여부 |
| AI산출물 | 예/아니오 | AI 관련 산출물 플래그 |
첨부 · 문서
- 산출물 1건에 파일 업로드(운영 서버 저장) + 외부 링크(구글시트 등)를 1:N으로 첨부
- 다운로드는 PM 서비스가 스트리밍(인증 기반), 디렉터리 트래버설 방지
- 문서 정본 · 추출물(엑셀/시트)도 PM 서비스에서 생성 · 보관
권한 (PM 서비스 RBAC)
| 역할 | 조회 | 업로드 · 편집 | 삭제 |
|---|---|---|---|
| ADMIN / MANAGER | ✓ | ✓ | ✓ |
| EDITOR | ✓ | ✓ | ✗ |
| VIEWER | ✓ | ✗ | ✗ |
요구사항 ↔ 산출물 추적성
요구사항을 허브로 요구사항 ↔ 산출물, 요구사항 ↔ WBS 추적성을 PM 서비스 추적표 화면에서 확인합니다. WBS · 산출물은 모두 PM DB에서 관리됩니다.
작업 절차
1
PM 서비스 산출물 화면에서 항목 작성/편집
코드 · 단계 · 유형 · 관련요구사항 · 감리 · AI 입력 (역할 기반 편집)
2
파일 업로드 또는 외부 링크 첨부
작업 중 산출물 · 정본 보관 (1:N)
3
검토 · 승인
검토자 검토 후 승인 처리
4
추적표 · 대시보드로 진행 현황 점검
PMO/PM이 요구사항 ↔ 산출물 ↔ WBS 추적성 점검
📁06. 프로젝트 목록
ai-illegal-fishing
AI 불법조업
AI 기반 불법조업 탐지·차단 플랫폼
wing
WING
해양환경 위기대응 플랫폼 - 2차
mda5
MDA5
해양경비지원 플랫폼 - 5차
mof
해수부
해수부 플랫폼
⚠️07. 주의사항
1. n8n · Google Sheets 동기화 폐기 — 기존 n8n 워크플로우(A/B)와 Google Sheets 양방향 동기화는 더 이상 사용하지 않습니다. 실적은
Gitea 커밋 → Redmine → PM 서비스 경로로 반영됩니다.
2. 단일 master = PM 서비스 — 요구사항 · WBS · 산출물 · 문서의 원천은 PM 서비스(PM DB)입니다. Redmine에는 PM 서비스가 등록한 기능 요구사항 일감만 존재합니다.
3. 커밋에 일감번호 필수 — 실적 연동은 커밋 메시지에
키워드 + #일감번호가 있어야 발동합니다. 브랜치명만으로는 자동 매핑되지 않습니다.
4. 상위(부모) 일감은 날짜·진척 자동 롤업 — 하위 일감이 있는 항목은 시작일·종료일·진행율이 하위에서 자동 계산됩니다(Redmine
parent_issue_dates=derived). 실적은 말단(최하위) 일감의 커밋으로 반영하세요.
5. 다중 저장소 — 한 프로젝트에 여러 Gitea 저장소(N개)를 연결할 수 있습니다. 저장소 추가 시 bare 미러 clone + Redmine 저장소 등록(고유 identifier) + cron
git fetch가 필요합니다.
6. 일감 범위 변경 시 — Redmine 등록 대상(기능 요구사항 항목)은 PM 서비스에서 push합니다. 일감을 Redmine에서 직접 만들기보다 PM 서비스를 통해 등록 · 관리하세요.
7. 산출물 · 문서 — PM 서비스(pm.gc-si.dev)에서 작성 · 첨부 · 추적합니다. Redmine 산출물 트래커 · 문서 모듈은 사용하지 않습니다.