Spring- Cookie, Session

김종조·2024년 4월 11일
post-thumbnail

🤷‍♂️ 쿠키와 세션을 사용하는 이유

기본적으로 HTTP 프로토콜 환경은 "connectionless","stateless"한 특성을 가지기 때문에
서버는 클라이언트가 누군지 매번 확인해야한다.


✂ Connectionless(비연결성)

클라이언트가 서버에 요청을 하고 응답을 받으면 바로 연결을 끊어 유지하지 않는 것이다.
서버의 자원을 효율적으로 관리하고, 수많은 클라이언트의 요청에도 대응할 수 있게 한다.

😐 Stateless(무상태)

통신이 끝나면 상태를 유지하지 않는 특징, 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있다.


쿠키와 세션을 사용하지 않으면 로그인을 했음에도 페이지를 이동할때마다 로그인을 계속 해야한다. 쿠키와 세션을 사용했을 경우, 한 번 로그인을 하면 그 사용자에대한 인증을 유지한다.




🍪 쿠키

  • 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일 필요시 정보를 참조하거나 재사용할 수 있다.
  • 사용자가 인증이 유효한 기간을 지정할 수 있으며 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있다.
  • 사용자가 따로 요청하지 않아도 브라우저가 요청시 Request Header를 넣어서 자동으로 서버에 전송한다.

🔧 구성요소

쿠키의 이름(name)
쿠키의 값(value)
쿠키의 만료시간(Expires)
쿠키를 전송할 도메인 이름(Domain)
쿠키를 전송할 경로(Path)
보안 연결 여부(Secure)
HttpOnly 여부(HttpOnly)

⏳ 동작방식

  1. 클라이언트가 페이지를 요청
  2. 서버는 상태를 유지하고 싶은 값을 쿠키로 생성
  3. 생성한 쿠키를 Http Header에 포함 시켜 클라이언트에게 응답
  4. 클라이언트가 쿠키를 가지고 있다가 다음 요청을 할 때 쿠키를 함께 전송(Http Header)
  5. 서버에서는 쿠키 정보를 읽어 이전 상태 정보를 확인한 후 응답



📡 세션

  • 쿠키를 기반으로 하지만 사용자 정보 파일을 브라우저가 아닌 서버 측에서 관리하는 방식이다.
  • 서버에서는 클라이언트를 구분하기 위해서 세션ID를 부여하여 인증상태를 유지한다.
    (접속시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능)
  • 클라이언트가 요청을 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 Session ID를 부여한다.

⏳ 동작방식

  1. 클라이언트가 페이지를 요청
  2. 서버가 해당 클라이언트에 유일한 Session ID 를 부여한다.
  3. 서버가 응담할 때 Http Header에 Session ID를 포함해서 전송한다.
  4. 클라이언트는 이후 웹 브라우저를 닫기까지 다음 요청 때 부여된 Session ID 가 담겨있는 쿠키를 Http Header에 넣어서 전송한다.
  5. 서버는 Session ID를 확인하고, 해당 세션에 관련된 정보를 확인한 후 응답한다.



✔ 차이점

  • 쿠키는 클라이언트 측에 정보를 저장하고, 세션은 서버 측에 정보를 저장한다.
  • 쿠키는 보안이 취약하고 서버는 비교적 보안성이 좋다.
  • 쿠키는 브라우저가 종료되어도 만료 시간에 따라 계속 남아 있을수 있지만 세션은 만료시간을 정해도 브라우저가 종료되면 관계없이 삭제된다.
  • 쿠키는 서버에 요청 시 더 빠르게 요청에 대한 응답이 오지만, 세션은 정보가 서버 측에 있어 서버의 처리가 필요해 쿠키보다 응답이 느리다.
profile
웹 개발 공부 기록

4개의 댓글

comment-user-thumbnail
2024년 4월 12일

먹는 쿠키랑은 다른 건가요?

1개의 답글