본문으로 건너뛰기
일상 2026-03-21 21:30:00 · 7분 · -

2026년 12주차 회고

이번 주 한 일

이번 주는 말 그대로 폭발적이었다. 6개 레포에서 총 144개 커밋, 블로그 포스트 7개, 그리고 내포마라톤 10km까지. Claude 병렬 세션을 3~5개씩 동시에 돌리며 프로젝트를 밀어붙였고, 금요일에는 홍성으로 내려가 토요일 대회를 뛰었다. 돌이켜보면 좀 무리하긴 했는데, 이런 주간이 가끔은 필요한 것 같다.


Claude Multiple Dashboard — v1.0.0 안정 릴리스 (53커밋)

월요일부터 수요일까지 가장 많은 시간을 쏟은 프로젝트. 브라우저 터미널부터 알림 시스템까지 Phase 5~8을 전부 마무리하고, v1.0.0 stable release로 올렸다.

주요 작업:

  • Phase 5: 브라우저 터미널 (node-pty + WebSocket + xterm.js) 구현 → 고민 끝에 제거 (경량 모니터링 포커스 유지)
  • Phase 6: atomic writes, 서버사이드 검색, 로그 압축
  • Phase 7: 세션 메모, 컬러 필터, 인라인 컬러 피커, transcript Markdown export, hourly activity heatmap
  • Phase 8: 세션 프리셋, API 통합 테스트
  • README 영문 전환 + 한국어 번역 분리, 스크린샷 정비
  • v0.3.1 → v0.4.0 → v0.5.0 → v1.0.0 퍼블리시 (npm)

터미널 기능을 만들었다가 과감히 빼는 결정이 이번 주의 하이라이트였다. 프로세스 생명주기와 터미널 프로토콜을 공부하면서 삽질기 블로그 글도 썼는데, 결국 “이 기능이 이 도구의 본질인가?”를 자문하고 빼기로 했다. 기능을 추가하는 것보다 빼는 게 더 어렵다.

Claude Dashboard — 세션 컬러와 메모 기능

HabitFlow — 하루 만에 MVP, 일주일 만에 멀티플랫폼 (19커밋)

Swift를 처음 써보면서 시작한 습관 트래커. 일요일 기획에서 시작해 화요일에 M1~M7을 하루 만에 끝냈다.

마일스톤 진행:

  • M1: Xcode 프로젝트 초기화 + Firebase SDK 연동
  • M2: 데이터 모델 + 서비스 레이어 (TDD)
  • M3: Anonymous Auth + Firestore 보안 규칙
  • M4: 습관 CRUD UI + ViewModel
  • M5: 오늘의 습관 + 체크 + 탭 구조
  • M6: GitHub 잔디 스타일 히트맵 + DateFormat 공통 유틸 (TDD)
  • M7: Streak 계산 + TodayView 표시
  • M8: macOS 멀티플랫폼 확장 + Google Sign-In + 적응형 네비게이션
  • M9: 로컬 알림 — NotificationService + 설정 UI

특히 macOS 이식은 SwiftUI의 힘을 체감한 순간이었다. .macOS(.v14) 한 줄 추가하고 #if os(macOS) 분기 몇 개만 넣으면 끝. 블로그에도 정리했다.

HabitFlow iOS — 오늘의 습관 HabitFlow iOS — 잔디 히트맵 HabitFlow macOS — 잔디 히트맵

CloudPocket — 시트 동기화 리팩토링 (32커밋)

가계부 앱의 Google Sheets 연동을 대폭 개선한 주였다. 특히 batchGet/batchUpdate 전환으로 API 호출을 64회→2회로 줄인 것이 핵심.

주요 작업:

  • MS1: 예산 UI — BudgetProgressBar + Settings 예산 탭 + Home 통합
  • MS2: 자동 동기화 — 앱 시작 + 포그라운드 복귀 시 Google Sheets export
  • MS3: 앱 아이콘/스플래시 생성 + app.json 정비 + expo prebuild
  • MS5: 수입/저축/자산 관리 UI — Settings CRUD + Statistics 표시 통합
  • 시트 리팩토링: 카테고리/결제수단 설정 시트 분리 → batchUpdate 400 에러 근본 해결
  • API 호출 최적화: 개별 read/write 64회 → batchGet + batchUpdate 2회
  • 셀 범위 충돌, 동적 패딩, 동기화 연도 자동 감지 등 수많은 버그 수정

