쿠키, 세션 뿌셔!
쿠키와 세션
우선, 쿠키와 세션은 클라이언트의 정보를 저장하는데 사용되는 하나의 공간이다.
그리고 세션은 쿠키를 기반으로 하고 있기 때문에 쿠키에 대한 이해를 우선적으로 하는 것이 좋다.
쿠키와 세션에 대한 각각의 개념을 학습하기 전에, 우선 쿠키와 세션이 등장하게 된 주요 배경에 대해 먼저 짚고 넘어가보도록 하자.
HTTP의 비연결성과 무상태성
이전 포스팅(REST API)에서 HTTP는 비연결성과 무상태성이라는 특징을 갖는 프로토콜이라고 설명 했었다. 다시 한 번 설명해보자면, 비연결성은 서버와 클라이언트 사이에 응답이 끝나면 서로 간의 연결을 끊는 방식을 말한다. 그리고 무상태성은, 서버와 클라이언트 사이의 요청과 응답에 대한 어떠한 상태정보도 서버에 따로 저장하지 않는 방식이라고 설명했었다.
즉, 비연결성은 클라이언트가 응답을 받으면 서로의 연결을 끊는 것,
무상태성은 요청과 응답 간에 어떠한 상태정보도 저장하지 않는 것이다.
위와 같은 비연결성과 무상태성 때문에 서버는 클라이언트가 누구인지 매번 확인하는 절차를 거쳐야 하고, 클라이언트 입장에선 계속 내가 누군지 요청 정보를 활용해 버에 입증을 해야 하는 번거로움이 존재할 수 있다.
즉, 이러한 특성 때문에, 서버와 클라이언트 간의 통신 효율성을 제고하고자 쿠키와 세션이 등장하게 된 것이다.
자 그럼 이제 쿠키와 세션이 등장한 배경에 대해 이해했으니, 쿠키와 세션 각각에 대한 개념에 대해 학습해보도록 하자.
쿠키
쿠키는 클라이언트가 정보를 저장하고 관리하는 방식을 따른다.
그리고 이러한 쿠키는 key-value쌍으로 이루어진 데이터다.
이러한 쿠키는 유효기간을 따로 설정할 수 있기 때문에, 유효기간이 명시되어 있다면 브라우저가 종료되어도 정보가 유지된다는 특징 또한 갖는다. 하지만 클라이언트는 총 300개의 쿠키만을 저장할 수 있으며, 하나의 도메인당 20개의 쿠키만을 활용할 수 있다는 한계점을 갖는다. 또한, 하나의 쿠키는 4KB 까지만 값을 저장할 수 있다.
쿠키의 동작 프로세스
쿠키는 그렇다면 어떻게 생성되고, 활용될까?
위의 그림과 같이, 먼저 브라우저에서 서버에 특정 요청을 보낸다. 그리고 서버는 쿠키를 생성하여 HTTP 헤더에 담아 클라이언트에 보내준다. 그러면 클라이언트는 해당 응답을 통해 로컬에 쿠키를 저장한다. 이후부터는 같은 요청을 보낼 시에, 브라우저가 자동으로 요청 HTTP 헤더에 해당 쿠키를 담아서 서버에 보내준다. 그러면 서버는 해당 쿠키 정보를 읽은 뒤 활용한다.
만약, 쿠키 정보가 변경되어야 할 필요가 있다면, 서버에서 쿠키를 수정하여 이를 다시 HTTP 헤더에 담아서 응답으로 보내준다.
쿠키는 어디에 활용되는가?
대표적으로는 쇼핑몰 장바구니 기능, 아이디 기억하기, “오늘 이 창을 더이상 보지 않음” 등의 기능들을 구현할 때 주로 활용된다.
자, 그럼 이제 세션에 대해 알아보도록 하자!
세션
세션은 쿠키를 활용하지만, 쿠키와 달리 서버 측에서 관리된다.
응…? 근데 쿠키는 분명 클라이언트에서 관리되는데, 쿠키를 기반으로 하고 있다면서 어떻게 서버측에서 세션을 관리한다는 것일까?
필자 또한 이 부분이 처음에 와닿지는 않았지만, 세션 동작 방식에서 세션ID라는 개념을 알고 나니 이 부분이 쉽게 이해됐다. 바로 세션의 동작 프로세스에 대해 알아보자.
세션의 동작 프로세스
이 부분에서 가장 중요한 부분은 세션ID라는 개념이다 😉
세션의 주요 동작 프로세스는 위와 같다. 그 중에서도 가장 중요한 부분은 단연코 세션ID를 서버측에서 생성하고 → 클라이언트는 이를 쿠키에 담아 저장한 뒤 → 이후부터는 요청 헤더에 이를 담아 보낸다는 것이다. (즉, 쿠키에는 세션ID가 저장되는 것이다)
그리고 서버는 이 세션ID를 통해 이와 연결된 서버의 저장소에서 해당 클라이언트와 관련된 정보들을 활용한다.
세션은 주로 어디에 활용되는가?
세션은 아무래도 사용자의 인증정보 등을 저장해야 할 때 활용된다.
따라서, 페이지를 이동해도 로그인이 유지되도록 할 때 주로 사용된다.
쿠키와 세션의 주요 차이점
두 비슷한듯 다른 개념의 차이점을 다시 한 번 짚고 넘어가보도록 하자.
- 쿠키는 클라이언트에, 세션은 클라이언트와 서버에 저장된다.
- 세션이 서버에서 관리되기에, 보안적으로 더 우수하다.
- 쿠키는 만료기간이 명시되어 있다면 브라우저가 종료되어도 유지되지만, 세션은 브라우저 종료 시에 함께 삭제된다.
- 쿠키는 용량 제한이 있지만, 세션에는 명시된 용량 제한이 없다.
- 쿠키가 세션보다 속도 측면에서 더 빠르다.
정리 및 요약
쿠키는 클라이언트에 저장되고, 세션은 서버 및 클라이언트에서 저장 및 관리된다.
HTTP 프로토콜의 비연결성과 무상태성의 특징 때문에, 서버와 클라이언트 간의 응답/요청 효율성을 제고하고자 쿠키와 세션이 등장하게 됐다. 쿠키는 서버에서 생성된 정보(쿠키)를 클라이언트에서 저장하고 관리하며 통신 간에 발생하는 비효율성을 줄여줄 수 있다. 하지만 세션은 세션ID와 세션ID에 연결되는 데이터를 서버측에 저장하고 활용한다. 물론, 클라이언트는 이 세션ID를 쿠키로써 저장하여 활용하기 때문에 세션이 쿠키에 기반한다고 볼 수 있다. 주로 서버에서 관리 및 활용된다는 특성 때문에 사용자 인증정보와 같이 보안과 관련된 정보들을 활용할 때 세션을 이용한다.
참조한 자료
쿠키(Cookie), 세션(Session) 특징 및 차이