iTerm2 단축키로 터미널 작업 자동화하는 방법: 매크로처럼 활용하기

iTerm2에서 반복되는 터미널 작업을 키보드 한 번으로 실행하고 싶은데 방법을 모르겠다면, 이 글이 도움이 될 거예요. iTerm2는 공식적인 매크로 기능은 없지만, 단축키 설정과 스크립트를 조합하면 강력한 자동화 도구로 변신해요.


iTerm2 로고와 소개 문구가 표시된 공식 브랜딩 이미지


기본 단축키 설정으로 명령어 자동 실행하기


iTerm2의 환경설정에서 키보드 단축키에 명령어를 할당하는 게 가장 기본적인 방법이에요. Preferences > Profiles > Keys 탭으로 이동한 후 Key Mappings에서 설정할 수 있어요.


# 예시: 프로젝트 디렉터리로 이동 후 개발 서버 실행
cd ~/projects/myapp && npm run dev


위 명령어를 매번 입력하기 번거롭다면, ⌘+Shift+D 같은 단축키에 할당해보세요. + 버튼을 클릭하고 Keyboard Shortcut을 설정한 뒤, Action에서 Send Text를 선택하고 명령어를 입력하면 돼요.


셸 함수로 복잡한 작업 묶어서 실행하기


자주 사용하는 여러 명령어를 하나로 묶고 싶다면 셸 함수를 만드는 게 효과적이에요. .zshrc 파일을 열어서 함수를 추가해보세요.


# ~/.zshrc 파일에 추가
function dev() {
    # 프로젝트 디렉터리로 이동
    cd ~/projects/$1
    
    # git 상태 확인
    echo "📊 Git Status:"
    git status
    
    # 의존성 설치 및 개발 서버 실행
    echo "🚀 Starting development server..."
    npm install && npm run dev
}

# 사용법: dev myproject


이렇게 만든 함수를 iTerm2 단축키와 연결하면 더욱 편리해요. Send Text 액션에 dev myproject 를 입력하면 단축키 하나로 전체 개발 환경을 시작할 수 있어요.


Python API로 고급 자동화 구현하기


iTerm2의 Python API를 사용하면 창 분할, 탭 생성, 여러 명령어 순차 실행 같은 복잡한 작업도 자동화할 수 있어요. Scripts 메뉴에서 Manage > New Python Script를 선택해 시작해요.


#!/usr/bin/env python3
# ~/Library/Application Support/iTerm2/Scripts/dev_setup.py

import iterm2
import asyncio

async def main(connection):
    app = await iterm2.async_get_app(connection)
    window = app.current_terminal_window
    
    if window is not None:
        # 새 탭 생성
        tab = await window.async_create_tab()
        session = tab.current_session
        
        # 프로젝트 디렉터리로 이동
        await session.async_send_text("cd ~/projects/myapp\n")
        
        # 화면을 세로로 분할
        session2 = await session.async_split_pane(vertical=True)
        
        # 왼쪽: 개발 서버 실행
        await session.async_send_text("npm run dev\n")
        
        # 오른쪽: 로그 모니터링
        await session2.async_send_text("tail -f logs/app.log\n")

# 스크립트 실행
iterm2.run_until_complete(main)


이 스크립트를 저장하고 Scripts 메뉴에서 실행하거나, 단축키로 트리거할 수 있어요. 한 번의 클릭으로 개발 환경 전체를 자동 구성하는 거죠.


자주 쓰는 명령어 템플릿 만들기


Docker 명령어나 kubectl 같은 복잡한 명령어를 템플릿화하면 실수를 줄이고 시간을 절약할 수 있어요.


# alias로 간단한 템플릿 만들기 (~/.zshrc에 추가)
alias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'
alias dexec='docker exec -it $(docker ps -q | head -1) /bin/bash'
alias kpods='kubectl get pods -o wide'
alias klogs='kubectl logs -f $(kubectl get pods | grep Running | head -1 | cut -d" " -f1)'

# 함수로 파라미터를 받는 템플릿 만들기
function dssh() {
    # Docker 컨테이너에 SSH처럼 접속
    docker exec -it $1 /bin/bash
}

