기술 아키텍처
시스템 구조
기술 스택
프론트엔드
| 기술 | 버전 | 용도 |
|---|---|---|
| Next.js | 16.2.2 | App Router, Server Actions, SSR |
| React | 19.2 | UI 레이어 |
| TypeScript | 5.9 | 타입 안전성 |
| Tailwind CSS | 4 | 스타일링 |
| shadcn/ui | 최신 | UI 컴포넌트 (Radix UI 기반) |
| Zod | 4 | 스키마-first 데이터 검증 |
| React Hook Form | 최신 | 폼 관리 |
| Tiptap | 3 | 서류 리치텍스트 편집기 |
| Phosphor Icons | 최신 | 아이콘 |
Firebase 서비스
| 서비스 | 역할 |
|---|---|
| App Hosting | Next.js 배포 (Cloud Run, asia-northeast3) |
| Authentication | 이메일/패스워드 인증, Custom Claims (tenantId, role) |
| Firestore | 주 데이터베이스 (실시간 동기화, 경로 기반 테넌트 격리) |
| Cloud Storage | 증거자료, AI 생성 서류, OCR 원본 텍스트 |
| Cloud Functions v2 | 서버리스 백엔드 (트리거, 스케줄) |
| Cloud Scheduler | 매일 09:00 KST 기일 알림 |
AI 서비스
| 서비스 | 역할 | 호출 위치 |
|---|---|---|
| Firebase AI Logic (Gemini) | 서류 생성, 전략 분석 | 클라이언트 (firebase/ai) |
| Vertex AI Search | RAG (판례, 법령 검색) | 서버 (Server Action) |
| Cloud Vision API | 증거/레거시 문서 OCR | Cloud Functions |
| Cloud DLP | PII 자동 비식별화 | Cloud Functions |
기타
| 서비스 | 용도 |
|---|---|
| 토스페이먼츠 | 사업자 카드 정기결제 + 세금계산서 |
| Resend | 이메일 발송 (초대, OTP, 기일 알림) |
| Sentry | 프로덕션 에러 모니터링 |
| reCAPTCHA v3 | 봇 방지 (무료 티어) |
AI 파이프라인
서류 자동 생성
사용자: "AI 서류 생성" 클릭
│
├─ Server Action: checkAiLimitAction (플랜 한도 확인)
├─ Server Action: generateDocTextAction
│ ├─ Firestore 메타데이터 조회
│ └─ Vertex AI Search RAG 검색 (관련 판례)
│
├─ 클라이언트: firebase/ai → Firebase AI Logic (Gemini) 호출
│ └─ 서류 초안 생성
│
├─ Server Action: saveGeneratedDocAction (Firestore + Storage)
└─ Server Action: incrementAiUsageAction (월간 카운터)
지원 서류: 지급명령, 소장, 내용증명, 강제집행신청서 (4종)
AI 전략 분석
사용자: "전략 분석" 클릭
│
├─ Server Action: checkAiLimitAction
├─ Server Action: getStrategyContextAction
│ ├─ 사건 정보 + 증거 수집
│ ├─ PII 마스킹 (주민번호, 전화번호)
│ └─ Vertex AI Search RAG 검색
│
├─ 클라이언트: firebase/ai → Gemini JSON mode 호출
│ └─ StrategyReportResponseSchema (Zod) 검증
│
├─ Server Action: saveStrategyReportAction
└─ Server Action: incrementAiUsageAction
출력: 승소 가능성 점수 + 요건 분석 + 전략 보고서
OCR 파이프라인 (Cloud Functions)
사건 종결 → onCaseClosedLegacyPipeline 트리거
│
├─ Cloud Vision API: 문서 OCR
├─ Cloud DLP: PII 비식별화
├─ Cloud Storage: 원본 텍스트 보관
├─ Firestore: 비식별화 텍스트만 저장
└─ Vertex AI Search: RAG 인덱스 업데이트
보안
라우트 그룹과 접근 제어
| 라우트 그룹 | 접근 조건 | 인증 방식 |
|---|---|---|
(auth) | Public | 없음 (로그인/회원가입) |
(setup) | Firebase Auth + tenantId 없음 | Firebase Auth |
(admin) | Firebase Auth + owner/staff | Firebase Auth + Custom Claims |
(portal) | iron-session 세션 쿠키 | 카카오/네이버 OAuth 또는 OTP |
인증 계층
| 계층 | 메커니즘 |
|---|---|
| Edge (Middleware) | proxy.ts — 쿠키 유무 확인, PUBLIC_PATHS 외 차단 |
| Layout | getServerSession() — 토큰 서명 검증 + Custom Claims 확인 |
| Server Action | requireStaffSession() — role 기반 접근 제어 |
| 포털 세션 | getPortalSession() — iron-session 쿠키 검증 + 토큰 revoke 체크 |
| Firestore Rules | isStaffOrOwner(), isOwner() — 최종 방어 계층 |
역할 체계
의뢰인 ≠ 서비스 유저
의뢰인은 Firebase Auth 계정 없이 카카오/네이버 OAuth + OTP로 접근하는 사건 종속 외부 열람자입니다. 상세: 포털 재설계 문서
PII 보호
- OCR 원본 텍스트 → Cloud Storage에만 보관 (Firestore 저장 금지)
- AI 전달 전 주민번호/전화번호 패턴 마스킹
- Cloud DLP로 레거시 문서 자동 비식별화
- Signed URL 15분 만료 (증거파일 접근)
배포 및 CI/CD
| 구분 | 도구 |
|---|---|
| 호스팅 | Firebase App Hosting (Cloud Run, asia-northeast3) |
| 브랜치 정책 | main = production. feature 브랜치 → PR → merge |
| 자동 배포 | main push → Firebase App Hosting 자동 빌드/배포 |
| 릴리스 | PR merge → feat: 포함 시 minor, 그 외 patch → 태그 + GitHub Release |
| CI | GitHub Actions (ci.yml) |
| 문서 | GitHub Actions (docs.yml) → GitHub Pages |
Cloud Functions (6개 배포)
| 함수 | 트리거 | 용도 |
|---|---|---|
cleanupDocumentStorage | Firestore onDelete | 서류 삭제 시 Storage 정리 |
aggregateCaseStats | Firestore onChange | 사건 변경 시 KPI 사전 집계 |
sendHearingReminders | Cloud Scheduler (매일 09:00 KST) | 기일 D-7/3/1/0 + 항소기한 알림 |
onCaseClosedLegacyPipeline | Firestore onUpdate | 사건 종결 시 OCR+DLP 파이프라인 (Pro) |
retryLegacyProcessing | onCall | 레거시 문서 재처리 |
| 자동결제 | 미구현 | 토스페이먼츠 전환 예정 |
테스트
| 종류 | 도구 | 현황 |
|---|---|---|
| 단위 테스트 | Vitest | 23개 파일 / 399+ 테스트 |
| E2E 테스트 | Playwright | 17개 스펙 / 77개 테스트 |
| 컴포넌트 | Storybook 10 | UI 컴포넌트 시각적 검증 |
| 정적 분석 | ESLint + TypeScript | 빌드 시 자동 검증 |
비용 예측 (Pro 플랜 1,000 사무소 기준)
| 서비스 | 예상 월 비용 |
|---|---|
| App Hosting (Cloud Run) | 약 50~100만원 |
| Firestore | 약 20~50만원 |
| Cloud Functions | 약 10~30만원 |
| Cloud Storage | 약 5~15만원 |
| Vertex AI Search | 약 30~50만원 |
| Cloud DLP | 약 10~20만원 |
| 합계 | 약 125~265만원/월 |