예언합니다. 앞으로 Go가 대세입니다 😎
요즘 Go 가 좀 핫하다고 하더라고요?? 원래 Docker 때문에 알게 됐다가 구글이 만들었다고 카더라도 듣다가 성능이 좋다?? 개발이 편하다?? 이런 이야기들을 많이 들었어요
그래서 예전에 잠깐 맛보기를 좀 했었는데 들은 것 치고는 문법이 좀.. 뭐랄까.. 살짝 어려워 보이는데? 그래서 찍먹했다가 굳이 싶어서 접었었어요 한 2년 전쯤???
당시에 봤던 코드가 대충 이런 느낌이었는데요
package main
import (
"errors"
"fmt"
)
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("0으로 나눌 수 없습니다")
}
return a / b, nil
}
func main() {
result, err := divide(10, 2)
if err != nil {
fmt.Println("에러:", err)
return
}
fmt.Println("결과:", result) // 결과: 5
}
:= 이 뭐지, 함수가 값을 두 개씩 돌려주네??? 튜플??? 에러를 왜 직접 들고 다니지… 처음엔 이런 것들이 하나하나 낯설게 느껴졌었어요. 근데 지금 다시 보니 나름 납득이 가는 구조긴 하더라고요 🤣
그러다가 최근에 AI 공부를 시작하고 회사에서도 AI 에이전트 개발을 하면서 Python 을 주로 많이 쓰고 있는데 원래부터 전 파이썬을 별로 크게 좋아하지 않았거든요
뭐랄까.. 그냥 설명하긴 어려운데 제 스타일은 아니었어요 그냥 제 취향이 아니다! 어쨌든 그래서 AI 생태계에서 Go 가 파이썬 다음으로 굉장히 빠르게 성장하고 있다고 하더라고요?? (검증이 필요합니다.. 일단 카더라통신.. 🤫)
아무튼 그래서 성능 향상, 최적화 이런 거 좋아하는 사람으로서 배우기 쉽고? 성능이 또 굉장히 좋기로 유명하면서 AI 생태계도 빠르게 발전 중이라는 Go 언어를 다시 공부해보기로 마음먹었습니다!!
그리고 무엇보다 요즘은 AI 가 워낙 좋아서 예전처럼 책 사고 강의 볼 거 없이 그냥 AI랑 대화하면서 공부할 수 있으니까 언제 어디서든 할 수 있기도 하고 ㅎ
(솔직히 요즘 바이브코딩이 대세라서 굳이 배울 필요가 있나..? 싶지만 디버깅도 하고 읽을 줄 알 정도만 하자! 느낌으로…)
원래는 그냥 Nest.js로 하려 했습니다
사이드 플젝 하는 게 있는데 프론트가 Node 기반이기도 하고 백엔드도 Node 기반이면 동시에 두고 보기 편하지 않을까? (사실 Node 계열도 그냥 읽을 정도만 되지 플젝으로 해본 건 처음이라 😅)
그리고 Node가 싱글 스레드이긴 해도 또 비동기 처리로 워낙 유명하니까 이번 플젝에서는 크게 문제되지 않을 것 같기도 하고?
그래서 그냥 Nest.js 로 만들어서 하고 있다가 뭔가 점점 스파게티 코드가 되어가고 있어서 리뉴얼 한번 하자라는 느낌으로 때려치우고 Go 로 다시 해보기로 마음먹었어요 (어차피 클로드가 도와주니까 이 정도쯤이야.. 괜찮겠지?)
- 개인 프로젝트이기도 하고
- 배포 환경이 넉넉하지도 않고
- 어차피 새로운 걸 배워보고 싶은 마음도 있었고
- 직접 프로젝트에 써보면서 배우는 게 훨씬 빨리 남는 편이라
그래서 그냥 방향을 틀었습니다. 어중간하게 튜토리얼만 보는 것보다, 실제 프로젝트에 집어넣고 삽질하는 쪽이 저한테는 훨씬 학습 효과가 좋더라고요.
Go가 계속 눈에 밟혔던 이유
찾아볼수록 Go는 제가 좋아하는 키워드를 꽤 많이 가지고 있었습니다 !
일단 제일 많이 들었던 건 역시 성능이었고요. 물론 C, C++, Rust 같은 쪽과 완전히 같은 결의 언어는 아니지만, 그렇다고 해서 “고수준 언어니까 느리겠지” 하고 보기에는 존재감이 너무 큰 언어였어요
그리고 이런 포인트들도 꽤 매력적으로 느껴지더라고요 👍
- 문법이 비교적 단순해서 읽는 부담이 적다 예전보다는..
- 키워드 수도 많지 않아서 언어 자체의 진입 장벽이 낮은 편이다 확실히 다른 언어보다는..
- 고루틴, 채널 같은 동시성 모델이 워낙 유명하다
- 단일 바이너리 배포가 가능해서 운영 관점에서도 심플하다 (이건 진짜 좋음..)
특히 저는 고루틴하고 채널이 계속 궁금했습니다. async/await 이나 kotlin coroutine 같은 것과는 좀 다른가???
다들 Go 이야기할 때 거의 빠지지 않고 나오더라고요. 저도 아직 깊게 이해한 건 아니지만, “아 그래서 이 언어가 서버 쪽에서 계속 거론되는구나” 싶은 포인트가 분명히 있는 것 같아요.
아마 제 기억에 당근마켓 시절에 어떤 개발자분 인터뷰를 봤었는데 성능적 이슈? 때문에 직접 Go 언어 스터디도 하고 당근마켓 서비스 중에 일부분은 Go 로 대체를 했다는 이야기를 들은 기억이 있습니다.
또 괜히 이런 것도 눈에 들어옵니다. Docker도 Go로 만들어졌고, 요즘 이것저것 보다 보면 AI 쪽 툴이나 인프라성 프로젝트에서 Go가 꽤 자주 보이더라고요. Python 다음으로 활발하다, 전망이 좋다 이런 얘기들도 심심찮게 보이고요 😃
물론 이런 건 제가 아직 체감으로 말할 단계는 아니고, “그래서 더 궁금하다” 정도에 가깝습니다 ㅋㅋ
그래서 첫 프레임워크로 Gin !
Go 백엔드 프레임워크에서 Gin이 가장 널리 사용되고 자료도 많다고 하고, 다른 건 나중에 알아보고 일단 가장 많은 걸로 가자! 아묻따 Gin으로 결정했습니다 ㅎㅎ
첫인상은 꽤 좋습니다. 근데 조금 어색한 것도 있음
일단 지금까지의 첫인상은 좋습니다 👏
군더더기 없이 바로 서버가 뜨고, 물론 AI의 도움을 받긴 했지만.. 필요한 것부터 하나씩 붙여 나가는 느낌이 꽤 마음에 들어요. 뭔가 “괜히 복잡한 거 없이 본론부터 들어가는 언어” 같은 인상이 있습니다. 물론 요즘 다른 언어들도 다 비슷하긴 해요.
근데 정말 어색한 점.
예를 들면 라이브러리 설치할 때 github 주소를 바로 넣는 방식이요.
go get github.com/gin-gonic/gin
이건 뭐지? 이렇게 라이브러리를 추가한다고?
아무튼 이번에는 진짜 한번 부딪혀 보려고 합니다
이번에 Go + Gin으로 프로젝트를 시작한 건, 단순히 유행 따라가려는 건 아닙니다. 성능이나 최적화에 대한 호기심도 있었고, 앞으로 꽤 자주 마주치게 될 언어 같다는 생각도 있었고, 무엇보다 지금 직접 써볼 타이밍이 왔다는 게 컸어요.
언어 공부는 늘 그렇지만, 결국 문법 책 한 권 읽는 것보다 직접 만들면서 겪는 시행착오가 훨씬 오래 남는 것 같습니다 👍
그래서 당분간은 Go에 적응해 가는 과정, Gin으로 API 서버를 만지면서 느낀 점, 그리고 아마도 분명히 하게 될 삽질들까지 가볍게 남겨보려고 합니다.