Session

Angela_Hong·2023년 3월 2일
1

Session

Session은 웹 애플리케이션에서 사용자의 상태를 유지하기 위한 매커니즘이다.
즉, 사용자와 서버 간의 상호작용을 지속시키기 위한 기술이라고 생각하면 된다.

HTTP프로토콜은
상태를 유지하지 않는 stateless한 프로토콜이기 때문에, 사용자가 웹 페이지 간에 이동할 때마다 새로운 HTTP 요청과 응답이 이루어진다.

사용자의 요청과 서버의 응답은
각각 독립적으로 처리하는 구조에서,
사용자와 서버 간의 연속된 작업을 수행하려면 각각의 요청에 대해 일정한 상태 정보를 유지하고, 이전 요청과 연결해서 처리해야한다. 이를 위해서 사용되는 것이 세션이다.

Session은 서버측에서 각각의 클라이언트를 식별하고, 클라이언트의 상태정보를 저장하여 다른 페이지나 애플리케이션에서 사용할 수 있도록 한다.

Session은 보통 사용자가 로그인하고 웹 애플리케이션과 상호작용하는 동안 서버 측에서 생성되며, 클라이언트와 고유하게 연결된다.
서버는 클라이언트가 세션 ID를 전송하면 해당 세션을 식별하고, 세션 데이터를 읽거나 쓸 수 있다.
세션 데이터는 일반적으로 클라이언트의 로그인 정보, 장바구니, 선호 설정 등과 같은 사용자 데이터를 포함한다.

Session은 사용자가 웹 서비스에 접속한 이후, 브라우저를 닫을 때까지 유지되며, 서버에 저장된다.
세션은 일반적으로 웹 브라우저에 의해 생선된 쿠키를 이용하여 관리된다.

(쿠키는 사용자의 로컬 브라우저에 저장되는 작은 데이터 파일로, session ID라는 식별자를 포함하고 있음, session ID는 웹 서버에서 세션 정보를 찾기 위한 키 값으로 사용된다. 자세한 건 cookie담당 지나니에게)

세션은 쿠키와 함께 작동하여 구현될 수 있다. 쿠키는 클라이언트 측에서 저장되며, 세션ID를 저장하여 클라이언트가 다시 액세스 할 때마다 서버에 전송한다. 이를 통해 서버는 클라이언트를 식별하고, 이전 세션 데이터를 읽거나 새로운 세션을 생성할 수 있다.

웹 서비스에서는 일반적으로 로그인, 장바구니, 게시판 등의 기능을 제공하는데, 이러한 기능을 구현하기 위해 세션이 필요하다.
사용자가 로그인하면, 세션에 로그인 정보가 저장되며, 서버에서는 해당 세션ID를 이용하여 사용자를 식별한다.
장바구니나 게시판 등에서도 사용자가 추가한 항목 정보를 세션에 저장하여 사용자가 다시 접속하더라도 이전 상태를 그대로 유지할 수 있도록 한다.

세션은 보안상의 이유로 중요하다.
사용자의 개인정보나 민감한 데이터는 세션에 저장되어서는 안된다.
또한 세션ID가 유출되면 해당 사용자의 계정에 대한 모든 정보에 접근할 수 있게 되므로, 세션 아이디를 안전하게 전송하고 관리하는 것이 중요하다.
이를 위해서 HTTPS와 같은 보안 프로토콜을 사용하고, 세션 아이디를 암호화하여 보호하는 것이 좋다.

세션 기반 인증

Session-based Authentication

세션 기반 인증은 사용자 인증을 위해 세션을 사용하는 방법을 말한다.
일반적으로 사용자가 로그인하면
서버는 해당 사용자를 식별하기 위한 세션을 생성하고,
해당 세션 ID를 사용자 브라우저에 저장한다.
이후 사용자가 다시 요청을 보낼때마다,
브라우저는 세션ID를 서버에 보내며, 서버는 해당 세션ID를 사용하여 사용자를 식별한다.

