게스트 모드(익명 사용자) 구현 및 로그토 사용자의 전환 방법
게스트 세션 관리, OIDC 를 통한 인증, 그리고 게스트 데이터를 사용자 계정에 안전하게 병합하는 3단계 패턴을 사용하여 게스트 모드를 구현하고 로그토 사용자로 전환하는 방법을 알아봅니다.
많은 앱에서 사용자는 회원가입 없이 기능을 먼저 체험할 수 있습니다. 예를 들면 장바구니, 문서 초안, 저장된 환경설정 등이 있습니다. 사용자는 이런 "게스트 모드"가 기본적으로 잘 동작하기를 기대합니다.
하지만 로그토(또는 기타 OIDC 제공자)를 인증에 사용할 때 익명 사용자를 어떻게 처리해야 할지 고민할 수 있습니다.
간단히 말해: 로그토는 인증을, 여러분의 앱은 게스트 세션을 처리합니다. 각각의 관심사가 분리되어 있습니다.
이 글에서는 로그토로 게스트 모드를 구현하는 간단한 세 단계 패턴을 소개합니다. 여기서 배우게 될 내용은 다음과 같습니다:
- 백엔드에서 게스트 세션 관리하기
- 게스트가 로그토를 통해 가입할 수 있도록 하기
- 게스트 데이터를 실제 사용자 계정으로 병합하기
로그토에 "익명 로그인"이 없는 이유
로그토에 "익명 로그인" 기능이 있을 거라고 기대할 수 있습니다. 즉, API 호출만으로 토큰을 받고 사용자의 상호작용 없이 쓸 수 있는 기능이죠.
하지만 OIDC 의 동작 방식은 그렇지 않습니다. 그 이유는 다음과 같습니다:
OIDC 는 사용자 동의를 중심으로 만들어졌습니다. 즉, "이 사람이 누구인지"를 확인하는 것이 목적입니다. 익명 토큰은 "누군가이긴 한데, 누구인지는 모른다"는 말이 되어 의미가 사라집니다.
다시 정리하면:
- 인증(Authentication) = 신원 증명("너는 누구니?")
- 세션 추적(Session tracking) = 행동 기록("무엇을 했니?")
게스트 모드는 인증이 아닌 세션 추적의 영역입니다. 즉, 인증 시스템과는 별개입니다.
오히려 이게 좋은 소식입니다. 역할이 명확히 구분됩니다:
- 로그토: 신원(가입, 로그인, 토큰) 관리
- 여러분의 앱: 신원 생성 전 게스트 세션 관리
각 시스템이 설계된 역할에만 집중하면 됩니다.
세 단계 솔루션
패턴은 이렇습니다: 게스트 → 인증 → 병합
1단계: 인증 없는 게스트 세션 처리
여러분의 백엔드가 게스트 세션을 생성/관리합니다. 로그토는 아직 관여하지 않습니다.
사용자가 의미 있는 행동(예: 장바구니 담기)을 하면 백엔드는
- guest ID(예: UUID)를 생성
- 쿠키나 JWT 로 반환
- 게스트 ID 별로 사용자 행동을 저장
정말 간단하게, guest_sessions 테이블에 guest_id, data, created_at 정도만 있으면 충분합니다.
2단계: 사용자가 로그토로 로그인하도록 유도
사용자가 "회원가입" 또는 "로그인"을 누르면, 표준 로그토 OIDC 플로우를 실행합니다.
이때 게스트 ID 는 쿠키/스토리지에 그대로 남아 있습니다. 인증이 끝난 후 프론트엔드에는
- 로그토 access token (사용자 신원)
- 이전의 게스트 ID (게스트 데이터)가 동시에 존재합니다.

