โ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ฐ์ด๋ ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ๊ธฐ
๐น Go (Golang) ์์ธ ๊ฐ์ด๋ โ
"๊ตฌ๊ธ์ด ๋๊ท๋ชจ ํธ๋ํฝ ์ฒ๋ฆฌ์ ๋ง์ดํฌ๋ก์๋น์ค(MSA) ์ธํ๋ผ๋ฅผ ์ํด ๊น์ ๋ง๋ ๋จ๋จํ๊ณ ๊ทน๋๋ก ํจ์จ์ ์ธ ์ปดํ์ผ๋ฌ ์ธ์ด"
๐ก 1. 30๋ ์ฐจ ์ ๋ฐฐ์ ์ฌ์ด ์ค๋ช โ
์น ์๋น์ค์ ๊ท๋ชจ๊ฐ ์์ฒญ๋๊ฒ ์ปค์ ธ์ ๋ค์ด๋ฒ, ์ ํ๋ธ ๊ฐ์ ๋ํ ์ฌ์ดํธ๊ฐ ๋๋ฉด ์ปดํจํฐ ํ ๋๋ก๋ ์๋ง ๋ช ์ ์ ์์๋ฅผ ๊ฐ๋นํ ์ ์์ต๋๋ค. ์ด๋ ์๋ฒ์ ์์์ ๋ญ๋นํ์ง ์๊ณ , ๊ฐ์ฅ ๋น ๋ฅด๊ณ ์์ ์ ์ผ๋ก ์ผ๊พผ(์ค๋ ๋)๋ค์ ๋๋์ด ์ผ์ ์ํฌ ์ ์๋ ์ด๊ฒฝ๋ ์ธ์ด๊ฐ ํ์ํด์ก๋๋ฐ, ๊ทธ๊ฒ์ด ๋ฐ๋ก ๊ตฌ๊ธ์ด ๊ฐ๋ฐํ Go(๊ณ ๋ญ) ์ ๋๋ค.
C++์ ๋๋ฌด ๋ณต์กํ๊ณ ๋ฐฐ์ฐ๊ธฐ ์ด๋ ค์ฐ๋ฉฐ ์ค์ํ๊ธฐ ์ฝ๊ณ , Python์ด๋ Java๋ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ ์ผ๋ก ๋ง์ด ๋จน์ต๋๋ค. Go๋ ์ด ์ค๊ฐ์ ๊ท ํ์ ๊ธฐ๊ฐ ๋งํ๊ฒ ์ก์๋์ต๋๋ค. ๋ฌธ๋ฒ์ด ๊ทน๋๋ก ๋จ์ํ์ฌ ์ฑ
ํ ๊ถ์ด๋ฉด ๋ฉฐ์น ๋ง์ ๋ง์คํฐํ ์ ์๊ณ , ์คํ ์๋๋ C์ธ์ด ์์ค์ผ๋ก ๋น ๋ฅด๋ฉฐ ์ปดํ์ผ ๊ฒฐ๊ณผ๋ฌผ์ด ๋จ ํ๋์ ์คํํ์ผ(.exe ๋ฑ)๋ก ๋๋ฑ ๋์ ๋ฐฐํฌ๊ฐ ์ ๋ง ํธ๋ฆฌํฉ๋๋ค.
- ๋น์ ํ์๋ฉด: ๋ถํ์ํ ๋ฌด๊ฒ์ ์ต์ ์ ์ ๋ถ ๋นผ๋ฒ๋ฆฐ, ๋ ์ด์ฑ๊ณผ ์๋ ๋ฐฐ๋ฌ๋ง์ ์ํด ์ต์ ํ๋ ๋ผ๋ ๊ตต์ ์คํฌ์ธ ๋ฐ์ดํฌ(์คํ ๋ฐ์ด)์ ๊ฐ์ต๋๋ค.
๐ ๏ธ 2. ์ด๋์ ์ฃผ๋ก ์ฐ์ด๋์? โ
- ํด๋ผ์ฐ๋ ๋ฐ ์ธํ๋ผ ์์คํ : ํ๋ ํด๋ผ์ฐ๋ ์ธํ๋ผ์ ํ์ค ๋๊ตฌ์ธ Docker(๋์ปค) ์ Kubernetes(์ฟ ๋ฒ๋คํฐ์ค) ๊ฐ 100% Go ์ธ์ด๋ก ์์ฑ๋์์ต๋๋ค.
- ๊ณ ์ฑ๋ฅ ๋ง์ดํฌ๋ก์๋น์ค ๋ฐฑ์๋: ๋์ฉ๋ ํธ๋ํฝ ์ฒ๋ฆฌ์ฉ ์น ์๋ฒ API ๋ฐ MSA ํ๊ฒฝ์ ํต์ฌ ์์ง์ผ๋ก ๋งนํ์ฝํฉ๋๋ค.
โ๏ธ 3. ์ฅ์ ๊ณผ ๋จ์ (์ ๋ฐฐ์ ์์ง ํ๋ง๋) โ
- ์ฅ์ (๊น๋ํจ๊ณผ ์์ ์ฑ):
- ์๋์ ์ฑ๋ฅ & ๊ฒฝ๋ํ: ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋งค์ฐ ์ ๊ฒ ๋จน๊ณ , ๊ณ ๋ฃจํด(
Goroutine)์ด๋ผ๋ ๋ด์ฅ ๊ธฐ๋ฅ์ ํ์ฉํด ๋์์ฑ ์ฐ์ฐ์ ์์ญ๋ง ๊ฐ์ฉ ์์ ํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค. - ๋ฌธ๋ฒ์ ํต์ผ: ์ ๋ต ์ฝ๋๊ฐ ๊ฑฐ์ ํ๋๋ก ํต์ผ๋๋ฏ๋ก, ๋๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ๋ณด๋๋ผ๋ ๋๊ฐ์ด ์ฝ๊ธฐ ์ฌ์ ํ์ ํจ์จ์ด ๋ฐ์ด๋ฉ๋๋ค.
- ์๋์ ์ฑ๋ฅ & ๊ฒฝ๋ํ: ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋งค์ฐ ์ ๊ฒ ๋จน๊ณ , ๊ณ ๋ฃจํด(
- ๋จ์ (์ง๋์น ๋จ์ํ):
- ํด๋์ค ์์ ์์: ์ ํต์ ์ธ ๊ฐ์ฒด์งํฅ(Java ๋ฑ)์ ์์ ๊ฐ๋ ์ด ์๊ณ ๊ตฌ์กฐ์ฒด์ ์ธํฐํ์ด์ค๋ง ์ง์ํ์ฌ ์ด๊ธฐ ์ค๊ณ ์ ์ด์ํ ์ ์์ต๋๋ค.
- ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋: ์ฝ๋๋ฅผ ์งค ๋ ์๋ฌ ์ฒดํฌ ๋ฌธ๊ตฌ(
if err != nil)๊ฐ ์์์ด ๋ฐ๋ณต๋๋ ๊ท์ฐฎ์์ด ์กด์ฌํฉ๋๋ค.
๐ 4. ์ด๋ณด์๋ฅผ ์ํ ์ฒซ๊ฑธ์ ์ฝ๋ โ
Go ์ธ์ด ํน์ ์ ๊ฐ๋ณ๊ณ ์ง๊ด์ ์ธ ๋์์ฑ ์ฒ๋ฆฌ(Goroutine) ๊ธฐ๋ณธ ์ฝ๋์ ๋๋ค.
package main
import (
"fmt"
"time"
)
// ์ผ๊พผ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ ๋
๋ฆฝ ํจ์์
๋๋ค.
func sayHello(workerID int) {
fmt.Printf("์ผ๊พผ %d๋ฒ: ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์์!\n", workerID)
}
func main() {
// 'go' ํค์๋ ํ๋๋ก ๋ฉ์ธ ์คํ ํ๋ฆ๊ณผ ๋ณ๊ฐ์ธ ์ด๊ฒฝ๋ ์ค๋ ๋(๊ณ ๋ฃจํด)๋ฅผ ์ฆ์ ๋์๋๋ค.
go sayHello(1)
go sayHello(2)
// ๊ณ ๋ฃจํด์ด ์๋ฃ๋ ์๊ฐ์ ์ ๊น ๋ฒ์ด์ค๋๋ค.
time.Sleep(100 * time.Millisecond)
fmt.Println("๋ฉ์ธ ์๋ฒ: ๋ชจ๋ ๋น๋๊ธฐ ๋ช
๋ น ์ ์ก ์๋ฃ!")
}๐ฏ 5. ์ด๋ณด์ ์ถ์ฒ ๊ณต๋ถ ๋ฐฉํฅ โ
- Go๋ ๊ณต์ ํํ ๋ฆฌ์ผ์ธ A Tour of Go ์ฌ์ดํธ๊ฐ ์ ๋ง ์ ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ด ํํ ๋ฆฌ์ผ์ ๊ผญ ํ ๋ฒ ์ ์ฃผํํด ๋ณด์ธ์.
- ํฌ์ธํฐ(
*,&)์ ๊ฐ๋ ์ ๊ฐ๋ณ๊ฒ ์ดํดํ ๋ค์, **๊ตฌ์กฐ์ฒด(Struct)**์ **์ธํฐํ์ด์ค(Interface)**๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด ๋ค๋ฃจ๋ ์ค์ต์ ํด๋ณด์ธ์. - Go์ ํ์ค ํจํค์ง(
net/http)๋ง์ผ๋ก ์ธ๋ถ ํ๋ ์์ํฌ ์์ด ์น ์๋ฒ๋ฅผ ๊ตฌ์ถํด๋ณด๋ ์ฐ์ต์ ํ๋ฉด ์น ๋ฐฑ์๋์ ๊ธฐ๋ณธ ๋์ ์๋ฆฌ๊ฐ ์ ์ ๋ก ๊นจ์ฐ์ณ์ง๋๋ค.