본문으로 건너뛰기
Galaxy-Apple Bridge — 갤럭시 알림을 애플워치로 구성도

개인 제품 › 기기 연동

Galaxy-Apple Bridge — 갤럭시 알림을 애플워치로

갤럭시 알림을 종단간 암호화 릴레이로 iPhone·Apple Watch에 전달하고 워치 답장을 되돌리는 앱 — 본인 기기로 사용 중, 스토어 미출시

개인 사용
기간
2026.09 ~ 2026.10 (커밋 기준(2026-09-02 PRD 초안 ~ 09-08 집중 개발, 10-02 릴레이 상시 기동 전환))
상태
본인 기기(갤럭시 폴더블·iPhone·Apple Watch)로 사용 중(본인 확인 2026-10-30), 릴레이는 본인 Mac 에서 상시 기동(2026-10-30 상태 확인 정상). App Store Connect 업로드(1.0 (1))까지 — 심사·출시 아님, TestFlight 미완
맥락
개인 프로젝트 — 갤럭시 폰과 iPhone·Apple Watch 를 함께 쓸 때 생기는 알림 단절을 풀려고 만든 앱
역할
제품 정의·작업 순서 지시(PRD → Codex 2회 → 실행계획 → 단계별 TDD), 유료 개발자 계정·릴레이 상시화 결정, 실기기 시험(워치 답장·실제 문자 왕복)
구현
구현 Claude Code(TDD 단계별) · 독립 검증 Codex 67회차(PRD·실행계획·단계·산출물) · 부재 중 큰 결정은 Codex 와 상의하도록 위임
기술
TypeScript(Node 24)·Vitest, Swift 6(iOS 26·watchOS 26, XcodeGen), Kotlin(Android, Robolectric·계측 테스트), APNs·Notification Service Extension, P-256 신원 키(Secure Enclave·StrongBox)·AEAD, JSON Schema 계약·언어 간 golden vector, Tailscale Funnel, launchd, Prometheus 지표

핵심 수치.

실측

샘플 알림 워치 답장 → 갤럭시 실행 2/2

실기기 3대(갤럭시 폴더블·iPhone 16 Pro·Apple Watch Ultra 3), 유료 팀 정식 빌드, APNs 웨이크 3/3, 2026-09-06(실제 문자 답장 도착은 별도 본인 확인)

실측

교차 E2E 14/14

Android 에뮬레이터 ↔ Mac 릴레이 ↔ iOS 시뮬레이터, 양방향 해제·릴레이 재시작·페어 해제·평문 유출 검사 포함, 2026-09-03

집계

Codex 검증 67회차

PRD 3회·실행계획 3회·단계별 2~4회·산출물·HTML 보고서, 2026-09-02~09-06

개요

Galaxy-Apple Bridge 는 갤럭시 폰에 온 알림(사용자가 고른 앱만)을 종단간 암호화(E2EE)해 릴레이 서버로 보내고, iPhone 과 Apple Watch 에 표시한 뒤 워치에서 한 답장·해제를 갤럭시로 되돌려 보내는 개인 제품이다. Galaxy 앱·iPhone 앱과 알림 확장(NSE)·watchOS 앱·릴레이 서버의 네 부분은 2026-09-02 PRD 초안부터 09-08 까지 7일의 집중 기간에 Claude Code 가 구현했다(커밋 146개 중 145개). 2026-10-02 부터 릴레이를 본인 Mac 에서 상시 기동하고 있으며, 본인이 지금도 사용한다(본인 확인 2026-10-30).

문제

  • 갤럭시 폰과 iPhone·Apple Watch 를 함께 쓰면 두 생태계가 닫혀 있어 갤럭시 알림을 손목에서 볼 수 없다. 반대 방향(iPhone → 갤럭시)은 iOS 가 다른 앱 알림을 읽는 API 를 주지 않아 불가하다.
  • 개인 알림이 중계 서버를 거치므로 서버가 내용을 볼 수 없는 구조여야 했다.

본인 역할

  • 작업 방식 지시: 첫 지시(2026-09-02)로 순서를 정했다 — PRD 보완 → Codex 2회 검증 → 실행계획 → Codex 2회 → TDD 단계별 개발(단계마다 Codex 2회) → 산출물. 자리를 비우는 동안에는 Claude Code 가 가정을 명시해 진행하고 큰 결정은 Codex 와 상의해 기록하도록 위임했다.
  • 비용·운영 결정: 유료 Apple 개발자 계정 가입(2026-09-05)으로 푸시·알림 확장·워치 빌드 경로를 열었고, Mac 재시동 때마다 릴레이가 꺼지자 launchd 상시 기동을 승인했다(2026-10-02).
  • 실기기 시험·결함 보고: 워치 표시·답장과 실제 문자 → 워치 답장 → 상대 도착을 직접 확인했고, 「연속 알림 중 워치로 답장하면 다음 알림이 암호화된 상태로 오거나 빠진다」는 증상을 보고해 구조 변경으로 이어졌다.

