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

Go ์–ธ์–ด(์ค„์—ฌ์„œ Golang)๋Š” Google์—์„œ 2009๋…„์— ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.
์„ค๊ณ„์ž๋Š” Rob Pike, Ken Thompson, Robert Griesemer โ€” C ์–ธ์–ด์™€ Unix๋ฅผ ๋งŒ๋“  ์ „์„ค์ ์ธ ๊ฐœ๋ฐœ์ž๋“ค์ด์ฃ .

Go๋Š” โ€œC์˜ ์„ฑ๋Šฅ + Python์˜ ๊ฐ„๊ฒฐํ•จโ€์„ ๋ชฉํ‘œ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.
์ฆ‰, ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋ฉด์„œ๋„ ์ƒ์‚ฐ์„ฑ์ด ๋†’์€ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.


2. Go ์–ธ์–ด์˜ ์ฃผ์š” ํŠน์ง•

โœ… ๊ฐ„๊ฒฐํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ฌธ๋ฒ•

Go๋Š” ๋ฌธ๋ฒ•์ด ๋‹จ์ˆœํ•˜๊ณ , ๋“ค์—ฌ์“ฐ๊ธฐ๋‚˜ ๊ด„ํ˜ธ ์Šคํƒ€์ผ์ด ํ†ต์ผ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ž๋™ ์ฝ”๋“œ ํฌ๋งทํ„ฐ(go fmt) ๋•๋ถ„์— ํŒ€ ๋‚ด ์ฝ”๋“œ ์Šคํƒ€์ผ์ด ํ•ญ์ƒ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

package main

import "fmt"

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


โšก ๋น ๋ฅธ ์ปดํŒŒ์ผ๊ณผ ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ

Go๋Š” ์ •์  ์ปดํŒŒ์ผ ์–ธ์–ด๋กœ, ๋นŒ๋“œ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋ฉฐ, ์‹คํ–‰ ํŒŒ์ผ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ์˜์กด์„ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
์ด๋Š” ์„œ๋ฒ„ ๋ฐฐํฌ๋‚˜ CLI ๋„๊ตฌ ์ œ์ž‘์— ํฐ ์žฅ์ ์ด ๋ฉ๋‹ˆ๋‹ค.


๐Ÿงต ๊ณ ๋ฃจํ‹ด(Goroutine) ๊ธฐ๋ฐ˜์˜ ๋™์‹œ์„ฑ

Go์˜ ํ•ต์‹ฌ์€ ๊ณ ๋ฃจํ‹ด(Goroutine) ์ž…๋‹ˆ๋‹ค.
์ˆ˜์ฒœ ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹œ์Šคํ…œ ์ž์›์„ ๊ฑฐ์˜ ์†Œ๋ชจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

func say(msg string) {
    fmt.Println(msg)
}

func main() {
    go say("Hello")
    go say("World")
    time.Sleep(time.Second)
}


๐Ÿงฑ ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ (GC)

Go๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC)์„ ์ง€์›ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ ๋œ์–ด์ค๋‹ˆ๋‹ค.
C/C++์ฒ˜๋Ÿผ ์ˆ˜๋™ ํ•ด์ œ๊ฐ€ ํ•„์š” ์—†์ง€๋งŒ, ์„ฑ๋Šฅ์€ ์—ฌ์ „ํžˆ ๋น ๋ฆ…๋‹ˆ๋‹ค.


3. JSON ์ฒ˜๋ฆฌ โ€” Go์˜ ํ˜„์‹ค์ ์ธ ๋ถˆํŽธํ•จ

Go ์–ธ์–ด๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ฐ€์žฅ ์ž์ฃผ ๋‚˜์˜ค๋Š” ๋ง์ด ์žˆ์Šต๋‹ˆ๋‹ค:

โ€œGo์—์„œ JSON ๋‹ค๋ฃจ๋Š” ๊ฑด Python๋ณด๋‹ค ์–ด๋ ต๋‹ค.โ€

์ด๊ฑด ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.


๐Ÿ Python์˜ JSON ์ฒ˜๋ฆฌ (๊ฐ„๋‹จํ•จ)

Python์€ ๋™์  ํƒ€์ดํ•‘ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—, JSON์„ ๋‹ค๋ฃฐ ๋•Œ ๋งค์šฐ ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค.

import json

data = '{"name": "Heejune", "age": 35}'
obj = json.loads(data)
print(obj["name"])  # Heejune

obj["age"] = 36
print(json.dumps(obj))

๋ณ„๋„์˜ ๊ตฌ์กฐ์ฒด๋‚˜ ํƒ€์ž… ์ •์˜ ์—†์ด ๋ฐ”๋กœ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ฃ .


๐Ÿน Go์˜ JSON ์ฒ˜๋ฆฌ (๋ช…์‹œ์  ํƒ€์ž… ํ•„์š”)

Go๋Š” ์ •์  ํƒ€์ดํ•‘ ์–ธ์–ด๋ผ์„œ, JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์ „์— ๊ตฌ์กฐ์ฒด(struct)๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    jsonData := []byte(`{"name":"Heejune","age":35}`)
    var p Person

    if err := json.Unmarshal(jsonData, &p); err != nil {
        panic(err)
    }
    fmt.Println(p.Name) // Heejune

    // ๋‹ค์‹œ JSON์œผ๋กœ ๋ณ€ํ™˜
    newData, _ := json.Marshal(p)
    fmt.Println(string(newData))
}

์ด์ฒ˜๋Ÿผ Go์—์„œ๋Š”:

  1. ๊ตฌ์กฐ์ฒด ํ•„๋“œ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด์•ผ ํ•˜๊ณ ,
  2. JSON ํƒœ๊ทธ(json:"name")๋ฅผ ๋ถ™์—ฌ์•ผ ํ•˜๋ฉฐ,
  3. Unmarshal / Marshal ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿค” ์™œ ์ด๋ ‡๊ฒŒ ๋ณต์žกํ• ๊นŒ?

