쿠키와 세션에 대한 면접 준비를 하며 내용을 정리해보았다
근본적으로 HTTP의 약점을 보완하기 위해 쿠키 또는 세션을 사용
connectionless , stateless한 성격이어서 서버는 클라가 누군지 매번확인
connectionless
stateless
쿠키와 세션이 없으면 쇼핑몰이나 무신사같은데에서 옷을 살때 로그인 했음에도
페이지 이동때마다 클라 확인을 위해 매번 로그인 해야함
접속한 클라이언트가 누군지 계속 인증을 유지하게 합니다.
영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지
세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지
쿠키
클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일(4kb)
사용자 인증이 유효한 시간을 명시할 수 있으며 유효시간 정해지면 브라우저가 종료되어도 인증이 유지된다
쿠키는 클라의 상태정보를 로컬에 저장했다가 참조
쿠키는 사용자가 따로 요청하지 않아도 브라우저가 request 할시 request header에 자동으로 넣어서 전송!
따라서 혹여 남에게 탈취되거나 사용자에 의해 조작되어도 크게 문제되지 않을 정보를 브라우저에 저장함으로써
웹사이트 이용을 편리하게 해 주는 것이 쿠키입니다.
예를 들면 자주 보는 웹툰 목록이나 웹 페이지의 다크 모드 설정 여부 등과 같은 간단한 정보 말이죠.
클라가 페이지 요청 -> 서버에서 쿠키를 생성 -> HTTP 헤더에 쿠키를 포함 시켜 응답
-> 브라우저 종료되어도 쿠키 만료기간 있으면 클라가 보관중
-> 같은 요청시 HTTP 헤더에 쿠키 넣어서 보냄
-> 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을때
쿠키 업데이트해서 다시 HTTP 헤더에 포함시켜서 응답
ex) 로그인시 아이디와 비밀번호 저장하겠냐 물어보는거
세션 - 사용자의 정보 파일을 서버측에서 관리
서버에서 클라 구분위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저 종료할때 까지 인증상태를 유지
물론 접속시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정이 가능
보안에 좋지만 사용자 많아질수록 서버에 메모리 용량 차지
동접자 수 많을수록 과부하
클라가 request를 보내면 해당 서버의 엔진이 클라에게 유일한 ID를 부여 -> 세션ID
클라가 서버에 접속시 세션 ID를 발급받음 -> 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
-> 클라가 서버에 요청할때 쿠키의 세션 ID를 같이 서버에 전달해서 요청
-> DB 서버에서 세션 id가 있는지 확인
-> 서버는 세션 ID를 전달 받아서 별다른 작업 없이 세션 ID로 세션에있는 클라 정보를 가져와서 사용
-> 클라 정보를 가지고 서버 요청 처리 후 클라에게 응답
서버에 무한정으로 세션 저장 못하고 동접자 많아지면 서버 속도 저하된다!
=> 서버에 메모리 관리 및 속도 저하 방지를 위해 쿠키가 필요!
하드디스크나 SSD에서 처리시 지정한 정보를 꺼내는데
오랜 시간이 걸려서 빠르고 많이 들어오는 요청에 맞게 세션 ID를 찾아 확인
이러한 토큰에는 특수한 수학적 원리가 적용되어 있어서 마치 위조 방지 장치가 있는 지폐처럼 서버만이 유효한 토큰을 발행할 수 있습니다.
- 그렇기 때문에 토큰을 받아간 사용자가 이를 쿠키로 저장해 두고 필요할 때마다 제시하면
서버는 따로 책상에 올려놓은 것을 확인할 필요 없이
자기가 발급한 토큰임을 알아보고
사용자의 요청을 허가해 주는 것입니다.
더 이상 이미 로그인한 사용자의 티켓을 책상(메모리)에 올려 두고 있을 필요가 없으니 서버 부하를 줄일 수 있다.
세션은 브라우저 접속이 종료되면 바로 세션 ID버림!
토큰의 경우 유효기간 끝나기 전까지는 통제 못함 => 보안의 위함 있다!
그러나 한 번 전송받은 데이터는 저장해 놨다가 다시 사용할 때 꺼내 쓴다면 반복적으로 서버에 데이터 전송을 요청할 필요가 없습니다.
브라우저 캐시 -> 사용자가 컴퓨터나 스마트폰에서 인터넷 서핑할 때 받아온 데이터는 브라우저에 캐시 형태로 저장됩니다.
쿠키와 같이 캐시도 각 브라우저의 설정 화면에서 조작해 비울 수 있습니다
쿠키와 캐시 모두 정보를 저장하여 재활용하는 기술이지만,
- 쿠키는 사용자의 수고를 덜어주는 데 목적을 두고
- 캐시는 데이터의 전송량을 줄이고 서비스 이용 속도를 높이는 데 목적을 둡니다.
CDN은 지리적으로 분산된 여러 개의 서버를 이용해 웹 콘텐츠를 사용자와 가까운 서버에서 전송함으로써 전송 속도를 높입니다.
서버가 데이터를 전 세계 각지에 세워진 캐시 저장 및 전달용 컴퓨터(CDN 업체 소유)들에 보내면
사용자는 본 서버가 아닌 본인에게서 가장 가까운 캐시 서버로 요청을 보내고 데이터를 받아오는 것입니다.
CDN을 사용하면 본 서버는 캐시 서버에 데이터를 한 번씩만 전송하면 됩니다.