# Windows 개발 캐시, npm과 pip와 Gradle이 담는 것

프로젝트는 거의 커지지 않았는데 C 드라이브가 몇 GB 늘어난 경우가 있습니다. npm, pip, Gradle 디렉터리를 찾았다고 통째로 지울 이유는 되지 않습니다. 다운로드 캐시, 프로젝트 의존성, 빌드 출력, 저장된 도구 버전은 일이 다르고, 다시 만들려면 출처가 남아 있어야 합니다.

## 도구가 실제로 쓰는 위치를 찾습니다

관련 도구가 설치된 터미널에서 이 명령은 내용을 지우지 않고 npm 캐시 위치와 pip 캐시 정보를 보여 줍니다.

```powershell
npm config get cache
python -m pip cache info
```

pip 질의는 `python`이 고른 환경을 사용합니다. 캐시 위치를 바꿨다면 출력을 따릅니다. [npm 구성 참고](https://docs.npmjs.com/cli/v11/commands/npm-config/)와 [pip 캐시 참고](https://pip.pypa.io/en/stable/cli/pip_cache/)가 질의를 설명합니다. 한 PC의 기본 경로가 모든 프로젝트의 구성은 아닙니다.

## 네 종류의 디렉터리를 구분합니다

| 종류 | 예 | 제거 전에 확인할 것 |
| --- | --- | --- |
| 패키지 다운로드 캐시 | npm 캐시, pip HTTP 및 wheel 캐시 | 이후 설치에 다운로드가 필요한지, 특히 오프라인인지 |
| 프로젝트 의존성 | `node_modules`, 가상 환경, `vendor` | 패키지, 잠금 파일, 출처, 설치 단계가 남아 있는지 |
| 빌드 출력 | `dist`, `build`, `obj` | 생성된 내용인지, 직접 넣은 것이 들어 있는지 |
| 도구 버전과 로컬 저장소 | 받은 Gradle 버전, 일부 로컬 설치 패키지 | 다음 동기화나 빌드가 직접 필요로 하는지 |

다시 만드는 데는 대가가 있습니다. 네트워크 접근, 쓸 수 있는 출처, 인증, 오프라인 요구가 중요합니다. 이름이 익숙하다고 의존성 디렉터리가 보편적인 정리 대상이 되지는 않습니다.

## 캐시 문제와 의존성 문제는 다릅니다

npm의 다운로드 캐시는 내용을 검증하며, [문서](https://docs.npmjs.com/cli/v11/commands/npm-cache/)는 손상된 데이터를 다시 받는 방법을 설명합니다. 설치 오류만으로 캐시를 비울 이유는 충분하지 않습니다. 네트워크 실패, 잠긴 버전을 쓸 수 없음, 의존성 충돌은 그 뒤에도 그대로일 수 있습니다.

pip는 캐시된 HTTP 응답과, 이전에 만든 설치 가능 패키지를 포함한 캐시된 wheel을 나눕니다. [캐싱 문서](https://pip.pypa.io/en/stable/topics/caching/)가 둘을 설명합니다. `pip cache list`는 캐시 디렉터리의 모든 파일이 아니라 wheel을 나열합니다. 가상 환경은 설치된 의존성을 격리하지만, 여러 환경이 pip 캐시를 공유할 수 있습니다. 다른 `python`을 골랐다고 캐시 위치가 따로라는 보장은 없습니다. 질의 출력을 읽습니다.

## 잠금 파일은 버전을 기록할 뿐, 패키지 백업이 아닙니다

오프라인 프로젝트에 `package-lock.json`은 그대로인데 `node_modules`와 다운로드 캐시가 둘 다 없다고 해 보세요. 버전 기록은 남지만, 설치에 필요한 패키지를 쓸 수 없을 수 있습니다. 잠금 파일은 버전 선택을 통제합니다. 패키지 파일이나 비공개 레지스트리 접근을 보존하지는 않습니다.

Gradle의 [의존성 캐시 문서](https://docs.gradle.org/current/userguide/dependency_caching.html)는 오프라인 빌드에 필요한 아티팩트가 로컬에 있어야 하는 이유를 설명합니다. [디렉터리와 보관 안내](https://docs.gradle.org/current/userguide/directory_layout.html)는 버전별 캐시, 공유 의존성, Wrapper 배포를 나눕니다. 큰 `.gradle` 디렉터리를 비우기 전에 어느 범주가 커졌는지 확인합니다. 도구가 관리하는 오래된 항목과, 진행 중인 프로젝트가 아직 필요로 하는 의존성은 결정이 다릅니다.

<figure class="blog-diagram">
  <picture>
    <source media="(max-width: 900px)" srcset="/img/blog/windows-windows-developer-caches-en-mobile.webp" type="image/webp" width="768" height="1500">
    <img src="/img/blog/windows-windows-developer-caches-en.webp" width="1360" height="454" loading="lazy" alt="개발 저장소에는 역할이 다릅니다">
  </picture>
  <figcaption>네 가지 디렉터리 역할은 다시 만드는 대가가 다릅니다. 잠금 파일은 패키지나 도구 체인을 보존하지 않고 버전을 기록합니다.</figcaption>
</figure>

## Mole이 다루는 것과 도구에 남는 것

Windows용 Mole은 알아본 npm, pip, 그 밖의 캐시를 나열합니다. 사용 중인 내용은 보호되고, 자동으로 다시 만들어지지 않는 데이터가 있는 항목은 검토를 기다립니다. 모든 프로젝트의 의존성 폴더를 일반 캐시로 다루지는 않습니다. 정리 항목을 선택했다고 PC의 모든 Node.js나 Python 프로세스를 종료해도 되는 것은 아닙니다.

Gradle의 `caches`와 `wrapper\dists`는 Mole 정리 범위 밖에 있습니다. Android Studio 동기화와 다음 빌드가 직접 필요로 할 수 있습니다. 버전을 지웠다가 다시 받지 말고, Gradle이 보관을 관리하게 둡니다.

프로젝트 출력은 그 프로젝트의 안내에 따라 관리합니다. 표는 디렉터리 역할을 설명할 뿐, Mole이 나열된 모든 프로젝트 경로를 스캔해 자동으로 지운다는 뜻은 아닙니다. 소스, 구성, 세션, 로컬 모델은 개발 폴더에 있다고 캐시가 되지 않습니다.

## 같은 프로젝트로 뒤에 확인합니다

필요한 것은 독립 복사본을 둔 뒤 선택한 캐시를 다룹니다. 프로젝트의 원래 설치나 빌드를 반복하고 필요한 다운로드를 적습니다. 오프라인 발표나 여행 직전에 의존성, 도구 버전, 다운로드 캐시를 함께 비우지 마세요.

가상 디스크, 모델, 큰 출력이 저장소의 대부분을 차지하면 [대용량 파일 안내](/ko/windows/blog/find-large-files-on-windows)를 사용합니다. [캐시 안내](/ko/windows/blog/windows-cache-cleanup)는 일반 캐시와 개인 데이터를 나눕니다.


Canonical: https://mole.fit/ko/windows/blog/windows-developer-caches
