[node.js] Session

Seungrok Yoon (Lethe)·2024년 4월 2일
0

node.js에서 session id와 쿠키로 유저 인증을 관리해보자

Session이 뭔데?

세션은 동일한 클라이언트/유저(브라우저)와 서버(웹서버) 사이에서 여러 요청에 걸쳐 이루어지는 상호작용을 stateful하게 유지하는 데이터를 유지할 수 있도록 하는 매커니즘을 의미한다.

HTTP 요청은 클라이언트의 요청에 응답을 한 번 주고나면 더 이상 서버는 클라이언트와의 연결을 유지하지 않는 비연결성을 지니는 프로토콜이다. 이는 별도의 추가적인 장치 없이는 클라이언트가 서버로 보내는 매 HTTP 요청은 별도의 요청으로 취급된다는 것이다.

하지만 실제 세상에서는, 클라이언트가 보내는 요청들에 대해 웹서버가 연결성있게 처리해주어야 하는 요구사항들이 등장한다. 그래서 웹서버는 특정 유저와 관련된 행위를 지속적으로 추적할 필요가 있다. 가령 유저인증이 그렇다. 우리는 한 번 로그인을 하고 나서, 페이지 이동시마다 새로 로그인을 하지는 않는다. 로그인이 성공하고 나면, 우리는 로그인 된 상태로 페이지들을 노닐 수 있다. 서버에서 이 기능은 어떻게 구현된 것일까?

바로 세션을 통해서이다.

HTTP 웹서버는 클라이언트의 연결이 검증되면, 브라우저와 웹사이트 사이의 세션을 생성한다. 유저가 사이트에 로그인되고 나서 세션을 생성하는 경우도 있다.

후자의 경우에 웹서버는 로그인 정보를 기반으로 해당 클라이언트에 대한 세션(서버 나름의 자료구조)을 생성하고, session-related(세션과 관련된) 정보들을 특정한 데이터스토어(서버의 디렉토리구조, 또는 데이터베이스)에 저장함으로써 관리한다.

세션을 생성하고 나서, 서버는 해당 세션의 태그에 해당하는 session ID - 세션아이디를 Set-cookie 헤더에 쿠키로 담아 응답을 하게 된다.

응답을 받은 브라우저는 해당 세션아이디를 쿠키에 저장하고, 다음 요청때 헤더에 담아 서버와 통신하게 된다.

클라이언트가 서버로 다음 요청을 보낼 때, 쿠키에는 이전에 발급받은 세션아이디가 존재할 것이고, 서버는 쿠키에 담겨온 세션아이디를 통해 서버의 세션스토어(세션 데이터가 저장되는 공간)의 세션 데이터에 접근하여 해당 세션아이디에 해당하는 세션이 아직 유효한지 검증한다.

PR

링크

참고

[링크1] What is a session ID?

[링크2] Difference between cookies, session and tokens

profile
안녕하세요 개발자 윤승록입니다. 내 성장을 가시적으로 기록하기 위해 블로그를 운영중입니다.

0개의 댓글