롤백 스크립트의 grep 함정, 한 줄에 UUID가 두 개 잡힐 때
배포 롤백을 자동화하다 이전 배포 ID를 뽑는 grep이 한 줄에서 UUID 두 개를 돌려주는 버그를 만났어요. 원인과 수정 과정을 정리했어요.
새벽에 CI 파이프라인을 정비하다가 작은 버그 하나에 발목을 잡혔어요. 셸 스크립트에서 grep으로 ID를 뽑아 쓰고 있다면, 오늘 이야기가 남 일이 아닐 수 있어요.
이날은 플랜비(plan-b), 플랜씨(plan-c), 플랜엘(plan-l) 웹까지 3개 프로젝트의 배포 파이프라인을 한 번에 손봤어요. 품질 게이트를 재사용 워크플로로 묶어 보니 세 프로젝트가 같은 검증을 지나가게 됐고, 알림과 커버리지, 배포가 실패하면 이전 버전으로 되돌리는 롤백 단계도 넣었어요. 플랜씨(plan-c) 쪽만 해도 바뀐 파일이 5개였어요. 참고로 플랜씨(plan-c)는 로그인 없이 쓰는 무료 금융계산기라, 배포가 조용히 깨지면 알아채기 어려운 서비스거든요. 롤백 자동화가 필요했던 이유예요.
문제는 이전 배포 ID 조회에서 터졌어요. 배포 목록 출력에서 grep으로 UUID를 찾는 단순한 한 줄이었는데, 적용해 봤더니 ID 자리에 UUID가 두 개 붙어 나왔어요. 출력 한 줄에 UUID 형식 문자열이 두 개 있었던 거예요.
터미널에서 직접 테스트해 보면 금방 재현돼요. UUID는 하이픈 포함 36자인데, 한 줄에 이 패턴이 두 번 나오는 입력을 만들어 돌려 보니 줄 매칭 grep은 줄 전체를 돌려주더라고요. 그 값을 그대로 롤백 명령에 넘기면 유효한 ID가 아니니 실패하죠. ID를 정확히 한 개만 집어내도록 추출 방식을 바꿔서 해결했어요.
커밋 기록을 보면 파이프라인 정비 커밋과 이 수정 커밋 사이 간격이 5분 남짓이에요. 문제가 바로 드러나서 다행이었어요. 롤백은 실패했을 때만 도는 경로라, 평소엔 멀쩡해 보이다가 정작 필요한 순간에 깨지기 쉽거든요.
- 줄 매칭 대신 패턴 추출
- 뽑은 값 개수 검증
- 실패 경로도 미리 리허설
혼자 운영하면서 얻은 결론은 단순해요. 외부 도구의 출력 형식은 계약이 아니고, 실패 경로는 실패하기 전에 한 번은 태워 봐야 한다는 거예요. 여러분의 롤백 스크립트도 오늘 한 번 돌려 보세요. 필요한 날이 오기 전에요.
관련 글
댓글
아직 댓글이 없어요. 첫 댓글을 남겨주세요.