iron-session
라이브러리를 사용해서 Authentication을 구현하는 것을 배우고 있다. iron-session은 쿠키와 세션을 결합해서 안전하게 데이터를 관리하는 javascript library이다. 다만 iron-session은 이름에는 session이 들어가지만 실제로 데이터는 암호화된 형태로 쿠키에 저장된다.
나도 처음에 iron-session은 이름이 session이니까 서버에 데이터가 저장되는 것으로 알고 있었다. 하지만 구현되는 코드를 보면 session이 아니라 cookie를 이용하는 것 같아서 원리를 알아보았다.
iron-session
은 세션 데이터를 서버에 저장하지 않는다. 대신 쿠키에 암호화된 형태로 데이터를 저장한다.iron-session
에서 세션 객체에 저장된 데이터는 결국 암호화된 형태로 클라이언트의 쿠키에 저장된다.
서버에서는 쿠키를 읽고 암호를 해독해서 세션 데이터를 복원하는 방식으로 작동한다.
즉 이름만 session이지 cookie를 사용하는 방식이다! (속았다!!!)
import { getIronSession } from "iron-session";
export default async function handler(req, res) {
const session = await getIronSession(req, res, {
cookieName: "mySession",
password: process.env.SECRET_COOKIE_PASSWORD, // 암호화에 필요한 key
});
// 세션 객체에 데이터 추가
session.user = { id: 1, name: "홍길동" };
// 세션 저장
await session.save();
res.send({ message: "User Login" });
}
session.user
객체를 저장한다.session.save()
를 호출하면 이 데이터는 암호화되어 쿠키에 저장된다.getSession
을 통해 복호화된 데이터를 가져올 수 있다.Secure
, HttpOnly
설정).결론적으로, iron-session의 데이터는 암호화된 형태로 쿠키에 저장되며, 서버는 이를 복호화해서 세션처럼 사용할 수 있다.