2026.01.09. 03:34

이 홈페이지에는 사용자의 로그인 기록을 저장하고, 로그아웃 이후 7일이 지난 기록은 자동으로 삭제하는 기능이 있습니다. IP 주소 역시 개인정보이기에, 이를 무기한 보관하는 것은 바람직하지 않다고 생각했습니다.
문제는, 로그아웃 시각을 로그아웃 API가 호출될 때만 기록하도록 설계해 두었기 때문에, 애플리케이션이 종료되며 죽은 세션은 로그아웃 시각이 남지 않았습니다. 애플리케이션이 죽은 세션을 살아 있는 세션으로 간주하게 되는 거죠.
처음에는 일정 기간이 지난 기록이라면 로그아웃 여부와 관계없이 삭제하는 게 어떨까, 라는 생각도 해봤습니다. 하지만 이 방식은 유효한 세션의 기록까지 삭제될 수 있는 위험이 있습니다.
고민하던 중, 저는 하나의 사실을 떠올립니다.

애플리케이션이 재시작됐다는 것은, 이전에 실행 중이던 애플리케이션이 한 번 종료됐다는 것이고, 또한 기존에 유지되던 세션 역시 모두 종료됐다고 볼 수 있다는 점입니다. 그래서 다음과 같은 방식으로 문제를 해결했습니다.
애플리케이션이 실행될 때마다 login_log_tbl table에서 logout_at cullumn의 값이 NULL인 기록을 조회해, 애플리케이션 실행 시작 시각을 로그아웃 시각으로 일괄 기록하는 것입니다.
이렇게 하면 비정상 종료로 인해 로그아웃 이벤트가 발생하지 않았던 세션도 논리적으로 종료 시점을 갖게 되고, 이후의 자동 삭제 로직 역시 정상적으로 동작하게 됩니다.
이후 알게 된 사실이지만, last_access 시각을 기준으로 세션을 관리하는 방식도 대안이 될 수 있습니다. 다만 홈페이지 규모와 운영 복잡도를 고려했을 때, 이 방식이 가장 단순하면서도 합리적인 선택이었던 것 같습니다.
댓글 00