개발을 하면서 필수적으로 마주하게 되는 쿠키와 세션을 정리해보자.

목차

1. 쿠키와 세션의 탄생 배경
2. 쿠키의 개념과 활용
3. 세션의 개념과 활용
4. 쿠키와 세션의 차이
5. JWT의 개념과 활용

1. 쿠키와 세션의 탄생 배경

우리가 사용하는 HTTP 프로토콜은 Stateless와 Connectionless 하다는 특징을 가지고 있다. 즉 기본적으로 서버측에 정보를 저장해놓지 않고, 연결을 끊는다는 것이다. 이 때문에 매 요청에 정보를 모두 담아 전송해야하는데, 가끔은 어딘가에 저장해서 사용하는 것 이 편한 경우가 있다.
쿠키와 세션이 없는 경우를 가정해보겠다. 세션과 쿠키가 없다면 유튜브에 로그인을 한 후에 로그인을 했다라는 여부를 저장해놓지 않는다. 이렇게 되면 영상을 하나 볼 때마다 다시 로그인을 해야한다. 얼마나 불편할지 감이 오는가? 이러한 불편한 상황을 해결하기 위한 개념이 쿠키와 세션이다.


2. 쿠키의 개념과 활용

HTTP의 무상태성을 보완하여 정보를 저장해놓기 위한 것이 쿠키이다. 쿠키란 클라이언트 측에 저장되는 포스트잇 정도로 생각하면 된다.


쿠키의 동작 방식

1. 클라이언트가 서버에 요청을 한다.
2. 서버는 요청 정보로 쿠키를 만든다.
3. 서버는 응답의 헤더에 쿠키를 추가해서 보낸다.
4. 클라이언트는 쿠키를 저장해놓고, 클라이언트가 다음 요청을 보낼 때 헤더에 쿠키를 추가해서 보낸다.


쿠키의 활용

아래와 같은 정보들은 쿠키를 활용해사 저장을 한다고 한다. 최근 검색어나 쇼핑몰 장바구니 같은거는 해본적이 없어서 어떻게 처리하는지 몰랐는데 DB 로 관리하는게 아닌 쿠키를 사용해서 관리하는 것을 알 수 있다.
1. 쇼핑몰 장바구니
2. 최근 검색어
3. 사이트 id/pw 자동 입력



3. 세션의 개념과 활용

세션이라는 녀석도 정보를 저장해놓는 포스트잇 같은 건데 이건 서버측에 저장되어 활용된다. 한 사용자가 서버에 여러 번의 요청을 보내게 되는데 이 일련의 요청들을 하나의 접속 상태로 보는 것을 세션이라 한다.

세션의 동작방식에 대해 알아보기에 앞서 간단한 설명을 하겠다. 세션이라는 녀석은 앞서 설명한 쿠키를 활용하며, 세션DB라는 저장소에 세션을 저장해서 사용한다고 알아두자.


세션의 동작 방식

1. 클라이언트는 서버에 요청을 보낸다.
2. 서버는 세션id 를 생성해서 클라이언트에 응답과 함께 전송한다.
3. 클라이언트는 쿠키에 세션id 를 저장한다.
4. 클라이언트는 다음 요청을 보낼 때 세션id가 담긴 쿠키를 보낸다.
5. 서버는 세션id로 세션DB를 조회하여 클아이언트의 정보를 얻는다.
6. 클라이언트의 정보를 활용하여 요청을 처리한다.

세션의 활용 예시

화면을 이동할 때 로그인을 유지하는 것이 세션의 활용 예시가 되겠다.
1. 로그인 유지
2. 단일 계정 로그인 동시 접속 제한
 

4. 쿠키와 세션의 차이

쿠키와 세션, 사용자의 정보를 저장한다는 점에 비슷해서 그놈이 그놈인 것 같다. 여기서 확실히 차이를 짚고 넘어가보자.


차이점

1. 저장 위치
가장 큰 차이점은 저장 위치이다. 쿠키는 클라이언트 측에 저장되며 세션은 서버 측에 저장이 된다.

2. 라이프 사이클
쿠키와 세션 모두 만료기간이 존재하나, 쿠키는 파일로 저장이 되어있기 때문에 브라우저가 종료되어도 만료기간까지 이용이 가능하다. 반면, 세션의 경우 만료기간에 상관없이 브라우저가 종료되면 삭제된다는 특징을 가진다.

3. 보안
쿠키 < 세션
쿠키는 클라이언트에서 서버로 요청 시 보내지게 되므로 탈취의 우려가 있다. 반면 세션의 경우 세션DB 에 대부분의 데이터를 저장하고 세션id만 교환을 하기때문에 쿠키보다 보안적으로 우수하다.

4. 처리 속도
쿠키 > 세션
쿠키의 경우 정보가 쿠키에 존재하기 때문에 서버에서 요청을 받으면 바로 활용할 수 있다. 반면 세션의 경우 세션id를 클라이언트로부터 받으면 세션DB에서 클라이언트 정보를 찾는 과정이 있기 때문에 쿠키보다 처리 속도가 느리다.


요약

쿠키와 세션은 클라이언트와 서버에 저장해서 사용하기 위한 포스트잇이라는 점을 기억하자.
 

참고 블로그
https://dev-coco.tistory.com/61



+ Recent posts