in-cli를 사용해 정리하기
Source: Dev.to
많은 저장소 관리의 문제점
우리는 모두 마이크로서비스를 “사랑”합니다—이론적으로는 말이죠. 실제로는 의존성을 올리거나, 빌드를 실행하거나, 15개의 서로 다른 저장소에서 git pull을 해야 할 때, 그 과정은 금세 고통스러워집니다.
“탭 저장꾼” 전략
수동으로 15개의 터미널 탭을 열고, 각각 cd한 뒤 명령을 실행하며, 놓친 것이 없는지 바라봅니다.
“유닉스 마법사” 전략
디렉터리를 순회하는 원라인을 만들려고 시도합니다:
find . -maxdepth 1 -type d -exec sh -c 'cd "{}" && git pull' \;
작동하지만 순차적으로 실행돼 느립니다. 병렬 처리를 위해 xargs로 전환하면:
ls -d */ | xargs -P 4 -I {} bash -c "cd {} && pnpm update"
이제 또 다른 문제에 봉착합니다: xargs는 공백이 포함된 디렉터리 이름에서 깨집니다. 이를 해결하려면 find에 -print0를, xargs에 -0를 사용해야 하는데, 이 과정에서 간단했던 원라인이 읽기 어려운 80자짜리 복잡한 명령이 됩니다.
in‑cli 소개 🚀
in-cli는 의존성이 전혀 없는 Bash CLI로, 모든 디렉터리에서 명령을 빠르게 실행합니다. 복잡한 파이프와 플래그를 사용할 필요 없이, 하고 싶은 일을 알려주기만 하면 됩니다.
기본 사용법
in [OPTIONS] [DIRECTORIES...] [--] COMMAND...
실제 시나리오
시나리오 1: 아침 루틴
~/work 폴더에 있는 20개의 저장소를 모두 업데이트합니다:
# Updates every repo in ~/work/ directory
in ~/work/* git pull
시나리오 2: “중요 수정” 배포
모든 서비스에서 빌드 스크립트를 병렬로 실행합니다:
# Run 'make build' in parallel across all subdirectories
in -P 8 ~/work/* make build
시나리오 3: 의존성 지옥
CVE 때문에 모든 서비스에서 lodash를 업데이트하고, 커밋한 뒤 푸시합니다:
in ~/work/* 'pnpm update lodash && git commit -am "updating lodash" && git push'
프로젝트에 포함된 EXAMPLES.md 파일에서 +50개의 다른 예시를 확인할 수 있습니다.
in‑cli를 사용하는 이유
- Speed: 추가 플래그 없이 명령을 병렬로 실행합니다.
- Simplicity: 복잡한
find | xargs파이프라인을 기억할 필요가 없습니다. - Portability: 순수 Bash이며 외부 의존성이 전혀 없습니다.
- Safety: 디렉터리 이름에 공백이나 특수 문자가 있어도 바로 처리합니다.
모노레포나 마이크로서비스가 가득한 폴더를 관리하고 있다면, 일회성 스크립트를 더 이상 작성하지 마세요. in‑cli를 한 번 써보고, 몇 번의 키 입력(그리고 정신 건강)까지 절약하게 되었다면 저자에게 알려 주세요.
즐기세요!