DEV Community

Cover image for 최고의 경량 CLI 개발 도구
Rihpig
Rihpig

Posted on • Originally published at apidog.com

최고의 경량 CLI 개발 도구

백엔드 개발자의 하루 대부분은 엔드포인트 호출, JSON 확인, 수정, 재실행 같은 짧고 반복적인 작업으로 구성됩니다. 이때 무거운 GUI를 매번 열면 실제 구현 시간보다 로딩과 화면 전환에 더 많은 시간이 들 수 있습니다.

지금 Apidog 사용해 보기

경량 CLI 도구는 이 흐름을 단순화합니다. 단일 바이너리나 npx 패키지로 빠르게 실행하고, 별도 설정 마법사 없이 한 가지 작업에 집중합니다. 셸 스크립트와 CI에 연결하면 요청 전송, JSON 파싱, 로컬 포트 공개, 테스트 실행 같은 반복 작업을 터미널에서 바로 처리할 수 있습니다.

이 글에서는 백엔드 개발자의 PATH에 추가할 만한 10가지 도구를 소개합니다. 각 도구는 바로 실행해 볼 수 있는 명령어와 함께 다룹니다. 더 큰 API 개발 흐름은 API 개발 가이드를 참고하세요.

CLI 도구를 개발용으로 “경량”으로 만드는 요소

경량 도구는 기능 수가 아니라 설치 부담과 실행 마찰로 판단합니다. 도구를 선택할 때는 다음 네 가지를 확인하세요.

  • 설치 형태: 단일 정적 바이너리나 작은 npx 패키지는 런타임과 프로젝트 설정이 필요한 도구보다 빠르게 도입할 수 있습니다.
  • 시작 속도: 반복 호출하는 도구일수록 콜드 스타트 시간이 중요합니다. Rust와 Go 바이너리는 일반적으로 빠르게 시작합니다.
  • 첫 결과까지의 단계: 계정, 대시보드, 프로젝트 파일 없이도 유용한 기본 동작을 제공해야 합니다.
  • 조합 가능성: stdin을 읽고 stdout에 쓰며, 실패 시 올바른 종료 코드를 반환해야 파이프라인과 CI에서 활용할 수 있습니다.

아래 도구는 작은 단일 목적 도구부터 프로젝트 단위 API 작업 도구까지 순서대로 구성했습니다. curl은 대부분의 환경에 이미 설치되어 있습니다.

1. curl

curl은 HTTP 요청을 스크립트와 CI에서 재현 가능하게 만들 때 가장 기본이 되는 도구입니다. 대부분의 머신에 기본 설치되어 있고, 필요한 요청을 정확하게 구성할 수 있습니다.

curl -s -X POST https://api.github.com/repos/curl/curl/issues \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"Test issue"}'
Enter fullscreen mode Exit fullscreen mode

실무에서는 다음 옵션을 함께 사용하세요.

# 헤더와 본문 함께 확인
curl -i https://api.example.com/health

# 상태 코드만 출력
curl -s -o /dev/null -w '%{http_code}\n' https://api.example.com/health

# 4xx, 5xx 응답을 CI 실패로 처리
curl --fail --silent https://api.example.com/health
Enter fullscreen mode Exit fullscreen mode
  • 가장 적합한 용도: 셸 스크립트, CI 상태 확인, 팀에 그대로 공유할 HTTP 요청
  • 한계: 플래그 문법과 JSON 본문 작성이 다소 장황합니다. 대화형 탐색에는 HTTPie나 xh가 더 편할 수 있습니다.

2. HTTPie

HTTPie는 사람이 직접 요청을 작성하고 응답을 읽기 쉽게 만든 HTTP 클라이언트입니다. JSON 요청을 기본으로 다루며, 출력도 보기 좋게 정리됩니다.

http POST httpbin.org/post name=apidog role=api-tool active:=true
Enter fullscreen mode Exit fullscreen mode

위 명령은 다음 JSON을 전송합니다.

{
  "name": "apidog",
  "role": "api-tool",
  "active": true
}
Enter fullscreen mode Exit fullscreen mode

문법은 다음처럼 사용합니다.

# 문자열 값
http POST api.example.com/users name=wanda

# JSON 원시 값
http POST api.example.com/users age:=24 active:=true

# 헤더 추가
http GET api.example.com/users Authorization:"Bearer $TOKEN"
Enter fullscreen mode Exit fullscreen mode
  • 가장 적합한 용도: 응답 가독성이 중요한 대화형 API 탐색
  • 한계: Python 패키지이므로 네이티브 바이너리보다 시작이 느릴 수 있으며 Python 환경이 필요합니다.

