EENE Dashboard upload to Gitea
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
272
README.md
272
README.md
@@ -1,204 +1,88 @@
|
||||
# EENE 인재성장팀 대시보드
|
||||
# EENE 인재성장팀 대시보드 (로컬 전용)
|
||||
|
||||
## 사전 설치 필요
|
||||
**이 폴더 통째로** USB·OneDrive 등으로 옮겨도 됩니다.
|
||||
`data/postgres/` + `uploads/` 를 함께 복사하면 데이터가 그대로 유지됩니다.
|
||||
|
||||
---
|
||||
|
||||
## 실행 (루트 bat 2개)
|
||||
|
||||
| 파일 | 용도 |
|
||||
|------|------|
|
||||
| **`서버시작.bat`** | DB 시작 → 스키마 → (빈 DB면 샘플) → API + 화면 |
|
||||
| **`서버종료.bat`** | API/WEB 종료 (DB·데이터 유지) |
|
||||
| **`서버종료.bat db`** | DB까지 중지 |
|
||||
|
||||
접속: **http://localhost:3000**
|
||||
|
||||
PC 이동 요약: **`PC이전.txt`**
|
||||
|
||||
---
|
||||
|
||||
## 데이터 저장 위치
|
||||
|
||||
| 내용 | 경로 |
|
||||
|------|------|
|
||||
| DB | `data/postgres/` (업무·팀원·허브 설정·첨부 정보) |
|
||||
| HR seed (최초 import) | `data/seed/hr-data.json` |
|
||||
| 첨부 | `uploads/` |
|
||||
| 팀 사진 | `uploads/team/` |
|
||||
| API 설정 | `backend/.env` (없으면 `서버시작.bat`이 자동 생성) |
|
||||
|
||||
---
|
||||
|
||||
## 최초 1회 (수동)
|
||||
|
||||
- [Node.js 20+](https://nodejs.org)
|
||||
- [Docker Desktop](https://www.docker.com/products/docker-desktop/)
|
||||
- **PostgreSQL 16** (Windows 설치) **또는** [Docker Desktop](https://www.docker.com/products/docker-desktop/)
|
||||
|
||||
DB는 **항상 `data/postgres/`** 에 저장됩니다 (포트 **54320**).
|
||||
Windows에 PostgreSQL이 이미 5432로 돌아가도 충돌하지 않습니다.
|
||||
|
||||
그다음 **`서버시작.bat`** 더블클릭.
|
||||
|
||||
---
|
||||
|
||||
## 최초 실행 순서
|
||||
## 기본 계정 (샘플)
|
||||
|
||||
### 1. 환경 변수 설정
|
||||
| 이메일 | 비밀번호 |
|
||||
|--------|----------|
|
||||
| admin@eene.com | admin1234! |
|
||||
| member@eene.com | member1234! |
|
||||
|
||||
---
|
||||
|
||||
## 폴더 구조
|
||||
|
||||
```
|
||||
EENE_Dashboard_0608/
|
||||
├── 서버시작.bat / 서버종료.bat
|
||||
├── data/
|
||||
│ ├── postgres/ ← DB (실행 데이터)
|
||||
│ └── seed/hr-data.json ← HR 원본 (seed·import)
|
||||
├── uploads/ ← 파일
|
||||
├── backend/ ← API
|
||||
├── frontend/ ← 화면
|
||||
└── _archive/ ← (나중) 배포용 보관
|
||||
```
|
||||
|
||||
배포는 추후 별도 구축. `_archive/`에 예전 배포 설정만 보관.
|
||||
|
||||
---
|
||||
|
||||
## 듀얼 모니터
|
||||
|
||||
- 왼쪽: `http://localhost:3000`
|
||||
- 오른쪽: `http://localhost:3000/detail`
|
||||
|
||||
---
|
||||
|
||||
## npm (터미널 선호 시)
|
||||
|
||||
```bash
|
||||
# 루트에 .env 파일이 없을 경우 복사
|
||||
copy .env.example .env
|
||||
|
||||
# 백엔드 .env 확인
|
||||
# backend\.env 파일은 이미 기본값으로 생성되어 있음
|
||||
npm run local:db # Docker DB (data/postgres)
|
||||
npm run local:db:stop # Docker DB 중지
|
||||
npm run local:setup # 스키마 + 빈 DB seed
|
||||
npm run local:api # :4000
|
||||
npm run local:web # :3000
|
||||
```
|
||||
|
||||
### 2. PostgreSQL 실행 (Docker)
|
||||
|
||||
```bash
|
||||
# 프로젝트 루트에서 실행
|
||||
docker compose up -d
|
||||
|
||||
# 실행 확인
|
||||
docker compose ps
|
||||
```
|
||||
|
||||
### 3. 백엔드 설치 및 실행
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
|
||||
# 패키지 설치
|
||||
npm install
|
||||
|
||||
# DB 마이그레이션 (테이블 생성)
|
||||
npm run db:migrate
|
||||
|
||||
# 샘플 데이터 입력
|
||||
npm run db:seed
|
||||
|
||||
# 개발 서버 실행
|
||||
npm run dev
|
||||
```
|
||||
|
||||
백엔드가 `http://localhost:4000` 에서 실행됩니다.
|
||||
|
||||
### 4. 프론트엔드 설치 및 실행
|
||||
|
||||
새 터미널을 열고:
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
|
||||
# 패키지 설치
|
||||
npm install
|
||||
|
||||
# 개발 서버 실행
|
||||
npm run dev
|
||||
```
|
||||
|
||||
프론트엔드가 `http://localhost:3000` 에서 실행됩니다.
|
||||
|
||||
---
|
||||
|
||||
## 로컬 전용 운영 (데이터 PC에 영구 저장)
|
||||
|
||||
Render 용량 제한 시 **이 PC만으로** 운영할 수 있습니다. 모든 데이터는 아래 폴더에 저장됩니다.
|
||||
|
||||
| 데이터 | 저장 위치 |
|
||||
|--------|-----------|
|
||||
| 업무·팀원·KPI 등 | `data/postgres/` (Docker PostgreSQL 볼륨) |
|
||||
| 업무 첨부 파일 | `uploads/` |
|
||||
| 팀원 프로필 사진 | `uploads/team/` |
|
||||
|
||||
### 빠른 시작
|
||||
|
||||
**Windows:** `서버시작.bat` 더블클릭 (DB 시작 → 스키마 동기화 → API+WEB 실행)
|
||||
**종료:** `서버종료.bat` (API/WEB만) · `서버종료.bat docker` (Docker DB까지 중지, 데이터는 유지)
|
||||
|
||||
수동 실행:
|
||||
|
||||
```bash
|
||||
npm run local:db # PostgreSQL 컨테이너 시작
|
||||
npm run local:setup # DB 스키마 동기화
|
||||
npm run local:api # 백엔드 :4000 (터미널 1)
|
||||
npm run local:web # 프론트 :3000 (터미널 2)
|
||||
```
|
||||
|
||||
### 접속 주소
|
||||
|
||||
| 화면 | 주소 |
|
||||
|------|------|
|
||||
| 대시보드 | `http://localhost:3000` |
|
||||
| 팀원 관리 | `http://localhost:3000/admin` |
|
||||
| API | `http://localhost:4000/api` |
|
||||
|
||||
사설망 IP(`172.x`, `192.168.x`)로 접속하면 **자동으로 같은 IP의 :4000 백엔드**에 연결됩니다. (Render 서버 불필요)
|
||||
|
||||
> `backend/.env` 의 `DATABASE_URL` 이 Docker 계정과 맞아야 합니다.
|
||||
> 기본: `postgresql://eee_admin:eee_password@localhost:5432/eee_dashboard`
|
||||
|
||||
---
|
||||
|
||||
## 서버(이 PC) IP 주소 확인
|
||||
|
||||
```powershell
|
||||
# CMD 또는 PowerShell 에서 실행
|
||||
ipconfig
|
||||
# → "이더넷" 또는 "Wi-Fi" 항목의 IPv4 주소 확인
|
||||
# 예: 192.168.1.100
|
||||
```
|
||||
|
||||
팀원들이 접속할 주소:
|
||||
- 대시보드: `http://172.16.8.248:3000`
|
||||
- 업무 상세: `http://172.16.8.248:3000/detail`
|
||||
|
||||
### Windows 방화벽 포트 열기 (관리자 권한 CMD)
|
||||
|
||||
```cmd
|
||||
netsh advfirewall firewall add rule name="EEE Dashboard Frontend" dir=in action=allow protocol=TCP localport=3000
|
||||
netsh advfirewall firewall add rule name="EEE Dashboard Backend" dir=in action=allow protocol=TCP localport=4000
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 듀얼 모니터 사용 방법
|
||||
|
||||
1. 브라우저 창을 두 개 엽니다.
|
||||
2. **왼쪽 모니터**: `http://localhost:3000` (업무 목록 대시보드)
|
||||
3. **오른쪽 모니터**: `http://localhost:3000/detail` (업무 상세 패널)
|
||||
4. 왼쪽에서 업무를 클릭하면 오른쪽 창이 자동으로 해당 상세 내용을 표시합니다.
|
||||
|
||||
---
|
||||
|
||||
## 기본 계정 (seed 데이터)
|
||||
|
||||
| 이메일 | 비밀번호 | 역할 |
|
||||
|---|---|---|
|
||||
| admin@eee.com | admin1234! | 관리자 |
|
||||
| member@eee.com | member1234! | 팀원 |
|
||||
|
||||
> 운영 시 반드시 비밀번호를 변경하세요.
|
||||
|
||||
---
|
||||
|
||||
## 프로젝트 구조
|
||||
|
||||
```
|
||||
D:\EENE_Dashboard\
|
||||
├── backend\ # Express + TypeScript API 서버
|
||||
│ ├── prisma\
|
||||
│ │ ├── schema.prisma # DB 스키마 (테이블 정의)
|
||||
│ │ └── seed.ts # 초기 데이터
|
||||
│ └── src\
|
||||
│ ├── index.ts # 서버 진입점
|
||||
│ ├── app.ts # Express 앱 설정
|
||||
│ ├── socket.ts # Socket.io 핸들러
|
||||
│ ├── lib\ # Prisma 클라이언트
|
||||
│ ├── middleware\ # 파일 업로드, 에러 처리
|
||||
│ └── routes\ # API 라우터
|
||||
│ ├── tasks.ts # 업무 CRUD
|
||||
│ ├── users.ts # 사용자 관리
|
||||
│ ├── files.ts # 파일 업로드
|
||||
│ └── kpi.ts # KPI 관리
|
||||
│
|
||||
├── frontend\ # React + TypeScript 앱
|
||||
│ └── src\
|
||||
│ ├── contexts\ # Socket 컨텍스트
|
||||
│ ├── lib\ # API 클라이언트, 듀얼모니터 유틸
|
||||
│ ├── pages\ # 각 페이지 컴포넌트
|
||||
│ ├── types\ # TypeScript 타입 정의
|
||||
│ └── router.tsx # 라우팅 설정
|
||||
│
|
||||
├── uploads\ # 업로드 파일 저장소
|
||||
├── 서버시작.bat # 서버 실행
|
||||
└── 서버종료.bat # 서버 종료
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API 엔드포인트
|
||||
|
||||
| 메서드 | 경로 | 설명 |
|
||||
|---|---|---|
|
||||
| POST | /api/auth/login | 로그인 |
|
||||
| GET | /api/auth/me | 내 정보 조회 |
|
||||
| GET | /api/tasks | 업무 목록 |
|
||||
| POST | /api/tasks | 업무 등록 |
|
||||
| PATCH | /api/tasks/:id | 업무 수정 |
|
||||
| DELETE | /api/tasks/:id | 업무 삭제 |
|
||||
| GET | /api/users | 사용자 목록 (관리자) |
|
||||
| POST | /api/users | 사용자 생성 (관리자) |
|
||||
| POST | /api/files/upload/:taskId | 파일 업로드 |
|
||||
| DELETE | /api/files/:id | 파일 삭제 |
|
||||
| GET | /api/kpi | KPI 조회 |
|
||||
| POST | /api/kpi | KPI 등록 |
|
||||
| GET | /api/team-members | 팀원 목록 |
|
||||
| POST | /api/team-members | 팀원 등록 |
|
||||
| POST | /api/team-members/photo | 팀원 사진 업로드 (로컬 저장) |
|
||||
|
||||
Reference in New Issue
Block a user