---
title: "📓 작업일지 — 카카오·네이버 콜백 앱 딥링크 복귀"
category: "worklog"
parent: "Claude Code 작업일지"
updated: "2026-07-06"
priority: "Medium"
purpose: "네이티브 앱에서 카카오·네이버 OAuth 로그인을 시도할 때, 콜백 처리 후 발급받은 토큰을 앱으로 돌려보내는 딥링크 처리를 콜백 페이지에 복귀시켜 앱 로그인이 정상 동작하도록 함."
read_when: ["카카오 로그인", "네이버 로그인", "OAuth 콜백", "딥링크", "kr.dallog.app"]
document_type: "개발일지"
source_status: "generated"
knowledge_group: "03_history"
work_timestamp: "20260706_174255"
source_of_truth: "https://dallog-tools.hansbridge.co.kr/knowledge/"
context: "달록 본레포(ccy-hansbridge/dallog), 커밋 c894f66."
---

# 작업일지 — 카카오·네이버 콜백 앱 딥링크 복귀

> 네이티브 앱에서 카카오나 네이버 계정으로 로그인하면, 로그인이 끝난 뒤 웹 브라우저에서 다시 앱으로 돌아와야 합니다. 이 "앱으로 돌아오는 다리" 역할을 하는 코드가 콜백 페이지에 다시 추가됐습니다. 웹에서 로그인하는 경우는 이 변경의 영향을 받지 않습니다.

## 1. 무엇을 했나

- `KakaoCallbackPage.tsx`와 `NaverCallbackPage.tsx`에 동일한 패턴의 분기를 추가.
- OAuth state 값이 `native_`로 시작하면(앱에서 시작된 로그인 흐름임을 의미) 토큰 교환에 성공한 뒤, 웹 세션(Supabase `setSession`)을 설정하지 않고 대신 `kr.dallog.app://auth/callback#access_token=...&refresh_token=...` 형태의 커스텀 스킴 딥링크로 리다이렉트하고 함수를 종료.
- 앱 쪽에서는 이 딥링크를 `appUrlOpen` 이벤트로 받아 자체적으로 `setSession` 처리를 하는 구조(앱 코드는 이 레포 범위 밖).
- `native_`로 시작하지 않는 일반 웹 로그인 흐름은 기존과 동일하게 `supabase.auth.setSession`을 그대로 호출하므로 무변화.

```tsx
// src/pages/KakaoCallbackPage.tsx (NaverCallbackPage.tsx도 동일 패턴)
if (state?.startsWith('native_')) {
  window.location.href = `kr.dallog.app://auth/callback#access_token=${data.access_token}&refresh_token=${data.refresh_token || ''}`
  return
}
// Supabase 세션 설정 (기존 웹 로그인 흐름)
const { error: sessErr } = await supabase.auth.setSession({ ... })
```

## 2. 주요 변경 파일

| 파일 | 내용 |
|---|---|
| `src/pages/KakaoCallbackPage.tsx` | `native_` state일 때 앱 딥링크로 리다이렉트하는 분기 추가 |
| `src/pages/NaverCallbackPage.tsx` | 동일 분기 추가 |

## 3. 관련 커밋

- `c894f66` feat(oauth): 카카오·네이버 콜백 앱 딥링크 복귀(native_ state → kr.dallog.app://) — 앱 로그인 지원, 웹 로그인 무변경 (2026-07-06)

## 4. 남은 이슈

커밋 메시지의 "복귀"라는 표현으로 보아 이전에 있던 로직이 어떤 이유로 제거되었다가 다시 추가된 것으로 보이나, 이 커밋 diff만으로는 이전 제거 경위는 확인되지 않는다. 별도로 언급된 남은 이슈는 없음.

