한국어
  • 게스트 모드
  • 익명 사용자
  • 사용자 전환

Logto 에서 게스트 모드(익명 사용자) 구현 방법

게스트 세션 관리, OIDC 인증, 게스트 데이터를 사용자 계정으로 안전하게 병합하는 3단계 패턴을 통해 Logto 로 게스트 모드를 구현하는 방법을 알아보세요.

Yijun
Yijun
Developer

사용자 인증에 몇 주를 낭비하지 마세요
Logto로 더 빠르게 안전한 앱을 출시하세요. 몇 분 만에 사용자 인증을 통합하고 핵심 제품에 집중하세요.
시작하기
Product screenshot

많은 앱들이 사용자가 회원가입을 하기 전에 기능을 체험할 수 있도록 합니다. 예를 들어 장바구니, 문서 초안, 저장된 환경설정 등이 있습니다. 사용자들은 이런 "게스트 모드"가 그냥 잘 동작하길 기대하죠.

하지만 Logto (혹은 어떤 OIDC 제공자)로 인증을 사용한다면 이렇게 익명 사용자를 어떻게 처리해야 할지 궁금할 수 있습니다.

짧은 답변: Logto 는 인증을 담당하고, 너의 앱은 게스트 세션을 관리합니다. 두 가지는 별도의 역할이에요.

이 글에서는 Logto 에서 게스트 모드를 구현하는 간단한 3단계 패턴을 소개할게요. 다음과 같은 방법을 배울 수 있습니다:

  • 백엔드에서 게스트 세션 관리하기
  • 게스트가 Logto 를 통해 회원가입하기
  • 게스트 데이터를 진짜 사용자 계정으로 병합하기

Logto에서 "익명 로그인"이 없는 이유

Logto 가 "익명 로그인" 기능을 지원한다고 기대할 수도 있습니다. 예를 들어 API를 호출해서 토큰을 받고, 아무런 유저 인터랙션도 없이 진행하는 식이죠.

하지만 OIDC 는 그렇게 동작하지 않습니다. 그 이유는 다음과 같습니다:

OIDC 는 사용자 동의를 중심으로 합니다. 핵심은 "이 사람이 누구인가?"를 검증하는 거예요. 익명 토큰은 "누군가긴 한데, 우리가 누군지 몰라요"를 의미하고, 이건 OIDC 의 목적에 맞지 않습니다.

이렇게 생각해보세요:

  • 인증(Authentication) = 신원을 증명 ("너는 누구지?")
  • 세션 추적(Session tracking) = 행동 기억 ("무슨 행동을 했지?")

게스트 모드는 세션 추적에 관한 것이고, 인증에 관한 게 아니에요. 그러니 인증 시스템에서 다룰 필요가 없는 거죠.

사실 이건 좋은 소식이에요. 시스템 역할이 명확히 나뉩니다:

  • Logto 는 신원(회원가입, 로그인, 토큰 등)을 담당
  • 너의 앱이(신원이 생기기 전까지) 게스트 세션을 담당

각 시스템이 자기 역할만 하면 됩니다.

3단계 솔루션

패턴은 다음과 같습니다: Guest → Auth → Merge

1단계: 인증 없이 게스트 세션 처리하기

너의 백엔드가 게스트 세션을 생성하고 관리합니다. 아직 Logto 는 필요 없어요.

사용자가 의미있는 행동(예: 장바구니에 담기 등)을 하면, 백엔드는 다음을 수행합니다:

  1. 게스트 ID (예: UUID 등) 생성
  2. 쿠키나 JWT 형태로 반환
  3. 사용자 행동을 이 게스트 ID 하에 저장

간단하게 갑시다. guest_sessions 테이블에 guest_id, data, created_at 컬럼만 있어도 충분해요.

2단계: Logto 로 로그인/회원가입 유도

사용자가 "회원가입" 또는 "로그인" 버튼을 클릭하면 표준 Logto OIDC 플로우를 시작합니다.

이 과정에서 게스트 ID는 쿠키나 저장소에 계속 남아있습니다. 인증이 성공하면 프론트엔드에는:

  • Logto 에서 받은 access token (실제 사용자 신원 토큰)
  • 이전에 발급받은 게스트 ID (게스트 데이터용)

이 둘이 같이 존재하게 됩니다.

3단계: 게스트 데이터를 인증된 사용자에게 안전하게 병합하기

이제 둘을 연결해주세요. 백엔드 API에 아래와 같이 호출합니다:

백엔드는 병합하기 전에 둘 다 검증해야 합니다:

  1. 액세스 토큰 검증 → user ID 를 추출. Logto 로 하는 방법은 이 가이드 참고하세요.
  2. 게스트 ID 검증 → 진짜 백엔드가 발급한 게스트 세션인지 확인. 이게 매우 중요합니다 — 클라이언트에서 온 게스트 ID는 반드시 검증해야 해요.

검증이 통과하면 다음을 수행하세요:

  1. 게스트 데이터 를 사용자 계정으로 병합
  2. 게스트 세션 무효화

병합 로직은 비즈니스에 따라 다릅니다. 장바구니라면 물건을 합치고, 문서 초안이면 소유권 이전 등. 너가 결정하세요.

토큰 검증을 통한 merge 엔드포인트 보안 방법

merge 엔드포인트는 민감한 작업입니다. 아래를 꼭 지키세요:

  • access token 항상 검증. 요청 바디에 있는 user ID 만 읽지 마세요. 반드시 JWT 를 decode, verify 하세요. Logto 에서 하는 방법 참고.
  • guest ID 꼭 검증. DB 에 존재하는지, 만료되지 않았는지 확인하세요. JWT 라면 서명도 검증해야 합니다.
  • 인증 필수. merge 엔드포인트는 유효한 access token 없는 요청은 무조건 거부해야 합니다.
  • 게스트 세션에 TTL 설정. 30일(혹은 앱에 적합한 기간) 이후엔 방치된 세션을 정리하세요.

결론

Logto 를 활용한 게스트 모드는 아래와 같은 단순 패턴을 따릅니다:

  1. Guest (너의 앱): 회원가입 전 세션 관리
  2. Auth (Logto): 회원가입/로그인 인증 처리
  3. Merge (너의 앱): 게스트 데이터를 실제 사용자와 연결

이 패턴은 Logto 뿐 아니라 모든 OIDC 제공자에서 쓸 수 있어요. 핵심은 인증과 세션 추적을 분리해서 각각에 맞는 시스템이 관리하게 한다는 것입니다.