Skip to Content
Suffering builds character

4. 세션 관리

회원가입 처리가 성공하였을 경우, 서비스 내에서 UX를 고려하여 사용자의 로그인 과정까지 자동으로 처리해주거나, 사용자에게 직접 로그인을 수행하도록 유도할 수 있음

로그인이 성공한 이후에는 인증된 사용자 정보를 관리해야 함

이러한 인증된 사용자 정보를 세션(Session)이라고 하며,

세션 정보를 바탕으로 Next.js와 같은 클라이언트 애플리케이션은 사용자의 현재 로그인 상태나 특정 기능을 수행할 권한이 있는지 등을 확인하는 처리를 수행할 수 있음

1. 세션 관리, Session Management

Session 관리란 요청 전반에 걸쳐서 특정 사용자의 인증된 상태를 확인하고 보장하기 위한 메커니즘으로

다음과 같은 작업들이 Session 관리 대상에 포함됨

  1. 인증이 성공하였을 경우
    → 백엔드 서버로부터 응답 받은 데이터를 기반으로 Session 정보(ex. Session 쿠키)를 생성

  2. Session 정보를 어디에 보관할 것인지?
    ex. 쿠키, 로컬, Session 스토리지, DB 등

  3. 사용자가 서비스를 잠시 이용하지 않다가 다시 돌아왔을 경우?
    → Session 정보 갱신

  4. 사용자가 로그아웃 하거나 Session의 유효 기간이 경과되었을 경우?
    → Session 정보 제거

2. 세션 관리 전략

세션 정보를 관리하는 전략은 크게 두 가지 방식이 있음

2-1. Stateless, 상태를 유지하지 않는 관리 방식

세션 정보에 포함되는 데이터나 토큰(JWT)을 브라우저의 쿠키나 스토리지에 저장하는 방식

쿠키는 각 HTTP/HTTPS 요청마다 서버로 전달되고, 서버에서 세션 정보를 검증하도록 함 이 방법은 간단하지만 제대로 구현하지 않으면 보안에 취약할 수 있음

2-2. Stateful, 세션 정보를 DB에 저장하는 관리 방식

세션 정보에 포함되는 데이터나 토큰을 데이터베이스에 저장, 사용자 브라우저(쿠키)에는 암호화된 세션 ID 값만 저장됨

이 방법은 Stateless 방식에 비해 보다 안전하지만, 세션 정보를 데이터베이스에 보관하기 때문에 이를 조회하는 과정에서 서버 리소스(IO)를 더 사용할 수 있으며, 그에 따라 구현과 관리가 더 복잡해질 수 있음

💡
Tip

Next.js의 세션 관리 라이브러리
Next.js에서는 세션 관리 라이브러리로 iron-session or Jose 등을 추천함

Last updated on