Mole: 맥 청소부터 시스템 모니터링까지 한 번에

맥으로 개발을 하다 보면 디스크가 슬금슬금 차오릅니다. 저장 공간 경고가 뜰 때쯤 확인해보면 대개 이런 상태예요.
{
"mount": "/",
"used": 468240698816,
"total": 494384795648,
"used_percent": 94.7117918952721,
"fstype": "apfs"
}
460GB짜리 디스크에서 남은 공간이 24GB 남짓입니다. 문제는 무엇을 지워야 할지 모르겠다는 거죠. 사진이나 영상을 지우자니 아깝고, ~/Library 안쪽은 열어봐도 알 수 없는 이름의 폴더뿐입니다. 😅
맥 청소 앱은 예전부터 많았습니다. 그런데 이 바닥은 유독 미심쩍은 광고와 연 3만~5만 원짜리 구독으로 얼룩져 있어서 선뜻 손이 가지 않죠. “잡동사니 12GB를 발견했습니다” 같은 문구는 봤어도, 정확히 무슨 파일인지 보여주는 도구는 드물었고요.
Mole은 이 지점을 정면으로 다루는 맥 유틸리티입니다. 지우기 전에 목록을 전부 보여주고, 무엇을 왜 안전하다고 판단했는지 코드로 공개해 두었어요. 이번 글에서는 무료 오픈소스 명령줄 인터페이스(command-line interface, CLI)를 직접 설치해 돌려보고, 유료 Mac 앱은 무엇이 다른지도 정리해보겠습니다.
Mole은 어떤 도구인가요?
Mole은 크게 두 얼굴을 가지고 있습니다. 하나는 터미널에서 쓰는 mo 명령이고, 다른 하나는 SwiftUI로 만든 네이티브 Mac 앱이에요.
CLI는 GitHub 저장소에 GPL-3.0 라이선스로 공개되어 있습니다. 글을 쓰는 시점의 스타는 6만 개를 넘었고 기여자는 120명이 넘어요. 재미있게도 주 언어가 셸 스크립트입니다. 원래 개인 정리 스크립트 한 편에서 출발한 프로젝트거든요. 만든 사람은 웹사이트를 데스크톱 앱으로 감싸주는 Pake로 알려진 Tw93입니다.
Mac 앱은 mole.fit에서 판매하며 2대까지 쓸 수 있는 19달러 일회성 라이선스입니다. 구독이 아니고 이후 버전 업데이트도 포함돼요. 청소 범위와 안전 규칙은 CLI에서 가져오고, 그래픽 사용자 인터페이스(graphical user interface, GUI)에서만 가능한 화면과 기능을 얹은 형태입니다.
flowchart TB
accTitle: Mole CLI와 Mac 앱의 관계
accDescr: 정리 범위와 보호 경로, 작업 로그라는 공통 기반 위에 무료 CLI와 유료 Mac 앱이 각각 올라가며, CLI에만 있는 명령과 앱에만 있는 화면이 따로 존재한다.
core["공통 기반<br/>정리 범위, 보호 경로, 작업 로그"]
core --> cli["Mole CLI<br/>무료, GPL-3.0"]
core --> app["Mole for Mac<br/>19달러 일회성"]
cli --> cliOnly["purge, installer, touchid"]
app --> appOnly["트리맵, 메뉴바 HUD,<br/>앱 업데이트, 팬 제어"]
둘 다 하는 일은 다섯 가지로 요약됩니다. 캐시를 지우고(Clean), 앱을 완전히 삭제하고(Uninstall), 시스템 유지보수를 돌리고(Optimize), 디스크를 분석하고(Analyze), 시스템 상태를 보여주는(Status) 것이죠. 그동안 CleanMyMac, AppCleaner, DaisyDisk, iStat Menus로 나눠서 하던 일입니다.
CLI 설치하고 첫 실행하기
터미널 사용자라면 CLI만으로도 충분합니다. Homebrew로 설치하는 방법이 가장 간단해요.
brew install mole
설치 스크립트를 쓸 수도 있습니다.
curl -fsSL https://raw.githubusercontent.com/tw93/mole/main/install.sh | bash
명령어 이름은 mole이 아니라 두 글자로 줄인 mo입니다. 설치가 끝났는지 확인해볼까요?
mo --version
Mole version 1.49.1
macOS: 26.5.2
Architecture: arm64
Kernel: 25.5.0
SIP: Enabled
Disk Free: 24.39GB
Install: Homebrew
Shell: /bin/zsh
버전만 알려줄 줄 알았는데 시스템 보호 기능(System Integrity Protection, SIP) 활성화 여부와 남은 디스크 용량까지 함께 나옵니다. 이 도구가 어떤 정보를 중요하게 여기는지 짐작이 가죠.
mo를 인자 없이 실행하면 방향키나 Vim과 같은 h, j, k, l 키로 움직이는 메뉴가 뜹니다. 어떤 명령이 있는지 모르겠다면 여기서 시작하면 되고, 익숙해지면 하위 명령을 바로 호출하는 편이 빠릅니다.
mo clean으로 무엇을 지울지 먼저 보기
가장 자주 쓰게 될 명령은 mo clean입니다. 그런데 처음부터 실제로 지우지 말고 미리 보기부터 해보세요. 모든 파괴적인 명령이 --dry-run 플래그를 지원합니다.
mo clean --dry-run
출력이 꽤 긴데, 앞부분부터 보겠습니다.
Clean Your Mac
Dry Run Mode, Preview only, no deletions
◎ System caches need sudo, run sudo -v && mo clean --dry-run for full preview
⚙ Apple Silicon | Free space: 24.39GB
✓ Whitelist: 21 core patterns active
↳ /Users/dale/Library/Caches/ms-playwright*
↳ /Users/dale/.cache/huggingface*
↳ /Users/dale/.m2/repository/*
↳ /Users/dale/.gradle/caches/*
↳ /Users/dale/.ollama/models/*
↳ /Users/dale/Library/Caches/JetBrains*
지우기도 전에 보호 목록부터 보여주네요. Playwright 브라우저, 허깅페이스 모델, 메이븐 저장소, Gradle 캐시, Ollama 모델처럼 다시 받으려면 오래 걸리는 것들이 기본 화이트리스트(whitelist)에 들어 있어요. 기술적으로는 캐시가 맞지만 지우면 곤란하죠.
개발자 도구 구간에서는 숫자가 확 커집니다.
➤ Developer tools
→ npm cache directory · 3 items, 14.07GB dry
→ npm npx cache · 50 items, 2.48GB dry
→ Rust cargo cache · 141.1MB dry
☞ Rust toolchains · 11 found (rustup toolchain list)
☞ Docker unused data · review with docker system df
→ Claude Code old version · 255.1MB dry
→ VS Code webview cache · 6 items, 62.8MB dry
→ Zed npm cache · 4 items, 3.78GB dry
→ Obsolete VS Code extension · 486.3MB dry
npm 캐시 하나가 14GB입니다. Zed가 내부적으로 받아둔 npm 캐시도 3.78GB나 되고요. 이런 건 손으로 찾기 어렵습니다. 경로를 외우고 있어야 하니까요.
☞ 표시가 붙은 항목도 흥미롭습니다. Rust 툴체인이나 Docker가 쓰는 공간처럼 판단이 필요한 대상은 지우지 않고 확인할 명령만 알려줘요. 남의 도구가 관리하는 영역은 건드리지 않겠다는 태도입니다.
마지막 요약은 이렇게 나옵니다.
======================================================================
Dry run complete - no changes made
Potential space: 28.98GB | Items: 1061 | Categories: 6
Skipped while active: Chrome, Chrome DevTools MCP
Detailed file list: /Users/dale/.config/mole/clean-list.txt
Use mo clean --whitelist to add protection rules
======================================================================
28.98GB를 되찾을 수 있다고 합니다. 남은 공간이 24GB였으니 두 배 이상으로 늘어나는 셈이에요.
Skipped while active 줄도 그냥 지나치지 마세요. 실행 중인 Chrome의 캐시는 아예 건너뛰었다는 뜻입니다. 브라우저가 열려 있는 상태에서 캐시를 지우면 세션이 깨질 수 있으니까요. 그리고 전체 파일 목록은 ~/.config/mole/clean-list.txt에 저장되므로, 숫자만 믿기 찜찜하다면 파일을 열어 한 줄씩 확인할 수 있습니다.
미리 보기가 마음에 들었다면 플래그를 빼고 실행하면 됩니다. 대화형 화면에서 범주별로 선택해 지울 수 있어요.
mo clean
지우기 전에 지켜주는 장치들
청소 도구에서 가장 중요한 건 얼마나 많이 지우느냐가 아니라 지우면 안 되는 걸 안 지우느냐입니다. Mole은 여기에 여러 겹의 장치를 두고 있어요.
우선 경로 보호가 있습니다. /System, /usr, /bin 같은 시스템 디렉토리와 홈 디렉토리의 핵심 구조(~/Desktop, ~/Documents, ~/Downloads)는 거부 목록에 올라가 있습니다. 어떤 폴더가 왜 중요한지는 macOS 디렉토리 구조에서 정리한 적이 있는데, Mole은 이 구분을 그대로 반영하고 있어요. 심볼릭 링크(symbolic link)는 실제 대상까지 따라가서 검사하고, 검사에 실패하면 그 자리에서 작업을 멈춥니다.
앞에서 본 화이트리스트는 직접 관리할 수도 있습니다.
mo clean --whitelist
여기에 추가한 항목은 업데이트를 해도 유지됩니다. 프로젝트 특성상 지우면 곤란한 캐시가 있다면 한 번 등록해두세요.
크기를 잴 때 하드링크(hard link)를 인식한다는 것도 은근히 중요합니다. uv나 pnpm처럼 같은 파일을 여러 곳에서 하드링크로 공유하는 패키지 관리자를 쓰면, 순진하게 세는 도구는 같은 데이터를 몇 번씩 중복으로 계산해요. “20GB를 확보했습니다”라고 해놓고 실제로는 5GB만 늘어나는 상황이 여기서 생깁니다.
그리고 지운 기록이 남습니다.
mo history --json
{
"logs": {"operations": "/Users/dale/Library/Logs/mole/operations.log"},
"sessions": [
{
"command": "purge",
"started_at": "2026-08-02 13:45:54",
"items": 47,
"size": "10.09GB",
"actions": {"removed": 0, "trashed": 0, "failed": 0}
}
]
}
언제 어떤 명령으로 무엇을 지웠는지가 ~/Library/Logs/mole/에 쌓입니다. 위 기록은 미리 보기만 돌린 결과라 removed가 0이죠. 뭔가 사라진 것 같은데 기억이 안 날 때 확인할 곳이 있다는 건 생각보다 든든합니다.
mo purge로 프로젝트 잔해 걷어내기
CLI에만 있고 Mac 앱에는 없는 명령이 세 개 있는데, 개발자에게 가장 쓸모 있는 건 mo purge입니다. 여기저기 흩어진 프로젝트의 빌드 산출물을 찾아줘요.
mo purge --dry-run
✓ [DRY RUN] ~/study/blog-study/target, 981.1MB
✓ [DRY RUN] ~/study/schedule/node_modules, 863.2MB
✓ [DRY RUN] ~/study/daleui.com/node_modules, 770.3MB
✓ [DRY RUN] ~/blog/.claude/worktrees/fix-orb-crossorigin/node_modules, 686.2MB
✓ [DRY RUN] ~/study/leaderboard/node_modules, 494.0MB
✓ [DRY RUN] ~/work/ajae-gag-storage/ajae-gag-astro/node_modules, 266.1MB
✓ [DRY RUN] ~/work/ajae-gag-storage/.next, 35.9MB
======================================================================
Dry run complete - no changes made
Would free: 10.09GB | Items: 47 | Free: 23.29GB
======================================================================
node_modules, target, dist, .next, venv처럼 다시 만들 수 있는 디렉토리만 골라 10GB를 찾아냈습니다. 몇 달 전에 클론해놓고 잊어버린 저장소가 주범이었어요. git worktree로 만든 작업 폴더의 node_modules까지 잡히는 걸 보면 검색이 꽤 꼼꼼합니다.
최근 7일 안에 건드린 프로젝트는 “Recent”로 표시되고 기본 선택에서 빠집니다. 지금 작업 중인 프로젝트의 의존성을 날려버리는 사고를 막아주는 장치죠.
기본 검색 경로는 ~/Projects, ~/GitHub, ~/dev입니다. 저처럼 다른 디렉토리를 쓴다면 경로를 등록해두세요.
mo purge --paths
설치 파일을 찾아주는 명령도 있습니다.
mo installer --dry-run
Select Installers to Remove , 0B, 0 selected
➤ ○ Mole.dmg 20.8MB | Downloads
↑↓ | Space Select | Enter Confirm | A All | I Invert | Q Quit
Downloads와 Desktop, Homebrew 캐시, iCloud, 메일 첨부까지 뒤져서 .dmg, .pkg, .zip 설치 파일을 모아줍니다. 설치하고 나면 쓸모없어지는데 이상하게 계속 쌓이는 파일이죠.
세 번째는 성격이 좀 다릅니다. sudo를 쓸 때 비밀번호 대신 Touch ID를 쓰도록 설정해줘요.
mo touchid enable
mo analyze로 용량 큰 곳 찾기
무엇을 지울지 정하기 전에 어디가 무거운지부터 봐야 할 때가 있습니다. mo analyze는 터미널에서 도는 트리맵(treemap)입니다.
mo analyze
방향키로 디렉토리를 파고들 수 있고, 그 자리에서 휴지통으로 보낼 수도 있습니다. 기본적으로는 홈 디렉토리를 보는데 경로를 지정해도 됩니다.
스크립트에 쓸 거라면 JSON으로 뽑는 편이 낫습니다.
mo analyze --json ~/blog
{
"path": "/Users/dale/blog",
"entries": [
{
"name": "node_modules",
"path": "/Users/dale/blog/node_modules",
"size": 1152811008,
"is_dir": true,
"cleanable": true
},
{
"name": ".git",
"path": "/Users/dale/blog/.git",
"size": 170180608,
"is_dir": true
}
]
}
cleanable 필드에 주목해보세요. 크기만 알려주는 게 아니라 “이건 지워도 다시 만들 수 있다”는 판단까지 담겨 있습니다. node_modules에는 붙어 있고 .git에는 없죠. jq와 조합하면 정리 후보만 골라내는 스크립트를 쉽게 만들 수 있습니다.
mo status로 시스템 상태 보기
Mole은 청소만 하는 도구가 아닙니다. mo status는 터미널에서 도는 시스템 대시보드예요.
mo status
CPU와 메모리, 디스크 입출력, 네트워크 속도, 배터리, 온도를 60초짜리 스파크라인(sparkline)과 함께 보여줍니다. 여기에 0부터 100까지의 건강 점수가 붙어요.
이 명령은 영리하게도 파이프를 감지합니다. 화면에 그냥 출력하면 사람이 보기 좋은 대시보드가 뜨지만, 파이프로 넘기면 알아서 JSON으로 바뀝니다.
mo status | jq '{health: .health_score, msg: .health_score_msg, disk: .disks[0].used_percent}'
{
"health": 74,
"msg": "Good: Disk Almost Full",
"disk": 94.7117918952721
}
점수만 던지지 않고 왜 그 점수인지도 알려줍니다. 디스크가 거의 찼다는 게 감점 요인이었네요. 모니터링 스크립트를 짜거나 셸 프롬프트에 상태를 띄우고 싶을 때 쓰기 좋은 형태입니다.
앱을 완전히 지우는 명령도 있습니다. 애플리케이션 폴더에서 앱을 휴지통에 버리면 설정과 캐시, 로그인 항목은 그대로 남죠.
mo uninstall --dry-run
Application Support, Preferences, WebKit 저장소, 쿠키, 실행 데몬(launch daemon), 로그인 항목 등 15가지가 넘는 범주를 훑어 잔여 파일을 찾아줍니다. 앱 자체는 휴지통을 거쳐 삭제되므로 잘못 지웠어도 되돌릴 수 있어요.
셸 자동 완성을 붙여두면 하위 명령을 외우지 않아도 됩니다. 셸 자동 완성 설정을 알아서 감지해 처리해줍니다.
mo completion
Mac 앱은 무엇이 다른가요?
여기까지가 무료로 쓸 수 있는 범위입니다. 그럼 19달러짜리 앱은 무엇을 더 줄까요?
가장 큰 차이는 눈으로 보는 작업입니다. 디스크 전체를 사각형 크기로 표현하는 트리맵은 터미널보다 화면에서 훨씬 잘 읽혀요. 클릭해서 파고들다가 마우스 오른쪽 버튼으로 바로 휴지통에 보낼 수 있고, 권한 문제로 크기를 못 잰 폴더는 조용히 빼먹지 않고 물음표 배지를 달아 보여줍니다.
시스템 모니터링도 앱 쪽이 풍부합니다. 아홉 개 타일로 구성된 대시보드가 있고, 메뉴 막대에 CPU와 메모리, 네트워크 속도를 상주시킬 수 있어요. 지원되는 맥에서는 팬 속도를 직접 제어할 수도 있습니다.
CLI에 없는 기능도 있습니다. Mac App Store, Sparkle, Electron, Homebrew에 흩어진 앱 업데이트를 한 화면에서 확인하고 설치하는 기능이 대표적이에요. 로그인 항목과 백그라운드 실행 항목을 정리하는 화면도 앱에만 있습니다.
카메라와 마이크를 지금 어떤 앱이 쓰고 있는지 알려주는 프라이버시 확인 기능도 재미있습니다. 권한 목록이 아니라 지금 실제로 쓰고 있는지를 보여주니까요. 맥의 보안 설정 전반이 궁금하다면 맥 보안 설정에서 다룬 내용과 함께 보면 좋습니다.
터미널이 편한 사람이라면 CLI만으로도 청소와 모니터링을 대부분 해결합니다. 눈으로 확인하며 클릭으로 처리하고 싶다면 앱이 값을 하고요. 각 도구를 두 번까지는 무료로 써볼 수 있으니 결제 전에 직접 판단하면 되고요.
쓰기 전에 알아둘 점
좋은 도구지만 무턱대고 믿으면 곤란한 부분도 있습니다.
캐시는 기본적으로 휴지통을 거치지 않고 바로 삭제됩니다. 확보했다고 표시한 용량과 실제로 늘어난 용량을 일치시키기 위한 선택인데, 되돌릴 수 없다는 뜻이기도 해요. 앱의 설정에서 휴지통을 거치도록 바꿀 수 있으니 불안하다면 먼저 바꿔두세요. CLI에서는 --dry-run이 사실상의 되돌리기입니다. 먼저 보고 나서 지우는 순서를 습관으로 만드는 게 좋습니다.
전체 디스크 접근 권한(Full Disk Access)을 주지 않으면 ~/Library 안쪽까지 훑지 못해 2~5GB 정도를 놓칩니다. 반대로 말하면 그만큼 강한 권한을 요구한다는 뜻이니, 권한을 주기 전에 어떤 도구인지 확인하는 편이 맞습니다. 소스가 공개되어 있다는 게 여기서 힘을 발휘하고요.
바이러스 백신이 아니라는 것도 알아두세요. 악성코드를 찾아주지 않고 파일 복구도 해주지 않아요. 그리고 macOS 14 이상에서만 동작합니다.
마지막으로, 청소를 너무 자주 할 필요는 없습니다. 캐시는 원래 성능을 위해 존재하는 것이라 지우고 나면 한동안 앱이 느려질 수 있어요. 디스크가 빠듯할 때 정리하는 도구지, 주기적으로 돌려야 맥이 빨라지는 도구는 아닙니다.
마치며
Mole이 반가운 이유는 기능이 많아서가 아닙니다. 지우기 전에 목록을 보여주고, 실행 중인 앱은 건드리지 않고, 지운 기록을 남기고, 판단이 필요한 영역은 남의 도구에 맡긴다는 태도 때문이에요. 맥 청소 앱이라는 카테고리에서 오래 아쉬웠던 부분이죠.
일단 brew install mole로 CLI를 설치하고 mo clean --dry-run부터 돌려보세요. 뭘 지울지 결정하기 전에 내 맥의 어디가 무거운지 확인하는 것만으로도 얻는 게 있을 겁니다. 개발자라면 mo purge에서 잊고 있던 node_modules 수십 개를 만나게 될 거고요.
더 자세한 기능과 설정은 Mole 공식 문서를 참고하세요.
This work is licensed under CC BY 4.0