본문 바로가기
야미스터디/Network

[Network] Cookie vs Session 📌

by 의정부핵꿀밤 2022. 8. 4.
728x90

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

HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 쿠키나 세션을 사용한다

  • 기본적으로 HTTP 프로토콜 환경은 Connectionless, stateless 한 특성을 갖기 때문에 서버는 클라이언트가 누구인지 매번 확인해야 한다
  • 이를 보완하기 위해 쿠키와 세션을 사용하게 된다
❓ HTTP 특징 1 : connectionless
- 클라이언트가 요청을 한 후 응답을 받으면 연결을 끊어버리는 특징
- HTTP는 먼저 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는다
- HTTP 1.1에서 연결을 유지하고, 재활용하는 기능이 Default로 추가되었다 (keep-alive 값으로 변경 가능)
❓ HTTP 특징 2 : stateless
- 클라이언트의 상태 정보를 갖지 않는 서버 처리 방식
- 클라이언트와 첫번째 통신에서 데이터를 주고 받았다 해도, 두번째 통신에서 이전 데이터를 유지하지 않는다

 

그러나 실제로는 데이터 유지가 필요한 경우가 많다!

  • 만약 로그인을 하는 경우, 정보가 유지되지 않는다면 사용자는 페이지를 이동할 때마다 다시 로그인을 해야 한다
  • 따라서 위와 같은 HTTP의 특징을 극복하기 위해 쿠키와 세션을 사용한다
  • 쿠키와 세션의 차이점은 상태 정보의 저장 위치이다! (쿠키 - 클라이언트, 세션 - 서버)

 

 


🍪 쿠키 (Cookie)

  • 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다
  • 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있다
  • 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다
  • 클라이언트에 300개까지 쿠키 저장이 가능하며, 하나의 도메인 당 20개의 값만 가질 수 있다
  • 하나의 쿠키 값은 4KB 까지 저장한다
  • Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다
  • 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request 시에 Request Header를 넣어서 자동으로 서버에 전송한다

 

 

🍪 쿠키의 구성 요소

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

 

 

🍪 쿠키의 동작 방식

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

 

🍪 쿠키의 사용 예시

  • 방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"
  • 쇼핑몰의 장바구니 기능
  • 자동 로그인, 팝업에서 "오늘 더 이상 이 창을 보지 않음" 체크

 


🔖 세션 (Session)

  • 세션은 쿠키를 기반으로 하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 것이 아니라 서버 측에서 관리한다
  • 서버에서 클라이언트를 구분하기 위해 세션 ID를 부여하며, 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증 상태를 유지한다
  • 물론 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능하다
  • 클라이언트가 request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는데 이것이 세션 ID이다
  • 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안이 좋지만, 사용자가 많아질수록 서버에 메모리를 많이 차지하게 되어 서버의 부하가 증가한다
  • 즉, 동시 접속자 수가 많은 웹 사이트의 경우, 서버에 과부하를 줄 수 있기 때문에 성능 저하의 요인이 된다

 

 

🔖 세션의 특징

  • 각 클라이언트에게 고유 ID를 부여한다
  • 세션 ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비스를 제공한다
  • 보안 측면에서 쿠키보다 안전하다
  • 사용자가 많아질수록 서버 메모리를 많이 차지하여 서버에 과부하를 줄 수 있다

 

🔖 세션의 동작 방식

  1. 클라이언트가 서버에 접속 시 세션 ID를 발급 받는다
  2. 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있는다
  3. 클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청한다
  4. 서버는 세션 ID를 전달 받아서, 별다른 작업 없이 세션 ID로 세션에 있는 클라이언트의 정보를 가져와서 사용한다
  5. 클라이언트의 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답한다

 

🔖 세션의 사용 예시

  • 로그인과 같이 보안 상 중요한 작업을 수행할 때 사용한다

 


👊쿠키 vs 세션

  • 세션도 쿠키를 사용하기 때문에, 쿠키와 세션은 비슷한 역할을 하며 동작 원리도 비슷하다
  • 가장 큰 차이점은 사용자의 정보가 저장되는 위치이다
    • 쿠키클라이언트의 PC에 저장되기 때문에 서버의 자원을 전혀 사용하지 않는다
    • 그러나 세션서버의 메모리에 저장되기 때문에 서버의 자원을 사용한다
  • 보안 측면에서는 세션이 쿠키보다 우수하며, 요청 속도는 쿠키가 세션보다 빠르다
    • 세션은 서버에 저장되어 서버의 처리가 필요하기 때문에 보안 측면에서는 좋지만, 쿠키에 비해 속도가 느리다
    • 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request를 보내는 과정에서 스니핑 당할 우려가 있어 보안에 취약하다
    • 그러나 세션은 쿠키를 이용해서 세션 ID만 저장하고, 이를 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋다
  • 라이프 사이클 측면에서도 차이가 존재한다
    • 쿠키도 만료시간이 있지만, 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아있는다
    • 또한 만료 기간을 넉넉하게 잡아두면 쿠키를 삭제할 때까지 유지될 수 있다
    • 세션도 만료 시간을 정할 수 있지만, 브라우저가 종료되면 만료 시간에 상관 없이 삭제된다
    • 예를 들면, 크롬에서 다른 탭을 사용해도 세션이 공유되지만, 다른 브라우저를 사용하게 되면 다른 세션을 사용하게 된다
  • 속도 측면에서는 쿠키가 세션보다 우수하다
    • 쿠키에 정보가 있기 때문에 서버에 요청 시 속도가 빠르다
    • 반면, 세션은 정보가 서버에 있기 때문에 처리가 요구되어 비교적 느린 속도를 갖는다

 

 