핵심 판단

  1. 범위를 「갤럭시 → Apple 단방향 + 워치에서 답장·해제 회신」으로 잘랐다. iOS 제약 때문이다. 통화 브리징·SMS 발신 대행·클립보드 자동 감시·다중 기기 페어링도 v1.0 비목표로 적었다.
  2. 릴레이는 평문을 볼 수 없게 설계했다. 하드웨어 보호 P-256 신원 키(Secure Enclave·StrongBox), 방향별 서브키와 AEAD 암호화, 6자리 확인 코드를 쓰는 페어링, 키 회전·전체 삭제를 넣고, 릴레이는 암호문 큐만 다룬다.
  3. 세 언어 구현이 같은 암호 형식을 쓰는지 게이트로 막았다. TypeScript 가 만든 golden vector 7종을 Swift·Kotlin 이 바이트 단위로 맞춰야 하고, 코어 포팅(Port Gate) → 에뮬레이터·시뮬레이터 교차 E2E(Sim Gate)를 통과해야 다음 단계로 갔다.
  4. 실사용 결함을 원인까지 추적해 구조를 바꿨다. 답장을 보내려고 잠깐 붙은 연결이 릴레이 큐를 받아 놓고 끊기는 것이 원인이었다. 답장 전용 「발신 전용 세션」과, 푸시에 암호문을 직접 실어 알림 확장이 그 자리에서 복호화하는 「인라인 봉투」로 바꿨다.

화면과 구성도

Galaxy-Apple Bridge — 갤럭시 알림을 애플워치로 구성도
구성도 — 직접 그린 그림(내부 주소·서버 이름 없음)
iPhone 앱 메인 — 연결·페어·키 상태와 Secure Enclave 신원 키(무료 계정 단계 시뮬레이터 화면, 2026-09-03 · 기기 식별자 가림)
갤럭시 앱 메인 — 알림 접근 허용·QR 페어링·내 데이터 내보내기/삭제·연결 제어(무료 계정 단계 에뮬레이터 화면, 2026-09-03)

과정

  • 09-03 코어·네이티브: 코어·릴레이(시험 256개) → Swift·Kotlin 포팅 → 세 앱 → 교차 E2E 14/14 → 설치 산출물.
  • 09-05~06 실기기: 무료 계정으로 설치·페어링, 유료 계정으로 APNs·워치 답장 첫 실측, 결함 4건 수정, 인라인 봉투 전환, App Store Connect 업로드.
  • 09-08~10-02 운영화: 워치 알림 처리 방식을 코드로 조사해 기록하고, 릴레이를 launchd 상시 기동으로 바꿨다.

결과

  • 실기기(갤럭시 폴더블·iPhone 16 Pro·Apple Watch Ultra 3, 2026-09-06): APNs 웨이크 3/3, 샘플 알림에 대한 워치 답장 → 갤럭시 실행 2/2. 별도로 실제 문자의 워치 답장이 상대에게 도착한 것을 사용자가 확인했다.
  • 카카오톡: 카카오톡 알림도 워치에서 답장하면 상대에게 전달됨을 사용자가 확인했다(시험 기록은 문자만).
  • 시험: 2026-09-06 시험은 TypeScript 269 · Swift 79 · Kotlin 코어 64건 통과. 커버리지(라인 TypeScript 92.1%·Swift 93.8%·Kotlin 94.4%)와 교차 E2E 14/14 는 09-03 단계 측정이다.
  • 처리 한계(실제 네트워크 지연이 아님): 한 프로세스 안 loopback 으로 60초 동안 5쌍·초당 500건, 30,000건 송수신 오류 0, 종단 p95 1ms(2026-09-03).

구성요소별 상태

구성요소상태검증 종료 근거남은 일
Galaxy(Android) 앱개인 사용알림 전달·답장과 재설치 뒤 자동 연결을 실기에서 확인. 해제 동기화는 교차 E2E 시험 기록해제 동기화 실기 검증, 대화 삭제가 iPhone 에 1건만 반영되는 결함
iPhone 앱·알림 확장(NSE)개인 사용유료 팀 정식 빌드, 잠금 상태 APNs 웨이크 3/3, 인라인 봉투 복호화알림 확장이 해제를 처리하면 알림이 남는 결함
watchOS 앱개인 사용워치 표시(본인 확인), 샘플 답장 2/2배터리(목표 24시간 3% 이하) 미측정
릴레이 서버운영 중launchd 상시 기동(2026-10-02~), 2026-10-30 상태 정상Mac 1대 의존
스토어 배포작업 완료(업로드까지)App Store Connect 업로드 1.0 (1)(2026-09-06)TestFlight·심사·출시는 하지 않음

