![[안드로이드] Room 에러: java.lang.IllegalStateException: Storage for [C:\{...}\build\kspCaches\debug\symbolLookups\id-to-file.tab] is already registered](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH3tAm%2FbtsMz7D24gP%2FTfXnjETZLJkte4lxYRnje0%2Fimg.png)
안녕하세요 주코입니다. 오늘은 개인 앱 개발도중 Room의 AutoMigrations을 설정하다가 오류가 발생하였는데, 치명적이라고 생각하여 해당 에러에 대한 생각과 해결방법을 알려드리기 위해 이렇게 글을 쓰게 되었습니다.
에러 발생 원인
저는 Ksp를 사용하고 있습니다.
정확히 어느 시점에 해당 에러가 발생한 지 정확한 원인은 찾기 어려웠습니다. 다만 추측은 가능했습니다.
@Database(
version = 1,
entities = [WorkPlaceEntity::class],
exportSchema = false,
// autoMigrations = [AutoMigration(from = 1, to = 2)]
)
@TypeConverters(WorkPlaceConverters::class)
abstract class AppDatabase : RoomDatabase() {
abstract fun workPlaceDao(): WorkPlaceDao
}
에러가 발생하기 전, @Database의 exportSchema를 true와 false 설정도 해보고 autoMigrations도 추가했다 삭제도 해보고, version을 증가도시 켜보고 감소시키기도 했었습니다.
마지막으로 RoomDatabase Module에서
.fallbackToDestructiveMigration()
해당 메서드까지 써보고 지워보고 했기 때문에 어느 시점에서 에러가 발생했는지, 추측은 가능할지 제대로된 원인은 찾지 못하였습니다.
하지만 build 에러 문구와 같이 kspCaches에서 충돌이 발생했다는 것은 알 수 있었습니다.
즉, KSP가 캐시를 관리하는 방식에서 문제가 발생한 듯합니다.
에러 해결 방법
해결 방법에는 세 가지가 있었습니다.
1. 터미널에서 KotlinCompileDaemon 강제 종료하기
KotlinCompileDaemon을
다만, 저는 GitBash에서 kill: 7980: No such process라는 메시지와 함께 해결을 하지 못하였습니다.
jps | grep -E 'KotlinCompileDaemon' | awk '{print $1}' | xargs kill -9 || true
Windows는 Git Bash 또는 WSL에서 사용하는 것으로 해결할 수 있었습니다.
2. gradle 중지시키기
/gradlew --stop
이 방법은 KotlinCompileDaemon을 멈출 수 있습니다. 다만, 해당 문제가 발생할 때마다 계속 사용해야만 합니다.
3. gradle.properties 파일에 코드 추가
ksp.incremental=false
해당 코드를 추가하면 더 이상 문제가 발생하지 않았습니다.
그 이유는 KSP는 기본적으로 증분을 사용하기 때문에 변화하지 않는 코드는 리빌드 하지 않습니다.
예를 들어 A B C D가 있을 때 D를 실행시키고 싶지만 B에서 문제가 발생하면 KSP는 에러가 발생합니다.
따라서 증분을 취소시키는 것으로 빌드되지 않는 부분이 자동으로 저장 공간을 할당하지 않습니다.
다만, 다시 코드 true 또는 코드를 삭제하면 같은 문제가 발생할 수 있습니다.
마무리
해당 문제에 대하여 발생한 원인에 대해 정확히 알지 못한 게 아쉽습니다.
제가 구글링 해서 찾아본 원인으로는 전부 KSP가 캐시를 관리하는 방식에서 나온 "추측"이었습니다.
제가 해결 방법으로 제시한 3가지 방법 중 1번과 2번은 어떠한 문제인지에 따라 해결이 되지 않을 수도 있다고 합니다.
저는 3번의 방법으로 해결했지만 이 방법이 가장 확실해 보입니다. 다만, 잠재적인 원인에 대한 해결법이 아니기에 좋지 못한 방법이라고 생각은 듭니다.
이러한 문제는 KSP에서 잘 해결을 해주어야 할 것 같은데.. 최근 KSP2 베타버전이 나왔던데 어서 정식버전이 되어서 잘 해결이 되었으면 좋겠네요..
해당 문제에 대한 KSP Issue는 아래 링크를 통해 확인해 보세요.
`java.lang.IllegalStateException: Storage for [...] is already registered` with 2.0.20-1.0.24 · Issue #2072 · google/ksp
Since updating to 2.0.20-1.0.24 our devs started getting the following occasionally: java.lang.IllegalStateException: Storage for [path/to/project/my-module/build/kspCaches/debug/symbolLookups/id-t...
github.com
'Android Studio > - Honey Tip' 카테고리의 다른 글
[안드로이드] Authenticator, Hilt dependency cycle 에러 (0) | 2025.03.19 |
---|---|
[안드로이드] Firebase 에러 ERROR_INVALID_CREDENTIAL 해결법 (2) | 2024.12.17 |
[안드로이드] Foreground Service에서 Notification이 뜨지 않는 문제 (Feat. FastCampus) (0) | 2024.07.30 |
[안드로이드] Extended Controls의 location 흰색화면 (0) | 2024.06.17 |
[안드로이드] RecyclerView 아이템 무한 중복생성 해결방법 + 이유 (1) | 2024.04.17 |
주코딩의 개발 노트!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!