Computer >> 컴퓨터 >  >> 네트워킹 >> 인터넷

파이어폭스(Firefox) 쿠키 손상으로 로그인 세션이 사라지는 문제, 원인과 해결 방법

Windows를 사용하는 제 컴퓨터 중 하나에서 기묘한 문제가 발생했습니다. 해당 PC는 Firefox를 기본 브라우저로 사용 중이었고, 그 프로필은 10년 넘게 유지되어 온 것이었습니다. 어느 월요일 아침, 평소처럼 브라우저를 열어 자주 방문하는 사이트에 접속했는데 로그인 상태가 풀려 있는 것을 발견했습니다. 다른 사이트도 마찬가지였습니다. 모든 로그인 세션이 통째로 사라져 버린 듯했습니다.

다행히 저는 모든 자료를 여러 벌로 백업해 두는 습관이 있어서, Firefox 프로필의 cookies.sqlite 파일을 백업본으로 복원해 정상 상태로 되돌릴 수 있었습니다. 그런데 며칠 뒤 같은 문제가 또다시 발생했습니다. 흥미를 느낀 저는 이 다소 생소하고 잘 알려지지 않은 문제를 파헤치기 시작했고, 결국 원인을 파악했다고 생각하며 해결책도 찾아냈습니다.

파이어폭스(Firefox) 쿠키 손상으로 로그인 세션이 사라지는 문제, 원인과 해결 방법

참고: 이미지 출처는 wikipedia.org이며, GFDL 1.2 라이선스를 따릅니다.

문제의 상세 내용

온라인에서 확인할 수 있는 자료는 많지 않았습니다. Firefox 6 시절의 비슷한 사례와 Quantum(Firefox 57 이상) 관련 단 한 건의 Reddit 게시글 정도가 전부였습니다. 쿠키 복원 방법을 묻는 질문은 넘쳐나지만, 실제 경험에 대한 구체적인 정보는 거의 없었습니다. 공통된 양상을 정리하면 이렇습니다. 일반적인 브라우징 도중에 쿠키 데이터베이스가 손상되며, 사용자는 다음 브라우저 실행 때까지 이를 알아차리지 못하고, 그 시점에 손상된 데이터베이스는 삭제된 뒤 새로 생성됩니다. 두 파일 모두 Firefox 프로필 폴더에 있으며 각각 cookies.sqlite, cookies.sqlite.bak라는 이름을 가집니다. 백업본이 있다면 데이터베이스를 덮어쓰는 것이 오래된 로그인 세션을 복구하는 가장 간단한 방법입니다. 하지만 이것만으로는 '왜'라는 근본적인 의문에 답하지 못합니다.

그렇다면 왜일까요? 이번 사례에서 '특이한' 점은 단 하나, 약 18개월 동안 임시 파일과 쿠키 정리를 전혀 하지 않았다는 것뿐이었습니다. 평소라면 분기마다 한 번씩 수 GB의 불필요한 데이터를 삭제하고 대부분의 쿠키(중요한 것은 제외)를 정리하곤 했습니다. Firefox와 Chrome이 잡동사니 축적을 실제로 어떻게 처리하는지 궁금해서 그대로 두었던 것입니다.

파이어폭스(Firefox) 쿠키 손상으로 로그인 세션이 사라지는 문제, 원인과 해결 방법

덧붙여 말하자면, Chrome에서는 사이트 파비콘이 표시되는 속도가 다소 느려진 것을 눈치챘지만, 심각한 지연이나 오류, 기이한 동작은 없었습니다. 진짜 문제는 Firefox의 쿠키였고, 이는 특별한 이유 없이 산발적으로 발생했습니다. 쌓인 데이터를 청소하면 도움이 될 것이라 판단했습니다.

해결 방법

필요한 로그인 관련 항목을 제외한 임시 데이터와 쿠키를 정리했습니다. 그러자 Firefox가 미세하게나마 빨라졌습니다. 작지만 분명히 체감되는 성능 개선이었습니다. Chrome 역시 파비콘을 즉시 표시하기 시작했습니다. 당연히 결정론적으로 작동해야 할 동작이 실제로는 그렇지 않은 셈이죠. 브라우저는 임시 데이터가 서서히 쌓이는 영향을 받으며, 실제 성능에도 영향을 준다는 점은 그 자체로 흥미로운 발견입니다.

파이어폭스(Firefox) 쿠키 손상으로 로그인 세션이 사라지는 문제, 원인과 해결 방법

Firefox 쪽에서는 이 글을 쓰기 전까지 약 두 달간 시스템을 운영해 보았습니다. 약 2주 동안 세 차례의 쿠키 데이터베이스 손상이 반복된 이후, 정리 작업 이후로는 문제가 재발하지 않았고, 해결되었다고 100% 확신합니다. 그리고 기술적인 추측도 상당히 확실하게 가지고 있습니다.

Firefox의 cookies.sqlite 파일에는 크기 제한이 있습니다. 시스템마다 값이 조금씩 다르지만, 일반적으로 1,024KB, 가끔 2,048KB입니다. 이 크기가 데이터베이스에 저장 가능한 쿠키 수를 결정합니다. 한도에 도달하면 Firefox는 cookies.sqlite를 손상된 파일로 간주하고 초기화해 버립니다. 가장 오래된 쿠키나 사용 빈도가 낮은 쿠키를 선별 삭제하거나 데이터베이스 크기를 늘리는 등의 지능적인 처리 메커니즘은 존재하지 않습니다.

어디까지나 추측이지만, 이것이 실제 원인이라고 강하게 확신합니다. 해결책은 주기적으로 브라우저 데이터를 정리하는 것입니다. 저는 상당히 헤비 유저라서 수백, 어쩌면 수천 개의 쿠키가 쌓여 있었는데, 실질적으로 의미 있는 목록은 몇십 개에 불과했습니다. 1년에 한 번, 혹은 8개월마다 정리하는 정도가 합리적인 '대청소' 주기로 보입니다.

결론

근거 없는 미신성 글은 결코 취향이 아닙니다. 추측성 해결책은 싫어하거든요. 소프트웨어 문제는 재현하고 검증할 수 있도록 결정론적이어야 마땅합니다. 하지만 타이밍과 이벤트 순서가 묘하게 얽혀 나타나는 경쟁 상태(race condition)처럼, 이런 유형의 문제는 해결 메커니즘이 명확하다 해도 재현 자체가 어렵습니다.

어쨌든, Firefox를 사용하던 중 로그인 세션(쿠키)이 사라졌다면 다음 순서를 권장합니다. 먼저 백업본에서 복원하고(평소 백업본을 꼭 만들어 두세요), 이후 체계적인 정리 작업을 통해 불필요한 데이터를 제거하고 자주 쓰는 로그인용 최소한의 쿠키만 남겨두세요. 수동으로 정리해도 되고 유지보수 도구를 활용해도 됩니다. 물론 도구들이 때로는 까다롭게 굴기도 하는데, 그건 또 다른 이야기입니다. 오늘은 여기까지입니다. "뻔한 소리"라고 하지 말기 바랍니다. 전혀 뻔하지 않으니까요. 그럼 다음에 만나요.

감사합니다.