Chapter 1: Live Reloading(실시간 다시로드) 소개

실시간 다시로드란?

실시간 다시로드는 개발 환경이 코드의 변경을 감지하고 응용 프로그램을 자동으로 다시로드할 수 있는 기능입니다. 파일을 저장하면 실시간 다시로드 도구가 변경을 감지하여 응용 프로그램을 다시 빌드하고 다시 시작합니다. 이렇게 함으로써 서버를 수동으로 중지하고 응용 프로그램을 다시 빌드한 다음 변경 후 다시 시작하는 수고를 덜 수 있습니다.

Go 개발에 대한 실시간 다시로드의 장점

실시간 다시로드는 개발 프로세스를 크게 가속화할 수 있습니다. 코드를 컴파일한 후 실행하는 것에 익숙한 Go 개발자들에게는 실시간 다시로드가 개선된 워크플로우를 제공하여 즉각적인 피드백을 얻을 수 있게 됩니다. 이에 따른 이점은 다음과 같습니다:

  1. 생산성 향상: 수동으로 다시 빌드할 필요가 없기 때문에 개발자들은 매듭 없이 작업할 수 있습니다.
  2. 시간 절약: 실시간 다시로드를 통해 코드 변경이 실행 중인 응용 프로그램에 반영되는 시간이 단축됩니다.
  3. 에러 감지: 즉각적인 다시 빌드와 다시 시작으로 인해 개발자들은 에러를 더 빨리 감지하고 수정할 수 있습니다.
  4. 워크플로우의 일원화: 개발 프로세스에 매끄럽고 효율적으로 통합되어 작업을 더욱 원활하게 합니다.

Chapter 2: Air란?

Air는 Go 애플리케이션에 대한 실시간 다시로드 기능을 제공하기 위해 설계된 명령줄 유틸리티입니다. 소스 코드의 변경을 모니터링하고 자동으로 Go 애플리케이션을 다시 빌드하고 다시 시작합니다. 이를 통해 기능 개발에 더 많은 초점을 맞출 수 있고 반복적인 작업을 줄일 수 있습니다.

기능

Air는 현대적인 Go 개발 환경에 적합한 다양한 기능을 제공합니다:

  • 자동 다시 빌드: 파일 변경을 감지하고 다시 빌드를 트리거합니다.
  • 사용자 정의 빌드 명령어: 프로젝트에 필요한 빌드 명령어를 사용자 정의할 수 있습니다.
  • 디렉터리 제외: 감시에서 제외할 디렉토리를 지정할 수 있습니다.
  • 새로운 디렉터리 지원: Air가 시작된 후 추가된 새로운 디렉터리도 감시할 수 있습니다.
  • 색상 및 가독성 있는 로그: 출력 로그의 가독성을 색상 코딩으로 높일 수 있습니다.
  • CLI 아규먼트: 명령줄 아규먼트를 통해 구성 필드를 빠르게 조정할 수 있습니다.

Air의 전체 기능과 기능에 대한 내용은 개발자가 제공한 컨텍스트를 참조하십시오.

Chapter 3: air 설치하기

3.1 go install을 통한 설치

Go 도구 체인 버전 1.18 이상을 사용하여 Air를 설치하려면 다음 명령을 실행합니다:

go install github.com/cosmtrek/air@latest

이렇게 하면 airGOPATH/bin에 설치됩니다.

3.2 install.sh 스크립트 사용하기

다른 방법으로는 제공된 설치 스크립트를 통해 설치하는 것입니다:

curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

설치 후 버전을 확인하려면 다음을 실행합니다:

air -v

3.3 특별한 설치 방법 (Docker/Podman 및 사용자 정의 경로)

Docker나 Podman을 사용하는 경우 Air를 포함하는 간소화된 방법이 있습니다:

docker run -it --rm \
    -w "/path/to/project" \
    -v $(pwd):/path/to/project \
    -p port:port \
    cosmtrek/air

/path/to/project를 프로젝트의 경로로, port:port를 원하는 포트 매핑으로 교체합니다.

또는 특정 경로에 설치할 경우:

curl -sSfL https://goblin.run/github.com/cosmtrek/air | PREFIX=/custom/path sh

Chapter 4: air를 Go 프로젝트에 맞게 구성하기

4.1 .air.toml 구성 이해하기

.air.toml은 Air의 구성 파일로, 빌드 프로세스, 디렉터리 감시 및 로그 출력과 관련된 설정을 지정할 수 있습니다. 주요 섹션에 대한 간략한 개요는 다음과 같습니다:

  • root: Air의 작업 디렉토리를 설정합니다.
  • build: 빌드 관련 설정을 포함하며, 빌드 전/후 실행할 명령어와 주요 빌드 명령어를 포함합니다.
  • tmp_dir: 임시 빌드 파일이 저장되는 디렉토리를 설정합니다.
  • log: 로그 파일 설정을 구성합니다.
  • color: 로그 출력의 각 부분의 색상을 사용자 정의합니다.

4.2 설정 파일 생성 및 수정

