원문 캡처 · blog.korny.info
원문 캡처 · blog.korny.info

대규모 AI 코딩을 많이 하지는 않지만, 개인 프로젝트는 틈틈이 이어가고 있다. 이번에는 Claude Code를 활용해 집에서 쓰는 음악 플레이어 MPD를 제어하는 macOS 앱을 만들며 개인용 도구를 만드는 비용이 낮아졌다고 느꼈다.

예전에는 MPD를 위한 도구를 두 개 만들었다. Obsidian 노트의 앨범 목록에서 음악을 재생하려고 Python 스크립트를 Mac 앱으로 감싼 도구를 만들었고, 재생 중인 곡을 보여주고 제어하는 메뉴 막대 위젯은 XBar와 Rust로 구현했다. 둘 다 작동했지만 불안정한 부분이 있었고, 설정이 번거로웠으며, 확장하기도 쉽지 않았다.

이번에는 Claude Code를 활용해 두 기능을 하나의 기본 Rust 앱으로 합친 rust-mpd-controller를 만들었다. 메뉴 막대에서 현재 곡을 확인하고 재생을 제어하거나 앨범을 탐색하고 재생목록을 조작할 수 있다. mpdcontrol:// URL 스킴도 등록해 Obsidian 링크를 계속 사용할 수 있게 했다. 인코딩은 이전과 같고 스킴 이름만 바뀌었다.

이 앱은 XBar, Platypus, 셸 스크립트를 사용하지 않는다. 메뉴에는 tray-icon과 muda, 이벤트 루프에는 tao, MPD 연결에는 mpd_client 라이브러리를 쓴다. 장시간 실행되는 앱이라 MPD의 idle 상태를 감지해 폴링을 피하고 정보를 캐시할 수 있으며, 나중에 기능을 더할 여지도 있다고 설명한다.

2023년 10월 Rust와 Copilot을 시험했을 때는 YAML 프런트매터를 분리하는 함수 하나를 생성했지만, 약 15줄의 코드가 잘못된 결과를 내놨다. 당시에는 간단한 반복 코드 작성에 보조적으로 쓸 수 있지만 더 긴 작업은 믿기 어렵다고 판단했다. 이번에는 Claude Code가 여러 라이브러리를 사용한 2,000줄 규모의 macOS 앱 대부분을 작성했고, 작업 시간은 API 문서나 Rust 비동기 이벤트 루프를 익히기보다 설계 결정을 내리는 데 썼다고 한다.

이 변화가 모델과 도구의 개선만으로 이뤄진 것은 아니라고 덧붙였다. 2023년에는 코드 자동완성을 썼지만, 지금은 사양을 바탕으로 반복 작업을 진행하고 모델을 신중히 선택하며 매 단계에 사람의 피드백을 넣는다. XBar와 Platypus 대신 tray-icon, muda, tao, mpd-client를 만든 개발자들의 라이브러리를 활용한 점도 영향을 줬다.

핵심은 코드 품질보다 개인용 도구를 만드는 비용이 낮아졌다는 데 있다. 편리한 음악 탐색 인터페이스를 만들고 싶다는 생각이 예전에는 엄두 내기 어려운 작업이었지만, 이제는 여가 시간에 시도할 만한 프로젝트가 됐다는 설명이다. 저장소는 MIT 라이선스로 공개했으며, 개인용 도구라고 밝혔다.

이번 작업은 상용 모델을 사용했으며, 상용 모델에 쓰는 돈이 기술 대기업에 돌아가고 기후에 부담을 주는 데이터센터를 이용한다는 점은 여전히 문제라고 밝혔다. 다만 하드웨어가 있다면 작업 대부분을 오픈 모델로도 할 수 있을 것으로 보고, 언젠가 더 지속 가능한 방식으로 구현할 수 있기를 기대한다고 덧붙였다. AI 관련 면책 안내도 적용된다고 밝혔다.