AskClean

Xcode Clean Build Folder와 DerivedData 삭제의 차이

AskClean 팀 · 업데이트 2026-11-02

Clean Build Folder는 지금 열려 있는 스킴의 빌드 산출물을 지웁니다. DerivedData를 삭제하면 빌드 산출물에 더해 인덱스, 모듈 캐시, 로그까지 더 넓은 범위가 초기화됩니다. 빌드가 깨졌다면 Clean Build Folder부터 실행하고, 인덱스가 손상됐다면 해당 프로젝트의 DerivedData 폴더만 삭제하세요. 실제로 디스크 공간이 필요하다면 더 이상 빌드하지 않는 프로젝트의 DerivedData 폴더를 삭제합니다.

차이는 철저함이 아니라 범위입니다

Product > Clean Build Folder(Shift-Command-K)는 현재 열려 있는 프로젝트와 스킴 안에서만 동작합니다. 그 범위의 컴파일된 산출물과 중간 파일을 버려서 다음 빌드가 소스부터 다시 시작되게 합니다. 대상은 프로젝트 하나뿐이며, 다시 만드는 데 비용이 큰 데이터는 일부러 남겨 둡니다.

DerivedData는 기본 위치를 쓰는 모든 프로젝트가 공유하는 최상위 폴더입니다. ~/Library/Developer/Xcode/DerivedData 아래에 그동안 열어 본 프로젝트나 워크스페이스마다 하위 폴더가 하나씩 있습니다. 하위 폴더 하나를 지우면 정확히 그 프로젝트만 초기화되고, 폴더 전체를 지우면 모든 프로젝트를 다음에 열 때 다시 빌드하고 다시 인덱싱해야 합니다.

그러니 두 방법을 ‘가벼운 정리’와 ‘깊은 정리’로 나누는 것은 정확하지 않습니다. Clean Build Folder는 범위가 좁고 비용이 적으며, DerivedData 삭제는 범위가 넓고 인덱스를 다시 만드는 비용이 듭니다. 어느 쪽이 맞는지는 문제가 빌드 산출물 안에 있는지 밖에 있는지에 달려 있습니다.

빌드가 깨지면 좁은 범위부터 시작하기

브랜치를 바꾸거나 빌드 구성을 변경하거나 리소스 파일을 수정한 직후에 오류가 났다면, 실행 중인 앱을 종료하고 먼저 Clean Build Folder를 사용하세요. 가장 비용이 적은 초기화 방법이고 인덱스도 그대로 남으므로 빌드 한 번이면 다시 작업할 수 있습니다. DerivedData를 지우면 빌드에 더해 몇 분간의 인덱싱까지 기다려야 합니다.

증상이 빌드 산출물과 관계없어 보인다면 해당 프로젝트의 DerivedData 폴더를 삭제하는 단계로 넘어가세요. 이미 고친 코드에 오류가 계속 표시되거나, 정의로 이동(jump-to-definition)이 엉뚱한 곳으로 가거나, 코드 완성이 직접 만든 타입을 인식하지 못하는 경우입니다. 이런 증상은 인덱스 문제이며, Clean Build Folder는 인덱스를 건드리지 않습니다.

특히 알아 둘 만한 경우가 하나 있습니다. ‘클린 빌드로는 안 됐는데 DerivedData를 지우니 해결됐다’는 일이 생기는 흔한 이유이기 때문입니다. 미리 컴파일된 모듈 캐시(ModuleCache.noindex)는 프로젝트 하위 폴더 안이 아니라 DerivedData 최상위에 있어서 Clean Build Folder가 닿지 않습니다. SDK나 툴체인을 바꾼 뒤 모듈 캐시가 예전 상태로 남아 있으면 이 캐시를 지워야만 오류가 사라집니다.

두 방법 모두 소스 코드나 의존성에 있는 실제 버그를 고치지는 못합니다. 클린 빌드 후에도 같은 오류가 그대로라면 정리를 멈추고 컴파일러 메시지를 읽으세요. 원인은 프로젝트 설정, Package.resolved, 선택한 SDK 또는 코드 자체에 있습니다.

어느 쪽도 디스크 정리 방법이 아닙니다

Clean Build Folder는 진단 도구이며, 공간이 조금 비는 것은 부수 효과일 뿐입니다. 현재 프로젝트의 공간은 일부 돌아올 수 있지만, 다른 모든 프로젝트의 빌드 산출물과 모든 인덱스, 모듈 캐시는 그대로 남습니다. 디스크 공간을 확보하려고 이 명령을 실행하는 것은 엉뚱한 곳을 들여다보는 셈입니다.

