์ต๊ทผ IoT๋ ์๋ฒ ๋๋ ํ๊ฒฝ์์ Java๊ฐ ํ์ฉ๋๋ ์ฌ๋ก๊ฐ ๋์ด๋๊ณ ์๋ ์ํฉ์์ ์ ์ ๋ ฅ ๋ง์ดํฌ๋ก ์ปดํจํฐ์ ๋๋ช ์ฌ ๊ฒฉ์ธ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด Zero 2์ Java 21์ด์ ๋ฒ์ ์ฌ์ด์ ์ถฉ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋ค๋ ์์์ด๋ค.
๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด Zero 2์ ๋ฌด์จ ๋ฌธ์ ๊ฐ ์์๋
๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด Zero 2์ ๋๋์ธ ARM Cortex-A53 ํ๋ก์ธ์์ Java 21์ JIT(Just-In-Time) ์ปดํ์ผ๋ฌ ์ฌ์ด์ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์์๋๋ฐ, A53 ์นฉ์
์์ ํน์ ๋ช
๋ น์ด(ํนํ VectorizedHashCode intrinsic)๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ ์ถฉ๋์ ์ผ์ผ์ผฐ๋ ๊ฒ์ด๋ค.
Java 21์์ ๋ณ๊ฒฝํ ์ปดํ์ผ ๋ฐฉ์์ด ํน์ ํ๋์จ์ด (๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด Zero 2)์์ ์ค์๋์ ์ผ์ผํจ ๊ฒ์ด์๊ณ ๊ทธ ๊ฒฐ๊ณผ Java ์ฝ๋๋ฅผ ์คํํ ๋ ์ปดํ์ผ๋ฌ ์์ธ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์ฝ๋๊ฐ ๋์๊ฐ์ง ์๋ ๋ฌธ์ ์๋ค.
์ค๋ฅ์ ์์
java.lang.NoClassDefFoundError: com/sun/tools/javac/jvm/ClassReader$AttributeReaderJava์ด๋ฌํ ์ปดํ์ผ๋ฌ ๊ด๋ จ ์์ธ๋ ํด๋น ๋ฒ์ ์ Java๋ฅผ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด Zero 2์์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์๋ค.
ํ์ง๋ง ์ต์ OpenJDK ๋น๋ (21.0.8๊ณผ 25)๋ฅผ ํตํด ์ด ๋ฒ๊ทธ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ํจ์น๋์๋ค.
์ฃผ์ ๋ณ๊ฒฝ์
์ด๋ฒ ์ ๋ฐ์ดํธ๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋ฆด๋ฆฌ์ฆ๋ผ๊ธฐ ๋ณด๋ค ์น๋ช ์ ์ธ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํจ์น๋ผ๋ ์ ์์ ์๋ฏธ๊ฐ ์๋ค.
ํน์ ARM ์ํคํ ์ฒ(Cortex-A53)์์ ์์ ํ ํธํ์ฑ ํ๋ณด
์ด์ ์๋ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด Zero 2๊ฐ์ A53 ๊ธฐ๋ฐ ์ฅ์น ์ฌ์ฉ์๋ค์ Java 17์ด๋ ๊ทธ ์ดํ ๋ฒ์ ์ ๋จธ๋ฌผ๋ฌ์ผ ํ๋ค. ์ด๋ฒ ํจ์น๋ก ์ธํด ๋ง์นจ๋ด, Java 21 LTS ๋ฒ์ ์ ๊ณต์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค. ์ด๋ ์๋ฒ ๋๋ ์์คํ
์ด๋ IoT ์ฅ์น ๊ฐ๋ฐ์์ ํ๋์จ์ด ์ ์ฝ ๋๋ฌธ์ ์ต์ ๊ธฐ์ ์ ์ ์ฉํ์ง ๋ชปํ๋ ๋ฌธ์ ๋ฅผ ํด์ํ ๊ฒ์ด๋ค.
JIT ์ปดํ์ผ๋ฌ์ ์์ ์ฑ ํฅ์
๋ฒ๊ทธ ์์ (JDK-8353237)์ ํตํด Java ๋ฐํ์ ํ๊ฒฝ์ ํต์ฌ ์์์ธ JIT ์ปดํ์ผ๋ฌ๊ฐ ํน์ ํ๋์จ์ด์์ ์์ธก ๋ถ๊ฐ๋ฅํ ์ค๋ฅ๋ฅผ ์ผ์ผํค๋ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ํด๊ฒฐํ ๋ฐ์ ์๋ฏธ๊ฐ ํฌ๋ค๊ณ ์๊ฐํ๋ค. ์ด๋ ํฅํ ๋ง์ด๋ ์ํคํ ์ฒ ํ๊ฒฝ์์๋ OpenJDK๊ฐ ๋ ๋์ ์์ ์ฑ์ ๋ณด์ฅํ ๊ฒ์์ ์๋ฏธํ๋ค.
์ต์ LTS ๋ฒ์ ํ์ฉ ๊ฐ๋ฅ ๋ฒ์ ํ๋
Java 21์ ๊ฒฝ๋ํ ์ค๋ ๋์ธ ๊ฐ์์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ์ ์ธ ๊ธฐ๋ฅ๋ค์ ํฌํจํ๊ณ ์๋ค. Zero 2๋ ์ ์ ๋ ฅ ์ฅ์น์ง๋ง Java21์ ์์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฉด์ ์ด ์ฅ์น์์ ๊ตฌ์ถ๋๋ ์ฃ์ง ์ปดํจํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ Java ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ ์ฉํ ์ ์๋ ๊ธธ์ด ์ด๋ฆฐ ๊ฒ์ด๋ค.
์ด ์์์ ์ฃผ๋ชฉํ๋ ์ด์
์์คํ ์ ์ฒด์ ํจ์จ์ฑ์ ๊ณ ๋ คํ ๋ ์ฃ์ง ๋๋ฐ์ด์ค์์ Java๋ฅผ ํ์ฉํ๋ ๊ฒ์ ์ด์ ์ ๋ถ๋ช ํ๋ค.
๊ฐ๋ฐ ์์ฐ์ฑ ๋ฐ ์คํ ํต์ผ์ฑ
๋ง์ฝ ๋ฐฑ์๋ ์๋ฒ๋ฅผ Java 21๋ก ๊ตฌ์ถํ๊ณ ์๋๋ฐ ์ฃ์ง ์ฅ์น๋ ๊ตฌ๋ฒ์ (Java 17..)๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด ๋ ํ๊ฒฝ์ ๋ํ ์ข ์์ฑ ๊ด๋ฆฌ์ ํ ์คํธ๊ฐ ๋ณต์กํด์ง๋ค. ์ด์ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด Zero 2์์๋ ์๋ฒ์ ๋์ผํ Java 21 LTS ๋ฒ์ ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ฉด์ ๊ฐ๋ฐ ์คํ์ ํต์ผํ ์ ์๋ค.
์ฑ๋ฅ ๋ฐ ์ ๋น์ฉ ์๋ฒ ๋๋ ์๋ฃจ์ ๊ตฌ์ถ ๊ฐ๋ฅ
๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด Zero 2๋ RPI 4๋ 5์ ๋นํด ์ ๋ ดํ๊ณ ์ ๋ ฅ ์๋ชจ๊ฐ ์ ๋ค. ํ์ง๋ง ๊ธฐ์กด์๋ Java 21์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๋๋ฆด ์ ์์์ง๋ง ์ด์ ์ต์ OpenJDK์ ์ฑ๋ฅ ํฅ์(ํนํ JIT ์ต์ ํ)์ ์ด ์ ๋ ดํ ์ฅ์น์์๋ ํ์ฉํ ์ ์๊ฒ ๋์๋ค. ์ด๋ ๋น์ฉ ํจ์จ์ ์ด๋ฉด์๋ ๊ฐ๋ ฅํ ์ฃ์ง ์ปดํจํ ๋ ธ๋๋ฅผ ๊ตฌ์ถํ ์ ์์์ ์๋ฏธํ๋ค.
๋ณด์ ๋ฐ ์ ์ง๋ณด์ ์ฉ์ด์ฑ
๋ฒ๊ทธ ํฝ์ค ์ธ์๋ ์ต์ OpenJDK ๋ฒ์ ์ ํ์์ ์ธ ๋ณด์ ํจ์น์ JVM ์์ ์ฑ ๊ฐ์ ์ฌํญ์ ํฌํจํ๋ค. ์๋ฒ ๋๋ ์ฅ์น๋ ๋ณด์ ์ทจ์ฝ์ ์ ๋์ฑ ๋ฏผ๊ฐํ ์๋ฐ์ ์๋๋ฐ ์ต์ ๋ฒ์ ์ผ๋ก ์ฝ๊ฒ ์ ๊ทธ๋ ์ด๋ํ ์ ์๋ค๋ ์ ์ ์์คํ ์ ์ฅ๊ธฐ์ ์ธ ์์ ์ฑ๊ณผ ๋ณด์ ์ ์ง๋ณด์ ์ธก๋ฉด์์ ํฐ ์ด์ ์ด๋ค.
๊ฒฐ๋ก
ํ๋์จ์ด์ ์ํํธ์จ์ด์ ์ฌ์ธํ ํธํ์ฑ ๋ฌธ์ ๋ ๋ ์ฐ๋ฆฌ ๊ฐ๋ฐ์๋ค์ ๊ดด๋กญํ์๋ค. ์ด๋ฒ OpenJDK์ ๋น ๋ฅธ ๋์ ๋๋ถ์ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด Zero 2๋ฅผ ํ์ฉํ Java ๊ธฐ๋ฐ IoT/์๋ฒ ๋๋ ํ๋ก์ ํธ๋ค์ด ๋ค์ ํ๊ธฐ๋ฅผ ์ฐพ์ ์ ์๊ฒ ๋์๋ค.
๋ง์ฝ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด Zero 2 ํ๊ฒฝ์์ Java 21 ์ด์ ๋ฒ์ ์ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ๋ค๊ฐ ์ค๋ฅ๋ฅผ ๊ฒช์๋ค๋ฉด ์ง๊ธ ๋ฐ๋ก ์ต์ OpenJDK 21.0.8 ๋๋ 25 ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธ ํ๊ธฐ ๋ฐ๋๋ค. ๊ณ ๊ณ ๊ณ !!!
์ฐธ๊ณ : https://foojay.io/today/java-21-on-raspberry-pi-zero-2-is-back-in-business/