HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
💌
JJong’s Archive
/
iron-session 라이브러리

iron-session 라이브러리

날짜
Dec 24, 2024 03:14 AM
⇒ 데이터를 암호쿠키에 관리하는 라이브러리
⇒ 세션db 필요 없음(stateless)
⇒ 서버 컴포넌트에서만 사용 가능
 
Iron Session의 동작 방식 1. 클라이언트가 서버에 요청을 보냅니다. 2. 서버는 요청을 처리하며 세션 데이터를 암호화하여 쿠키에 저장하고 클라이언트로 전송합니다. 3. 클라이언트는 이 쿠키를 저장하고 이후 요청마다 자동으로 서버에 전송합니다. 4. 서버는 쿠키를 복호화하여, 세션 데이터를 확인하고 인증 및 상태 관리를 수행합니다.
 

사용방법

  1. npm install iron-session
  1. 암호쿠키 기본 설정
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", }, };
lib/session.ts
  1. 세션 읽기 & 쓰기
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();
 

주요 메서드

  1. session.save() : 세션 데이터를 암호화된 쿠키로 저장(비동기)
  1. getIronSession() : 암호쿠키 가져오기. 없다면 요청(req)와 응답(res)을 기반으로 Iron Session 객체를 생성 (비동기)
  1. session.destroy() : 세션 데이터를 삭제하고 쿠키를 비움

특징

1. 무상태 설계: • 서버가 상태를 유지하지 않으므로 확장성이 뛰어나고 리소스 소모가 적음 2. 쿠키 크기 제한: • 브라우저마다 쿠키 크기가 제한(일반적으로 최대 약 4KB)이 있어 대량의 데이터를 저장하기 어려움 3. 서버 의존 복호화: • 암호화된 데이터를 복호화할 수 있는 키는 서버에만 존재하므로 분산 환경에서는 추가 설정이 필요할 수 있음