Post

개발 머신 디스크 공간 확보: Docker, NPM, NVM 정리 완벽 가이드

Docker, Homebrew, NPM, NVM 등 개발 도구의 캐시와 불필요한 파일을 정리하여 100GB 이상의 디스크 공간을 확보하는 실전 방법을 소개합니다.

개발 머신 디스크 공간 확보: Docker, NPM, NVM 정리 완벽 가이드

3줄 요약

  • Docker, NPM, Homebrew 등 개발 도구들이 시간이 지나면서 수십~수백 GB의 캐시와 불필요한 파일을 누적시킵니다.
  • docker system prune, npm cache clean, brew cleanup 등의 명령어로 간단하게 디스크 공간을 대량 확보할 수 있습니다.
  • node_modules 정리만으로도 100GB 이상의 공간을 되찾을 수 있으며, npkill 도구를 활용하면 효율적으로 관리할 수 있습니다.

📌 주요 내용

새해를 맞이하여 개발 머신을 점검할 좋은 시기입니다. 프로젝트 개발, 테스트, 실험을 반복하다 보면 시스템은 서서히 사용하지 않는 의존성, 오래된 캐시, 그리고 디스크 공간을 잠식하는 각종 잔여 파일들로 가득 차게 됩니다. 이 글에서는 개발 머신을 정리하고 디스크 공간을 확보하는 실용적인 방법들을 소개합니다.

Docker 정리하기

Docker는 일관된 개발 환경을 구축하는 데 훌륭한 도구지만, 스스로 정리하는 경우는 드뭅니다. 시간이 지나면서 사용하지 않는 이미지, 중단된 컨테이너, 남겨진 볼륨들이 쌓이면서 예상보다 훨씬 많은 디스크 공간을 차지하게 됩니다.

정리를 위해 docker system prune 명령어를 실행하면 사용하지 않는 컨테이너, 네트워크, 댕글링 이미지, 빌드 캐시를 한 번에 제거할 수 있습니다. 더 철저한 정리를 원한다면 -a 또는 --all 플래그를 추가하여 댕글링 이미지뿐만 아니라 사용하지 않는 모든 이미지를 제거할 수 있습니다. 이는 서로 다른 베이스 이미지나 런타임 버전을 자주 전환하는 경우 특히 유용합니다.

1
docker system prune -a

Docker를 정기적으로 정리하면 놀라울 정도로 많은 디스크 공간을 확보할 수 있습니다. 단점은 나중에 다시 필요할 때 이미지를 재다운로드해야 한다는 것입니다. 좀 더 가벼운 옵션을 원한다면 docker builder prune을 실행하여 빌드 캐시만 정리할 수 있으며, 이는 이미지를 자주 빌드하는 경우 이상적입니다.

Homebrew 정리하기

macOS에서 Homebrew를 사용하여 패키지와 앱을 관리하는 경우, 시간이 지나면서 오래된 패키지 버전과 캐시된 다운로드 파일들이 시스템에 축적됩니다.

Homebrew는 자동 정리 기능이 있지만 가끔씩만 실행되며, 캐시를 수개월 동안 보관할 수 있습니다. 머신을 오래 사용했다면 이러한 잔여 파일들이 쉽게 기가바이트 단위로 증가할 수 있습니다.

정리를 위해 brew cleanup을 실행하고 --prune=all 플래그를 사용하여 사용하지 않는 모든 캐시 파일을 제거할 수 있습니다. 또한 brew autoremove와 함께 사용하면 더 이상 필요하지 않은 고아 의존성을 삭제할 수 있습니다.

1
2
brew cleanup --prune=all
brew autoremove

NPM 정리하기

NPM은 설치 속도를 높이기 위해 ~/.npm 디렉토리에 로컬 캐시를 보관합니다.

이론적으로 이 캐시는 “자가 치유” 기능이 있어 손상된 데이터를 스스로 확인하므로 건드릴 필요가 없습니다. 하지만 실제로는 시간이 지나면서 캐시가 매우 커지거나 설치 실패나 네트워크 문제로 인해 동기화가 깨질 수 있습니다.

npm cache clean --force 명령어로 캐시를 완전히 삭제할 수 있습니다. 이는 모든 것을 제거하고 향후 NPM이 모든 패키지를 재다운로드하도록 강제하며, 이는 향후 설치 속도를 느리게 하고 더 많은 대역폭을 사용할 수 있습니다.

1
npm cache clean --force

이를 피하고 싶다면 더 안전한 옵션은 npm cache verify입니다. 이는 캐시에서 문제를 확인하고 모든 것을 지우지 않고 사용하지 않는 데이터를 제거합니다. 대부분의 경우 이것이 NPM 캐시를 건강하게 유지하는 더 나은 방법입니다.

필자의 경우 NPM 캐시만 정리하여 100GB 이상의 디스크 공간을 확보할 수 있었습니다!

node_modules 정리하기

