mirror of
https://github.com/sotam0316/brain_dogfood.git
synced 2026-04-25 03:48:38 +09:00
22 lines
2.1 KiB
Markdown
22 lines
2.1 KiB
Markdown
# Bug Report: 세션 타임아웃으로 인한 데이터 손실 방지 처리
|
|
|
|
## 1. 버그 내용
|
|
- **현상**: 세션 타임아웃이 발생한 상태에서 사용자가 메모를 저장하려고 하면 API 호출이 실패(401 Unauthorized)하고 로그인 페이지로 리다이렉트됨. 이 과정에서 사용자가 입력한 메모 내용이 보존되지 않고 소실되는 문제 발생.
|
|
- **원인**: 세션 타임아웃이 하드코딩(1시간)되어 있어 사용자가 인지하기 어렵고, 프론트엔드에서 세션 만료를 사전에 감지하는 로직이 부재함.
|
|
|
|
## 2. 조치 사항
|
|
- **백엔드 (Flask)**:
|
|
- `config.json`을 통해 세션 타임아웃 시간을 분 단위로 설정 가능하도록 변경 (`session_timeout` 필드 추가).
|
|
- 보안 및 안정성을 위해 최소 타임아웃 시간을 **10분**으로 제한 (백엔드 강제 적용 로직 포함).
|
|
- `/api/auth/status` 엔드포인트를 추가하여 세션 유효 여부를 즉시 확인할 수 있게 함.
|
|
- 설정 저장 시 `PERMANENT_SESSION_LIFETIME` 설정을 즉시 업데이트하여 서버 재시작 없이 반영되도록 처리.
|
|
- **프론트엔드 (JavaScript/i18n)**:
|
|
- 환경설정 모달에 세션 타임아웃 입력 필드 추가.
|
|
- 10분 미만 입력 시 경고 알림 및 저장 방지 로직 추가.
|
|
- **Heartbeat 기능 구현**: `AppService.startSessionHeartbeat()`를 통해 2분 간격으로 세션 상태를 체크하고, 만료 시 즉시 로그인 페이지로 튕기게(Bounce) 처리하여 저장 시점에 당황하는 상황을 방지함.
|
|
- 설정 관련 모든 API 호출을 `API.request`로 통합하여 공통 인증 처리를 수행함.
|
|
|
|
## 3. 향후 주의사항
|
|
- 세션 타임아웃 설정은 브라우저 쿠키의 생명주기와 관련이 있으므로, 설정을 변경한 직후에는 세션이 즉시 갱신되지 않을 수 있음(기존 쿠키 만료까지 대기). 설정 변경 후에는 가급적 로그아웃 후 재로그인을 권장함.
|
|
- Heartbeat 주기를 너무 짧게 설정할 경우 서버 트래픽이 증가할 수 있으므로, 현재 최소 타임아웃(10분)의 1/5 수준인 2분으로 유지함.
|