# task-34.4 보고서: 대시보드 "failed to fetch" 오류 수정

- 담당: 헤르메스 (개발1팀장)
- 완료: 2026-03-01 17:01
- 소요: 1분 22초

---

## 1. 원인 분석

### 주요 원인
**프로세스 감시 없음** — 서버가 터미널 포어그라운드로 실행되다가 세션 종료 시 함께 종료됨. 재시작 메커니즘이 없어서 한 번 죽으면 수동 재시작 전까지 서비스 불가.

### 서버 코드 분석 (`server.py`)
- FastAPI 미설치 환경 → `http.server.SimpleHTTPRequestHandler` 기반 Simple 모드로 동작
- API 엔드포인트 정상: `/api/status`, `/api/stats`, `/api/org`, `/api/teams`, `/api/tasks`, `/api/reload`
- 코드 자체의 버그는 발견되지 않음

### 프론트엔드 분석 (`index.html`)
- `fetch('/api/org')`, `fetch('/api/tasks')`, `fetch('/api/stats')` — 모두 상대 경로로 올바르게 구성됨
- "failed to fetch" 오류는 서버 다운으로 인한 연결 실패가 원인 (코드 버그 아님)

---

## 2. 수행 조치

### 서버 재시작
```bash
nohup python3 /home/jay/workspace/dashboard/server.py > dashboard/server.log 2>&1 &
```

### systemd 사용자 서비스 등록
`~/.config/systemd/user/dashboard.service` 생성:
- `Restart=always` + `RestartSec=5` — 크래시 시 5초 후 자동 재시작
- `WorkingDirectory=/home/jay/workspace` 명시
- 로그: `/home/jay/workspace/dashboard/server.log`
- `WantedBy=default.target` — 로그인 세션마다 자동 시작

```bash
systemctl --user daemon-reload
systemctl --user enable dashboard.service
systemctl --user start dashboard.service
```

---

## 3. 현재 상태

| 항목 | 상태 |
|------|------|
| 포트 8000 | LISTEN (PID 100078) |
| `/api/status` | ok, v2.1.0-realdata |
| `/api/stats` | 전체 20명, 작업중 10명, 완료 63건 |
| `/api/teams` | 9개 팀 반환 |
| systemd 서비스 | active (running), enabled |

대시보드 접속 URL: `http://100.76.130.39:8000/dashboard/`

---

## 4. 개선 사항 (완료)

- **systemd 서비스 등록 완료** — 서버 다운 시 자동 재시작, 부팅/로그인 시 자동 시작
- **로그 파일 지정** — `/home/jay/workspace/dashboard/server.log` 에서 실시간 확인 가능
- FastAPI 설치 시 (`pip install fastapi uvicorn`) `server.py`가 자동으로 FastAPI 모드로 전환됨 (코드에 이미 구현됨)
