본문 바로가기

🏁 Product/⌨️ Programming

[ IT 용어 ] 쿠키(Cookie)와 세션(Session)의 차이

반응형

 

 

 

 

[ IT 용어 ] 

쿠키(Cookie)와 세션(Session)의 차이

 

 

(c)unsplash.com

웹에서 쿠키와 세션

아래에 서술한 HTTP 프로토콜의 특징이자 약점을 보완하기 위해 쿠키와 세션을 사용하게 되었다.

 

HTTP 프로토콜의 특징

 비연결 지향(Connectionless) 

- 클라이언트가 요청(Request)를 서버에 보내면, 서버는 클라이언트 요청에 적절한 응답(Response)를 주고 바로 연결(Connection)을 끊는 특징

- HTTP가 TCP위에서 구현되었기 때문에(TCP는 연결지향, UDP는 비연결지향) 연결지향적이라고 할 수 있다는 얘기가 있어 논란이 있지만, 아직까지는 네트워크 관점에서 keep-alive는 옵션으로 두고, 서버측에서 비연결지향적인 특성으로 커넥션 관리에 대한 비용을 줄이는 것이 명확한 장점으로 보기 때문에 비연결지향으로 정리해둠

 

 상태 정보 유지안함(Stateless) 

: 연결(Connection)을 끊는 순간 클라이언트와 서버의 통신은 끝나고 상태 정보를 유지하지 않는 특징

 

쿠키와 세션의 필요성

  • HTTP프로토콜은 위와 같은 특징으로 인해 모든 요청간에 의존 관계가 없는 특징을 가짐. 즉, 현재 접속한 사용자가 이전 접속의 사용자와 동일 사용자인지 여부를 알 수 있는 방법이 없음.
  • 연결을 계속 유지하지 않기 때문에 리소스 낭비가 줄어드는 것장점이지만, 
  • 통신할 때마다 새로운 연결(Connection)을 만들기 때문에 클라이언트 측면에서는 상태를 유지(ex: 인증에 쓰이는 상태..)를 위해 통신 할 때마다 어떤 절차를 거쳐야 하는 단점이 생김
  • 상태유지는 이전 요청과 현재 요청이 동일 사용자 요청인지 알기 위해서 필요하며, HTTP 프로토콜에서 상태를 유지하기 위한 기술로 쿠키와 세션이 있음.

 


 

쿠키(Cookie)란?

개념

클라이언트 로컬(local)에 저장되는 키와 값(key,value)이 들어있는 작은 데이터 파일이다.

쿠키는 서버에서 HTTP Response Header에 Set-Cookie 속성을 이용하여 클라이언트에 쿠키를 저공한다.

쿠키에는 이름, 값, 만료 날짜/시간(저장 기간), 경로 등의 정보를 포함한다.

클라이언트의 상태 정보를 로컬에 저장했다가 요청(Request)할 때 참조된다.

쿠키는 서버측에서 만료 날짜 및 시간을 지정하여 정해진 시간동안 데이터(상태정보)를 유지할 수 있다. 즉, 로그인 상태 유지에 활용

 

구성요소

  • Name : 쿠키 이름
  • Value : 쿠키 값 
  • Expires : 쿠키 만료 시간
  • Domain : 쿠키를 전송할 도메인 이름
  • Path : 쿠키를 전송할 경로 
  • Secure : 보안 연결 여부
  • HttpOnly : HttpOnly 여부

 

동작 방식

 

 

1) 웹 브라우저가 서버에 요청

2) 상태를 유지하고 싶은 값을 쿠키(Cookie)로 생성

3) 서버가 응답할 때 Http 헤더에 쿠키를 포함하여 전송

Set-Cookie: id=apple

 

4) 전달받은 쿠키는 웹 브라우저에서 관리하다가, 다음 요청 때 쿠키를 HTTP 헤더에 넣어 전송

cookie: id=apple

5) 서버에서 쿠키 정보를 읽어 이전 상태 정보를 확인 후 응답

 

쿠키 사용 사례

  • 아이디, 비밀번호 저장
  • 자동 로그인
  • 팝업의 '오늘 더 이상 보지 않음)
  • 쇼핑몰 장바구니 

쿠키의 한계

클라이언트에 최대 300개까지 쿠키 저장 가능

서버 도메인 하나당 최대 20개 쿠키 저장 가능

하나의 쿠키 값은 최대 4KB까지 저장 가능

 

 