Q. 세션이 아닌 쿠키를 사용하는 이유?

  • 위의 내용을 보았을 때 보안 측면에서 더 좋은 세션을 사용하는 게 더 좋을 것 같다
  • 그러나 세션은 서버의 자원을 사용하기 때문에 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어질 수 있고, 속도 또한 느려질 수 있기 떄문에 쿠키가 유리한 경우가 있다!

 

 


👀캐시 (Cache)?

  • 쿠키와 세션 개념을 공부하다 보면 캐시 개념이 자연스레 따라오게 된다
  • 캐시는 이미지나 css, js 파일 등을 브라우저나 서버 앞 단에 저장해놓고 사용할 수 있도록 도와주는 리소스 파일들의 임시 저장소이다
  • 저장 공간이 작고 비용이 비싼 대신, 빠른 성능을 제공한다
  • 같은 웹 페이지에 접속할 대 사용자의 PC에서 로드하므로, 서버를 거치지 않아도 되어 성능이 좋다
  • 이전에 사용된 데이터가 다시 사용될 가능성이 많으면 캐시 서버에 있는 데이터를 사용한다
  • 따라서 다시 사용될 확률이 있는 데이터들이 빠르게 접근할 수 있어진다 - 페이지 로딩 속도 ↑
    • 캐시 히트(hit) : 캐시를 사용할 수 있는 경우 (이전 요청과 동일한 요청인 경우)
    • 캐시 미스(miss) : 캐시를 사용할 수 없는 경우 (웹 서버로 처음 들어온 요청인 경우)
  • 한 번 캐시에 저장되면 브라우저를 참고하기 때문에 서버에서 변경이 되어도 사용자는 변경되지 않게 보일 수 있는데, 이런 부분을 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료시간을 명시하는 방법 등을 이용할 수 있다
  • 즉, 캐시는 웹 페이지 요소를 저장하기 위한 임시 저장소이고, 쿠키/세션은 정보를 저장하기 위해 사용되는 데이터이다
  • 캐시는 웹 페이지를 빠르게 렌더링할 수 있도록 하고, 쿠키/세션은 사용자의 인증을 보다 쉽도록 한다

 

 


✨ 결론!

  • 쿠키자동 완성이나, 팝업 일주일 간 보지 않기 등 사용자의 편의를 위하지만, 지워져도 되고 조작되거나 스니핑 당하더라도 큰 지장이 없는 수준의 정보들을 저장하는 데 사용된다
  • 사용자나 다른 누군가에게 노출되면 안되는 중요한 정보들은 세션으로 서버 안에서 다뤄진다
  • 쿠키로 노출시켜서는 안될 정보들이 있고, 세션을 남발하면 서버에 메모리를 많이 차지하게 되어 과부하가 발생하기 때문에, 웹을 설계할 때는 해당 정보의 특성을 파악하여 쿠키 또는 세션을 사용할 지 결정해야 한다!

 

 

 

 

 


참고)

https://dev-coco.tistory.com/61

 

쿠키(Cookie)와 세션(Session)의 차이 (+캐시(Cache))

쿠키와 세션을 사용하는 이유? HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 사용한다. HTTP 프로토콜의 특징 1. Connectionless 프로토콜 (비연결 지향) 클라이언트가 서버에 요청(Request)을 했을

dev-coco.tistory.com

https://devuna.tistory.com/23

 

[web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동방식

[web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동 쿠키와 세션을 이해하기 위해서는 먼저 http의 특징에 대해 이해하면 도움이 됩니다. 비연결성(Connectionless) HTTP(Hypertext Transfer Protocol..

devuna.tistory.com

https://interconnection.tistory.com/74

 

쿠키와 세션 개념

노션 페이지(아래 내용과 동일) 개요 쿠키와 세션은 개발자 말고도 인터넷 사용자라면 누구나 많이 들어본 단어입니다. 하지만 개념에 대해서는 많은 사람들이 헷갈려 하기에 쉽고 

interconnection.tistory.com

https://hahahoho5915.tistory.com/32

 

쿠키(Cookie), 세션(Session) 특징 및 차이

개요  > 쿠키(Cookie), 세션(Session) 각각 특성 및 차이 확실히 분류하기 메모 1. 공통점 : 웹 통신간 유지하려는 정보(ex:로그인 정보 등)를 저장하기 위해 사용하는 것(?) 2. 차이점 : 저장위치, 저

hahahoho5915.tistory.com

 

728x90

'야미스터디 > Network' 카테고리의 다른 글

[Network] HTTP 1, 2, 3 📌  (0) 2022.09.12
[Network] cast 📌  (0) 2022.09.02
[Network] REST API 📌  (0) 2022.07.13
얄팍한 코딩사전 - REST API가 뭔가요?  (0) 2021.07.31
HTTP 완벽 가이드 - 1  (0) 2020.12.25

댓글