909 Devlog

쿠키(Cookie)와 세션(Session) 본문

WEB/HTTP

쿠키(Cookie)와 세션(Session)

구공구 2023. 7. 30. 16:53
728x90

이번 포스팅에서는 쿠키와 세션에 대해 알아보도록 하겠습니다.

 

그전에, 왜 이것들을 사용하는지 알아야 더 쉽게 이해할 수 있기 때문에, 왜 사용하는지부터 알아봅시다.


세션과 쿠키를 사용하는 이유

쿠키와 세션은 HTTP 프로토콜의 특징을 보완하기 위해 사용합니다.

HTTP 프로토콜은 비연결성(Connectionless)무상태(Stateless)라는 특징을 가집니다.

 

비연결성(Connectionless)이란,

클라이언트가 서버에 요청(Request)을 보내면, 서버는 그에 맞는 응답(Response)을 보낸 후 연결을 끊어버리는 특징입니다.

즉, 클라이언트와 서버는 통신이 이어지지 않고, 한번 요청과 응답을 주고 받으면 통신이 끊어지게 됩니다.

 

무상태(Stateless)란,

비연결적인 특성으로 통신이 끊어짐과 동시에 이전 통신 데이터에 대해 잊어버리게 되는 특징입니다.

 

예를 들어서 기본 세팅이 밝은 테마이며, 영어로 이루어진 페이지가 있다고 가정해 봅시다.

저는 어두운 테마를 선호하고 한국어가 더 편하기 때문에 설정을 어두운 테마와 한국어로 변경했습니다. 하지만 페이지를 다시 불러오게 되면 다시 세팅이 밝은 테마와 영어로 되돌아가게 됩니다.

 

로그인 또한 비슷합니다.

로그인 페이지에서 로그인을 마친 후, 다른 페이지로 넘어가면 로그인했다는 기록이 남아있지 않게 됩니다.

 

이와 같이, 이전 통신에 대한 데이터의 유지가 필요한 경우가 많습니다.

 

이럴때, 쿠키와 세션을 사용하게 됩니다.


쿠키(Cookie)

쿠키는 서버에서 사용자에 관한 것들을 기억하기 위해 사용자의 브라우저에 저장하는 정보 기록 파일입니다.

 

클라이언트가 페이지를 request 하면, 서버는 해당 사용자에 대한 쿠키를 response에 담아 전송하고 브라우저에 저장합니다. 

받은 쿠키는 클라이언트가 브라우저에 저장하고 있다가, 다시 해당 페이지에 방문할 때마다 request에 쿠키를 담아서 서버에 보내게 됩니다.

 

쿠키는 다음과 같은 특징이 있습니다.

  • 쿠키는 브라우저에 정보를 저장합니다.
  • 쿠키는 이름, 값, 만료일, 경로 정보로 구성되어 있습니다.
  • 쿠키는 유효기간이 있습니다. (서버가 정한 기간에 따라 다릅니다.)
  • 쿠키는 도메인에 따라 제한이 됩니다. (유튜브 쿠키는 유튜브에서만)
  • 쿠키는 4KB까지 저장할 수 있습니다.

예를 들어봅시다, 위에서 봤던 테마 설정과 언어설정을 쿠키를 사용하여 해결할 수 있습니다.

클라이언트가 테마와 언어 설정을 변경해 request를 보내면, 서버는 response에 해당 정보를 담은 쿠키를 전송하여 클라이언트의 브라우저에 저장하고 다음에 클라이언트가 다시 해당 페이지를 방문했을 때, 쿠키를 request와 함께 전송하여 클라이언트가 정한 설정이 적용된 페이지가 불러와지게 됩니다.

 

세션 (Session)

세션은 서버에 저장하는 사용자 정보입니다.

 

세션은 다음과 같은 특징이 있습니다.

  • 세션은 서버에 정보를 저장합니다.
  • 세션은 서버에 데이터를 저장하므로 쿠키보다 보안이 좋습니다.
  • 세션은 브라우저가 종료되면 삭제되거나 서버에서 정한 시간에 따라 삭제됩니다.
  • 세션은 저장 용량에 제한이 없습니다.
  • 세션은 클라이언트마다 고유의 세션 ID를 부여합니다.

 

로그인을 예로 들어 봅시다,

클라이언트가 로그인을 하면, 이메일과 비밀번호를 서버에 보내게 됩니다. 만약 해당 이메일과 비밀번호가 맞다면, 서버는 세션 데이터베이스에 해당 클라이언트에 대한 정보를 생성할 것입니다. 해당 세션 데이터베이스에는 데이터마다 별도의 ID가 존재하는데, 클라이언트의 세션 ID는 쿠키를 통해 브라우저로 들어오고 저장됩니다. 이제 클라이언트가 같은 웹사이트의 다른 페이지로 이동하면 브라우저는 세션 ID를 담은 쿠키를 다시 서버로 보내게 됩니다. 서버는 해당 세션 ID를 가지고 세션 데이터베이스를 확인하여 세션 ID가 맞는 클라이언트를 찾아 클라이언트가 누구인지 확인할 수 있게 됩니다.

 

세션은 request가 들어올 때마다 위 작업을 반복하기 때문에 사용자가 많아질수록 서버 리소스 사용량이 많아집니다.

 

쿠키와 세션의 차이

  쿠키(Cookie) 세션(Session)
저장 위치 브라우저 서버 데이터베이스
저장 형태 text object
만료 시간 서버 설정에 따라 다름 브라우저 종료 or 서버에서 정한 세션을 사용하지 않은 시간
용량 4KB 용량 제한 없음
속도 세션보다 빠름 쿠키보다 느림
보안 세션보다 안좋음 쿠키보다 좋음

 

728x90