본문 바로가기
내일배움캠프

내일배움캠프 TIL - 쿠키와 세션

by Kiwimel0n 2024. 1. 24.

웹 애플리 케이션 인증 방식중에는 쿠키와 세션 방식 그리고 JWT 방식이 있다.

그중에 쿠키-세션 방식의 인증을 알아보려고 한다.

 

쿠키- 세션 방식은 서버가 '특정 유저가 로그인 되었다'는상태를 저장하는 방식이다.

인증과 관련된 아주 약간의 정보만 서버가 가지고 있게 되고 유저의 이전 상태는 전부 아니더라도 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킨다는 개념이다.

 

  1. 사용자가 로그인 요청을 보낸다.
  2. 서버는 DB의 유저 테이블을 뒤져서 아이디 비밀번호를 대조한다.
  3. 실제 유저테이블의 정보와 일치한다면 인증을 통과한 것으로 보고 “세션 저장소”에 해당 유저가 로그인 되었다는 정보를 넣는다.
  4. 세션 저장소에서는 유저의 정보와는 관련 없는 난수인 session-id를 발급한다.
  5. 서버는 로그인 요청의 응답으로 session-id를 내어준다.
  6. 클라이언트는 그 session-id를 쿠키라는 저장소에 보관하고 앞으로의 요청마다 세션아이디를 같이 보낸다. (주로 HTTP header에 담아서 보낸다)
  7. 클라이언트의 요청에서 쿠키를 발견했다면 서버는 세션 저장소에서 쿠키를 검증.
  8. 만약 유저정보를 받아왔다면 이 사용자는 로그인이 되어있는 사용자라면
  9. 이후에는 로그인 된 유저에 따른 응답을 내어준다.

 

에 상태 정보를 유지(Stateful)하기 위해 사용한다. 즉, 쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 된다.

 

쿠키

 클라이언트에 저장될 목적으로 생성한 작은 정보를담은 파일

 클라이언트인 웹 브라우저에 저장된 쿠키를 확인해보면

 크롬 기준으로 f12 개발자 도구를 열면 Application-Storage-Cookies에 도메인 별로 저장되어 있는게 확인 된다.

 

구성요소

  • Name (이름): 쿠키를 구별하는 데 사용되는 키 (중복될 수 없음)
  • Value (값): 쿠키의 값
  • Domain (도메인): 쿠키가 저장된 도메인
  • Path (경로): 쿠키가 사용되는 경로
  • Expires (만료기한): 쿠키의 만료기한 (만료기한 지나면 삭제됩니다.)

 

 

 

세션

   서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용

   서버에서 클라이언트 별로 유일무이한 '세션 ID' 를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장

   서버에서 생성한 '세션 ID' 는 클라이언트의 쿠키값('세션 쿠키' 라고 부름)으로 저장되어 클라이언트 식별에 사용

 

 

세션 동작방식

 

  1. 클라이언트가 서버에 1번 요청
  2. 서버가 세션ID 를 생성하고, 쿠키에 담아 응답 헤더에 전달
    1. 세션 ID 형태: "SESSIONID = 12A345"
  3. 클라이언트가 쿠키에 세션ID를 저장 ('세션쿠키')
  4. 클라이언트가 서버에 2번 요청
    • 쿠키값 (세션 ID) 포함하여 요청
  5. 서버가 세션ID 를 확인하고, 1번 요청과 같은 클라이언트임을 인지

 

  Cookie Session
저장 위치 클라이언트의 웹브라우저가 지정하는 메모리 또는 하드디스크 서버의 메모리, 데이터베이스등
보안 탈취와 변조 가능 세션ID 값만 가지고 있기 때문에 상대적으로 안전
저장 형식 텍스트 Object
만료 시점 쿠키 저장시 expires 속성을 정의
(삭제될 날짜를 지정할 수 잇음)
클라이언트가 로그아웃,
일정시간동안 반응이 없으면 무효화
(정확한 시점을 알 수 없음)
리소스 서버 자원을 사용하지 않음 요청마다 서버에서 처리하므로 비교적 느림
속도 파일에서 읽기 때문에 상대적으로 빠름 요청마다 서버에서 처리하므로
비교적 느림
용량제한 한 도메인당 20개
하나의 쿠키당4KB로 제한
클라이언트가 접속 시
서버에 의해 생성되므로 제한 없