From 5c9b13ed192bcc16f3ddd6f95d29ed828ca876cb Mon Sep 17 00:00:00 2001 From: hyeonggil <> Date: Mon, 30 Mar 2026 23:31:37 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20chore:=20Update=20shrimp=5Fdata?= =?UTF-8?q?=20subproject=20status=20and=20add=20pre-tool=20hook=20configur?= =?UTF-8?q?ation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Marked shrimp_data subproject as dirty - Added pre-tool hook configuration to settings.local.json --- .claude/hooks/notification-hook.sh | 24 + .claude/hooks/notify_telegram.sh | 41 ++ .claude/hooks/pre-tool-hook.sh | 26 + .claude/hooks/stop-hook.sh | 20 + .claude/settings.local.json | 11 + html/nuxt-fe-ai-wiki-report-v1.1_1.html | 830 ++++++++++++++++++++++++ telegram_bot.py | 236 +++++++ 7 files changed, 1188 insertions(+) create mode 100755 .claude/hooks/notification-hook.sh create mode 100755 .claude/hooks/notify_telegram.sh create mode 100755 .claude/hooks/pre-tool-hook.sh create mode 100755 .claude/hooks/stop-hook.sh create mode 100644 html/nuxt-fe-ai-wiki-report-v1.1_1.html create mode 100644 telegram_bot.py diff --git a/.claude/hooks/notification-hook.sh b/.claude/hooks/notification-hook.sh new file mode 100755 index 0000000..27820d5 --- /dev/null +++ b/.claude/hooks/notification-hook.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +# Claude Code - Notification 훅 +# Claude가 사용자 주의가 필요한 알림을 보낼 때 실행된다. +# +# stdin JSON 형식: {"session_id": "...", "message": "..."} + +set -euo pipefail + +HOOK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# stdin에서 JSON 읽기 +INPUT="$(cat)" + +MESSAGE="$(echo "$INPUT" | jq -r '.message // ""')" + +if [[ -z "$MESSAGE" ]]; then + exit 0 +fi + +TELEGRAM_MESSAGE="🔔 *Claude 알림* + +${MESSAGE}" + +"$HOOK_DIR/notify_telegram.sh" "$TELEGRAM_MESSAGE" diff --git a/.claude/hooks/notify_telegram.sh b/.claude/hooks/notify_telegram.sh new file mode 100755 index 0000000..574089b --- /dev/null +++ b/.claude/hooks/notify_telegram.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# Telegram 메시지 발송 공통 유틸리티 +# 사용법: notify_telegram.sh "메시지 본문" +# +# 필요 환경변수: +# TELEGRAM_BOT_TOKEN - BotFather 발급 토큰 +# TELEGRAM_CHAT_ID - 알림을 받을 채팅 ID + +set -euo pipefail + +# 환경변수 미설정 시 .env 파일에서 로드 (Claude Code 훅 실행 환경 대응) +ENV_FILE="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/.env" +if [[ -f "$ENV_FILE" ]]; then + # export 구문을 포함한 .env 파일 소싱 + set -a + # shellcheck source=/dev/null + source "$ENV_FILE" + set +a +fi + +TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN:-}" +TELEGRAM_CHAT_ID="${TELEGRAM_CHAT_ID:-}" +MESSAGE="${1:-}" + +# 환경변수 미설정 시 조용히 종료 (훅 실패로 Claude 작업 중단 방지) +if [[ -z "$TELEGRAM_BOT_TOKEN" || -z "$TELEGRAM_CHAT_ID" ]]; then + exit 0 +fi + +if [[ -z "$MESSAGE" ]]; then + exit 0 +fi + +curl -s -X POST \ + "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \ + -H "Content-Type: application/json" \ + -d "$(jq -n \ + --argjson chat_id "$TELEGRAM_CHAT_ID" \ + --arg text "$MESSAGE" \ + '{chat_id: $chat_id, text: $text, parse_mode: "Markdown"}')" \ + > /dev/null diff --git a/.claude/hooks/pre-tool-hook.sh b/.claude/hooks/pre-tool-hook.sh new file mode 100755 index 0000000..a6fa05f --- /dev/null +++ b/.claude/hooks/pre-tool-hook.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +# Claude Code - PreToolUse 훅 +# 툴 실행 직전에 실행되어 Telegram으로 알림을 보낸다. +# +# stdin JSON 형식: +# {"session_id": "...", "tool_name": "...", "tool_input": {...}} + +set -euo pipefail + +HOOK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +INPUT="$(cat)" + +TOOL_NAME="$(echo "$INPUT" | jq -r '.tool_name // ""')" +TOOL_INPUT="$(echo "$INPUT" | jq -r '.tool_input // {} | to_entries | map("\(.key): \(.value)") | join(", ")')" + +if [[ -z "$TOOL_NAME" ]]; then + exit 0 +fi + +TELEGRAM_MESSAGE="⚙️ *툴 실행* + +🔧 \`${TOOL_NAME}\` +📝 ${TOOL_INPUT}" + +"$HOOK_DIR/notify_telegram.sh" "$TELEGRAM_MESSAGE" diff --git a/.claude/hooks/stop-hook.sh b/.claude/hooks/stop-hook.sh new file mode 100755 index 0000000..048f2ef --- /dev/null +++ b/.claude/hooks/stop-hook.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# Claude Code - Stop 훅 +# Claude가 응답을 완료하고 멈출 때 실행된다. +# +# stdin JSON 형식: {"session_id": "...", "stop_hook_active": true} + +set -euo pipefail + +HOOK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# stdin에서 JSON 읽기 +INPUT="$(cat)" + +SESSION_ID="$(echo "$INPUT" | jq -r '.session_id // ""')" + +TELEGRAM_MESSAGE="✅ *Claude 작업 완료* + +세션 ID: \`${SESSION_ID}\`" + +"$HOOK_DIR/notify_telegram.sh" "$TELEGRAM_MESSAGE" diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 70308aa..9ed3a68 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -36,6 +36,17 @@ ] } ], + "PreToolUse": [ + { + "matcher": "*", + "hooks": [ + { + "type": "command", + "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/pre-tool-hook.sh" + } + ] + } + ], "Stop": [ { "matcher": "*", diff --git a/html/nuxt-fe-ai-wiki-report-v1.1_1.html b/html/nuxt-fe-ai-wiki-report-v1.1_1.html new file mode 100644 index 0000000..bc5f4e1 --- /dev/null +++ b/html/nuxt-fe-ai-wiki-report-v1.1_1.html @@ -0,0 +1,830 @@ + + +
+ + +Claude Code Skills 기반 지능형 업무 매뉴얼 — FE 개발 프로세스 표준화 로드맵
+ +본 문서는 Nuxt 3 기반 FE 개발 프로세스를 Claude Code AI Skills과 통합하여 체계적인 표준화 체계를 구축하기 위한 로드맵입니다. 팀 전체가 동일한 품질과 패턴으로 개발할 수 있도록 각 단계별 지능형 업무 매뉴얼(Skills)을 정의합니다.
+ +Claude Code Skills은 특정 작업 도메인에 대해 Claude가 전문적으로 수행할 수 있도록 구조화된 업무 지시서입니다. SKILL.md 파일을 중심으로, 트리거 조건·실행 절차·출력 포맷이 정의되어 있어 팀원 누구나 일관된 결과를 얻을 수 있습니다.
+ +| 구성 요소 | 설명 | 예시 |
|---|---|---|
| SKILL.md | 핵심 지시서 (500줄 이내 권장) | 트리거, 절차, 출력 포맷 정의 |
| scripts/ | 반복 작업 자동화 스크립트 | 컴포넌트 생성기, 린트 검사기 |
| references/ | 도메인별 참조 문서 | Nuxt 컨벤션, API 패턴 가이드 |
| assets/ | 템플릿, 아이콘 등 리소스 | 컴포넌트 보일러플레이트 |
FE 개발의 전체 라이프사이클을 4개 대단계, 6개 세부 Phase로 구분하고, 각 Phase마다 전용 Claude Code Skill을 배치합니다.
+ +| 대단계 | Phase | 핵심 활동 | Claude Skill |
|---|---|---|---|
| 기획 | Phase 1 | 요구사항 정의, 플로우차트 | nuxt-requirement-analyzer/SKILL.md |
| 디자인 | Phase 2 | HTML 마크업, Tailwind 컨벤션 | markup/SKILL.md |
| Phase 2-1 | 프로모션 HTML 마크업 | markup/promotion/SKILL.md | |
| Phase 2-2 | EDM HTML 마크업 | markup/edm/SKILL.md | |
| FE개발 | Phase 3 | Nuxt 컴포넌트 아키텍처 | nuxt-component-architect |
| + | Phase 3-1 | +Nuxt 공식문서 기반 | +
+ nuxt/SKILL.md |
+
| FE개발 | Phase 4 | API 연동, Pinia 상태관리 | nuxt-api-state-manager/SKILL.md |
| 검증 | Phase 5 | 성능 최적화 (CWV) | nuxt-perf-optimizer/SKILL.md |
| 검증 | Phase 6 | SEO · GEO · AEO 검증 | nuxt-seo-geo/SKILL.md |
트리거: 요구사항, 기획서, 플로우차트, 화면정의서, 유저스토리
+기획 문서를 분석하여 Nuxt 프로젝트에 적합한 구조화된 요구사항 명세(페이지 목록, 컴포넌트 트리, 라우팅 맵, 데이터 플로우)를 자동 생성합니다.
+다음 기획서를 분석해서 Nuxt 3 프로젝트 구조를 설계해줘. + +[기획서 첨부 또는 내용 붙여넣기] + +출력 형식: +1. pages/ 디렉토리 라우팅 구조 +2. components/ Atomic Design 기반 컴포넌트 트리 +3. 각 페이지별 필요 API 엔드포인트 목록 +4. Mermaid 플로우차트 (화면 전환 흐름) +5. composables/ 에 필요한 공통 로직 목록+
트리거: 마크업, HTML 구조, 시멘틱, Tailwind, 클래스 순서, 접근성, ARIA, SFC 구조, 반응형
+디자인 시안을 Nuxt 컴포넌트의 시멘틱 HTML + Tailwind CSS로 변환합니다. 4개 참조 문서(시멘틱 HTML, Tailwind 컨벤션, 접근성, Nuxt SFC 패턴)를 도메인별로 선택 로드합니다.
+| 영역 | 시멘틱 태그 | 규칙 |
|---|---|---|
| 레이아웃 | <header>, <nav>, <main>, <aside>, <footer> | 페이지 대구조 정의, div 남용 금지 |
| 섹션 | <section>, <article> | 의미 단위 그룹핑, aria-label 필수 |
| 제목 | <h1>~<h6> | 페이지당 h1 1개, 건너뛰기 금지 |
| 목록 | <ul>, <ol>, <dl> | 나열형 데이터는 반드시 리스트 태그 |
| 폼 | <form>, <fieldset>, <label> | 모든 input에 label 연결 필수 |
| 인터랙티브 | <button>, <a>, <dialog> | 클릭 가능 요소는 반드시 시멘틱 태그 |
| 순서 | 카테고리 | 대표 클래스 | 기억법 |
|---|---|---|---|
| 1 | Layout | flex, grid, block, hidden | "어떻게 배치?" |
| 2 | Position | relative, absolute, fixed, z-* | "어디에 놓을까?" |
| 3 | Box Model | w-*, h-*, p-*, m-*, gap-* | "얼마나 크게?" |
| 4 | Typography | text-*, font-*, leading-* | "글자를 어떻게?" |
| 5 | Visual | bg-*, border-*, rounded-*, shadow-* | "어떻게 보이게?" |
| 6 | State | hover:*, focus:*, sm:*, md:* | "상태가 바뀌면?" |
| 7 | Motion | transition-*, duration-*, animate-* | "움직임은?" |
트리거: 프로모션, 랜딩페이지, 이벤트 페이지, 프로모션 마크업, 캠페인 페이지
+프로모션 및 랜딩페이지에 특화된 HTML 마크업을 생성합니다. 캠페인 성격에 맞는 시멘틱 구조, 반응형 레이아웃, CTA 배치 패턴을 포함합니다.
+트리거: EDM, 이메일, 뉴스레터, 메일 템플릿, 이메일 마크업
+EDM(Email Direct Marketing) 및 뉴스레터용 HTML 마크업을 생성합니다. 이메일 클라이언트 호환성, 테이블 기반 레이아웃, 인라인 스타일 패턴을 포함합니다.
+트리거: Nuxt 컴포넌트, 페이지, composable, 레이아웃, 미들웨어, 플러그인
+Nuxt 3 공식 가이드를 기반으로 컴포넌트를 설계합니다. auto-import, composables 패턴, server/ 디렉토리 활용, 레이아웃 전략을 포함한 전체 아키텍처를 제안합니다.
+| 참조 파일 | Nuxt 공홈 출처 | 로드 트리거 |
|---|---|---|
server.md | API routes, server middleware | 서버 API, 미들웨어 작업 시 |
middleware.md | Middleware, File-based routing | 미들웨어, 라우팅 설계 시 |
plugins.md | Plugins, app lifecycle | 플러그인, 앱 라이프사이클 작업 시 |
nuxt-composables.md | Nuxt composables | composable 작성 시 |
nuxt-components.md | NuxtLink, NuxtImg, NuxtTime | Nuxt 내장 컴포넌트 사용 시 |
nuxt-config.md | Configuration, modules, auto-imports, layers | Nuxt 설정, 모듈 구성 시 |
트리거: Nuxt 공식문서, Nuxt 가이드, Nuxt API, NuxtLink, NuxtImg, definePageMeta, useFetch, server/api
+Nuxt 공식문서를 기반으로 Best Practice에 맞는 코드를 생성합니다. 6개 참조 문서(server, routing, middleware-plugins, composables, components, config)를 컨텍스트에 따라 선택적으로 로드합니다.
+트리거: API 연동, useFetch, useAsyncData, Pinia, 스토어, 상태관리, 에러 핸들링
+Nuxt 3의 데이터 페칭 유틸리티와 Pinia 스토어를 조합한 표준 패턴을 생성합니다.
+| 패턴 | 사용 시점 | 특징 |
|---|---|---|
useFetch() | 컴포넌트에서 직접 API 호출 | SSR 지원, 자동 캐싱, key 기반 중복 방지 |
useAsyncData() | 복잡한 데이터 변환 필요 시 | 커스텀 fetch 로직, transform 지원 |
$fetch() | 이벤트 핸들러 내 API 호출 | 클라이언트 사이드만, SSR 미지원 |
server/api/ | BFF 패턴, 서버 사이드 로직 | Nitro 기반, API 키 보호 |
기존 Phase 5에서 성능 최적화 영역만 분리하여 전담 Skill로 구성합니다. 번들 최적화, 이미지 처리, 캐싱, 렌더링 전략 등 런타임 퍼포먼스에 집중합니다.
+ +트리거: 성능, 최적화, Lighthouse, Core Web Vitals, LCP, CLS, INP, 번들, 로딩 속도, 캐싱, lazy loading
+Nuxt 3 프로젝트의 성능 병목을 분석하고 최적화합니다. 코드 스플리팅, 이미지 최적화, SSR/ISR 렌더링 전략, API 캐싱, Payload 최적화를 포함합니다.
+| 카테고리 | 최적화 항목 | Nuxt 3 적용 방법 |
|---|---|---|
| 번들 | 코드 스플리팅 | defineAsyncComponent, lazy 접두사 컴포넌트 |
| 번들 | 트리 쉐이킹 | nuxt.config의 build.transpile, 사이드이펙트 제거 |
| 이미지 | NuxtImg | <NuxtImg> sizes/format 자동 최적화 |
| 이미지 | Lazy Loading | loading="lazy", NuxtImg placeholder |
| 네트워크 | API 캐싱 | useFetch의 key, getCachedData |
| 네트워크 | 서버 캐싱 | routeRules의 swr, isr 설정 |
| 렌더링 | SSR/SSG 전략 | routeRules로 페이지별 렌더링 모드 지정 |
| 렌더링 | Payload 최적화 | useAsyncData의 transform으로 불필요 데이터 제거 |
| CWV | LCP < 2.5s | critical CSS 인라인, 폰트 프리로드, hero 이미지 우선 |
| CWV | CLS < 0.1 | 이미지 width/height 명시, 스켈레톤 UI, font-display: swap |
| CWV | INP < 200ms | 이벤트 핸들러 최적화, 메인 스레드 블로킹 제거 |
이 Nuxt 3 프로젝트의 성능을 감사하고 최적화 방안을 제시해줘. + +[프로젝트 경로 또는 주요 파일] + +감사 범위: +- Core Web Vitals (LCP < 2.5s, CLS < 0.1, INP < 200ms) +- 번들 사이즈 분석 (analyze: true로 리포트 확인) +- 이미지 최적화 상태 (NuxtImg 활용 여부) +- SSR/SSG/ISR 렌더링 전략 적정성 +- routeRules 캐싱 전략 검증 +- 불필요한 클라이언트 JS hydration 확인+
2026년 현재, 전통적 SEO만으로는 디지털 가시성을 확보할 수 없습니다. Gartner는 전통 검색 볼륨이 25% 감소할 것으로 전망하며, ChatGPT·Perplexity·Google AI Overview가 새로운 검색 채널로 부상하고 있습니다. 이 Skill은 SEO + GEO + AEO 3계층 최적화를 통합합니다.
+ +트리거: SEO, 메타태그, 구조화 데이터, Schema.org, sitemap, OG태그, GEO, AI 검색, 인용 최적화, AEO, Featured Snippet, FAQ, 음성 검색, useSeoMeta, useSchemaOrg
+Nuxt 3 프로젝트의 SEO·GEO·AEO를 3계층으로 감사하고 최적화합니다. 메타태그 자동화, JSON-LD 구조화 데이터, AI 인용 친화적 콘텐츠 구조, FAQ 스키마, OG 이미지 자동 생성을 포함합니다.
+| 영역 | 점검 항목 | Nuxt 3 구현 |
|---|---|---|
| 메타태그 | title, description, canonical, OG, Twitter Card | useSeoMeta() 전역 + 페이지별 오버라이드 |
| 구조화 데이터 | JSON-LD Schema.org (Article, Product, FAQ 등) | @nuxtjs/schema-org 모듈, useSchemaOrg() |
| 사이트맵 | 동적 sitemap.xml 생성 | @nuxtjs/sitemap 모듈 |
| robots | robots.txt + 크롤 제어 | @nuxtjs/robots 모듈 또는 server/routes |
| OG 이미지 | 페이지별 동적 OG 이미지 | nuxt-og-image 또는 Satori 기반 server/api |
| Canonical | 중복 URL 방지 | useHead({ link: [{ rel: 'canonical' }] }) |
| SSR | 검색엔진 크롤러 SSR 보장 | routeRules로 SSR/ISR 모드 지정 |
| i18n | hreflang 태그, lang 속성 | @nuxtjs/i18n 모듈 |
| 영역 | 점검 항목 | 구현 전략 |
|---|---|---|
| 질문형 구조 | H2를 실제 사용자 질문 형태로 | "제품 가격은?" 대신 "이 제품의 가격은 얼마인가요?" |
| 즉답 패턴 | 질문 직후 200자 이내 직접 답변 | TLDR-first 콘텐츠 구조 적용 |
| FAQ Schema | FAQPage JSON-LD | useSchemaOrg([defineFAQPage(...)]) |
| HowTo Schema | 단계별 가이드 구조화 | useSchemaOrg([defineHowTo(...)]) |
| Breadcrumb | 탐색 경로 구조화 | useSchemaOrg([defineBreadcrumb(...)]) |
| 정의 문장 | 핵심 용어의 명확한 정의 문장 | "[용어]는 [정의]입니다" 패턴으로 시작 |
| 영역 | 점검 항목 | 최적화 전략 |
|---|---|---|
| 통계 인용 | 구체적 수치 데이터 포함 | "매출 20% 증가" → AI가 인용할 확률 ↑ |
| 출처 명시 | 데이터·인사이트의 원본 출처 표기 | 신뢰도 향상 → AI 엔진이 선호 |
| 전문가 인용 | 업계 전문가의 직접 인용문 | blockquote + 전문가 Schema 활용 |
| 추출 가능한 블록 | 독립적으로 의미가 완결되는 정보 단위 | 각 섹션이 독립적으로 인용 가능하도록 구성 |
| E-E-A-T 신호 | 경험(Experience), 전문성, 권위, 신뢰 | 저자 프로필, 리뷰 날짜, 인증 배지 |
| 최신성 유지 | 정기적 콘텐츠 업데이트 | AI 인용 콘텐츠의 50%가 13주 이내 게시된 것 |
| 토픽 중심 | 키워드 → 토픽 타겟팅 전환 | 주제를 포괄적으로 다루는 pillar 콘텐츠 |
| 브랜드 언급 | 웹 전체에서 브랜드 언급 확대 | 외부 인용, 리뷰, 포럼 활동 |
// composables/usePageSeo.ts — SEO·GEO 통합 메타 자동화 ++
이 Nuxt 3 프로젝트의 SEO·GEO·AEO를 3계층으로 감사해줘. + +[프로젝트 경로 또는 주요 파일] + +Layer 1 — SEO 감사: +- useSeoMeta 적용 완성도 (title, description, OG, canonical) +- JSON-LD 구조화 데이터 (Schema.org 타입 적정성) +- sitemap.xml, robots.txt 설정 +- OG 이미지 동적 생성 여부 + +Layer 2 — AEO 감사: +- H2 헤딩이 질문형으로 작성되었는가 +- 각 섹션이 질문 직후 즉답(200자 이내)을 제공하는가 +- FAQPage, HowTo, Breadcrumb 스키마 적용 여부 + +Layer 3 — GEO 감사: +- 통계·수치 데이터가 출처와 함께 포함되었는가 +- 각 콘텐츠 블록이 독립적으로 AI에 인용 가능한 구조인가 +- 저자(Author) 정보와 E-E-A-T 신호가 충분한가 +- dateModified가 최신 상태인가+
| 대상 | 컨벤션 | 예시 |
|---|---|---|
| Skill 폴더명 | {도메인} 또는 nuxt-{도메인}-{역할} kebab-case | markup, nuxt, nuxt-seo-geo |
| SKILL.md | 대문자 고정, 폴더당 1개 | SKILL.md |
| 참조 문서 | {도메인}-{주제}.md kebab-case | geo-optimization.md |
| 스크립트 | {동사}-{대상}.js kebab-case | schema-validator.js |
| 주차 | Phase | 핵심 활동 | 산출물 |
|---|---|---|---|
| W1–W2 | Phase 1 | 요구사항 분석 Skill 개발 및 테스트 | nuxt-requirement-analyzer |
| W2–W3 | Phase 2 / 2-1 / 2-2 | 마크업 컨벤션 + 프로모션·EDM Skill 개발 | markup, markup/promotion, markup/edm |
| W3–W5 | Phase 3 / 3-1 | Nuxt 컴포넌트 아키텍처 + 공식문서 참조 Skill 개발 | nuxt-component-architect, nuxt |
| W5–W7 | Phase 4 | API/Pinia 패턴 표준화 및 Skill 개발 | nuxt-api-state-manager |
| W7–W8 | Phase 5 | 성능 최적화 Skill 개발 및 파일럿 | nuxt-perf-optimizer CHANGED |
| W8–W10 | Phase 6 NEW | SEO·GEO·AEO 감사 Skill 개발 | nuxt-seo-geo |
| W10–W11 | 통합 | 전체 Skill 통합 테스트 및 팀 교육 | 교육 자료, 온보딩 가이드 |
| W12– | 운영 | 실 프로젝트 적용 및 피드백 기반 개선 | Skill 버전 업데이트 로그 |
+ 본 문서는 퍼블리싱웹 FE 내부 공유용이며, 프로젝트 진행에 따라 지속 업데이트됩니다.
+ 문의: 퍼블리싱웹 FE · 최종 수정: 2026.03.30 · v1.1
+