![[NestJS] 쿠키와 세션이란?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FesGQJC%2FbtrRyHpf8q2%2FQUWHInvpLBsPPVKlXkdbo1%2Fimg.png)
쿠키와 세션을 함께 설명하는 이유:
이 둘의 특징이 비슷하며 차이점이 명확하기 때문에 비교하면서 배우면 습득하기 편함.
먼저, 개요부터 봅시다.
개요
쿠키란?
쿠키는 브라우저에 휘발성 데이터를 저장하는 방식
세션이란?
세션은 서버에 휘발성 데이터를 저장하는 방식
이 둘은 자주 사용되는 데이터를 빨리 꺼내사용해야 하는 경우 사용됩니다.
세션, 쿠키로 사용하는 이유는 뭘까요?
HTTP의 특징 때문입니다.
- Connectionless(비 연결지향): HTTP의 기본적으로 요청&응답만 하고 끊어버립니다.
- Stateless(상태정보유지안함): HTTP는 상태정보 저장 안함. 그래서 세션 혹은 쿠키로 데이터를 저장합니다.
쿠키와 세션의 차이
쿠키 | 세션 | |
저장 위치 | 브라우저(로컬) | 서버 |
보안성 | 낮음 | 높음 |
수명 | 반영구 | 브라우저 종료시 삭제 |
속도 | 빠름 | 느림 |
쿠키의 Flow
- 웹 브라우저에서 서버로 요청
- 상태를 유지하고 싶은 값을 쿠키로 생성
- 서버가 응답할 때 HTTP 헤더에 쿠키를 포함해서 전송
- 전달받은 쿠키는 웹 브라우저에서 파일 단위로 저장합니다.
- 이후에는 이 쿠키를 포함하여 요청
세션의 Flow
- 웹 브라우저가 서버에 요청
- 서버 내부에서 해당 클라이언트에게 세션 ID를 부여
- 서버가 응답할 때 HTTP 헤더에 세션 ID를 포함해서 전송
- 웹 브라우저는 이후 웹 브라우저를 닫기까지 부여된 세션 ID를 기억합니다.
- 이후에는 세션ID를 포함하여 요청합니다.
- (브라우저를 종료하면 세션 ID를 삭제합니다.)
NestJS 쿠키 문서
import * as cookieParser from 'cookie-parser';
// 이니셜라이제이션 파일에 넣으세요.
app.use(cookieParser());
https://docs.nestjs.com/techniques/cookies
Documentation | NestJS - A progressive Node.js framework
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac
docs.nestjs.com
NestJS 세션 문서
import * as session from 'express-session';
// 이니셜라이제이션 파일에 넣으세요.
app.use(
session({
secret: 'my-secret',
resave: false,
saveUninitialized: false,
}),
);
https://docs.nestjs.com/techniques/session
Documentation | NestJS - A progressive Node.js framework
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac
docs.nestjs.com
참고 자료
'Node.js' 카테고리의 다른 글
[NestJS 에러] node @nestjs/schematics:module --name=auth --no-dry-run --no-skip-import --language="ts" --source-root="src" --spec --no-flat (0) | 2023.01.17 |
---|---|
Reddit API로 게시글 가져오기 (3) | 2022.12.11 |
[NestJS] TypeORM 논리 삭제(soft delete)와 물리 삭제(hard delete) (0) | 2022.11.09 |
[NestJS] 에서 puppeteer 사용하기 (0) | 2022.10.22 |
[NestJS] Swagger 바디 타입 여러개 명시하기 (0) | 2022.10.17 |
글 내용 중 잘못되거나 이해되지 않는 부분은 댓글을 달아주세요! 감사합니다! 문의: puleugo@gmail.com