[Theory] Cookie와 Session이란

Cookie와 Session

Cookie와 Session은 HTTP 프로토콜의 stateless 특성으로 인해 그 약점을 보안하기 위해 존재한다. HTTP 프로토콜은 상태를 저장할 수 없는데 그렇다는 것은 클라이언트가 request를 보냈을 때 서버는 해당 request 에 대해 responsive를 보내준 후 연결을 끊는다는 말이다. 이러한 상황에서 그 약점을 보안하기 위해 몇 가지 방법이 있는데, 이게 바로 우리가 쉽게 접할 수 있는 query string, cookie, session, database, localstorage, indexedDB 등이 있다. 물론 이러한 방식도 저장하는 곳이 클라이언트냐 서버냐에 따라 나뉘어 질 수 있다.

Cookie란 무엇인가

Cookie는 서버에서 클라이언트의 PC에 설치하는 작은 기록 정보라고 생각하면 된다. 이 기록 파일에 담긴 정보는 클라이언트의 사용자가 그 웹사이트에 접속할 때마다 수시로 새로운 정보로 바뀐다. 이 쿠키란 정말 사용하기 나름인데, 가장 큰 단점으로는 보안에 취약하다는 것이다. 잘 못 사용할 시에는 사용자의 웹 계정 접근권한을 획득할 수 있어, 악용의 우려 또한 존재한다. 요즘처럼 개인정보보안이 중요해진 시점에서는 더더욱이나 사용자의 중요한 정보 이러한 쿠키를 이용하는 것은 정말 위험한 행동이다. 이러한 쿠키를 사용하는 경우에는 예를 들어 오늘 하루 다시 보지 않음와 같은 만료 날짜에 대한 데이터 혹은 쇼핑몰에서의 장바구니와 같은 정보 등에서 활용할 수 있다. Cookie는 클라이언트에 총 300개까지 저장할 수 있으며 하나의 도메인당 최대 20개, 4096Byte까지만 저장이 가능하다. 만약 하나의 도메인당 20개의 갯수를 초과하게 될 시에는 오래된 Cookie의 정보를 덮어쓴다.

Session 이란 무엇인가

Session 이란 사용자의 인증에 대한 Key로서 서버에 request를 요청한 클라이언트를 식별할 수 있는 방법 중 하나이다. 이 key의 경우에는 실제 사용자의 데이터를 담고 있는 것이 아니라, 클라이언트를 식별할 수 있는 고유한 key, 말 그대로 Session 정보만 넘겨준다 라고 생각하면 된다. 그래서 Session은 Cookie 보다는 더 보안적으로는 안전하다고 생각하면 된다.

둘은 사실 뗄레야 뗄 수 없는 관계인 것 같다. 사용자의 인증이 들어가지 않는 경우에는 Cookie만 사용해서 간단한 정보 등을 저장할 수 있지만, 사용자의 인증이 들어가는 순간부터는 Session없이는 Cookie를 사용할 수 없다. 정리를 하자면 Cookie의 경우 서버에 저장되어야 할 정보를 모두 클라이언트에게 제공을 해주는 형태라고 보면 된다. 이러한 점은 서버의 자원을 사용하지 않아 서버에 과부하를 줄여준다는 장점이 있다. 하지만 위에서 말했듯이 모든 사용자에게 Cookie를 노출될 수 있어 보안 취약점이라는 문제를 안고 있다. 반대로 Session의 경우는 Cookie와는 다르다. Session은 클라이언트 메모리에 저장하는 것이 아닌 서버에 저장을 하고, 고유의 key를 클라리언트에게 전달을 해준다. 그리고 클라이언트는 그 key를 클라이언트 메모리 ( localstorage, cookie ) 등에 저장한다. 그 후 클라이언트에서 뭔가의 request를 보낼 때 그 key를 다시 서버로 보내 그 사용자에 대한 인증은 서버에서 이뤄진 후 response를 보낸다. Session은 Cookie와 달리 서버에서 처리를 하기 때문에 그 속도는 Cookie 보다는 느리다고 할 수 있다.


출처

Comments