※ 쿠키는 사용자가 별도로 요청하지 않아도 브라우저(Client)에서 서버에 요청(Request) 시에 Request Header에 쿠키값을 넣어 요청한다.(=자동이다)

그렇다고 그 많은 쿠키값을 모든 요청에 넣어 비효율적으로 동작하지는 않고, 도메인 설정을 통해서 지정한 도메인으로 요청시에만 쿠키값이 제공되도록 할수도 있다.


 

 

세션(Session)이란?

개념

서버(Server)에 클라이언트의 상태 정보를 저장하는 기술로 논리적인 연결을 세션이라고 한다.

웹 서버에 클라이언트에 대한 정보를 저장하고 클라이언트에게는 클라이언트를 구분할 수 있는 ID를 부여하는데 이것이 SessionID라고 한다.

  • 일정 시간 동안 같은 브라우저로부터 들어오는 요청을 하나의 상태로 보고 그 상태를 유지하는 기술
  • 즉, 웹 브라우저를 통해 서버에 접속한 이후부터 브라우저가 종료될 때까지 유지되는 상태
  • 결과적으로 세션을 통해 클라이언트의 정보는 서버에 두고, 세션 아이디를 이용해서 인증받고 정보를 이용하는 방식이다.

 

동작 방식

name: tsessionid / value : qwer

 

 

1) 웹브라우저가 서버에 요청

2) 서버가 애당 웹브라우저(클라이언트)에 유일한 ID(Session ID)를 부여함.

3) 서버가 응답할 때 HTTP헤어(Set-Sookie)에 Session ID를 포함하여 전송

쿠키에 Session ID 를 tsessionid 라는 이름으로 저장

Set-Cookie: tsessionid=qwer

 

4) 웹브라우저는 웹브라우저가 닫히기 전까지 다음 요청 때 부여된 SessionID가 담겨있는 쿠키를 HTTP헤더에 넣어서 전송

Cookie:tsessionid=qwer

 

5) 서버는 Session ID를 확인하고 해당 세션에 관련된 정보 확인 후 응답

 

세션도 쿠키를 사용하여 값을 주고 받으며, 클라이언트의 상태 정보를 유지한다.
즉, 상태 정보를 유지하는 수단은 쿠키 이다.

 

 

세션 사용 예

로그인

 

 

 

 


 

쿠키(Cookie)와 세션(Session)의 차이점

저장위치

  • 쿠키 : 클라이언트
  • 세션 : 서버

보안 

  • 쿠키 : 클라이언트에 저장되기 때문에 보안에 취약.
  • 세션 : 쿠키를 이용해 Session ID만 저장하고 이 값으로 구분하여 서버에서 처리하므로 보안성이 비교적 좋음.

라이프사이클

  • 쿠키 : 만료 시간에 따라 브라우저 종료 시에도 계속 남아있을 수 있음.
  • 세션 : 만료 시간을 정할 수 있지만, 브라우저 종료시에는 만료시간과 상관없이 삭제됨.

속도

  • 쿠키 : 클라이언트에 저장되어 서버에 요청 시 빠름.
  • 세션 : 실제 저장된 정보가 서버에 있어 서버의 처리가 필요해 쿠키보다 느림.

 


 

세션을 주로 사용하면 좋을텐데 왜 굳이 쿠키를 사용할까? 

세션은 서버에 데이터를 저장하여 서버의 자원을 사용하기 때문에 서버 자원의 한계가 있고 메모리를 사용하다보면 속도 저하도 발생할 수 있기 때문이다.

 

 

쿠키&세션과 캐시는 다름

브라우저 캐시는 이미지(png,jpg..)나 스타일 관련 파일(css,js)등이 사용자의 브라우저에 저장되는 것이다.

이를 통해 같은 자원을 로드(load)할 때 해당 자원을 불러오지 않고 캐시되어 있는 자원을 써서 클라이언트 자원을 아끼는 것이다. 

해당 자원이 한 번 브라우저 캐시에 저장되면 다음 필요시에도 브라우저의 캐시를 재사용 하기 때문에 경우에 따라 해당 자원이 변경되는데도 이전의 자원을 참조하는 경우가 생기기도 한다.

사용자는 브라우저 캐시를 지워주고나 서버에서 클라이언트로 응답을 보낼 때 Header에 자원 캐시 만료 시간을 명시하는 방법으로 캐시를 회피할 수 있다. 

 

 

 

반응형