3. xh

xh는 HTTPie와 비슷한 요청 문법을 제공하는 Rust 기반 HTTP 클라이언트입니다. name=value, key:=value 문법을 그대로 사용할 수 있으면서 단일 바이너리 형태로 배포됩니다.

xh POST httpbin.org/post name=apidog age:=24
Enter fullscreen mode Exit fullscreen mode

HTTPie와 비슷한 방식으로 사용할 수 있습니다.

xh GET https://api.example.com/users \
  Authorization:"Bearer $TOKEN"

xh POST https://api.example.com/users \
  name=apidog \
  active:=true
Enter fullscreen mode Exit fullscreen mode

xh GitHub 프로젝트에서 Linux, macOS, Windows용 사전 빌드 바이너리를 확인할 수 있습니다.

  • 가장 적합한 용도: HTTPie 문법을 유지하면서 컨테이너, 스크립트, CI에 빠른 네이티브 도구를 추가하려는 경우
  • 한계: 일반적인 HTTPie 작업은 지원하지만 모든 플러그인을 지원하지는 않습니다.

4. jq

jq는 HTTP 응답 JSON에서 필요한 값만 추출하거나 변환할 때 사용하는 명령줄 JSON 프로세서입니다. curl이나 xh와 함께 사용하면 API 응답을 스크립트 입력으로 바꿀 수 있습니다.

curl -s https://api.github.com/repos/stedolan/jq | jq '.stargazers_count'
Enter fullscreen mode Exit fullscreen mode

자주 쓰는 패턴은 다음과 같습니다.

# 배열에서 이름만 추출
curl -s https://api.example.com/users | jq '.items[] | .name'

# 조건에 맞는 항목 필터링
curl -s https://api.example.com/users | jq '.items[] | select(.active)'

