Vue.js와 Pinia를 기반
git clone [저장소_URL]
cd [프로젝트_폴더]Node.js (v18.x 이상) 환경에서 아래 명령어를 실행하여 필요한 라이브러리를 설치.
npm install아래 명령어를 실행하면 http://localhost:5173 주소에서 개발 서버가 실행
npm run dev- Framework: Vue 3 (Composition API)
- Build Tool: Vite
- State Management: Pinia
- Routing: Vue Router
- Styling: Tailwind CSS
- API Client: Axios
src/
├── assets/ # CSS, 이미지 등 정적 에셋
│
├── components/ # 공용 UI 컴포넌트 (.vue)
│ ├── analytics/ # 분석 페이지 관련 컴포넌트 (리포트, 그래프)
│ ├── layout/ # 레이아웃 관련 컴포넌트
│ └── modals/ # 모달 관련 컴포넌트
│
├── pages/ # 라우팅되는 페이지 컴포넌트 기능별 (.vue)
│ ├── account/ # 자산 연동 (계좌 연결, 관리)
│ ├── auth/ # 로그인, 회원가입
│ ├── challenge/ # 챌린지 (목록, 상세)
│ ├── chat/ # 채팅방
│ ├── consumption/ # 소비 내역
│ ├── error/ # 에러
│ ├── guide/ # 사용자 가이드
│ ├── home/ # 홈(메인 페이지)
│ └── profile/ # 마이페이지 (회원정보, 포인트, 챌린지)
│
├── router/ # Vue Router 설정
│
├── services/ # API 서비스 로직 (.js)
│
├── stores/ # Pinia 상태 관리 스토어 (.js)
│
├── utils/ # 유틸리티 함수 (Axios 인스턴스 등) (.js)
│
├── App.vue # 최상위 App 컴포넌트
└── main.js # 애플리케이션 진입점
프로젝트의 일관성과 코드 품질을 유지하기 위해 아래 도구들을 사용
- ESLint: JavaScript 및 Vue 코드의 문법 오류와 스타일을 검사
- Prettier: 코드 포맷팅을 자동화하여 일관된 코드 스타일을 유지
- Husky: Git hook을 관리하며,
pre-commit시점에 자동으로 린트와 포맷팅을 검사
# 코드 린트 검사 및 자동 수정
npm run lint
# 코드 포맷팅 적용
npm run format- 코드를 작성
- 파일 저장 시 VS Code 확장 프로그램에 의해 코드가 자동으로 포맷팅
git commit시점에 Husky가 자동으로 코드 품질을 검사
VS Code 사용자는
Vue.volar(Volar)와ESLint,Prettier확장 프로그램을 설치해주세요..vscode/extensions.json파일에 추천 확장 프로그램이 정의되어 있습니다.
API 통신을 위해 Axios를 사용하며, 관련 설정은 src/utils/api.js 파일에 정의되어 있음
- 기본 URL:
.env파일의VITE_API_URL을 사용 - 타임아웃: 10초.
- 인증 헤더 자동 추가: 로그인 시 발급된 토큰이
localStorage에 저장되며, 모든 API 요청에Authorization헤더가 자동으로 포함 - 에러 처리: 401 Unauthorized 에러 발생 시 자동으로 로그아웃 처리 후 로그인 페이지로 이동
API 호출은 stores 또는 컴포넌트 내에서 services 레이어를 통해 이루어짐
1. 서비스 레이어 사용 (/services)
API 명세에 따라 services 디렉터리에 파일을 생성하고, src/utils/api.js에서 정의된 API 메서드를 호출하는 함수를 작성.
// 예시: src/services/transactionService.js
import { transactionsAPI } from '@/utils/api';
export const transactionService = {
async fetchTransactions(filters = {}) {
try {
return await transactionsAPI.getAll(filters);
} catch (error) {
throw new Error(`거래 내역 조회 실패: ${error.message}`);
}
},
};2. 스토어에서 서비스 사용 (/stores)
Pinia 스토어의 actions에서 서비스 함수를 호출하여 상태를 업데이트
// 예시: src/stores/transactions.js
import { defineStore } from 'pinia';
import transactionService from '@/services/transactionService';
export const useTransactionsStore = defineStore('transactions', {
actions: {
async fetchTransactions() {
this.loading = true;
try {
this.transactions = await transactionService.fetchTransactions();
} catch (error) {
this.error = error.message;
} finally {
this.loading = false;
}
},
},
});