blue green 배포 시 업로드 파일 손실 트러블 슈팅 - KimGyuBek/Threadly GitHub Wiki

문제 상황

증상

  • 운영 중 배포 후 게시글 이미지가 표시되지 않는 문제 발생했다.
이미지 누락 스크린샷

원인 분석

  • 응답에는 정상적으로 이미지 조회 URL이 포함되어있다.
  • 그러나 해당 URL로 직접 요청을 보내면 Not fOund 응답이 반환되었다.
{
  "success": true,
  "code": "SUCCESS",
  "message": "요청이 성공적으로 처리되었습니다.",
  "data": {
    "type": "about:blank",
    "title": "Not Found",
    "status": 404,
    "detail": "No static resource lfkvpFb6GOetGsEo.webp.",
    "instance": "/images/posts/lfkvpFb6GOetGsEo.webp"
  },
  "timestamp": "2025-11-09T01:14:10.113111551"
}
  • 단순히 잘못된 URL일 가능성을 고려해 DB에서 직접 복사한 URL으로 요청을 보냈지만 동일한 상황 발생
  • ec2의 docker container 내부를 확인해보니 업로드된 파일들이 존재하지 않았다.
  • docker-copmose.yml에서 threadly-service 실행 시 파일 업로드 경로가 마운트 되지 않아 파일이 컨테이너 내부에만 저장되고 배포 과정으로 인한 컨테이너 전환 과정에서 사라진것이 원인이었다.
# docker-compose.blue/green.yml
volumes:
  - /home/ubuntu/threadly/logs/services/app/blue:/app/logs  # 로그 저장 경로만 마운트 되어 있음

해결 과정

1. threadly-service docker compose 파일에 업로드 디렉토리 마운트 추가

# docker-compose.blue/green.yml
volumes:
  - /home/ubuntu/threadly/logs/services/app/blue:/app/logs
  - /home/ubuntu/threadly/storage/uploads:/app/local-storage/uploads

2. 배포 전ec2 서버에서 마운트 대상 디렉토리 생성 및 권한 부여

ubuntu@ip-172-31-44-9:~/threadly$ tree storage -pug -L 3
[drwxr-xr-x ubuntu   ubuntu  ]  storage
└── [drwxr-xr-x ubuntu   ubuntu  ]  uploads
└── [drwxr-xr-x root     root    ]  images
├── [drwxr-xr-x 999      systemd-journal]  posts
└── [drwxr-xr-x 999      systemd-journal]  profiles

결론

blue-green 배포 환경에서 Docker 컨테이너가 전환되는 과정 중 디렉토리와 마운트 하지 않은 상태에서는 컨테이너가 완전히 독립적이므로 전환 시 파일이 손실되는 문제가 발생했다.

Docker 환경에서는 반드시 호스트 디렉토리를 컨테이너에 마운트하여 배포 또는 컨테이너 전환시에도 손실이 업도록 주의해야한다.


관련 문서

⚠️ **GitHub.com Fallback** ⚠️