관리 메뉴

피터의 개발이야기

[GO] Go 언어로 CLI 프로그램 개발하기: Cobra 라이브러리 활용 본문

Programming/GO

[GO] Go 언어로 CLI 프로그램 개발하기: Cobra 라이브러리 활용

기록하는 백앤드개발자 2025. 8. 13. 00:25
반응형

ㅁ 들어가며

  CLI(Command Line Interface)는 터미널을 통해 명령어를 입력하여 프로그램을 실행한다. Golang은 CLI 개발에 적합하며, 특히 Cobra 라이브러리를 사용하면 강력하고 구조적인 CLI 프로그램을 쉽게 구현할 수 있다.  이 글에서는 Cobra를 활용한 CLI 개발 방법을 단계별로 정리하였다.

 

ㅁ Cobra란?

  Cobra는 Go 언어로 서브 커맨드 기반의 CLI를 만들 수 있도록 도와주는 라이브러리이다.  Kubernetes, Hugo, GitHub CLI 등 다양한 프로젝트에서 사용되고 있으며, 다음과 같은 기능을 제공한다.

ㅇ 명령어 기반의 계층적 구조 지원.
ㅇ 플래그 처리 및 자동 도움말 생성.
ㅇ 셸 자동 완성 스크립트 생성.

 

ㅁ 설치 및 환경 설정

ㅇ Cobra 설치

go install github.com/spf13/cobra-cli@latest

 

ㅁ 프로젝트 초기화

새로운 CLI 프로젝트를 시작하려면 cobra init 명령어를 사용한다.

cobra init --pkg-name github.com/yourusername/yourApp

ㅇ 이 명령은 기본적인 프로젝트 구조와 루트 커맨드를 생성한다.

 

ㅁ 명령어 추가

cobra add version

 새로운 커맨드 추가

 

package cmd

import (
    "fmt"
    "github.com/spf13/cobra"
)

// 버전 커맨드 정의
var versionCmd = &cobra.Command{
    Use:   "version",
    Short: "Print the version of the application",
    Long:  `This command prints the current version of the application.`,
    Run: func(cmd *cobra.Command, args []string) {
        fmt.Println("Application Version 1.0.0")
    },
}

func init() {
    rootCmd.AddCommand(versionCmd)
}

ㅇ 이 명령은 cmd/version.go 파일을 생성하며, 여기에 추가적인 기능을 구현할 수 있다.

 

ㅁ 구조 설명

  • Use: 명령어 이름.
  • Short: 간단한 설명.
  • Long: 상세 설명 및 사용 예시.
  • Run: 명령 실행 시 수행할 작업.

 

ㅁ 플래그 추가

플래그는 명령어에 옵션을 추가하는 데 사용됩니다. 예를 들어, --name 플래그를 추가하려면 다음과 같이 작성한다:

var name string

var greetCmd = &cobra.Command{
    Use:   "greet",
    Short: "Greet someone",
    Run: func(cmd *cobra.Command, args []string) {
        fmt.Printf("Hello, %s!\n", name)
    },
}

func init() {
    greetCmd.Flags().StringVarP(&name, "name", "n", "World", "Name to greet")
    rootCmd.AddCommand(greetCmd)
}

 Flags().StringVarP: 플래그를 정의하고 기본값 및 설명을 설정

 -n 또는 --name으로 플래그 값을 전달할 수 있다.

ㅁ 빌드 및 실행

go build -o yourApp
./yourApp version

ㅇ CLI 프로그램을 빌드하여 실행 파일로 배포할 수 있다.

 

ㅁ 셸 자동 완성 설정

yourApp completion bash > /etc/bash_completion.d/yourApp
source /etc/bash_completion.d/yourApp

ㅇ Cobra는 셸 자동 완성을 지원하여 사용자 경험을 향상시킬 수 있다

 

ㅁ 실제 사례

ㅇ 간단히 계산기의 덧셈 기능을 구현해 보면,

var addCmd = &cobra.Command{
    Use:   "add",
    Short: "Add numbers",
    Run: func(cmd *cobra.Command, args []string) {
        sum := 0
        for _, v := range args {
            num, err := strconv.Atoi(v)
            if err != nil {
                fmt.Printf("Invalid number: %s\n", v)
                return
            }
            sum += num
        }
        fmt.Printf("Result: %d\n", sum)
    },
}

func init() {
    rootCmd.AddCommand(addCmd)
}

ㅇ 결과

 

./yourApp add 10 20 30
# Output: Result: 60

 

ㅁ 마무리

  Cobra는 Go 언어로 강력하고 구조적인 CLI 프로그램을 개발할 수 있는 훌륭한 도구이다. 이 글에서는 kubectl 명령어를 사용하였지만, 이렇게 설치부터 명령어 추가, 플래그 설정, 빌드까지의 과정을 다룰 수 있다는 점이 놀라웠다. 이 실습을 통해 자신만의 CLI 프로그램을 만들어 볼 수 있게 되었다.

반응형
Comments