์š”์•ฝ

SUMMARY

Deck์„ Go๋กœ ๋งŒ๋“ค๋ฉฐ CLI ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์„ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ spf13/cobra๋ฅผ ์ ‘ํ–ˆ๋‹ค. ์„œ๋ธŒ์ปค๋งจ๋“œ ํŠธ๋ฆฌยทํ”Œ๋ž˜๊ทธ ํŒŒ์‹ฑยท--helpยท์ž๋™์™„์„ฑ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์ œ๊ณต๋œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ ๋’ค์—์•ผ, ์˜ˆ์ „์— ์ˆœ์ˆ˜ ์‰˜์Šคํฌ๋ฆฝํŠธ๋กœ CLI๋ฅผ ๋งŒ๋“ค ๋•Œ helpยท๋ฐ˜์‘ํ˜• ์ฒ˜๋ฆฌยท๋กœ๊ทธ ํฌ๋งท์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋А๋ผ ๊ณ ์ƒํ–ˆ์œผ๋ฉด์„œ๋„ ์˜คํ”ˆ์†Œ์Šค CLI๋งŒํผ ์™„์„ฑ๋„๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์•˜๋˜ ์ด์œ ๊ฐ€ ๋‚ฉ๋“๋˜์—ˆ๋‹ค. kubectlยทhelmยทkubeadm์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐ”๋กœ ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.

์‰˜์Šคํฌ๋ฆฝํŠธ๋กœ CLI๋ฅผ ํ‰๋‚ด ๋‚ด๋˜ ์‹œ์ ˆ์—๋Š” ์™„์„ฑ๋„๊ฐ€ ๋Š˜ ์•„์‰ฌ์› ๋Š”๋ฐ, ๋Œ์•„๋ณด๋ฉด ๊ทธ๊ฒƒ์ด ์˜จ์ „ํžˆ ๋‚ด ์‹ค๋ ฅ ํƒ“๋งŒ์€ ์•„๋‹ˆ์—ˆ๋‹ค.

1. ์‰˜์Šคํฌ๋ฆฝํŠธ๋กœ CLI ๋งŒ๋“ค ๋•Œ ์‹œ๊ฐ„์„ ์Ÿ๋˜ ๊ฒƒ๋“ค

