๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT

Go ์–ธ์–ด: ๊ฐ•๋ ฅํ•˜๊ณ  ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

by ๐Ÿ’ฒ๐ŸŽตโœ–๏ธโœ”๏ธโ˜ผ 2024. 3. 18.
728x90

Go ์–ธ์–ด: ๊ฐ•๋ ฅํ•˜๊ณ  ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

1. Go ์–ธ์–ด๋ž€?

Go ์–ธ์–ด๋Š” ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, 2007๋…„์— ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Go ์–ธ์–ด๋Š” C์™€ ์œ ๋‹‰์Šค ๊ณ„์—ด์˜ ์–ธ์–ด์—์„œ ์˜ํ–ฅ์„ ๋ฐ›์•˜์œผ๋ฉฐ, ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋™์‹œ์„ฑ ๋ฐ ๋ณ‘ํ–‰์„ฑ์„ ๊ฐ–์ถ˜ ์–ธ์–ด๋กœ ์ฃผ๋ชฉ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

2. Go ์–ธ์–ด์˜ ์—ญ์‚ฌ

Go ์–ธ์–ด๋Š” Robert Griesemer, Rob Pike, Ken Thompson์ด ๊ฐœ๋ฐœํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์—๋Š” C์™€ C++์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•˜๋ฉด์„œ๋„ ๋ณต์žก์„ฑ์„ ์ค„์ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 2009๋…„ 3์›”์— ๊ณต์‹์ ์œผ๋กœ ๋ฐœํ‘œ๋œ ํ›„, ์ง€์†์ ์ธ ๋ฐœ์ „์„ ๊ฑฐ๋“ญํ•ด์™”์Šต๋‹ˆ๋‹ค.

3. Go ์–ธ์–ด์˜ ์—ญํ• 

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

4. Go ์–ธ์–ด์˜ ์žฅ๋‹จ์ 

์žฅ์ :

  • ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•: Go ์–ธ์–ด๋Š” C์™€ ์œ ๋‹‰์Šค ๊ณ„์—ด ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉด์„œ๋„ ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
  • ํšจ์œจ์ ์ธ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ: Go ์–ธ์–ด๋Š” ๊ณ ๋ฃจํ‹ด๊ณผ ์ฑ„๋„์„ ํ†ตํ•œ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ•๋ ฅํ•˜์—ฌ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  • ํ’๋ถ€ํ•œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: Go ์–ธ์–ด๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ’๋ถ€ํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ :

  • ์„ฑ์ˆ™๋„ ๋ถ€์กฑ: ๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด Go ์–ธ์–ด๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ์„ฑ์ˆ™๋„๊ฐ€ ๋‚ฎ์•„ ์•„์ง๊นŒ์ง€๋Š” ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์ด๋‚˜ ํŒจํ„ด์ด ๋งŽ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ์ƒํƒœ๊ณ„์˜ ํ•œ๊ณ„: Go ์–ธ์–ด๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์— ๋น„ํ•ด ์ƒํƒœ๊ณ„๊ฐ€ ์ž‘์•„์„œ ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. Go ์–ธ์–ด๋ฅผ ์ดํ•ดํ•˜๋Š” ์˜ˆ์ œ ์ฝ”๋“œ

Hello, World!

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

๊ณ ๋ฃจํ‹ด์„ ์ด์šฉํ•œ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ

package main

import (
    "fmt"
    "time"
)

func main() {
    go task1()
    go task2()

    time.Sleep(time.Second)
}

func task1() {
    for i := 0; i < 5; i++ {
        fmt.Println("Task 1 -", i)
        time.Sleep(time.Millisecond * 500)
    }
}

func task2() {
    for i := 0; i < 5; i++ {
        fmt.Println("Task 2 -", i)
        time.Sleep(time.Millisecond * 500)
    }
}

6. ์—ฐ๊ด€๋œ ๊ธฐ์ˆ 

  • gRPC (Google Remote Procedure Call): Go ์–ธ์–ด์—์„œ ๊ฐœ๋ฐœ๋œ ๋น ๋ฅธ RPC ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋ถ„์‚ฐ ์‹œ์Šคํ…œ๊ณผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Docker: Go ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆํ™”ํ•˜์—ฌ ๋ฐฐํฌํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. Docker์˜ ์ปจํ…Œ์ด๋„ˆ๋Š” Go ์–ธ์–ด์™€์˜ ํ˜ธํ™˜์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฏ€๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€