쿠키, 세션, 캐시 차이
일단 기본적으로 http의 특징을 알 필요가 있다.
http는 stateless 프로토콜이고, connectionless 프로토콜이다.
stateless이기 때문에 데이터를 주고 받아도, 이전 데이터를 유지하지 않는다.
또한 connectionless이기 때문에 연결을 바로 끊는다.
Keep-alive로 연결을 유지할 수 있다.(https://goodgid.github.io/HTTP-Keep-Alive/)참고
하지만 stateful 경우를 대처하기 위해 쿠키와 세션을 사용함
쿠키와 세션의 가장 큰 차이는 상태 정보의 저장 위치이다.
쿠키는 '클라이언트'에 저장하고, 세션은 '서버'에 저장한다.
사용자의 브라우저에 저장된다.
통신할 때, HTTP 헤더에 포함되는 텍스트 데이터 파일(이름,값 만료기간,경로 정보)가 있고 키와 값으로 구성되어 있다.
누구나 내 컴퓨터를 사용한다면 쿠키에 입력된 값을 쉽게 확인할 수 있다.
◎쿠키 통신 방법
(1) 최초 통신에서 쿠키값이 없으므로, 클라는 request함
(2) 서버에서 클라가 보낸 Request Header에 쿠키가 없음을 판별.
(3) 통신상태(userId, 조작상태, 방문횟수 등)을 저장한 쿠키를 response한다.
(4) 클라이언트의 브라우저가 받은 쿠키를 생성/보존한다.
(5) 두번째 연결부턴, HTTP header에 쿠키를 실어서 서버에 Request 한다.
◎쿠키 제약 조건
클라이언트는 총 300개의 쿠키 저장 가능
하나의 도메인당 20개의 쿠키 가질 수 있음 -> 20개가 넘으면 가장 적게 사용되는 것 부터 삭제
하나의 쿠키는 4KB 저장 가능
◎ 쿠키 사용 예시
자동 로그인 유지, 위시 리스트 저장, 팝업 보지 않기, 사용자 이전 스크롤링 등등
'서버'에 저장되는 쿠키.
클라이언트와 서버의 통신 상태, 주로 중요한 데이터를 저장 시 사용
브라우저를 종료할 때까지 유지 됨
사용자 로컬이 아닌 서버에 직접 저장되므로, 세션 내의 데이터를 탈취하는 것은 어려움 -> 보안성이 비교적 높음
◎ 세션 통신 방법
(1) 클라이언트가 서버에 접속 시, 세션 ID를 발급한다.
(2) 서버에서는 클라이언트로 발급해준 세션 ID를 쿠키를 이용해서 저장
(3) 클라이언트는 다시 페이지에 접속할 때, 쿠키에 저장된 세션 ID를 서버에 전달
(4) 서버는 Request Header에 쿠키 정보(세션 ID)로 클라이언트를 판별
※ Session ID 보안의 취약점
세션 해킹: 홈페이지 관리자의 세션 아이디를 탈취 -> 쿠키값을 관리자의 세션아이디로 변경한다. ->관리자 권한으로 이용
예방법 : 세션에 로그인 했을 때의 IP를 저장 -> 페이 이동 시, 현재 IP와 세션의 IP/브라우저 정보(UserAgent)가 같은지 검사
리소스 파일들의 임시 저장소. 같은 웹 페이지에 접속 할 때, 사용자의 PC에서 로드하므로 서버를 거치지 않아도 된다.
이전에 사용되었던 데이터들은 다시 사용될 가능성이 높다. -> 그래서 다시 사용될 확률이 있는 데이터들을 빠르게 접근 가능한 저장소에 저장한다.
-> 페이지 로딩 속도를 개선함
◎캐시 히트
CPU가 참조하려는 메모리가 캐시에 존재하고 있는 경우
◎캐시 미스
캐시 히트와 반대로, 메모리에 캐시가 존재하지 않는 경우
사용방식 - 홈페이지 접속 시 css, js 파일을 사용자의 pc에서 로드, 서버를 거치지 않아도 됨