Files
Q-A_test/docs/architecture_secretary_sso.md
SDI 12e4f17b62
CI / typecheck (push) Successful in 1m8s
CI / format (push) Failing after 1m6s
CI / lint (push) Failing after 49s
CI / test (push) Failing after 1m8s
first commit
2026-07-15 18:05:12 +09:00

528 lines
24 KiB
Markdown

# 사내 지원 플랫폼 상세 설계서
## 1. 프로젝트 개요
### 1.1 프로젝트 정보
| 항목 | 내용 |
| --- | --- |
| 플랫폼명 | BARON Office Support System |
| 핵심 목적 | 기존 통합 Q&A 플랫폼을 공용 기반으로 재사용하되, 인트라넷 진입형 사내 지원 서비스로 확장하여 물품신청, 도서 신청, 출장 차량 신청, 비품 대여, 사내 공지 및 Q&A 기능을 통합한 전사 지원 허브 구축 |
| 주요 대상 | S/W별 Q&A를 이용하는 사내 사용자 및 외부 고객(User), 인트라넷형 사내 지원 서비스를 이용하는 사내 사용자(User), 부서 담당자(Support), 시스템 관리자(Admin) |
### 1.2 추진 배경 및 기대 효과
- 개별 메신저, 이메일, 구두 요청으로 분산된 사내 요청 채널의 단일 플랫폼 통합
- 신청, 승인, 배정, 반납, 이력 조회의 전 과정 추적성 확보
- BARON-SSO 기반 인증과 부서·서비스 단위 권한 제어를 통한 운영 효율 확보
- 신청 현황, 처리 지연, 자산 이용률의 데이터 기반 관리 체계 확보
- 기존 S/W별 Q&A 플랫폼과 동일한 공용 프레임워크 재사용을 통한 개발 및 운영 표준화 확보
- 사내 사용자와 외부 고객을 함께 수용하는 사용자 모델 및 다중 알림 채널 운영 체계 확보
## 2. 기술 아키텍처
### 2.1 기술 스택
| 구분 | 기술 |
| --- | --- |
| Frontend | Next.js, React, Tailwind CSS, Headless UI |
| Backend | FastAPI, Python, SQLAlchemy, Pydantic |
| Database | PostgreSQL |
| 인증/권한 | BARON-SSO, OAuth 2.0, OpenID Connect |
| 외부 연동 | 네이버웍스 알림, SMS 발송 서비스, 사내 자산/사용자 정보 연동 API |
| 인프라 | Ubuntu 24.04 (WSL2), Docker Compose, Nginx |
### 2.2 아키텍처 방향
- 프론트엔드의 Next.js 기반 구성으로 신청, 조회, 승인 화면의 일관된 사용자 경험 확보
- 백엔드의 FastAPI 중심 API 구조 설계를 통한 신청, 승인, 자산관리, Q&A 기능 분리 구현
- PostgreSQL과 SQLAlchemy 기반 데이터 계층 구성 및 요청 유형별 공통 처리 구조 반영
- BARON-SSO 연동 전제의 인증 구조 적용 및 표준 OAuth 2.0 / OIDC 기반 세션·토큰 검증 수행
- 신청 상태 변경과 승인 결과의 네이버웍스 실시간 알림 체계 확보
- 네이버웍스 계정 미보유자 또는 발송 실패 건에 대한 SMS 대체 알림 체계 확보
- 추후 서비스 유형 추가를 고려한 멀티서비스 확장형 모델 적용
- 기존 S/W별 Q&A 플랫폼과 동일한 애플리케이션 기반을 재사용하되, 앱 진입형 구조 대신 인트라넷 진입형 서비스 컨텍스트 구조 적용
### 2.3 플랫폼 진입 구조
- 기존 기술지원 플랫폼은 각 S/W 프로그램 로그인 이후 해당 S/W의 Q&A 화면으로 직접 진입하는 앱 컨텍스트 기반 구조 적용
- 사내 지원 플랫폼은 회사 인트라넷에서 진입한 뒤 서비스 유형별 메뉴를 선택하는 포털 진입형 구조 적용
- 두 플랫폼은 동일한 인증 체계, 공통 UI 프레임워크, 공통 게시판/신청 처리 엔진을 공유하되 진입 URL과 초기 컨텍스트만 다르게 구성
- 외부 진입 컨텍스트인 `app_id` 또는 `service_type_id`를 내부 공통 식별자인 `workspace_id`로 매핑하여 동일 DB 구조에서 처리
### 2.4 CI/CD 및 배포 프로세스
```mermaid
graph TD
A[개발자: 코드 작성 및 로컬 테스트] --> B[Main 브랜치 Push]
B --> C{GitHub Actions}
C --> D[Lint 및 Unit Test 실행]
D --> E[Docker Image 빌드]
E --> F[Container Registry 저장]
F --> G[운영 서버 배포]
G --> H[Nginx Proxy 라우팅]
H --> I[서비스 가동 및 모니터링]
```
## 3. 데이터베이스 설계
### 3.1 설계 원칙
기존 S/W별 Q&A 플랫폼과 인트라넷형 사내 지원 플랫폼을 동일 DB에서 운영하기 위해 모든 게시판·신청 데이터를 `workspace_id` 기준으로 통합 관리하도록 설계
- 외부 진입 채널은 달라도 내부 저장 구조는 공통 `workspace` 기준으로 통합 적용
- S/W별 Q&A와 사내 지원 요청은 공통 본문·댓글·첨부 구조를 공유하고, 승인·자산배정·원격지원 등은 도메인별 확장 테이블로 분리 적용
- 전역 관리자 권한과 워크스페이스별 운영 권한 분리를 통한 멀티플랫폼 확장 대응
- 신규 S/W 또는 신규 사내 서비스 추가 시 공통 스키마 변경 없이 마스터 데이터 추가만으로 확장 가능한 구조 적용
- 목록 조회 성능 확보를 위한 워크스페이스, 상태, 작성자 기준 인덱스 설계 반영
- 사용자 기본 정보와 tenant 정보는 BARON-SSO를 원본으로 사용하고, 플랫폼 내부에서는 `user_id`, `tenant_id` 및 권한 정보만 관리하는 구조 반영
### 3.2 핵심 스키마
```sql
-- 1. 소프트웨어 정보
CREATE TABLE software_apps (
id SERIAL PRIMARY KEY,
app_code VARCHAR(50) UNIQUE NOT NULL,
app_name VARCHAR(100) UNIQUE NOT NULL,
description TEXT,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 2. 사내 서비스 유형 정보
CREATE TABLE service_types (
id SERIAL PRIMARY KEY,
service_code VARCHAR(50) UNIQUE NOT NULL,
service_name VARCHAR(100) UNIQUE NOT NULL,
description TEXT,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 3. 공통 워크스페이스 마스터
CREATE TABLE workspaces (
id SERIAL PRIMARY KEY,
workspace_type VARCHAR(20) NOT NULL, -- SOFTWARE_APP, INTRANET_SERVICE
software_app_id INTEGER REFERENCES software_apps(id),
service_type_id INTEGER REFERENCES service_types(id),
workspace_code VARCHAR(50) UNIQUE NOT NULL,
workspace_name VARCHAR(100) NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CHECK (
(workspace_type = 'SOFTWARE_APP' AND software_app_id IS NOT NULL AND service_type_id IS NULL)
OR
(workspace_type = 'INTRANET_SERVICE' AND service_type_id IS NOT NULL AND software_app_id IS NULL)
)
);
-- 4. 사용자별 워크스페이스 접근 권한 및 역할
CREATE TABLE user_workspace_access (
id SERIAL PRIMARY KEY,
user_id VARCHAR(100) NOT NULL,
tenant_id VARCHAR(100) NOT NULL,
workspace_id INTEGER NOT NULL REFERENCES workspaces(id),
workspace_role VARCHAR(20) NOT NULL DEFAULT 'USER', -- SUPPORT, USER
can_read BOOLEAN DEFAULT TRUE,
can_write BOOLEAN DEFAULT FALSE,
can_manage BOOLEAN DEFAULT FALSE,
can_approve BOOLEAN DEFAULT FALSE,
page_scope VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE (user_id, tenant_id, workspace_id)
);
-- 5. 사용자 알림 보조 정보
CREATE TABLE user_notification_profiles (
id SERIAL PRIMARY KEY,
user_id VARCHAR(100) NOT NULL,
tenant_id VARCHAR(100) NOT NULL,
user_type VARCHAR(20) NOT NULL DEFAULT 'INTERNAL', -- INTERNAL, EXTERNAL
phone_number VARCHAR(30),
naverworks_user_key VARCHAR(100),
sms_opt_in BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE (user_id, tenant_id)
);
-- 6. 공통 상태 코드
CREATE TABLE support_status_codes (
code VARCHAR(20) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
sort_order INTEGER NOT NULL
);
-- 7. 공통 카테고리 코드
CREATE TABLE support_category_codes (
code VARCHAR(20) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
sort_order INTEGER NOT NULL
);
-- 8. 공통 게시글/신청 본문
CREATE TABLE support_tickets (
id SERIAL PRIMARY KEY,
workspace_id INTEGER NOT NULL REFERENCES workspaces(id),
requester_id VARCHAR(100) NOT NULL,
requester_tenant_id VARCHAR(100) NOT NULL,
ticket_type VARCHAR(20) NOT NULL, -- QNA, REQUEST
title VARCHAR(255) NOT NULL,
content TEXT,
category_code VARCHAR(20) REFERENCES support_category_codes(code),
status_code VARCHAR(20) NOT NULL DEFAULT 'OPEN' REFERENCES support_status_codes(code),
is_secret BOOLEAN DEFAULT FALSE,
requested_start_at TIMESTAMP,
requested_end_at TIMESTAMP,
priority VARCHAR(20) DEFAULT 'NORMAL',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 9. 댓글 및 처리 메모
CREATE TABLE ticket_comments (
id SERIAL PRIMARY KEY,
ticket_id INTEGER NOT NULL REFERENCES support_tickets(id),
author_id VARCHAR(100) NOT NULL,
author_tenant_id VARCHAR(100) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 10. 첨부파일 통합 관리
CREATE TABLE attachments (
id SERIAL PRIMARY KEY,
parent_type VARCHAR(20) NOT NULL, -- 'TICKET' 또는 'COMMENT'
parent_id INTEGER NOT NULL,
workspace_id INTEGER NOT NULL REFERENCES workspaces(id),
file_name VARCHAR(255) NOT NULL,
file_path VARCHAR(500) NOT NULL,
file_size INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 11. 사내 지원용 승인 이력
CREATE TABLE request_approvals (
id SERIAL PRIMARY KEY,
ticket_id INTEGER NOT NULL REFERENCES support_tickets(id),
approver_id VARCHAR(100) NOT NULL,
approver_tenant_id VARCHAR(100) NOT NULL,
approval_status VARCHAR(20) NOT NULL, -- APPROVED, REJECTED, PENDING
comment TEXT,
approved_at TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 12. 자산/비품 마스터
CREATE TABLE assets (
id SERIAL PRIMARY KEY,
asset_code VARCHAR(50) UNIQUE NOT NULL,
asset_name VARCHAR(100) NOT NULL,
asset_type VARCHAR(30) NOT NULL, -- SUPPLY, EQUIPMENT, BOOK, VEHICLE
quantity INTEGER DEFAULT 1,
is_active BOOLEAN DEFAULT TRUE,
location VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 13. 자산 배정 및 대여 이력
CREATE TABLE asset_allocations (
id SERIAL PRIMARY KEY,
ticket_id INTEGER NOT NULL REFERENCES support_tickets(id),
asset_id INTEGER NOT NULL REFERENCES assets(id),
assignee_id VARCHAR(100),
assignee_tenant_id VARCHAR(100),
allocation_status VARCHAR(20) NOT NULL, -- RESERVED, LOANED, RETURNED, CANCELLED
loaned_at TIMESTAMP,
due_at TIMESTAMP,
returned_at TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 14. 차량 운행 일정
CREATE TABLE vehicle_schedules (
id SERIAL PRIMARY KEY,
ticket_id INTEGER NOT NULL REFERENCES support_tickets(id),
asset_id INTEGER NOT NULL REFERENCES assets(id),
departure_at TIMESTAMP NOT NULL,
arrival_at TIMESTAMP,
destination VARCHAR(255),
driver_name VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 15. S/W Q&A용 원격 지원 상태 코드
CREATE TABLE remote_support_status_codes (
code VARCHAR(20) PRIMARY KEY,
name VARCHAR(50) NOT NULL,
sort_order INTEGER NOT NULL
);
-- 16. S/W Q&A용 원격 지원 로그
CREATE TABLE remote_support (
id SERIAL PRIMARY KEY,
ticket_id INTEGER NOT NULL REFERENCES support_tickets(id),
status_code VARCHAR(20) REFERENCES remote_support_status_codes(code),
support_engineer_id VARCHAR(100),
support_engineer_tenant_id VARCHAR(100),
scheduled_time TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 17. 공통 FAQ
CREATE TABLE faqs (
id SERIAL PRIMARY KEY,
workspace_id INTEGER NOT NULL REFERENCES workspaces(id),
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 18. 알림 발송 이력
CREATE TABLE notification_logs (
id SERIAL PRIMARY KEY,
ticket_id INTEGER REFERENCES support_tickets(id),
recipient_id VARCHAR(100) NOT NULL,
recipient_tenant_id VARCHAR(100) NOT NULL,
channel VARCHAR(20) NOT NULL, -- NAVERWORKS, SMS
target_address VARCHAR(100),
delivery_status VARCHAR(20) NOT NULL, -- SUCCESS, FAILED, FALLBACK
fallback_channel VARCHAR(20),
error_message TEXT,
sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 19. 주요 조회 인덱스
CREATE INDEX idx_user_workspace_access_role ON user_workspace_access (workspace_id, workspace_role);
CREATE INDEX idx_support_tickets_workspace_status_created ON support_tickets (workspace_id, status_code, created_at DESC);
CREATE INDEX idx_support_tickets_requester_created ON support_tickets (requester_id, created_at DESC);
CREATE INDEX idx_ticket_comments_ticket_created ON ticket_comments (ticket_id, created_at DESC);
CREATE INDEX idx_asset_allocations_asset_status ON asset_allocations (asset_id, allocation_status);
CREATE INDEX idx_vehicle_schedules_asset_departure ON vehicle_schedules (asset_id, departure_at);
CREATE INDEX idx_notification_logs_ticket_sent ON notification_logs (ticket_id, sent_at DESC);
```
### 3.3 워크스페이스 구성 예시
| 워크스페이스 유형 | 코드 | 이름 | 주요 처리 내용 |
| --- | --- | --- | --- |
| SOFTWARE_APP | EG_BIM | EG-BIM Q&A | 해당 S/W 전용 Q&A 게시판 및 원격 지원 |
| SOFTWARE_APP | CIVIL_APP | Civil App Q&A | 해당 S/W 전용 문의 접수 및 답변 |
| INTRANET_SERVICE | SUPPLY_REQUEST | 물품신청 | 사무용품, 소모품, 구매 요청 |
| INTRANET_SERVICE | BOOK_REQUEST | 도서 신청 | 업무 도서 구매 요청 또는 사내 도서 배정 |
| INTRANET_SERVICE | VEHICLE_REQUEST | 출장 차량 신청 | 출장 일정 기반 차량 예약 및 배차 요청 |
| INTRANET_SERVICE | EQUIPMENT_RENTAL | 비품 대여 | 노트북, 빔프로젝터, 케이블 등 비품 대여 |
| INTRANET_SERVICE | OFFICE_QNA | 사내 Q&A | 총무, 시설, 복지 관련 문의 접수 및 답변 |
## 4. 권한 및 보안 설계
### 4.1 역할 기반 접근 제어(RBAC)
| 역할 | 접근 범위 | 주요 권한 |
| --- | --- | --- |
| Admin | 전사 전체 워크스페이스 | 전체 통계 조회, 모든 게시글/신청 수정·삭제, 권한 부여, 워크스페이스 관리 |
| Support | 본인 담당 워크스페이스 | 신청 승인/반려, 배정 처리, 상태 변경, FAQ 관리, 답변 작성 |
| User | 본인이 접근 가능한 워크스페이스 | 신청 작성, 문의 작성, 본인 내역 조회, 댓글 작성, FAQ 조회 |
### 4.2 권한 검증 로직
- 모든 API 요청에서 BARON-SSO 토큰 기준 `user_id`, `tenant_id` 추출
- 전사 관리자 여부와 사용자 기본 정보는 BARON-SSO 기준 확인
- 워크스페이스 단위 접근 권한과 역할은 `user_workspace_access``can_read`, `can_write`, `can_manage`, `can_approve`, `page_scope` 기준 검증
- 요청 워크스페이스에 대한 권한이 없을 경우 `403 Forbidden` 반환
- S/W별 Q&A 게시글과 사내 지원 신청은 모두 작성자 본인, 권한 있는 Support, Admin 한정 조회
- S/W별 Q&A 워크스페이스는 사내 사용자(`INTERNAL`)와 외부 고객(`EXTERNAL`) 모두 접근 가능하도록 설계하고, 인트라넷형 서비스 워크스페이스는 사내 사용자 중심으로 제한 적용
## 5. 주요 기능 및 UI 설계
### 5.1 공통 워크스페이스 리스트
- 워크스페이스별, 상태별, 날짜별 필터 제공
- S/W별 Q&A와 인트라넷형 사내 지원 서비스를 하나의 공통 리스트 엔진으로 구성
- 사용자 진입 컨텍스트에 따라 해당 워크스페이스 화면만 우선 노출하는 구조 적용
- 문의, 요청, 처리중, 완료, 반려 등 상태값의 컬러 배지 구분을 통한 가시성 강화
### 5.2 S/W별 Q&A 기능
- 각 S/W 로그인 이후 해당 앱 전용 Q&A 게시판으로 직접 진입하는 앱 컨텍스트 기반 게시판 기능
- 제품별 문의 작성, 댓글 답변, 비밀글, 상태 변경 기능
- 질문 작성 시 관련 FAQ 추천 및 기존 문의 검색 기능
- 복잡한 문의에 대한 원격 지원 전환 및 지원 이력 관리 기능
- 앱별 공지, 신규 문의 현황, 담당자 답변 상태 표시 기능
### 5.3 인트라넷형 사내 지원 기능
- 물품신청: 품목, 수량, 사용 목적 입력 기반 신청 기능
- 도서 신청: 도서명, 저자, 출판사, 신청 사유 입력 기반 신청 기능
- 출장 차량 신청: 출장 일정, 목적지, 탑승 인원 기반 차량 신청 기능
- 비품 대여: 대여 품목, 사용 기간, 반납 예정일 입력 기반 대여 신청 기능
- 사내 Q&A: 총무, 시설, 복지, 기타 운영 문의 작성 및 답변 기능
### 5.4 승인, 배정 및 원격 처리
- 사내 지원 요청에 대한 담당자 승인 또는 반려 처리 기능
- 차량, 도서, 비품 등 실제 자산 배정 처리 기능
- 반려 사유, 처리 메모, 배정 결과의 이력 관리 기능
- 반납 완료 시 상태 자동 갱신 및 이력 보존 기능
- S/W별 Q&A 문의에 대한 원격 지원 일정 등록 및 처리 상태 관리 기능
### 5.5 FAQ, 공지 및 추천 기능
- 워크스페이스별 FAQ 및 공지사항 분리 관리 기능
- 질문 또는 신청 작성 시 관련 FAQ 및 기존 공지사항 추천 기능
- 자주 발생하는 요청 유형과 반복 문의의 사전 안내를 통한 중복 문의 감소 기능
- S/W별 앱 FAQ와 인트라넷형 서비스 안내 문서를 동일한 추천 구조로 제공
### 5.6 알림 및 이벤트 연동
- S/W별 Q&A 신규 문의 등록 시 담당자 대상 네이버웍스 알림 발송
- S/W별 Q&A 답변 등록 시 작성자 대상 네이버웍스 알림 발송
- 사내 지원 신청 등록 시 담당자 대상 네이버웍스 알림 발송
- 승인, 반려, 배정, 반납 처리 시 신청자 대상 네이버웍스 알림 발송
- 처리 지연 건 발생 시 담당자 리마인드 알림 발송
- 워크스페이스 유형별 알림 대상 라우팅 및 발송 이력 관리 체계 구성
- 네이버웍스 계정이 없는 사용자 또는 네이버웍스 발송 실패 건에 대한 SMS 대체 알림 발송 기능
- 알림 발송 채널, 실패 사유, 대체 발송 결과를 `notification_logs` 기준으로 추적 관리
## 6. 역할별 사용 시나리오
### 6.1 S/W 사용자(User) 시나리오
- 각 S/W 프로그램 로그인
- 사내 사용자 또는 외부 고객 자격으로 해당 앱 접근
- 해당 앱의 Q&A 화면으로 직접 진입
- 해당 앱 기준 Q&A 리스트 노출 및 기존 문의 확인
- 신규 문의 글 작성
- 담당자의 답변글 등록 시 네이버웍스 알림 수신 또는 SMS 대체 알림 수신
- 알림 확인 후 해당 앱 Q&A 화면에서 답변글 확인
```mermaid
flowchart LR
A[사내 사용자 또는 외부 고객 로그인] --> B[해당 S/W Q&A 진입]
B --> C[해당 앱 Q&A 리스트 확인]
C --> D[신규 문의 글 작성]
D --> E[담당자 답변 등록]
E --> F[네이버웍스 또는 SMS 알림 수신]
F --> G[답변글 확인]
```
### 6.2 S/W 담당자(Support) 시나리오
- 본인 담당 S/W 워크스페이스 접근
- 신규 문의 및 새글 표시 확인
- 문의 내용 검토 후 답변글 작성
- 상태값 변경 또는 원격 지원 전환 처리
- 작성자 대상 알림 발송
```mermaid
flowchart LR
A[담당 S/W 워크스페이스 접근] --> B[신규 문의 확인]
B --> C[문의 내용 검토]
C --> D[답변 또는 원격 지원 처리]
D --> E[상태값 변경]
E --> F[사용자 대상 알림 발송]
```
### 6.3 인트라넷 사용자(User) 시나리오
- 회사 인트라넷 접속 및 BARON-SSO 로그인
- 신청 서비스 선택
- 물품신청, 도서 신청, 출장 차량 신청, 비품 대여 또는 사내 Q&A 작성
- 처리 상태 및 승인 결과 확인
- 네이버웍스 알림 수신 후 상세 내역 확인
```mermaid
flowchart LR
A[인트라넷 접속 및 로그인] --> B[신청 서비스 선택]
B --> C[신청서 또는 문의 작성]
C --> D[담당자 처리 진행]
D --> E[승인 또는 반려 결과 확정]
E --> F[네이버웍스 알림 수신]
F --> G[상세 내역 확인]
```
### 6.4 인트라넷 담당자(Support) 시나리오
- 본인 담당 서비스 워크스페이스 목록 확인
- 신규 신청 또는 문의 접수 확인
- 승인, 반려, 배정, 답변 처리 수행
- 상태값 변경 및 처리 메모 등록
- 신청자 대상 알림 발송
```mermaid
flowchart LR
A[담당 서비스 워크스페이스 확인] --> B[신규 요청 접수 확인]
B --> C[승인 또는 반려 검토]
C --> D[배정 또는 답변 처리]
D --> E[상태값 변경 및 메모 등록]
E --> F[신청자 대상 알림 발송]
```
### 6.5 관리자(Admin) 시나리오
- 로컬 개발 환경에서 기능 개발 및 수정
- Git 저장소 업로드
- CI/CD 파이프라인을 통한 운영 서버 Docker 환경 배포
- S/W 앱 마스터, 서비스 유형, 워크스페이스 권한, 자산 마스터 관리
- 배포 결과 및 운영 상태 확인
```mermaid
flowchart LR
A[로컬 개발 및 수정] --> B[Git 저장소 업로드]
B --> C[CI/CD 파이프라인 실행]
C --> D[운영 서버 Docker 배포]
D --> E[앱/서비스/권한/자산 마스터 관리]
E --> F[운영 상태 확인]
```
## 7. 구현 로드맵
### 7.1 Phase 1. 핵심 인프라 구축
- [ ] Ubuntu 및 Docker 서버 환경 셋업
- [ ] BARON-SSO OAuth2 연동 및 사용자 매핑 로직 구현
- [ ] 공용 워크스페이스 기반 DB 스키마 생성 및 기초 API 개발
- [ ] S/W별 Q&A와 인트라넷형 서비스의 공통 인증 및 권한 구조 구현
### 7.2 Phase 2. S/W별 Q&A 및 공용 게시판 기능 개발
- [ ] S/W별 격리 게시판 및 통합 리스트 UI 구현
- [ ] 댓글, 첨부파일, 비밀글, FAQ 추천 기능 구현
- [ ] 원격 지원 전환 및 상태 관리 기능 구축
- [ ] 네이버웍스 알림, SMS 대체 알림 및 앱별 컨텍스트 진입 기능 구현
### 7.3 Phase 3. 인트라넷형 사내 지원 기능 개발
- [ ] 서비스 유형별 신청서 UI 및 통합 리스트 구현
- [ ] 승인/반려/배정 처리 기능 구현
- [ ] 자산 및 차량 일정 관리 기능 구축
- [ ] 첨부파일 및 댓글 시스템 구축
### 7.4 Phase 4. 고도화 및 운영 최적화
- [ ] FAQ 추천 및 중복 문의·중복 신청 사전 방지 기능 탑재
- [ ] 네이버웍스 알림, SMS 대체 발송, 처리 지연 리마인드 기능 고도화
- [ ] S/W별 Q&A 통계와 사내 지원 서비스 운영 인사이트 보고서 자동화
### 7.5 추후 개발 예정 기능
#### 7.5.1 공용 플랫폼 확장 기능
- 조직도 기반 결재선 자동 추천 기능: 신청 유형과 부서 기준으로 결재 대상 자동 추천 기능
- 자산 메타정보 동기화 기능: 사내 자산관리 시스템 또는 외부 마스터 정보와 비품, 차량, 도서 정보를 자동 동기화하는 기능
- 도서 및 비품 재고 예측 기능: 사용량 기반 부족 품목 예측 및 사전 구매 추천 기능
- 서비스별 맞춤 대시보드 기능: 부서별 처리량, 반려율, 평균 승인 시간 시각화 기능
- 앱 메타정보 동기화 기능: BARON-SSO 또는 외부 시스템에 등록된 S/W 정보를 공용 플랫폼과 자동으로 맞추는 기능
- S/W별 Q&A 딥링크 또는 임베드 연동 기능: 각 소프트웨어 내부에서 해당 앱의 Q&A 화면으로 바로 이동하거나 일부 화면을 직접 표시하는 기능
- 사내 포털 딥링크 또는 임베드 연동 기능: 그룹웨어 또는 사내 포털에서 해당 서비스 화면으로 바로 이동하거나 일부 화면을 직접 표시하는 기능
#### 7.5.2 적용 검토 기준
- 사내 자산관리, 그룹웨어, 조직도 API의 실제 연동 가능 범위 확인
- BARON-SSO 또는 외부 시스템의 앱 메타정보 동기화 가능 범위 확인
- 결재 정책과 운영 프로세스의 시스템 반영 가능 여부 확인
- 네이버웍스 알림 대상자 및 부서별 알림 정책 적용 가능 여부 확인
- 외부 고객 대상 SMS 발송 정책 및 개인정보 보관 기준 적용 가능 여부 확인
- 운영 복잡도 대비 활용 효과가 높은 기능 우선 적용