뇌에서 앱으로
지금까지 페퍼는 나만 쓰는 물건이었다.
내 계정, 내 채팅방, 내 Vault. 테스트 베드니까 그래도 됐다. 근데 가족이 쓰려면, 가족이 각자 로그인해서 들어와야 한다. 그 순간부터 완전히 다른 종류의 일이 시작됐다.
온보딩의 순서를 정하는 게 설계였다
무작정 로그인 화면 하나 띄우는 게 아니었다. 순서 하나하나가 결정이었다.
최종적으로 확정한 플로우:
Welcome (로그인 / 가입) → family_code 입력 (어느 가족인지) → Google OAuth (누구인지) → role 선택 (head / member / child) → 캘린더 · Gmail 연동 → FaceID 등록
각 단계가 왜 거기 있는지 다 이유가 있다.
family_code가 먼저인 이유. EP 02에서 "우리 가족만 쓰는 게 아닐 수 있다"며 가족 단위 데이터 격리를 처음부터 깔았다. 그 설계가 여기서 실체가 된다. 로그인한 사람이 어느 가족인지 먼저 알아야, 그 사람의 Vault도 채팅방도 올바른 격리 안으로 들어간다. 지금은 우리 가족 하나뿐이지만, 코드는 여러 가족을 받을 준비가 돼 있다.
role을 온보딩에서 받는 이유. EP 01의 Family Graph — 누가 누구에게 뭘 할 수 있는지. head/member/child 권한이 여기서 정해진다. 예를 들어 toss.transfer(송금 딥링크)는 head와 member만, child는 안 된다.
OAuth를 서버에서 처리한 이유
가장 고민한 기술 결정이 이거였다.
Google 로그인은 앱(클라이언트)에서 끝낼 수도 있다. 근데 페퍼는 로그인만 하는 게 아니라 내 캘린더와 Gmail을 계속 읽어야 한다. 그러려면 access token뿐 아니라 refresh token을 안전하게 저장하고, 만료될 때마다 서버가 알아서 갱신해야 한다.
그래서 OAuth를 서버사이드로 구현했다. Vercel에 /api/google/auth + /api/google/callback을 두고, 토큰은 DB(oauth_tokens)에 저장. 한 사람이 계정 여러 개를 붙일 수 있어야 하니(EP 02에서 이미 예상한 것) is_primary / secondary 구분도 넣었다.
이 결정이 나중에 EP 17에서 아프게 돌아온다. 조용히 죽는 토큰 하나가 브리핑 전체를 반쪽으로 만드는 사건 — 그건 나중에.
FaceID 게이트를 넣은 이유. Vault에는 가족의 금융 기록, 법적 문서가 들어간다. 폰을 누가 집어 들어도 열려선 안 된다. 그래서 앱 진입 앞에 로컬 생체인증을 세웠다.
5개의 탭
가족이 열었을 때 보이는 것.
Chat — @페퍼와 대화, 가족방, 1:1 Action — 할 일 (내가 / 페퍼가) Brief — 아침 브리핑 (날씨·캘린더·메일) Vault — 가족의 기억 (와인·레시피·맛집·문서) Shelf — 페퍼가 할 수 있는 것들 (capability on/off)
Chat/Action/Brief/Vault는 EP 01의 두 약속 — 챙겨주기와 시키면 하기 — 을 화면으로 나눈 것이다. Shelf는 좀 다르다. 가족이 페퍼의 능력을 켜고 끄는 곳. head/member만 토글할 수 있고, 이건 가족 공유다.
Attention Gate — 페퍼가 언제 끼어들지
여기서 작지만 중요한 결정을 했다.
가족방에서 페퍼가 매 메시지마다 반응하면 안 된다. 은수랑 은제가 자기들끼리 떠드는데 페퍼가 계속 끼어들면 시끄럽고 — EP 01에서 걱정했던 그 비용도 터진다. 아이들 장난 한 마디마다 LLM을 돌릴 순 없다.
그래서 Attention Gate를 세웠다. 가족방·DM에서는 @페퍼로 멘션할 때만 응답하고 타이핑 인디케이터를 띄운다. 이 판단을 API 레이어에서 먼저 걸러서, 멘션이 없으면 애초에 Pepper Core로 넘어가지도 않는다. 개인 페퍼방은 게이트 없이 항상 응답.
EP 01에서 "가벼운 판단은 저렴한 모델로, 두뇌가 필요할 때만 비싼 모델로"라고 했던 비용 철학이, 여기서는 아예 호출 자체를 안 하는 규칙으로 내려왔다. 가장 싼 LLM 호출은 안 하는 호출이다.
브레인을 만드는 일과, 그 브레인을 가족이 손에 쥘 수 있게 감싸는 일은 완전히 다른 종류의 일이었다. 로그인 순서, 토큰 갱신, 생체인증, 언제 끼어들지 — 페퍼가 똑똑한지와는 상관없는, 그냥 앱이 앱이 되기 위한 일들.
이제 그 안을 채울 차례다. 가장 눈에 보이는 것부터.