← /log
2026-04-09

개발 로그

2,032 words·raw from wai-vault/02-DevLog

2026-04-09 개발 로그

세션 요약

Nexus Block 1 — 출시 전 외부 서비스 슬롯 13개 신축 (B 모드)

  • 키 미등록 상태에서도 서버/앱 정상 기동
  • 키 주입 시 .env 추가 + restart 만으로 즉시 활성화 (재배포 X)
  • 19 step 전체 완료 + 2 retro 항목 처리

핵심 인프라 발견 + 복구

  • [RETRO] 스테이징 우회: TODO.md의 "스테이징 서버(:18791)" 기술 사실 오류 발견 — 18791은 Yjs collab 서버, 별도 staging 인스턴스 X
  • claude-bridge-staging 신축 (port 18792 HTTP / 18793 Yjs): systemd unit + .env + nginx 무수정 + DOTENV_PATH 격리
  • webhook/modules/config.jsDOTENV_PATH + WAI_WORK_DIR env override 도입 → staging 이 prod .env 의 R2/CF 키 fallback 으로 흘려서 prod 데이터 오염 위험 차단
  • 이후 모든 step staging-first 워크플로우 강제

커밋 (양쪽 레포 합산 23개)

w-ai-agents (15개)

Commit내용
2687d6fdocs: Block 1 외부연동 env 슬롯 13개 추가
9df681ffeat: config.js 외부연동 18 변수 + EXTERNAL_FEATURES 9 플래그 + /health 노출
58965effeat: Google OAuth 서버 슬롯 + /auth/google/url|callback
ea57fa3infra: Staging Bridge 신축 — claude-bridge-staging :18792
7486376fix: config.js DOTENV_PATH + WAI_WORK_DIR env override
0d28fb8feat: Sentry 서버 슬롯 — @sentry/node ^10.47.0
d04b9b6feat: Naver OAuth 서버 슬롯
147a327refactor: config.js OPENROUTER_API_KEY SSoT 단일 참조
416a235feat: AWS SES 슬롯 — modules/mailer.js
e6eb8fafeat: 국세청 사업자등록 상태조회 슬롯
25c23acfeat: 토스페이먼츠 슬롯 — modules/payments.js
dcb0ad7feat: 알리고 알림톡 슬롯 + 이메일 폴백 체인
35e3fddfeat: Popbill 전자세금계산서 슬롯 + 대기 큐
f5f9238feat: /health features_meta — server/client 슬롯 가시성
af009b7test: block1-smoke.js — 13 슬롯 + 회귀

board-approval-system (8개)

Commit내용
8bb20f4docs: Nexus 앱 .env.example 생성 + Block 1 외부연동 슬롯 8개
5b00b4dfeat: Login.jsx Google OAuth 슬롯 + /health features 바인딩
7df2e4afeat: Sentry 앱 슬롯 — @sentry/electron main + renderer
2787d8bfeat: PostHog 슬롯 — analytics.js + PIPA strict opt-in
94fbe26feat: Login.jsx Naver OAuth 슬롯
914acbcfeat: electron-builder.config.cjs — Azure Trusted Signing 슬롯
eb7d78bfeat: Apple Developer 슬롯 — electron-builder mac notarize
c710033feat: Settings → 외부 연동 상태 패널 (13 슬롯 가시성)

Block 1 슬롯 13개 현황

서버 사이드 9개 (/health.features)

슬롯상태코드 위치
openrouter✅ 활성 (실키 OPENROUTER_API_KEY)router.js, image-gen.js, monitor.js
google_oauth⏸ 키 대기modules/auth-oauth.js
naver_oauth⏸ 키 대기modules/auth-oauth.js
sentry_server⏸ 키 대기claude-bridge.js init
aws_ses⏸ 키 대기modules/mailer.js
hometax_biz⏸ 키 대기modules/biz-lookup.js
toss_payments⏸ 키 대기modules/payments.js
aligo_alimtalk⏸ 키 대기 (mailer 폴백)modules/alimtalk.js
popbill_tax_invoice⏸ 키 대기 (SQLite 대기 큐)modules/tax-invoice.js

클라이언트 사이드 4개 (system:client-features IPC)

