본문으로 건너뛰기

기술 아키텍처

시스템 구조

기술 스택

프론트엔드

기술버전용도
Next.js16.2.2App Router, Server Actions, SSR
React19.2UI 레이어
TypeScript5.9타입 안전성
Tailwind CSS4스타일링
shadcn/ui최신UI 컴포넌트 (Radix UI 기반)
Zod4스키마-first 데이터 검증
React Hook Form최신폼 관리
Tiptap3서류 리치텍스트 편집기
Phosphor Icons최신아이콘

Firebase 서비스

서비스역할
App HostingNext.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 SearchRAG (판례, 법령 검색)서버 (Server Action)
Cloud Vision API증거/레거시 문서 OCRCloud Functions
Cloud DLPPII 자동 비식별화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/staffFirebase Auth + Custom Claims
(portal)iron-session 세션 쿠키카카오/네이버 OAuth 또는 OTP

인증 계층

계층메커니즘
Edge (Middleware)proxy.ts — 쿠키 유무 확인, PUBLIC_PATHS 외 차단
LayoutgetServerSession() — 토큰 서명 검증 + Custom Claims 확인
Server ActionrequireStaffSession() — role 기반 접근 제어
포털 세션getPortalSession() — iron-session 쿠키 검증 + 토큰 revoke 체크
Firestore RulesisStaffOrOwner(), 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
CIGitHub Actions (ci.yml)
문서GitHub Actions (docs.yml) → GitHub Pages

Cloud Functions (6개 배포)

함수트리거용도
cleanupDocumentStorageFirestore onDelete서류 삭제 시 Storage 정리
aggregateCaseStatsFirestore onChange사건 변경 시 KPI 사전 집계
sendHearingRemindersCloud Scheduler (매일 09:00 KST)기일 D-7/3/1/0 + 항소기한 알림
onCaseClosedLegacyPipelineFirestore onUpdate사건 종결 시 OCR+DLP 파이프라인 (Pro)
retryLegacyProcessingonCall레거시 문서 재처리
자동결제미구현토스페이먼츠 전환 예정

테스트

종류도구현황
단위 테스트Vitest23개 파일 / 399+ 테스트
E2E 테스트Playwright17개 스펙 / 77개 테스트
컴포넌트Storybook 10UI 컴포넌트 시각적 검증
정적 분석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만원/월