쿠키, 세션

지송현·2023년 2월 3일
0

web

목록 보기
10/13
post-thumbnail

쿠키와 세션의 사용 이유

쿠키와 세션에 대해 본격적으로 알아보기 전에 왜 사용하는지부터 살펴보고 가자.

간단하게 말하면 "http 프로토콜의 약점을 보완하기 위해" 사용한다.

여기서 말하는 http 프로토콜의 약점이란 stateless이다. 한 번 요청과 응답을 주고받고 나면 연결이 끊어지고 상태를 유지하지 않기 때문에 그러한 기능이 필요한 상황들에서 쿠키와 세션 등을 사용하는 것이다.

-> 상태를 저장하기 위해 사용

쿠키(Cookie)

정의 및 특징

  • 쿠키는 브라우저 로컬에 저장되는 key-value 형태의 작은 데이터 파일이다.
  • 쿠키는 클라이언트의 상태 정보를 브라우저에 저장했다가 참조한다.
  • 데이터의 유효 시간을 정할 수 있으며, 유효 시간이 정해지면 브라우저가 꺼져도 상태가 유지된다.(유효 시간이 지나지 않았을 때)
  • 클라이언트에 300개까지 저장 가능하고, 하나의 도메인에는 20개까지 가능하다. 또, 하나의 쿠키는 4kb까지 저장할 수 있다.
  • Response-Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.
  • 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 서버에 요청 시에 헤더에 자동으로 담아 보낸다.
  • 브라우저마다 저장되는 쿠키가 다르다. 브라우저가 다르면 서버는 다른 이용자로 인식한다.

웹 사이트를 방문할 때마다 컴퓨터에 작은 임시 파일들이 생기는 것이 쿠키를 먹을 때 부스러기가 생기는 것과 비슷해 쿠키라는 이름이 지어졌다고 한다.

구성 요소

Set-Cookie: name=value; expires={Date}; domain={Domain}; path={Path}; {secure}

쿠키는 4개의 속성과 하나의 데이터를 가진다.

  • name : key 값이다. 쿠키를 구분하는데 사용한다.
  • expires : 유효 기간이다. 유효 기간 안에 있는 경우엔 브라우저가 꺼져도 지워지지 않는다.
  • domain : 어떤 도메인에서 사용할 것인지 적는다.
  • path : 도메인의 어떤 페이지에서 사용할 것인지 적는다. 해당 페이지 이외에서는 쿠키를 읽을 수 없다. path를 "/"로 설정하면 모든 페이지에서 사용할 수 있다.
  • secure : 쿠키 데이터의 전송 방법을 지정한다. https의 보안 전송을 사용할 수 있지만 보통 쿠키에는 공개되어도 상관없는 정보를 담기 때문에 잘 사용하지 않는다.

동작

  1. 사용자가 특정 동작 수행(ex 로그인)
  2. 웹 서버가 쿠키 생성 후 브라우저에 저장
  3. 이후 서버에 요청 시 헤더에 쿠키 담아 요청

종류

1. 슈퍼 쿠키

슈퍼 쿠키는 최상위 도메인(.com)이나 Public Suffix(www)을 기원으로하는 쿠키이다. 보통 쿠키는 아까 말했듯이 특정 도메인을 기원으로 한다.

이 슈퍼 쿠키는 사용자가 브라우저에 쿠키를 삭제해도 지워지지 않고 사용자가 어떤 사이트를 방문했는지 파악할 수 있다.

이렇게만 들어도 찜찜한데, 역시 잠재적인 보안 문제가 있기 때문에 대부분의 브라우저에 슈퍼 쿠키를 막는다고 한다.

2. 세션 쿠키

세션 쿠키는 사용자가 웹 사이트를 이동하는 동안에만 임시로 메모리에 존재한다. 보통 브라우저는 사용자가 브라우저를 닫으면 세션 쿠키도 삭제한다. 그렇기에 따로 유효기간을 설정하지 않는다.

지속 쿠키는 브라우저를 닫아도 유지할 수 있다. 디스크에 저장되기에 컴퓨터를 재부팅해도 남아있다. 세션 쿠키와는 유효 기간 외에는 차이점이 없다.

단점

  1. 방문했던 웹 사이트에 대한 정보 및 개인정보가 기록되기 때문에 사생활 침해의 우려가 있다. 이 때문에 웹 브라우저 자체에 쿠키 거부 기능이 있다. 이런 쿠키 거부 기능이 활성화 되어있으면 개발자가 의도한 기능이 제대로 동작하지 않을 수 있다.
  2. 서버가 아닌 브라우저(사용자)에 저장되기 때문에, 임의로 수정할 수 있고, 타인이 가로채기도 쉬워 보안에 취약하다. 따라서 민감한 정보를 담을 수 없다.

세션

정의 및 특징

  • 사용자가 웹 사이트에 접속해 있는 동안 그 상태를 접속이 끝날 때까지 유지하는 것이다.
  • 쿠키와 달리 그 상태에 대한 정보를 서버에 저장한다.
  • 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여한다.
  • 마찬가지로 유효 기간을 두어 일정 시간이 지나면 정보를 삭제할 수도 있다.
  • 정보를 서버에 두기 때문에 쿠키에 비해 보안성이 좋지만, 사용자가 많아질 경우 서버에 부담이 될 수 있다.

동작

  1. 클라이언트가 서버에 요청 시 세션 ID를 발급 받음
  2. 클라이언트는 세션 ID를 쿠키에 담아 저장
  3. 클라이언트가 서버에 요청을 보낼 때, 이 세션 ID를 담은 쿠키를 함께 전송
  4. 서버는 세션 ID를 받아 ID에 해당하는 사용자 정보를 가져와서 사용 후 응답

쿠키와 세션의 차이

  • 가장 큰 차이점은 사용자의 정보가 저장되는 위치가 쿠키는 브라우저, 세션은 서버라는 점이다.
  • 따라서 보안성이 세션이 높고, 쿠키가 낮다.
  • 같은 이유로, 세션의 속도가 느리고 쿠키의 속도가 빠르다. 쿠키는 서버의 처리가 필요없기 때문에.
  • 세션은 브라우저가 종료되면 사라지는 반면에, 쿠키는 반영구적으로 남아있을 수 있다.

쿠키 사용 이유?

세션이 서버에 부담을 줄 수 있기 때문이다. 노출되어도 위험이 적은 정보들은 쿠키에 담는 것이 서버 입장에서 효율적일 것이다.

profile
백엔드 개발자

0개의 댓글