---
title: "📅 2026-06-02 (화) 작업일지 — 도메인 라이브·카카오 OAuth 자체처리·프로필 공개·차트 Y축"
category: "devlog"
document_type: "개발일지"
source_status: "generated"
knowledge_group: "03_history"
priority: "High"
purpose: "2026-06-02 개발일지(갭 복원). 정식 도메인 dallog.kr 라이브, 카카오 OAuth 자체처리 전환(KOE205 회피), 프로필 공개 대시보드/기록 스냅샷, 차트 Y축 라벨 정리를 시간 흐름으로 기록."
read_when: ["개발일지","갭복원","최신상태복구","2026-06","OAuth","도메인"]
updated: "2026-06-02"
work_timestamp: "20260602_191400"
context: "달록본레포CC (D:\\dallog\\dallog_git) — 작업일지 갭 복원. 근거: git log·KB 작업보고·핸드오프."
source_of_truth: "https://dallog-tools.hansbridge.co.kr/knowledge/"
---

# 📅 2026-06-02 (화) 작업일지

> **이 문서가 무엇인가 (비개발자용 한 줄 설명)**
> 달록이 정식 주소(dallog.kr)로 살아난 날의 기록이다. 그리고 카카오 로그인이 자꾸 막히던 문제(KOE205 오류)를 우리 쪽 서버가 직접 처리하는 방식으로 우회해 풀었고, "내 기록을 골라서 공개하는" 프로필 공개 기능과 그래프 세로축 숫자 표시를 다듬는 작업까지 진행했다.

이 날은 크게 네 갈래의 작업이 흘렀다. 오후에는 그래프 표시를 손보고, 저녁에는 정식 도메인 라이브와 맞물려 **카카오 로그인 오류(KOE205)** 를 단계적으로 추적·해결했으며, 마지막으로 **프로필 공개 스냅샷** 기능을 새로 올렸다. 도메인 전환(인프라)·인증(auth)·소셜 기능(profile)이 하루에 겹친, 베타 직전 정지(整地, 땅 고르기) 성격의 날이다.

---

## 1. 오후 — 그래프 Y축 라벨 정리 (15:10)

> 커밋 `cf9ffd3` · PR#29 — `fix(chart): Y축 라벨 소수점 제거 + 경계 라벨 숨김 (도메인 불변)`

대시보드 차트(그래프)의 **세로축(Y축) 라벨**이 소수점까지 노출되거나 위·아래 경계에서 라벨이 겹쳐 지저분하게 보이던 문제를 정리했다. 소수점을 떼어 정수로 떨어뜨리고, 차트 위/아래 끝에 붙는 경계 라벨은 숨겨 가독성을 올렸다. 데이터 도메인(축의 값 범위) 자체는 그대로 두어(`도메인 불변`) 그래프가 표시하는 실제 수치나 스케일은 바뀌지 않게 했다. 표시 레이어만 손댄 외과적(surgical) 수정이다.

| 항목 | 변경 전 | 변경 후 |
|---|---|---|
| Y축 라벨 | 소수점 노출 | 정수로 정리 |
| 경계(끝단) 라벨 | 겹쳐 보임 | 숨김 |
| 데이터 도메인 | — | 불변(수치·스케일 그대로) |

---

## 2. 저녁 — 정식 도메인 dallog.kr 라이브 + 카카오 OAuth 추적

이날 저녁의 본 줄기는 **정식 도메인 `dallog.kr` 라이브**와, 그에 딸려 터진 **카카오 로그인 오류 KOE205** 의 단계적 해결이다.

### 2-1. 허용 Origin 정비 (18:28)

> 커밋 `1c650d1` — `fix(auth-proxy): 허용 Origin에 dallog.kr·www·staging 추가`

새 도메인으로 들어오는 요청을 인증 프록시(auth-proxy, 로그인 토큰 교환을 대신 처리하는 우리 측 워커)가 거부하지 않도록, **허용 Origin(출처) 목록**에 `dallog.kr`·`www.dallog.kr`·staging 도메인을 추가했다. 도메인이 바뀌면 가장 먼저 막히는 지점이 이 출처 화이트리스트라, 라이브 전환과 함께 손본 것이다.

