Go 프로그램은 컴파일된 실행 파일로 실행되기 때문에 소스 코드를 수정할 때마다 프로그램을 다시 실행해야 변경 사항이 반영된다.
이를 위해 go run 명령을 사용하여 프로그램을 다시 실행해야 한다.
하지만 개발 중에는 파일이 수정될 때 자동으로 프로그램을 다시 실행해주는 도구를 사용할 수 있다.
reflex 또는 air와 같은 도구를 사용하면 파일이 변경될 때 자동으로 프로그램을 다시 실행할 수 있다.
파일 변경을 감지하고 자동으로 프로그램을 다시 실행해주므로, 개발 중에 매우 유용하다.
Air와 Reflex
Air는 보통 실시간 스트리밍과 관련된 라이브러리로 사용되며, 실시간으로 사용자 인터페이스를 업데이트하고 처리하는 데 도움을 준다. Air는 대개 Go 언어와 함께 사용되며, 실시간 통신에 최적화된 라이브러리로 인식된다
Reflex는 일반적으로 스트리밍보다는 웹 애플리케이션 개발에 사용되는 프레임워크일 수 있다.
예를 들어, Reflex는 리액티브 프로그래밍(reactive programming) 패러다임을 사용하여 UI를 동적으로 관리하고, 상태 변화를 처리하는 데 도움을 준다.
Air는 실시간 스트리밍 환경에서 훨씬 더 많이 사용되는 경향이 있다.
특히 Go 언어를 기반으로 한 시스템에서 자주 사용되며, 네트워크와 실시간 데이터를 처리하는 데 최적화된 구조를 가지고 있기 때문에 스트리밍 환경에서 더 많이 활용된다.
Reflex는 스트리밍보다는 다른 종류의 웹 애플리케이션에서 UI를 동적으로 처리하거나, 상태 관리에 특화된 경우가 많다
< air >
https://github.com/air-verse/air
GitHub - air-verse/air: ☁️ Live reload for Go apps
☁️ Live reload for Go apps. Contribute to air-verse/air development by creating an account on GitHub.
github.com
- live-reloading command line utility for developing Go applications
- Live Reload 오픈소스 air
air 특징
- 컬러 로그 출력
- 빌드 또는 바이너리 명령어 커스텀
- 제외하고 싶은 디렉토리 지정 가능
- air 시작 후 디렉토리 생성 가능
- 더 나은 빌드 프로세스
air 설치
go install github.com/air-verse/air@latest
air 설치 확인
air -v
프로젝트에 air 구성하기
- 프로젝트 루트 디렉토리에서 실행
- 프로젝트 루트 디렉토리에 .air.toml 설정 파일이 생성된다
air init
air 사용
프로젝트 디렉토리에서 다음 명령을 실행하여 파일이 변경될 때마다 프로그램을 다시 실행하도록 설정한다
air
실행한 파일 : C:\HYEON_GitHub\10_Go\Project\project_go\api\generateKey.go
- air가 실행되면 tmp 폴더가 생성되고 라이브 리로딩이 시작된다.
- tmp 폴더에는 빌드된 바이너리가 저장되는 경로이다.
- 파일 수정시 자동으로 반영된 걸 확인할 수 있다.
.air.toml 파일 내용 ⬇️
root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"
[build]
args_bin = []
bin = "tmp\\main.exe"
cmd = "go build -o ./tmp/main.exe ."
delay = 1000
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
exclude_file = []
exclude_regex = ["_test.go"]
exclude_unchanged = false
follow_symlink = false
full_bin = ""
include_dir = []
include_ext = ["go", "tpl", "tmpl", "html"]
include_file = []
kill_delay = "0s"
log = "build-errors.log"
poll = false
poll_interval = 0
post_cmd = []
pre_cmd = []
rerun = false
rerun_delay = 500
send_interrupt = false
stop_on_error = false
[color]
app = ""
build = "yellow"
main = "magenta"
runner = "green"
watcher = "cyan"
[log]
main_only = false
silent = false
time = false
[misc]
clean_on_exit = false
[proxy]
app_port = 0
enabled = false
proxy_port = 0
[screen]
clear_on_rebuild = false
keep_scroll = true
다양한 설정이 가능하다.
[misc]
clean_on_exit = true
로 설정한다면 air가 종료될 때 앞에 생성됐던 tmp 디렉토리가 삭제된다.
설정 적용
air -c .air.toml
더 많은 설정 파일 예시 ⬇️
< reflex >
https://github.com/cespare/reflex
GitHub - cespare/reflex: Run a command when files change
Run a command when files change. Contribute to cespare/reflex development by creating an account on GitHub.
github.com
- automatically running compile/lint/test tasks and for reloading your application when the code changes
- 컴파일/린트/테스트 작업을 자동으로 실행하고 코드가 변경되면 애플리케이션을 다시 로드
- Go 1.13 이상이 설치되어 있어야 한다.
- Go 1.16 이상이 있는 경우 최신 모듈 버전을 직접 다운로드하여 설치할 수 있다.
- Reflex는 Linux와 macOS에서만 테스트되었다.
reflex 설치
- 홈 디렉토리에서 실행
go install github.com/cespare/reflex@latest
reflex 실행
- 프로젝트 디렉토리에서 실행
- reflex를 사용해 Go 애플리케이션을 자동으로 리빌드하고 실행
reflex -r '\.go$' -s -- go run 파일명.go
-r '\.go$' : 이 옵션은 .go 확장자를 가진 파일이 변경될 때마다 리로딩을 트리거한다.
-s : 이 옵션은 리로드된 후 새로운 프로세스가 시작된 후, 이전 프로세스를 종료하도록 설정한다.
-- go run 파일명.go : go run 파일명.go 명령어를 실행하도록 설정한다.
추가 옵션
-d : 파일 변경 사항을 감지하는 시간 간격을 설정할 수 있다. 예를 들어, -d 500ms로 설정하면 500ms 간격으로 파일 변경을 체크한다
-v : Reflex의 실행 로그를 출력한다. 리로딩의 상태를 좀 더 자세히 확인하고 싶을 때 유용하다.
reflex -r '\.go$' -d 500ms -s -v -- go run 파일명.go
refer to
https://github.com/air-verse/air
https://helicopter55.tistory.com/90
'IT > Go' 카테고리의 다른 글
defer (0) | 2025.01.30 |
---|---|
메서드 리시버 (0) | 2025.01.29 |
Java Spring Boot 애플리케이션에서 Go REST API 호출 (0) | 2025.01.22 |
Go 변수, 데이터타입 (0) | 2024.12.26 |
Go 언어 개발 환경 구성 (1) | 2024.12.26 |