좀비 코드 사건: 내 EC2가 업데이트를 거부한 이유 🕵️‍♂️

발행: (2026년 1월 15일 오후 12:07 GMT+9)
2 min read
원문: Dev.to

Source: Dev.to

범인? Docker의 로컬 이미지 캐시

Docker는 이미 latest 태그가 붙은 이미지를 재사용하는 것을 선호합니다. 최신 이미지를 실행하도록 지시하면 먼저 로컬 캐시를 확인합니다. latest 태그가 있는 이미지를 찾으면 최신 버전이라고 가정하고 새 버전을 풀링하지 않으며, 내용이 변경되었더라도 그대로 사용합니다.

조사: “수색 및 압수” 강제 방법

Step 1 – 본인 인증 (ECR 로그인)

aws ecr get-login-password --region YOUR_REGION \
  | docker login --username AWS --password-stdin YOUR_ECR_REGISTRY

Step 2 – “가짜” 컨테이너 중지

docker stop backend-app
docker rm backend-app

Step 3 – 캐시된 이미지 삭제 (캐시 버스터)

docker rmi YOUR_ECR_REGISTRY/YOUR_REPO:latest

Step 4 – 최신 이미지 풀링 및 실행

docker pull YOUR_ECR_REGISTRY/YOUR_REPO:latest

docker run -d --name backend-app -p 8081:8081 \
  --restart always YOUR_ECR_REGISTRY/YOUR_REPO:latest

“시니어 개발자” 조언

커밋 SHA를 태그로 사용하기

  • Git 커밋 SHA(예: my-app:8f2a4b1)로 이미지를 빌드하고 태그를 지정합니다.
  • EC2 배포 스크립트가 해당 특정 SHA를 요청하도록 합니다.
  • Docker는 캐시에서 정확히 일치하는 버전을 찾지 못하면 자동으로 풀링하므로 “좀비” 배포를 방지할 수 있습니다.

마무리 생각

캐시 문제는 디버깅에 몇 시간을 낭비하게 만들 수 있습니다. 커밋 SHA와 같은 불변 태그를 사용하면 항상 의도한 코드 버전을 실행한다는 점을 보장할 수 있습니다.


Tags: #Docker #DevOps #EC2 #ECR

Back to Blog

관련 글

더 보기 »

기술은 구원자가 아니라 촉진자다

왜 사고의 명확성이 사용하는 도구보다 더 중요한가? Technology는 종종 마법 스위치처럼 취급된다—켜기만 하면 모든 것이 개선된다. 새로운 software, ...

에이전틱 코딩에 입문하기

Copilot Agent와의 경험 나는 주로 GitHub Copilot을 사용해 인라인 편집과 PR 리뷰를 수행했으며, 대부분의 사고는 내 머리로 했습니다. 최근 나는 t...