Cookie vs Session

trevor1107·2021년 2월 17일
0

네트워크

목록 보기
6/6

HTTP에는 비연결성(Connectionless)과 비상태성(Stateless) 특징이 있다. 연결 상태가 유지되지 않고, 연결 해제 후 상태 정보가 저장되지 않는다는 것이다. 대안으로 나온 것이 쿠키(Cookie)와 세션(Session)이다.

쿠키(Cookie)란?

클라이언트(브라우저) 로컬에 저장되는 key-value 한 쌍으로 이루어진 작은 데이터 파일이다. 타입은 String만 가능하다.

쿠키의 구성 요소

  • 이름 : 각각 쿠키의 구별을 하기 위한 이름
  • 값 : 쿠키의 이름과 관련된 값
  • 유효시간 : 쿠키의 유지시간 및 날짜
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로
  • 기타 보안연결 여부, HTTP Only 여부가 있다.

쿠키의 특징

  • 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효시간이 정해지면 브라우저가 종료되어도 인증이 유지된다.
  • 쿠키는 클라이언트의 상태 정보를 저장했다가 참조한다.
  • 클라이언트에 300개 까지 쿠키 저장이 가능하고, 하나의 도메인 당 20개의 값만 가질 수 있다, 하나의 쿠키 값은 4KB까지 저장이 가능하다.
  • Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.
  • 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송한다.

세션쿠키와 지속쿠키

  • 만료 날짜 및 시간을 지정하지 않으면 항상 유지하는 것으로 판단하고 지속쿠키로 저장되고, 만료 날짜 및 시간을 지정하면 세션쿠키로 저장된다
  • 세션쿠키(Session Cookie)는 브라우저 메모리에 저장되고 브라우저가 종료되면 쿠키는 사라지게 된다.
  • 지속쿠키(Persistent Cookie) 파일의 상태로 저장되므로 브라우저가 종료되어도 남아있게 된다.

쿠키의 동작 방식(Process)

  • 브라우저에서 웹페이지에 접속한다.
  • 클라이언트가 요청한 웹페이지를 응답으로 받으면서 HTTP 헤더를 통해 해당 서버에서 제공하는 쿠키 값을 응답으로 준다. (이러면 클라이언트는 해당 쿠키를 저장한다.)
  • 클라이언트가 웹페이지를 요청한 서버에 재 요청시 받았던 쿠키 정보도 같이 HTTP 헤더에 담아서 요청한다.
  • 서버는 클라이언트의 요청(Request)에서 쿠키 값을 참고하여 비즈니스 로직을 수행한다.

쿠키 사용 예시

세션 관리(Session Management)

아이디 또는 아이디 비번 저장여부, 쇼핑몰의 장바구니 기능, "오늘 더 이상 이 창을 보지 않음" 여부 등 보안에 문제되지 않을 서버가 알아야 할 정보들을 저장한다.

개인화(Personalization)

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

트래킹(Tracking)

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

쿠키의 단점

  • 방문했던 웹 사이트에 대한 정보 및 개인정보가 기록되기 때문에 사생활을 침해할 소지가 있으며, 이를 해소하기 위해서 웹 브라우저 자체에 쿠키 거부 기능이 있다. 이러한 쿠키에 대한 거부가 웹 브라우저에 설정되어 있으면 쿠키 본래의 목적인 웹 브라우저와의 연결을 지속시키는 기능을 수행할 수 없는 경우가 발생한다.
  • 서버가 가지고 있는 것이 아니라 사용자에게 저장되기 때문에, 임의로 고치거나 지울 수 있고, 가로채기도 쉬워 보안이 취약하다. 따라서, 쿠키에는 민감하거나 중요한 정보를 담는 것은 위험합니다.

세션(Session)이란?

서버에 클라이언트의 상태 정보를 저장하는 기술로 논리적인 연결을 Sessioning라고 한다.

세션의 특징

  • 세션은 쿠키를 기반으로 하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버에서 관리한다.
  • 접속 시간에 제한을 두어 일정 시간 응답이 없으면 정보가 유지되지 않게 설정도 가능하다.
  • 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다.
  • 동시 접속자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 되기도 한다.
  • 웹 서버에서 클라이언트에 대한 정보를 저장하고 클라이언트에게는 클라이언트를 구분할 수 있는 ID를 부여하는데 이것을 Session ID라고 한다.
  • 세션 아이디는 웹 브라우저당 1개씩 생성되어 웹 컨테이너에 저장되어 브라우저 종료시 소멸된다.
  • 로그인한 사용자에 대해서만 세션을 생성하는 것이 아니라, 로그아웃하면 새로운 사용자로 인식해서 새로운 세션이 생성된다.

세션의 동작방식(Process)

  • 클라이언트가 서버에 요청했을 때, 필요에 따라 세션에 클라이언트에 대한 데이터를 저장하고 세션 아이디를 응답을 통해 발급해준다. (브라우저 단에서 관리될 수 있도록 쿠키로 발급하는게 일반적인 구조)
  • 클라이언트는 발급받은 세션 아이디를 쿠키로 저장한다.
  • 클라이언트는 다시 서버에 요청할 때, 세션 아이디를 서버에 전달하여 상태 정보를 서버가 활용할 수 있도록 해준다

세션의 사용 예시

로그인 정보 유지(다른 페이지를 이동해도 세션을 유지해서 로그인을 유지시킨다)


Cookie vs Session

쿠키와 세션의 차이점

CookieSession
저장 위치ClientServer
저장 형식TextObject
만료 시점쿠기 저장시 설정
(없으면 브라우저 종료시)
알 수 없음
용량 제한한 도메인당 20개, 한 쿠키당 4KB제한 없음
보안탈취와 변조에 취약상대적으로 안전
속도빠른편느린편

보안 : 쿠키는 탈취와 변조가 가능하지만, 세션은 ID값만 가지고 있고 서버에도 저장되어 있기 때문에 상대적으로 안전하다.

속도 : 쿠키는 파일에서 읽기 때문에 상대적으로 빠르고, 세션은 요청마다 서버에서 처리를 해야하기 때문에 비교적 느리다.

그래서 어떻게 사용하자고?

세션은 서버의 메모리를 사용해서 과하면 속도 저하가 발생하니까 최소화로 사용하되, 사용자나 다른 누군가에게 노출되면 안되는 정보들은 세션으로 관리하자!
쿠키는 사용자의 편의를 위해, 그리고 보안에 문제되지 않는 선에서 사용하자!

장단점이 있으니까 나눠서 만들었겠지! 용도에 맞게 사용하자!

쿠키와 세션 그리고 캐시와는 다르다!

  • 캐시는 이미지나 css, js파일 등을 브라우저나 서버 앞 단에 저장해놓고 사용하는 것이다. 이를 이용해 같은 자원을 로드(load)해야할 때, 해당 자원을 다시 불러오지 않고 캐시되어 있는 자원을 써서 클라이언트 자원을 아끼는 것이다.
  • 한번 캐시에 저장되면 브라우저를 참고하기 때문에 서버에서 변경이 되어도 사용자는 변경되지 않게 보일 수 있는데 이런 부분을 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료시간을 명시하는 방법등을 이용할 수 있다.
  • 보통 쿠키와 세션의 차이를 물어볼 때 저장위치와 보안에 대해서는 잘 말하는데 사실 중요한 것은 라이프사이클을 얘기하는 것이다.
profile
프론트엔드 개발자

0개의 댓글