웹 개발에서 가장 큰 공간 낭비 요소 중 하나는 끝없이 확산되는 node_modules 디렉토리입니다. 각 프로젝트는 의존성 패키지만으로 쉽게 수백 메가바이트, 심지어 1기가바이트 이상을 차지할 수 있습니다. 오래되거나 비활성 프로젝트가 많다면 귀중한 SSD 공간이 엄청나게 낭비되고 있는 것입니다.

이때 npkill이 매우 유용합니다. 다음과 같이 실행할 수 있습니다:

1
npx npkill

이 도구는 프로젝트 폴더를 스캔하여 찾은 모든 node_modules 디렉토리를 나열하고, 각각이 사용하는 공간을 정확히 보여주며, 단일 키 입력으로 삭제할 수 있게 해줍니다.

활발하게 작업하지 않는 프로젝트를 “보관”하기에 완벽하며, 나중에 간단한 npm installnode_modules를 언제든지 재생성할 수 있습니다.

NVM 정리하기

NVM은 여러 버전의 Node.js를 쉽게 사용할 수 있게 해주지만, 시간이 지나면서 공간을 차지하고 보안 위험을 초래할 수 있는 오래되거나 사용하지 않는 Node 버전들의 컬렉션으로 변할 수 있습니다.

먼저 nvm ls를 실행하여 설치된 모든 버전을 확인할 수 있습니다.

1
nvm ls

각 버전에는 고유한 글로벌 패키지 세트가 포함되어 있어 목록이 빠르게 증가할 수 있습니다. 더 이상 사용하지 않는 버전, 특히 수명이 종료된 버전을 찾아보세요. nvm uninstall <version> 명령어로 안전하게 제거할 수 있습니다.

예를 들어, 모든 프로젝트가 Node.js 22 또는 24를 실행 중이므로 Node.js 20을 제거하겠습니다:

1
nvm uninstall 20

Git 로컬 저장소 정리하기

로컬 Git 저장소를 검토하는 것도 좋은 방법입니다.

한 해 동안 더 이상 활성화되지 않았거나 필요하지 않은 많은 저장소를 클론하거나 생성했을 수 있습니다.

Git은 자동으로 일부 정리를 수행하지만, git gc를 수동으로 실행하면 오래된 데이터를 압축하고 접근할 수 없는 객체를 제거하며 일상적인 Git 작업 속도를 높일 수 있습니다.

1
git gc

더 철저한 정리를 위해 git gc --aggressive를 실행하여 추가 최적화를 수행할 수도 있습니다.

또한 git branch -d $(git branch --merged) 명령어를 실행하여 현재 브랜치에 이미 병합된 모든 로컬 브랜치를 삭제하여 저장소를 깔끔하게 유지할 수 있습니다.

(보너스) Ollama 정리하기

Ollama를 사용하여 로컬 AI 모델을 실행하는 경우, 공간을 차지할 수 있는 사용하지 않는 모델을 확인하는 것이 좋습니다.

Ollama는 LLM을 로컬에서 쉽게 실행할 수 있게 해주는 편리한 도구입니다. 하지만 각 모델이 수 기가바이트에서 수십 기가바이트에 이를 수 있고, 다양한 변형을 테스트하다 보면 사용하지 않는 모델이 많이 쌓이기 때문에 디스크 공간을 빠르게 소모할 수 있습니다.

먼저 ollama list를 실행하여 설치된 모델을 확인합니다.

1
ollama list

그런 다음 ollama rm <model-name> 명령어로 더 이상 사용하지 않는 모델을 제거합니다. 필자의 경우 두 개의 모델이 있는데, 그중 더 이상 활발하게 사용하지 않는 deepseek-r1:8b 모델이 약 5GB의 공간을 차지하고 있어 제거하겠습니다.

1
ollama rm deepseek-r1:8b

👨‍💻 개발자에게 미치는 영향

성능 개선 및 비용 절감

개발 머신을 정기적으로 정리하는 것은 단순히 디스크 공간을 확보하는 것 이상의 의미가 있습니다. 불필요한 캐시와 파일을 제거하면 시스템 성능이 향상되고, 빌드 시간이 단축되며, 예상치 못한 디스크 부족 오류를 방지할 수 있습니다.

보안 강화

오래된 Node.js 버전이나 수명이 종료된 도구를 제거하면 알려진 보안 취약점에 대한 노출을 줄일 수 있습니다. 특히 NVM으로 관리되는 구버전 Node.js는 보안 패치를 받지 못하므로 정기적인 정리가 필수적입니다.

개발 워크플로우 최적화

정리된 개발 환경은 프로젝트 전환 시 혼란을 줄이고, 필요한 도구와 버전을 명확하게 파악할 수 있게 해줍니다. npkill과 같은 도구를 활용하면 프로젝트별 의존성 관리가 훨씬 수월해집니다.

원문 기사 보기

This post is licensed under CC BY 4.0 by the author.