본문 바로가기
기타

쿠키와 세션의 개념과 차이(실제로 어떻게 작동하는지 테스트)

by 코딩공장공장장 2021. 7. 31.

안녕하세요. 

 

오늘은 쿠키와 세션의 개념에 대해 알아보고

 

유명 포털사이트의 쿠키를 직접 삭제하거나 생성하여 쿠키와 세션이 어떻게 작동되는지에 대해서도

 

구체적으로 알아보겠습니다.

 

쿠키와 세션 개념을 알기 위해서는 먼저 http 통신규약의 개념과 http의 특징에 대해 알아야할 필요가 있습니다.

 

 

HTTP

 

http는 웹페이지를 사용하는 사용자와 웹페이지에 정보를 제공하는 서버와의 의사소통을 하는 방식을 말합니다.

 

요청과 응답 방식으로 정보를 주고 받으며 사용자가 요청을 하면 서버에서는 그에 필요한 정보를

 

주로 html 형태로 제공하며 이 html에 DB의 정보들이나 js, css, img 등의 정적 리소스들이 포함이 되어있습니다.

 

 

HTTP 통신 규약의 특징

 

- 비연결성(connectionless)

 

http통신은 한번 연결이 이뤄지면 그 이후 연결을 끊어 버립니다.

 

여기서 연결의 뜻은 사용자와 서버 사이의 요청과 응답을 말합니다.

 

사용자의 요청에 대한 서버의 응답이 이루어지면 연결은 끊어지게 됩니다. 

 

연결을 유지 하지 않기 때문에 연결을 유지하는 통신(소켓통신)보다 트래픽 소모가 적습니다. 

 

http통신은 요청과 응답에서만 트래픽 소모가 일어나지만 연결이 유지되는 통신(소켓통신)은 

 

요청과 응답이 없어도 연결이 계속 되고 있기에 트래픽 소모가 계속 일어나게 됩니다. 

 

- 무상태성(stateless)

 

위의 비연결성의 특성으로 인해 서버는 사용자의 상태를 알 수 없습니다. 

 

그렇기 때문에 사용자가 이전에 어떤 요청을 했는지 알수가 없습니다. 

 

예를 들어, 로그인을 했음에도 불구하고 로그인 정보가 남아 있지 않아 계속해서 로그인을 해야하는 상황이 일어나죠. 

 

 

자 그런데 우리는 웹사이트를 이용하는데 로그인 후 페이지를 이동할때마다 로그인을 계속해야하는

 

웹사이트를 이용해본적이 없습니다. 

 

http의 비연결성과 무상태성의 특징이라면 로그인이 유지되면 안되는데 로그인이 유지가 됩니다. 

 

이는 쿠키와 세션이 사용되었기 때문에 가능한 것입니다.

 

쿠키와 세션이 사용자의 정보를 가지고 있어 서버와의 연결을 유지시키고

 

사용자의 상태(로그인했는지, 안했는 등등)를 파악을 합니다.

 

 

쿠키와 세션의 개념 및 차이

 

쿠키와 세션은 사용자의 정보를 가지고 있다는 점에서 공통점이 있습니다.

 

사실 쿠키와 세션에는 사용자의 로그인과 관련된 정보 이외에도 많은 정보들이 있지만

 

로그인과 관련된 개념만 얘기하겠습니다. 

 

쿠키에는 로그인 유지를 위한 정보가 들어있고 세션에는 사용자의 정보가 들어있습니다. 

 

쿠키는 브라우저에 존재하고 세션은 서버에 존재하기 때문에 쿠키는 상대적으로 보안에 취약하고

 

세션은 쿠키에 비해 보안에 우수합니다.

 

따라서 쿠키에는 사용자의 정보 보다는 사용자를 식별할 수 있는 식별값을 주로 부여하며 

 

세션에는 사용자의 id라는지 이메일과 같은 사용자를 구분하는 primary값을 가지게 됩니다. 

 

여기서 의문을 가질 수 있는게 쿠키도 사용자를 식별할 수 있고 세션도 사용자를 식별할 수 있는 값을 사용하는데

 

왜 굳이 두개를 나눠서 사용하나 생각할 수 있습니다. 

 

만약 쿠키의 식별값을 가지고 서버의 응답을 받을 수 있다면

 

쿠키의 암호화 방식을 해석하여 아이디만 바꿔서

 

사용한다면 다른 사람들의 정보들을 모두 가져올 수 있게 됩니다. 

 

따라서 쿠키는 사용자를 식별하는 용도로만 사용하고 실제 DB에서 정보를 가지고 올때는

 

세션에서 사용자의 id나 이메일 등의 primary값을 가져와서 서버의 정보를 가져옵니다.

 

실제로 웹사이트에서 쿠키가 로그인을 유지하는데 사용이 되고 있는지 확인을 해보겠습니다. 

 

 

 

 

 

 

 

우선 네이버에 로그인을 했습니다.

 

 

 

 

 

 

 

 

그 후 개발자모드에 네이버의 로그인 유지 관련 쿠키인 NID_SES 쿠키를 삭제 했습니다.

 

 

그후 새로고침을 해보면

 

 

 

 

 

 

로그아웃을 하지 않았는데도 로그인이 풀려 있는 것을 확인할 수 있습니다. 

 

쿠키 정보가 삭제되거나 바뀌어버리니깐

 

로그인이 풀리고 로그아웃이 된 화면이 나타났습니다.

 

이 과정에서 세션은 삭제가 되어야 합니다.

 

쿠키는 http통신의 요청과 응답에 늘 따라 다닙니다. 

 

 

 

 

로그인 관련 쿠키가 정상적으로 서버에 가면 서버는 아직 로그인 풀리지 않았다고 판단하여 세션을 죽이지 않고

 

쿠키가 서버로 못넘어오거나 값이 변경되면 서버는 세션을 죽입니다. 

 

로그인 인증 권한 관련 프레임워크를 사용하는 개발자들은

 

프레임워크에서 알아서 관리를 해주기 때문에 상관이 없습니다.

 

허나 프레임워크를 사용하더라도 sns 로그인이나 기타 api를 이용하여 로그인 권한을 부여하는 개발자들은 

 

본인들이 별도로 커스터마이징을 하여 쿠키와 세션을 만들어 구현해야하기 때문에

 

이러한 원리를 잘 알고 있는것이 좋을 것입니다.

반응형