← 개발 로그 목록

website: CI/CD 스크립트 오류 및 Git 불일치 관련 문서 업데이트

/ 5분 분량 / 개발 로그

이번 커밋은 CI/CD 파이프라인의 잠재적인 오류와 서버 Git 트래킹 불일치 문제를 문서화하여, 유사한 문제가 발생했을 때 더 빠르고 정확하게 해결할 수 있도록 개선하는 데 중점을 두었습니다.

요약

이번 커밋에서는 pm/docs/learnings.md 파일에 3줄을 추가하여, CI/CD 배포 스크립트에서 git pull과 같은 명령어가 실패했을 때 이를 명확히 인지하고, 서버와 Git 저장소 간의 트래킹 불일치 문제를 예방하기 위한 주의사항을 기록했습니다.

배경 및 목적

프로젝트를 진행하면서 CI/CD 파이프라인이 예상치 못한 상황에서 실패하거나, 서버 환경과 Git 저장소 간에 불일치가 발생하는 경우가 있었습니다. 특히, 원격 배포 스크립트에서 git pull과 같은 기본적인 Git 명령이 실패했을 때, set -e와 같은 옵션이 없으면 이를 즉시 인지하지 못하고 넘어가면서 실제 배포가 실패했음에도 불구하고 헬스체크 타임아웃 등으로 문제가 뒤늦게 발견되는 경우가 있었습니다. 또한, 개발 중 서버에 직접 코드를 반영했을 때 이를 Git에 제대로 기록하지 않으면, 이후 정기 배포 시 의도치 않은 충돌이나 이전 상태로 되돌아가는 문제가 발생할 수 있었습니다. 이러한 문제들은 개발 및 배포 과정의 효율성을 저해하고 잠재적인 서비스 장애를 유발할 수 있기에, 이를 예방하고 발생 시 빠르게 대처할 수 있도록 관련 경험과 해결 방안을 문서화할 필요가 있었습니다.

구현 내용

pm/docs/learnings.md 파일에 다음과 같은 내용이 추가되었습니다.

주요 변경사항 상세 설명

  • 원격 SSH 배포 스크립트의 set -e 중요성 강조: 스크립트 실행 중 git pull과 같은 명령이 실패하더라도, set -e 옵션이 없으면 스크립트가 멈추지 않고 다음 단계로 넘어가 버립니다. 이로 인해 실제 배포가 실패했음에도 불구하고 문제 파악이 지연되는 상황을 설명하고, 원격 배포 스크립트 시작 시 set -euo pipefail을 사용할 것을 권고했습니다. 과거 실제로 서버 워킹트리에 untracked 파일이 있을 때 git pull이 오류를 발생시키지만 set -e가 없어 스크립트가 계속 진행되었고, 이로 인해 서버 인프라 체크아웃이 몇 주 동안 이전 커밋에 고정되어 배포가 반복적으로 롤백되었던 경험을 공유합니다.
  • 서버에서 Git 트래킹 불일치 문제 해결 방안 제시: 개발 또는 검증 목적으로 서버에 직접 코드를 반영한 경우, 이 변경 사항이 Git에 기록되지 않으면 나중에 문제가 발생할 수 있습니다. 실제 사례로, 브랜치 작업 중 만든 백업 성공 메트릭 스크립트가 dev 브랜치 머지 전에 이미 서버에서 실행되고 있었고, 이후 dev의 다른 커밋들과 충돌을 일으켰던 상황을 설명합니다. 이러한 문제를 방지하기 위해 서버에서 수정하거나 추가한 내용은 가능한 한 빨리 Git에 반영해야 함을 강조했습니다.
  • Git Untracked 파일 덮어쓰기 보호 메커니즘 설명: Git이 untracked 파일을 덮어쓰는 것을 방지하는 메커니즘은 파일 내용이 완전히 같아도 작동하며, 실행 권한(755 vs 644) 차이만으로도 병합 충돌이 발생할 수 있음을 명확히 했습니다. 이러한 경우 git add 후 커밋하면 간단히 해결됨을 안내합니다.

변경된 파일 목록

  • pm/docs/learnings.md

추가/삭제된 코드 라인 수

  • 추가: 3 라인
  • 삭제: 0 라인

핵심 코드 설명

이번 변경은 코드 자체의 수정보다는 문서의 내용을 추가하는 것이므로, 핵심 코드를 직접적으로 제시하기보다는 문서에 추가된 내용의 의미를 설명하는 것으로 대신합니다.

기술적 의사결정

이번 커밋에서는 특별한 기술이나 라이브러리 선택에 대한 의사결정은 없었습니다. 기존 문서 파일을 수정하여 내용과 경험을 공유하는 방식이었습니다.

배운 점 및 개선점

  • 배운 점:
    • CI/CD 스크립트에서 set -e와 같은 오류 처리 옵션의 중요성을 다시 한번 깨달았습니다. 이러한 옵션을 사용하면 스크립트 실행 중 발생하는 문제를 즉각적으로 파악하고 대응할 수 있습니다.
    • 개발 중 서버 환경에 대한 변경 사항은 반드시 Git에 기록하는 습관이 중요하다는 것을 경험을 통해 배웠습니다. 이는 협업 시 발생할 수 있는 잠재적인 문제를 예방하는 데 필수적입니다.
    • Git의 untracked 파일 처리 방식에 대한 이해도를 높일 수 있었습니다.
  • 개선점:
    • 앞으로는 CI/CD 관련 스크립트를 작성하거나 수정할 때, set -euo pipefail과 같은 옵션을 기본적으로 적용하는 것을 고려해야겠습니다.
    • 서버 환경에 대한 변경 사항을 Git에 반영하는 프로세스를 좀 더 명확하게 정의하고, 팀원들이 이를 쉽게 따를 수 있도록 안내하는 것이 필요합니다.
  • 다음 단계 계획:
    • 이번에 문서화된 내용을 바탕으로, 실제 CI/CD 스크립트의 오류 처리 부분을 점검하고 필요한 경우 개선할 예정입니다.
    • 팀원들과 함께 서버 Git 트래킹 불일치 문제 예방 및 해결 방안에 대한 스터디를 진행하여, 관련 경험과 지식을 공유할 계획입니다.