๊ทธ๋™์•ˆ ์ž์ž˜ํ•œ ์šด์˜ ๋„๊ตฌ๋Š” ์‰˜์Šคํฌ๋ฆฝํŠธ๋กœ CLI ํ˜•ํƒœ๋ฅผ ๋งŒ๋“ค์–ด ์™”๋‹ค. case "$1" in ... ๊ตฌ๋ฌธ์œผ๋กœ ์„œ๋ธŒ์ปค๋งจ๋“œ๋ฅผ ๋‚˜๋ˆ„๊ณ , ๋‚˜๋ฆ„ ์™„์„ฑ๋„ ์žˆ๊ฒŒ ๋งŒ๋“ค๋ ค๊ณ  ์• ๋ฅผ ์ผ๋‹ค. ํ•˜์ง€๋งŒ CLI๋‹ต๊ฒŒ ๋งŒ๋“ค๋ ค๋Š” ๋…ธ๋ ฅ์˜ ์ƒ๋‹น ๋ถ€๋ถ„์ด ์ •์ž‘ ๋ณธ์งˆ๊ณผ ๋ฌด๊ด€ํ•œ ๊ณณ์— ๋“ค์–ด๊ฐ”๋‹ค.

  • help. --help ์ถœ๋ ฅ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋ฒ•์„ echo๋กœ ์ง์ ‘ ์ฐ์—ˆ๋‹ค. ๋ช…๋ น์„ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ echo๋„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ๊ณ , ์ˆ˜์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ์„œ์™€ ์‹ค์ œ ๋™์ž‘์ด ์–ด๊ธ‹๋‚ฌ๋‹ค.
  • ๋ฐ˜์‘ํ˜•(interactive). ๊ฐ’์„ ๋ฌผ์–ด๋ณด๊ณ  ํ™•์ธ๋ฐ›๋Š” ํ”„๋กฌํ”„ํŠธ์™€ ์ž˜๋ชป๋œ ์ž…๋ ฅ ์žฌํ™•์ธ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ read์™€ while๋กœ ์ง์ ‘ ์ž‘์„ฑํ–ˆ๋‹ค. ์—”ํ„ฐ ์ž…๋ ฅ๊ณผ ๊ธฐ๋ณธ๊ฐ’, ์ทจ์†Œ ์ฒ˜๋ฆฌ๋ฅผ ๋งค๋ฒˆ ์ƒˆ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.
  • ๋กœ๊ทธ ํฌ๋งท. ๋ ˆ๋ฒจ(info/warn/error)์— ๋”ฐ๋ผ ์ƒ‰์„ ์ž…ํžˆ๊ณ  ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ด๋Š” ๊ธฐ๋Šฅ์„ printf์™€ ANSI ์ฝ”๋“œ๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๋„๊ตฌ๋งˆ๋‹ค ํฌ๋งท์ด ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ฌ๋ผ์กŒ๋‹ค.
  • ํ”Œ๋ž˜๊ทธ ํŒŒ์‹ฑ. --root, --dry-run ์˜ต์…˜ ํ•˜๋‚˜๋ฅผ ๋ฐ›์œผ๋ ค๊ณ  while [[ $#--gt-0-| -gt 0 ]]; do case ... ๊ตฌ๋ฌธ์„ ๋ช…๋ น๋งˆ๋‹ค ๋ณต์‚ฌํ•ด์„œ ๋ถ™์˜€๋‹ค. ์ถ•์•ฝํ˜•(-n) ์ง€์›์ด๋‚˜ ์ธ์ž ์ˆœ์„œ ๋ฌด๊ด€ ์ฒ˜๋ฆฌ๋Š” ์ž๋™์œผ๋กœ ๋˜์ง€ ์•Š์•˜๋‹ค.
  • ์„œ๋ธŒ์ปค๋งจ๋“œ ํŠธ๋ฆฌ. 2๋‹จ๊ณ„(tool sub action)๋งŒ ๋ผ๋„ case ์•ˆ์— case๋ฅผ ์ค‘์ฒฉํ•ด์•ผ ํ–ˆ๋‹ค.

๊ฐ ํ•ญ๋ชฉ์€ ๊ฐœ๋ณ„์ ์œผ๋กœ ํ•ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด๋‹ค. ๋ฌธ์ œ๋Š” ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋„๊ตฌ๋งˆ๋‹ค, ๊ทธ๋ฆฌ๊ณ  ๋ช…๋ น์ด ๋Š˜์–ด๋‚  ๋•Œ๋งˆ๋‹ค ๊ณ„์† ์†์œผ๋กœ ์œ ์ง€ํ•ด์•ผ ํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋“ค์˜€๋Š”๋ฐ๋„ ์™„์„ฑ๋„๋Š” kubectl ๊ฐ™์€ ์˜คํ”ˆ์†Œ์Šค CLI ๊ทผ์ฒ˜์—๋„ ๋ฏธ์น˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋•Œ๋Š” โ€œ๋‚ด๊ฐ€ ๋ถ€์กฑํ•ด์„œโ€๋ผ๊ณ ๋งŒ ์ƒ๊ฐํ–ˆ๋‹ค.

2. Cobra๋ฅผ ๋ณด๊ณ  ์ด์œ ๋ฅผ ์•Œ์•˜๋‹ค

Deck์„ Go๋กœ ์ž‘์„ฑํ•˜๋ฉฐ Cobra๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋‹ˆ, ์•ž์„œ ์†์œผ๋กœ ๋งŒ๋“ค๋˜ ๊ธฐ๋Šฅ๋“ค์ด ์ „๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ธฐ๋ณธ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ถ€์กฑํ–ˆ๋˜ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‰˜์Šคํฌ๋ฆฝํŠธ์—๋Š” ๊ทธ ์—ญํ• ์„ ๋Œ€์‹ ํ•ด ์ค„ ๊ณ„์ธต์ด ์—†์—ˆ์„ ๋ฟ์ด์—ˆ๋‹ค.

  • ์„œ๋ธŒ์ปค๋งจ๋“œ ํŠธ๋ฆฌ โ€” ๋ช…๋ น ํ•˜๋‚˜๊ฐ€ *cobra.Command ๊ตฌ์กฐ์ฒด์ด๊ณ , AddCommand๋กœ ๋ถ€๋ชจ์— ๋ถ™์ด๋ฉด deck bundle verify ๊ฐ™์€ ๊ฒฝ๋กœ๊ฐ€ ์ €์ ˆ๋กœ ์ƒ๊ธด๋‹ค.
  • ํ”Œ๋ž˜๊ทธ ํŒŒ์‹ฑ โ€” cmd.Flags().Bool("dry-run", false, "...") ํ•œ ์ค„. ์ถ•์•ฝยท์ˆœ์„œ ๋ฌด๊ด€ยทํƒ€์ž… ๊ฒ€์ฆ๊นŒ์ง€ pflag๊ฐ€ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • --help/Usage โ€” ๋ช…๋ น์˜ Short/Long ํ•„๋“œ์— ์„ค๋ช…์„ ์ ์œผ๋ฉด help ์ถœ๋ ฅ์ด ์ž๋™ ์ƒ์„ฑ๋œ๋‹ค. ์„ค๋ช…์ด ์ฝ”๋“œ ์˜†์— ์žˆ์œผ๋ฏ€๋กœ ์–ด๊ธ‹๋‚  ์ผ์ด ์—†๋‹ค.
  • ์…ธ ์ž๋™์™„์„ฑ โ€” ๋ช…๋ น ํŠธ๋ฆฌ์—์„œ bash/zsh/fish/powershell ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค.

๋‚ด๊ฐ€ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ โ€œ์ด ๋ช…๋ น์ด ์–ด๋–ค ์ผ์„ ํ•˜๋Š”๊ฐ€โ€์— ํ•ด๋‹นํ•˜๋Š” (RunE ํ•จ์ˆ˜)๋ฟ์ด๊ณ , CLI๋กœ์„œ์˜ ํ˜•์‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ฑ„์›Œ ์ค€๋‹ค. ์‰˜์Šคํฌ๋ฆฝํŠธ ์‹œ์ ˆ ์‹ค์ œ๋กœ ๋ฌด๊ฑฐ์› ๋˜ ๋ถ€๋ถ„์ด ์ด ํ˜•์‹ ์œ ์ง€์˜€๋‹ค๋Š” ๊ฒƒ์„ Go๋กœ ์˜ฎ๊ธฐ๊ณ  ๋‚˜์„œ์•ผ ์•Œ์•˜๋‹ค. (๋ฐ˜์‘ํ˜• ํ”„๋กฌํ”„ํŠธ๋‚˜ ์ปฌ๋Ÿฌ ๋กœ๊ทธ๋„ Go ์ƒํƒœ๊ณ„์—๋Š” surveyยทfatih/color ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์–ด์„œ, ์‰˜๋กœ ์ง์ ‘ ๋งŒ๋“ค๋˜ ๊ธฐ๋Šฅ์„ ๋Œ€๋ถ€๋ถ„ ์กฐ๋ฆฝ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.)

3. K8s ์ง„์˜๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ์ 

Cobra๋ฅผ ๋งˆ์Œ ํŽธํžˆ ์„ ํƒํ•˜๋Š” ๋ฐ๋Š” ์ด์œ ๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ์—ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งค์ผ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ๋“ค์ด ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค๋Š” ์ ์ด๋‹ค. kubectl, helm, kubeadm์ด ๋ชจ๋‘ spf13/cobra ๊ธฐ๋ฐ˜์ด๋ฉฐ, ๊ทธ ์™ธ์—๋„ dockerยทghยทhugo๊ฐ€ ๊ฐ™์€ ๊ณ„์—ด์ด๋‹ค. (Kubernetes ์ง„์˜์ด ์›Œ๋‚™ ๋„๋ฆฌ ์‚ฌ์šฉํ•ด์„œ Go CLI์˜ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์ฒ˜๋Ÿผ ์ž๋ฆฌ ์žก์•˜๋‹ค.)

๋•๋ถ„์— ๋‚ด ๋„๊ตฌ์˜ ์‚ฌ์šฉ๊ฐ์ด ๊ทธ ๋„๊ตฌ๋“ค๊ณผ ๊ฒฐ์„ ๋งž์ถ”๊ฒŒ ๋œ๋‹ค. kubectl <cmd> --help, kubectl completion zsh๊ฐ€ ๋™์ž‘ํ•˜๋“ฏ deck <cmd> --help, deck completion zsh๋„ ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ ์ตํž ๊ฒƒ์ด ์—†๊ณ , ๋‚˜ ์—ญ์‹œ โ€œkubectl์€ ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜์ง€?โ€๋ผ๊ณ  ์ฐธ๊ณ ํ•  ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ์ˆœ์ˆ˜ ์‰˜์Šคํฌ๋ฆฝํŠธ๋กœ๋Š” ์ด๋Ÿฐ ์ผ๊ด€์„ฑ ํ™•๋ณด ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค.

4. ๋ช…๋ น ํŠธ๋ฆฌ๋ฅผ ์ฝ”๋“œ๋กœ ์„ธ์šฐ๊ธฐ

Deck์˜ ๋ช…๋ น ํŠธ๋ฆฌ๋Š” ๋Œ€๋žต ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ตฌ์„ฑํ–ˆ๋‹ค. ๋ฃจํŠธ ์•„๋ž˜์— ๋™์‚ฌ ํ˜•ํƒœ์˜ ๋ช…๋ น(apply/bundle/state/โ€ฆ)์„ ๋ฐฐ์น˜ํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒƒ๋งŒ 2๋‹จ๊ณ„๋กœ ๋” ๋‚˜๋ˆ„์—ˆ๋‹ค.

deck
โ”œโ”€โ”€ apply          # ์›Œํฌํ”Œ๋กœ์šฐ(apply ํŒŒ์ผ)๋ฅผ ๋ฒˆ๋“ค์— ๋Œ€ํ•ด ์‹คํ–‰
โ”œโ”€โ”€ plan           # ์‹คํ–‰ ์ „ ๊ณ„ํš์„ ๋ณด์—ฌ์คŒ (vars ํ•˜์œ„: ์œ ํšจ ๋ณ€์ˆ˜ยท์ปจํ…์ŠคํŠธ ํ™•์ธ)
โ”œโ”€โ”€ bundle
โ”‚   โ”œโ”€โ”€ verify     # ๋ฒˆ๋“ค ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ
โ”‚   โ””โ”€โ”€ build      # ๋ฒˆ๋“ค ์ƒ์„ฑ
โ”œโ”€โ”€ state
โ”‚   โ”œโ”€โ”€ show       # ์ €์žฅ๋œ apply ์ƒํƒœ ์กฐํšŒ
โ”‚   โ”œโ”€โ”€ list       # ์ƒํƒœ ํŒŒ์ผ ๋ชฉ๋ก
โ”‚   โ””โ”€โ”€ clear      # ์ƒํƒœ ์‚ญ์ œ
โ”œโ”€โ”€ cache          # ์บ์‹œ ๊ด€๋ฆฌ
โ”œโ”€โ”€ serve          # ๋ฐ๋ชฌ/์„œ๋ฒ„ ๋ชจ๋“œ
โ”œโ”€โ”€ ask            # AI ๋ณด์กฐ (login/logout/status ํ•˜์œ„)
โ”œโ”€โ”€ completion     # ์…ธ ์ž๋™์™„์„ฑ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ
โ””โ”€โ”€ version

์ฝ”๋“œ๋กœ๋Š” ๋ถ€๋ชจ ๋ช…๋ น์„ ๋งŒ๋“ค๊ณ  ์ž์‹์„ ๋ถ™์ด๋Š” ๊ฒŒ ์ „๋ถ€๋‹ค.

// state ๋Š” ๊ทธ ์ž์ฒด๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ํ•˜์œ„ ๋ช…๋ น์˜ ๊ทธ๋ฃน์ด๋‹ค.
stateCmd := &cobra.Command{
    Use:   "state",
    Short: "Inspect and clear saved apply state",
}
stateCmd.AddCommand(
    newStateShowCmd(),   // deck state show
    newStateListCmd(),   // deck state list
    newStateClearCmd(),  // deck state clear
)
rootCmd.AddCommand(stateCmd)

case ์ค‘์ฒฉ์ด ์‚ฌ๋ผ์ง€๊ณ  ๋ช…๋ น ํ•˜๋‚˜๊ฐ€ ํŒŒ์ผ ํ•˜๋‚˜์— ๋Œ€์‘๋œ๋‹ค. ์ƒˆ ๋ช…๋ น ์ถ”๊ฐ€๊ฐ€ โ€œํ•จ์ˆ˜ ํ•˜๋‚˜๋ฅผ ์ž‘์„ฑํ•˜๊ณ  AddCommand ํ•œ ์ค„์„ ์ถ”๊ฐ€ํ•˜๊ธฐโ€๊ฐ€ ๋˜์—ˆ์œผ๋‹ˆ ๋„๊ตฌ๋ฅผ ํ‚ค์šฐ๋Š” ๋ถ€๋‹ด์ด ํฌ๊ฒŒ ์ค„์—ˆ๋‹ค. ์‰˜์Šคํฌ๋ฆฝํŠธ ์‹œ์ ˆ case ๊ตฌ์กฐ๊ฐ€ ๋ถ€๋‹ด์Šค๋Ÿฌ์›Œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ๋ฏธ๋ฃจ๋˜ ๊ฒƒ๊ณผ ์ •๋ฐ˜๋Œ€์˜ ๊ฒฝํ—˜์ด๋‹ค.

5. helpยท์ž๋™์™„์„ฑยท๋ฌธ์„œ๋ฅผ ๊ณต์งœ๋กœ ์–ป๊ธฐ

Cobra๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ฐ€์žฅ ์ด๋“์„ ๋ณธ ๋ถ€๋ถ„์€ ๋ถ€์ˆ˜์ ์œผ๋กœ ํ•จ๊ป˜ ์–ป๊ฒŒ ๋œ ๊ธฐ๋Šฅ๋“ค์ด์—ˆ๋‹ค.

์ž๋™์™„์„ฑ. deck completion <bash|zsh|fish|powershell> ๋ช…๋ น์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์…ธ์— ๋“ฑ๋กํ•˜๋ฉด deck sta<Tab> โ†’ state ์ฒ˜๋Ÿผ ์ž๋™์™„์„ฑ์ด ๋™์ž‘ํ•œ๋‹ค. ๋‚ด๊ฐ€ completion ๋กœ์ง์„ ์ž‘์„ฑํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ช…๋ น์„ ํŠธ๋ฆฌ๋กœ ์ •์˜ํ–ˆ๋”๋‹ˆ Cobra๊ฐ€ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ค€ ๊ฒƒ์ด๋‹ค.

๋ฌธ์„œ ์ƒ์„ฑ. Cobra์—๋Š” ๋ช…๋ น ํŠธ๋ฆฌ๋ฅผ ๋งˆํฌ๋‹ค์šด์œผ๋กœ ์ถœ๋ ฅํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ(cobra/doc)์ด ์žˆ๋‹ค. Deck์—๋Š” ์ด ๊ธฐ๋Šฅ์„ ๊ฐ์‹ผ ๋‚ด๋ถ€ ๋ช…๋ น์„ ๋‘๊ณ , CLI ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ช…๋ น ์ •์˜์—์„œ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค. ๋ช…๋ น์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ฌธ์„œ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋ฉด ๋˜๋ฏ€๋กœ โ€œ์ฝ”๋“œ๋Š” ๋ฐ”๋€Œ์—ˆ๋Š”๋ฐ ๋ฌธ์„œ๋Š” ์˜›๋‚  ๊ทธ๋Œ€๋กœโ€์ธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. (์ด ์ž๋™ ์ƒ์„ฑ ๋ฌธ์„œ๋ฅผ ๋ฌธ์„œ ์‚ฌ์ดํŠธ์— ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ–ˆ๋‹ค.)

์‰˜์Šคํฌ๋ฆฝํŠธ CLI๊ฐ€ ์˜คํ”ˆ์†Œ์Šค ์ˆ˜์ค€์˜ ์™„์„ฑ๋„์— ๋ฏธ์น˜์ง€ ๋ชปํ–ˆ๋˜ ๊ฒƒ์€ ์‹ค๋ ฅ ํƒ“์ด๋ผ๊ธฐ๋ณด๋‹ค, ๋ช…๋ น ํŠธ๋ฆฌยทํ”Œ๋ž˜๊ทธ ํŒŒ์‹ฑยทhelpยท์ž๋™์™„์„ฑยท๋กœ๊ทธยท๋ ˆํผ๋Ÿฐ์Šค ๋ฌธ์„œ๋ผ๋Š” ํ˜•์‹์„ ๋งจ์†์œผ๋กœ ์ „๋ถ€ ๊ฐ๋‹นํ•ด์•ผ ํ–ˆ๋˜ ํƒ“์ด ์ปธ๋‹ค. Cobra๋กœ ์˜ฎ๊ธด ๋’ค์—๋Š” ๋‚ด๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฒ”์œ„๊ฐ€ โ€œ๊ฐ ๋ช…๋ น์ด ํ•˜๋Š” ์ผโ€๋กœ ์ขํ˜€์กŒ๋‹ค.

์ฐธ๊ณ