슬롯상태코드 위치
sentry_app⏸ 키 대기electron/main.js + src/main.jsx
posthog⏸ 키 대기 (PIPA strict opt-in)src/lib/analytics.js
azure_sign⏸ 키 대기electron-builder.config.cjs win
apple_dev⏸ 키 대기electron-builder.config.cjs mac

키 주입 시 활성화 절차

  1. 서버 9개: /home/openclaw/w-ai-agents/.env 에 키 추가 → systemctl restart claude-bridge[sentry|google|naver|...] 활성화 로그 + /health.features 자동 반영
  2. 앱 4개: .env 에 VITE_/SENTRY_DSN_APP/POSTHOG_KEY/AZURE_SIGN_/APPLE_* 추가 → npm run electron:build → 새 .exe/.dmg → 사용자 재배포
  3. 앱 Settings → 외부 연동 탭 이 13개 전부 실시간 표시 (30초 폴링)

검증 결과 (block1-smoke.js)

  • Staging (18792): 16/16 통과
  • Prod (18790): 16/16 통과
  • HTTPS nginx 경유 회귀: /api/health 200, /api/auth/google/url 503, /api/auth/naver/url 503
  • Bridge prod 메모리: 80.6 MB (Sentry + AWS SDK 추가에도 정상)
  • Bridge staging 메모리: 95.7 MB
  • 시스템 RAM: 381 Mi / 3.8 Gi (10%)
  • 디스크: 7.5G / 36G (23%)

발견된 기술부채 (Block 1 범위 밖, 메모만)

  1. test-integration.js:117['admin', 'super_admin'] 만 인정 → company_admin/company_user 로그인 시 회귀 가능 (기존 이슈)
  2. nginx sites-enabled/dashboard 에 Bridge Bearer token 평문 하드코딩 (Private 컨텍스트, 사토시 판단 영역)
  3. [token] Claude token expires in -71h, refreshing... CLI refresh did not extend expiry — Claude CLI 토큰 3일 전 만료, refresh 실패 (별도 이슈, Block 1 무관)
  4. nginx sites-enabled/staging 레거시 블록 — listen 8080, /api/ → 18791 (Yjs 포트로 잘못 라우팅, 깨진 상태). Block 1 범위 외 정리 필요
  5. Staging 의 evolution scheduler 등록 (staging 에서 자동 실행은 불필요, 끄는 게 안전)
  6. dotenv deprecation: npm install --production--omit=dev 로 전환 권장 (STAGING-DEPLOY.md 갱신 후보)

다음 작업

  1. 키 발급 + 주입: 사토시가 외부신청 가이드의 13개 항목 발급 → .env 채우기 → restart
  2. Electron OAuth loopback 플로우: Login.jsx Google/Naver 버튼이 실제 OAuth 완주하려면 main.js 에 loopback HTTP 서버 + IPC oauth:start 채널 + 콜백 처리 구현 필요 (현재 슬롯은 503 검증까지만)Web 전환 결정으로 폐기 (4/9 23:00)
  3. Step 16 Settings 패널 실사용 테스트: 키 일부 주입 후 13 행 상태가 맞게 표시되는지 시각 확인
  4. technical debt 항목 처리: nginx staging 레거시 정리, evolution scheduler staging 비활성, [token] CLI refresh 디버깅

🌐 Block 2 결정 (4/9 22:30~23:00) — Nexus Web First 전환

핵심 결정

Nexus 는 Web 앱이 1차, 데스크톱(Electron/Tauri)은 그 이후.

Loren 코멘트:

  • "웹이 맞겠노 ㅋㅋ 앱은 그 이후네"
  • "클로드나, 챗지피티 처럼 직관적이여야겠네"

