Coding
PromptBeginner5 minmarkdown
Markdown Converter
Agent skill for markdown-converter
31
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Sign in to like and favorite skills
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
한국어로 작성된 개인 블로그 Next.js 프론트엔드 애플리케이션입니다. Redux-Saga를 사용한 상태 관리, 표준 CKEditor5를 이용한 글 작성 기능, 그리고 Material-UI를 사용한 사용자 인터페이스로 구성되어 있습니다.
기술 스택:
# 의존성 설치 및 개발 서버 실행 (Turbopack 사용) npm ci npm run dev
# 프로덕션 빌드 npm run build # 프로덕션 서버 실행 npm start # 코드 검증 npm run lint
# 개발용 단일 아키텍처 빌드 docker build --no-cache -t docker.hvy.kr/blog-front . # 프로덕션용 다중 아키텍처 빌드 docker buildx create --name jarvis docker buildx use jarvis docker buildx inspect --bootstrap docker buildx build --platform linux/amd64,linux/arm64 --no-cache --push -t docker.hvy.kr/blog-front .
src/store/index.jsx에서 Redux 스토어 설정src/store/actions/에 도메인별 액션 정의src/store/reducers/에 상태 업데이트 로직src/store/sagas/에 비동기 로직 및 API 호출src/store/types/에 액션 타입 상수 정의도메인: category, common, post, tag, user, file
src/components/layout/common/)src/components/layout/admin/)_app.jsx에서 경로에 따라 자동 레이아웃 선택 (/admin 경로는 AdminLayout)src/service/axiosClient.js에서 중앙 집중식 HTTP 클라이언트src/service/에 도메인별 API 서비스 모듈next.config.js에서 환경별 설정 (개발: api.hvy.kr, 프로덕션: 내부 blogback:8080)_app.jsx의 getInitialProps에서 서버사이드 인증 상태 확인/admin 경로 접근시 자동 로그인 페이지 리다이렉션ckeditor5: 46.1.0)DynamicEditor.jsx에서 동적 임포트로 SSR 이슈 해결/: 홈페이지 (포스트 목록)/post/[id]: 개별 포스트 상세/search: 검색 결과/login: 로그인/admin)/admin: 관리자 대시보드/admin/write: 새 글 작성/admin/write/[id]: 글 수정/admin/categories: 카테고리 관리/admin/tags: 태그 관리SearchEngineComponent: 통합 검색 인터페이스SearchFilter, SearchCategory, SearchTag: 필터링 옵션SearchResult: 검색 결과 표시src/model/searchObject.js: 검색 조건 모델DynamicEditor: CKEditor5 래퍼 컴포넌트FileUploadComponent, MultipleFileUploadComponent: 파일 업로드DeleteConfirm, PublicConfirmCategoryTreeView: 계층형 카테고리 트리TagComponent, TagGroupComponent: 태그 표시 및 관리PreviewDialog: 글 미리보기global.css: 전역 스타일d2coding-subset.css: 한국어 폰트 (D2Coding)rainbow.css: 코드 하이라이팅ck5.custom.css: CKEditor 커스텀 스타일PostComponent.module.css: 포스트 컴포넌트 전용 CSS 모듈base64Util.js: Base64 인코딩/디코딩fileLink.js: 파일 링크 생성uuidUtil.js: UUID 생성 (tsid-ts 사용)usePostNavigationShortcut.js: 키보드 단축키 훅next.config.js: Next.js 설정, API rewrites, 환경변수package.json: 의존성 관리, Turbopack 스크립트 설정Dockerfile: 멀티스테이지 빌드, Node.js 22-alpine 기반PROJECT_RULES.md: 코드 포맷팅 및 AI 협업 워크플로우 규칙.github/workflows/buildx.yml: GitHub Actions 빌드 파이프라인docs/authentication.md: 인증 시스템 상세 문서DynamicEditor를 통한 동적 로딩 필수import('ckeditor5')로 클라이언트 사이드에서만 로드next.config.js에서 Turbopack 비호환 설정 제거됨REQUEST, SUCCESS, FAILURE 패턴 사용SERVER_* 액션 타입으로 구분axiosClient의 응답 인터셉터가 response.data.data 구조를 자동으로 평면화api.hvy.kr), 프로덕션에서는 내부 서비스(blogback:8080) 사용/admin 경로는 인증 확인 후 접근 가능getInitialProps를 통한 서버사이드 인증 상태 관리user.isAuthenticated에서 관리 (3-state: null/true/false)docs/authentication.md 참조--inspect 옵션 활성화notistack 라이브러리 사용 필수
_app.jsx에 SnackbarProvider가 설정되어 있음 (autoHideDuration: 2000)useSnackbar 훅을 사용하여 알림 표시Snackbar, Alert 컴포넌트를 직접 사용하지 않음기본 사용 패턴:
import {useSnackbar} from 'notistack' export default function MyPage() { const {enqueueSnackbar} = useSnackbar() const handleSuccess = () => { enqueueSnackbar('성공 메시지', {variant: 'success'}) } const handleError = (error) => { enqueueSnackbar(`실패: ${error.message}`, {variant: 'error'}) } const handleWarning = () => { enqueueSnackbar('경고 메시지', {variant: 'warning'}) } const handleInfo = () => { enqueueSnackbar('정보 메시지', {variant: 'info'}) } }
Variant 종류:
success: 성공 메시지 (녹색)error: 오류 메시지 (빨간색)warning: 경고 메시지 (주황색)info: 정보 메시지 (파란색)참고 예시 파일:
/admin/categories.jsx: 카테고리 관리 (CRUD 작업)/admin/sprint.jsx: 스프린트 보고서 (데이터 로드 실패 처리)/admin/common-code.jsx: 공통코드 관리 (다양한 알림 시나리오)작업 상태 표시:
[ ] : 대기[🔄] : 진행중[x] : 완료[⚠️] : 이슈발생필수 규칙: