[네트워크] 쿠키와 세션

김우경·2021년 1월 26일
3

쿠키와 세션에 대해 알아보기 전에, HTTP의 특징과 이 특징이 왜 쿠키와 세션을 필요로 하는지 알 필요가 있다.

쿠키와 세션이 필요한 이유

웹에서는 웹 브라우저(클라이언트)와 웹 서버간에 데이터를 주고받기 위해서 HTTP 프로토콜을 사용한다.

쿠키와 세션이 필요한 이유는 이 HTTP 프로토콜의 특징이자 약점을 보완하기 위함이다.

HTTP 프로토콜의 특징

비연결지향 connectionless

  • 클라이언트와 서버가 한번 연결을 맺고, 클라이언트의 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어버림

  • 장점 : 서버 자원의 절약으로 더 많은 연결 가능
    → HTTP는 불특정 다수의 통신 환경을 기반으로 설계되어 있는데, 다수의 클라이언트와 계속 연결을 유지한다면 많은 리소스가 필요함
    → 연결 유지를 위한 리소스 절약이 가능

  • 단점: 연결과 해제에 따른 오버헤드
    → 서버는 연결했던 클라이언트를 기억하지 않으므로 동일 클라이언트의 요청에도 매번 새로운 연결/해제 과정을 거침

  • HTTP 1.1 버전에서 연결을 계속 유지하고, 요청에 재활용 하는 기능이 Default 로 추가되었다.
    → HTTP header에 keep-alive 옵션을 줄 수 있음

상태없음 stateless

  • 연결을 끊는 순간 클라이언트-서버간의 통신이 끝나고, 상태 정보를 유지하지 않음
  • 단점 : 매번 새로운 인증을 통해 클라이언트를 식별해야함

이러한 Connectionless, Stateles한 HTTP 프로토콜을 사용함에 따라, 서버가 클라이언트를 식별할 수 있는 방법이 필요해졌고, 쿠키와 세션을 사용하게 되었다.

쿠키

  • 웹 사이트에 접속할때 생성되는 정보를 담은 임시 파일
  • 서버를 대신해서 정보를 클라이언트의 웹 브라우저에 저장하고, 사용자가 요청할때 해당 정보를 보내서 서버가 사용자 식별이 가능하게 함

특징

  • Key-Value로 구성된 String
  • 브라우저마다 저장되는 쿠키는 다름
  • 로그아웃 유무에 상관없이 삭제하지 않으면 유지됨

동작 순서

  1. 클라이언트가 서버에 요청

  2. 서버에서 쿠키 생성후, HTTP 헤더에 쿠키 포함시켜서 응답
    : 브라우저가 종료되어도 쿠키 만료기간 전까지 클라이언트에서 보관

  3. 클라이언트 브라우저에 쿠키 존재시, 요쳥할 경우 HTTP 헤더에 쿠키 함께 보내서 요청

  4. 서버에서 쿠키를 읽어들여서 이전 상태 정보를 변경할 필요가 있을 경우, 쿠키를 갱신하고 변경된 쿠키를 HTTP 헤더에 포함시켜서 응답

사용 예

  • 쇼핑몰의 장바구니 기능
  • 오늘 더이상 이 창을 보지 않음 기능

사용 목적

  1. 세션 관리
    : 로그인, 사용자 이름, 접속시간 등 서버가 알아야할 정보 저장

  2. 개인화
    : 사용자에게 적절한 페이지 보여줄 수 있음

  3. 트래킹
    : 사용자의 행동과 패턴 분석, 기록

단점

  1. 사생활 침해
    : 방문기록과 개인정보가 기록되므로 사생활 침해 우려가 있음
    → 웹 브라우저 자체에 쿠키 거부 기능 존재

  2. 보안에 취약
    : 서버가 가지는 것이 아닌 사용자에게 저장됨으로 임의로 수정, 삭제, 탈취가 가능

세션

  • 쿠키 기반이지만, 사용자 정보 파일을 서버 메모리에 저장
    → 쿠키의 보안적 단점 보완

  • 세션 ID : 클라이언트가 요청을 보내면, 해당 서버가 클라이언트에게 부여하는 유일한 ID
    → 웹 브라우저당 하나씩 생성하여 웹 컨테이너에 저장하고, 브라우저 종료시 소멸

동작 방식

  1. 클라이언트가 서버에 요청 시 세션 ID 발급
  2. 클라이언트는 세션 ID를 쿠키로 저장
  3. 다시 서버에 요청시 쿠키에 저장된 세션 ID를 서버에 전달
  4. 서버는 전달받은 세션 ID로 세션에 있는 클라이언트 정보 가져옴
  5. 클라이언트 정보로 요청을 처리하여 클라이언트에게 응답

사용 예

  • 로그인 정보 유지

단점

  • 서버에 저장되고, 서버 자원을 사용하기 때문에 사용자가 많은 경우 소모자원 증가 → 성능 저하의 요인

⇒ 사용자 수 만큼 서버 메모리를 차지하므로 요즘은 토큰기반의 인증방식을 사용하는 추세 (JWT 등이 있다)

정리

쿠키세션
저장 위치클라이언트의 브라우저서버의 메모리
보안보안에 취약로컬에는 세션 ID만 저장하므로 상대적으로 우수
요청 속도상대적으로 빠름서버처리가 필요하므로 상대적으로 느림
라이프 사이클브라우저 종료 후에도 만료기간까지는 정보 남아있음브라우저 종료시에 만료기간과 관계 없이 삭제

출처

http://www.ktword.co.kr/abbr_view.php?m_temp1=648https://hahahoho5915.tistory.com/32

https://devuna.tistory.com/23

https://hahahoho5915.tistory.com/32

https://developpaper.com/thoroughly-understand-session-cookie-token/

https://dev.to/thecodearcher/what-really-is-the-difference-between-session-and-token-based-authentication-2o39

profile
Hongik CE

0개의 댓글