10개 사업 평가현황 관리 시스템 - 개발 및 운영 가이드
| 구분 | 기술 | 용도 |
|---|---|---|
| 런타임 | Cloudflare Workers | 엣지 서버리스 실행 환경 |
| 프레임워크 | Hono v4+ | 경량 웹 프레임워크 |
| 빌드 | Vite + @hono/vite-cloudflare-pages | SSR 빌드 |
| 데이터베이스 | Cloudflare D1 (SQLite) | 분산 관계형 DB |
| 파일 저장 | Cloudflare R2 | 이미지/파일 스토리지 |
| CSS | Tailwind CSS (CDN) | 유틸리티 CSS |
| 아이콘 | FontAwesome 6.5 | 아이콘 라이브러리 |
| 배포 | Wrangler CLI | Cloudflare 배포 도구 |
# 의존성 설치
npm install
# 로컬 개발 서버
npm run build && npm run dev:sandbox
# 프로덕션 배포
npm run deploy
webapp/
├── src/
│ ├── index.tsx # 메인 라우터 (Hono 앱)
│ ├── types.ts # TypeScript 타입 정의
│ ├── routes/
│ │ ├── api.ts # 공개 API 라우트
│ │ └── admin.ts # 관리자 API (CRUD)
│ ├── templates/
│ │ ├── home.tsx # 홈 페이지 (카테고리 요약)
│ │ ├── pages.tsx # 평가현황/공지/FAQ/문의 페이지
│ │ ├── layout.tsx # 공통 레이아웃 (GNB, 푸터)
│ │ └── admin/
│ │ └── index.tsx # 관리자 대시보드 레이아웃
│ ├── middleware/
│ │ └── auth.ts # JWT 인증 미들웨어
│ └── utils/
│ ├── db.ts # DB 유틸리티 (getSettings)
│ └── crypto.ts # 암호화 유틸리티
├── public/
│ └── static/
│ ├── js/
│ │ └── admin-progress.js # 관리자 평가현황 CRUD JS
│ └── docs/
│ ├── architecture-diagram.html
│ └── development-guide.html
├── migrations/
│ ├── 0001_initial_schema.sql
│ ├── 0002_about_pages.sql
│ ├── 0003_progress_schema_upgrade.sql
│ └── 0004_images_and_bg_settings.sql
├── seed.sql # 기본 시드 데이터
├── seed-progress-v2.sql # 10개 사업 평가현황 시드
├── wrangler.jsonc # Cloudflare 설정
├── vite.config.ts # Vite 빌드 설정
└── package.json
pages.tsx (CATEGORY_META), home.tsx (catMeta), admin-progress.js (CATEGORIES)
| 번호 | 카테고리명 | 아이콘 | 색상 | 동적 필드 |
|---|---|---|---|---|
| 1 | CC평가 | fa-shield-halved | #3B82F6 | 보증등급, 인증구분, 신청구분 |
| 2 | 보안기능확인서 | fa-file-shield | #8B5CF6 | 확인서등급, 발급구분, 시험유형 |
| 3 | KCMVP | fa-lock | #EC4899 | 검증등급, 모듈유형, 알고리즘 |
| 4 | 성능평가 | fa-gauge-high | #F59E0B | 성능등급, 평가구분, 평가항목 |
| 5 | 보안적합성검증 | fa-clipboard-check | #10B981 | 적합등급, 검증구분, 검증기준 |
| 6 | 취약점분석평가 | fa-bug | #EF4444 | 위험등급, 분석유형, 평가범위 |
| 7 | 정보보호제품평가 | fa-box-archive | #06B6D4 | 평가등급, 제품유형, 평가기준 |
| 8 | 클라우드보안인증 | fa-cloud-arrow-up | #6366F1 | 인증등급, 서비스유형, 인증기준 |
| 9 | IoT보안인증 | fa-microchip | #14B8A6 | 인증등급, 기기유형, 인증기준 |
| 10 | 기타시험평가 | fa-flask | #78716C | 등급, 유형, 기준 |
# 로컬 개발
npx wrangler d1 migrations apply koist-website-db --local
npx wrangler d1 execute koist-website-db --local --file=./seed-progress-v2.sql
# 프로덕션
npx wrangler d1 migrations apply koist-website-db --remote
npx wrangler d1 execute koist-website-db --remote --file=./seed-progress-v2.sql
seed-progress-v2.sql은 기존 progress_items를 모두 삭제(DELETE)하고 재삽입합니다.
프로덕션에서 실행 전 반드시 데이터 백업을 확인하세요.
pages.tsx의 CATEGORY_META에 카테고리 추가home.tsx의 catMeta에 동일 항목 추가admin-progress.js의 CATEGORIES에 동적 폼 필드 추가// 성공
{ "success": true, "data": [...] }
// 에러
{ "error": "에러 메시지" }
카테고리별 요약 카드 (건수) + 최근 5건 테이블로 구성. 각 카드 클릭 시 해당 카테고리 상세로 이동.
onCatChange() 함수에서 선택된 카테고리의 col2Opts, col3Opts, col4Opts를 읽어 셀렉트박스를 동적으로 교체합니다.
# 1. 빌드
npm run build
# 2. (최초 또는 스키마 변경 시) 마이그레이션
npx wrangler d1 migrations apply koist-website-db --remote
# 3. (최초 또는 데이터 변경 시) 시드 데이터
npx wrangler d1 execute koist-website-db --remote --file=./seed-progress-v2.sql
# 4. 배포
npx wrangler pages deploy dist --project-name koist-website
# 5. 확인
curl https://koist-website.pages.dev/support/progress
| 구분 | 항목 | 확인 |
|---|---|---|
| 홈 | 카테고리 요약 카드 표시 (최대 6개) | ☐ |
| 홈 | 최근 평가현황 테이블 (5건) | ☐ |
| 평가현황 | 10개 카테고리 탭 전환 | ☐ |
| 평가현황 | 카테고리별 독립 데이터 표시 | ☐ |
| 평가현황 | 카테고리별 동적 컬럼 헤더 | ☐ |
| 평가현황 | 검색/상태 필터 동작 | ☐ |
| 평가현황 | 페이지네이션 동작 | ☐ |
| 관리자 | 카테고리별 건수 카드 표시 | ☐ |
| 관리자 | 카테고리 필터링 | ☐ |
| 관리자 | 신규 추가 (동적 폼) | ☐ |
| 관리자 | 수정 (기존 데이터 로드) | ☐ |
| 관리자 | 삭제 (확인 다이얼로그) | ☐ |
| 관리자 | 카테고리 변경 시 폼 필드 동적 갱신 | ☐ |
| 문서 | 설계서 다운로드/인쇄 | ☐ |
| 문서 | 개발지침서 다운로드/인쇄 | ☐ |
| 모바일 | 팝업 반응형 동작 | ☐ |
| 모바일 | 평가현황 테이블 가로 스크롤 | ☐ |
/admin (기본 계정: admin / admin1234)/admin/progress 에서 사업별 입력/수정/삭제/admin/site-settings 에서 전화번호, 슬로건 등 변경no such table 오류)/api/init-db 호출KOIST 평가현황 시스템 개발지침서 v8.0 | 한국정보보안기술원