### 2-2. 1차 시도 — 카카오 스코프에서 이메일 제거 (18:28)

> 커밋 `7622aa6` · PR#30 — `fix(auth): 카카오 로그인 스코프 명시(닉네임·프사) — KOE205 이메일 스코프 제거`

**KOE205** 는 카카오 로그인이 **권한 없는 동의항목(account_email)** 을 요청할 때 카카오가 되돌려주는 오류다. 달록 카카오 앱이 아직 **비즈앱 검수 전**이라 이메일(account_email) 동의항목을 요청할 권한이 없는데, 기본 스코프(scope, 요청 권한 범위)에 이메일이 끼어 있어 로그인이 막혔다.

1차 해결은 스코프를 **닉네임·프로필사진만** 명시하고 **이메일 스코프를 제거**하는 것이었다. "검수 통과 후 account_email을 다시 추가하면 된다"는 메모를 남겨, 임시 회피임을 분명히 했다.

### 2-3. 최종 해결 — 카카오 OAuth 자체 처리 전환 (18:54)

> 커밋 `f4077c4` · PR#31 — `feat(auth): 카카오 OAuth 자체 처리 전환 — auth-proxy /kakao/exchange (KOE205 회피)`
> 변경: `src/App.tsx`(+9) · `src/lib/auth.ts`(±) · `src/pages/KakaoCallbackPage.tsx`(신규 99줄) · `workers/auth-proxy/index.js`(+157줄)

스코프만 손대는 1차 회피로는 한계가 있었다. **근본 원인은 Supabase의 카카오 provider가 `account_email`을 강제 요청한다는 점**이라, Supabase를 경유하는 한 비즈앱 검수 전에는 계속 KOE205로 막힌다. 그래서 카카오만큼은 **Supabase 경유를 끊고 자체 처리로 전환**했다.

흐름은 이미 자체 처리하던 네이버(naver)와 동일한 구조로 맞췄다.

```
카카오 로그인 버튼
  → kauth.kakao.com 직접 호출(인가 코드 발급)
  → /auth/kakao/callback (KakaoCallbackPage, 신규)
  → auth-proxy /kakao/exchange
       · 인가 코드 → 토큰 교환
       · 카카오 사용자 정보 조회
       · 카카오ID 합성 이메일(kakao_<id>@kakao.dallog.kr)로
         Supabase 사용자 생성/매칭
  → 로그인 완료
```

핵심은 **합성 이메일(kakao_&lt;id&gt;@kakao.dallog.kr)** 이다. 카카오가 실제 이메일을 안 줘도, 카카오 고유 ID로 가짜 이메일을 만들어 Supabase 사용자와 1:1로 매칭한다. 이로써 비즈앱 검수 없이도 카카오 로그인이 동작한다. 신규 페이지 `KakaoCallbackPage`가 콜백을 받고, auth-proxy 워커에 `/kakao/exchange` 엔드포인트(157줄)가 토큰 교환·사용자 동기화를 담당한다.

> ⚠️ **자격증명 처리** — auth-proxy의 `wrangler.toml`은 실제 카카오 키를 보유하지만, **평문 자격증명 미커밋 원칙**에 따라 커밋하지 않고 로컬에만 두었다. 배포 시 해당 키가 설정돼 있어야 동작한다.

자세한 결정 배경은 메모리 [[project_domain_dallog_kr]](정식 도메인 dallog.kr 확정·라이브 — OAuth 코드는 origin 기반이라 도메인과 무관하나, 카카오/구글 콘솔과 Supabase에는 dallog.kr 등록 필요)에 정리돼 있다.

---

## 3. 저녁 마감 — 프로필 공개 대시보드/기록 스냅샷 (19:14)

> 커밋 `8847da1` · PR#32 — `feat(profile): 프로필 공개 대시보드/기록 스냅샷 기능`
> 변경 12파일 · +1,575줄 — 신규: `migrations/2026-06-02_profile_publications.sql`, `lib/publications.ts`(385줄), `PublishModal`·`PublicRecords`·`ProfileRecords`·`PublicDashboardCard` 등

