쿠키와 세션의 개념, 특징, 차이점
제로코딩
·2022. 6. 28. 04:47
✋ 쿠키(Cookie)와 세션(Session) 개념, 특징, 차이점
쿠키를 발급받고 사용하는 과정을 그림으로 나타내면 다음과 같습니다.
HTTP 프로토콜은 Stateless, (서버 응답 후 연결 끊어버리는 특징, http1.1부터 keep-alive속성이 존재하여 재활용함)Connectionless가 특징이기 때문에 이전 상태를 저장하지 못합니다. 이를 보완하기 위해서 쿠키 및 세션이 존재합니다. 이번 글에서는 쿠키와 세션의 발급 과정, 차이점 및 특징을 설명드리겠습니다.
⚡️ 쿠키 (Cookie)
쿠키는 브라우저내의 로컬저장소에 저장되는 키와 값이 들어있는 작은 데이터입니다. 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지됩니다.
특징으로는 클라이언트에 300개까지 쿠키저장이 가능하고, 하나의 도메인당 쿠키는 20개의 값만 가질 수 있습니다. 하나의 쿠키값은 4KB까지 저장합니다.
Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있습니다.
쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송됩니다.
(사용예시)
로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"
자동로그인, 팝업에서 "오늘 더 이상 이 창을 보지 않음"
장바구니(쿠키, 세션 둘다 가능, 하지만 주로 쿠키로 사용, 서버 리소스를 아끼기 위해)
즉, 쿠키는 해킹되거나 가로채더라도 큰 영향이 없는 정보를 저장합니다.
⚡️ 세션 (Session)
세션은 서버 측에서 관리합니다. 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지합니다. 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능 합니다.
사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버내의 메모리를 많이 차지하기 때문에 서버에 과중이 갈 수 있습니다. 서버에 메모리가 많을수록, 그 만큼 세션에 투자가능한 용량은 커집니다. 서버 메모리로 로딩되게 때문에 세션이 생성될때마다 리소스 차지합니다.
세션을 사용하게 되면, 동접자 수가 많을 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 됩니다.
즉, 클라이언트가 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는 데 이것이 Session ID입니다.
세션은 주로 누군가에게 노출되면 안되는 소중한 정보를 저장합니다.
📌 쿠키와 세션의 차이점
가장 큰 차이점은 사용자의 정보가 저장되는 위치입니다. 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용합니다.
즉, 보안 면에서 세션이 더 우수합니다. 하지만, 요청 속도는 쿠키가 세션보다 더 빠른데 그 이유는 세션은 서버의 처리가 필요하기 때문입니다.
보안적인 면에서 보자면 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스니핑 당할 우려가 있어서 보안에 취약하지만 세션은 쿠키를 이용해서 sessionid 만 저장하고 그것으로 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋습니다.
즉, 쿠키는 보안성이 떨어지고, 세션은 sessionId만 저장하기 때문에 보안이 좋습니다.
📌 쿠키와 세션을 통한 인증 방식
Redis를 세션(서버에서 가지고 있는 정보) 저장 용도로 많이 사용한다고 합니다.
세션ID를 쿠키라고 봐도 동일합니다. 쿠키가 사용자 개념에서 더 큰 범주입니다. 세션ID를 쿠키로 저장하는 방식입니다.
쿠키는 사용자에게 발급된 세션을 열기 위한 키(SESSION ID)를 의미합니다.
이미지 출처: https://velog.io/@hammii/%EC%BF%A0%ED%82%A4Cookie-%EC%84%B8%EC%85%98Session
📌 마무리
저마다의 특장점이 있기 때문에 요즘 나오는 서비스들은 쿠키와 세션을 혼합해서 같이 사용합니다.