gitSync 사용 시 발생할 수 있는 File Not Found 이슈

v K_Y v·2025년 4월 8일
0

AIRFLOW

목록 보기
6/6
post-thumbnail

Kubernetes 환경에서 Airflow를 운영하던 중, 간헐적으로 file not found 오류가 발생하는 문제가 있었습니다. 소스 코드는 gitSync를 통해 자동으로 동기화되도록 설정되어 있었는데요. gitSync는 Git 레포지토리의 변경사항을 자동으로 반영해주는 매우 편리한 도구지만, 특정 타이밍 문제로 인해 예상치 못한 오류가 발생할 수 있습니다.

이번 글에서는 이러한 오류가 발생한 원인과, 이를 해결하기 위한 설정 방법에 대해 정리해보겠습니다.

🔄 gitSync의 .worktree 구조 이해

gitSync는 내부적으로 .worktree 디렉토리를 생성하고, 여기에 커밋 해시를 이름으로 하는 서브 디렉토리를 만들어 소스를 싱크합니다. 예를 들어 다음과 같이 구조화됩니다.

.worktree/
  ├── abc123456789abcdef/  ← 특정 커밋의 소스
  └── def987654321fedcba/  ← 최신 커밋의 소스

이 .worktree 내부 디렉토리 중 가장 최신 커밋 폴더가 repo라는 심볼릭 링크로 연결되어 실제 실행 시 사용됩니다.

⛔️ Task는 옛날 소스를 사용 중인데...

기본적으로 gitSync는 1개의 커밋만 보관합니다. 즉, 새 커밋이 동기화되면 이전 커밋 디렉토리는 바로 삭제됩니다.

문제는, Airflow task가 수행되는 중 sync가 발생하면 이전 커밋 디렉토리는 삭제되고 task는 이미 삭제된 경로를 참조하고 있어 file not found 에러가 발생할 여지가 있습니다.

이런 현상은 특히 실행 중인 Task가 오래 걸리는 경우에 잘 나타납니다.

🛠 해결 방법: GITSYNC_STALE_WORKTREE_TIMEOUT

gitSync는 오래된 .worktree 디렉토리를 일정 시간 보관해둘 수 있도록 GITSYNC_STALE_WORKTREE_TIMEOUT 환경변수를 제공합니다.

gitSync:
    enabled: true
env:
  - name: GITSYNC_STALE_WORKTREE_TIMEOUT
    value: "60m"  # 1시간 보관

이 값을 설정하면, gitSync는 sync가 되더라도 이전 커밋 디렉토리를 설정 시간만큼 유지합니다. 이 시간 내에 실행된 task들은 문제 없이 이전 경로를 사용할 수 있게 되는 것이죠.

해당 설정을 적용한 이후로는 file not found 오류가 더 이상 발생하지 않았습니다.

장기 실행되는 Task가 있는 환경이라면, GITSYNC_STALE_WORKTREE_TIMEOUT 설정을 고려해보시길 추천드립니다.

profile
📌 기억하기 위해 남기는 기록들

0개의 댓글