Back to Go Zero

go-zero

readme-ko.md

1.10.311.5 KB
Original Source

go-zero

<p align="center"> </p>

go-zero๋Š” ๋‹ค์–‘ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ๋ชจ๋ฒ” ์‚ฌ๋ก€๊ฐ€ ๋‚ด์žฅ๋œ ์›น ๋ฐ RPC ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ํšŒ๋ณต ํƒ„๋ ฅ์„ฑ ์„ค๊ณ„๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์„œ๋น„์Šค์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ, ์ˆ˜๋…„ ๋™์•ˆ ์ˆ˜์ฒœ๋งŒ ์‚ฌ์šฉ์ž๋ฅผ ๋ณด์œ ํ•œ ์‚ฌ์ดํŠธ์—์„œ ์šด์˜๋˜์–ด ์™”์Šต๋‹ˆ๋‹ค.

<div align=center>

</div>

๐Ÿคทโ€ go-zero๋ž€?

English | ็ฎ€ไฝ“ไธญๆ–‡ | ํ•œ๊ตญ์–ด

<a href="https://trendshift.io/repositories/3263" target="_blank"></a> <a href="https://www.producthunt.com/posts/go-zero?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-go&#0045;zero" target="_blank"></a>

go-zero๋Š” CNCF Landscape์— ๋“ฑ์žฌ๋œ, ๋‹ค์–‘ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ๋ชจ๋ฒ” ์‚ฌ๋ก€๊ฐ€ ๋‚ด์žฅ๋œ ์›น ๋ฐ RPC ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ํšŒ๋ณต ํƒ„๋ ฅ์„ฑ ์„ค๊ณ„๋กœ ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์„œ๋น„์Šค์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ, ์ˆ˜๋…„ ๋™์•ˆ ์ˆ˜์ฒœ๋งŒ ์‚ฌ์šฉ์ž๋ฅผ ๋ณด์œ ํ•œ ์‚ฌ์ดํŠธ์—์„œ ์šด์˜๋˜์–ด ์™”์Šต๋‹ˆ๋‹ค.

go-zero์—๋Š” ๊ฐ„๋‹จํ•œ API ์„ค๋ช… ๋ฌธ๋ฒ•๊ณผ goctl์ด๋ผ๋Š” ์ฝ”๋“œ ์ƒ์„ฑ ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. goctl์„ ์‚ฌ์šฉํ•˜๋ฉด .api ํŒŒ์ผ์—์„œ Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

go-zero์˜ ์žฅ์ :

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

go-zero์˜ ๋ฐฐ๊ฒฝ

2018๋…„ ์ดˆ, ์šฐ๋ฆฌ๋Š” Java+MongoDB ๊ธฐ๋ฐ˜ ๋ชจ๋†€๋ฆฌ์‹ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์ „ํ™˜ํ•˜๋ฉด์„œ ๋‹ค์Œ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Golang - ๋†’์€ ์„ฑ๋Šฅ, ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•, ๋›ฐ์–ด๋‚œ ๋ฐฐํฌ ๊ฒฝํ—˜, ๋‚ฎ์€ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰
  • ์ž์ฒด ์„ค๊ณ„ํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ”„๋ ˆ์ž„์›Œํฌ - ๋” ๋‚˜์€ ๋ฌธ์ œ ๊ฒฉ๋ฆฌ, ๋” ์‰ฌ์šด ๊ธฐ๋Šฅ ํ™•์žฅ, ๋” ๋น ๋ฅธ ์ด์Šˆ ํ•ด๊ฒฐ

go-zero์˜ ์„ค๊ณ„ ๊ณ ๋ ค ์‚ฌํ•ญ

go-zero๋Š” ๋‹ค์Œ ํ•ต์‹ฌ ์„ค๊ณ„ ์›์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  • ๋‹จ์ˆœ์„ฑ - ๋‹จ์ˆœํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์ œ1์›์น™์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค.
  • ๊ณ ๊ฐ€์šฉ์„ฑ - ๋†’์€ ๋™์‹œ์„ฑ ์ƒํ™ฉ์—์„œ๋„ ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ํšŒ๋ณต ํƒ„๋ ฅ์„ฑ - ์ ์‘ํ˜• ๋ณดํ˜ธ๋ฅผ ๊ฐ–์ถ˜ ์žฅ์•  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž ์นœํ™”์„ฑ - ๋ณต์žก์„ฑ์„ ์บก์Аํ™”ํ•˜๊ณ  ํ•œ ๊ฐ€์ง€ ์ผ์„ ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ํ™•์žฅ ์šฉ์ด์„ฑ - ์„ฑ์žฅ์„ ์œ„ํ•œ ์œ ์—ฐํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

go-zero์˜ ๊ตฌํ˜„๊ณผ ๊ธฐ๋Šฅ

