정지용
기술스택 목록
DevOps

Make

프로젝트 2에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

파일 의존성과 규칙을 기반으로 빌드·반복 작업을 자동화하는 태스크 러너

Make는 Makefile에 정의된 규칙에 따라 파일 간 의존 관계를 파악하고, 변경된 부분만 다시 처리해 빌드·테스트·배포 같은 반복 작업을 자동화하는 도구다. 원래는 C 프로젝트의 컴파일 순서와 재빌드 범위를 관리하기 위해 만들어졌지만, 지금은 언어나 플랫폼에 상관없이 여러 단계로 이루어진 커맨드를 하나의 명령으로 묶어 실행하는 범용 태스크 러너로도 널리 쓰인다. 모노레포처럼 여러 패키지에서 반복되는 build, test, lint, release 같은 명령을 표준화된 인터페이스로 감싸는 데 자주 사용된다.

이럴 때 사용합니다

  • 언어·도구가 다른 여러 하위 프로젝트의 명령을 하나의 인터페이스로 통일하고 싶을 때
  • 빌드·테스트·릴리즈 등 반복되는 커맨드를 짧고 기억하기 쉬운 이름으로 감싸고 싶을 때
  • 별도 런타임 설치 없이 대부분의 유닉스 계열 환경에 기본 내장된 도구를 쓰고 싶을 때
  • 파일 변경 여부에 따라 필요한 작업만 선택적으로 재실행하고 싶을 때

핵심 개념

Makefile
Make가 읽어들이는 설정 파일로, 어떤 대상을 어떤 규칙으로 만들지 정의한다.
target
실행하고자 하는 작업의 이름으로, 파일명일 수도 있고 build·test처럼 논리적인 이름일 수도 있다.
recipe
target을 만들기 위해 실행되는 실제 셸 명령어들의 목록이다.
prerequisite (dependency)
target을 실행하기 전에 먼저 존재하거나 실행되어야 하는 다른 target이나 파일이다.
phony target
실제 파일을 생성하지 않고 명령 실행 자체가 목적인 target으로, .PHONY로 선언해 파일 존재 여부와 무관하게 항상 실행되게 한다.
incremental build
파일의 수정 시각을 비교해 변경된 대상만 다시 처리함으로써 불필요한 재작업을 줄이는 동작 방식이다.

기본 Makefile 예시

make test를 실행하면 build target을 먼저 수행한 뒤 테스트를 실행하며, make clean으로 산출물을 정리할 수 있다.

예시
.PHONY: build test clean

build:
	echo "Building project..."
	go build -o bin/app ./...

test: build
	echo "Running tests..."
	go test ./...

clean:
	rm -rf bin

처음 쓸 때 흔한 함정

  • recipe의 각 명령줄은 스페이스가 아니라 반드시 탭(Tab) 문자로 들여써야 한다.
  • 파일 이름과 같은 target을 phony로 선언하지 않으면 해당 파일이 존재할 때 명령이 실행되지 않는다.

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.