Why

  1. 가입 마찰 0 — SMB .exe 다운로드 거부감 극대 차단 (외부신청 가이드 "마찰 -50%" 원칙 극대화)
  2. 모바일/태블릿 자동 지원 — 한국 SMB 대표 휴대폰 사용률 90%+, 카페·출장에서 승인
  3. 배포 속도 1일 → 30초 — 코드 push → nginx 갱신 → 새로고침 = 즉시 최신
  4. Apple Developer ($99/년) + Azure Trusted Signing ($9.99/월) 폐기 → 연 14.6만 절약 + D-U-N-S 검증 1-2주 + Azure 검증 3-7일 절약 = 출시 시점 2-4주 앞당김
  5. OAuth (Google/Naver) redirect URI 자연스러움 — Electron loopback HTTP 서버 ~200줄 작업 0
  6. 토스페이먼츠 결제 위젯 web SDK 우선 설계
  7. PostHog funnel 정확도 ↑ (단일 도메인 추적)
  8. 대기업/공공 영업 가능 — ".exe 설치 금지" IT 정책 통과
  9. macOS 사용자 시장 1/3 회복 (Apple Dev 없으면 Gatekeeper 차단)
  10. 고객 지원 카테고리 1개 폐기 ("설치 안 돼요/SmartScreen/Antivirus/exe 안 열려요")
  11. 현재 Nexus 의 Electron 사용은 0% 필수 — main.js/preload.js/api-client.js 전부 web 으로 동작 가능
  12. 자동 업데이트 무관 — 새로고침 = 항상 최신 (electron-updater 폐기)

Block 2 = 17 step 마이그레이션 plan

별도 문서: 04-Business/nexus-block2-web-migration-plan.md


🚨 카페24 DNS 작업 결과 (4/9 23:30) — 실패

사토시 액션

카페24 콘솔에서 app.[company-domain] → [redacted-ip] A 레코드 추가 시도.

nslookup 결과

nslookup app.[company-domain]
서버: bns1.hananet.net
이름: [company-domain]
Address: [redacted-ip]             ← [company-domain] 의 카페24 가상호스팅 IP
Aliases: app.[company-domain]          ← app.[company-domain] 가 alias 처리됨 (CNAME)

문제

  • 목표 IP [redacted-ip] (VPS) 가 안 들어감
  • 대신 카페24 가 app.[company-domain][company-domain] 의 별칭(CNAME)으로 처리
  • 메인 도메인이 카페24 가상호스팅(공용 IP)에 묶여 있어 wildcard alias 정책이 적용된 것으로 추정

원인 추정 2가지

(A) 사토시가 잘못된 메뉴에 들어감 — "URL 포워딩" / "멀티도메인" / "추가 도메인" 등 (DNS 관리 메뉴와 다름)

(B) 카페24 가상호스팅 정책 — [company-domain] 가 가상호스팅에 묶여 있어 서브도메인 자동 wildcard

내일 사토시 첫 액션 (3가지 옵션)

옵션 1: 카페24 정확한 메뉴 재시도

cafe24.com 로그인
→ 우측 상단 "나의 서비스 관리"
→ 좌측 "도메인" 또는 "도메인 통합 관리"
→ [company-domain] 클릭
→ "도메인 부가 서비스" 가 아니라 ▶ "DNS 관리" 또는 "DNS 정보 변경"
→ "호스트 IP 정보" 또는 "DNS 레코드 추가" 탭
→ 호스트명: app  타입: A  IP: [redacted-ip]  TTL: 600

메뉴가 안 보이면 → 옵션 2 또는 3.

옵션 2: Cloudflare 무료 이전 (5분, 100% 해결) ⭐ 추천

1. cloudflare.com 가입 (무료)
2. "Add Site" → [company-domain] 입력
3. Cloudflare 가 카페24 기존 DNS 레코드 자동 import (모든 기존 설정 보존)
4. Cloudflare 가 알려주는 NS 2개 (예: ben.ns.cloudflare.com, lola.ns.cloudflare.com) 복사
5. 카페24 → 도메인 관리 → [company-domain] → "네임서버 변경" → Cloudflare NS 입력 → 저장
6. 5분~24시간 NS 전파 후 Cloudflare 콘솔 → DNS → Add Record:
   타입 A, 이름 app, IPv4 [redacted-ip], Proxy status DNS only (회색 구름)
