[CS] 세션과 쿠키?

코박·2022년 8월 9일
0

CS

목록 보기
2/3

Http?

특징

Connectionless 비 연결 지향

  • 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답 한 후 접속종료
    • 커넥션 관리에 대한 비용을 줄이는 것으로 명확한 장점
  • (HTTP 1.1에서 Connection 헤더에 keep-alive 라는 설정 줄 시 유지 가능)

Stateless 상태 정보 유지 X

  • 요청을 응답하고 접속을 종료시키기에 상태 정보를 알 수 없음

만약 로그인을 하고 그 상태를 유지시킨채 웹 서비스를 계속 제공하려면?

세션

  • 일정시간동안 같은 사용자로부터 들어오는 요청을 하나의 상태로 보고 그 상태를 유지
  • 세션은 브라우저가 종료되기 전까지 클라이언트의 요청을 유지해주는 기술
  • 방문자가 웹 서버에 접속해있는 상태를 하나의 단위로 봄 (=세션)

특징

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장
  • 웹 서버에 저장되는 쿠키 (=세션 쿠키)
  • 브라우저를 닫거나, 서버에서 세션을 삭제했을때만 삭제가 됨
  • 저장 데이터 제한 X (서버 용량 허용 선)
  • 각 클라이언트에 고유 세션ID 부여

동작 방식


1. 클라이언트가 서버에 로그인 요청
2. 서버는 클라이언트의 로그인 요청 유효성 확인 후 unique_id를 sessionid 라는 이름으로 저장
3. 서버가 응답할때 응답 헤더에 set-cookie: sessionid:{unique_id} 를 추가하여 응답
4. 클라이언트는 이후 서버에 요청할 때 전달받은 쿠키를 요청헤더에 추가하여 요청
5. 서버에서 요청헤더의 값을 저장된 세션 저장소에서 찾아 유효성 검증 후 응답

쿠키

  • 사용자가 웹 방문 시, 그 사이트가 사용하고 있는 서버의 기록 정보 파일
  • 필요시 정보를 참조하거나 재사용 가능
  • 쿠키는 클라이언트 로컬에 저장되는 Key-Value 형식으로 이루어진 데이터이다.

특징

  • 클라이언트에 총 300개의 쿠키를 저장 가능
  • 하나의 도메인 당 20개의 쿠키를 가질 수 있음
  • 하나의 쿠키는 4KB(=4096byte) 까지 저장 가능

구성요소

  • key: 쿠키의 이름
  • value: 쿠키의 값
  • expiry_time: 쿠키 만료시간
  • route: 경로 정보

동작 방식


1. 클라이언트가 서버에 로그인 요청
2. 서버는 클라이언트 로그인 요청 유효성 확인 후 응답헤더에 set-cookie: user={Name} 을 추가하여 응답
3. 클라이언트는 이후 서버에 요청 시 전달받은 쿠키를 요청헤더에 추가해 요청

  • 이 과정에서 헤더에 자동으로 쿠키값이 추가되는데 이는 브라우저에서 작업

쿠키와 세션의 차이점

  • 저장위치
    • 쿠키: 로컬에 저장
    • 세션: 로컬과 서버에 저장됨
  • 보안
    • 쿠키: 탈취/변조 가능
    • 세션: ID값만 가지고 있고 서버에도 저장되어 있어 상대적으로 쿠키보다는 안전
  • LifeCycle
    • 쿠키: 브라우저를 종료해도 파일로 남아있음
    • 세션: 브라우저 종료시 세션 삭제
  • 속도
    • 쿠키는 파일에서 읽기에 세션보다 빠름
    • 세션은 요청마다 서버에서 처리를 해야하게 비교적 느림

최근 추세

  • 세션은 사용자의 수만큼 서버 메모리를 차지하기 때문에 속도적인 측면에서 굉장히 취약해짐
  • 이를 보완하기 위해 최근에는 토큰 기반의 인증방식을 사용하는 추세
    • ex) JWT(JSON Web Token) 토큰
profile
웹 개발자 할래요

0개의 댓글