Makefile로 나만의 명령어를 만들어보자! (간단 사용법과 예시)
Makefile 왜 써야 해?
개발 환경(dev, stage, qa, production 등)에 따라 실행해야 할 스크립트가 다를 수 있다.
이런 경우 각각의 명령어와 스크립트 이름을 외우지 않으면 적합한 스크립트를 찾아 실행하기가 어렵다. 개발에 집중할 시간도 부족한데 명령어 메모를 이리저리 검색하는 것은 시간낭비처럼 느껴질 것이다.
Makefile을 이용하면 이런 문제를 쉽게 해결할 수 있다. Makefile은 ‘make [target이름]’ 라는 간단한 명령어만으로 미리 세팅해둔 스크립트들을 실행할 수 있도록 도와준다.
이번 글에서는 누구나 쉽게 따라 할 수 있는 Makefile 간단 사용법을 설명하겠다.
사용법
적용하고 싶은 디렉터리로 이동해 터미널 shell 에서 touch 명령어로 Makefile을 생성한다. (코드에디터로 생성해도 상관없다)
$ touch Makefile # touch는 파일을 생성하는 명령어이다.
코드에디터 혹은 vim을 사용하여 Makefile 파일 내에 'test' 라는 [target이름]을 입력한다. 그리고 target이 수행할 명령어를 입력한다.
# Makefile
test: # 여기에 작성한 'test'는 target 이름을 의미하며 끝에 ':' 을 붙인다.
echo 오히려 좋아. # echo는 문자열을 컴퓨터 터미널에 출력하는 명령어이다.
이제 다시 터미널로 돌아와 shell 에서 make test 명령을 입력해보자!
$ make test
>>> echo 오히려 좋아.
>>> 오히려 좋아.
Makefile에 설정해둔 echo 명령이 잘 수행한 것을 볼 수 있다!
응용
Makefile의 동작원리를 알았으니 이제 docker-compose 같은 스크립트도 단어 하나만으로 실행시킬 수 있다. 뿐만 아니라 함께 수행해야 하는 각종 명령어와 스크립트들을 하나의 묶음으로 사용할 수도 있다. 아래는 예시다.
# Makefile
# test 실행 target 예시
test:
echo 테스트를 실행합니다.
pytest
echo 테스트를 종료합니다.
test-cov:
echo 테스트 커버리지를 실행합니다.
pytest --cov
echo 테스트 커버리지를 종료합니다.
# dev 환경 target 예시
dev-up:
docker-compose -f docker-compose.dev.yml up
dev-down:
docker-compose -f docker-compose.dev.yml down
나의 경우 git commit과 push, pull을 하나의 명령어로 처리할 때 사용하기도 한다.
# Makefile
tistory-upload:
git add .
git commit -m "upload"
git push origin main
sleep 60 # 60초 대기 명령어
git pull origin main # 다시 pull을 받는 이유는 원격 저장소 actions가 파일을 변경하기 때문이다.
만약 명령어들이 너무 많아 복잡해진다면, 명령어들을 따로 sh 스크립트에 적어둔다음 해당 스크립트를 Makefile에 기재하는 방법도 있다.
마치며
이 글에서 설명한 것과 같이 Makefile은 복잡한 명령어들을 하나의 명령어로 모아줄 수 있다. (객체지향의 ‘추상화’와 유사) 명령어들을 Makefile로 단순화함으로써 우리는 명령어를 암기할 필요없이 하고 싶은 개발에 집중할 수 있다.
Makefile은 내가 설명한 것 이상으로 다양하게 활용할 수 있다. 더 자세한 사용법이 궁금하다면 아래 레퍼런스를 참고하기 바란다.
레퍼런스