기본 .air.toml 설정 파일을 생성하려면 다음 명령을 실행하십시오:

air init

이 명령은 현재 디렉터리에 기본 설정이 포함된 .air.toml 파일을 생성합니다. 이후 프로젝트 요구 사항에 맞게 수정할 수 있습니다. 참조를 위해 컨텍스트에서 제공된 air_example.toml을 확인할 수 있습니다.

4.3 CLI 인수로 구성 덮어쓰기

빠른 테스트나 작은 변경을 위해 .air.toml의 설정을 CLI 인수로 덮어쓸 수 있습니다. 예를 들어:

air --build.cmd "go build -o myapp" --build.bin "./myapp"

이 유연성을 통해 구성 파일을 변경하지 않고 Air의 동작을 쉽게 사용자 정의할 수 있습니다.

5장: 개발 환경에서 air 실행하기

6.1 프로젝트에서 air 시작하기

프로젝트에서 air를 시작하려면 터미널에서 프로젝트의 루트 디렉터리로 이동하여 air 명령을 실행하십시오. .air.toml 구성 파일이 있으면 air가 자동으로 사용하며 그렇지 않으면 기본 설정을 사용합니다.

cd /경로/당신의_프로젝트
air

: air 실행 파일에 권한 문제가 발생할 경우 실행 권한이 충분한지 확인하십시오(chmod +x $(go env GOPATH)/bin/air).

6.2 air로 빌드 및 실행 명령 사용자 정의하기

air가 사용하는 빌드 및 실행 명령을 .air.toml 구성 파일의 [build] 섹션을 수정하여 사용자 정의할 수 있습니다. 예를 들어, 빌드 명령을 변경하고 다른 이진 파일을 지정하려면:

[build]
cmd = "go build -o ./tmp/my-custom-binary ."
bin = "tmp/my-custom-binary"

더 복잡한 빌드 요구 사항의 경우, 구성 파일의 pre_cmdpost_cmd 배열을 사용하여 빌드 전후에 명령을 실행할 수 있습니다.

팁: air 구성의 완전한 예제

6.3 디렉터리 제외 및 변경 감시

air를 사용하여 변경 감시 대상에서 제외할 디렉터리를 설정할 수 있으며, 이는 빌드를 트리거할 필요가 없는 에셋이나 의존성을 포함하는 디렉터리에 유용합니다.

이를 구성하려면 .air.tomlexclude_dir 필드를 업데이트하십시오:

[build]
exclude_dir = ["assets", "tmp", "vendor", "node_modules"]

include_dir를 사용하여 추가 디렉터리를 포함하거나 include_ext로 특정 파일 확장자를 감시할 수도 있습니다.

6장: 고급 사용법

6.1 Docker 컨테이너에서 air 설정하기

Docker 컨테이너 내에서 air를 사용하면 팀 단위 작업 시 개발 환경을 간소화할 수 있습니다. air를 Docker 환경에 포함하려면 Dockerfile을 업데이트하여 air를 설치하고 .air.toml을 컨테이너로 복사하십시오:

FROM golang:1.18-alpine AS builder

RUN go install github.com/cosmtrek/air@latest

WORKDIR /app

COPY go.mod .
COPY go.sum .
RUN go mod download

COPY . .

CMD ["air", "-c", ".air.toml"]

6.3 Docker-compose 환경에서 air 사용하기

docker-compose로 관리되는 서비스에 air를 통합하려면 docker-compose.yaml 파일에 서비스를 정의하십시오:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "808:808"
    volumes:
      - .:/app
    command: ["air", "-c", ".air.toml"]

volumes 지시문이 프로젝트 디렉터리를 컨테이너의 작업 디렉터리에 올바르게 매핑하도록되어 있는지 확인하여 air가 파일 변경을 감지할 수 있도록 합니다.

7장: 일반 문제 해결 및 FAQ

7.1 command not found: air 수정하기

command not found: air 오류가 발생하면 일반적으로 시스템의 PATHair 실행 파일이 없음을 의미합니다. 이를 해결하려면 Go 이진 파일 경로를 PATH 환경 변수에 추가하십시오:

export PATH=$PATH:$(go env GOPATH)/bin

7.2 WSL 환경에서의 문제점

Windows Subsystem for Linux (WSL) 환경에서는 .air.toml 파일에서 특수 문자를 이스케이프해야 합니다. 예를 들어 파일 경로에서 백슬래시를 이스케이프하려면 \\를 사용하십시오.

7.3 이진 파일을 실행하지 않고 핫 컴파일링하는 팁

만약 air가 Go 애플리케이션을 실행하지 않고 컴파일하도록 하려면, .air.toml[build] 섹션의 cmd를 Unix 기반 시스템에서의 /bin/true와 같은 아무 동작을 하지 않는 명령으로 설정하십시오:

[build]
cmd = "/bin/true"

이렇게 하면 air는 여전히 파일 변경을 감지하고 빌드 프로세스를 트리거하지만 결과 이진 파일을 실행하지는 않습니다.