0818
https://news.hada.io/topic?id=22574
와 미쳤다
node.js에서 ts 바로 지원한대요
ts-pattern
ts에서 함수형 프로그래밍의 패턴 매칭을 가능하게 해주는 라이브러리
if~else 체인보다 깔끔하고 -> 그치만 과도하게 사용할 경우 오히려 성능이 떨어짐
컴파일 타임에 모든 케이스가 처리됐는지 확인해주기 땜에 좋음
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를 사용하면 jwt 토큰만 검증하면 되니까
- 모바일 앱일때
- 서버가 여러개일때 (주문, 결제, 배송 ...)