| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 정보처리기사 실기 기출문제
- Pinpoint
- CKA
- kotlin querydsl
- minikube
- 공부
- 바이브코딩
- 컨텍스트 엔지니어링
- aws
- PETERICA
- 오블완
- 티스토리챌린지
- Java
- MySQL
- APM
- tucker의 go 언어 프로그래밍
- golang
- CloudWatch
- 기록으로 실력을 쌓자
- 코틀린 코루틴의 정석
- Linux
- CKA 기출문제
- kotlin coroutine
- AWS EKS
- AI
- go
- SRE
- Spring
- Kubernetes
- kotlin
- Today
- Total
피터의 개발이야기
[GO] Go 언어로 CLI 프로그램 개발하기: Cobra 라이브러리 활용 본문
ㅁ 들어가며
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 프로그램을 만들어 볼 수 있게 되었다.
'Programming > GO' 카테고리의 다른 글
| [GO] Go CRUD 프로젝트 아키텍처 (0) | 2025.04.29 |
|---|---|
| [GO] Too many open files 에러 트러블슈팅 (0) | 2025.04.10 |
| [GO] Tucker의 GO 언어 프로그래밍 - 목차 (0) | 2025.03.31 |
| [GO] Tucker의 GO 언어 프로그래밍 - 18장 인터페이스 (0) | 2025.03.30 |
| [GO] 인터페이스와 제네릭의 차이점은? (0) | 2025.03.28 |