macOS launchd로 hedvion 저장소 자동 동기화 구현
목차
팀의 개발 워크플로우에서 brainstorm 서비스로 푸시가 들어올 때마다 관련 저장소들을 자동으로 동기화해야 했다. 손으로 매번 동기화 명령어를 치는 것이 반복 작업이었고, 특히 로컬 개발 환경에서 이 과정이 자동화되면 팀의 컨텍스트 스위칭을 크게 줄일 수 있겠다고 판단했다. 그래서 macOS의 launchd를 활용해 이 작업을 자동으로 처리하는 에이전트를 구성했다.
launchd를 선택한 배경과 트레이드오프
처음에 이 작업을 자동화하면서 여러 방식을 고민했다. 주기적 크론 잡(cron)으로 처리하는 방법도 있었지만, 특정 이벤트(brainstorm 푸시)에 반응해야 하기 때문에 단순 시간 기반 스케줄링으로는 불충분했다. macOS 환경에서는 launchd가 표준 권장 방식이고, 사용자의 로그인 세션과 연계해 실행할 수 있다는 점이 핵심이었다.
launchd plist 파일을 작성하면서 고려한 요소들:
- 에이전트 vs 데몬: 사용자 영역에서 실행되는 에이전트로 설정해 권한 문제를 최소화
- 실행 타이밍: brainstorm 푸시를 감지하는 방식의 선택 — 완전 이벤트 기반은 복잡하므로, 정기적으로 체크하면서도 부하는 줄이는 균형점 찾기
- 로깅 및 모니터링: shell 스크립트 실행 결과를 기록해 문제 발생 시 추적 가능하도록 설계
| 고려 대상 | 선택 방식 | 이유 |
|---|---|---|
| 실행 환경 | macOS launchd 에이전트 | 표준 방식, 권한 관리 용이 |
| 트리거 방식 | 정기 체크 + 조건부 실행 | 완전 푸시 기반은 복잡도 높음 |
| 스크립트 언어 | bash/shell | 저수준 제어 필요, 기존 도구와 호환성 |
| 오류 처리 | 로그 파일 기록 | 데몬 환경에서 STDOUT/STDERR 캡처 어려움 |
구현 구조와 실행 흐름
변경 파일은 두 가지로 나뉜다:
- com.hedvion.macsync.plist — launchd가 읽는 설정 파일
- 에이전트 이름, 실행할 스크립트 경로, 실행 주기, 환경 변수 등을 정의
-
사용자가
launchctl load명령으로 등록하면 로그인 시마다 자동 활성화 -
mac-sync-hedvion.sh — 실제 동기화 로직
- hedvion 저장소들을 순회하면서 ff-sync (fast-forward sync) 실행
- brainstorm 푸시 후 변경 사항이 로컬에 반영되도록 함
- 각 저장소 동기화 결과를 로그에 기록
대략적인 워크플로우:
brainstorm에서 푸시 발생
↓
launchd가 설정된 주기마다 깨어남
↓
mac-sync-hedvion.sh 실행
↓
각 hedvion 저장소에서 ff-sync 실행
↓
로그 파일에 결과 기록
↓
다음 주기까지 대기
자동화의 명과 암 — 회고
이런 류의 자동화를 도입할 때 항상 고민하는 부분이 있다.
이점:
- 개발자가 매번 수동으로 동기화 명령을 칠 필요가 없음. 특히 여러 저장소가 있을 때 실수로 빼먹을 가능성도 줄어듦
- 로컬 상태가 항상 최신으로 유지되어 merge conflict 발생 확률 감소
- 팀의 협업 흐름이 부드러워짐
주의할 점:
- 자동 동기화가 사용자의 의도와 어긋날 수 있다. 예를 들어 특정 작업 중에 의도적으로 로컬 상태를 유지하고 싶을 때 예상 밖으로 변경될 수 있음
- launchd 에이전트가 제대로 실행되는지, 로그가 쌓이는지 모니터링 필요. 조용히 실패하면 문제를 인식하기 어려움
- 권한이나 네트워크 상태에 따라 스크립트가 실패할 수 있으므로 에러 처리와 알림 메커니즘이 중요
실제로 이런 자동화를 팀에 배포할 때는, 개발자들에게 명확히 설명하고(언제 실행되는지, 어떤 리포지토리에 영향을 주는지) 문제 발생 시 쉽게 비활성화할 수 있도록 가이드를 제공했다. launchctl unload 한 줄이면 되지만, 팀원들이 그것을 알고 있어야 한다.
또한 로그 파일을 주기적으로 확인해서 동기화 과정에서 반복되는 에러가 없는지, 예상 밖의 동작이 없는지 점검하는 습관을 들였다. 자동화는 편리하지만, 그만큼 뭔가 잘못되었을 때 감지하기 어려워질 수 있기 때문이다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.