ํ™ˆ์œ ํŠœ๋ธŒ๋ธ”๋กœ๊ทธTop 10
๋‚ด ํ”„๋กœํ•„

๋ฐ๋ธŒํ—ˆ๋ธŒ ์•ˆ๋‚ด
์†Œ๊ฐœ์—…๋ฐ์ดํŠธ ์†Œ์‹

๋ฐ๋ธŒํ—ˆ๋ธŒ ์ปค๋ฎค๋‹ˆํ‹ฐ

Picocli: put some Java in your terminal ๐Ÿ’ป! by Steฬphane Philippart

Devoxx

2025. 10. 7.

0ํšŒ

#backend
#devops
  • Picocli๋Š” Java, Groovy, Kotlin, Scala๋กœ CLI๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•˜๊ณ  ํ™œ๋ฐœํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฉฐ, ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿš€
  • Quarkus๋Š” ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  Picocli ๊ธฐ๋ฐ˜ CLI ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ์„ ๊ฐ„์†Œํ™”ํ•˜์—ฌ, ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋Šฅ ์™ธ์—๋„ CLI ๊ฐœ๋ฐœ์— ํฐ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. โšก
  • CLI ์ปค๋งจ๋“œ๋Š” Runnable ๋˜๋Š” Callable<Integer> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํ‘œ์ค€ Java ํด๋ž˜์Šค๋กœ ์ •์˜๋˜๋ฉฐ, @Command ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ปค๋งจ๋“œ ์ด๋ฆ„๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ’ป
  • @Option ์–ด๋…ธํ…Œ์ด์…˜์€ ๋ช…์‹œ์ ์ธ ํ”Œ๋ž˜๊ทธ(์˜ˆ: -h, --help)๋ฅผ ๊ฐ€์ง„ ์ธ์ž๋ฅผ ์ •์˜ํ•˜๊ณ , @Parameters๋Š” ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ธ์ž๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ์ด๋“ค์€ ์ž๋™ ์ธ๋ผ์ธ ๋„์›€๋ง ์ƒ์„ฑ์— ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. โ“
  • Quarkus ๊ฐœ๋ฐœ ๋ชจ๋“œ(quarkus dev)๋Š” ์ฝ”๋“œ ๋ฐ ์„ค์ • ๋ณ€๊ฒฝ ์‹œ ์ž๋™ ๋ฆฌ๋กœ๋”ฉ์„ ์ง€์›ํ•˜์—ฌ CLI ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํฌ๊ฒŒ ๊ฐ€์†ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ”„
  • ์‹ค์ œ CLI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” Callable<Integer>๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๊ณต/์‹คํŒจ์— ๋”ฐ๋ฅธ ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜๋ฉฐ, ์—ฌ๋Ÿฌ ์ปค๋งจ๋“œ ์ค‘ ๋ฉ”์ธ ์ง„์ž…์ ์„ @TopCommand๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โœ…
  • ์„œ๋ธŒ์ปค๋งจ๋“œ๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ CLI๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฉ”์ธ ์ปค๋งจ๋“œ์˜ subcommands ์†์„ฑ์œผ๋กœ ์„œ๋ธŒ์ปค๋งจ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๐Ÿงฉ
  • Quarkus REST Client๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜์œผ๋กœ REST API ํ˜ธ์ถœ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ, ์™ธ๋ถ€ ์„œ๋น„์Šค์™€์˜ ์—ฐ๋™์„ ๋งค์šฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๐ŸŒ
  • quarkus build ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ JAR ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, quarkus build --native ๋ช…๋ น๊ณผ GraalVM์„ ์‚ฌ์šฉํ•˜์—ฌ JDK ์„ค์น˜ ์—†์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“ฆ
  • GraalVM ๋„ค์ดํ‹ฐ๋ธŒ ๋นŒ๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜์—ฌ ์ตœ์ ํ™”ํ•˜์ง€๋งŒ, ๋ฆฌํ”Œ๋ ‰์…˜ ์‚ฌ์šฉ ์‹œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ํ”Œ๋žซํผ๋ณ„ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ› ๏ธ
  • LangChain4j Quarkus ํ™•์žฅ์„ ํ†ตํ•ด AI ๋ชจ๋ธ(LLM ํฌํ•จ)์„ CLI์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, @RegisterAiService ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ AI ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿง 
  • Picocli๋Š” File ํƒ€์ž…๊ณผ ๊ฐ™์€ ํ•„๋“œ์— ๋Œ€ํ•œ ์ž๋™ ์ปจ๋ฒ„ํ„ฐ๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์˜ต์…˜์œผ๋กœ ๋ฐ›์•„ ํŒŒ์ผ ํ•ธ๋“ค๋ง์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ํƒ€์ž… ๋ณ€ํ™˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“

Recommanded Videos