사내 업무 시스템 구성도 및 사용 안내 (Redmine + Mattermost)
사내에 구축한 Redmine(업무/일감 관리) + Mattermost(사내 메신저) 연동 시스템의 전체 구성과 사용 방법 정리. 대상: 전 직원(사용편) + 운영 담당자(운영편).
다이어그램은 Mermaid로 작성되어 있습니다. (Markdown Preview Mermaid 지원 환경에서 보기)
1. 시스템 개요
- Redmine — 업무 요구사항·일감의 등록/배정/진행/완료 관리 (기존 데이터 이관 완료)
- Mattermost — 사내 메신저(팀 소통) + Redmine 업무 알림 수신
- 미들웨어 — 두 시스템을 잇는 연결 프로그램 (알림 전송 / 일감 생성 / 통계)
핵심 동작 세 가지:
1. 업무 알림 — Redmine 일감 변경 → Mattermost 채널 + 담당자 DM 통보
2. 일감 등록 — Mattermost /issue 명령 → Redmine 일감 생성
3. 통계 — 주간/월간 진행현황을 채널에 게시 (확장 예정)
2. 전체 구성도
flowchart TB
RM["🗂️ Redmine 서버<br/>업무/일감 관리"]
MM["💬 Mattermost 서버<br/>사내 메신저 + 알림"]
NOTI["📢 알림기능 (미들웨어)<br/>· 일감 생성/변경 알림<br/>· Redmine 통계 (주간/월간)<br/>· 업무 일정 알림<br/>· 신규 개발로 확장 가능<br/> (다양한 알림 추가)"]
USER["👤 사용자<br/>(직원)"]
RM --- MM
MM --- NOTI
RM --- USER
MM --- USER
- Redmine ↔ Mattermost: 두 서버가 업무 알림으로 연동 (중앙 미들웨어가 중계)
- 알림기능(미들웨어): 일감 생성/변경 알림에 더해 Redmine 통계·업무 일정 알림 등을 제공하며, 신규 개발을 통해 다양한 알림 기능을 계속 추가할 수 있음
- 사용자: Mattermost로 메시지·슬래시명령(일감 등록)·알림 수신, Redmine으로 일감 조회·처리
위 구성도는 서버 간 연동 흐름에 집중한 것입니다. 사용자는 Redmine(웹 접속)과 Mattermost(메신저 앱)를 각각 직접 사용하며, 그 상호작용은 3장 데이터 흐름에서 설명합니다.
3. 데이터 흐름
3-1. 업무 통보 (Redmine 에서 Mattermost 로)
flowchart TD
A["일감 생성 또는 변경"] --> B["미들웨어 폴링<br/>(주기적 변경 감지)"]
B --> C{"담당자/관람자<br/>있는가?"}
B --> D["프로젝트 채널 webhook<br/>으로 간략 메시지 전송"]
C -- "있음" --> E["담당자·관람자에게<br/>상세 DM 전송"]
C -- "없음" --> F["DM 생략<br/>(채널 알림만)"]
D --> G["업무알림 채널 게시"]
E --> H["개인에게 직접 통보"]
3-2. 일감 등록 (Mattermost 에서 Redmine 으로)
sequenceDiagram
participant U as 사용자
participant M as 미들웨어
participant R as Redmine
U->>M: /issue 입력
M->>R: 지원사이트·담당자 목록 조회
R-->>M: 목록 반환
M-->>U: 입력창 표시 (제목·사이트·담당자·내용)
U->>M: 작성 후 제출
M->>R: 일감 생성 요청
R-->>M: 생성 완료
Note over M,R: 이후 폴링이 감지하여 담당자에게 DM 통보
3-3. 알림 경로 — 채널 vs DM
flowchart LR
E["일감 변경"] --> CH["채널 알림"]
E --> DM["개인 DM"]
CH --> CHN["팀 전체 모니터링<br/>(누구나 흐름 파악)"]
DM --> DMN["담당자·관람자 본인<br/>(내 일감 직접 통보)"]
4. 채널 구성
사내 메신저(대화)와 업무 알림을 분리하여 운영합니다.
flowchart TD
subgraph T["전사 공통"]
T1["town-square (공지)"]
T2["자유게시판"]
T3["회사-공지"]
end
subgraph TEAM["팀 채널 — 부서 소통"]
D1["경영지원"]
D2["기술지원"]
D3["영업"]
D4["생산"]
D5["연구소"]
end
subgraph RMG["업무 알림 — 봇 게시"]
R1["rm-알림 (전체 일감)"]
R2["rm-통계 (주간/월간, 예정)"]
end
subgraph PRJ["프로젝트 협업 — 필요시"]
P1["proj-OOO (다팀 협업만)"]
end
4-1. 채널 운영 원칙
- 알림과 대화 분리:
rm-채널엔 자동 알림만, 사람 대화는 팀 채널에서. 팀 채널엔 알림을 넣지 않음. - 채널 = 팀 모니터링 / DM = 개인 알림: 채널은 팀 흐름 파악용, 내 일감 변경은 봇 DM으로 직접.
- 구독 자율: 알림 채널은 공개로 두되 강제 가입 없음. 관심자가 직접 참여.
- 이름 접두어로 그룹화: 채널 순서는 개인별 설정이라 강제 불가 →
이름 접두어(
rm-, 숫자 등)로 정렬 유도 (기본 정렬은 알파벳순). - 알림 과다 시:
rm-알림채널은 개인 음소거(mute) 권장. 중요한 내 일감은 DM으로 별도 수신.
5. 사용 방법 (전 직원용)
5-1. 채널에서 일감 등록 — /issue
flowchart LR
A["입력창에 /issue"] --> B["등록 창 표시"]
B --> C["제목 입력"]
C --> D["지원사이트 선택"]
D --> E["담당자 선택<br/>(선택사항)"]
E --> F["내용 입력"]
F --> G["등록 클릭"]
G --> H["Redmine 일감 생성"]
H --> I["담당자에게 DM 통보"]
- 아무 채널 입력창에
/issue입력 후 실행 - 등록 창에서 제목·지원사이트·담당자·내용 작성 (지원사이트·담당자 목록은 Redmine에서 자동으로 불러옴)
- 등록 클릭 → Redmine에 일감 생성
- 담당자 지정 시 잠시 후 담당자에게 자동 DM
5-2. 업무 알림 받기
- 채널 알림: 참여 중인
rm-알림(또는 프로젝트 채널)에 일감 생성/변경이 간략 게시 - 예:
[신규] #1568 슬래쉬 테스트 (신규) - 김수언+ 링크 - 개인 DM: 내가 담당자/관람자인 일감이 바뀌면 issue-bot이 상세 DM
- 항목: 제목·프로젝트·상태·우선순위·담당자·등록자·지원사이트·링크
- 알림 링크 클릭 → 해당 Redmine 일감으로 이동
5-3. 일감 확인/처리
- Redmine에 직접 접속하여 조회·수정·코멘트·상태 변경
- 변경 시 다시 채널/DM으로 통보
- 내 일감을 챙기려면 Redmine에서 본인을 담당자 또는 관람자로 지정
5-4. 신규 입사자/중간 합류
- 공개·비공개 채널은 나중에 합류해도 이전 기록 전부 조회 가능 (인수인계 유리)
- 단, 그룹 메시지(GM, 3~7인 임시 대화)는 추가 시 이전 기록 안 보임 → 인원이 늘 수 있는 대화는 채널 사용 권장
6. 운영 관리 (운영 담당자용)
6-1. 프로젝트별 알림 채널 연결 (코드 수정 불필요)
flowchart LR
A["Mattermost 채널<br/>Webhook 생성"] --> B["URL 확보"]
B --> C["Redmine 프로젝트 설정<br/>Mattermost Webhook 필드에 입력"]
C --> D["해당 프로젝트 일감 변경 시<br/>그 채널로 알림"]
E["필드를 비움"] --> F["그 프로젝트는<br/>채널 알림 미발송"]
- 프로젝트→채널 매핑은 Redmine 커스텀필드("Mattermost Webhook") 에서 관리
- 새 프로젝트: 채널 생성 → Webhook 생성 → Redmine 필드에 URL 입력. 끝.
6-2. 일감 등록 항목 관리
- 지원 사이트 목록: Redmine "지원 사이트" 커스텀필드 선택값 수정 →
/issue창에 자동 반영 - 담당자 목록: Redmine 활성 사용자 자동 조회
6-3. 메시지 문구 변경
- 미들웨어 설정(CONFIG)의
MSG_CHANNEL(채널·간략) /MSG_DM(DM·상세) 수정 → 재시작 - 플레이스홀더: 일감번호·제목·상태·우선순위·담당자·등록자·링크·지원사이트·프로젝트·신규/변경
6-4. 채널 정리 (아카이빙)
- 종료된 프로젝트 알림 채널은 아카이브(보관) → 사이드바 정리, 기록 보존
- 아카이브 시 해당 프로젝트의 "Mattermost Webhook" 필드도 비울 것 (죽은 채널 전송 방지)
- 완전 삭제보다 아카이브 권장 (복구 가능)
6-5. 사용자 매칭 / 시간
- DM은 Redmine 이메일 = Mattermost 이메일 매칭으로 전송 → 신규 직원은 양쪽 동일 이메일로 생성
- 메시지 시각은 Mattermost 서버 시계 기준 → 서버 NTP 시간 동기화 유지
7. FAQ
Q. 채널을 트리(폴더)처럼 계층 구조로? A. Mattermost는 하위 채널 미지원(평면 구조). 이름 접두어 + 개인별 카테고리(접기)로 정리.
Q. 채널 순서를 관리자가 모두에게 동일하게? A. 불가. 순서·카테고리는 개인별 설정. 이름 접두어/숫자로 정렬 유도(기본 알파벳순).
Q. 나중에 들어온 사람이 이전 대화를? A. 공개·비공개 채널은 이전 기록 전부 조회 가능. 단 그룹 메시지(GM)는 안 됨 → 채널 사용.
Q. 내 일감 알림이 안 와요. A. ① 본인이 담당자/관람자인지, ② 양쪽 이메일 동일한지, ③ 봇 차단/뮤트 여부 확인.
Q. 채널 알림과 DM 둘 다 오는데 중복? A. 역할이 다름. 채널=팀 모니터링, DM=개인 직접 알림.
8. 요약
flowchart TB
RM["Redmine<br/>업무/일감 관리"]
MM["Mattermost<br/>사내 메신저 + 알림"]
MID["미들웨어<br/>알림·일감생성·통계"]
RM <-- "REST API" --> MID
MID <-- "알림 / 슬래시" --> MM
MID -. "업무통보: 채널+DM" .-> MM
MM -. "일감등록: /issue" .-> RM
MID -. "통계(예정)" .-> MM
| 구분 | 내용 |
|---|---|
| 업무 통보 | 일감 변경 → 채널(팀 모니터링) + DM(개인 알림) |
| 일감 등록 | /issue → 입력창 → Redmine 생성 |
| 채널 운영 | 대화(팀 채널)와 알림(rm-) 분리, 구독 자율 |
| 매핑 관리 | 프로젝트→채널은 Redmine 커스텀필드에서 (코드 수정 불필요) |