Room_DB_Impl_annotation_&_Main_Thread - boostcampwm-2024/and04-Nature-Album GitHub Wiki

๐Ÿ’ฅ lmpl does not exist

๋ฌธ์ œ ์ •์˜

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.and04.naturealbum/com.and04.naturealbum.MainActivity}: java.lang.RuntimeException: Cannot find implementation for com.and04.naturealbum.AppDatabase. AppDatabase_Impl does not exist

image

  • ํ”„๋กœ์ ํŠธ์—์„œ Room ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค ํ•  ๋•Œ, AppDatabase_Impl does not exist๋ผ๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ
  • Room์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ–ˆ์Œ์„ ์˜๋ฏธ

๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • gradle Kapt ํ˜น์€ Ksp ์„ค์ • ํ™•์ธ

๋ฌธ์ œ ํ•ด๊ฒฐ ์ง„ํ–‰

  1. Kapt ์„ค์ • ํ™•์ธ:
    • build.gradle.kts ํŒŒ์ผ์— kapt ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•˜๊ณ , Room ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•œ kapt ์˜์กด์„ฑ์„ ์„ค์ •
    • ๊ทธ๋Ÿฌ๋‚˜ ๋นŒ๋“œ ์‹œ Unresolved reference: kapt ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ง„ํ–‰์„ ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.
  2. Ksp๋กœ ์ „ํ™˜:
    • kapt ๋Œ€์‹  ksp(Kotlin Symbol Processing)๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •
    • build.gradle.kts ์ˆ˜์ •ํ•˜์—ฌ Ksp ๊ด€๋ จ ์ถ”๊ฐ€
  3. ๋นŒ๋“œ ๋ฐ ์‹คํ–‰
  • ksp๋กœ ์ „ํ™˜ํ•œ ํ›„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ, AppDatabase_Impl ํด๋ž˜์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋จ

๊ฒฐ๊ณผ

  • ksp ๋กœ AppDatabase_Impl ํด๋ž˜์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ

์ถ”๊ฐ€ ํ™•์ธ ์‚ฌํ•ญ:

  • kapt๋ฅผ ์‚ฌ์šฉํ•˜๋ ค ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ Unresolved reference: kapt ์˜ค๋ฅ˜์˜ ์›์ธ์€ ์•„์ง ๋ช…ํ™•ํ•˜์ง€ ์•Š์Œ
  • kapt ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์•„, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ์ด๋‚˜ Gradle ์„ค์ •์˜ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ด„
  • ํ–ฅํ›„ kapt๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ์˜ค๋ฅ˜์˜ ์›์ธ์„ ์ถ”๊ฐ€๋กœ ์กฐ์‚ฌํ•˜๊ณ  ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ๋ชจ์ƒ‰ํ•ด์•ผ ํ•˜๋‚˜ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” ksp๋กœ ์ •์ƒ ์ž‘๋™ ๋˜๋ฏ€๋กœ ์ด๋กœ ์ง„ํ–‰.

๐Ÿ’ฅ Cannot access database on the main thread

๋ฌธ์ œ ์ •์˜

  • Ksp๋ฅผ ํ†ตํ•ด impl ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋‚˜๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์„ธ์ง€ ๋ฐœ์ƒ

image

  • ์›์ธ์€ MainActivity์˜ onCreate()์—์„œ Database์— ์ ‘๊ทผํ–ˆ์œผ๋‚˜, Database ์ ‘๊ทผ์€ main thread์—์„œ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ
  • โ€œ์žฅ๊ธฐ๊ฐ„ UI๊ฐ€ ์ž ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ ์Šค๋ ˆ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.โ€

๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • Main Thread๊ฐ€ ์•„๋‹Œ IO Thread์—์„œ Database์— ์ ‘๊ทผํ•˜๋„๋ก ๋ณ€๊ฒฝ

๋ฌธ์ œ ํ•ด๊ฒฐ ์ง„ํ–‰

  • *CoroutineScope*(Dispatchers.IO).*launch*
  • Room DB ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด IO Thread์—์„œ Database์— ์ ‘๊ทผํ•˜๋„๋ก ๋ณ€๊ฒฝ

๊ฒฐ๊ณผ

  • ์ง€๊ธˆ์€ ์ž„์‹œ์ ์œผ๋กœ CoroutineScope ์—์„œ ์ฒ˜๋ฆฌํ•˜๋‚˜, ์ดํ›„์—๋Š” Repository + Viewmodel์„ ์‚ฌ์šฉํ•˜์—ฌ ViewmodelScope์—์„œ ์ง„ํ–‰ํ•  ์˜ˆ์ •

๐Ÿ’ฅ room-complier kapt ์ถ”๊ฐ€ ํ™•์ธ ์‚ฌํ•ญ

  • Hlit ๊ด€๋ จ kapt๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ kapt๊ฐ€ ์ œ๋Œ€๋กœ ์ •์ƒ ์ž‘๋™๋จ์„ ํ™•์ธํ•˜๊ณ  ๋‹ค์‹œ room-complier ๊ด€๋ จ ํ™•์ธ์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  room-complier ์ž์ฒด๊ฐ€ ksp๋ฅผ kapt ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋ผ๊ณ  ์•ˆ๋‚ด๊ฐ€ ๋˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ–ˆ๋‹ค.
  • kapt ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ room-complier์˜ ๊ถŒ์žฅ ๋ฌธ์ œ์˜€๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

image