# 프로젝트 구조

meerkatgram/
├── client/             # Vite + React (PWA)
│   ├── src/                # React 실행 관련 로직
│   │   ├── assets/             # 비공개 정적 파일
│   │   ├── config/             # 설정 파일 (환경 변수, API 엔드포인트, Firebase/Web Push 설정 등)
│   │   ├── components/         # 컴포넌트
│   │   ├── routes/             # React 라우터
│   │   ├── store/              # 리덕스 관련
│   │   │   ├── slices/            # 리덕스 슬라이스 관련
│   │   │   └── store.js
│   │   ├── utils/              # 유틸
│   │   ├── App.jsx
│   │   ├── main.jsx
│   │   └── sw.js               # service-worker 파일
│   ├── index.html
│   └── vite.config.js
│
├── server/             # Express
│   ├── app/                # Express 실행 관련 로직
│   │   ├── controllers/        # 컨트롤러 레이어 (유효성 검사 & Request·Response 시 데이터 가공 처리 & 비지니스 로직으로의 연결)
│   │   ├── middlewares/        # 미들웨어 (JWT 인증, 권한 체크, 에러 핸들링, 로깅 등)
│   │   ├── models/             # 모델 (Sequelize 등 모델)
│   │   ├── repositories/       # DB 접근 레이어
│   │   ├── services/           # 비즈니스 로직 레이어
│   │   └── utils/              # 유틸
│   ├── configs/                # 전역 설정 파일 (DB, JWT, OAuth, Push 등)
│   ├── database/           # 데이터베이스 관련
│   │   ├── migrations/         # 마이그레이션 (DB 스키마 작성 파일 등)
│   │   └── seeders/            # 시더 (DB 더미 데이터 생성 파일 등)
│   ├── routes/             # API 엔드포인트 정의
│   ├── storage/            # 정적 파일을 서빙 디렉토리 (업로드 파일, PWA build 결과물 저장소), 주의: 운영환경은 경로 다름 
│   ├── app.js              # API 엔트리 포인트
│   └── .env                # 환경 변수 설정 파일
└── READEME.md

### server

npm init
express : 프레임워크
express-validator : express에서 사용하는 유효성 검사 라이브러리
dotenv : 환경 설정 파일 적용하는 라이브러리(.env)
mysql2 : node.js 환경에서 mysql을 사용할 수 있게 해주는 라이브러리
sequelize : node.js환경에서 사용하는 ORM
sequelize-cli : sequelize를 cli로 사용할 수 있게 해주는 라이브러리

dayjs : 날짜 연산 및 포맷 라이브러리
bcrypt : node.js환경에서 사용하는 암호화 라이브러리

morgan : node.js환경에서 사용하는 HTTP 로깅 라이브러리
winston : node.js환경에서 사용하는 로깅 라이브러리

web-push : 웹푸시 기능 구현을 위한 라이브러리

cookie-parser : cookie를 파싱해주는 라이브러리
jsonwebtoken : JWT 생성 및 검증, payload 획득 등 라이브러리
cors : cors 셋팅을 도와주는 라이브러리
multer : 파일을 업로드 할 수 있도록 도와주는 라이브러리

swagger-ui-express : Swagger 화면을 Express로 제공하는 라이브러리
yaml : YAML 형식의 Swagger 문서를 JS로 파싱하는 라이브러리
### client

npm create vite@latest .
dayjs : 날짜 연산 및 포맷 라이브러리
react-router-dom : 리액트에서 페이지 이동(라우팅) 관리 라이브러리
@reduxjs/toolkit : Redux 상태 관리를 더 편하게 해주는 공식 툴킷
react-redux : 리액트를 Redux 스토어와 연결해주는 라이브러리
axios : HTTP 요청(ajax 통신) 라이브러리
jwt-decode : 브라우저에서 JWT 토큰의 payload를 해독해주는 라이브러리
install -D vite-plugin-pwa : 개발 서버에서 Vite로 PWA 설정할 수 있게 도와주는 플러그인