Cookie and Session

2021. 2. 8. 17:28생활코딩/NodeJS

쿠키란 서버가 웹 브라우저에게 주는 것인데 쿠키를 사용하게 되면 클라이언트가 브라우저에 접속했을 때 어떤 클라이언트가 접속했는지 알 수 있어 유용하게 사용될 수 있습니다.

쿠기가 있으면 서버가 내가 누구인지를 쉽게 알아낼 수 있기 때문에 로그인, 인증 같은 부분에서 많이 사용되는 부분입니다. 쿠키를 다른 상황으로 비유해보자면 인터넷 상에서 쇼핑을 하면서 장바구니에 어떤 것을 픽해두고 볼일이 생겨 다른 것을 하고 다시 돌아왔을 때 장바구니에 그대로 내가 픽했던 것들이 유지되어 있는 것이 있습니다.

실제로 쿠기를 갖게되는 방법은 아래와 같은데

클라이언트가 서버에 접속하게 되면 서버는 Response(응답)을 하게 되면서 브라우저에게 쿠키라는 것을 쥐어줍니다. 위 사진에서는 count=1이라는 값을 쿠키값으로 주게 된 것 입니다. 이제 클라이언트가 해당 브라우저를 다시 접속해도 count=1이라는 값을 쿠키가 가지고 있기 때문에 Request(요청)을 보내게 되면서 서버가 어떤 클라이언트인지 예측할 수도 있게 된 것입니다. 지금은 count라는 값만 가지고 있지만 쿠키에 로그인 정보에 관련된 ID와 PW를 쿠키로 설정하게 된다면 로그인이 계속해서 유지될 것을 알 수 있습니다.

위와 같이 쿠키는 여러가지 목적을 가지고 사용될 수 있습니다. 하지만 쿠키도 단점이 없진 않은데 예를 들어보겠습니다.

쿠키가 값(데이터)를 저장할 때 브라우저(클라이언트)측에 저장하기 때문에 로그인 인증과 같이 중요한 정보들을 잘못하면 그대로 노출되기 때문에 누군가 마음을 먹는다면 ID와 PW에 해당하는 쿠키값을 탈취해갈 수도 있다는 것입니다. 쿠키를 저장할 때 ID와 PW를 그대로 저장하진 않고 암호화하여 저장하겠지만 충분히 해킹당할 수 있는 위험이 존재합니다.

이제 세션의 개념을 알아보겠습니다.
세션은 쿠키의 상위호환 개념으로 좀 더 보안이 지켜지고 쿠키가 더 많은 정보를 저장할 수 있도록 도와주는 역할을 합니다. 세션은 쿠키와 마찬가지로 서버가 브라우저에 값을 저장하지만 쿠키를 사용할 때처럼 값을 그대로 저장하지 않습니다. 세션은 클라이언트의 식별자라고 불리우는 SID값을 쿠키에 저장하고 데이터는 클라이언트 측에 저장하는 것이 아닌 서버 측 또는 데이터베이스에 저장하게 됩니다. 로그인과 같이 중요한 정보들은 클라이언트 측에 노출시키지 않고 서버측에 잘 숨겨두는 것입니다.이렇게 함으로써 클라이언트가 다시 서버에 접속했을 때 브라우저에 저장되어 있는 쿠키 SID를 서버에 Reqeust하게되고 서버는 SID를 받아 그에 해당하는 클라이언트가 누구인지 확인하여 그에 맞는 데이터를 서버나 데이터베이스에서 찾아 Response할 수 있게 됩니다.

출처: https://opentutorials.org/course/2136/12068