CLI 자동 완성을 위한 Optique 0.10.0, 종속성 시스템 도입!

by DD
4개월 전
조회수 6

Optique 0.10.0은 CLI(Command Line Interface)에서 옵션 간의 종속성(Dependency)을 지원하여 자동 완성 기능을 개선함

`dependency()`, `derive()`, `deriveFrom()` 함수를 통해 런타임 입력 기반의 동적 옵션 완성(Dynamic Option Completion)을 구현함

Git, 클라우드 환경 등 외부 시스템과의 연동 시 향상된 사용자 경험(Improved User Experience)을 제공함

타입스크립트(TypeScript) 기반으로 타입 안전성(Type Safety)을 보장하며, 컴파일 타임에 오류를 감지함

CLI 자동 완성의 한계와 Optique의 해결책

기존 CLI 파서(Parser)는 각 옵션을 독립적으로 처리하여, `--repo` 옵션 값에 따라 `--branch` 옵션의 자동 완성이 달라지는 경우를 제대로 지원하지 못했다. Optique 0.10.0은 종속성 시스템(Dependency System)을 도입하여 이러한 문제를 해결했다. 특히, `dependency()` 함수를 통해 종속성 소스(Dependency Source)를 지정하고, `derive()` 함수를 사용하여 종속된 파서(Parser)를 생성함으로써 상호 의존적인 옵션(Interdependent Options)의 자동 완성을 가능하게 했다.

Optique의 3단계 파싱 전략

Optique는 세 단계의 파싱 전략을 사용한다. 첫 번째 단계에서는 모든 옵션을 파싱하여 종속성 값을 수집하고, 두 번째 단계에서는 팩토리 함수(Factory Function)를 호출하여 수집된 값을 기반으로 구체적인 파서를 생성한다. 마지막 단계에서는 동적으로 생성된 파서를 사용하여 파생된 옵션을 다시 파싱한다. 이러한 과정을 통해 Optique는 유효성 검사(Validation)자동 완성(Completion)을 모두 정확하게 지원하며, 개발자는 타입 안전성(Type Safety)을 유지하면서 복잡한 CLI를 구축할 수 있다.

Git, 클라우드 환경에서의 활용

Optique는 Git 저장소(Repository)와 같은 외부 시스템과의 연동을 위해 `@optique/git` 패키지를 제공한다. 이 패키지는 `gitBranch()`와 같은 비동기(Async) 함수를 통해 Git 저장소의 브랜치(Branch) 정보를 가져와 자동 완성에 활용한다. 또한, 클라우드 환경, 데이터베이스 등 런타임에 유효한 값이 결정되는 다양한 시나리오에서 Optique의 종속성 시스템은 향상된 사용자 경험(Improved User Experience)을 제공한다. 특히, 멀티플랫폼 지원(Multi-Platform Support)을 통해 Node.js와 Deno 환경 모두에서 사용 가능하다.

종속성 시스템의 확장성

Optique는 단일 종속성뿐만 아니라, `deriveFrom()` 함수를 통해 여러 옵션에 대한 종속성을 지원한다. 이 함수는 여러 종속성 값을 받아 팩토리 함수에 전달하여, 복잡한 조건의 자동 완성을 구현할 수 있게 한다. 또한, 비동기(Async) 작업을 위한 `deriveAsync()`와 동기(Sync) 작업을 위한 `deriveSync()` 함수를 제공하여, 다양한 환경에 유연하게 대응할 수 있다. 이러한 유연성은 개발자가 복잡한 CLI(Complex CLI)를 구축하는 데 필요한 도구를 제공한다.

Your CLI's completion should know what options you've already typed