
โ Iron Session์ด๋?
์๋ช , ์ํธํ๋ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ NodeJS stateless ์ธ์ ๋๊ตฌ
JWT์๋ ๋ค๋ฅด๋ค.
JWT๋ ์ํธํ ๋์ง ์๊ณ ์๋ช ์ด ๋์์ ๋ฟ์ด๋ค.
JWT๋ ์ ์ ์ id๋ฅผ ๊ฐ์ง ๊ฐ์ฒด์ ์๋ช ํ๊ณ ์ด ์๋ช ๊ณผ ํจ๊ป ์ ์ ์๊ฒ ํ ํฐ์ ๋ณด๋ด๋ ๊ฒ์ด๋ค.
(์ ์ ๋ ํ ํฐ์ ๋ฐ์์ ์ดํด๋ณผ ์ ์๋ค. JWT ํ ํฐ ์์ ์๋ ์ ๋ณด๋ฅผ ํคํ ์์๋ณผ ์ ์๋ค.
์ ์ ๊ฐ ์ด JWT๋ฅผ ๋ณด๋์ ๋ ์๋ช
์ ํ์ธํ๊ณ ํด๋น ํ ํฐ์ ์ ๋ขฐํ๋ ๋ฐฉ์)
โ ์ฟ ํค๋ฅผ ์ํธํํ์ฌ ์ฌ์ฉํ๋ฉด ์ข์ ์
1. ์ ์ ๊ฐ ์์ ์๋ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ์ ๋ณด๋ ๊ฐ์ ๋ฃ์ ์ ์๋ค.
2. ์ธ์ ์ ์ํ ๋ฐฑ์๋๋ฅผ ๊ตฌ์ถํ ํ์๊ฐ ์๋ค.
โ ์ฌ์ฉ๋ฒ
npm i iron-session
์คํํ๊ณ ์ถ์ ํจ์๋ฅผ withIronSessionApiRoute() ํจ์๋ก ๊ฐ์ธ์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด iron session์ด ์์์ req.session.user๋ฅผ req ๊ฐ์ฒด ์์ ๋ด์ ๋ณด๋ด์ค๋ค.
โ ์์
import { withIronSessionApiRoute } from "iron-session/next";
declare module "iron-session" {
interface IronSessionData {
user?: {
id: number;
};
}
}
const cookieOptions = {
cookieName: "carrotsession",
password: process.env.COOKIE_PASSWORD!,
};
export function withApiSession(fn: any) {
return withIronSessionApiRoute(fn, cookieOptions);
}
์ ์ ์ ๋ณด๋ฅผ session์ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด req.session.user์ ๋ด๊ณ , req.session.save()๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
'๐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ - TanStack Query(React Query) (0) | 2026.02.03 |
|---|---|
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ - Zod (0) | 2025.12.03 |
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ - SWR (0) | 2025.07.05 |
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ - NextAuth (0) | 2025.07.04 |
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ - React Hook Form (2) | 2025.05.27 |