# task-484.1 보고서: 대시보드 자동 복구(Watchdog) + 안정성 개선

## 작업 내용

### 1. systemd 서비스 파일 업데이트
- `~/.config/systemd/user/dashboard.service` 수정
- `EnvironmentFile=/home/jay/workspace/.env.keys` 추가 (환경변수 자동 로드)
- `RestartSec=5` → `RestartSec=3` 변경 (3초 후 자동 재시작)
- 기존 설정(로그 경로, WorkingDirectory 등) 유지

### 2. 기존 nohup 프로세스 → systemd 전환
- nohup으로 실행 중이던 대시보드 프로세스 종료
- systemd 서비스로 전환 완료
- `systemctl --user enable dashboard` 이미 활성화 상태
- `loginctl enable-linger jay` 이미 설정 상태

### 3. server.py PID 파일 로직 추가
- PID 파일 경로: `/tmp/dashboard.pid`
- 시작 시 중복 실행 방지: 기존 PID 프로세스 생존 여부 확인
  - 살아있으면 → "이미 실행 중" 출력 후 exit 0
  - 죽었으면 → stale PID 파일 삭제 후 계속 진행
- 종료 시 PID 파일 자동 정리 (atexit + SIGTERM/SIGINT handler)

## 수정/생성 파일
- `~/.config/systemd/user/dashboard.service` — 수정 (EnvironmentFile 추가, RestartSec 변경)
- `/home/jay/workspace/dashboard/server.py` — 수정 (PID 파일 로직 추가, import에 atexit/signal 추가)
- `/home/jay/workspace/dashboard/test_server.py` — 수정 (PID 파일 로직 테스트 10개 추가)

## 테스트 결과
- `systemctl --user start dashboard` → active (running) ✅
- `http://127.0.0.1:8000/dashboard/` → 200 OK ✅
- `/api/org` → 200 OK ✅
- `kill -9 $(cat /tmp/dashboard.pid)` → 3초 내 자동 재시작 ✅
- 재시작 후 API 응답 정상 ✅
- PID 파일 생성/갱신 정상 ✅
- pyright server.py 에러 0건 ✅
- PID 관련 단위 테스트 10개 PASS ✅

⚠️ 기존 테스트 실패 42건 (본 작업 범위 외):
- TestGetSystemStatus (7건): DataLoader.get_system_status 메서드 미존재
- TestClassifyTaskProjectExtended (16건): DataLoader._classify_task_project 메서드 미존재
- TestGetSystemStatusStaleFiltering (2건): DataLoader.get_system_status 메서드 미존재
- TestProjectIdClassification (2건): DataLoader.get_project_classified_tasks 메서드 미존재
- TestMemberStatusTimezone (1건): timezone 관련 assertion 실패
- 원인: 기존 테스트가 이전 리팩토링에서 제거된 메서드를 참조하는 stale 테스트

## 버그
- 없음

## 비고
- 기존 server.py 기능(4탭, 논리적 팀, records API 등) 변경 없음
- .env.keys 내용 하드코딩 없음 (systemd EnvironmentFile로 로드)
- systemd 유저 레벨 사용 (sudo 불필요)
