자동화 slecs

로컬 개발 환경 레포 자동 인식으로 수동 등록 제거

목차

scripts/bulk_seed.py 한 파일 수정으로, 로컬 개발 환경에서 프로젝트 레포지토리를 수동으로 등록하던 번거로움을 없앴다.


왜 이게 필요했나

팀 내에서 로컬 개발 환경을 셋업하는 스크립트를 계속 다듬어오고 있었는데, 문제가 하나 있었다. bulk_seed.py가 시드 대상 레포 목록을 REPOS 라는 변수에 명시적으로 하드코딩해둔 구조였다. 누군가 ~/dev/source/hedvion/ 아래에 새 컨테이너 프로젝트를 하나 더 클론해오면, 그 사람이 직접 REPOS 리스트에 경로를 추가해줘야만 시드가 돌았다.

이게 처음엔 별 문제가 아닌 것처럼 보인다. 레포가 몇 개 안 되면 그냥 손으로 추가하면 되니까. 근데 팀원이 늘고, 컨테이너가 분리되고, 프로젝트가 하나씩 쌓이다 보면 이 수동 등록이 슬금슬금 관리 포인트가 된다. "왜 내 환경에서만 안 되지?"라는 질문의 원인이 여기서 나오는 경우가 꽤 있었음.


변경 내용

핵심은 REPOS 를 고정 리스트로 두는 게 아니라, ~/dev/source/hedvion/* 경로를 glob으로 스캔해서 자동 인식하도록 바꾼 것이다. 대략 이런 패턴이다.

import glob
import os

BASE_DIR = os.path.expanduser("~/dev/source/hedvion")
REPOS = [
    path for path in glob.glob(os.path.join(BASE_DIR, "*"))
    if os.path.isdir(path)
]

before/after를 정리하면 이렇다.

구분 Before After
REPOS 구성 방식 경로를 수동으로 리스트에 명시 ~/dev/source/hedvion/* glob 자동 스캔
새 컨테이너 추가 시 bulk_seed.py 직접 수정 필요 디렉토리만 생성하면 자동 인식
환경 차이로 인한 실수 종종 발생 경로 기준이 동일하므로 줄어듦

회고: 작은 변경이지만 팀 영향은 크다

이 작업 자체는 파일 하나, 코드 몇 줄이다. 근데 팀 관점에서 보면 체감 차이가 꽤 있다. 개발 환경 셋업 스크립트는 "한 번 짜놓고 다들 그냥 쓰는" 종류의 코드라서, 여기에 수동 등록 단계가 끼어있으면 조용히 사람들을 귀찮게 한다. 특히 온보딩 중인 팀원한테는 "이 파일도 수정해야 해요"라는 말을 또 해야 하는 상황이 생긴다.

자동화 스크립트가 진짜 자동화답게 동작하려면, 새로운 대상이 추가됐을 때 사람이 개입하지 않아도 되는 구조를 기본으로 잡아야 한다고 생각한다. 이번처럼 디렉토리 컨벤션이 이미 정해져 있는 환경(~/dev/source/hedvion/ 아래에 컨테이너를 둔다는 약속)이라면, 그 컨벤션을 코드가 그대로 활용하게 만들면 된다. 컨벤션 자체가 설정이 되는 셈이다.

한 가지 주의할 건, glob 스캔 방식으로 바꾸면 의도치 않은 디렉토리까지 잡힐 수 있다는 점이다. 예를 들어 임시로 만들어둔 폴더나 .DS_Store 같은 게 디렉토리 형태로 섞여있으면 노이즈가 된다. 이런 경우는 필터 조건을 하나 더 걸어주면 된다. 특정 마커 파일(docker-compose.yml이나 .git 등)이 존재하는 경우에만 REPOS에 포함시키는 식으로.

REPOS = [
    path for path in glob.glob(os.path.join(BASE_DIR, "*"))
    if os.path.isdir(path) and os.path.exists(os.path.join(path, "docker-compose.yml"))
]

지금 당장은 없어도 되는 방어 로직이지만, 나중에 디렉토리가 더 많아지면 이 정도 필터는 있는 게 낫다. 코드리뷰할 때 이런 엣지 케이스를 같이 짚어주는 게 시니어 역할이기도 하고.

작은 QoL 개선이지만, 이런 게 쌓여야 팀 전체의 개발 환경이 군더더기 없이 돌아간다.

끝.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.