session: server || client

eesope·2025년 4월 2일

elixir

목록 보기
5/5

두 접근 방식 모두 "세션"을 식별하는 고유 ID를 클라이언트와 서버 간에 공유한다는 점에서는 유사하지만, 관리 방식과 사용 목적에 있어 차이가 있습니다.


1. Plug.Session 기반 세션

  • 서버 중심 관리:
    Plug.Session은 Phoenix 애플리케이션에서 기본적으로 제공하는 미들웨어(plug)입니다.
    클라이언트가 처음 요청할 때, 서버는 고유한 세션 ID를 생성하고, 이를 쿠키(서명되거나 암호화된 형태)로 클라이언트에 전달합니다.

  • 자동 통합:
    이 방식은 Phoenix의 라우팅, 컨트롤러, LiveView 등에서 자동으로 사용할 수 있으며, 서버 측에서 쉽게 세션 데이터를 읽거나 쓸 수 있습니다.
    예를 들어, 로그인 상태나 사용자 선호 설정을 관리할 때 사용합니다.

  • 보안 및 표준화:
    서버에서 쿠키에 저장된 세션은 보안 서명이나 암호화를 통해 위변조를 방지하며, 기존의 HTTP 요청/응답 사이클에 통합되어 있습니다.


2. 클라이언트 측 세션 ID 생성 (LiveView Hook 방식)

  • 클라이언트 중심 관리:
    위 예제처럼 브라우저의 localStorage를 이용해 클라이언트가 직접 고유한 세션 ID를 생성합니다.
    이 방식은 사용자가 페이지를 새로 고침해도 localStorage에 저장된 ID를 그대로 사용하여, 같은 ID를 유지할 수 있도록 합니다.

  • 사용자 정의 및 유연성:
    클라이언트 측에서 세션 ID를 관리하면, 서버 측 Plug.Session과 별개로 특정 로직(예: 게임 참가 식별, 익명 사용자 추적 등)을 위해 맞춤형 세션 관리를 구현할 수 있습니다.
    이 경우 LiveView 훅으로 생성된 ID를 서버로 전달한 후, GenServer나 다른 프로세스에서 이 ID에 기반해 상태를 관리할 수 있습니다.

  • 독립적 저장소:
    localStorage에 저장되므로, 브라우저 세션(브라우저 종료 시까지 혹은 명시적으로 지우기 전까지)에 지속되며, 쿠키를 사용하지 않고 클라이언트 자체적으로 보관됩니다.


언제 어떤 방식을 선택해야 할까요?

  • Plug.Session 사용 권장 상황:

    • 표준 웹 애플리케이션에서 사용자 인증, 기본적인 상태 유지 등 일반적인 세션 관리가 필요할 때.
    • Phoenix의 기존 미들웨어와 통합되어, 보안 및 데이터 관리를 서버 측에서 일원화하고 싶을 때.
  • 클라이언트 측 세션 ID 생성 사용 권장 상황:

    • 특정 실시간 애플리케이션(예: 게임)에서 사용자가 페이지를 새로 고침해도 동일한 식별자를 유지하고, 이를 통해 게임 상태를 추적하려고 할 때.
    • 클라이언트 측에서 보다 유연하게 세션 ID를 관리하거나, Plug.Session이 제공하지 않는 커스텀한 동작(예: localStorage 활용, 별도 UI와의 연동 등)이 필요할 때.

결국 두 방식은 프로그램 디자인 및 전략 선택의 차이입니다.
Phoenix 기본 세션(Plug.Session)은 표준적인 웹 애플리케이션 요구사항을 충족시키기에 적합하지만, 실시간 상호작용이 중요하고 특정한 사용자 경험(예: 게임에서의 지속적 식별자 유지)을 구현하고자 한다면 클라이언트 측 세션 ID 생성 방식이 더 유리할 수 있습니다.

profile
go simple 🧑🏻‍💻

0개의 댓글