# 셸 변수에 넣기 좋은 원시 문자열 출력
USER_ID=$(curl -s https://api.example.com/me | jq -r '.id')
Enter fullscreen mode Exit fullscreen mode
  • 가장 적합한 용도: 스크립트와 CI에서 JSON 필드 추출, 필터링, 변환
  • 한계: 복잡한 중첩 변환은 쿼리 문법을 익혀야 읽기 쉬워집니다.

5. gh (GitHub CLI)

gh는 GitHub 작업을 브라우저 대신 터미널에서 처리할 수 있게 해주는 공식 CLI입니다. 한 번 로그인하면 PR, 이슈, 릴리스, Actions 작업을 명령으로 자동화할 수 있습니다.

gh pr create --title "Add rate limiting" --body "Closes #42" --base main
Enter fullscreen mode Exit fullscreen mode

초기 인증 후 자주 쓰는 명령은 다음과 같습니다.

gh auth login

# 현재 브랜치의 PR 검사 상태 확인
gh pr checks

# GitHub Actions 워크플로 실시간 추적
gh run watch

# 래핑되지 않은 GitHub API 호출
gh api repos/{owner}/{repo}/issues
Enter fullscreen mode Exit fullscreen mode
  • 가장 적합한 용도: CI에서 PR 생성, 릴리스 자동화, GitHub API 스크립팅
  • 한계: GitHub 전용입니다. GitLab이나 Bitbucket 환경에는 적합하지 않습니다.

6. ngrok

ngrok은 로컬 포트를 외부에서 접근 가능한 공개 URL로 연결합니다. 결제 웹훅, Git 웹훅, OAuth 콜백처럼 외부 서비스가 로컬 개발 서버를 호출해야 할 때 유용합니다.

ngrok http 8080
Enter fullscreen mode Exit fullscreen mode

실행하면 공개 https:// URL이 생성되고, 해당 요청은 로컬 localhost:8080으로 전달됩니다.

웹훅을 디버깅할 때는 로컬 트래픽 검사기도 활용하세요.

http://127.0.0.1:4040
Enter fullscreen mode Exit fullscreen mode

이 주소에서 수신한 요청을 확인하고 재생할 수 있습니다.

  • 가장 적합한 용도: 웹훅 개발, 로컬 작업 공유, 타사 콜백 테스트
  • 한계: 무료 등급이 있는 상업 서비스입니다. 무료 플랜에서는 세션마다 URL이 바뀌고 속도 제한이 적용됩니다.

7. mkcert

mkcert는 브라우저가 신뢰하는 로컬 HTTPS 인증서를 빠르게 생성합니다. 로컬 인증 기관을 만들고 시스템 신뢰 저장소에 등록하므로, 자체 서명 인증서 경고 없이 HTTPS 환경을 테스트할 수 있습니다.

mkcert -install
mkcert localhost 127.0.0.1 myapp.local
Enter fullscreen mode Exit fullscreen mode

첫 번째 명령은 로컬 CA를 한 번 설치합니다. 두 번째 명령은 지정한 호스트용 인증서와 키를 생성합니다.

예를 들어 로컬 서버에 인증서를 연결할 수 있습니다.

# 생성된 인증서 파일을 개발 서버 설정에 지정
https://localhost
https://myapp.local
Enter fullscreen mode Exit fullscreen mode

OAuth 리다이렉트, Secure 쿠키, HTTPS 전용 API 동작을 로컬에서 확인할 때 특히 유용합니다.

  • 가장 적합한 용도: 프로덕션과 유사한 신뢰 가능한 로컬 HTTPS 환경 구성
  • 한계: 개발 환경 전용입니다. mkcert 인증서를 프로덕션에 사용하면 안 되며, 생성된 루트 CA 키도 안전하게 관리해야 합니다.

8. watchexec

watchexec은 파일이 변경될 때 지정한 명령을 다시 실행합니다. 프레임워크별 감시 도구가 없거나, 여러 언어 프로젝트에서 하나의 감시 명령을 통일하고 싶을 때 편리합니다.

watchexec -e py -r 'pytest tests/'
Enter fullscreen mode Exit fullscreen mode
  • -e py: Python 파일 변경만 감지합니다.
  • -r: 기존 프로세스를 종료한 뒤 새 프로세스를 실행합니다.

다른 스택에도 같은 방식으로 적용할 수 있습니다.

# Go 서버 재시작
watchexec -r 'go run .'

# JavaScript 테스트 재실행
watchexec 'npm test'

# 특정 디렉터리 감시
watchexec -w src -r 'cargo run'
Enter fullscreen mode Exit fullscreen mode

기본적으로 .gitignore를 존중하므로 빌드 결과물 변경으로 불필요하게 반복 실행되는 일을 줄일 수 있습니다.

  • 가장 적합한 용도: 저장 직후 서버나 테스트를 다시 실행하는 빠른 편집-실행 루프
  • 한계: 파일 변경 감지와 프로세스 재시작만 수행합니다. 핫 모듈 리로드나 프로세스 내부 상태 보존 기능은 제공하지 않습니다.

9. Docker CLI

Docker CLI는 가장 작은 도구는 아니지만, 로컬 개발용 인프라를 일회용으로 실행하는 데 매우 실용적입니다. Postgres, Redis 같은 서비스를 시스템에 직접 설치하지 않고 컨테이너로 실행할 수 있습니다.

docker run --rm -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:16
Enter fullscreen mode Exit fullscreen mode

위 명령의 핵심 옵션은 다음과 같습니다.

  • --rm: 컨테이너 종료 시 자동 삭제
  • -e: 환경 변수 설정
  • -p: 컨테이너 포트를 호스트 포트에 연결

Redis도 같은 방식으로 실행할 수 있습니다.

docker run --rm -p 6379:6379 redis:7
Enter fullscreen mode Exit fullscreen mode

애플리케이션은 각각 localhost:5432, localhost:6379으로 연결하면 됩니다.

  • 가장 적합한 용도: 로컬 개발과 통합 테스트용 데이터베이스, 캐시, 메시지 브로커 실행
  • 한계: Docker 데몬과 디스크·메모리 자원이 필요합니다. 다만 재현 가능한 로컬 인프라를 구성하는 CLI 워크플로에는 매우 적합합니다.

10. apidog-cli

명령줄에서 API를 호출하다 보면 요청 자체뿐 아니라 엔드포인트 정의, 스키마, 환경, 테스트 시나리오까지 함께 관리해야 하는 시점이 옵니다. Apidog은 이러한 API 프로젝트 작업을 터미널에서 처리할 수 있도록 apidog-cli를 제공합니다.

npm install -g apidog-cli
apidog login --with-token <YOUR_TOKEN>
apidog run -t <scenario_id> -e <env_id> -r cli
Enter fullscreen mode Exit fullscreen mode

apidog run은 저장된 테스트 시나리오를 특정 환경에서 실행하고 단계별 결과를 출력합니다. 모든 검증이 통과하면 종료 코드 0을 반환하고, 실패하면 0이 아닌 종료 코드를 반환하므로 CI 게이트에 연결할 수 있습니다.

예를 들어 CI 단계에서 다음처럼 실행할 수 있습니다.

apidog run \
  -t "$APIDOG_SCENARIO_ID" \
  -e "$APIDOG_ENV_ID" \
  -r cli
Enter fullscreen mode Exit fullscreen mode

CLI는 테스트 실행 외에도 다음 작업을 지원합니다.

  • endpoint, schema: API 설계 리소스 관리
  • import, export: OpenAPI, Swagger, Postman 스펙 가져오기와 내보내기
  • mock: 모의 응답 기대값 관리
  • environment, variables: 환경과 변수 관리

출력은 agentHints.nextSteps를 포함한 구조화된 JSON 형식이므로 API 개발을 수행하는 AI 코딩 어시스턴트와 함께 사용하기에도 적합합니다. 자세한 사용법은 완벽한 Apidog CLI 가이드Apidog CLI 설치 가이드를 참고하세요.

  • 가장 적합한 용도: CI에서 API 테스트 시나리오 실행, 스크립트 기반 프로젝트 리소스 관리, 스펙 우선 API 개발 워크플로
  • 참고: Apidog은 오픈소스가 아닌 무료 등급 제공 상업 제품입니다. apidog-cli를 사용하면 요청 클라이언트, 모킹 서버, 테스트 러너를 각각 조합하는 대신 하나의 API 프로젝트 흐름으로 관리할 수 있습니다. 전체 Apidog 플랫폼은 동일한 프로젝트에 GUI를 제공합니다.

선택 방법

이 도구들은 대부분 경쟁 관계가 아니라 함께 쓰는 도구입니다. 일반적인 백엔드 개발 흐름은 다음처럼 구성할 수 있습니다.

# API 호출 → 필요한 값 추출
curl -s https://api.example.com/users \
  | jq -r '.items[] | select(.active) | .email'
Enter fullscreen mode Exit fullscreen mode
# 로컬 서버 실행 → 외부 웹훅 연결
watchexec -r 'go run .'
ngrok http 8080
Enter fullscreen mode Exit fullscreen mode
도구 가장 적합한 용도 설치 오픈소스 여부
curl 스크립트 요청, CI 상태 확인 사전 설치됨 예 (curl 라이선스)
HTTPie 가독성 좋은 대화형 요청 pip install httpie 예 (BSD)
xh HTTPie 문법, 네이티브 속도 cargo install xh / 바이너리 예 (MIT)
jq JSON 응답 필터링 brew install jq / 바이너리 예 (MIT)
gh GitHub PR 및 CI 스크립트 brew install gh / 바이너리 예 (MIT)
ngrok 로컬호스트 공개, 웹훅 바이너리 다운로드 아니오 (프리미엄)
mkcert 신뢰 가능한 로컬 HTTPS 인증서 brew install mkcert / 바이너리 예 (BSD)
watchexec 파일 변경 시 명령 재실행 cargo install watchexec-cli 예 (Apache-2.0)
Docker CLI 임시 백엔드 서비스 Docker 설치 예 (Apache-2.0)
apidog-cli 테스트 시나리오 실행, 프로젝트 관리 npm install -g apidog-cli 아니오 (프리미엄)

작업별 권장 조합은 다음과 같습니다.

  • 요청 전송: 대화형 작업에는 xh 또는 HTTPie, 스크립트에는 curl
  • 응답 읽기와 변환: jq
  • 로컬 포트 공개와 웹훅 확인: ngrok
  • 로컬 HTTPS 테스트: mkcert
  • 저장 시 재실행: watchexec
  • 백엔드 의존성 실행: Docker
  • API 테스트와 프로젝트 리소스 관리: apidog-cli

마무리

좋은 경량 도구 세트는 각각 한 가지 역할을 잘 수행하고, 표준 입출력과 종료 코드를 통해 다음 도구와 연결됩니다. curl과 xh로 요청을 보내고, jq로 응답을 읽으며, ngrok과 mkcert로 로컬 접근을 처리하고, watchexec으로 편집-실행 루프를 줄일 수 있습니다. Docker는 필요한 인프라를 일회용으로 제공합니다.

apidog-cli는 이 흐름을 실제 API 프로젝트와 연결합니다. 터미널에서 실행하는 테스트와 엔드포인트 작업을 팀의 설계·배포 흐름과 맞출 수 있습니다. 프로젝트를 시작하려면 Apidog을 다운로드하고, CI에서 CLI를 실행해 API 프로젝트 리소스와 테스트 시나리오를 관리하세요.

Top comments (0)