Skip to content

0818

https://news.hada.io/topic?id=22574
와 미쳤다
node.js에서 ts 바로 지원한대요

ts-pattern

  • ts에서 함수형 프로그래밍의 패턴 매칭을 가능하게 해주는 라이브러리

  • if~else 체인보다 깔끔하고 -> 그치만 과도하게 사용할 경우 오히려 성능이 떨어짐

  • 컴파일 타임에 모든 케이스가 처리됐는지 확인해주기 땜에 좋음

  • https://toss.tech/article/ts-pattern-usage

  • ts-pattern 썼을 때

ts
import { match } from 'ts-pattern';

type Shape =   
  | { type: 'circle'; radius: number }  
  | { type: 'rectangle'; width: number; height: number }  
  | { type: 'triangle'; base: number; height: number };

const calculateArea = (shape: Shape): number =>  
  match(shape)  
    .with({ type: 'circle' }, ({ radius }) => Math.PI * radius ** 2)  
    .with({ type: 'rectangle' }, ({ width, height }) => width * height)  
    .with({ type: 'triangle' }, ({ base, height }) => (base * height) / 2)  
    .exhaustive();
  • 안 쓰고 그냥 if~else문으로 나타냈을 때
ts
const calculateArea = (shape: Shape): number => {  
  if (shape.type === 'circle') {  
    return Math.PI * shape.radius ** 2;  
  } else if (shape.type === 'rectangle') {  
    return shape.width * shape.height;  
  } else if (shape.type === 'triangle') {  
    return (shape.base * shape.height) / 2;  
  } else {  
    // exhaustive check  
    const _exhaustiveCheck: never = shape;  
    throw new Error(`Unknown shape type: ${_exhaustiveCheck}`);  
  }  
};
  • exhaustive check?
    • shape type이 다른게 들어왔을 경우 컴파일 에러를 내는 것
  • 컴파일 에러 -> 런타임 에러순

session VS jwt

session

  • 사용자 로그인 시 서버에서 세션 ID 생성
  • 세션 데이터를 서버 메모리/데이터베이스에 저장
  • 클라이언트에 세션 ID를 쿠키로 전송
  • 이후 요청마다 세션 ID로 사용자 식별

jwt

  • 사용자 로그인시 서버에서 jwt(json web token) 토큰 생성
  • 토큰에 사용자 정보와 만료시간 포함
  • 클라이언트에 토큰 저장
  • 이후 요청마다 authorization 헤더에 토큰 포함

그래서 먼 차이

  • 세션은 서버에 저장하니까 정보 노출이 될 가능성이 적고
  • jwt는 클라이언트 측에 저장하니까 정보가 노출 될 가능성이 높다
  • 그러니까 세션은 서버 의존도가 높고 jwt는 낮다

그래서 언제, 뭘 쓰는게 좋아

  • session은
    • 소규모 프로젝트일때
      • 아니 오히려 소규모 프로젝트에서는 jwt가 클라이언트에 저장하니까 세션보다 간편한거 아닌가?
        • jwt 토큰 관리하는 것보다 서버가 한 대면 여기서 세션 관리하는게 더 편리해서
    • 사용자 블락(차단)먹일때
      • jwt 토큰은 클라이언트도 갖고 있으니까 만료 될 때까지 계속 정보가 유효해 블락을 맥일려면 블랙리스트를 따로 만들어야됨
  • jwt는
    • 서버가 여러개일때 (주문, 결제, 배송 ...)
      • 세션을 사용하면 모든 서버가 세션 정보를 공유해야하는 반면, jwt를 사용하면 jwt 토큰만 검증하면 되니까
    • 모바일 앱일때

참고