Session-based Authentication 동작방식

  1. 사용자가 로그인 페이지에 접속하여 로그인 정보를 입력한다.
  2. 서버는 입력된 로그인 정보를 검증하고, 유효한 경우 해당 사용자를 위한 세션을 생성한다.
  3. 세션ID를 생성하고, 사용자의 브라우저에 저장한다.
  4. 사용자가 다른 페이지로 이동할 때마다, 브라우저는 세션ID를 서버에 전송한다.
  5. 서버는 세션 ID를 사용하여 해당 사용자를 식별하고, 해당 사용자의 요청에 대한 응답을 생성한다.

Session-based Authentication 장점

간단하고 직관적인 방식으로 사용자 인증을 처리할 수 있다
또한 세션을 사용하여 사용자의 로그인 정보와 같은 중요한 데이터를 안전하게 저장할 수 있다.

Session-based Authentication 단점

세션은 서버의 메모리나 디스크 공간을 차지하므로, 대규모 애플리케이션에서는 부하 문제가 발생할 수 있다.
또한, 다중 서버 환경에서는 세션을 공유하기 위한 추가적인 처리가 필요하다.
마지막으로, 세션ID를 탈취당하면 해당 사용자의 세션에 대한 권한을 얻을 수 있으므로, 보안에 대한 이슈도 있다.

express-session

Express.js는 Node.js기반의 웹 프레임워크로, 웹 애플리케이션을 빠르고 쉽게 구축할 수 있는 다양한 기능을 제공한다.
이 중에서도 세션을 다루기 위한 라이브러리 중 하나가 express-session이다.

Express 프레임워크에서 사용할 수 있는 세션 미들웨어 패키지를 의미한다.
즉, 세션을 관리해주는 모듈
express-session을 사용하면, 사용자 인증 정보를 세션에 저장하여 웹 애플리케이션에서 사용자를 식별하고 인증할 수 있다.

(유어클래스에서의 설명)
express-session은 세션을 위한 미들웨어로, express 서버에서 쉽게 세션을 위한 공간을 다룰 수 있도록 만들어줍니다.
(추가적으로 설명하면,)
express-session은 Express.js에서 세션을 구현하기 위한 미들웨어이다.
Express.js에서 미들웨어는 요청과 응답 사이에서 실행되는 함수로,
Express.js 애플리케이션의 동작을 제어하는데 사용된다.
express-session을 사용하면 Express.js 애플리케이션에서 쉽게 세션을 구현할 수 있다.

express-session 사용이유

express-session을 사용하면,
세션 데이터를 메모리나 파일, 데이터베이스 등 다양한 저장소에 저장할 수 있고, 세션 데이터의 암호화를 지원하여 보안성도 높일 수 있다.

express-session 기능

  1. 세션 생성과 저장
  2. 세션 데이터 조회 및 수정
  3. 세션 삭제
  4. 세션 타임아웃 설정
  5. 세션 ID생성 방식 설정
  6. 세션 데이터 암호화

express-session 사용방법

  1. express-session 패키지 설치
npm install express-session
  1. express 애플리케이션에서 express-session을 미들웨어로 등록
const session = require('express-session')
app.use(session({
  secret: 'my-secret-key',
  resave: false,
  saveUninitialized: true
}));
  • secret: 세션 데이터를 암호화하기 위한 키 값
  • resave: 변경되지 않은 세션 데이터를 저장소에 다시 저장할지 여부를 지정
  • saveUninitialized: 초기화되지 않은 세션 데이터를 저장소에 저장할지 여부를 지정
  1. 세션 데이터를 저장하고 읽어올 수 있음
// 세션 데이터 저장
req.session.myData = 'Hello, World!';
// 세션 데이터 읽기
const myData = req.session.myData;

'app(use(session(options))'를 사용하여 세션 미들웨어 등록
'req.session'을 통해 세션 데이터를 조회하고 수정할수 있음

0개의 댓글