Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
翻訳待ち
リポジトリ情報はまだ収集していません。
No updates detected yet. GitHub releases will appear here.
a
翻訳待ち
Loading the full README.
Read the full README ↗Vercel 운영 배포는 PostgreSQL을 사용합니다. 설정·이전·검증 절차는 DEPLOYMENT.md를 먼저 확인하세요. 아래 SQLite 실행 안내는 로컬 개발용입니다.
Next.js App Router · React · TypeScript · Tailwind CSS · 로컬 SQLite / 운영 PostgreSQL. 접수 완료는 출입 또는 작업허가 승인이 아닙니다.
Node.js 24 LTS가 필요합니다. 현재 폴더에는 소스, 설치된 의존성, 로컬 개발용 .env.local이 준비되어 있습니다.
npm run dev
새 컴퓨터/새 체크아웃:
# 사내 인증서를 사용하는 경우. 인증서 검증은 유지됩니다.
$env:NODE_USE_SYSTEM_CA = '1'
npm ci
Copy-Item .env.example .env.local
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# 출력된 값을 .env.local의 DATA_ENCRYPTION_KEY에 입력
npm run db:init
npm run dev
기존 .env.local이 있으면 덮어쓰지 마세요. DATA_ENCRYPTION_KEY 분실/변경 시 기존 정보를 복호화할 수 없습니다. 키는 DB와 별도의 비공개 위치에 백업하세요.
npm run typecheck
npm run build
npm test
npm audit
통합 테스트는 빌드 후 실행합니다. 3107 포트에 독립된 운영 모드 서버를 실행하고 임시 SQLite DB를 사용합니다. 개발 DB와 비밀번호를 변경하지 않으며 테스트 서버는 종료됩니다. 임시 DB에는 가상 테스트 데이터만 저장됩니다.
자동 검증: 비인증 개인정보/내보내기 차단, Origin, 초기 비밀번호 변경 강제, 세션 폐기, 동의 거부/빈 서명, 동시 중복, 타 방문자 요청키 재사용, 암호화, 필터/CSV/XLSX, 수정 충돌, 교육확인, 영상 열람 분리, 삭제/감사로그, 로그인 제한.
수동 테스트:
| 변수 | 설명 |
|---|---|
| APP_ORIGIN | 변경 API에서 정확하게 허용할 Origin. 기본 http://localhost:3000 |
| DATABASE_PATH | 로컬 SQLite 경로. Vercel 운영 저장소로 사용하지 않음 |
| STORAGE_BACKEND | 로컬 sqlite, Vercel postgres |
| DATABASE_URL | 운영 PostgreSQL 연결 문자열. 비밀값 |
| DATA_ENCRYPTION_KEY | 32바이트 hex. 클라이언트 노출 금지. 누락 시 DB 기능 실패 |
| INITIAL_ADMIN_PASSWORD | 최초 DB 생성 시만 사용. 개발 1111. 운영에서 최초 변경 강제 |
| COOKIE_SECURE | HTTPS 운영은 true 필수, 로컬 HTTP는 false |
| TRUST_PROXY | 기본 false. 신뢰 프록시가 X-Forwarded-For를 덮어쓰는 경우만 true |
로그인은 식별키당 15분에 10회, 전체 15분에 100회 제한입니다. TRUST_PROXY=false이면 공유 제한을 사용합니다. 운영은 프록시 IP 정책과 WAF/요청 제한을 설정하세요. 비밀번호 변경은 15분에 5회 제한입니다.
최종 서비스 URL을 QR에 넣으면 방문자가 등록 화면에 접속합니다. localhost QR은 휴대폰에서 사용할 수 없습니다. 같은 네트워크 테스트는 PC 사설 IP를 사용하고 APP_ORIGIN도 해당 주소(예: http://192.168.0.10:3000)로 변경한 뒤 재시작하세요. PC 역시 같은 주소로 접속해야 Origin 검사가 통과합니다. 회사 정책에 따라 방화벽 접근 허용이 필요할 수 있습니다. 정식 QR은 고정 HTTPS 도메인으로 생성하세요. QR 배포와 네트워크 개방은 자동 수행하지 않았습니다.
스키마: lib/db.ts, PRAGMA user_version=1.
| 테이블 | 용도 |
|---|---|
| admins | 비밀번호 해시, ADMIN 역할, 초기 변경 상태 |
| sessions | 세션 토큰 해시, 만료/유휴 시각 |
| visitors | 익명 토큰 해시, 2시간 만료 |
| registrations | ID/접수번호/요청키/요청 HMAC/날짜/암호화된 현재 정보와 원본 |
| videos | 제목, YouTube ID, 노출 순서/상태, 소프트 삭제 |
| view_events | 익명 영상 열람과 재생 종료 시각. 이수 판정 없음 |
| rate_limits | DB 요청 제한 |
| audit | 작업, 수행자, 대상, 시각, 암호화된 상세 사유 |
로컬은 SQLite WAL, 운영은 PostgreSQL 트랜잭션을 사용합니다. 작업일/집계는 한국 시간, 시각은 UTC 저장입니다. 회사명/성명 검색은 서버 메모리에서 복호화 후 필터링하므로 대규모 운영은 DB 검색 구조 확장이 필요합니다. 현재 단일 ADMIN 계정입니다. 관리자의 개인별 책임 추적은 개별 계정/SSO 확장이 필요합니다.
‘종료일로부터 1년’은 운영 전 확정할 정책값입니다. 법률 적합성 검토 완료를 의미하지 않습니다. 1년 경과 다음 날부터 삭제 대상이며, 2월 29일의 다음 해 기준일은 2월 말일입니다.
# 삭제 없이 건수 확인
npm run data:purge
# 확정된 정책에 따라 실제 삭제
npm run data:purge -- --apply
실제 삭제 시 만료 세션/요청제한, 1일 지난 원시 영상열람 이벤트, 366일 지난 감사로그도 정리합니다. 등록에 포함된 열람 스냅샷은 등록정보 보유기간을 따릅니다. 감사 사유에 개인정보를 불필요하게 입력하지 마세요. 작업 스케줄러/cron은 운영자가 설정해야 하며 자동 등록하지 않았습니다. 로컬 SQLite 정리에는 VACUUM/WAL 체크포인트가 포함되므로 유지보수 시간에 실행하세요. 백업도 같은 정책에 따라 별도로 정리해야 합니다.
npm ci
npm run build
npm start
Vercel 운영 시 PostgreSQL에 DB/세션/요청 제한을 저장합니다. SQLite는 로컬 개발에만 사용합니다. 자동 배포는 하지 않았습니다. 상세 절차는 DEPLOYMENT.md를 참조하세요.
직접 서명은 동의문/시각/최초 정보와 함께 보존하며, 공인 전자서명 인증 서비스 연동은 포함하지 않습니다. 실제 교육 확인은 교육대장 등 근거를 확인해 관리자가 기록합니다.