Go๋Š” **๋ช…์‹œ์  ํƒ€์ž… ์•ˆ์ •์„ฑ(type safety)**์„ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฒŒ ์—ฌ๊น๋‹ˆ๋‹ค.
Python์ฒ˜๋Ÿผ ์ž์œ ๋กญ๊ฒŒ ๋‹ค๋ฃจ๋Š” ๋Œ€์‹ , ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ณด์žฅ๋ฐ›์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋Š” ์ค„์–ด๋“ค์ง€๋งŒ, ์ฝ”๋“œ ์ž‘์„ฑ๋Ÿ‰์€ ๋Š˜์–ด๋‚˜๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ’ก ์‹ค๋ฌด ํŒ: interface{}๋ฅผ ์ด์šฉํ•œ ์œ ์—ฐํ•œ ํŒŒ์‹ฑ

์ •ํ™•ํ•œ ๊ตฌ์กฐ์ฒด๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ map[string]interface{}๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

var data map[string]interface{}
json.Unmarshal([]byte(`{"x":10,"y":20}`), &data)
fmt.Println(data["x"]) // 10

ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ์—๋„ ํƒ€์ž… ์บ์ŠคํŒ…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

x := data["x"].(float64)

์ฆ‰, Go๋Š” JSON์„ โ€œ์•ˆ์ „ํ•˜๊ฒŒโ€ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋‘” ์…ˆ์ž…๋‹ˆ๋‹ค.


4. Go์˜ ์‹ค์ œ ํ™œ์šฉ ๋ถ„์•ผ

๋ถ„์•ผ์„ค๋ช…
๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ณ ์„ฑ๋Šฅ REST API, gRPC ์„œ๋ฒ„
DevOps ๋„๊ตฌTerraform, Docker, Kubernetes
ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ
CLI ์œ ํ‹ธ๋ฆฌํ‹ฐ๋‹จ์ผ ์‹คํ–‰ํŒŒ์ผ ๋ฐฐํฌํ˜• ๋„๊ตฌ
๋ณด์•ˆ ๋ฐ ๋„คํŠธ์›Œํฌ์Šค์บ๋„ˆ, ๋กœ๊ทธ ํŒŒ์„œ, ํ”„๋ก์‹œ ์„œ๋ฒ„

5. Go vs Python โ€” JSON๊ณผ ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ๋น„๊ต

ํ•ญ๋ชฉGoPython
๋ฌธ๋ฒ• ๋‚œ์ด๋„์ค‘๊ฐ„์‰ฌ์›€
ํƒ€์ž… ์•ˆ์ •์„ฑ๊ฐ•ํ•จ (์ •์  ํƒ€์ดํ•‘)์•ฝํ•จ (๋™์  ํƒ€์ดํ•‘)
JSON ์ฒ˜๋ฆฌ๊ตฌ์กฐ์ฒด ์ •์˜ ํ•„์š”๋ฐ”๋กœ dict ์ ‘๊ทผ ๊ฐ€๋Šฅ
์‹คํ–‰ ์†๋„๋น ๋ฆ„๋А๋ฆผ
์œ ์ง€๋ณด์ˆ˜์•ˆ์ •์ ์œ ์—ฐํ•˜์ง€๋งŒ ์œ„ํ—˜
๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฑฐ์˜ ์—†์Œ๋ฐœ์ƒ ๊ฐ€๋Šฅ

โžก ์ •๋ฆฌํ•˜์ž๋ฉด:

  • Go๋Š” ๋ช…์‹œ์ ์ด๊ณ  ์•ˆ์ „ํ•œ ์–ธ์–ด,
  • Python์€ ์œ ์—ฐํ•˜๊ณ  ๋น ๋ฅธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

๋‘˜ ๋‹ค JSON์„ ์ž˜ ๋‹ค๋ฃจ์ง€๋งŒ,
Go๋Š” โ€œ์•ˆ์ „์„ฑโ€์„ ์œ„ํ•ด ๋ณต์žกํ•ด์กŒ๊ณ ,
Python์€ โ€œ๊ฐœ๋ฐœ ์†๋„โ€๋ฅผ ์œ„ํ•ด ๋‹จ์ˆœํ•ด์กŒ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


6. ๊ฒฐ๋ก  โ€” ๋‹จ์ˆœํ•จ ์†์˜ ์•ˆ์ •์„ฑ

Go๋Š” ์ฒ˜์Œ์—” ์•ฝ๊ฐ„์˜ ๋ถˆํŽธํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ JSON ์ฒ˜๋ฆฌ์ฒ˜๋Ÿผ โ€œ๋™์  ๋ฐ์ดํ„ฐโ€๋ฅผ ๋‹ค๋ฃฐ ๋• Python๋ณด๋‹ค ๋” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์จ์•ผ ํ•˜์ฃ .

ํ•˜์ง€๋งŒ ์ผ๋‹จ ์ต์ˆ™ํ•ด์ง€๋ฉด, Go์˜ ๋ช…์‹œ์ ์ธ ์„ค๊ณ„๋Š” ๋ฒ„๊ทธ๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ณ  ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

์†๋„, ์•ˆ์ •์„ฑ, ๋ฐฐํฌ์˜ ๋‹จ์ˆœํ•จ โ€” ์ด ์„ธ ๊ฐ€์ง€๊ฐ€ Go์˜ ํ•ต์‹ฌ ๊ฐ€์น˜์ž…๋‹ˆ๋‹ค.

Posted in

๋Œ“๊ธ€ ๋‚จ๊ธฐ๊ธฐ