개요
쿠버네티스 자동화 구축 시스템을 설계하던 중, CI/CD 파트나 AWS에 접근하기 위한 CLI를 사용하는 기본 언어로 python(FastAPI)을 사용할지, 아니면 쿠버네티스 구축 시 대중적으로 사용되는 Go를 사용할지 고민하게 되었다. 인프라 및 클라우드 직군 채용 공고를 보면, 생각보다 Go에 대한 경험을 지원자에게 물어보는 경우가 많다. 또한, 도커나 쿠버네티스 역시 Go를 사용하여 개발되었다. 어째서 Go를 사용하고, 이 생소한 구글 출신 언어가 갖는 이점이 무엇일까? 한 번 알아보도록 하자.
Go 언어에 대해 알아보자
1. 시스템 소프트웨어 개발에 적합하게 설계되었다.
2. C, C++과 문법이 비슷하다. 기존 구글에서 주로 사용하던 C++의 복잡함과 긴 컴파일을 줄일 수 있도록 설계되었다.
3. Docker, Kubernetes, Ethereum 등의 개발에 사용되었다. 성능이 안정적이다.
4. 문법이 간결하고 컴파일이 빠르다.
- C언어의 경우 헤더 파일을 정의함
-> Go는헤더 파일을 정의하는 대신, 소스 코드 자체를 패키지화하여 변경된 부분만 컴파일(속도 향상)
-> 코드 내에 불필요한 변수/패키지가 있을 경우 오류 발생
5. 특히 서버 개발용으로 설계되었기 때문에, 동시성 제어가 뛰어남
- 고루틴(goroutine): Go 런타임에서 관리되는 경량 스레드
- channel: 고루틴 간 메세지를 주고받을 수 있게 하는 매커니즘
=> 멀티 코어 환경에서 병렬 처리를 쉽게 할 수 있음
5번이 핵심이다. 정리하자면, 빠르고 간결하며 직관적인데, C보다는 문법이 조금 쉬운 편에 속한다. 알아보면서 제일 놀랐던 점은 Loop 문법 중 for문 형식만 지원한다는 점이다(== while문을 지원하지 않는다). 개발자의 역량으로 구현할 수 있는 부분을 언어 자체에서 최대한 덜어내고, 성능과 안정성에 집중한 느낌을 받았다.
하지만 Generic, 포인터 연산 등 Low level 개발(커널, 임베디드, 그래픽스 등)에 필요한 요소는 거의 다 빠졌기 때문에, 유틸리티나 네트워크, 서버 등 비교적 High Level인 프로그램을 만들 때, 빠른 속도와 안정성을 지원한다고 여기면 될 것 같다. 코드를 읽다 보면 Low Level 언어같다는 느낌이 드는데, 서버 프로그래밍에 적합한 Low Level 언어로 생각하기로 했다.
설치 및 실행
필자는 Mac OS를 사용하기 때문에 homebrew로 간편하게 설치하였다. 터미널 창에 다음 명령어를 입력하면 설치가 끝난다.
brew install golang
윈도우나 리눅스의 경우, 공식문서(https://go.dev/doc/install)를 참고하면 될 것 같다.
다음으로, Go 프로젝트를 생성할 폴더를 만든다.
cd Desktop
mkdir go-hello
cd go-hello
최초로 module을 생성해 보자.
go mod init ex/go-hello
이후 동일 폴더에 확장자가 .go
인 파일을 생성한다.
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
터미널의 명령어로 실행하면, Hello, World!가 출련된다.
go run .
결론
언어에 대해 알아보면서, 가장 처음으로 Hello Wolrd!를 출력해 보았다. 다음 포스팅에서는 1. GoLang의 기초적인 문법에 대해 알아보고, 2. Go의 패키지를 이용해 서버를 생성해서 간단한 Rest api를 구축한 다음, 3. AWS CLI에 접근해보는 게시글을 작성해보도록 하겠다. Java나 Python을 주로 사용하다가 오랜만에 새로운 언어를 만나 즐거웠고, 빠르다는 것 하나 만큼은 정말 확실히 알 수 있었다.
High Level을 위해 바뀐 어셈블리어를 배우는 것 같다.
'Programming' 카테고리의 다른 글
[FastAPI] SqlAlchemy Connection time out Error (0) | 2023.10.02 |
---|---|
[Spring] application.properties 파일을 git tracking에서 제외하기 (0) | 2022.07.05 |
[EFUB] BACK-END SEMINAR 1st SESSION (0) | 2022.03.31 |
[WEB] HTTP, HTTPS (0) | 2022.03.24 |
[스프링 입문] 스프링 빈과 의존 관계 (0) | 2022.03.24 |