쿠키와 세션의 이해를 돕기위해 아래의 상황을 확인해 보자.
얌념이는 네트워크 책을 사기 위해 자주 이용하는 온라인 서점 사이트에 접속했다.
로그인 창을 열자 자동 로그인 메시지가 떴고 얌념이는 저장된 아이디와 비밀번호로 로그인을 하였다.
원하는 책을 장바구니에 골라 담고 결제를 하려는 순간, 저녁 시간이 되어 얌념이는 저녁을 먹으러 갔다.저녁을 먹고 다시 돌아와 결제를 시도하자 로그인이 풀려 다시 로그인 페이지로 돌아갔다.
얌념이는 결국 다시 로그인을 하고 장바구니에 담긴 책을 결제하였다.
이 상황에서 어떤 것에 쿠키가 활용되고 세션이 활용되었을까?
쿠키
쿠키는 클라이언트, 브라우저의 로컬에 key-value 형태로 저장되는 데이터이다.
특징
- 브라우저의 로컬에 key-value 형태로 저장됨
- 유효기간이 있으며, 유효기간기간 내에서 브라우저를 종료해도 데이터가 남아있다.
- 서버에서 response header에 set-cookie속성을 통해 클라이언트에 쿠키를 만들 수 있다. → set-cookie(data)
- 사용자가 따로 작업하지 않아도 브라우저는 자동으로 쿠키를 request header에 담아 보낸다.
- 브라우저별로 쿠키의 크기, 최대 쿠키 개수가 다르다. (보통 쿠키 하나당 최대 4kb)
동작 과정
- 클라이언트가 서버로 request를 보내면 서버는 클라이언트에 대한 정보를 토대로 쿠키를 생성
- 서버는 response header에 set-cookie속성을 통해 쿠키를 담아서 보냄
- 클라이언트는 response의 쿠키 정보를 저장
- 다음 request 발생시 브라우저는 자동으로 쿠키를 header에 담아서 보냄
활용 예
- 자동로그인, 아이디 저장
- 쇼핑몰 장바구니
- 팝업에서 “오늘 더 이상 이 창을 보지 않음” 체크
세션
세션은 기본적으로 쿠키를 이용하여 구현된다.
특징
- 각 클라이언트마다 Session ID를 부여하고 쿠키에 Session ID를 저장해둡니다.
- 사용자 데이터를 서버측에 저장하여 관리된다.
- 세션은 브라우저가 종료될 때 까지 인증상태를 유지하고 브라우저가 종료되면 데이터가 사라진다.
- 따로 유효기간을 두어 일정시간동안 응답이 없으면 인증이 유지되지 않게 할 수 있다.
- 정보를 서버에 저장하기 때문에 쿠키에비해 비교적 보안이 좋다.
- 서버의 메모리에 정보를 저장하기 때문에 동시접속자가 많아질 경우 서버 성능이 저하될 수 있다.
동작 과정
- 클라이언트가 서버로 요청을 보내면 서버는 Session ID를 생성해 클라이언트의 쿠키에 저장한다.
- 다음 요청이 발생시 클라이언트는 Session ID를 담아 보낸다.
- 서버는 Session ID를 통해 클라이언트의 상태 정보를 불러와서 사용한다.
활용 예
- 로그인
쿠키와 세션 차이
저장 위치
쿠키는 사용자 상태정보를 클라이언트/브라우저에 저장하고, 세션은 사용자 상태정보를 서버의 메모리에 저장한다.
생명 주기
쿠키는 유효기간 내에서 브라우저가 종료되어도 정보가 남아 계속 유지되지만, 세션은 브라우저 종료시 또는 서버에서 임의로 정보를 삭제할 수 있어 쿠키보다 보안성이 좋다.
왜 세션대신 쿠키를 사용할까?
세션은 서버의 자원을 사용하기 때문에 서버가 느려질 수 있고 서버 자원이 부족할 수 있다. 따라서 쿠키를 사용하면 서버 자원의 낭비를 방지하여 웹사이트 속도를 높일 수 있다.
이제 맨 위의 질문에 답을 할 수 있을 것이다.
정답은!!
더보기
얌념이는 네트워크 책을 사기 위해 자주 이용하는 온라인 서점 사이트에 접속했다.
로그인 창을 열자 자동 로그인 메시지가 떴고 얌념이는 저장된 아이디와 비밀번호로 로그인(=> 쿠키)을 하였다.
원하는 책을 장바구니에 골라 담고(=> 쿠키) 결제를 하려는 순간, 저녁 시간이 되어 얌념이는 저녁을 먹으러 갔다.
저녁을 먹고 돌아와 결제를 시도하자 로그인이 풀려 다시 로그인 페이지로 돌아갔다(=> 세션).
얌념이는 결국 다시 로그인을 하고 장바구니에 담긴 책을 결제하였다.
참고자료