
왜 Taskfile을 사용할까?
프로젝트에서 go lang을 쓰고 있는데 Taskfile과 함께 사용하고 있습니다.
왜 Taskfile이 도입되었는지 정리하고 발전시키기 위해 이 글을 작성합니다.
제가 Taskfile을 사용하는 이유는 다음과 같습니다.
- 빌드 환경 세팅
- 리소스파일 (config, log 등)의 설치 및 초기화
- 프로세스 추상화
빌드환경 세팅
고정된 환경에서 개발을 하는 경우에는 고려할 필요가 없지만
여러 명이 다양한 환경에서 개발을 하는 상황에서는 빌드 환경 세팅이 필요합니다.
따라서 라이브러리 의존성을 해결해야하고 라이브러리 레지스트리를 설정해야하는데
Taskfile을 이용하여 간단하게 할 수 있었습니다.
리소스파일 설치 및 초기화
또한 프로젝트를 진행하다보면 go lang으로 빌드되는 바이너리 이외의
리소스 파일이 필요하게되는데 Taskfile을 이용하여 간단하게 설치하고 초기화 할 수 있었습니다.
프로세스 추상화
제가 진행했던 프로젝트는 여러 개의 Repository가 있었고 협업을 해야되는 상황이었습니다.
코드 변경은 자주 하지 않더라도 가끔씩 직접 수정하고 빌드하여 사용할 필요가 있었고
Taskfile을 통하여 다른 언어의 프로젝트라도 동일한 프로세스로 빌드 및 설치를 할 수 있도록 하였습니다.
Taskfile 사용 전 후 비교
사용 전
rm -rf /etc/my_service
rm -rf /var/log/my_service
./script/pkgdep.sh ${registry_url}
go build
mkdir -p /var/log/my_service
mkdir -p /etc/my_service/config
cp ./resources/config /etc/my_service/config
사용 후
task clean
task build Registry_Url=${registry_url}
task install
기본 사용법
설치
https://taskfile.dev
위 링크를 참조하여 go-task를 설치할 수 있습니다. 아래 코드로도 설치가 가능합니다.
sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d
Taskfile 작성
프로젝트의 최상단 위치에 Taskfile.yaml 파일을 만들고 아래와 같은 문법으로 작성합니다.
version: '3'
tasks:
clean:
cmds:
- rm -rf /etc/my_service
- rm -rf /var/log/my_service
build:
args:
RegistryUrl:
cmds:
- ./script/pkgdep.sh {{.RegistryUrl}}
- go build -v -i main.go
install:
cmds:
- mkdir -p /var/log/my_service
- mkdir -p /etc/my_service
- cp ./resources/config /etc/my_service/config
활용
Taskfile에는 위와 같은 기본 사용법 이외에도 다양한 옵션들이 존재합니다. 간단하게 소개하면 아래와 같습니다.
- task 간에 dependency를 설정해서 다른 task를 먼저 실행하기
- 환경변수 설정 및 사용
- task에서 다른 task를 참조해서 사용
- task를 한번만 실행하기
자세한 설명은 아래 링크를 참조하시면 됩니다.
https://taskfile.dev/usage/
참고
'학습 > go' 카테고리의 다른 글
[golang] defer를 이용해서 깔끔하게 rollback하기 (0) | 2024.12.07 |
---|