lifecarelog
개발일지

롤백 스크립트의 grep 함정, 한 줄에 UUID가 두 개 잡힐 때

배포 롤백을 자동화하다 이전 배포 ID를 뽑는 grep이 한 줄에서 UUID 두 개를 돌려주는 버그를 만났어요. 원인과 수정 과정을 정리했어요.

4분 읽기

새벽에 CI 파이프라인을 정비하다가 작은 버그 하나에 발목을 잡혔어요. 셸 스크립트에서 grep으로 ID를 뽑아 쓰고 있다면, 오늘 이야기가 남 일이 아닐 수 있어요.

이날은 플랜비(plan-b), 플랜씨(plan-c), 플랜엘(plan-l) 웹까지 3개 프로젝트의 배포 파이프라인을 한 번에 손봤어요. 품질 게이트를 재사용 워크플로로 묶어 보니 세 프로젝트가 같은 검증을 지나가게 됐고, 알림과 커버리지, 배포가 실패하면 이전 버전으로 되돌리는 롤백 단계도 넣었어요. 플랜씨(plan-c) 쪽만 해도 바뀐 파일이 5개였어요. 참고로 플랜씨(plan-c)는 로그인 없이 쓰는 무료 금융계산기라, 배포가 조용히 깨지면 알아채기 어려운 서비스거든요. 롤백 자동화가 필요했던 이유예요.

배포 실패 감지이전 배포 ID 조회롤백 실행

문제는 이전 배포 ID 조회에서 터졌어요. 배포 목록 출력에서 grep으로 UUID를 찾는 단순한 한 줄이었는데, 적용해 봤더니 ID 자리에 UUID가 두 개 붙어 나왔어요. 출력 한 줄에 UUID 형식 문자열이 두 개 있었던 거예요.

터미널에서 직접 테스트해 보면 금방 재현돼요. UUID는 하이픈 포함 36자인데, 한 줄에 이 패턴이 두 번 나오는 입력을 만들어 돌려 보니 줄 매칭 grep은 줄 전체를 돌려주더라고요. 그 값을 그대로 롤백 명령에 넘기면 유효한 ID가 아니니 실패하죠. ID를 정확히 한 개만 집어내도록 추출 방식을 바꿔서 해결했어요.

커밋 기록을 보면 파이프라인 정비 커밋과 이 수정 커밋 사이 간격이 5분 남짓이에요. 문제가 바로 드러나서 다행이었어요. 롤백은 실패했을 때만 도는 경로라, 평소엔 멀쩡해 보이다가 정작 필요한 순간에 깨지기 쉽거든요.

  • 줄 매칭 대신 패턴 추출
  • 뽑은 값 개수 검증
  • 실패 경로도 미리 리허설

혼자 운영하면서 얻은 결론은 단순해요. 외부 도구의 출력 형식은 계약이 아니고, 실패 경로는 실패하기 전에 한 번은 태워 봐야 한다는 거예요. 여러분의 롤백 스크립트도 오늘 한 번 돌려 보세요. 필요한 날이 오기 전에요.

#CI#롤백#grep#1인개발

라이프케어로그 서비스가 궁금하신가요?

AI 기반 건강·일정·재활 관리 앱을 직접 써보세요.

서비스 살펴보기

관련 글

댓글

아직 댓글이 없어요. 첫 댓글을 남겨주세요.