⇒ 데이터를 암호쿠키에 관리하는 라이브러리
⇒ 세션db 필요 없음(stateless)
⇒ 서버 컴포넌트에서만 사용 가능
Iron Session의 동작 방식
1. 클라이언트가 서버에 요청을 보냅니다.
2. 서버는 요청을 처리하며 세션 데이터를 암호화하여 쿠키에 저장하고 클라이언트로 전송합니다.
3. 클라이언트는 이 쿠키를 저장하고 이후 요청마다 자동으로 서버에 전송합니다.
4. 서버는 쿠키를 복호화하여, 세션 데이터를 확인하고 인증 및 상태 관리를 수행합니다.
사용방법
npm install iron-session
- 암호쿠키 기본 설정
import { SessionOptions } from "iron-session"; export const sessionOptions: SessionOptions = { cookieName: "my-app-session", // 쿠키 이름 password: process.env.SESSION_SECRET!, // 최소 32자 이상의 비밀 키 cookieOptions: { secure: process.env.NODE_ENV === "production", // HTTPS 환경에서만 작동 httpOnly: true, // 자바스크립트 접근 차단 sameSite: "lax", }, };
- 세션 읽기 & 쓰기
import { getIronSession } from "iron-session"; import { sessionOptions } from "../../lib/session"; const session = await getIronSession(cookies(), { cookieName: "carrrrot", password: process.env.IRON_COOKIE_PASSWORD!, }); // 로그인 성공 시 사용자 정보를 세션에 저장 session.user = { id: 1, username: "John Doe" }; await session.save(); // 세션 삭제 session.destroy();
주요 메서드
session.save()
: 세션 데이터를 암호화된 쿠키로 저장(비동기)
getIronSession()
: 암호쿠키 가져오기. 없다면 요청(req)와 응답(res)을 기반으로 Iron Session 객체를 생성 (비동기)
session.destroy()
: 세션 데이터를 삭제하고 쿠키를 비움
특징
1. 무상태 설계: • 서버가 상태를 유지하지 않으므로 확장성이 뛰어나고 리소스 소모가 적음 2. 쿠키 크기 제한: • 브라우저마다 쿠키 크기가 제한(일반적으로 최대 약 4KB)이 있어 대량의 데이터를 저장하기 어려움 3. 서버 의존 복호화: • 암호화된 데이터를 복호화할 수 있는 키는 서버에만 존재하므로 분산 환경에서는 추가 설정이 필요할 수 있음