first commit
This commit is contained in:
@@ -0,0 +1,308 @@
|
||||
# 통합 지원 플랫폼 상세 설계서
|
||||
|
||||
## 1. 프로젝트 개요
|
||||
|
||||
### 1.1 프로젝트 정보
|
||||
|
||||
| 항목 | 내용 |
|
||||
| --- | --- |
|
||||
| 플랫폼명 | BARON Q&A System |
|
||||
| 핵심 목적 | EG-BIM 등 복수 소프트웨어의 Q&A, FAQ, 원격 지원 기능을 통합하고 BARON-SSO 기반 보안을 적용한 전사 기술지원 허브 구축 |
|
||||
| 주요 대상 | BARON-SSO에 등록된 일반 사용자(User), 소프트웨어 담당자(Support), 시스템 관리자(Admin) |
|
||||
|
||||
### 1.2 추진 배경 및 기대 효과
|
||||
|
||||
- 여러 제품군에 분산된 기술지원 채널의 단일 플랫폼 통합
|
||||
- 사용자 질문, FAQ, 원격 지원 이력의 일원화를 통한 대응 품질 및 추적성 향상
|
||||
- BARON-SSO와 앱 단위 권한 제어를 통한 보안성 및 운영 효율 확보
|
||||
|
||||
## 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 |
|
||||
| 외부 연동 | ABC User Feedback 웹훅, 네이버웍스 알림 연동 |
|
||||
| 인프라 | Ubuntu 24.04 (WSL2), Docker Compose, Nginx |
|
||||
|
||||
### 2.2 아키텍처 방향
|
||||
|
||||
- 프론트엔드의 Next.js 기반 구성으로 사용자 경험 및 생산성 확보
|
||||
- 백엔드의 FastAPI 중심 경량 API 구조 설계를 통한 인증, 게시판, FAQ, 원격 지원 기능 분리 구현
|
||||
- PostgreSQL과 SQLAlchemy 기반 데이터 계층 구성 및 앱별 접근 제어의 데이터 모델 반영
|
||||
- BARON-SSO 연동 전제의 인증 구조 적용 및 표준 OAuth 2.0 / OIDC 기반 세션·토큰 검증 수행
|
||||
- ABC User Feedback 연계를 통한 사용자 의견 수집 및 지원 품질 개선 체계 확보
|
||||
- ABC User Feedback 웹훅 이벤트와 네이버웍스 알림 연계를 통한 실시간 커뮤니케이션 체계 확보
|
||||
|
||||
### 2.3 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 설계 원칙
|
||||
|
||||
권한 기반 데이터 격리(RBAC)를 위해 모든 게시물이 `app_id`를 참조하고, 사용자는 `user_app_access`를 통해 허용된 앱에만 접근하도록 설계
|
||||
|
||||
- 신규 앱이 추가되더라도 공통 스키마 변경 없이 `software_apps` 데이터 추가만으로 확장 가능한 구조 적용
|
||||
- 전역 관리자 권한과 앱별 운영 권한 분리를 통한 멀티앱 확장 대응
|
||||
- 사용자-앱 매핑의 중복 방지 및 상태값 표준화를 통한 운영 일관성 확보
|
||||
- 목록 조회 성능 확보를 위한 앱 기준 인덱스 설계 반영
|
||||
|
||||
### 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. 사용자 정보 (BARON-SSO 동기화)
|
||||
CREATE TABLE users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
sso_user_id VARCHAR(100) UNIQUE NOT NULL,
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
name VARCHAR(100),
|
||||
company VARCHAR(100),
|
||||
department VARCHAR(100),
|
||||
global_role VARCHAR(20) DEFAULT 'USER', -- ADMIN, USER
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 3. 사용자별 앱 접근 권한 및 앱별 역할
|
||||
CREATE TABLE user_app_access (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER NOT NULL REFERENCES users(id),
|
||||
app_id INTEGER NOT NULL REFERENCES software_apps(id),
|
||||
app_role VARCHAR(20) NOT NULL DEFAULT 'USER', -- SUPPORT, USER
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE (user_id, app_id)
|
||||
);
|
||||
|
||||
-- 4. Q&A 상태 코드
|
||||
CREATE TABLE qna_status_codes (
|
||||
code VARCHAR(20) PRIMARY KEY,
|
||||
name VARCHAR(50) NOT NULL,
|
||||
sort_order INTEGER NOT NULL
|
||||
);
|
||||
|
||||
-- 5. Q&A 카테고리 코드
|
||||
CREATE TABLE qna_category_codes (
|
||||
code VARCHAR(20) PRIMARY KEY,
|
||||
name VARCHAR(50) NOT NULL,
|
||||
sort_order INTEGER NOT NULL
|
||||
);
|
||||
|
||||
-- 6. Q&A 게시글
|
||||
CREATE TABLE qna_posts (
|
||||
id SERIAL PRIMARY KEY,
|
||||
app_id INTEGER NOT NULL REFERENCES software_apps(id),
|
||||
user_id INTEGER NOT NULL REFERENCES users(id),
|
||||
title VARCHAR(255) NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
category_code VARCHAR(20) REFERENCES qna_category_codes(code),
|
||||
status_code VARCHAR(20) NOT NULL DEFAULT 'RECEIVED' REFERENCES qna_status_codes(code),
|
||||
is_secret BOOLEAN DEFAULT FALSE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 7. 댓글
|
||||
CREATE TABLE comments (
|
||||
id SERIAL PRIMARY KEY,
|
||||
post_id INTEGER NOT NULL REFERENCES qna_posts(id),
|
||||
author_id INTEGER NOT NULL REFERENCES users(id),
|
||||
content TEXT NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 8. 첨부파일 통합 관리
|
||||
CREATE TABLE attachments (
|
||||
id SERIAL PRIMARY KEY,
|
||||
parent_type VARCHAR(20) NOT NULL, -- 'POST' 또는 'COMMENT'
|
||||
parent_id INTEGER NOT NULL,
|
||||
app_id INTEGER NOT NULL REFERENCES software_apps(id),
|
||||
file_name VARCHAR(255) NOT NULL,
|
||||
file_path VARCHAR(500) NOT NULL,
|
||||
file_size INTEGER,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 9. 원격 지원 상태 코드
|
||||
CREATE TABLE remote_support_status_codes (
|
||||
code VARCHAR(20) PRIMARY KEY,
|
||||
name VARCHAR(50) NOT NULL,
|
||||
sort_order INTEGER NOT NULL
|
||||
);
|
||||
|
||||
-- 10. 원격 지원 로그
|
||||
CREATE TABLE remote_support (
|
||||
id SERIAL PRIMARY KEY,
|
||||
post_id INTEGER NOT NULL REFERENCES qna_posts(id),
|
||||
scheduled_time TIMESTAMP,
|
||||
status_code VARCHAR(20) REFERENCES remote_support_status_codes(code),
|
||||
support_engineer_id INTEGER REFERENCES users(id),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- 11. 주요 조회 인덱스
|
||||
CREATE INDEX idx_user_app_access_app_role ON user_app_access (app_id, app_role);
|
||||
CREATE INDEX idx_qna_posts_app_status_created ON qna_posts (app_id, status_code, created_at DESC);
|
||||
CREATE INDEX idx_qna_posts_user_created ON qna_posts (user_id, created_at DESC);
|
||||
CREATE INDEX idx_comments_post_created ON comments (post_id, created_at DESC);
|
||||
CREATE INDEX idx_attachments_app_parent ON attachments (app_id, parent_type, parent_id);
|
||||
```
|
||||
|
||||
## 4. 권한 및 보안 설계
|
||||
|
||||
### 4.1 역할 기반 접근 제어(RBAC)
|
||||
|
||||
| 역할 | 접근 범위 | 주요 권한 |
|
||||
| --- | --- | --- |
|
||||
| Admin | 전사 전체 소프트웨어 | 전체 통계 조회, 모든 게시글 수정/삭제, FAQ 관리, 앱 권한 부여 |
|
||||
| Support | 본인에게 할당된 소프트웨어 | 담당 앱 Q&A 답변, 원격 지원 시작, 상태 변경 |
|
||||
| User | 본인이 사용 중인 소프트웨어 | Q&A 작성/조회, FAQ 검색, 원격 지원 신청 |
|
||||
|
||||
### 4.2 권한 검증 로직
|
||||
|
||||
- 모든 API 요청에서 JWT 토큰 기준 사용자 식별 정보 추출
|
||||
- 전사 관리자 여부는 `users.global_role` 기준 확인
|
||||
- 앱 단위 접근 권한과 역할은 `user_app_access.app_role` 기준 검증
|
||||
- 요청 앱에 대한 권한이 없을 경우 `403 Forbidden` 반환
|
||||
- 비밀글(`is_secret = true`)의 작성자 본인, 권한 있는 Support, Admin 한정 조회
|
||||
|
||||
## 5. 주요 기능 및 UI 설계
|
||||
|
||||
### 5.1 통합 Q&A 리스트
|
||||
|
||||
- 제품별, 상태별, 날짜별 필터 제공
|
||||
- 접수중, 검토중, 패치예정, 해결완료 상태의 컬러 배지 구분을 통한 가시성 강화
|
||||
- MS Q&A 및 EG-BIM 사례를 참고한 검색성·가독성 중심 리스트 구조 적용
|
||||
|
||||
### 5.2 지능형 FAQ 및 원격 지원
|
||||
|
||||
- 질문 작성 시 제목 키워드 기반 관련 FAQ 실시간 추천
|
||||
- 게시글 내용이 복잡하거나 재현이 어려운 경우 담당자에 의한 원격 지원 세션 생성 및 링크 전달
|
||||
- Q&A에서 원격 지원으로 자연스럽게 전환되는 단순 운영 흐름 구성
|
||||
|
||||
### 5.3 파일 및 이미지 업로드
|
||||
|
||||
- 게시글 본문 및 댓글에서 드래그 앤 드롭 방식의 이미지 첨부 지원
|
||||
- `attachments` 테이블을 통한 게시글·댓글 출처 구분 및 보존·삭제 이력 관리
|
||||
- 초기 저장소의 로컬 볼륨 또는 S3 호환 스토리지 기준 검토
|
||||
|
||||
### 5.4 웹훅 기반 알림 연동
|
||||
|
||||
- ABC User Feedback에서 제공하는 웹훅을 활용한 앱별 Q&A 이벤트 수신
|
||||
- 각 앱 사용자의 Q&A 화면 접근 시 주요 공지 또는 신규 문의 현황 노출
|
||||
- 사용자의 신규 Q&A 글 작성 시 담당자 대상 네이버웍스 알림 발송
|
||||
- 담당자의 답변글 작성 시 작성자 대상 네이버웍스 알림 발송
|
||||
- 알림 이벤트의 앱별 라우팅, 수신 대상 매핑, 발송 이력 관리 체계 구성
|
||||
|
||||
## 6. 역할별 사용 시나리오
|
||||
|
||||
### 6.1 일반 사용자(User) 시나리오
|
||||
|
||||
- 각 소프트웨어 프로그램 로그인
|
||||
- Q&A 페이지 접근
|
||||
- 해당 앱 기준 Q&A 리스트 노출 및 기존 문의 확인
|
||||
- 신규 문의 글 작성
|
||||
- 담당자의 답변글 등록 시 네이버웍스 알림 수신
|
||||
- 알림 확인 후 Q&A 페이지에서 답변글 확인
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[사용자 로그인] --> B[Q&A 페이지 접근]
|
||||
B --> C[해당 앱 Q&A 리스트 확인]
|
||||
C --> D[신규 문의 글 작성]
|
||||
D --> E[담당자 답변 등록]
|
||||
E --> F[네이버웍스 알림 수신]
|
||||
F --> G[답변글 확인]
|
||||
```
|
||||
|
||||
### 6.2 소프트웨어 담당자(Support) 시나리오
|
||||
|
||||
- 본인 담당 소프트웨어 관련 글만 노출 및 확인
|
||||
- 신규 등록 글의 새글 표시 확인
|
||||
- 문의 내용 검토 후 답변글 작성
|
||||
- 처리 단계에 따른 상태값 변경
|
||||
- 답변 등록 시 사용자 대상 네이버웍스 알림 발송
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[담당 앱 글 목록 확인] --> B[새글 표시 확인]
|
||||
B --> C[문의 내용 검토]
|
||||
C --> D[답변글 작성]
|
||||
D --> E[상태값 변경]
|
||||
E --> F[사용자 대상 네이버웍스 알림 발송]
|
||||
```
|
||||
|
||||
### 6.3 관리자(Admin) 시나리오
|
||||
|
||||
- 로컬 개발 환경에서 기능 개발 및 수정
|
||||
- Git 저장소 업로드
|
||||
- CI/CD 파이프라인을 통한 운영 서버 Docker 환경 배포
|
||||
- 배포 결과 및 운영 상태 확인
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[로컬 개발 및 수정] --> B[Git 저장소 업로드]
|
||||
B --> C[CI/CD 파이프라인 실행]
|
||||
C --> D[운영 서버 Docker 배포]
|
||||
D --> E[배포 결과 및 운영 상태 확인]
|
||||
```
|
||||
|
||||
## 7. 구현 로드맵
|
||||
|
||||
### 7.1 Phase 1. 핵심 인프라 구축
|
||||
|
||||
- [ ] Ubuntu 및 Docker 서버 환경 셋업
|
||||
- [ ] BARON-SSO OAuth2 연동 및 사용자 매핑 로직 구현
|
||||
- [ ] RBAC 기반 DB 스키마 생성 및 기초 API 개발
|
||||
|
||||
### 7.2 Phase 2. 통합 플랫폼 UI 개발
|
||||
|
||||
- [ ] 소프트웨어별 격리 게시판 및 통합 리스트 UI 구현
|
||||
- [ ] 첨부파일 및 이미지 업로드 시스템 구축
|
||||
- [ ] 원격 지원 신청 기능 및 관리자 대시보드 연동
|
||||
|
||||
### 7.3 Phase 3. 고도화 및 운영 최적화
|
||||
|
||||
- [ ] AI 기반 FAQ 자동 추천 엔진 탑재
|
||||
- [ ] ABC User Feedback 웹훅 및 네이버웍스 알림 연동 고도화
|
||||
- [ ] 이슈 해결 통계 및 제품 품질 인사이트 보고서 자동화
|
||||
|
||||
### 7.4 추후 개발 예정 기능
|
||||
|
||||
#### 7.4.1 ADC User Feedback 연계 확장 기능
|
||||
|
||||
- 앱 메타정보 동기화 기능: BARON-SSO 또는 ADC User Feedback에 등록된 앱 코드, 앱명, 사용 여부 등의 정보를 우리 플랫폼과 자동으로 맞추는 기능
|
||||
- 상태 변경 이벤트 기반 네이버웍스 추가 알림 기능
|
||||
- FAQ, 기존 문의, 공지사항 기반 중복 문의 사전 방지 기능
|
||||
- 앱별 문의 건수, 처리량, 응답 시간 기준 통계 대시보드 기능
|
||||
- 소프트웨어별 Q&A 딥링크 또는 임베드 연동 기능: 각 소프트웨어 내부에서 해당 앱의 Q&A 화면으로 바로 이동하거나, Q&A 일부 화면을 프로그램 내부에 직접 표시하는 기능
|
||||
|
||||
#### 7.4.2 적용 검토 기준
|
||||
|
||||
- ADC User Feedback 제공 API, 웹훅, 임베드 기능의 실제 지원 범위 확인
|
||||
- SSO 앱 메타정보와 플랫폼 내부 운영 메타정보 간 동기화 가능 여부 확인
|
||||
- 네이버웍스 알림 대상자 매핑 및 부서별 알림 정책 적용 가능 여부 확인
|
||||
- 운영 복잡도 대비 활용 효과가 높은 기능 우선 적용
|
||||
Reference in New Issue
Block a user