2026.06.15 작업일지 v1.0.0
오늘은 손이 여러 개여야 하는 날이었다. 메모요는 아이콘부터 결제까지 통째로 다듬고, 약먹자는 디자인 리프레시와 인앱결제를 동시에 머지하고, 더치페이는 아이콘을 새로 입히고 앱 화면까지 다크 톤으로 갈아엎었다. 회사 사이트의 위계를 정리했고, 인사이트 한 편을 발행했고, 밤에는 한 번도 안 써본 게임 엔진으로 새 프로젝트를 시작했다.
그런데 정작 본진(Mac)은 코드를 거의 짜지 않았다. 판단하고, 나눠주고, 결과를 리뷰하고, 머지했다. 오늘의 진짜 주제는 “무엇을 만들었나”보다 “어떻게 일을 나눴나”였다.
“앱 디테일한 수정은 맥미니 작업이야? 본진에서 못하는건가?” “맥미니 하라그래 이렇게 작업 종류 나누는게 깔끔한 것 같기도 하다”
메모요 — 아이콘부터 결제까지 통째로
메모요(simple_memo_app)가 오늘 가장 많이 손이 갔다. 다크 노트패드 아이콘과 스플래시로 교체하고(dd3ad8d, eb78f54), 더블 스플래시와 고양이 잔재를 걷어내고 버전 풋터를 “마이너스베타스튜디오”로 표준화했다(c171ae4). 스플래시 글자색은 amber에서 흰색으로 최종 결정(520e458).
톤은 후보 3종(Obsidian 다크 / Bear 따뜻 라이트 / Journal 퍼플)을 만들어 비교한 끝에 Obsidian 다크 무채색으로 확정(65e6cfd, 29f6974, 3d72714). FAB를 없애고 하단 바텀바(메모/새메모/설정)를 넣었고(785e7e2), 하단 AdMob 배너와 “광고 제거” 인앱결제를 붙였다(9a57d2b). 테스트 ID를 실제 ID로 교체(436efb8)하고, 설정에 “피드백 보내기”(mailto)를 추가했다(5783ada).
여기에 강대종이 실기기로 보면서 실시간으로 디테일을 잡았다. 공유 버튼을 우측에서 좌측 취소 옆으로 옮기고(cbcb945), undo/redo 버튼 간격을 균일화하고 미세하게 좌우로 옮기길 반복했다(57c283b, db2e497, df8c3c8, f707129, 52384fa) — “조금 오른쪽”, “살짝 왼쪽”의 연속이었다. 새 메모에서는 공유 버튼을 숨기도록 동작을 바꾸고 테스트도 그에 맞게 갱신했다. google_sign_in을 v6에서 v7로 마이그레이션(db4dcff)한 뒤, iOS 1.0.9+31을 App Store 제출용으로 빌드했다(3fac976).
약먹자 — 디자인과 결제를 동시에 머지
약먹자(yakmukja)는 디자인 리프레시와 인앱결제가 같은 타이밍에 굴러 머지 조율이 핵심이었다(T-260615-25). 앱 아이콘을 3번 시안(캡슐+초록 체크)으로 교체하고 스플래시를 동기화(3e44015), 홈을 톤-only로 재작업하면서 카운트다운을 들어내고 원본 레이아웃을 복원했다(5bfd30b). 하단 푸터 탭바(약목록/약등록/설정)를 넣고 우상단 기어와 FAB를 제거(d67c585), 휴지통(소프트 삭제·복원·30일 자동삭제)과 설정 화면 재구성을 더했다(6e112ea).
광고제거 IAP는 더치페이 패턴을 그대로 포팅했고(5d0551b), iOS productId를 reverse-DNS로 분기했다(d10daa8). 복용 요일 선택 기능(기본 매일)까지 들어오면서(9807f80, 4bacc58), design-B(#29) ↔ IAP(#30/#32) ↔ 요일선택(#31) 세 갈래를 home 기준 3-way로 두 번 재통합해야 했다(35b6ec0, 6caacf6). HiveField 충돌(weekdays 6→7)을 피하는 모델 조정도 동반됐다(c665be4).
더치페이 — 아이콘에서 다크 톤 리뉴얼로
더치페이(dutch_pay_calculator)는 아침엔 결제, 저녁엔 비주얼이었다. 광고제거 비소모성 IAP를 추가하고 1.0.5+9로 올려 BILLING AAB를 냈고(6c9e65a, 3219c22), iOS productId reverse-DNS 분기를 더했다(78549c5).
저녁엔 아이콘 작업으로 이어졌다(T-260615-27). ChatGPT로 만든 3번 시안을 flutter_launcher_icons로 iOS·Android 전 사이즈에 적용했는데(cb6ab63), 마스터 PNG의 모서리에 둥근 라운딩이 베이크돼 있어 “iOS가 또 둥글려서 이중 라운딩이 나지 않을까”가 걱정이었다. 픽셀을 직접 재보니 디자인이 에지 중앙까지 꽉 차고 모서리 라운딩은 5%뿐 — iOS 마스크(22%)가 그 검은 모서리를 통째로 잘라내는 구조였다. 그대로 적용해도 안전하다는 결론. “다듬자”는 결정에 따라 모서리의 순흑 tip을 주변 네이비로 방사 확장해 완전한 풀블리드로 만든 뒤 다시 생성했다(6275936). PR #20으로 머지(06b9450).
그리고 톤. 강대종이 Mobbin에서 직접 “split bill” 레퍼런스를 보고 다크 프리미엄(Revolut 결)을 골랐고, 본진이 그 방향을 컬러·타이포·컴포넌트 스펙으로 좁혔다(딥네이비→블랙 배경, 청록 네온 악센트, 1인당 금액 초대형 숫자). 승인된 스펙으로 맥미니가 앱 화면을 다크 톤으로 리스킨했다 — DarkColors 상수와 AppTheme.dark, 1인당 금액 38→64pt, 풀폭 알약 버튼. 계산 로직·결제·광고는 무변경. flutter analyze 0으로 PR #21까지 올라왔고, 머지 게이트는 수동으로 잡아 결과 화면 렌더를 확인하는 단계까지 왔다(T-260615-28).
회사 사이트 — “따로 노는 느낌”을 정리하다
낮엔 daejong-page와 회사 랜딩(kangdaejong.com)의 정체성을 손봤다. P4 Astro 리뉴얼 때 드롭됐던 /sorry와 /lab 시스템을 복구하고(T-260615-16), sorry·vibecoding 페이지를 다크 모노톤으로 톤 통일했다(T-260615-17, -18). nav 라벨을 apps에서 products로 바꾸고 첫이름을 SaaS 섹션으로 분리(c8ff4b1, af8e7c9), 텍스트 mβ를 마이너스베타스튜디오 로고 badge로 교체했다(8e73ac8).
핵심은 위계였다. apex(회사 랜딩)와 work(작업장)가 “따로 노는 느낌”이라는 지적에서 출발해, grill-me 5문으로 work를 회사의 “작업 일지”로 재포지셔닝하고 양방향 링크를 걸었다(T-260615-24, -22). timeline은 첫이름을 “런칭”에서 “유료 SaaS 라인 착수(토스 심사 대기)“로 사실 정정했다(c8fa246) — 실제 유료 런칭 전이라는 지적을 반영한 것.
인프라 — 어제 본 인사이트를 룰로 굳히다
어제 본 영상들에서 가져온 것들을 실제 forcing function으로 박았다. 대량 읽기를 저비용 서브에이전트에 위임하는 fresh-context 룰을 정식화하고(T-260615-08), AI가 만든 PR에 생성 프롬프트를 첨부하는 표준과 머지게이트 2단(루틴 자동/민감 수동)을 명문화했다(T-260615-09). 강대종 말투 가이드(voice playbook)를 만들어 자동발행 스킬에 주입(T-260615-10). 맥미니 챗봇이 AskUserQuestion 메뉴에서 동결됐던 재발을 막으려 텔레그램 출처 turn에서 그 도구를 하드 차단하는 PreToolUse hook을 5노드에 배포했다(T-260615-14).
저녁엔 인사이트 한 편을 발행했다 — Nate Herk의 “Learn These 6 AI Skills Now”. AI 사람 되기는 절대적 실력이 아니라 상대적이라는 것, 결과물엔 네 이름이 서명되니 taste가 중요하다는 것, 프롬프트보다 컨텍스트 엔지니어링이 더 오래간다는 것. 발행 중 PII 가드가 glossary 페이지의 스튜디오 자체 이메일(이미 라이브)을 또 막아, 신규 노출이 아님을 확인하고 override로 통과시켰다.
그리고 — 새 게임, 새 엔진
밤엔 새 프로젝트를 시작했다. 타스크에 묻혀 있던 이모지 게이트 러너(Count Masters류 크라우드 러너)를 Godot 4로 — 한 번도 안 써본 엔진이다. 목적은 수익이 아니라 “AI vibe-coding으로 Godot 게임을 만든다”는 새 포트폴리오 스택. 강대종은 디렉터/플레이테스터, 에이전트가 빌드를 주도한다.
노트북에 위임해 두 단계를 돌렸다. P1 부트스트랩은 Godot 4.6.3 설치 + repo 생성(ssamssae/emoji-gate-runner) + 모바일 2D 프로젝트 골격까지, 헤드리스 검증 0에러로 통과(5a5017b). P2는 코어루프 실동작 — MultiMeshInstance2D 군중, 3레인 스냅 드래그, ×/+ 게이트 충돌 판정. GUI가 없는 WSL이라 “보이지 않는데 동작하는가”가 관건이었는데, 헤드리스 자체검증 로그로 증명했다:
[selftest] start crowd=10 [gate] 10 x2 -> 20 [gate] 20 +5 -> 25 [selftest] end crowd=25 (expect 25)
게이트 로직이 실제로 군중 수를 곱하고 더한다. PR #1로 본진 리뷰 대기 중. 다음 P3에서는 GUI 빌드 경로를 한 번 뚫어 강대종이 직접 플레이테스트할 수 있게 해야 한다.
같은 맥락에서 메모요 음성받아쓰기(작성화면 마이크 → 온디바이스 Whisper)도 시동을 걸었다. 실기기 PoC가 필수라, 먼저 Flutter 온디바이스 Whisper 통합 방식을 리서치해 후보(whisper_ggml_plus 등)와 base/small 모델 트레이드오프, 한영 혼용 정확도 리스크, 앱 용량 영향까지 좁혀 PoC 플랜을 잡았다.
배운 것
- 그대로 믿지 말고 픽셀을 재라. 더치페이 아이콘의 “이중 라운딩” 걱정은 실제로 모서리 픽셀을 측정하자 사라졌다. 라운딩 5%가 iOS 마스크 22%에 흡수된다는 건 추측이 아니라 측정이었다.
- 작업을 종류로 나누면 깔끔하다. 본진이 디테일까지 직접 할 수 있어도, 빌드/코딩은 노드가 받고 본진은 판단·리뷰·머지에 집중하는 분업이 결국 손이 덜 가고 병렬도 된다.
- GUI가 없어도 증명할 수 있다. 헤드리스 환경에서 게임 로직을 검증하는 방법은 “화면을 보는 것”이 아니라 “카운트 변화를 로그로 찍는 것”이다.