셀 범위가 겹치면서 발생하는 400 에러를 잡느라 월~화 이틀을 통째로 썼다. 결국 설정 시트를 물리적으로 분리하는 게 답이었다.


블로그 — 7개 포스트 발행 (36커밋)

이번 주만 블로그에 7개 글을 올렸다.

날짜제목카테고리
3/16레이스 다음 날 (일기)essay/diary
3/17Claude Multiple Dashboard — 멀티 세션 관제탑 만들기dev
3/17HabitFlow — SwiftUI + Firebase로 습관 트래커 만들기dev
3/17의성데이터포털 — 0에서 운영까지, 백엔드 7개월 회고dev/work
3/17프로세스 생명주기와 터미널 프로토콜 — 브라우저 터미널 삽질기dev/til
3/18Dashboard v0.4.0, HabitFlow M6+M9, CloudPocket Sheets (묶음 포스트)dev
3/19SwiftUI 앱을 macOS로 이식하기 + WidgetKit + Google 로그인dev/project

일기를 포함하면 거의 매일 하나씩 쓴 셈이다. 블로그를 만든 지 일주일 만에 컨텐츠가 10개를 넘겼다.


Daily Mail — RSS 정비 (3커밋)

  • 중앙일보 RSS 서비스 종료 확인 → 소스 제거
  • Discord enabled 플래그 추가 + RSS 소스 밸런싱
  • RSS 피드 URL 정리 + 실제 연결 테스트 추가

Claude Productivity — 스킬 대규모 업데이트 (1커밋)

  • 6개 기존 스킬 개선 + 3개 신규 스킬 추가
  • description 트리거 강화, eval 벤치마크 반영

러닝 — 주간 28km + 내포마라톤 10km 🏃

동마 후유증에서 시작해 내포마라톤까지, 2주 연속 대회를 소화한 주간이었다. 월요일 회복런 3km, 목요일 양재천 8km, 금요일 컨디셔닝 7km, 토요일 내포마라톤 10km(53:54) — 주간 합계 28km. 이준호와 함께 뛰었고, 기록이 각인된 메달을 받았다.

기록 각인 메달 — 김종구 00:53:54, 이준호 00:58:26 내포마라톤 완주 기념사진

자세한 러닝 기록은 3월 3째주 러닝 로그 — 동마 후유증에서 내포마라톤까지에.

일상 — 귀요미 버블헤드

홍성 내려가는 길에 팝업스토어에서 반한 버블헤드. 비싸서 포기했는데, 알고 보니 집에 있었다.

귀요미 버블헤드에 자세한 이야기를.


주요 일정

  • 3/16 (월) 종일 — CloudPocket 시트 동기화 + 블로그 SEO/접근성
  • 3/17 (화) 종일 — HabitFlow M1M7 하루 만에 완성 + Dashboard Phase 57
  • 3/18 (수) 종일 — Dashboard README 리뉴얼 + 블로그 3편 발행 + HabitFlow M6/M9
  • 3/19 (목) 종일 — Dashboard v1.0.0 릴리스 + HabitFlow macOS 멀티플랫폼 + CloudPocket 시트 분리
  • 3/20 (금) 저녁 — 홍성 이동 🚂 (팝업스토어에서 버블헤드 구경)
  • 3/21 (토) 오전 — 내포마라톤 10km 완주 (이준호와 함께) 🏃

이번 주 숫자

지표수치
총 커밋144개 (6개 레포)
블로그 포스트7개
npm 릴리스4회 (v0.3.1 → v1.0.0)
주간 러닝28km (4회)
마라톤 기록53분 54초 (10km)
HabitFlow 마일스톤M1~M9 (9개)
CloudPocket API 최적화64회 → 2회

