본문 바로가기
카테고리 없음

Rust로 CLI 앱 만들기 | clap으로 명령줄 툴 개발

by mystory55801 2025. 6. 10.

Rust로 명령줄 툴 만들기: clap으로 CLI 앱 개발하기

Rust는 고성능 시스템 언어로 잘 알려져 있지만, 명령줄 애플리케이션(CLI) 개발에도 매우 강력한 언어입니다. Rust의 clap 라이브러리를 사용하면 손쉽게 명령줄 인자 파싱이 가능하며, 강력한 사용자 인터페이스를 갖춘 CLI 툴을 만들 수 있습니다.

이 글에서는 clap을 이용한 Rust CLI 앱 개발의 기초를 다루며, 실전 예제를 통해 빠르게 시작할 수 있도록 안내합니다.

clap이란 무엇인가요?

clap은 "Command Line Argument Parser"의 줄임말로, Rust 생태계에서 가장 널리 사용되는 CLI 프레임워크입니다. 주요 기능은 다음과 같습니다:

  • 명령줄 인자 자동 파싱
  • 자동 도움말(--help) 생성
  • 서브커맨드 지원
  • derive 매크로를 통한 간결한 정의

프로젝트 생성 및 clap 설치

먼저 새로운 CLI 프로젝트를 생성하고, clap을 의존성에 추가합니다.


$ cargo new mycli
$ cd mycli

# Cargo.toml
[dependencies]
clap = { version = "4", features = ["derive"] }

기본 CLI 앱 예제: 인자 받기

간단한 “인사말” 명령어를 만들어보겠습니다. 사용자로부터 이름을 입력받아 출력하는 CLI 앱입니다.


use clap::Parser;

#[derive(Parser, Debug)]
#[command(name = "hello")]
#[command(about = "이름을 입력받아 인사하는 CLI 도구", long_about = None)]
struct Args {
    /// 사용자 이름
    #[arg(short, long)]
    name: String,
}

fn main() {
    let args = Args::parse();
    println!("안녕하세요, {}님!", args.name);
}

실행 예시:


$ cargo run -- --name Alice
안녕하세요, Alice님!

서브 커맨드 추가하기

clap서브커맨드 기능도 지원하여 Git, Docker 같은 복잡한 CLI 도구도 구현할 수 있습니다.


use clap::{Parser, Subcommand};

#[derive(Parser)]
#[command(name = "toolbox")]
#[command(about = "Rust CLI 툴 예제", long_about = None)]
struct Cli {
    #[command(subcommand)]
    command: Commands,
}

#[derive(Subcommand)]
enum Commands {
    /// 이름을 인사합니다
    Greet {
        #[arg(short, long)]
        name: String,
    },
    /// 숫자를 제곱합니다
    Square {
        #[arg(short, long)]
        number: i32,
    },
}

fn main() {
    let cli = Cli::parse();

    match &cli.command {
        Commands::Greet { name } => {
            println!("안녕하세요, {}님!", name);
        }
        Commands::Square { number } => {
            println!("{}의 제곱은 {}입니다.", number, number * number);
        }
    }
}

실행 예시:


$ cargo run -- greet --name Bob
안녕하세요, Bob님!

$ cargo run -- square --number 5
5의 제곱은 25입니다.

필수 vs 선택 인자, 기본값 지정

clap은 인자에 기본값(default)을 지정하거나 선택 인자로 설정할 수 있습니다.


#[derive(Parser, Debug)]
struct Args {
    /// 나이 (기본값: 20)
    #[arg(short, long, default_value_t = 20)]
    age: u8,

    /// 지역 (선택사항)
    #[arg(short, long)]
    region: Option<String>,
}

이렇게 하면 인자가 누락되어도 에러가 발생하지 않고, 기본값이나 None 처리로 유연하게 동작합니다.

자동 --help, --version 지원

clap은 도움말버전 정보도 자동 생성해줍니다.


$ cargo run -- --help
$ cargo run -- --version

이 기능은 사용자 경험을 크게 향상시키며, CLI 도구를 배포할 때 매우 유용합니다.

결론: clap을 활용하면 Rust CLI 개발이 쉬워진다

Rust로 명령줄 도구를 만들고 싶다면 clap은 최고의 선택지입니다. 간단한 파싱부터 서브커맨드, 옵션 처리, 자동 도움말까지 모든 기능이 잘 갖춰져 있어 생산성과 안정성을 모두 확보할 수 있습니다.

이제 간단한 CLI 툴은 물론, 파일 처리, 네트워크 제어, 빌드 자동화 툴까지 다양하게 개발해볼 수 있습니다. Rust의 성능과 안정성, 그리고 clap의 유연함을 결합하여 나만의 강력한 커맨드라인 앱을 만들어보세요!