데브허브 | DEVHUB | Picocli: put some Java in your terminal 💻! by Stéphane PhilippartPicocli: put some Java in your terminal 💻! by Stéphane Philippart
- 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 타입과 같은 필드에 대한 자동 컨버터를 제공하여, 파일 경로를 옵션으로 받아 파일 핸들링을 자동으로 처리하는 등 다양한 타입 변환을 지원합니다. 📁