7. 즉시 활성. Cloudflare SSL 자동 발급 (Let's Encrypt 보다 빠름)

부가 효과: CDN + DDoS 방어 + Cloudflare Pages 정적 호스팅 무료 (Block 2 배포에 활용 가능)

옵션 3: 카페24 1:1 문의

"[company-domain] 의 서브도메인을 다른 IP([redacted-ip]) 에 연결하고 싶다"

내일 사토시 결정 후 진행 흐름

  1. 옵션 1/2/3 중 결정 → 작업
  2. nslookup 으로 [redacted-ip] 확인되면 알려주기
  3. 즉시 Block 2 진행 (nginx + SSL + 정적 호스팅 + 코드 마이그레이션)

📋 오늘 종료 시점 상태 (4/9 23:35)

Git 동기화 상태

레포마지막 commit상태
w-ai-agentsc4604bf fix: Block 1 기술부채 #1 + #6✅ push 완료
board-approval-systemc710033 feat: Settings 외부 연동 패널✅ push 완료
wai-vault(이번 commit 으로 갱신 예정)⏳ 진행 중

VPS 상태

  • prod (claude-bridge :18790, :18791): 정상 가동, 마지막 동기화 f5f9238 (c4604bf 배포 X — 테스트 파일 + 문서 변경이라 restart 불필요지만 git pull 은 안 함)
  • staging (claude-bridge-staging :18792, :18793): 정상 가동, 같은 상태
  • 메모리: 시스템 381 Mi / 3.8 Gi (10%), 디스크 7.5G / 36G (23%)
  • Bridge prod 메모리 80.6 MB, staging 95.7 MB

Block 1 슬롯 13개 현재 상태

슬롯상태비고
openrouter✅ 활성 (실키)sk-or-v1-58b67...
google_oauth⏸ 키 대기503 응답 검증 완료
naver_oauth⏸ 키 대기503 응답 검증 완료
sentry_server⏸ 키 대기DSN null 안전 init 검증
aws_ses⏸ 키 대기mailer.send 폴백 검증
hometax_biz⏸ 키 대기bizLookup.lookup 폴백 검증
toss_payments⏸ 키 대기payments.confirmPayment 폴백 검증
aligo_alimtalk⏸ 키 대기alimtalk → mailer 폴백 체인 검증
popbill_tax_invoice⏸ 키 대기 (SQLite 큐)tax-invoice.issueInvoice 폴백 검증
sentry_app⏸ 키 대기 (Web 전환 시 @sentry/browser 로 교체)
posthog⏸ 키 대기 (PIPA opt-in)analytics.optIn 패턴
azure_sign🗑 Web 전환 시 폐기데스크톱 앱 X = 코드 서명 X
apple_dev🗑 Web 전환 시 폐기데스크톱 앱 X = 코드 서명 X

Block 2 완료 후 슬롯: 13 → 11 (서버 9 + 클라 2)

메모리 갱신 (4/9)

신규 추가 (vault 06-Claude-Memory/ 동기화 완료):

  • project_nexus_web_first.md — Web First 결정 + Why 12개
  • project_nexus_ux_chatgpt_level.md — UX 기준선 ChatGPT/Claude 수준 + 직관성 8원칙

미처리 기술부채

#항목상태
#1test-integration.js role 확장✅ commit c4604bf
#2nginx dashboard Bearer token 평문보류 (Private 컨텍스트, 사토시 판단)
#3Claude CLI token -71h refresh 실패사토시 직접 콘솔 (SSH interactive 안 됨)
#4nginx staging 레거시 (8080/18791)⏸ 사토시 OK 대기 (백업 + nginx -t 안전 plan 작성됨)
#5staging evolution scheduler off⏸ 사토시 OK 대기 (staging만, prod 무관)
#6STAGING-DEPLOY.md --omit=dev✅ commit c4604bf

다음 세션 (내일) 시작 시점

  1. 첫 메시지 시 읽을 것: MEMORY.mdproject_nexus_web_first.md + project_nexus_ux_chatgpt_level.md 자동 로드 → 컨텍스트 즉시 복원
  2. 사토시 첫 액션 대기 항목: 카페24 DNS 옵션 1/2/3 중 결정
  3. Block 2 plan 위치: 04-Business/nexus-block2-web-migration-plan.md (이번 commit)
  4. Block 1 완료 표시: 본 DevLog (위쪽 섹션)
  5. 기술부채 #4 #5 OK 받으면 즉시 진행 가능

기타 메모

  • 사토시 피로 표현 (4/9 22:30+) — "씨발 매일매일이 작업량 미친 거 같음" → 다음 세션에서 압박감 완화 필요. 결정 부담 줄이기. 명확한 옵션 + 추천만 제시.
  • 카페24 DNS 작업 실패 + 피로 → 다음 세션은 Cloudflare 옵션 강력 추천 (5분 + 영구 해결).