๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด Zero 2, ๋“œ๋””์–ด Java 21์„ ํ’ˆ๋‹ค (์ถฉ๋Œ ํ•ด๊ฒฐ)

์ตœ๊ทผ 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$AttributeReader
Java

์ด๋Ÿฌํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ๊ด€๋ จ ์˜ˆ์™ธ๋Š” ํ•ด๋‹น ๋ฒ„์ „์˜ 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/