| 분류 | 기술 스택 |
|---|---|
| Language |
|
| Framework |
|
| Build |
|
| State Management |
|
| API & WebSocket |
|
| Form & Animation |
|
| Styling & Utils |
|
| Notification |
|
| Code Quality |
|
YAMOYO Frontend는 Feature-Sliced Design(FSD) 아키텍처를 기반으로 구성되어 있습니다.
FSD는 기능 중심으로 코드를 구성하여 확장성과 유지보수성을 높이기 위한 아키텍처 패턴입니다.
레이어는 위에서 아래 방향으로만 import가 가능합니다.
app → pages → widgets → features → entities → shared
- 상위 레이어는 하위 레이어를 import 할 수 있습니다.
- 같은 레이어를 import 할 수 없습니다.
- 하위 레이어에서 상위 레이어를 import 할 수 없습니다.
이를 통해 의존성 방향을 명확하게 유지하고, 구조가 복잡해지는 것을 방지합니다.
features
- 사용자의 행위(Action) 또는 기능 단위를 담당합니다.
- 예: 생성(Create), 수정(Update), 삭제(Delete) 등 사용자 동작
entities
- 데이터 모델과 표시(UI) 를 담당합니다.
- 데이터 조회(Read)와 관련된 로직이 위치합니다.
widgets
- 여러 UI 조각을 조합하여 만든 독립적인 화면 블록입니다.
- 예: 카드 목록, 대시보드 섹션 등
shared
- 특정 도메인에 종속되지 않는 공통 코드를 관리합니다.
- UI 컴포넌트, 유틸 함수, 라이브러리 설정 등이 포함됩니다.
-
entities
- 특정 도메인에 명확하게 속하는 코드
- 예: user, team, tool 등
-
shared
- 여러 도메인에서 공통으로 사용하는 코드
- 예: Button, Modal, Calendar, util 함수 등
브랜치는 다음 규칙을 따릅니다.
형식
feat/기능명
예시
feat/team-invite
feat/leader-game
형식
fix/이슈번호
예시
fix/123
커밋 메시지는 다음 형식을 따릅니다.
type: message
feat: 새로운 기능 추가fix: 버그 수정docs: 문서 수정style: 코드 formatting, 세미콜론 누락 등 동작 변화 없는 수정refactor: 코드 리팩토링test: 테스트 코드 추가 또는 수정chore: 패키지 매니저 수정, 기타 설정 변경 (예:.gitignore)design: CSS/컴포넌트 등 사용자 UI 디자인 변경comment: 필요한 주석 추가 또는 변경rename: 파일 또는 폴더 이름 변경remove: 파일 삭제
프로젝트 전반에서 다음 네이밍 규칙을 사용합니다.
- 기본 소문자
- 두 단어 이상은 kebab-case 사용
예시
games/timing-game
myprofile/completed-tasks
- PascalCase
export default function방식 사용
예시
export default function HomeCard() {
return <div />;
}파일명
HomeCard.tsx
BottomSheet.tsx
useprefix + camelCase
예시
useTimingGame.ts
useTeamRoom.ts
(API / util / store 등)
- kebab-case 사용
예시
refresh-token.ts
auth-event-bus.ts
leader-game-store.ts
- camelCase 사용
예시
refreshAccessToken();
createTeamRoom();
joinTeamRoom();파일명과 함수명은 다음과 같이 구분합니다.
refresh-access-token.ts → refreshAccessToken()