쿠키와 세션:이론편

onezerokang·2021년 3월 10일
1
post-thumbnail

웹서핑을 하다보면 쿠키 수집 동의를 받는 사이트가 종종보인다.

인터넷을 하다보면 코딩을 모르는 사람도 쿠키와 세션이라는 단어를 접하게 된다. 무슨 뜻이 잘 몰라도 별 문제 없다. 하지만 코딩을 하다보면 그 의미를 알아야 할 때가 있다. 내가 그래서 공부한 내용을 정리해봤다.

HTTP의 특징

쿠키와 세션을 알기 전 HTTP 통신의 특징에 대해서 먼저 알아야 한다. HTTP 통신은 connectionless와 stateless라는 특징을 갖고 있다.

Connectionless

Connectionless는 한국어론 비연결지향이라고 한다. 클라이언트가 서버에게 요청(request)을 보내면 서버는 클라이언트에게 응답(response)을 보낸다. 이후 클라가 응답을 받으면 통신을 끊는 것이다. 이를 connectionless라고 한다.

HTTP가 이런 특징을 갖고 있는 이유는 서버의 리소스(비용)을 아끼기 위함이다. 클라이언트에게 새로운 데이터를 보낼 필요가 없는데 계속 통신하고 있다면 서버에 부담이가기 때문에 통신을 끊는 것이다.

Stateless

Stateless는 한국말로 무상태이다. 서버가 클라이언트에게 응답을 보내면 클라이언트의 상태를 기억하지 않는 것이다(클라이언트가 누구였는지 등)

그래서 이런 특징과 쿠키 세션이 어떤 연관이 있는가

서버는 클라이언트에게 응답을 하면 통신을 끊고, 클라이언트의 상태를 기억하지 않는다. 만약 당신이 쇼핑을 하기위해 로그인을 하고 다음 페이지로 넘어가면 로그인이 해제된다는 이야기다. 장바구니에 물건을 담아도 장바구니를 들어가면 물품이 없을 것이다. 왜냐 서버는 당신이 로그인 했는지, 장바구니에 물건을 담았는지 기억하지 않기 때문이다.

그럼 쿠팡이나, 아마존 같은 기존 쇼핑몰에서는 왜 이런일이 발생하지 않는 것일까? 바로 쿠키와 세션 덕분이다. 쿠키와 세션은 사용자를 기억하게 한다.

쿠키의 특징

  1. 클라이언트(브라우저)로컬에 저장되는 key-value가 들어있는 4kb 데이터 파일이다.
  2. 클라이언트 로컬에 저장된 쿠키를 참조하여 유저의 상태를 참조한다.
  3. 만료 날짜/시간을 지정할 수 있다. 이 시간동안에는 브라우저가 종료되어도 인증이 유지된다.
  4. 하나의 도메인당 20개를 갖고 있을 수 있다.
  5. 클라이언트(브라우저) local에 메모리나 디스크에 저장된다.
  6. 사용자가 따로 요청하지 않아도 request시에 Request-Header에 자동으로 넣어 서버에 전송한다.

쿠키의 구성요소

key: 각각의 쿠키를 구별하는데 사용한다.
name: 쿠키에 들어있는 내용이다(유저 상태 등)
유효시간: 쿠키의 유지시간
domain: 쿠키를 전송할 도메인
path: 쿠키 전송을 요청할 경로

쿠키의 동작 방식

  1. 클라이언트가 페이지를 요청한다.
  2. 서버에서 쿠키를 생성한다.
  3. HTTP-HEADER에 쿠키를 포함시켜 응답한다.
  4. 쿠키를 브라우저에서 보관한다.
  5. 클라이언트가 서버에게 다시 요청한다. 이때 HTTP-HEADER에 쿠키를 동봉한다.
  6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트 하여 다시 응답한다.

쿠키를 언제 사용할까

쿠키는 아이디 & 비밀번호 저장, 쇼핑몰 장바구니나, 팝업의 '오늘 이 창을 보지 않음' 등에 쓰인다.

Session

세션의 특징

  1. 브라우저가 아닌 서버에서 관리한다.
  2. 클라이언트 구분을 위해 세션 ID를 쿠키에 담아 클라이언트에게 부여한다.
  3. 브라우저를 종료하면 인증 상태가 해제된다.
  4. 서버에서 관리하기에 쿠키보다 보안이 좋지만 서버의 메모리를 많이 차지한다.

세션의 동작 방식

  1. 클라이언트가 서버에 요청을 보내면 서버가 세션 ID를 발급한다
  2. 클라이언트는 세션 ID를 쿠키에 담아 저장한다.
  3. 클라이언트가 요청을 보내면 쿠키의 세션 ID를 전달한다.
  4. 서버는 세션 ID를 사용하여 세션 ID와 일치하는 클라이언트 정보를 가져온다.
  5. 클라이언트 정보를 가지고 클라이언트의 요청을 처리한다.

세션을 언제 사용할까

클라이언트보다 보안이 좋기에 보안이 중요한 일에 사용한다.

쿠키와 세션 차이 한눈에 보기

쿠키세션
저장위치브라우저서버
보안클라이언트에서 변질되거나, 스니핑 당할 우려가 있다.서버에서 처리하기에 쿠키보다 비교적 좋다.
속도클라이언트에서 처리하기에 빠르다.서버에서 처리하기 때문에 느리다
라이프사이클브라우저를 종료해도 정보가 남는다브라우저를 종료하면 삭제된다

세션이 쿠키보다 보안이 좋아 만능처럼 보이지만, 서버의 자원을 많이 사용한다는 한계가 있다.

다음시간에는 node.js를 사용해서 cookie와 세션을 사용하는 법을 포스팅하겠다.

참고한 곳
https://interconnection.tistory.com/74
https://chrisjune-13837.medium.com/web-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80-aa6bcb327582
https://jeong-pro.tistory.com/80

profile
블로그 이전 했습니다: https://techpedia.tistory.com

0개의 댓글