통합 지원 플랫폼 상세 설계서
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 및 배포 프로세스
3. 데이터베이스 설계
3.1 설계 원칙
권한 기반 데이터 격리(RBAC)를 위해 모든 게시물이 app_id를 참조하고, 사용자는 user_app_access를 통해 허용된 앱에만 접근하도록 설계
- 신규 앱이 추가되더라도 공통 스키마 변경 없이
software_apps 데이터 추가만으로 확장 가능한 구조 적용
- 전역 관리자 권한과 앱별 운영 권한 분리를 통한 멀티앱 확장 대응
- 사용자-앱 매핑의 중복 방지 및 상태값 표준화를 통한 운영 일관성 확보
- 목록 조회 성능 확보를 위한 앱 기준 인덱스 설계 반영
3.2 핵심 스키마
-- 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 페이지에서 답변글 확인
6.2 소프트웨어 담당자(Support) 시나리오
- 본인 담당 소프트웨어 관련 글만 노출 및 확인
- 신규 등록 글의 새글 표시 확인
- 문의 내용 검토 후 답변글 작성
- 처리 단계에 따른 상태값 변경
- 답변 등록 시 사용자 대상 네이버웍스 알림 발송
6.3 관리자(Admin) 시나리오
- 로컬 개발 환경에서 기능 개발 및 수정
- Git 저장소 업로드
- CI/CD 파이프라인을 통한 운영 서버 Docker 환경 배포
- 배포 결과 및 운영 상태 확인
7. 구현 로드맵
7.1 Phase 1. 핵심 인프라 구축
7.2 Phase 2. 통합 플랫폼 UI 개발
7.3 Phase 3. 고도화 및 운영 최적화
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 앱 메타정보와 플랫폼 내부 운영 메타정보 간 동기화 가능 여부 확인
- 네이버웍스 알림 대상자 매핑 및 부서별 알림 정책 적용 가능 여부 확인
- 운영 복잡도 대비 활용 효과가 높은 기능 우선 적용