공간 확보가 진짜 목적이라면 반대로 접근하세요. 먼저 DerivedData 하위 폴더의 크기를 측정한 다음 몇 달 동안 열지 않은 프로젝트의 폴더를 삭제합니다. 수십 GB가 쌓여 있는 곳은 대개 한 번 빌드하고 다시 열지 않은 일회성 클론입니다.

rm -rf부터 시작하지 마세요. Finder에서는 선택한 폴더를 휴지통으로 옮길 수 있고, 휴지통을 비우기 전까지는 되돌릴 수 있습니다. 지금 빌드 중인 프로젝트의 폴더를 실수로 지웠을 때 이 차이가 중요해집니다. 터미널은 자동화할 때 유용하지만, 정확한 경로를 확인한 다음에만 사용하세요.

숫자를 믿기보다 결과를 직접 확인하기

작업 전에 DerivedData 크기를 기록하고, 두 방법 중 하나만 적용한 다음 다시 측정하세요. Clean Build Folder를 실행했다면 현재 스킴을 빌드하고, DerivedData 폴더를 삭제했다면 Xcode를 열어 첫 빌드와 인덱싱이 끝날 때까지 기다립니다.

이 순서로 하면 되찾은 공간과 그 대가로 치른 시간을 따로 확인할 수 있습니다. 누구에게나 맞는 수치는 없습니다. 결과는 그 Mac에서 얼마나 많은 프로젝트, 구성, 아키텍처를 빌드했는지에 따라 달라집니다.

상황별로 고를 방법

상황할 일복구 비용
현재 스킴의 빌드가 실패함Product > Clean Build Folder이 프로젝트를 한 번 다시 빌드합니다. 모든 프로젝트의 인덱스는 그대로 남습니다.
고친 오류가 계속 보이고 정의로 이동이 엉뚱한 곳으로 감~/Library/Developer/Xcode/DerivedData/<project>해당 프로젝트만 전체 빌드와 인덱싱을 다시 합니다.
SDK를 바꾼 뒤 Clean Build Folder로도 오류가 남음~/Library/Developer/Xcode/DerivedData/ModuleCache.noindex다음 빌드에서 모듈을 다시 컴파일합니다. Clean Build Folder로는 지워지지 않습니다.
실제로 디스크 공간이 필요함~/Library/Developer/Xcode/DerivedData오래되고 큰 하위 폴더를 삭제합니다. 해당 프로젝트는 다음에 열 때 다시 빌드됩니다.
오래된 시뮬레이터 런타임Xcode Settings > Components완전히 별개의 분류입니다. 두 방법 모두 건드리지 않습니다.

이 표는 범위를 설명할 뿐, 확보할 수 있는 GB를 약속하지 않습니다. 작업 전후로 직접 측정하세요.

자주 묻는 질문

Clean Build Folder를 실행하면 DerivedData도 삭제되나요?

아닙니다. 열려 있는 프로젝트와 스킴의 빌드 산출물만 지웁니다. 모든 프로젝트의 인덱스, 모듈 캐시, 로그까지 담고 있는 공유 DerivedData 폴더를 삭제하는 것과는 다릅니다.

프로젝트 하나의 DerivedData 폴더를 삭제해도 안전한가요?

네. 안에 든 것은 모두 소스에서 만들어진 파일이라 Xcode가 다시 생성합니다. 코드와 Git 기록은 그대로입니다. 대가는 삭제 후 첫 빌드가 전체 빌드가 되고, 이어서 인덱싱이 진행된다는 것뿐입니다.

먼저 Xcode를 종료해야 하나요?

DerivedData를 직접 삭제할 때는 종료하세요. 지우는 동안 인덱서가 파일을 붙잡고 있거나 다시 만드는 일을 막을 수 있습니다. 내장된 Clean Build Folder 명령은 Xcode가 스스로 처리하므로 종료할 필요가 없습니다.

정리했는데도 오류가 그대로인 이유는 무엇인가요?

원인이 처음부터 캐시가 아니었을 가능성이 큽니다. 컴파일러 메시지, 스킴 설정, 의존성 버전, Package.resolved, 선택한 SDK, 그리고 현재 브랜치에서 실제로 바뀐 내용을 확인하세요.

Clean Build Folder로는 안 되고 DerivedData를 지우니 해결됐습니다. 왜 그런가요?

대개 미리 컴파일된 모듈 캐시 때문입니다. ModuleCache.noindex는 프로젝트 하위 폴더가 아니라 DerivedData 최상위에 있어서 Clean Build Folder는 닿지 않고, DerivedData를 지우면 함께 지워집니다.

참고 자료

Xcode 저장 공간 정리 계속하기