# 셸 스크립트에서 Mac 앱이 된 Mole

> 비공개 정리 스크립트가 오픈 소스 CLI, 더 엄격한 안전 모델, 보이고 중단 가능한 작업을 위한 네이티브 앱이 된 과정.

Published: 2026-05-11 | Updated: 2026-08-07

수년 동안 저는 Mac에 쌓인 잡동사니를 지우는 일만 하는 개인용 셸 스크립트를 두고 있었습니다.
컴퓨터가 가벼운 느낌이 좋았기에, 정원 가꾸듯 다듬어 500줄에서 2,000줄이 넘도록
키웠습니다. 2025년 10월, 디스크가 또 가득 찼습니다. 잘 알려진 클리너 몇 가지를
써 보았지만 별로 나아지지 않았고, 제 스크립트를 돌리자 한 번에 수십 기가바이트가
비워졌습니다. 이건 나눌 만하다고 생각했습니다.

그때 저는 싼야에서 휴가를 보내고 있었고, 호텔 수영장 옆에 앉아 그 스크립트를 제대로 된
오픈소스 CLI 도구로 만들기로 했습니다. 이름이 필요했습니다. 두더지는 앞다리가 강하고
땅을 파는 작은 동물로, 터널을 파고 땅 속 무언가를 찾아내는 데 능합니다. 스크립트가 하던
일과 같았습니다. macOS 구석구석 잡동사니가 쌓이는 곳을 깊게 파고 드는 것. 그래서
[Mole](https://github.com/tw93/mole)이 되었습니다. 첫 버전의 배너에는 "can dig deep to
clean your Mac"이라고 적혀 있었고, 지금도 그대로입니다.

## 커뮤니티가 만들어 준 것

수백 명 정도 쓰는 작은 도구를 예상했습니다. 6개월 즈음 GitHub 스타는 5만 개를
넘었습니다. 스타보다 더 중요했던 것은, 사용자가 제가 들어본 적 없는 정리 경로를 제안하는
이슈를 대략 500건 올렸고, 기능 PR이 300건 가까이 왔으며, 전 세계 개발자 약 100명이
기여자가 되었다는 사실입니다. 개발자마다 지울 수 있는 산출물이 숨는 곳이 다르고,
커뮤니티는 저 혼자였다면 절대 다 못 찾았을 범위를 그려 주었습니다.

그 넓이가 더 어려운 교훈을 남겼습니다. 정리 대상이 늘 때마다 파괴적 실수를 낼 자리도
늘어난다는 것. 경로 목록만으로는 부족했습니다. 도구에는 공유 경로 가드, 보호 위치,
실행 중 프로세스 검사, 타임아웃, 리뷰, 그리고 반드시 거절해야 할 경우를 잠그는 테스트가
필요했습니다. 커뮤니티 규모는 범위만 넓힌 것이 아니라, 원래 스크립트보다 훨씬 일반적인
안전 모델을 강제했습니다.

<figure class="blog-diagram">
  <video src="https://mole.fit/img/blog/mole-contributors.mp4" width="1600" height="900" autoplay muted loop playsinline></video>
  <figcaption>반년간의 커밋을 시각화한 모습입니다. 각 무리는 코드베이스의 한 구석이고, 각 인물은 자신이 손댄 파일 주위를 도는 기여자입니다.</figcaption>
</figure>

규모를 실감한 순간은 청구서였습니다. README에 스크린샷 두 장을 넣고 Vercel CDN으로
서빙했는데, 어느 주에는 대역폭 60테라바이트를 써 버렸고, 사진 두 장에 80달러를
내야 했습니다.

## 왜 Mac 앱인가

초반부터 사용자는 같은 요청을 계속 보냈습니다. 부모님도, 동생도 쓰고 싶은데 터미널은
절대 안 연다는 이야기였습니다. CLI가 아직 데스크톱 버전을 감당할 만큼 성숙하지 않다고
느껴 몇 달 미뤘습니다. 2026년 봄이 되어서야 충분해 보였고, 주말 몇 번에 걸쳐 Mac 앱을
만든 뒤 2026년 5월 11일 저녁에 출시했습니다. [Mole for Mac](https://mole.fit/), Mac 두 대, 평생 업데이트,
얼리버드 9달러. 그동안 Mole을 테스트해 준 사용자에 대한 감사의 의미였습니다.

앱은 스크립트를 돌리는 버튼이 될 수 없었습니다. 그래픽 도구는 탐색과 삭제를 분리하고,
취소를 견디며, 권한을 설명하고, 스캔이 끝날 때까지 창을 안정적으로 유지하며, 셸 명령을
읽어 본 적 없는 사람에게도 복구 가능한 계획을 보여 주어야 합니다. CLI가 앱에게 무엇을
찾을지 가르쳤고, 앱은 그 일을 보이게, 그리고 중간에 끊을 수 있게 만들었습니다.

<figure class="blog-diagram">
  <video src="https://mole.fit/img/blog/mole-mac-demo.mp4" width="1440" height="1074" autoplay muted loop playsinline></video>
  <figcaption>Mole for Mac: 정리, 앱 관리, 최적화, 디스크 분석, 실시간 상태를 하나의 네이티브 앱에 담았습니다.</figcaption>
</figure>

## 행성들

메뉴 바 유틸에 정리 버튼만 달아도 팔렸을 겁니다. 하지만 세상에는 이미 AI로 찍어 낸
잡동사니 소프트웨어가 너무 많습니다. 토큰을 쓸 거라면, 타임라인을 더럽히는 또 하나의
물건이 아니라 앞에 앉아 있어도 편안한 무언가가 되길 바랐습니다.

어린 시절 행성을 보는 것을 좋아했고, 10년 전 프론트엔드를 막 배운 직후 가장 배우고
싶었던 것도 WebGL로 행성을 그리는 일이었습니다. 이 앱을 만들며 두 가지가 드디어
만났습니다. 다섯 기능 각각에, 하는 일과 어울리는 성격의 행성을 붙였습니다.

- Clean은 지구입니다. 산비에 묵은 먼지가 씻깁니다.
- Software는 화성입니다. 붉은 모래가 옛 흔적을 덮습니다.
- Optimize는 수성입니다. 태양에 가장 가깝고, 가장 빠르게 돕니다.
- Analyze는 목성입니다. 가장 넓은 눈입니다.
- Status는 태양입니다. 잠들지 않는 빛입니다.

텍스처는 천문 이미지를 썼고, 지구는 NASA의
[Blue Marble](https://visibleearth.nasa.gov/images/57752/blue-marble-land-surface-shallow-water-and-shaded-topography)을
바탕으로 했습니다. 각 행성이 그럴듯해 보일 때까지 열 번 넘게 바꿨습니다. 자전 방향과
상대 속도는 실제 천체를 따르고, 작업이 끝날 때의 작은 비행 연출도 그렇습니다. 엄밀히
말하면 두더지와는 거의 무관합니다. 터널 밖으로 고개를 들어 아주 넓은 하늘을 올려다본
작은 땅속 동물의 기분에 가깝고, 그걸 조용히 간직하는 쪽에 가깝습니다.

## 출시 밤

저녁 열 시쯤 공개했습니다. 친구들이 리트윗했고, 곧 휴대폰이 약 10초마다 결제 알림으로
울리기 시작했습니다. 프랑스, 독일, 정산에서 본 적 없는 통화까지. 알림만 띄우느라
iPhone이 뜨거워지고 배터리가 닳았습니다. 잠을 자려고 이메일 알림을 껐는데, 아침에도
결제는 이어지고 있었습니다. CLI가 잘 대해 준 것만으로 앱을 산 사람이 꽤 많았습니다.

Mac 앱에는 아직 빈틈이 많고, 예쁜 장난감에 돈을 내고 제가 그 빈틈을 메울 때까지
기다려 주는 분들이 많아 고맙습니다. 결과를 서두르기보다 제 속도로 익어 가길
좋아합니다. Mole은 개인 스크립트에서 오픈소스 CLI, 그리고 유료 앱까지 수년이 걸렸고,
그 궤적에서 가장 좋았던 것은 긴 반복과 전 세계 개발자들과의 우정이었습니다. 그것이
진짜 재산입니다.

---

Canonical HTML page: https://mole.fit/ko/blog/the-story-of-mole
Blog index for agents: https://mole.fit/ko/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
