쿠키 & 세션 (Cookie & Session)

yeoro·2021년 6월 30일
0
post-thumbnail
post-custom-banner

❓ 쿠키와 세션을 사용하는 이유

HTTP 프로토콜 환경에서 서버는 클라이언트와 통신할 때마다 클라이언트가 누구인지 확인해야 한다.
그 이유는 HTTP 프로토콜은 connectionless, stateless한 특성이 있기 때문이다.

1. Connectionless (비연결성)

  • 클라이언트가 요청을 한 후 응답을 받으면 연결을 끊어버리는 특징

  • HTTP는 먼저 클라이언트가 서버에 request를 보내면, 서버는 요청에 맞는 response를 보내고 접속을 끊는다.

2. Stateless (무상태)

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

지속적인 연결로 인한 자원낭비를 줄이기 위해 이러한 특징들을 갖지만, 사용자의 접근성이 매우 떨어지는 요인이 된다.

쿠키와 세션을 사용함으로써 서버는 사용자에 대한 인증을 유지할 수 있어 HTTP의 특징을 해결할 수 있다.


정의

클라이언트(브라우저) 측에서 관리되는 작은 데이터 파일

특징

  • 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저 종료 후에도 인증이 유지된다.

  • 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.

  • 클라이언트에 최대 300개의 쿠키를 저장할 수 있으며, 하나의 도메인당 20개의 값만 가질 수 있다. 하나의 쿠키는 4KB까지 저장한다.

  • Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.

  • 브라우저가 알아서 request시에 Request Header에 쿠키를 넣어 서버에 전송한다.

구성

  • 이름(Name) : 각각의 쿠키를 구별하는데 사용되는 이름
  • 값(Value) : 쿠키가 갖고있는 값
  • 도메인(Domain) : 쿠키를 전송할 도메인
  • 경로(Path) : 쿠키를 전송할 요청 경로
  • 유효시간(Expires) : 쿠키의 유지시간

동작

  1. 클라이언트가 페이지 요청
  2. 서버에서 쿠키 생성
  3. HTTP Header에 쿠키를 포함 시켜 응답
  4. 브라우저가 종료되어도 쿠키가 아직 만료되지 않았다면 클라이언트에서 보관
  5. 같은 요청을 할 경우 HTTP Header에 쿠키를 포함 시켜 요청
  6. 서버에서 쿠키를 읽고 필요시 쿠키를 업데이트하고 HTTP Header에 포함 시켜 응답

사용

  • "아이디와 비밀번호를 저장하시겠습니까?"
  • 쇼핑몰의 장바구니 기능
  • "오늘은 이 창 그만보기"


📚 세션 (Session)

정의

서버 측에서 관리하는 쿠키 기반의 데이터 파일

특징

  • 클라이언트를 구분하기 위해 서버의 엔진이 클라이언트에게 고유한 세션 ID를 부여하며 브라우저를 종료할 때까지 인증을 유지한다. 이때, 접속 시간에 제한을 두어 일정 시간 응답이 없다면 세션을 끊도록 설정할 수 있다.

  • 사용자 인증 정보를 서버에 저장하기 때문에 보안에 좋다. 하지만, 사용자가 많아질수록 서버 메모리를 많이 차지한다. 동시접속자가 많을 경우 서버 과부하로 인한 성능 저하의 요인이 된다.

동작

1. 클라이언트가 서버에 접속시 고유 세션 ID를 부여 받음
2. 클라이언트는 부여받은 세션 ID를 JSESSIONID라는 이름의 쿠키로 저장
3. 서버에 요청시 이 쿠키의 세션 ID를 서버에 전달
4. 서버는 전달받은 세션 ID로 세션에 있는 클라이언트 정보를 가져옴
5. 클라이언트 정보를 가지고 요청을 처리하여 클라이언트에게 응답


❓ 쿠키와 세션의 차이점

쿠키세션
타입(Java)javax.servlet.http.HttpSession (Interface)javax.servlet.http.Cookie (Class)
저장위치ClientServer
저장형식File(String)Object
보안✔️
속도✔️
만료시점쿠키 저장시 설정
(기본적으로 브라우저 종료 시)
브라우저 종료 시
크기한 도메인 당 20개, 4KB제한 없음
  • 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request 도중에 스니핑의 위험이 있다. 반면, 세션은 쿠키를 이용하여 세션 ID만 저장하고 나머지는 서버에서 처리하기 때문에 비교적 보안성이 좋다.
  • 쿠키는 만료기간을 설정할 수 있어 브라우저를 종료해도 계속해서 정보가 남을 수 있다. 만료기간을 넉넉하게 잡아 쿠키를 삭제하기 전까지 유지될 수도 있다. 반면, 세션도 만료기간을 설정할 수 있지만 브라우저가 종료되면 만료기간에 상관없이 삭제된다.




[참고]

post-custom-banner

0개의 댓글