이 날의 큰 기능 작업이다. **"내 기록 중 일부만 골라서 공개 프로필에 박제"** 하는 스냅샷 공개 기능을 새로 올렸다.

설계의 핵심은 **공개 시점 동결 스냅샷(불변)** 이다. 공개 버튼을 누른 그 순간의 데이터를 떠서 `profile_publications` 테이블에 저장하고, 이후 원본 기록을 바꿔도 공개본은 변하지 않는다. 공개와 비공개를 명확히 가르고 프라이버시를 지키기 위한 결정이다.

| 구성 요소 | 역할 |
|---|---|
| `profile_publications` 테이블 + RLS | 공개/본인만 보기 권한 분리, 동결 스냅샷 저장 |
| `lib/publications.ts` (385줄) | 범위 필터(전체·1주일·1개월·프로젝트·키워드·현재화면·기간)·스냅샷 빌더·CRUD·재스냅샷 |
| `PublishModal` | 공개 범위 선택 모달 |
| `PublicRecords` | 공개 기록 뷰(달력/큰썸네일/주간/한줄) |
| `ProfileRecords` | 공개·비공개·범위수정·업데이트·삭제 관리 |
| `PublicDashboardCard` | 대시보드 섹션 재사용(readOnly) |
| `SocialProfilePage` | 데스크탑 2단 병렬(좌 기록·우 피드, 독립 스크롤)·모바일 전환형 |

특히 대시보드 섹션 컴포넌트에 **`readOnly` 옵션**을 추가하되 기본값을 `false`로 두어, 기존 동작은 그대로 두고(불변) 공개 뷰에서만 내부 fetch·필터를 차단하도록 했다. `note` 같은 **비공개 필드는 스냅샷에서 제외**해 프라이버시를 보호한다. 대시보드(Dashboard)와 기록(History) 화면에 "프로필에 공개" 버튼을 달았다.

> ⚠️ **배포 전 선행 작업** — 이 기능은 `profile_publications` 마이그레이션을 **Supabase에 수동 적용**한 뒤에야 동작한다. 상세는 메모리 [[project_profile_publications]] 참조.

---

## 4. 이 날의 결과 요약

| 시각 | 커밋 | 영역 | 결과 |
|---|---|---|---|
| 15:10 | `cf9ffd3` (PR#29) | chart | Y축 라벨 정수화·경계 숨김, 도메인 불변 |
| 18:28 | `1c650d1` | auth-proxy | dallog.kr·www·staging Origin 허용 |
| 18:28 | `7622aa6` (PR#30) | auth | 카카오 스코프 이메일 제거(1차 회피) |
| 18:54 | `f4077c4` (PR#31) | auth | 카카오 OAuth 자체처리 전환(근본 해결) |
| 19:14 | `8847da1` (PR#32) | profile | 프로필 공개 대시보드/기록 스냅샷 |

- **정식 도메인 라이브** — `dallog.kr`가 살아나며 인프라가 정식 단계로 올라섰다.
- **카카오 로그인 정상화** — KOE205를 스코프 회피(1차) → 자체 처리 전환(최종)으로 풀어, 비즈앱 검수 전에도 카카오 로그인이 동작한다.
- **프로필 공개 기능 신설** — 골라서 공개하는 동결 스냅샷 체계가 들어왔다(배포 전 마이그레이션 수동 적용 필요).

---

## 관련 페이지

- 작업보고 #76 — 260602 dallog-kr 라이브·OAuth 3종·카카오 B안·그래프 라벨 fix (상세는 그쪽 참조)
- 작업보고 #79 — 프로필 공개 대시보드/기록 (상세는 그쪽 참조)
- 핸드오프 #20 — 2026-06-02 도메인·OAuth
- 메모리 [[project_domain_dallog_kr]] · [[project_profile_publications]]
- 이전 개발일지 #15 — 2026-05-30 / 다음 시리즈 — #17 2026-06-04

## 작업 리드타임

차트 라벨(15:10) → 도메인·OAuth·프로필 공개(18:28~19:14), 약 4시간 흐름의 하루치 기록 복원.

---
