[Web] 쿠키와 세션

최지수·2022년 8월 9일
0

Web

목록 보기
2/6
post-thumbnail

설명하기에 앞서...

http는 인터넷 상에서 데이터 송수신을 위해 서버/클라이언트 모델을 따르는 통신 규약이에요. Http의 특징을 나열하자면,

  1. 서버의 자원을 절약하기 위해 서버와 클라이언트 간의 연결을 유지하지 않아요 \to 비연결성Connectionless
  2. 연결 해제 후에도 상태 정보를 저장하지 않아요 \to 비상태성Stateless
  3. 즉, 모든 사용자의 요청마다 연결과 해제를 반복해요.

이런 특성 때문에 사용자를 식별할 수 없게 되요. 그래서 사용자가 다수의 요청을 해도 매번 새로운 사용자로 인식하는 단점이 있어요. 여기서 쿠키와 세션이 이를 보완해줘요. 웹사이트를 보면 로그인 한번하고 나면 다시 로그인할 필요가 없게되고, 브라우저 종료 후에 나중에 다시 접속해도 로그인 상태를 유지할 수 있게 해요.

쿠키(Cookie)

웹사이트를 접속 시 생성되는 정보를 담은 임시 파일이에요.

💡 쿠키의 특징
1. {key, value} 형태로 구성되어 있어요
2. 브라우저마다 저장되는 쿠키는 다르므로 상호 브라우저 간의 쿠키 인식이 불가능해요
(서버에서는 브라우저가 다르면 다른 사용자로 인식해요)

서버를 대신해서 정보를 저장하고, 사용자가 요청할 때 그 정보를 함께 보내서 서버가 사용자를 식별할 수 있게 해줘요(정확하게는 웹 브라우저를 이용하고 있는 컴퓨터에 저장해요).

사용목적

1. 세션 관리

로그인, 사용자 닉네임, 접속 시간 장바구니 등의 서버가 알아야할 정보들을 저장해요.

2. 개인화

사용자마다 다르게 그 사람에게 적절한 페이지를 보여줄 수 있어요.

3. 트래킹

사용자의 행동과 패턴을 분석하고 기록해요.

💡 쿠키 사용 예시
1. ID 저장, 로그인 상태 유지
2. 일주일간 다시 보지 않기
3. 최근 검색 상품들의 광고에서 추천
4. 쇼핑몰 바구니 기능(비회원)

하지만 쿠키는 문제점이 있어요. 방문한 웹사이트에 대한 정보나 개인정보가 기록되면, 이는 사생활 침해 소지가 있어요.

물론 이를 해소하기 위해 웹 브라우저 자체에 쿠키 거부 기능이 있어요. 하지만 이렇게 되면 쿠키 본래 목적인 연결을 지속시키는 기능을 수행할 수 없게 되죠.

그리고 서버가 가지고 있는 것이 아닌 사용자가 가지고 있는 것이므로, 이는 임의로 고치거나 지울 수 있고 가로채기도 쉬워 보안에 취약해요. 그래서 쿠키cookie에 민감하거나 중요한 정보를 담는 것은 위험해요.

바로 이런 문제점을 보완해주는 것이 세션session이에요.

세션(Session)

세션 아이디는 웹 브라우저당 1개씩 생성되어 웹 컨테이너에 저장되며, 브라우저 종료 시에 소멸되요.

로그인한 사용자에 대해서만 세션을 생성하는게 아니라 로그아웃을 했을 경우 새로운 사용자로 인식해서 새로운 세션session을 생성해요(여기서 쿠키는 웹 브라우저에 저장된 것이라서 로그아웃 유무와 관계 없이 삭제하지 않으면 유지되요).

아이디, 닉네임 등의 정보를 세션session에 담아두면 요청이 있을 때마다 DB에 접근할 필요가 없어 효율적여질 수도 있어요.

쿠키와 세션을 활용한 사용자 확인 방식


1. 서버에서 사용자로부터 요청이 있을 때, 사용자 구분을 위한 임시 쿠키 하나를 보내고 브라우저는 이를 저장해요.
2. 저장된 쿠키는 웹 브라우저의 쿠키 저장소에 저장되요.
3. 이후 같은 사이트의 서버를 방문할 때마다, 저장된 쿠키를 요청 헤더header에 담아 서버로 전송해요.
4. 서버는 전송받은 쿠키와 서버에 저장된 사용자 정보를 비교해서 같은 사용자인 것을 확인해요.

쿠키 vs. 세션

1. 저장 위치

쿠키Cookie : 클라이언트의 웹 브라우저가 지정한 메모리/하드디스크
세션Session : 서버 메모리

2. 만료 시점

쿠키Cookie : 저장할 때 expires 속성 정의를 통해 무효화시키면 삭제 날짜 지정 가능
세션Session : 클라이언트 로그아웃 또는 설정 시간 동안 반응없을 경우 무효화 \to 정확한 시점 파악 불가

3. 리소스

쿠키Cookie : 클라이언트에 저장되고 클라이언트 메모리를 사용하기 때문에 서버 자원 사용 X
세션Session : 서버에 저장되고 서버 메모리로 로딩되기 때문에 세션이 생길 때마다 리소스 차지

4. 용량 제한

쿠키Cookie : 클라이언트도 모르게 접속되는 사이트에 의해 설정될 수 있으며, 한 도메인 당 20개, 쿠키 당 4KB로 제한
세션Session : 클라이언트가 접속하면 서버에 의해 생성되므로 개수나 용량 제한 X

참고

Gyoogle님 블로그 - Cookie & Session
튜나 개발일기 - [web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동방식
twofivezero님 블로그 - [WEB] Cookie와 Session으로 HTTP의 비연결성, 비상태성 보완하기

profile
#행복 #도전 #지속성

0개의 댓글