숨 돌릴 여유: 원활한 Docker 배포를 위한 AWS EC2 스토리지 확장

발행: (2025년 12월 25일 오후 10:05 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

문제: 디스크 공간 부족

여러분의 EC2 인스턴스(특히 기본 8 GB로 시작한 경우)는 다음으로 빠르게 가득 찰 수 있습니다:

  • Docker 이미지 – 각 docker compose build가 이미지 캐시에 레이어를 추가합니다.
  • 컨테이너 로그 – 기본 로깅조차도 기가바이트까지 증가할 수 있습니다.
  • 데이터베이스 데이터 – PostgreSQL은 시간이 지남에 따라 더 많은 공간을 차지합니다.
  • 애플리케이션 로그 및 캐시 – Django 내부 로깅이나 기타 캐시가 누적될 수 있습니다.

디스크 사용량이 **90 %**에 도달하면 시스템이 불안정해집니다. **100 %**가 되면 서버가 정상적으로 작동을 멈춥니다.

문제 식별: 확장 전

현재 디스크 상태를 확인하십시오. EC2 인스턴스에 SSH로 접속하고 다음을 실행합니다:

df -h

예시 출력 (확장 전)

Filesystem      Size  Used Avail Use% Mounted on
/dev/root       6.8G  4.7G  2.1G  70% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
...

/dev/root70 % 사용률로, 남은 용량이 2.1 GB에 불과합니다. 이는 Docker화된 애플리케이션에 대한 시한폭탄과 같습니다.

Source:

해결책: EBS 볼륨 확장

이 과정은 두 가지 주요 단계로 구성됩니다:

  1. AWS에 더 많은 “하드웨어” 공간을 할당하도록 요청 (EBS 볼륨 수정).
  2. Linux에 새 공간을 인식하고 사용하도록 요청 (파티션 확장 및 파일시스템 크기 조정).

파트 1 – AWS 콘솔에서 볼륨 크기 늘리기

  1. AWS Management Console에 로그인합니다.
  2. EC2 → Elastic Block Store → Volumes로 이동합니다.
  3. 실행 중인 EC2 인스턴스에 연결된 EBS 볼륨을 선택합니다(보통 인스턴스 ID 또는 이름으로 표시됨).
  4. Actions → Modify Volume을 클릭합니다.
  5. 대화 상자에서 Size를 원하는 새 크기로 변경합니다(예: 8 GiB에서 20 GiB로).
  6. Modify를 클릭하고 확인합니다.

AWS가 새 공간 할당을 시작합니다. 볼륨 상태가 modifying에서 optimizing으로 변경됩니다. 최적화 중에도 다음 단계로 진행할 수 있으므로 완료를 기다릴 필요가 없습니다.

파트 2 – Ubuntu에서 파일시스템 확장

AWS가 공간을 추가했지만 Ubuntu는 여전히 이전 파티션 크기를 사용하고 있습니다. 메인 파티션(/dev/root)을 새로 사용 가능한 공간 전체로 확장해야 합니다.

새 디스크 크기 확인

lsblk

예시 출력 (AWS 수정 후, OS 확장 전)

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
...
nvme0n1     259:0    0   20G  0 disk          

파티션 확장 및 파일시스템 크기 조정

# cloud‑init 도구가 없으면 설치
sudo apt-get update && sudo apt-get install -y cloud-guest-utils

# 파티션 확장 (여기서는 /dev/nvme0n1p1을 가정; 다르면 조정)
sudo growpart /dev/nvme0n1 1

# 파일시스템 확장 (ext4)
sudo resize2fs /dev/nvme0n1p1

확장 확인

df -h

이제 /dev/root에 대한 용량이 증가된 것을 확인할 수 있습니다.

요약

  1. AWS 콘솔에서 EBS 볼륨 크기 조정.
  2. growpart를 사용하여 파티션 확장.
  3. resize2fs를 사용하여 파일 시스템 크기 조정.
  4. df -h로 새로운 공간 확인.
  5. 향후 디스크 공간 부족 상황을 방지하기 위해 자동 Docker 정리 구현.

이러한 단계를 따르면 EC2의 Django 애플리케이션은 Docker 빌드, 로그 및 데이터베이스 성장에 충분한 저장 공간을 확보하게 되며, 정리 루틴을 통해 시간이 지나도 환경이 깔끔하게 유지됩니다.

Source:

Docker & System Cleanup Script

#!/bin/bash
# clean_docker.sh – Remove unused Docker resources and old journal logs

echo "Pruning Docker system (containers, images, build cache)..."
docker system prune -af

echo "Pruning Docker volumes..."
docker volume prune -f

echo "Cleaning up old system journal logs (older than 7 days)..."
sudo journalctl --vacuum-time=7d

echo "Disk cleanup complete."
df -h

1. 스크립트 저장

~/clean_docker.sh 파일을 만들고 위 스크립트를 붙여넣습니다. nano에서 저장하고 종료하려면:

Ctrl+O  (Enter로 확인)
Ctrl+X

2. 스크립트 실행 권한 부여

chmod +x ~/clean_docker.sh

3. Cron으로 예약 실행

cron을 사용해 스크립트를 자동으로 실행하도록 설정합니다. 예를 들어 매주 일요일 자정에 실행하도록 합니다.

crontab -e

프롬프트가 나타나면 1을 선택해 nano를 사용합니다. 파일 가장 끝에 다음 줄을 추가합니다:

0 0 * * 0 /home/ubuntu/clean_docker.sh

설명

필드의미
0 00시 0분 (자정)
* *매월 매일
0요일 0 (일요일)
/home/ubuntu/clean_docker.sh정리 스크립트를 실행

저장하고 종료합니다 (Ctrl+O, Enter, Ctrl+X).

결론

이 단계들을 따라 하면:

  • EC2 인스턴스의 스토리지를 확장했습니다.
  • 사용되지 않는 Docker 리소스와 오래된 시스템 로그를 자동으로 제거하는 견고한 유지 관리 전략을 구현했습니다.

이제 Sioux Web App은 디스크 공간 고갈이라는 지속적인 위협 없이 효율적으로 실행될 수 있어, 사용자에게 보다 안정적이고 신뢰할 수 있는 경험을 제공합니다.

Back to Blog

관련 글

더 보기 »

AWS AMI 크로스 리전 복제 및 공유

개요: AWS AMI 교차 지역 복제 및 공유는 AWS Management Console, CLI 또는 SDK를 통해 수행할 수 있습니다. AMI는 지역별로 지정되므로 반드시 …