Apache Commons CLI를 사용한 명령줄 인수 처리

명령줄 애플리케이션의 기본 흐름

명령줄 기반 자바 프로그램은 일반적으로 세 가지 주요 단계를 거쳐 동작한다: 명령어 옵션 정의 → 입력된 인수 파싱 → 비즈니스 로직 실행. Apache Commons CLI 라이브러리는 이러한 과정을 체계적으로 구현할 수 있도록 도와주는 유틸리티로, 사용자 입력을 안정적이고 일관성 있게 처리할 수 있다.

옵션 정의하기

모든 명령줄 인터페이스는 사전에 허용할 옵션들을 명시해야 한다. Commons CLI에서는 Options 클래스가 이러한 설정 정보를 담는 컨테이너 역할을 수행한다. 각각의 옵션은 짧은 이름(-h), 값 필요 여부, 설명 등으로 구성되며, Option 객체로 표현된다.


// Options 컬렉션 생성
Options optionSet = new Options();

// 도움말 출력용 플래그 추가 (-h)
optionSet.addOption("h", false, "간단한 도움말을 출력합니다");

// 프로토콜 지정용 옵션 추가 (-t)
optionSet.addOption("t", true, "CIM 연결 시 사용할 HTTP 프로토콜을 설정함");
    

위 예제에서 false로 설정된 "-h" 옵션은 플래그 형태로, 별도의 값을 요구하지 않는다. 반면 true인 "-t" 옵션은 사용자가 다음에 오는 값을 반드시 제공해야 하며, 예: -t https와 같은 형식이 된다.

입력 인수 파싱

실제 실행 시 전달된 문자열 배열(args)을 구조화된 데이터로 변환하는 작업이 파싱이다. Commons CLI는 여러 파서 구현체를 제공하며, 대표적인 것으로는 DefaultParser (기존의 PosixParser 및 GnuParser 통합)가 있다.


// 명령줄 파서 인스턴스 생성
CommandLineParser parser = new DefaultParser();

// args 배열과 옵션 정의를 기반으로 파싱 수행
try {
    CommandLine cmdLine = parser.parse(optionSet, args);

    // -h 옵션이 포함되었는지 확인
    if (cmdLine.hasOption("h")) {
        printHelp(); // 도움말 출력 로직 호출
    }

    // -t 옵션의 값이 존재하면 저장
    if (cmdLine.hasOption("t")) {
        String protocol = cmdLine.getOptionValue("t");
        configureProtocol(protocol);
    }
} catch (ParseException e) {
    System.err.println("인수 해석 오류: " + e.getMessage());
    printHelp();
}
    

옵션 값 조회 및 활용

파싱 후 생성된 CommandLine 객체는 사용자가 입력한 내용을 쿼리할 수 있는 다양한 메서드를 제공한다. 대표적으로 hasOption()은 특정 옵션이 존재하는지 확인하고, getOptionValue()는 해당 옵션에 연결된 값을 반환한다. 이 정보를 바탕으로 애플리케이션은 적절한 실행 경로를 선택하거나, 설정값을 초기화할 수 있다.

태그: Apache Commons CLI Java CLI Command Line Parsing DefaultParser CommandLine

6월 4일 18:45에 게시됨