go-zero๋Š” ์—”์ง€๋‹ˆ์–ด๋ง ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ ์ƒ์„ฑ - ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ
  • ๊ฐ„๋‹จํ•œ API - ๊น”๋”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์™€ net/http ์™„์ „ ํ˜ธํ™˜
  • ๊ณ ์„ฑ๋Šฅ - ์†๋„์™€ ํšจ์œจ์„ฑ์„ ์œ„ํ•œ ์ตœ์ ํ™”
  • ํšŒ๋ณต ํƒ„๋ ฅ์„ฑ - ๋‚ด์žฅ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค, ์†๋„ ์ œํ•œ, ๋กœ๋“œ ์…ฐ๋”ฉ, ํƒ€์ž„์•„์›ƒ ์ œ์–ด
  • ์„œ๋น„์Šค ๋ฉ”์‹œ - ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ, ๋ถ€ํ•˜ ๋ถ„์‚ฐ, ํ˜ธ์ถœ ์ถ”์ 
  • ๊ฐœ๋ฐœ์ž ๋„๊ตฌ - ์ž๋™ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฒ€์ฆ, ์บ์‹œ ๊ด€๋ฆฌ, ๋ฉ”ํŠธ๋ฆญ๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง

go-zero ์•„ํ‚คํ…์ฒ˜

์„ค์น˜

ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”.

shell
go get -u github.com/zeromicro/go-zero

AI ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐœ๋ฐœ

go-zero ํŒ€์€ Claude, GitHub Copilot, Cursor๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก AI ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ํ”„๋กœ์ ํŠธ

ai-context - AI ์–ด์‹œ์Šคํ„ดํŠธ๋ฅผ ์œ„ํ•œ ์›Œํฌํ”Œ๋กœ ๊ฐ€์ด๋“œ

zero-skills - ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ ํŒจํ„ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

mcp-zero - Model Context Protocol์„ ํ†ตํ•œ ์ฝ”๋“œ ์ƒ์„ฑ ๋„๊ตฌ

๋น ๋ฅธ ์„ค์ •

GitHub Copilot

bash
git submodule add https://github.com/zeromicro/ai-context.git .github/ai-context
ln -s ai-context/00-instructions.md .github/copilot-instructions.md  # macOS/Linux
# Windows: mklink .github\copilot-instructions.md .github\ai-context\00-instructions.md
git submodule update --remote .github/ai-context  # ์—…๋ฐ์ดํŠธ

Cursor

bash
git submodule add https://github.com/zeromicro/ai-context.git .cursorrules
git submodule update --remote .cursorrules  # ์—…๋ฐ์ดํŠธ

Windsurf

bash
git submodule add https://github.com/zeromicro/ai-context.git .windsurfrules
git submodule update --remote .windsurfrules  # ์—…๋ฐ์ดํŠธ

Claude Desktop

bash
git clone https://github.com/zeromicro/mcp-zero.git && cd mcp-zero && go build
# ์„ค์ •: ~/Library/Application Support/Claude/claude_desktop_config.json
# ๋˜๋Š”: claude mcp add --transport stdio mcp-zero --env GOCTL_PATH=/path/to/goctl -- /path/to/mcp-zero

๋™์ž‘ ๋ฐฉ์‹

AI ์–ด์‹œ์Šคํ„ดํŠธ๋Š” ๋‹ค์Œ ๋„๊ตฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. ai-context - ์›Œํฌํ”Œ๋กœ ์•ˆ๋‚ด
  2. zero-skills - ๊ตฌํ˜„ ํŒจํ„ด
  3. mcp-zero - ์‹ค์‹œ๊ฐ„ ์ฝ”๋“œ ์ƒ์„ฑ

์˜ˆ์‹œ: REST API ์ƒ์„ฑ โ†’ AI๊ฐ€ ai-context์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ฝ์Œ โ†’ mcp-zero๋ฅผ ํ˜ธ์ถœํ•ด ์ฝ”๋“œ ์ƒ์„ฑ โ†’ zero-skills์—์„œ ํŒจํ„ด ์ฐธ์กฐ โ†’ ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ๋œ ์ฝ”๋“œ ์ƒ์„ฑ โœ…

