쿠키, 세션

kudos·2021년 5월 23일
0

네트워크

목록 보기
3/5

1. 클라이언트 식별

웹 서버는 서로 다른 수천 개의 클라이언트들과 동시에 통신한다. 이 서버들은 익명의 클라이언트들로부터 받는 모든 요청을 처리하는 것뿐만 아니라 서버와 통신하고 있는 클라이언트를 추적해야 할 수도 있다.

HTTP는 익명으로 사용하며 상태가 없다. 즉, 연결 자체에 대한 정보를 가지지 않으며 매 요청은 일회성이고 독립적으로 처리된다. 웹 서버는 요청을 보낸 사용자를 식별하거나 방문자가 보낸 연속적인 요청을 추적하기 위해 쿠키와 세션을 이용한다.

2. 쿠키

쿠키는 사용자를 식별하고 세션을 유지하는 방식 중에서 현재까지 가장 널리 사용하는 방식이다. 쿠키의 기본적인 발상은 브라우저가 서버 관련 정보를 저장하고, 사용자가 해당 서버에 접근할 때마다 그 정보를 함께 전송하게 하는 것이다.

1) 쿠키의 타입

쿠키는 크게 세션 쿠키(session cookie)와 지속 쿠키(persistent cookie) 두 가지 타입으로 나눌 수 있다.

  • 세션 쿠키 : 사용자가 사이트를 탐색할 때, 관련한 설정과 선호 사항들을 저장하는 임시 쿠키. 사용자가 브라우저를 닫으면 삭제됨
  • 지속 쿠키 : 디스크에 저장되어, 브라우저를 닫거나 컴퓨터를 재시작해도 남아있는 쿠키. 사용자가 주기적으로 방문하는 사이트에 대한 설정 정보나 로그인 이름을 유지하려고 사용함.

2) 쿠키의 동작 방식

쿠키는 서버가 사용자에게 "안녕, 내 이름은.."라고 적어서 붙이는 스티커와 같다. 사용자가 웹 사이트에 방문하면, 웹 사이트는 서버가 사용자에게 붙인 모든 스티커를 읽을 수 있다.

처음에 사용자가 웹 사이트에 방문하면 웹 서버는 사용자에 대해 아무것도 모른다. 웹 서버는 사용자가 다시 돌아왔을 때 해당 사용자를 식별하기 위한 유일한 값을 쿠키에 할당한다. 쿠키는 <이름=값> 형태의 리스트를 가지고, 그 리스트는 'Set-Cookie'와 같은 HTTP 응답 헤더에 기술되어 사용자에게 전달한다.

예를 들어 그림 11-3b와 같이 서버는 id="34294"라는 쿠키를 사용자에게 할당한다. 서버는 이 쿠키 값으로 데이터베이스에서 사용자의 정보(구매 내용, 주소 정보 등)를 찾는 데 사용할 수 있다.

브라우저는 서버로 온 'Set-Cookie' 헤더에 있는 쿠키 콘텐츠를 브라우저 쿠키 데이터베이스에 저장한다. 사용자가 미래에 같은 사이트를 방문하면(그림 11-3c), 브라우저는 서버가 이 사용자에게 할당했던 쿠키를 Cookie 요청 헤더에 기술해 전송한다.

3) 쿠키의 사용 목적

  • 세션 관리 : 로그인, 사용자 닉네임, 접속시간, 장바구니 등 서버가 알아야 할 정보 저장
  • 개인화 : 사용자마다 그 사람에게 적절한 페이지를 보여줄 수 있음
  • 트래킹 : 사용자의 행동과 패턴을 분석하고 기록

4) 쿠키의 단점

  • 방문했던 웹 사이트에 대한 정보 및 개인정보가 기록되기 때문에 사생활 침해 소지 가능성이 있으며, 이를 해소하기 위해 웹 브라우저 자체에 쿠키 거부 기능이 있기도 하다.
  • 서버가 아닌 사용자에게 저장되기 때문에 임의로 고치거나 지울 수 있고 가로채기도 쉬워 보안에 취약하다. 그래서 쿠키에 민감하거나 중요한 정보를 담는 것은 위험하다.

3. 세션

1) 개념

일정 시간 동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술이다. 여기서 일정 시간은, 웹 서버 접속부터 브라우저 종료 시점까지를 말한다.

세션 ID는 웹 브라우저당 1개씩 생성되어 웹 컨테이너에 저장된다. 서버에 저장되기 때문에 보안 상 쿠키보다 낫고 그 크기에 제한도 없다.

2) 쿠키 vs 세션

쿠키세션
저장위치클라이언트서버
저장형식textObject
용량제한도메인당 20개제한 없음
만료 시점쿠키 저장 시 설정알 수 없음

여기서 세션의 만료 시점을 알 수 없는 이유는, 클라이언트가 로그아웃하거나 설정한 시간 동안 반응이 없을 경우 무효화되기 때문에 정확한 시점을 알 수 없기 때문이다.

3) 쿠키와 세션을 같이 사용

  1. 클라이언트가 서버에 요청 메시지를 보내면, 필요에 따라 세션에 클라이언트에 대한 데이터를 저장하고 세션 ID를 응답을 통해 발급해준다. 이때 브라우저에서 관리할 수 있도록 쿠키로 발급하는 것이 일반적인 구조이다.
  2. 클라이언트는 발급 받은 세션 ID를 쿠키로 저장한다.
  3. 클라이언트는 다시 서버에 요청할 때, 세션 ID를 서버에 전달하여 상태 정보를 서버가 활용할 수 있도록 해준다.

단, 세션은 서버의 자원을 사용하기 때문에 그 양이 늘어나면 서버의 속도 저하를 불러일으킬 수 있다.

참고

profile
kudos

0개의 댓글