Files
safe-project/docs/architecture.md
Hyungi Ahn 2a9968fa7f feat: TK 안전관리 플랫폼 초기 구현
위험성평가, 안전 RAG Q&A, 안전점검 체크리스트를 통합한
안전관리자 전용 웹 플랫폼 전체 구현.

- Next.js 15 (App Router) + TypeScript + Tailwind + shadcn/ui
- Drizzle ORM + PostgreSQL 16 (12개 테이블)
- 위험성평가 CRUD + 5x5 위험성 매트릭스 + 인쇄 내보내기
- 체크리스트 템플릿/점검/NCR 추적
- RAG 문서 파이프라인 (Tika + bge-m3 + Qdrant)
- SSE 스트리밍 RAG 채팅 (qwen3.5:35b-a3b)
- AI 어시스트 (위험요인 추천, 감소대책, 점검항목 생성)
- 대시보드 통계/차트 (recharts)
- 단일 사용자 인증 (HMAC 쿠키 세션)
- 다크모드 지원
- Docker 멀티스테이지 빌드 (standalone)
- 프로젝트 가이드 문서 (docs/)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 12:33:55 +09:00

4.4 KiB
Raw Permalink Blame History

TK 안전관리 플랫폼 - 아키텍처 가이드

기술 스택

분류 기술
프레임워크 Next.js 15 (App Router, TypeScript, Server Actions)
UI Tailwind CSS + shadcn/ui + Lucide icons + recharts
ORM Drizzle ORM
DB PostgreSQL 16 (컨테이너 tk-safety-db)
AI 생성 맥미니 Ollama qwen3.5:35b-a3b
AI 임베딩 조립컴 Ollama bge-m3 (1024d)
벡터DB Qdrant (컬렉션 safety-docs)
OCR Apache Tika (port 9998)
인증 단일 사용자 (환경변수 비밀번호 + HMAC 쿠키 세션)

포트 매핑

서비스 호스트:컨테이너
tk-safety (Next.js) 3100:3000
tk-safety-db (PostgreSQL) 127.0.0.1:5433:5432

프로젝트 구조

tk-safety/
├── docker-compose.yml      # 서비스 정의
├── Dockerfile              # multi-stage 빌드 (standalone)
├── .env / .env.example     # 환경변수
├── drizzle.config.ts       # Drizzle ORM 설정
├── drizzle/migrations/     # DB 마이그레이션 (자동 생성)
├── uploads/                # 업로드 파일 (documents, photos)
├── docs/                   # 프로젝트 가이드 문서
└── src/
    ├── app/
    │   ├── layout.tsx              # 루트 레이아웃 (다크모드 초기화)
    │   ├── page.tsx                # 인증 리다이렉트
    │   ├── login/page.tsx          # 로그인 페이지
    │   ├── middleware.ts           # 인증 미들웨어
    │   ├── (authenticated)/        # 인증 필요 라우트 그룹
    │   │   ├── layout.tsx          # 사이드바 + 헤더
    │   │   ├── dashboard/          # 대시보드
    │   │   ├── risk-assessment/    # 위험성평가
    │   │   ├── rag/                # 안전 Q&A
    │   │   ├── checklists/         # 점검 체크리스트
    │   │   └── settings/           # 설정
    │   └── api/
    │       ├── auth/               # 로그인/로그아웃 API
    │       ├── ai/                 # AI 엔드포인트 (SSE 스트리밍)
    │       └── health/             # 서비스 헬스체크
    ├── actions/                    # Server Actions (CRUD)
    ├── components/
    │   ├── ui/                     # shadcn/ui 컴포넌트
    │   ├── layout/                 # 사이드바, 헤더, 모바일 내비
    │   ├── dashboard/              # 통계, 차트, 퀵액션
    │   ├── risk-assessment/        # 평가 폼, 매트릭스, AI 패널
    │   ├── rag/                    # 채팅, 문서 관리
    │   └── checklists/             # 템플릿, 점검, NCR
    ├── lib/
    │   ├── db/                     # schema.ts, index.ts
    │   ├── ai/                     # ollama, qdrant, tika, embeddings, prompts
    │   ├── auth.ts                 # 인증 유틸
    │   ├── constants.ts            # 상수 정의
    │   └── utils.ts                # shadcn 유틸
    ├── hooks/                      # use-streaming.ts (SSE)
    └── types/                      # 타입 정의

DB 스키마 (12개 테이블)

위험성평가

  • risk_assessments — 평가 마스터 (제목, 상태, 버전)
  • risk_assessment_hazards — 유해위험요인 (S×L=위험성)

RAG 문서

  • rag_documents — 업로드 문서 (처리 상태 포함)
  • rag_chunks — 문서 청크 (Qdrant pointId 매핑)
  • rag_conversations — 대화 세션
  • rag_messages — 메시지 (질문/답변 + 출처)

체크리스트

  • checklist_templates — 점검 템플릿
  • checklist_template_items — 템플릿 항목
  • inspections — 점검 실행 기록
  • inspection_results — 항목별 결과
  • non_conformances — 부적합 사항 (NCR)

기타

  • app_settings — 앱 설정 (key-value)

AI 연동 흐름

RAG Q&A

질문 → bge-m3 임베딩(조립컴) → Qdrant 검색(top-5) → 컨텍스트 + 질문 → qwen3.5 생성(맥미니) → SSE 스트리밍

AI 위험요인 추천

작업 설명 → bge-m3 임베딩 → Qdrant 검색(top-3) → 컨텍스트 + 프롬프트 → qwen3.5 JSON 생성 → 구조화 응답

문서 처리 파이프라인

파일 업로드 → Tika 텍스트 추출 → 1500자/200 overlap 청킹 → bge-m3 배치 임베딩(10개씩) → Qdrant 저장