fb2956b0ac04cbece60dbc9749d0129d83cd646d
Add TeamMember model and APIs, team status UI, /admin page, local server bats, and scripts to sync data between local PostgreSQL and Render. Co-authored-by: Cursor <cursoragent@cursor.com>
EENE 인재성장팀 대시보드
사전 설치 필요
최초 실행 순서
1. 환경 변수 설정
# 루트에 .env 파일이 없을 경우 복사
copy .env.example .env
# 백엔드 .env 확인
# backend\.env 파일은 이미 기본값으로 생성되어 있음
2. PostgreSQL 실행 (Docker)
# 프로젝트 루트에서 실행
docker compose up -d
# 실행 확인
docker compose ps
3. 백엔드 설치 및 실행
cd backend
# 패키지 설치
npm install
# DB 마이그레이션 (테이블 생성)
npm run db:migrate
# 샘플 데이터 입력
npm run db:seed
# 개발 서버 실행
npm run dev
백엔드가 http://localhost:4000 에서 실행됩니다.
4. 프론트엔드 설치 및 실행
새 터미널을 열고:
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까지 중지, 데이터는 유지)
수동 실행:
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 주소 확인
# 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)
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
듀얼 모니터 사용 방법
- 브라우저 창을 두 개 엽니다.
- 왼쪽 모니터:
http://localhost:3000(업무 목록 대시보드) - 오른쪽 모니터:
http://localhost:3000/detail(업무 상세 패널) - 왼쪽에서 업무를 클릭하면 오른쪽 창이 자동으로 해당 상세 내용을 표시합니다.
기본 계정 (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 | 팀원 사진 업로드 (로컬 저장) |
Description
Languages
TypeScript
70.4%
CSS
18.4%
HTML
7.7%
PowerShell
3.1%
JavaScript
0.3%