function kexec() {
    # Kubernetes Pod에 접속
    kubectl exec -it $1 -- /bin/bash
}


Send Hex Code로 특수 키 조합 전송하기


일반적인 텍스트가 아닌 특수 키 조합을 보내야 할 때는 Send Hex Code를 활용해요. 예를 들어 Ctrl+C를 자동으로 보내고 싶다면 hex code 0x03을 전송하면 돼요.


# iTerm2 Key Mappings 설정 예시
# Action: Send Hex Code
# 0x03  - Ctrl+C (프로세스 중단)
# 0x04  - Ctrl+D (세션 종료)
# 0x1A  - Ctrl+Z (프로세스 일시정지)
# 0x0C  - Ctrl+L (화면 클리어)


이런 설정을 활용하면 현재 실행 중인 프로세스를 중단하고 새 작업을 시작하는 매크로를 만들 수 있어요.


Paste History와 조합한 빠른 명령어 실행


자주 사용하는 긴 명령어는 Paste History에 저장해두고 단축키로 불러오는 방법도 있어요. ⌘+Shift+H로 Paste History를 열고, 자주 쓰는 명령어를 선택해 실행해요.


# 복잡한 git 명령어 예시
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

# 시스템 모니터링 명령어
watch -n 1 'ps aux | head -20 && echo && df -h && echo && free -h'

# 네트워크 디버깅 명령어  
netstat -an | grep LISTEN | grep -v localhost


이런 명령어들을 Paste History에 저장해두면 복잡한 옵션을 외울 필요 없이 빠르게 실행할 수 있어요.


프로파일별로 다른 매크로 세트 구성하기


작업 성격에 따라 다른 매크로 세트가 필요하다면 프로파일을 여러 개 만들어 사용해요. 개발용, 서버 관리용, 데이터 분석용 프로파일을 각각 만들고 전환하며 사용하는 거예요.


# 개발용 프로파일 초기 명령어
export ENV=development
source ~/.dev_aliases
echo "🚀 Development Profile Loaded"

# 서버 관리용 프로파일 초기 명령어  
export ENV=production
source ~/.server_aliases
echo "🔧 Server Management Profile Loaded"


각 프로파일의 General 탭에서 Send text at start에 위 명령어를 설정하면, 프로파일을 열 때마다 자동으로 환경이 구성돼요.


실제 활용 시나리오별 매크로 예제


매일 반복하는 작업들을 실제로 어떻게 자동화하는지 구체적인 예제를 살펴볼게요.


# 아침 업무 시작 매크로
function morning() {
    # Slack 상태 업데이트
    curl -X POST https://slack.com/api/users.profile.set \
        -H "Authorization: Bearer $SLACK_TOKEN" \
        -d "profile={\"status_text\":\"Working\",\"status_emoji\":\":computer:\"}"
    
    # 오늘의 일정 확인
    gcalcli agenda
    
    # Git 저장소들 업데이트
    for repo in ~/projects/*; do
        if [ -d "$repo/.git" ]; then
            echo "Updating $(basename $repo)..."
            cd "$repo" && git pull
        fi
    done
    
    # 도커 컨테이너 시작
    docker-compose up -d
}

# 코드 리뷰 준비 매크로
function review() {
    # 현재 브랜치 푸시
    git push origin HEAD
    
    # PR 생성 페이지 열기
    open "https://github.com/$(git remote -v | grep origin | head -1 | cut -d: -f2 | cut -d. -f1)/compare/$(git branch --show-current)"
    
    # 변경사항 요약
    git log --oneline -5
    git diff --stat origin/main
}


iTerm2의 단축키 기능은 단순해 보이지만, 창의적으로 조합하면 강력한 생산성 도구가 돼요. 처음에는 간단한 명령어 하나부터 시작해서, 점차 복잡한 워크플로우를 자동화해 나가는 게 좋아요. 매크로를 만들 때는 자주 반복하는 작업이 무엇인지 먼저 파악하고, 그 작업을 어떻게 단순화할 수 있을지 고민해보세요.


창 정렬에 10초도 아까운 개발자를 위한 Hammerspoon 자동화 레시피