본문 바로가기
엘리스 AI 트랙 4기/elice AI track

[6주차] Session과 Session Store

by _sweep 2022. 2. 23.

2월 23일 자 학습 내용 정리입니다.

 

 

Session

세션(Session)은 웹 서버가 클라이언트의 정보를 클라이언트별로 구분하여 서버에 저장하고 클라이언트 요청 시 세션 아이디(Session ID)를 사용하여 클라이언트의 정보를 다시 확인하는 기술이다.
이는 클라이언트가 정보를 저장하고 요청 시 정보를 보내는 쿠키(Cookie)와 반대되는 개념이다.

세션의 작동방식은 다음과 같다.

  1. 서버는 세션을 생성하여 세션의 구분자인 Session ID를 클라이언트에 전달한다.
  2. 클라이언트는 요청 시 Session ID를 요청에 함께 담아 전송한다.
  3. 서버는 전달받은 Session ID로 해당하는 세션을 찾아 클라이언트의 정보를 확인한다.

Express.js에서는 express-session 패키지를 사용하여 간단하게 세션을 구현할 수 있다.
Session ID를 클라이언트에 전달하고 이를 통해 클라이언트의 정보를 확인하는 과정이 모두 자동으로 이루어진다.

 

Session에 대한 내용은 다음 글에서 확인할 수 있다.

 

2022.02.05 - [엘리스 AI 트랙 4기/Frontend CS Study] - [HTML] local storage, session storage, cookie

 

[HTML] local storage, session storage, cookie

취준생이라면 알면 좋을 프론트엔드 관련 지식들 자료를 보고 정리한 내용입니다. ✅ local storage 로컬 스토리지(local storage)는 웹 스토리지(web storage)의 한 종류로 데이터를 브라우저 상에 저장할

cansweep.tistory.com

 

 

Session Store

express-session 패키지는 세션을 기본적으로 메모리에 저장한다.
이는 어플리케이션을 종료 후 다시 실행할 경우 모든 유저의 로그인이 해제되는 등 로그인 정보가 남아있지 않게 된다.
또 서버가 여러 대 존재할 경우에도 서버 간 세션 정보를 공유할 수 없다는 단점이 존재한다.

따라서 Session Store를 사용해 MongoDB 등 메모리가 아닌 외부 공간에 세션을 저장하고 필요한 경우 저장된 값을 가져와 현재 상태를 파악할 수 있다.

 

 

MongoDB를 Session Store로 사용하기

connect-mongo 패키지로 MongoDB를 session store로 사용할 수 있다.

connect-mongo 패키지는 express-session 패키지의 옵션으로 전달 가능하며 자동으로 session 값이 변경될 때 update되고 session이 호출될 때 find한다.

 

const MongoStore = require("connect-mongo");
app.use(
  session({
    secret: "SeCrEt",
    resave: false,
    saveUninitialized: true,
    store: MongoStore.create({
      mongoUrl: "mongoUrl",
    }),
  }),
);

 

connect-mongo 패키지를 사용해 express-session 설정 시 store 옵션에 전달하고 mongoUrl을 설정한다.
이를 통해 세션 데이터를 MongoDB에 저장하고 관리한다.

 

 

MongoDB Aggregation

MongoDB에서 Document들을 가공하고 연산하는 기능을 제공한다.
GROUP BY, DISTINCT, COUNT, JOIN 등 REBMS에서 SQL로 수행할 수 있는 기능들을 유사하게 구현할 수 있다.

MongoDB의 find는 검색 필터링과 정렬 이외의 기능을 제공하지 않는다. 따라서 다른 Collection에서 데이터를 가져오거나 검색된 데이터를 그룹화하는 등의 작업이 필요한 경우 Aggregation을 사용한다.

 

db.posts.aggregate([
  { $group: { _id: '$author', count: { $sum: 1 } } },
  { $match: { sum: { $gt: 10 } } },
  { $lookup: { from: 'users', localField: '_id', foreignField: '_id', as: 'users' } },
]);


Aggregation은 State들의 배열로 이루어지고 각 Stage는 순차적으로 수행된다.

 

댓글