๋น ๋ฅธ ์‹œ์ž‘

  1. ์ „์ฒด ์˜ˆ์ œ:

    ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์‹œ์Šคํ…œ ๋น ๋ฅธ ๊ฐœ๋ฐœ

    ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์‹œ์Šคํ…œ ๋น ๋ฅธ ๊ฐœ๋ฐœ - ๋‹ค์ค‘ RPC

  2. goctl ์„ค์น˜

    shell
    # Go ์‚ฌ์šฉ
    go install github.com/zeromicro/go-zero/tools/goctl@latest
    
    # Mac ์‚ฌ์šฉ
    brew install goctl
    
    # ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ docker ์‚ฌ์šฉ
    docker pull kevinwan/goctl
    # goctl ์‹คํ–‰
    docker run --rm -it -v `pwd`:/app kevinwan/goctl --help
    

    goctl์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ณ  $PATH์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

  3. API ํŒŒ์ผ(greet.api) ์ƒ์„ฑ:

    go
    type (
      Request {
        Name string `path:"name,options=[you,me]"` // ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ž๋™์œผ๋กœ ๊ฒ€์ฆ๋ฉ๋‹ˆ๋‹ค.
      }
    
      Response {
        Message string `json:"message"`
      }
    )
    
    service greet-api {
      @handler GreetHandler
      get /greet/from/:name(Request) returns (Response)
    }
    

    .api ํ…œํ”Œ๋ฆฟ ์ƒ์„ฑ:

    shell
    goctl api -o greet.api
    
  4. Go ์„œ๋ฒ„ ์ฝ”๋“œ ์ƒ์„ฑ

    shell
    goctl api go -api greet.api -dir greet
    

    ์ƒ์„ฑ๋˜๋Š” ๊ตฌ์กฐ:

    Plain
    โ”œโ”€โ”€ greet
    โ”‚ย ย  โ”œโ”€โ”€ etc
    โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ greet-api.yaml        // ์„ค์ • ํŒŒ์ผ
    โ”‚ย ย  โ”œโ”€โ”€ greet.go                  // main ํŒŒ์ผ
    โ”‚ย ย  โ””โ”€โ”€ internal
    โ”‚ย ย      โ”œโ”€โ”€ config
    โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ config.go         // ์„ค์ • ์ •์˜
    โ”‚ย ย      โ”œโ”€โ”€ handler
    โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ greethandler.go   // get/put/post/delete ๋ผ์šฐํŠธ๊ฐ€ ์—ฌ๊ธฐ์— ์ •์˜๋ฉ๋‹ˆ๋‹ค.
    โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ routes.go         // ๋ผ์šฐํŠธ ๋ชฉ๋ก
    โ”‚ย ย      โ”œโ”€โ”€ logic
    โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ greetlogic.go     // ์š”์ฒญ ๋กœ์ง์„ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    โ”‚ย ย      โ”œโ”€โ”€ svc
    โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ servicecontext.go // ์„œ๋น„์Šค ์ปจํ…์ŠคํŠธ, mysql/redis๋ฅผ ์—ฌ๊ธฐ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    โ”‚ย ย      โ””โ”€โ”€ types
    โ”‚ย ย          โ””โ”€โ”€ types.go          // ์š”์ฒญ/์‘๋‹ต์ด ์—ฌ๊ธฐ์— ์ •์˜๋ฉ๋‹ˆ๋‹ค.
    โ””โ”€โ”€ greet.api                     // api ์„ค๋ช… ํŒŒ์ผ
    

    ์„œ๋น„์Šค ์‹คํ–‰:

    shell
    cd greet
    go mod tidy
    go run greet.go -f etc/greet-api.yaml
    

    ๊ธฐ๋ณธ ํฌํŠธ: 8888(etc/greet-api.yaml์—์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)

    curl๋กœ ํ…Œ์ŠคํŠธ:

    shell
    curl -i http://localhost:8888/greet/from/you
    

    ์‘๋‹ต:

    http
    HTTP/1.1 200 OK
    Date: Sun, 30 Aug 2020 15:32:35 GMT
    Content-Length: 0
    
  5. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ž‘์„ฑ

    • servicecontext.go๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ(mysql, redis ๋“ฑ)์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    • .api ์ •์˜์— ๋”ฐ๋ผ logic ํŒจํ‚ค์ง€์— ๋กœ์ง ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  6. ์—ฌ๋Ÿฌ ์–ธ์–ด์˜ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ ์ƒ์„ฑ

    shell
    goctl api java -api greet.api -dir greet
    goctl api dart -api greet.api -dir greet
    ...
    

๋ฒค์น˜๋งˆํฌ

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ณด๊ธฐ

๋ฌธ์„œ

์ฑ„ํŒ… ๊ทธ๋ฃน

๋‹ค์Œ ๋งํฌ์—์„œ ์ฑ„ํŒ…์— ์ฐธ์—ฌํ•˜์„ธ์š”: https://discord.gg/4JQvC5A4Fe

Cloud Native Landscape

<p float="left"> &nbsp;&nbsp;&nbsp; </p>

go-zero๋Š” CNCF Cloud Native Landscape์— ๋“ฑ์žฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ณ„์„ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”! โญ

์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งˆ์Œ์— ๋“ค๊ฑฐ๋‚˜ ํ•™์Šต ๋˜๋Š” ์ž์ฒด ์†”๋ฃจ์…˜์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด, ์ƒˆ ๋ฆด๋ฆฌ์Šค ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก star๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ ์ง€์›์€ ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค!