KBO:Note 크보노트 frontend 레포지토리입니다
- React 18
- TypeScript
- Vite
- ESLint
npm installnpm run devnpm run buildnpm run previewnpm run lintKBO-NOTE-FE/
├── public/ # 정적 파일
│ └── vite.svg
├── src/
│ ├── api/ # API 호출 관련 함수
│ ├── assets/ # 이미지, 폰트 등 정적 리소스
│ ├── components/ # 재사용 가능한 컴포넌트
│ ├── hooks/ # 커스텀 React Hooks
│ ├── pages/ # 페이지 컴포넌트
│ ├── styles/ # CSS 파일
│ ├── types/ # TypeScript 타입 정의
│ ├── utils/ # 유틸리티 함수
│ ├── App.tsx # 메인 App 컴포넌트
│ ├── main.tsx # 엔트리 포인트
│ └── vite-env.d.ts # Vite 타입 정의
├── index.html
├── package.json
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.ts
└── eslint.config.js
- 컴포넌트 파일: PascalCase 사용 (예:
Button.tsx,UserProfile.tsx) - 훅 파일: camelCase 사용,
use접두사 (예:useAuth.ts,useFetch.ts) - 유틸리티 파일: camelCase 사용 (예:
formatDate.ts,validators.ts) - 타입 파일: camelCase 사용,
.types.ts접미사 권장 (예:user.types.ts) - 폴더: camelCase 또는 kebab-case 사용
-
타입 정의:
interface또는type사용, PascalCase 명명interface User { id: number; name: string; } type UserRole = 'admin' | 'user' | 'guest';
-
Props 타입: 컴포넌트명 +
Props접미사interface ButtonProps { label: string; onClick: () => void; }
-
명시적 타입 선언: 가능한 한 타입을 명시적으로 선언
const count: number = 0; const handleClick = (event: React.MouseEvent<HTMLButtonElement>): void => { // ... };
-
컴포넌트 선언: 함수형 컴포넌트 사용
function MyComponent({ prop }: MyComponentProps) { return <div>{prop}</div>; } export default MyComponent;
-
이벤트 핸들러:
handle접두사 사용const handleClick = () => { /* ... */ }; const handleSubmit = () => { /* ... */ };
-
상태 변수: 명확하고 설명적인 이름 사용
const [isLoading, setIsLoading] = useState(false); const [userData, setUserData] = useState<User | null>(null);
- 들여쓰기: 2 스페이스
- 세미콜론: 사용하지 않음 (ESLint 설정 따름)
- 따옴표: 작은따옴표(
') 사용 - 화살표 함수: 간결한 경우 선호
const add = (a: number, b: number) => a + b;
- React 및 외부 라이브러리
- 내부 모듈 (컴포넌트, 훅, 유틸리티)
- 타입 import
- 스타일
import { useState, useEffect } from 'react';
import axios from 'axios';
import Button from '@/components/Button';
import { useAuth } from '@/hooks/useAuth';
import { formatDate } from '@/utils/formatDate';
import type { User } from '@/types/user.types';
import './styles/App.css';-
컴포넌트 설명: JSDoc 스타일 사용
/** * 사용자 프로필을 표시하는 컴포넌트 * @param user - 표시할 사용자 정보 */ function UserProfile({ user }: UserProfileProps) { // ... }
-
복잡한 로직: 필요시 설명 주석 추가
-
TODO:
// TODO: 설명형식 사용
- 형식:
타입: 설명 - 타입:
feat: 새로운 기능fix: 버그 수정docs: 문서 수정style: 코드 포맷팅refactor: 코드 리팩토링test: 테스트 코드chore: 빌드, 설정 등
예시:
feat: 사용자 로그인 기능 추가
fix: 프로필 이미지 업로드 오류 수정
docs: README 업데이트