한계와 다음 단계

  • 실제 망(셀룰러·외부망) 종단 지연, 워치 배터리, 여러 망 조합의 반복 측정은 아직 하지 않았다. 위의 1ms 는 서버 처리 한계일 뿐이다.
  • 2026-09-08 코드 조사에서 해제 관련 결함 2건을 새로 찾았고, 그 뒤 수정 기록은 없다.
  • App Store Connect 업로드까지만 했고 TestFlight·심사·출시는 하지 않았다. 배포 범위는 본인 개발자 팀 서명으로 제한된다.
  • 릴레이가 본인 Mac 1대에 의존한다. 수정 뒤 이전 빌드가 돌아 알림이 자리표시자로 온 사고(2026-09-06) 뒤 「수정 후 빌드·재시작」을 운영 규칙으로 정했다.
  • iPhone → 갤럭시 방향 알림은 OS 제약으로 불가하다. 워치 실사용 화면은 새로 찍어야 한다.

기술

  • 코어·릴레이: TypeScript(Node 24), Vitest, JSON Schema 계약, Prometheus 지표, Tailscale Funnel, launchd. Apple: Swift 6(iOS 26·watchOS 26), APNs, Notification Service Extension. Android: Kotlin, 알림 리스너·RemoteInput, Robolectric.
  • 보안: P-256 신원 키(Secure Enclave·StrongBox), 방향별 서브키·AEAD, 페어링 기록 바인딩, 키 회전, App Group 저장소 AES-GCM 암호화.

AI 활용 방식

  • 도구가 한 일: Claude Code 가 Red → Green TDD 로 단계별 구현·시험·산출물 문서 14종·HTML 보고서 2종을 만들었다. Codex 가 PRD·실행계획·단계 코드·산출물을 67회차에 걸쳐 독립 검증했고, 잔여 P1 이 0 이 된 뒤에야 단계를 닫았다(남은 P2 는 이월 사유 기록).
  • 본인이 한 일: 위 「본인 역할」의 지시·결정·실기기 시험이다. AI 가 막히면 질문으로 멈추지 말고 가정을 기록해 진행하게 하는 위임 규칙도 정했다.

관련 사례.

S-TTS v2.0 「영상과 자막 동기화」 창. 위에 컬러바 시험 영상, 아래에 「영상과 자막을 같은 시간축에 표시합니다」 자막과 입력·번역 엔진 선택, SRT/VTT 가져오기, 재생 슬라이더가 보인다.

실시간 번역

개인 사용

S-TTS 실시간 음성 번역 자막

재생 중인 영상 음성을 Mac 안에서 인식·번역해 한국어 자막으로 띄우는 앱 — macOS판 개인 사용 중, iOS·Android 프리뷰 개발 중

확정 자막 382건 · 오류·overrun·크래시 0 · 4.4시간 연속 실행(VLC 일본어 클립 반복), 2026-08-17

2026.08 ~ 진행 중상세 사례

킷의 HTML 슬라이드 양식 — 「이 문서 보는 법」 장에 조작 키 표와 표기·묶음 색 안내, 아래 진행 막대

방법론·에이전트

운영 중

2-AI 개발 방법론과 에이전트 운영

만드는 AI와 검사하는 AI를 나누고, 검증이 끝나지 않을 때 멈추는 규칙과 「통과」를 부풀리지 않는 기록 규칙을 킷으로 만들어 운영했다

1.5.0 → 1.12.0 · 방법론 킷 판 이력 2026-09 ~ 10, 배포 16파일 — 킷 회귀 878 PASS·0 FAIL은 Codex 응답 대역을 쓴 회귀 시험

2026.04 ~ 2026.10상세 사례

AlphaSignal 예측 모드 A~D 비교표. 모드별 핵심 구성, 스코어링 요소 수, 투자 회피 규칙, 실행 시각, 시간외 반영, 속도, 적합 용도를 비교한다.

데이터 자동화

실험

AI 주식 예측·모의투자 실험

주가 예측 백테스트 → 모의 체결 → 실시간 판단 플랫폼으로 이어진 개인 실험 — 실거래 없음, 수익 주장 없음

적중률 58.3% · AlphaSignal 스코어러 v12, 2025년 2월 20거래일, 매일 상위 15종목의 다음 거래일 상승 적중(v7 49.8%에서 개선)

2026.02 ~ 진행 중요약 사례