웹서핑을 하다보면 쿠키 수집 동의를 받는 사이트가 종종보인다.
인터넷을 하다보면 코딩을 모르는 사람도 쿠키와 세션이라는 단어를 접하게 된다. 무슨 뜻이 잘 몰라도 별 문제 없다. 하지만 코딩을 하다보면 그 의미를 알아야 할 때가 있다. 내가 그래서 공부한 내용을 정리해봤다.
쿠키와 세션을 알기 전 HTTP 통신의 특징에 대해서 먼저 알아야 한다. HTTP 통신은 connectionless와 stateless라는 특징을 갖고 있다.
Connectionless는 한국어론 비연결지향이라고 한다. 클라이언트가 서버에게 요청(request)을 보내면 서버는 클라이언트에게 응답(response)을 보낸다. 이후 클라가 응답을 받으면 통신을 끊는 것이다. 이를 connectionless라고 한다.
HTTP가 이런 특징을 갖고 있는 이유는 서버의 리소스(비용)을 아끼기 위함이다. 클라이언트에게 새로운 데이터를 보낼 필요가 없는데 계속 통신하고 있다면 서버에 부담이가기 때문에 통신을 끊는 것이다.
Stateless는 한국말로 무상태이다. 서버가 클라이언트에게 응답을 보내면 클라이언트의 상태를 기억하지 않는 것이다(클라이언트가 누구였는지 등)
서버는 클라이언트에게 응답을 하면 통신을 끊고, 클라이언트의 상태를 기억하지 않는다. 만약 당신이 쇼핑을 하기위해 로그인을 하고 다음 페이지로 넘어가면 로그인이 해제된다는 이야기다. 장바구니에 물건을 담아도 장바구니를 들어가면 물품이 없을 것이다. 왜냐 서버는 당신이 로그인 했는지, 장바구니에 물건을 담았는지 기억하지 않기 때문이다.
그럼 쿠팡이나, 아마존 같은 기존 쇼핑몰에서는 왜 이런일이 발생하지 않는 것일까? 바로 쿠키와 세션 덕분이다. 쿠키와 세션은 사용자를 기억하게 한다.
key: 각각의 쿠키를 구별하는데 사용한다.
name: 쿠키에 들어있는 내용이다(유저 상태 등)
유효시간: 쿠키의 유지시간
domain: 쿠키를 전송할 도메인
path: 쿠키 전송을 요청할 경로
쿠키는 아이디 & 비밀번호 저장, 쇼핑몰 장바구니나, 팝업의 '오늘 이 창을 보지 않음' 등에 쓰인다.
클라이언트보다 보안이 좋기에 보안이 중요한 일에 사용한다.
쿠키 | 세션 | |
---|---|---|
저장위치 | 브라우저 | 서버 |
보안 | 클라이언트에서 변질되거나, 스니핑 당할 우려가 있다. | 서버에서 처리하기에 쿠키보다 비교적 좋다. |
속도 | 클라이언트에서 처리하기에 빠르다. | 서버에서 처리하기 때문에 느리다 |
라이프사이클 | 브라우저를 종료해도 정보가 남는다 | 브라우저를 종료하면 삭제된다 |
세션이 쿠키보다 보안이 좋아 만능처럼 보이지만, 서버의 자원을 많이 사용한다는 한계가 있다.
다음시간에는 node.js를 사용해서 cookie와 세션을 사용하는 법을 포스팅하겠다.
참고한 곳
https://interconnection.tistory.com/74
https://chrisjune-13837.medium.com/web-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80-aa6bcb327582
https://jeong-pro.tistory.com/80