Study for me
Go 웹 프레임워크에 핫 리로딩 적용하기 본문
Go언어로 웹 개발을 할 때 변경사항을 확인하기 위해서 매번 Ctrl + C, go run main.go를 하신 기억이 있으신가요? Node.js 같은 경우는 nodemon 같은 핫 리로딩 라이브러리가 유명한데, Go에서는 어떤 라이브러리가 있을까요?
이런 고민을 하고 계신 분들을 위해, air 라이브러리를 소개합니다.
Air 라이브러리는 Go 앱들을 위한 핫 리로딩 라이브러리입니다. 즉, 개발할 때 변경사항을 확인하기 위해서 서버를 껐다 다시 컴파일하는 과정을 대신해주죠.
게다가 프레임워크 상관없이 핫 리로딩을 적용시켜 준다는 점도 매력적입니다.
gin, echo, fiber 등등 거의 모든 프레임워크에 적용할 수 있습니다.
이번 포스팅에서는 air 프레임워크를 어떻게 프로젝트에 적용시키는지 알아보도록 하겠습니다.
설치
https://github.com/cosmtrek/air
해당 라이브러리를 설치하는 방법에는 여러 가지가 있습니다.
먼저 가장 간단한 go install을 이용해 설치하는 방법, shell 스크립트를 통해 설치하는 방법, 그리고 도커를 통해 설치하는 방법이 있습니다.
하지만 이번 포스팅에서는 가장 간단하게 적용할 수 있도록 go install를 사용해서 설치해보도록 하겠습니다.
go install github.com/cosmtrek/air@latest
해당 명령어를 main.go나 app.go 같이 실행점이 있는 디렉터리에서 실행시켜줍니다.
설정
Air 라이브러리를 사용하기 전에 앞서 설정 파일을 만들어보겠습니다.
이 설정 파일을 통해서 air를 어떻게 작동시킬지 설정할 수 있습니다.
air init
해당 명령어를 실행시키면, .air.toml라는 파일이 생성됩니다.
# Working directory
# . or absolute path, please note that the directories following must be under root.
root = "."
tmp_dir = "tmp"
[build]
# Just plain old shell command. You could use `make` as well.
cmd = "go build -o ./tmp/main ."
# Binary file yields from `cmd`.
bin = "tmp/main"
# Customize binary.
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
# Watch these filename extensions.
include_ext = ["go", "tpl", "tmpl", "html"]
# Ignore these filename extensions or directories.
exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]
# Watch these directories if you specified.
include_dir = []
# Exclude files.
exclude_file = []
# It's not necessary to trigger build each time file changes if it's too frequent.
delay = 1000 # ms
# Stop to run old binary when build errors occur.
stop_on_error = true
# This log file places in your tmp_dir.
log = "air_errors.log"
[log]
# Show log time
time = false
[color]
# Customize each part's color. If no color found, use the raw app log.
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"
[misc]
# Delete tmp directory on exit
clean_on_exit = true
지금으로서는 만질 내용이 없지만, 본인 입맛대로 색상을 바꾼다던지, 추가로 동작시키고 싶은 파일이 있다면 설정할 수 있습니다.
사용
사용법은 정말 간단합니다.
air
위 명령어만 치면, 우리의 air 라이브러리가 알아서 서버를 시작시켜주고, 변경사항이 있다면 서버를 자동으로 재시작시켜줍니다.
$ air
__ _ ___
/ /\ | | | |_)
/_/--\ |_| |_| \_ , built with Go
watching .
watching handlers
watching presenter
watching routes
!exclude tmp
building...
running...
┌───────────────────────────────────────────────────┐
│ Fiber v2.31.0 │
│ http://127.0.0.1:8080 │
│ (bound on host 0.0.0.0 and port 8080) │
│ │
│ Handlers ............. 3 Processes ........... 1 │
│ Prefork ....... Disabled PID ............. 25872 │
└───────────────────────────────────────────────────┘
위 화면처럼 떴다면 성공입니다!