소분소분 프로젝트의 로그인 기능 회고하면서 쿠키와 세션에 대한 개념을 다시 정리한다.
로그인 인증을 통한 사용자 식별을 이해하기 위해서는 쿠키와 세션에 대한 개념을 알아야한다.
로그인을 하면 브라우저와 서버가 같은 정보를 들고 있어야 하므로,
로그인을 했을 때, 서버는 누가 로그인을 했는지 프론트 서버와 브라우저에 알려줘야한다.
백엔드 서버에 이메일, 닉네임, 비밀번호 정보를 가지고 있는데, 이 정보를 통째로 브라우저에 보내면 해킹에 취약해진다.
정보를 보내는 대신 랜덤한 문자를 보낸다. 이것이 쿠키이다.
백엔드 서버는 실제적인 정보 대신 랜덤한 문자를 보내고 서버쪽은 '이 정보는 XXX 라는 쿠키와 연결 되어있다. 라는 정보를 저장한다.
서버쪽에서는 데이터를 통째로 들고있고 (세션),
프론트에는 랜덤한 문자열(쿠키)를 보내어 보안의 위협을 최소화 한다.
그런데, 서버쪽에서 사용자의 정보(세션)을 통째로 들고 있으면 너무 무거워진다.
사용자의 정보가 점점 커짐에 따라 많은 메모리를 차지한다.
그래서 나온 방법이 id(세션 id)만 들고 있는 것이다.
아이디가 'ABC'라면, DB에서 'ABC'에 대한 user 정보를 가져온다.
즉, 서버쪽에서는 메모리를 아끼기 위해서 쿠키에 세션 id 값만 매칭해 놓는다.
따라서, 서버는 쿠키랑 user id 만 들고 있는다.
서버에서 생성하여 브라우저에 저장되는 키와 값으로 이루어진 작은 데이터 파일.
쿠키 생성 과정
쿠키의 특징
세션은 쿠키를 기반하고 있지만 브라우저에 저장하는 쿠키와 달리 서버 측에서 관리한다.
서버에서는 클라이언트를 구분하기 위해 세션 ID 를 부여하고 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때 까지 인증상태를 유지한다.
세션은 사용자 수 만큼 메모리를 차지하므로
이런 문제를 보완하기 위해 토큰 기반의 인증방식을 이용한다.
그것은 JTW로 다음글에 이어서 써보려한다.