배운 것

  • SwiftUI 멀티플랫폼: .macOS(.v14) 한 줄이면 iOS 앱이 Mac에서 돌아간다. #if os(macOS) 분기로 플랫폼별 네비게이션만 분리하면 끝
  • WidgetKit: TimelineProvider + AppGroup 공유 컨테이너로 위젯 ↔ 앱 데이터 동기화
  • Google Sign-In (Swift): Firebase Auth에 Google credential을 연결하는 과정. 크로스 디바이스 동기화의 핵심
  • node-pty + xterm.js: 브라우저 터미널을 만들면서 Unix 프로세스 생명주기 (orphan, zombie, SIGHUP)를 실전으로 공부
  • Kitty Keyboard Protocol: 최신 터미널들이 CSI u 시퀀스로 키 입력을 처리한다는 것. Claude Code가 이걸 쓴다
  • Google Sheets batchGet/batchUpdate: 개별 API 호출을 배치로 묶으면 할당량과 지연 시간 모두 극적으로 개선
  • “기능을 빼는 용기”: 이틀 걸려 만든 브라우저 터미널을 빼는 결정. 도구의 정체성(경량 모니터링)에 맞지 않으면 아무리 멋진 기능이라도 빼야 한다

느낀 점

이번 주는 지난주의 연장선이면서도 확실히 다른 점이 있었다. 지난주가 인프라를 세우는 주였다면, 이번 주는 세운 인프라 위에서 전력 질주한 주였던 것 같다.

Claude 병렬 세션으로 하루에 3~5개 프로젝트를 동시에 진행하는 게 자연스러워졌다. 한 세션에서 CloudPocket 시트 버그를 잡는 동안, 다른 세션에서 HabitFlow 마일스톤을 밀고, 또 다른 세션에서 Dashboard를 릴리스한다. 이 워크플로우 자체가 하나의 스킬이 된 느낌이다.

특히 HabitFlow는 Swift를 처음 써보면서도 하루 만에 M7까지 갈 수 있었던 게 놀라웠다. TDD로 테스트를 먼저 쓰고 Claude에게 구현을 맡기는 패턴이 Swift에서도 잘 동작한다는 걸 확인했다. 언어는 달라도 개발 방법론은 이식이 가능하다는 생각이 든다.

Dashboard v1.0.0을 찍으면서 “프로젝트 완료”를 경험한 것도 의미 있었다. 만들기만 하는 게 아니라, 유지보수 모드로 전환하고 안정 릴리스를 내는 것까지가 프로젝트라는 걸 느꼈다. 앞으로 다른 프로젝트에도 이 마인드셋을 적용해야겠다.

마라톤은 지난주 동아서울(53:41)에 이어 이번주 내포(53:54). 기록은 거의 같지만, 2주 연속 대회를 뛰면서 러닝이 일상의 일부로 자리잡아가고 있다. 이준호와 같이 뛰니까 확실히 더 동기부여가 된다. 기록이 각인된 메달을 받으니까 더 기분이 좋았다 — 다음엔 50분 벽을 깨고 싶다.

144커밋이라는 숫자가 중요한 게 아니다. 6개 프로젝트를 동시에 진행하면서도 각각에서 의미 있는 진전을 만들어냈다는 것, 그리고 그 과정에서 새로운 기술을 실전으로 익혔다는 것. 양과 질이 동시에 올라가는 경험은 쉽게 오지 않는다. 이 모멘텀을 유지하고 싶다.

(다만 이력서를 2주째 안 쓰고 있다는 사실은… 다음 주에는 정말 써야겠다.)

다음 주 계획

프로젝트

  • CloudPocket 시트 분리 리팩토링 마무리 + Phase 3 남은 작업
  • HabitFlow Phase 2 — 통계/차트 + 성취 뱃지
  • 블로그 포스팅 계속 — 최소 주 3편

이직

  • 이력서 업데이트 + 포트폴리오 프로젝트 정리
  • 5곳 이상 지원 목표

러닝

  • 주간 35km 이상 — 하루 78km, 주 45회
  • 50분 벽 깨기 위한 인터벌 훈련 시작

약속

  • 3/22 (일) 17:00 — 대학 친구 저녁 식사 (이승수, 기경도, 박진석) @ 강남

한 줄 회고

세운 인프라 위에서 전력 질주한 한 주. 144커밋과 53분 54초 — 코드로도, 발로도 달린 일주일이었다.

공유 복사됨!

관련 글

댓글