IT기타
Iron-Session 개념과 작동 원리
emilyyoo
2025. 2. 21. 15:30
728x90
iron-session은 Next.js에서 데이터를 클라이언트가 직접 접근할 수 없도록 서버 측 세션을 유지하는 방식을 제공하는 라이브러리다. 브라우저의 cookie를 이용하지만, 내부적으로는 암호화되어 데이터가 보호되는 방식이다.
1. 작동 원리
- 세션 데이터 저장:
- 서버에서 req.session 객체에 데이터를 저장하면, iron-session은 이를 암호화된 쿠키로 변환하여 클라이언트에게 보냄.
- 쿠키에는 실제 데이터가 아닌, 암호화된 값이 저장되므로 클라이언트가 내용을 확인할 수 없다.
- 세션 데이터 읽기:
- 클라이언트가 요청을 보낼 때, 서버는 브라우저가 보낸 쿠키를 해독해서 req.session에 세션 데이터를 복원함.
- 세션 유지:
- cookieOptions.maxAge를 설정하면 해당 시간 동안 세션이 유지되고, 이후에는 자동으로 만료됨.
2. Iron-Session의 특징
- Stateless: 일반적인 서버 세션처럼 DB를 사용하지 않고, 클라이언트의 쿠키에 암호화된 데이터를 저장해서 서버가 Stateless한 구조를 유지할 수 있음.
- 보안성: 쿠키에 저장되는 데이터가 iron-session의 내부 암호화 알고리즘으로 보호됨.
- 서버에서만 접근 가능: iron-session은 Next.js의 API Route, Middleware 등 서버에서만 접근할 수 있어, 클라이언트 측에서는 직접 확인할 수 없음.
Iron-Session과 브라우저 탭 간 데이터 공유
❌ Iron-Session은 브라우저 탭 간에 세션을 공유할 수 있다.
- 이유: Iron-Session은 쿠키 기반이기 때문에, 같은 도메인에서는 여러 탭이 동일한 쿠키를 공유함.
- 즉, iron-session을 사용하는 동안 같은 브라우저의 다른 탭에서도 같은 iron-session 값을 사용할 수 있음.
- 하지만, 세션 값이 업데이트되면 새로고침해야 반영됨.
탭 간 공유를 막고 싶다면?
- Session Storage 사용
- sessionStorage는 브라우저 탭마다 별도로 관리되므로 Iron-Session과 함께 활용하면 탭별 데이터를 격리할 수 있음.
- 쿠키를 HttpOnly + Secure로 설정한 후 SameSite 옵션 변경
- cookieOptions.sameSite: "Strict"로 설정하면, 다른 탭에서 세션 쿠키를 공유하는 것을 방지 가능.
정리
✅ Iron-Session의 핵심 특징
- 서버 측에서만 접근 가능 (클라이언트에서 직접 볼 수 없음)
- 암호화된 쿠키 기반 저장 방식
- Stateless 방식 (DB 필요 없음)
- 자동 만료 시간 설정 가능
✅ Iron-Session의 탭 간 공유 여부
- 같은 브라우저, 같은 도메인 내에서는 공유됨.
- 다른 브라우저나 시크릿 모드에서는 공유되지 않음.
- 탭별로 다른 데이터를 유지하고 싶다면 sessionStorage와 함께 사용해야 함.
728x90