Makefile 개요
Multi-SaaS Kit의 Makefile 기반 자동화 시스템을 소개합니다.
핵심 원칙
| 원칙 | 설명 |
|---|---|
| 단일 진입점 | 모든 인프라 작업은 make <command> NAME=project 형식 |
| 자동 감지 | 개발/운영 모드, 아키텍처, 권한 문제 자동 감지 |
| 자동 해결 | sudo 권한 있으면 자동 수정, 없으면 안내 표시 |
| 멱등성 | 반복 실행해도 안전 (이미 실행 중이면 skip) |
# 기본 사용법
make up NAME=myproject # 프로젝트 시작
make down NAME=myproject # 프로젝트 중지
make logs NAME=myproject # 로그 확인
# 도움말
make help # 전체 명령어 목록
make process # 운영 프로세스 가이드
16개 모듈 구조
Multi-SaaS Kit의 Makefile은 16개의 .mk 파일로 모듈화되어 있습니다.
ops/makefile/
├── _common.mk # 공통 변수, 매크로, 색상 정의
├── _help.mk # help, process 메뉴
├── docker.mk # up, down, restart, status, logs
├── shell.mk # shell, shell-db, shell-redis
├── database.mk # migrate, seed, fresh
├── build.mk # create, install, copy-env, setup
├── deploy.mk # live, release, deploy, rollback
├── backup.mk # backup, restore, backup-list
├── secrets.mk # encrypt, decrypt (GPG)
├── utils.mk # health, artisan, cache-clear, tinker, queue
├── test.mk # test, lint
├── cleanup.mk # clean, reset
├── permissions.mk # 권한 체크 및 자동 수정
├── info.mk # list, ports, status
├── claude.mk # Claude Code 연동
└── tmux.mk # tmux 메모 표시
모듈별 역할
| 카테고리 | 모듈 | 주요 명령어 | 설명 |
|---|---|---|---|
| 기반 | _common.mk | - | 공통 변수, 매크로 정의 |
_help.mk | help, process | 도움말 및 가이드 출력 | |
| Docker | docker.mk | up, down, restart, logs | 컨테이너 생명주기 관리 |
shell.mk | shell, shell-db | 컨테이너 접속 | |
| 데이터 | database.mk | migrate, seed, fresh | DB 마이그레이션 |
backup.mk | backup, restore | 백업/복원 | |
| 빌드 | build.mk | create, install | 프로젝트 생성/설치 |
| 배포 | deploy.mk | live, release, rollback | 릴리즈/배포 |
| 보안 | secrets.mk | encrypt, decrypt | GPG 암호화 |
permissions.mk | - | 권한 자동 수정 | |
| 유틸 | utils.mk | artisan, tinker, queue | Laravel 유틸리티 |
test.mk | test, lint | 테스트 실행 | |
info.mk | list, ports | 정보 조회 | |
cleanup.mk | clean, reset | 정리 |
핵심 변수
Makefile에서 사용하는 주요 변수입니다.
| 변수 | 설명 | 예시 값 |
|---|---|---|
NAME | 프로젝트 이름 (필수) | myproject, _portal |
SUB | 특정 서비스만 실행 (선택) | portal-docs |
ARCH | 자동 감지된 아키텍처 | amd64, arm64 |
PLATFORM_NAME | 플랫폼 이름 (.env에서 로드) | msk (기본값, 소문자 권장) |
자동 감지 변수
# 아키텍처 자동 감지 (x86_64 → amd64, aarch64 → arm64)
ARCH := $(shell uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')
# 플랫폼 이름 (.env에서 로드, 없으면 기본값 msk)
PLATFORM_NAME := $(shell grep -E '^PLATFORM_NAME=' .env | cut -d= -f2)
개발 모드 vs 운영 모드
Makefile은 live/ 심볼릭 링크 존재 여부로 모드를 자동 판별합니다.
live/{project} 심볼릭 링크 존재?
├── 없음 → 개발 모드 (workspace/ 직접 사용)
└── 있음 → 운영 모드 (releases/ 스냅샷 사용)
개발 모드
# workspace에서 직접 실행
make up NAME=myproject
# 코드 수정 후 재시작만 하면 즉시 반영
make restart NAME=myproject
운영 모드
# 1. 릴리즈 생성 + live 심볼릭 링크 설정
make live NAME=myproject
# 2. live에서 실행
make up NAME=myproject
# 코드 변경 후
make live NAME=myproject # 새 릴리즈 생성
make restart NAME=myproject # 재시작
# 롤백
make rollback NAME=myproject