본문 바로가기
카테고리 없음

세션과 쿠키🍪

by 찐세 2021. 7. 16.

 

 

웹을 사용하거나 웹에 대해서 공부를 한다면 한번쯤은 들어봤을 단어가 쿠키와 세션일 것이다. 

 

웹에서 세션과 쿠키를 왜 사용하는 지 먼저 살펴보도록 하겠다.

 

쿠키와 세션은 HTTP 프로토콜의 비 연결성, 비 상태성 이라는 특징 때문에 사용을 한다.

 

HTTP 프로토콜로 클라이언트가 서버와 통신하면서 요청에 대한 응답을 받으면 그 연결을 끊어버리는 것과, 연결이 끊기게 되면 상태 정보는 유지하지 않는다는 것이다.

 

이렇게 연결이 종료가 된다면 상태를 저장할 수 없다는 점을 개선하기 위해서 세션과 쿠키를 사용한다.

 

 

 

 

 

 

쿠키 (Cookie)

 

쿠키

  • 쿠키는 클라이언트 로컬에 저장되는 키와 값으로 구성된 작은 데이터 파일이다.
  • 쿠키는 클라이언트의 상태 정보를 로컬에 저장하고 서버측에서는 이를 참조한다.
  • 서버측에서 setCookie를 통해서 쿠키를 생성하고, Response Header에 실어서 클라이언트로 보낼 수 있다.
  • 쿠키는 사용자가 따로 요청하지 않아도 브라우저에서 자동으로 Request Header 에 넣어서 서버료 전송한다.
  • 즉, 서버가 쿠키를 생성해서 클라이언트에게 보내고, 이 값을 통해서 해당 클라이언트의 상태 정보를 인식한다.

 

 

쿠키의 구성요소

  • 이름 : 쿠키를 구변하는데 사용되는 이름
  • 값 : 쿠키의 이름과 관련된 값
  • 유효 시간 : 쿠키의 타임아웃시간
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로

 

 

 

쿠키의 동작방식

 

  1. 클라이언트가 페이지를 요청
  2. 서버에서 쿠키를 생성
  3. HTTP 헤더에 쿠키를 포함 시켜 응답
  4. 브라우저가 종료되어도 쿠키 만료 기간이 있다면 쿠키는 클라이언트 로컬에 존재
  5. 같은 요청을 할 경우 HTTP 헤더에 쿠키가 자동으로 같이 전송
  6. 서버측에서 쿠키를 읽어 상태를 확인하고, 상태정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP헤더에 포함시켜 다시 응답.

이런 매커니즘으로 쿠키를 사용해서 서버와 클라이언트가 상태정보를 유지하게 된다.

 

 

 

 

쿠키 사용의 예

로그인 기억(자동 로그인) , 쇼핑몰 장바구니 , 팝업의 오늘 더이상 이 창을 보지 않음, 트래킹 등등

 

 

 

 

세션 (Session)

 

세션

  • 세션도 동작원리는 쿠키를 기반으로 하고 있지만, 사용자의 정보 파일을 클라이언트 로컬이 아닌 서버 측에서 관리한다
  • 서버측 메모리에 저장이 된다는 것은 서블릿 컨텍스트와 동일하지만, 세션은 저장공간이 공유되는 것이 아니라 세션 ID로 구분이 된다.
  • 서버측에서는 클라이언트를 구분하기 위해서 세션 ID를 부여하며, 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.
  • 물론 세션도 타임아웃을 주어 일정시간 응답이 없다면 세션을 만료시킬수도 있다.
  • 사용자에 대한 정보를 서버에 저장하기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버의 메모리를 많이 사용하게 된다.

 

 

세선의 동작방식

  1. 클라이언트가 서버에 접속 시 세션 ID를 발급받는다.
  2. 클라이언트는 세션 ID에 대한 쿠키를 가지고 있는다.
  3. 클라이언트가 서버에 요청을 보낼 시, 세션 ID를 보유하고 있는 쿠키가 서버로 같이 보내진다.
  4. 서버는 클라이언트의 세션 ID를 확인하고, 세션 ID로 세션에 있는 클라이언트의 정보를 가지고 온다.
  5. 클라이언트의 정보를 가지고 서버 요청을 처리하여 클라이언트에 응답한다.

 

 

세션의 특징

  • 클라이언트 별로 세션 ID를 부여한다.
  • 세션 ID로 클라이언트를 구분해서(인증) 클라이언트의 요구에 맞는 서비스를 제공할 수 있다.(로그인이 필요한 서비스들)
  • 보안 면에서 쿠키보다 우수하다. 쿠키는 클라이언트 로컬에 정보가 저장이 되기 때문에 변질 되거나, 스니핑 등의 위험이 있지만, 세션은 쿠키를 통해서 세션 ID만 저장하고 이것으로 사용자를 구분하기 때문에 이것만으로 완전하지 않지만 쿠키보다는 비교적 안전하다.

 

 

이처럼 세션과 쿠키는 비슷하지만 엄연히 다른 매커니즘으로 클라이언트와 서버 사이의 상태값을 저장을 한다.

 

앞에서 알아본 것처럼 세션은 서버측의 메모리를 사용하기 때문에, 최근에는 이런 방식을 개선한 토큰 기반의 인증을 사용한다고 한다.

 

그중에는 JWT( JSON Web Token) 이라는게 있다고 하는데... 기회가 된다면 이에 대해서도 정리해보자!

 

 

 

 

REFERENCE


https://interconnection.tistory.com/74

https://devuna.tistory.com/23