[Spring] - NoSuchMethod
๐ ๏ธ ๊ฐ๋ฐ ํ๊ฒฝ
- kotlin : 2.1.0
- Spring Boot : 3.3.0
๐ฌ ์ํฉ ์ค๋ช
ํ์ฌ ํ๋ก์ ํธ์์ ์๋น์ค ๋ก์ง์ ๊ฐ๋ฐํ๋ ์ค, ์๋ฒ๋ฅผ ์คํํ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ ๋ฉ์์ง๊ฐ ๋ฐ์ํ๋ค.
java.lang.NoSuchMethodError: 'java.lang.Object server.temperature.TemperatureService.findTemperature(int, kotlin.coroutines.Continuation)'
@Service
class TemperatureService(
...
) {
suspend fun findTemperature(
temperatureCatRowid: Int
): Flow<Temperature> = ...
}
์๋ฌ ๋ฉ์์ง์ ๋ณด์ด๋ ๊ฒ๊ณผ ๊ฐ์ด NoSuchMehtod
์๋ฌ๊ฐ ๋ฐ์ํ์ง๋ง, ๋ถ๋ช
์๋น์ค์๋ ํด๋น ๋ฉ์๋๊ฐ ์กด์ฌํ๋ค.
โ ํด๊ฒฐ ๊ณผ์
ํ์ฌ ํ๋ก์ ํธ๋ ์ ๊ทธ๋ฆฌ๊ฒ์ดํธ(Aggregate) ๋จ์๋ก ๋ฉํฐ ๋ชจ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ํ์ผ ๊ฒ์์ ํตํด ํ์ธํด๋ณด๋ ๋ค๋ฅธ ์ ๊ทธ๋ฆฌ๊ฒ์ดํธ ๋ชจ๋์์ ๋์ผํ ์ด๋ฆ์ ์๋น์ค๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ์คํ๋ง์ ๋์ผํ ์ด๋ฆ์ ํด๋์ค๊ฐ ์๋ค๊ณ ์๋ฌ๋ฅผ ์ก์ง ์์์ฃผ์์๊น?
์ฐ์ , JVM์ ํจํค์ง์ ํด๋์ค ์ด๋ฆ(์ ํํ๋ FQCN: Fully Qualified Class Name)์ ๊ธฐ์ค์ผ๋ก ํด๋์ค๋ฅผ ๊ตฌ๋ถํ๋ค. ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ์์๋ ๊ฐ ๋ชจ๋์ด ์๋ก ๋ค๋ฅธ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ฏ๋ก, ๋์ผํ ์ด๋ฆ์ ํด๋์ค๊ฐ ์์ด๋ JVM์ ์ด๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์ธ์ํ๋ค.
Spring์ ํด๋์ค ์ด๋ฆ(์๋ฌธ์๋ก ์์)์ ๊ธฐ๋ณธ์ ์ธ Bean ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ค. ๋์ผํ ์ด๋ฆ์ Bean์ด ๋ฑ๋ก๋ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฎ์ด์์์ง๋ค.
๋ฐํ์์ ๋ฐ์ํ java.lang.NoSuchMethodError
๋ JVM์ด ์๋ชป๋ ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ฉด์ ๋ฐ์ํ ๋ฌธ์ ๋ค. ๋ฉํฐ ๋ชจ๋ ํ๊ฒฝ์์๋ ๋์ผํ ์ด๋ฆ์ ํด๋์ค๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง Bean์ด ์ถฉ๋ํ๋ฉด์ ํด๋์ค ๋ก๋ฉ ๊ณผ์ ์์ ์๋์น ์์ ๋์์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ๋ฉํฐ ๋ชจ๋ ํ๊ฒฝ์์ Spring์ ๋จผ์ ์ค์บ๋ Bean์ ๋ฎ์ด์์ฐ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ฉฐ, ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค์ ๊ณผ ์ค๊ณ ๋ฐฉ์์ ๋ฐ๋ผ ์๊ธฐ์น ์์ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ ์ ์๋ค.
๐ค ํ๊ณ
์ ๋ง ๊ฐ๋จํ ๋ฌธ์ ์์ง๋ง, ์ค์ ๋ก ์ ์ํฉ์์ ๊ทผ๋ณธ์ ์ธ ์์ธ์ ์ฐพ๊ธฐ๋ณด๋จ, ๋น๋ ์บ์๊ฐ ์์ฌ์ ๋ฐ์ํ ์๋ฌ๋ก ํ๋จํ๊ณ , clean build
, invalidation cache
๋ฅผ ๋จผ์ ์๋ํ๋ค.
ํด๋น ๋ฌธ์ ๊ฐ ์๋๊ฒ ์์์ผ๋ฉด, ๋จผ์ ๊ฐ์ ํด๋์ค๊ฐ ์๋์ง ํ์ธํ์ด์ผ ํ๋๋ฐ, ์คํ๋ง์ ๊ตฌ๋์ด ๋๊ธฐ ๋๋ฌธ์ ๋จธ๋ฆฌ ์์ ๊ทธ๋ฐ ์๊ฐ์ด ๋ค์ง ์์๋ค.
์ด ์๋ฌ๋ฅผ ํด๊ฒฐํ๋ฉด์ ์คํ๋ง๊ณผ JVM์ ๋ํด ์ ๋ชจ๋ฅด๋๊ฒ ๋ง์ ๊ฒ ๊ฐ๋ค๊ณ ๋๊ปด์ก๋ค. ์กฐ๊ธ ๋ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ฅผ ์ฐพ๊ธฐ ์ํด ๋จผ์ ์๊ฐํ๋ ์ต๊ด์ ๊ฐ์ ธ์ผํ ๊ฒ ๊ฐ๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