쿠키? 세션? 캐시? JWT
들어는 봤지만 자세히 정리해보자 한다.
프로젝트를 진행하면서 세션을 이용해서 로그인 로그아웃을 구현해본 경험이 있다. 하지만 쿠키와 세션 캐시에 대한 차이를 자세히 몰랐고, 이에 대한 정리본이다.
HTTP의 특징
우선 첫번째로 알아야할 것은 http의 특징이다.
- 비연결성 Connectionless
- 무상태 Stateless
두가지 특징은 정말 한 문장으로 설명하자면,
비연결성은 서버와 클라이언트가 연결되어있지 않다는 것이고 클라이언트에서 요청을 하면 서버는 응답을 하고 끊어버린다.
무상태는 서버가 클라이언트의 상태를 갖고있지 않다는 뜻이다.
HTTP의 특성이 이렇다면 우리는 어떻게 서버에 클라이언트 정보를 저장할까?
웹페이지를 보면 많은 메뉴가 있다. 이 많은 메뉴를 돌아다니는데 계속 로그인을 한다면 얼마나 귀찮을까?
이렇게 정보가 유지되어야하는 필수적인 상황이 생길 수 있는것이다.
그렇다면 이것을 어떻게 해결해야할까?
그 방법이 바로 쿠키와 세션이다.
쿠키와 세션
쿠키와 세션의 큰 차이점은 상태 정보를 어디에 저장하느냐에 대한 차이이다.
쿠키
- 사용자의 브라우저에 저장되고, 통신할 때 HTTP 헤더에 포함되는 텍스트 데이터 파일
- 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지
- 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조 -> 즉, 컴퓨터에 접속 가능하다면 뚫릴 수 있다.
세션
- 세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
- 브라우저를 종료할 때까지 유지 됨
- 사용자 로컬이 아닌 서버에 직접 저장되므로, 세션 내의 데이터를 탈취하는 것은 어려움 -> 보안성이 비교적 높음
쿠키와 세션의 차이
- 쿠키는 로컬에 정보를 저장하고 세션은 서버에 정보를 저장한다.
- 쿠키는 정보의 유효기간을 정해서 브라우저가 종료되어도 클라이언트는 해당 정보를 가지고있다. 반면 세션은 브라우저 종료시 함께 사라짐
- 쿠키는 로컬에 정보가 있기때문에 빠르지만 세션은 서버에있기때문에 느리다.
캐시
무언가 작업할때 css가 안먹어서 해결법을 검색해보니, 캐시를 삭제하라는 해결법이 나와서 실제로 해결했던 기억이 있다.
그렇담 캐시란 무엇일까?
- 캐시는 이미지나 css, js파일 등을 브라우저나 서버 앞 단에 저장해놓고 사용하는 것이다.
- 이전에 사용했던 정보가 다시 사용될 수 있다 (-> css가 안먹었던 것처럼..)
참고 :
쿠키와 세션의 개념
HyperText는 무엇일까?
HTTP의 특징
쿠키/세션/캐시 차이