쿠키(Cookie)와 세션(Session)은 HTTP 프로토콜의 특징이자 약점을 보완하기 위해 사용한다!
HTTP 특징
1. 비연결 지향(Connectionless)
- 클라이언트가 요청(request)를 서버에 보내고, 서버가 클라이언트에게 응답(response)를 보내면 바로 연결을 끊는다.
- HTTP 버전에 따라서 다르다 (1.1버전에서는 요청(request)에 재활용하는 기능이 추가 되었다.)
2. 상태 정보를 유지하지 않는다.(Stateless)
- 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나고, 상태 정보를 유지하지 않는다.
- 클라이언트와 첫 번째 통신에서 데이터를 주고받았다 해도, 두 번째 통신에서 이전 데이터를 유지하지 않는다.
- 정보를 유지하지 않는다는 예는 매번 페이지를 이동할 때마다 로그인을 다시하거나, 상품 선택후 구매 페이지로 넘어가 있는 상태에서도 선택한 상품의 정보가 없는 일이 발생하게 된다.
이러한 이유로~
서버는 클라이언트가 누구인지 계속 인증을 해줘야하는 불편함이 있다. 이러한 번거로움을 해결하기 위해 쿠키와 세션이 필요하다.
따라서 상태정보 유지(Stateful)를 위해 쿠키와 세션을 사용하게 된다.
쿠키와 세션의 큰 차이점은 상태 정보의 저장 위치에서 나타난다.
쿠키는 클라이언트에 저장하고, 세션은 서버에 저장한다.
쿠키(Cookie)
HTTP의 일종으로 사용자가 어떠한 웹 사이트를 방문할 경우, 사이트가 사용하는 서버에서 사용자의 컴퓨터에게 작은 기록 파일을 보내 저장한 것이 쿠키입니다. HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다.
쿠키 특징
- 이름, 값, 만료일(저장기간), 경로 정보로 구성되어 있다.
- 클라이언트에 총 300개의 쿠키를 저장할 수 있다.
- 하나의 도메인 당 20개의 쿠키를 가질 수 있다.
- 하나의 쿠키는 4KB(=4096byte)까지 저장 가능하다.
- 쿠키의 동작 순서
쿠키 동작 순서
사용 예시
- 방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"
- 팝업창을 통해 "오늘 이 창을 다시 보지 않기" 체크
세션(Session)
일정 시간 동안 같은 사용자로부터 들어오는 요청(Request)를 하나의 상태로 보며, 상태를 유지시키는 기술입니다.
일정 시간은 웹 브라우저를 통해 웹 서버에 접속한 시점부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 의미합니다.
방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보며 그것을 세션이라고 합니다.
세션 특징
- 세션은 쿠키를 기반으로 하며, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버에서 관리합니다.
- 이러한 이유로 쿠키와 비교적 보안이 좋습니다.
- 사용자의 정보를 서버에 두기 때문에 사용자가 많아질수록 서버 메모리를 많이 차지하게 됩니다.
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장하고 있습니다.
- 각 클라이언트에 고유 세션아이디를 부여해, 세션아이디로 클라이언트를 구분해 각 요구에 맞는 서비스를 제공합니다.
세션의 동작 순서(tomcat기준)
사용 예시
- 화면을 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지
캐시(Cache)
웹페이지의 요소를 저장하기 위한 임시 저장소 입니다.
쿠키/세션은 정보를 저장하기 위해 사용이 되지만, 캐시는 웹 페이지를 빠르게 랜더링 할 수 있도록 도와주고, 쿠키/세션은 사용자의 인증을 도와줍니다.
캐시의 특징
- 캐시는 이미지,비디오,오디오,css,js파일 등 데이터나 값을 미리 복사해 놓는 리소스 파일들의 임시 저장소입니다.
- 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공합니다.
- 같은 웹 페이지에 접속할 때 사용자의 PC에서 로드하므로 서버를 거치지 않아도 됩니다.
- 이전에 사용될 가능성이 많은 데이터라면 캐시 서버에 있는 데이터를 사용합니다.
- 페이지의 로딩 속도가 빨라집니다.
캐시 히트(hit)/ 미스(miss)
- 캐시 히트 : 캐시를 사용할 수 있는 경우
- 이전에 왔던 요청과 같은 요청이라면 사용이 가능하다.
- 캐시 미스 : 캐시를 사용할 수 없는 경우
- 웹 서버로 처음 요청 받았을 때
예상 질문
세션만 사용하면 편할거 같은데 왜 쿠키를 사용할까요?
세션이 물론 쿠키에 비해 보안성이 좋지만, 세션은 서버에 저장이 되고 서버의 자원을 사용하게 됩니다. 서버는 자원에 한계가 있음이 분명하기 때문에 서버의 자원을 사용해 세션만 사용하게 된다면 속도가 느려질 수 있습니다. 반면에 서버가 자원을 허용하는 한 무제한 사용이 가능하기 재한이 없다고도 합니다. 하지만 서버도 제한이 있는 것은 맞기 때문에 쿠키와 세션은 상황에 맞게 분배해 사용해야합니다.
쿠키 세션의 라이프 사이클에 대해서 아시나요?
만료기간은, 쿠키는 설정을 해 두면 브라우저를 종료해도 유지를 할 수 있는 반면, 세션은 브라우저의 종료와 함게 삭제가 됩니다.
쿠키/세션과 캐시에 대해서 말씀해주세요
캐시는 서버 앞단에 저장을 해놓고 사용을 하는 것입니다. 캐시는 웹 페이지 요소를 저장하기 위한 임시 저장소이고, 쿠키/세션은 정보를 저장하기 위해 사용됩니다. 캐시는 홈페이지 재접속 시 css/js파일을 사용자의 PC에서 로드,서버를 거치지 않아도 됩니다.
'CS > 네트워크' 카테고리의 다른 글
로드 밸런싱(Load Balancing) 이란? (0) | 2022.01.16 |
---|---|
웹사이트에 접속할 때 일어나는 상황에 대해서 (0) | 2022.01.15 |
동기(Synchronous) & 비동기(Asynchronous)의 차이점? (0) | 2022.01.13 |
HTTP(HyperText Transfer Protocol) & HTTPS( +Secure) ??! (0) | 2022.01.12 |
TCP(Transmission Control Protocol) & UDP(User Datagram Protocol)이 뭐야? (0) | 2022.01.11 |