기록 목록도움게시판
세션 유지시간과 인증 토큰 유지시간이 분리된 구조에 대한 운영자 UX 혼선
humanpchumanpc ·
05-2638
G7 최근 이슈 #44를 보면서 기존 CMS 운영 경험과 G7 인증 구조 사이에 체감 차이가 꽤 클 수 있겠다는 생각이 들었습니다.
기존 CMS 계열에서는 보통:
* 세션 유지시간 = 로그인 유지시간
으로 인식되는 경우가 많습니다.
즉 PHP session.gc_maxlifetime이나 Redis session TTL 값을 늘리면 자연스럽게 "로그인도 오래 유지된다"고 받아들이는 경우가 많습니다.
반면 현재 G7 구조는 문서를 보면 다음 개념들이 비교적 분리되어 있습니다.
* PHP/Redis 세션 유지시간
* Sanctum 인증 토큰 유지시간
* 실제 로그인 유지 흐름
* 토큰 슬라이딩 갱신 조건
특히 현재 인증 흐름은 Sanctum Bearer Token 중심 구조에 가깝고, 세션은 일부 web guard 흐름이나 `/dev` 계열 개발 대시보드 등에서 보조적으로 사용되는 형태로 보입니다.
관련 문서:
* docs/backend/authentication.md
* docs/backend/middleware.md
* docs/frontend/auth-system.md
문서를 기준으로 보면 현재 토큰은 기본적으로:
* 기본 30분
* 남은 시간이 전체 시간의 50% 미만일 때 refresh 대상 진입
구조로 동작합니다.
다만 여기서 중요한 부분은 refresh가 시간 기반 자동 작업이 아니라, API 요청 발생 시점에 검사된다는 점입니다.
즉 사용자가 실제로 API 요청을 발생시키는 상태라면 토큰이 계속 연장될 수 있지만, 브라우저를 그냥 띄워둔 상태처럼 요청이나 ping 등이 전혀 없으면 refresh 흐름 자체가 실행되지 않아 토큰이 그대로 만료될 수 있습니다.
그래서 운영자가:
* 세션 유효시간 360분
으로 설정했더라도,
인증 토큰 유지시간이 기본 30분 상태라면 실제 체감은:
* 일정 시간 이후 로그인 만료 흐름 진입
처럼 느껴질 가능성이 있습니다.
특히 기존 CMS 운영 경험 기준에서는:
* Redis 세션 TTL 증가
= 로그인 유지 증가
로 받아들이는 경우가 많기 때문에, 현재 구조와 운영자 인식 사이에 차이가 생기기 쉬워 보입니다.
개인적으로는 현재 구조 자체는 상당히 현대적인 방향이라고 느껴졌습니다.
SPA/API 구조와 인증 흐름을 분리하기 쉽고, 모바일/웹 클라이언트 간 인증 모델을 일관되게 가져가기 좋으며, Authorization 헤더 기반 인증 흐름도 자연스럽게 유지할 수 있습니다.
또한 토큰 단위로 만료, 회수, refresh 정책을 제어할 수 있다는 점도 기존 세션 중심 구조와는 다른 장점으로 보입니다.
OptionalSanctumMiddleware, token sliding expiration, 401 응답 시 cookie cleanup, StartApiSession 분리 등의 흐름 역시 전통적인 PHP 세션 기반 CMS보다는 현대적인 API 서버 구조에 가까운 인상을 받았습니다.
다만 운영자 UX 측면에서는 혼선이 생기기 쉬운 부분도 분명 존재하는 것 같습니다.
예를 들면:
* 세션 유지시간
* 인증 토큰 유지시간
* 실제 로그인 유지시간
* 슬라이딩 갱신 정책
등이 UI나 설정명, 도움말에서 충분히 분리되어 설명되지 않으면 운영자 입장에서는 자연스럽게:
"세션을 늘렸는데 왜 로그인이 빨리 풀리지?"
로 받아들이기 쉬운 구조처럼 느껴집니다.
아마 장기적으로는:
* 설정명 분리
* 도움말 강화
* 실제 로그인 유지 흐름 시각화
* 토큰 만료/refresh 정책 설명 보강
같은 UX 보완이 들어가면 운영자 혼선이 많이 줄어들 수 있을 것 같습니다.
댓글과 작업 영역을 나중에 불러옵니다
필요할 때 댓글과 작업 영역을 불러옵니다. 댓글 0개
