<1> Middleware


(1) Log 미들웨어


Log Middleware를 통해 클라이언트의 요청 사항등을 기록하는 로깅 환경을 조성할 수 있다.

유저 행동 분석등 서버의 상태를 모니터링하는 데에 효과적


관련 라이브러리 morgan, winston

모니터링 솔루션 AWS CloudWatch, Datadog

로그 레벨(level)

Log Level은 로그의 중요도를 나타낸다.

info”, “error”, “warn”, “debug" 등의 로그 레벨

클라이언트의 요청이 발생 시, 로그 미들웨어는 가장 먼저 실행되어야 하기 때문에, 미들웨어 중 최상단에 위치해야 한다.






(2) Error Handling Middleware


Express.js에서 발생한 에러를 통합적으로 처리하기 위한 미들웨어






<2> Transaction


데이터베이스에서 하나의 논리적 작업 단위

ACID 특성을 통해 작업의 완전성을 보장해주고 데이터의 일관성을 유지하도록 도와준다.

- Atomicity

- Consistency

- Isolation

- Durability



MySQL의 트랜잭션

-- 트랜잭션을 시작합니다.
START TRANSACTION;

-- 성공시 작업 내역을 DB에 반영합니다.
COMMIT;

-- 실패시 START TRANSACTION이 실행되기 전 상태로 작업 내역을 취소합니다.
ROLLBACK;



Lock

동시성을 제어를 위한 장치

데이터의 점유를 통해 다른 트랜잭션의 접근을 막아 ConcurrencyConsistency 를 제어하는 데에 사용.

Concurrency control에 있어서, 동일한 공유 resource에 대한 데이터 무결성 및 경쟁 상태에 대한 방지를 위해 규현된다.






<3> Express Session


express session이란 express에서 세션 기능을 위한 미들웨어이다.

이전에 사용했던 사용자 인증과 세션 스토리지 및 쿠키 발급 과정을 생략하고,

간단하게 세션 기능을 구현하도록 도와준다.

그 기능은 간단하게 살펴보면 다음과 같다.

  • 클라이언트에게 session ID 발급
  • session ID를 통한 클라이언트 상태 추적

# express, express-session를 설치
yarn add express express-session
// app.js

import express from 'express';
import expressSession from 'express-session';

const app = express();
const PORT = 3019;

app.use(express.json());
app.use(
  expressSession({
    secret: 'express-session-secret-key.', // 세션을 암호화하는 비밀 키를 설정
    resave: false, // 클라이언트의 요청이 올 때마다 세션을 새롭게 저장할 지 설정, 변경사항이 없어도 다시 저장
    saveUninitialized: false, // 세션이 초기화되지 않았을 때 세션을 저장할 지 설정
    cookie: {
      // 세션 쿠키 설정
      maxAge: 1000 * 60 * 60 * 24, // 쿠키의 만료 기간을 1일로 설정합니다.
    },
  }),
);

app.listen(PORT, () => {
  console.log(PORT, '포트로 서버가 열렸어요!');
});

구성요소

1) secret

세션 id 암호화를 위한 secret key

2) resave

클라이언트의 요청(Request)이 들어올 때마다 세션 정보를 다시 저장할 지 설정
true 설정 시, 매번 새로운 세션에 저장

3) saveUninitialized

req.session에 아무런 정보가 저장이 되지 않더라도 사용자에게 세션 ID를 발급할 지 설정합니다.
true 로 설정하면, 서버에 접속하는 모든 사용자에게 세션 ID가 발급됩니다.

4) cookie.maxAge

세션 ID가 저장된 클라이언트의 쿠키 만료 기간을 설정합니다.

profile
안녕하세요, 고재영입니다. 언제나 즐겁게 살려고 노력합니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN