요약
쿠키와 세션은 HTTP 의 약점을 보완하기 위해서 사용된다.
HTTP의 특성
HTTP는 connectionless 와 stateless 라는 특성을 가진다.
요약하자면 한번 연결을 하면 연결과 상태를 보전하지 않는다.
1. connectionless 란?
클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊는 특징이다.
클라이언트가 request 를 서버로 보내면 , 서버는 클라이언트에게 response를 하고 접속을 끊는다.
2. stateless 란?
stateless 는 통신이 끝나면 상태를 유지하지 않는 특징이다.
쿠키
1. 쿠키란?
쿠키는 클라이언트에 파일로서 저장이된다.
하나의 쿠키값은 4KB까지 저장이 가능하고 Response Heade 에 Set-Cookie 속성을 사용해서 클라이언트에 쿠키를 만들 수 있다.
내용은 키와 값으로 이루어져 있으며, 쿠키의 이름/ 값 / 유효시간 /쿠키를 전송할 도메인 / 쿠키를 전송할 요청 경로 의 항목이 있다.
쿠키는 인증 유효기간을 명시할 수 있고, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다.
쿠키는 사용자가 따로 요청하지 않아도 브라우저가 request 시 자동으로 Request Header에 쿠키를 넣어서 자동으로 서버에 전송을 한다.
클라이언트가 페이지를 요청하면 서버에서 쿠키를 생성하고 HTTP 헤더에 쿠키를 포함시켜 클라이언트에 응답을 한다.
클라이언트는 그 쿠키를 저장하고, 브라우저가 종료되어도 로컬에 저장되어 있기 때문에 만료기간이 다되지 않으면 쿠키에서 데이터를 쓸 수 있다.
클라이언트가 쿠키가 있는 경우 요청을 할 경우 서버로 보낼때 HTTP 헤더에 쿠키를 함께 보내고 서버에서는 쿠키를 읽는다. 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있으면 쿠키를 업데이트 하고 변경된 쿠키를 다시 HTTP 헤더에 포함시켜 응답을 한다.
사용예시는 아이디 비밀번호 저장이나 장바구니 기능 등이 있다. 이런 정보들은 쿠키에 저장을 한다.
2. 세션이란?
세션도 쿠키기반이다. 대신 세션은 서버가 관리한다.
서버에서는 클라이언트를 구분해야 되서 세션ID 를 각 클라이언트에 부여한다.
클라이언트가 Request를 보내면, 서버의 엔진이 클라이언트에게 고유한 ID를 부여한다.
유효기간은 서버에 접속하고 브라우저를 종료하기 이전까지다.
물론 유효시간도 설정이 가능하다.
서버가 관리하기 떄문에 보안은 쿠키보다 좋으나, 서버 메모리를 차지한다.
때문에 동접자가 많아지면 서버 메모리를 많이 먹어 과부하의 원인이 되기도 한다.
동작방식은 쿠키와 비슷하다.
클라이너트가 서버에 요청을 하면 서버는 세션 ID를 클라이언트에게 발급한다.
클라이언트는 세션 ID를 쿠키를 이용해 저장하고, 다시 서버에 요청을 할 때 쿠키에 있는 세션ID를 서버에 전달한다.
서버는 세션ID를 전달받고 해당 세션 ID에 대한 클라이언트 정보를 가져온다. 그리고 다시 응답을 한다.
3. 세션과 쿠키의 차이점
가장 큰 차이점은 저장되는 위치이다. 세션은 서버에, 쿠키는 클라이언트에 저장이 된다.
보안성은 세션이 더 좋다. 하지만 브라우저 종료시에 쿠키는 클라이언트의 정보를 잃지 않고 세션은 잃는다.
속도는 쿠키가 좋다. 로컬에 있기 때문이다. 세션은 서버에서 처리를 한번 해야되기 때문에 상대적으로 느리다.
캐시란?
캐시와 쿠키 둘 다 클라이언트쪽에서 관리하는 데이터이다.
캐시는 웹 페이지 요소를 저장하는 임시 저장소이다. 사용자에 PC에 저장을 한다.
목적은 렌더링의 효율화이다. 때문에 정적인 데이터를 저장한다.
이후에 웹 페이지를 렌더링할 때 캐시의 데이터를 이용해 빠르게 렌더링을 할 수 있다.
사용자의 의지 없이 자동으로 저장된다.
쿠키와 다르게 사용자가 수동으로 삭제해야 없어진다.
'참고자료' 카테고리의 다른 글
Request 의 방식의 종류 (0) | 2021.07.06 |
---|---|
JSON Web Token (JWT) (0) | 2021.07.06 |
프로세스와 스레드란? (0) | 2021.07.03 |
JAVA - 추상메소드와 추상클래스 그리고 인터페이스는 왜 쓰는걸까? (0) | 2021.07.02 |
객체와 클래스 (0) | 2021.07.01 |