고도화 최종 — 보안 + 운영 강화

## 작업 개요
보안 7/10 → 9/10, 운영 체계 9/10 → 10/10, 자동화 8/10 → 9/10 달성.

## 세부 작업

### 1. 대시보드 Basic Auth 추가
- 대시보드 서버 파일 확인: /home/jay/workspace/ 하위 Flask/웹 서버 코드 찾기
  - dashboard.py 또는 server.py 등 확인
- HTTP Basic Auth 미들웨어 추가
  - 사용자/비밀번호는 .env.keys에서 로드 (DASHBOARD_USER, DASHBOARD_PASS)
  - .env.keys에 기본값 추가: export DASHBOARD_USER=admin / export DASHBOARD_PASS=... (임시)
  - 인증 실패 시 401 반환
- 인증 없이 접근 가능한 엔드포인트: /api/status (헬스체크용)

### 2. CORS 제한
- 대시보드 서버의 CORS 설정을 * → 특정 도메인으로 제한
  - 허용: http://100.76.130.39:8000, http://localhost:8000
  - .env.keys에 CORS_ORIGINS 환경변수 추가
- Access-Control-Allow-Origin 헤더 직접 관리 또는 flask-cors 설정

### 3. CI 정기 스케줄 등록
- cokacdir --cron으로 CI 자동 실행 등록
  - 매일 09:00에 실행: bash /home/jay/workspace/scripts/ci.sh (또는 teams/dev2/scripts/ci.sh)
  - 실패 시 알림: python3 /home/jay/workspace/teams/dev2/scripts/ci-report.py
- scripts/ci.sh가 /home/jay/workspace/scripts/에 없으면 teams/dev2/scripts/ci.sh를 /home/jay/workspace/scripts/ci.sh로 복사

### 4. 린터 자동 적용 스크립트
- scripts/lint.sh (신규)
  - black --check로 포매팅 검사
  - isort --check로 import 순서 검사
  - 실패 시 자동 수정 옵션 (--fix 플래그)
- CI에 린터 단계 추가 가능하도록 독립 스크립트

## 검증 기준
- curl http://100.76.130.39:8000/dashboard/ → 401 Unauthorized (인증 없이)
- curl -u admin:password http://100.76.130.39:8000/dashboard/ → 200 OK
- curl http://100.76.130.39:8000/api/status → 200 OK (인증 불필요)
- CORS 헤더에 * 없음 확인
- cokacdir --cron-list로 CI 스케줄 확인
- scripts/lint.sh 정상 실행