쿠키와 세션
저는 처음에 쿠키라는 것이 먹는 쿠키만 계속 생각나서 이해하는데 시간이 오래 걸렸습니다.
우리는 어떤 웹사이트를 사용할 때면 대부분 로그인이라는 기능을 사용합니다. 이때 로그인에 대한 편의를 제공하기 위해 자동 로그인, ID 저장 등의 기능을 제공하는 경우도 있고, 다른 페이지로 이동하더라도 로그인을 유지하는 기능이 필요합니다. 이때 사용하는 것이 쿠키라고 합니다.
한번씩 웹사이트에 들어가면 모든 쿠키 허용 또는 일부 쿠키만 허용 또는 거부 라는 선택지가 주어지는 것을 자주 보셨을 겁니다. 이 쿠키가 앞에서 설명드린 쿠키와 같은 쿠키입니다. 쿠키에 대한 간단한 개념은 이정도와 같고 쿠키가 서버와 클라이언트에서 어떻게 동작하는지에 대해 알아보겠습니다.
쿠키의 동작 과정
1. 웹 브라우저는 서버에 id, password 를 입력하여 로그인 요청을 합니다.
2. 서버는 데이터베이스를 확인하여 사용자를 확인합니다.
3. 사용자가 확인되면 memberId 등을 포함한 쿠키를 만들어 쿠키 저장소에 저장합니다.
4. 사용자가 페이지에 접근을 요청합니다.
5. 이때 쿠키 저장소에서 쿠키를 꺼내어 요청합니다.
6. 서버는 받은 쿠키로 데이터베이스에서 사용자를 확인합니다.
7. 사용자가 확인되면 페이지에 접근을 허용합니다.
쿠키의 문제점
쿠키에는 몇가지 문제점이 있습니다.
우선 쿠키는 쉽게 변경이 가능합니다. 크롬의 개발자 모드로도 쿠키는 쉽게 변경이 됩니다. 쿠키에 저장된 아이디나 비밀번호를 변경해버리면 다른 사용자인 것처럼 위장하여 사용할 수 있습니다.
두번째로 쿠키에는 중요한 정보가 들어있을 수 있습니다. 주민번호 등이 같이 들어있어 쿠키가 털리게 되면 악의적으로 이용될 수 있습니다.
그리고 서버로부터 받은 쿠키는 웹 브라우저에 저장이 됩니다. 이때 악의적인 사용자로부터 웹 브라우저의 쿠키가 털리게 되면 문제가 발생합니다. 또 클라이언트에서 서버로 쿠키를 보내는 과정에서 쿠키가 털리는 쿠키 하이재킹이 발생할 수 있습니다.
이러한 문제점을 해결하기 위하여 나온 것이 바로 세션입니다.
세션
세션은 클라이언트에 저장하여 문제점이 있었던 쿠키대신 서버에 중요한 정보를 저장하는 것입니다.
1. 웹 브라우저는 서버에 id, password 를 입력하여 로그인 요청을 합니다.
2. 서버는 데이터베이스를 확인하여 사용자를 확인합니다.
3. 사용자가 확인되면 memberId 등과 세션 ID(UUID, ex. 3dae10...) 를 포함한 세션을 생성해 저장합니다.
4. 내용을 추측할 수 없는 세션 ID 만을 담아 쿠키를 만들어 웹 브라우저의 쿠키 저장소에 저장합니다.
4. 사용자가 페이지에 접근을 요청합니다.
5. 이때 쿠키 저장소에서 쿠키를 꺼내어 요청합니다.
6. 서버는 받은 쿠키로 세션 저장소에서 세션 ID 가 일치하는 세션을 꺼내어 memberId를 확인합니다.
7. memberId로 사용자를 확인합니다.
8. 사용자가 확인되면 페이지에 접근을 허용합니다.
세션의 문제점
하지만 세션에도 문제점은 여전히 존재합니다.
세션 ID가 털리면 악의적인 사용자가 사용자의 세션을 가로챌 수 있습니다. 이를 방지하기 위해 HTTPS를 사용하고, 세션 ID를 자주 갱신하는 등의 방법이 있습니다.
또한 서버에 저장되는 방식이기 때문에, 많은 사용자가 접속할 경우 서버 자원이 많이 소모될 수 있습니다.
마지막으로 세션의 유효 기간을 적절히 관리하지 않으면, 사용자가 로그아웃하지 않고 세션이 계속 유지되는 문제가 발생할 수 있습니다.
여기까지 쿠키와 세션에 대한 개념을 정리해보았습니다. 제대로 적었을지 몰라 잘못된 정리의 지적은 언제든지 태클을 걸어주시면 감사하겠습니다 !