Django 기반 클라우드 앱의 핵심 요소
- 상태를 저장하지 않는 백엔드 (Stateless Backend)
- 클라우드 환경에서는 서버(EC2 등)가 언제든 늘어나거나 줄어들 수 있음
- 사용자 세션이나 업로드된 파일을 웹 서버 자체에 저장하면 안 됨
- 해결책
- 세션이나 데이터는 외부 데이터베이스(RDS 등)에 저장
- 사용자가 업로드한 미디어 파일은 클라우드 스토리지(AWS S3 등)에 분리하여 저장해야 함
- RESTful API 구축 (Django REST Framework)
- 클라우드 앱은 보통 프론트엔드(웹)와 모바일(iOS/Android) 등 다양한 클라이언트와 통신해야 함
- Django REST Framework(DRF)를 사용하면 데이터베이스의 정보를 JSON 형태의 API로 쉽게 변환하여
인프라 자동화 및 배포
- Docker 컨테이너 기술을 사용하여 개발 환경과 클라우드 운영 환경을 동일하게 맞추고
- 배포를 자동화하는 것이 클라우드 앱 개발의 표준
클라우드 스토리지 애플리케이션의 기본 동작 원리
- 클라우드 앱은 크게 세 가지 핵심 요소로 나뉘어 동작하며
- Django는 이 중 '서버'와 '데이터베이스 관리'를 담당
1. 클라이언트 (Client)
- 웹 브라우저나 모바일 앱 화면입니다.
- 사용자가 파일을 선택하고 업로드 요청을 보냅니다.
2. 서버 (Django Backend & Database)
- 클라이언트로부터 파일을 전달받습니다.
- 보안 검사(바이러스 여부, 확장자 제한), 권한 확인(업로드할 자격이 있는지)을 수행합니다.
- 파일의 '메타데이터(파일 이름, 용량, 업로드한 사람, 업로드 시간 등)'만
- 데이터베이스(PostgreSQL 등)에 텍스트 형태로 저장합니다.
3. 외부 스토리지 (Cloud Object Storage)
- Django 서버는 전달받은 실제 파일 데이터(.pdf, .mp4, .jpg 등)를
- 데이터베이스가 아닌 '외부 전용 스토리지'로 전송합니다.
- 파일 전송이 완료되면, 스토리지로부터 '파일이 저장된 URL'을 반환받아
아키텍처 접근 방식: 파일 저장소의 2가지 대안
- Django를 사용하여 파일을 저장할 때, 구현 방식은 크게 두 가지
대안 1: 로컬 파일 시스템 (Django 기본 방식)
- 이 방식은 Django 서버가 실행되고 있는 컴퓨터(또는 컨테이너)의 폴더 안에 파일을 직접 저장합니다.
- 장점
- 초기 설정이 매우 쉽고 직관적입니다. 추가 비용이나 외부 연동이 필요 없음
- 단점
- 서비스가 커져서 트래픽을 감당하기 위해 서버를 여러 대(Scale-out)로 늘릴 경우
- 1번 서버에 업로드된 파일을 2번 서버에서 찾을 수 없는 문제가 발생합니다. 즉, 확장이 불가능한 구조
대안 2: 클라우드 객체 스토리지 (AWS S3, Google Cloud Storage 등)
- '외부 저장소' 개념이며, 실제 상용 클라우드 서비스의 표준
- 장점
- 무한에 가까운 확장성을 가짐
- 서버가 100대로 늘어나도 모든 서버가 동일한 외부 스토리지를 바라보기 때문에 파일 관리가 일원화
- 단점
- 초기 설정(클라우드 서비스 가입, 인증 키 발급, Django 라이브러리 연동 등)이 로컬 저장소에 비해 복잡
S3 대안: 저비용 클라우드 스토리지 아키텍처 비교
- 대용량 파일 서비스는 '저장 용량' 비용도 중요하지만
- 사용자가 파일을 다운로드할 때 발생하는 '트래픽 비용(Egress)'이 훨씬 무섭
대안 1: 저비용 S3 호환 클라우드 서비스 (Cloudflare R2, Backblaze B2)
- 개념: AWS S3와 사용 방법(API)은 100% 똑같으면서 가격 정책만 파격적으로 낮춘 서비스들
- 장점: Cloudflare R2의 경우 파일을 다운로드할 때 발생하는 대역폭 비용이 '무료'
- Backblaze B2는 저장 공간 비용이 S3의 1/4 수준
- 서버를 직접 관리할 필요도 없음
- 추천: 인프라 관리 부담 없이 당장 비용을 줄이고 싶을 때 최고의 선택입니다.
대안 2: 자체 구축 객체 스토리지 (MinIO + 가성비 독립 서버)
- 개념: Hetzner나 Contabo 같이 하드디스크 용량을 엄청나게 많이 주면서 저렴한 가상 서버(VPS)를 임대
- 그리고 그 서버에 'MinIO'라는 오픈소스 소프트웨어를 설치하여 나만의 S3를 직접 만드는 방식
- 장점: 압도적인 가성비입니다. MEGA 클라우드와 가장 유사한 인프라 접근 방식입니다.
- 단점: 하드디스크 고장, 서버 보안, 백업 등을 개발자가 직접 책임져야 하므로 운영 난이도가 높습니다.
비용 0원으로 시작하는 클라우드 앱 개발 3단계 전략
- 초기 자본 없이 핵심 기능(업로드, 다운로드, 폴더 관리, 용량 제한)을 모두 개발하고 검증하는 방법
- 1단계: 로컬(Local) 프로토타입 (비용: 0원)
- 개념
- 내 컴퓨터(노트북/데스크탑)를 임시 클라우드 서버로 사용합니다.
- 장점
- 인터넷이 없어도 개발할 수 있고, 비용이 전혀 들지 않습니다.
- 목표
- Django를 이용해 사용자가 로그인하고, 파일을 올리고,
- 다운로드하는 '소프트웨어적인 뼈대'를 완벽하게 완성합니다.
- 2단계: 프리티어(Free Tier) 클라우드 연동 (비용: 0원)
개념
- 코드가 완성되면, 클라우드 회사들이 제공하는 '무료 맛보기 용량'을 연결합니다.
대안 1 (Cloudflare R2)
- 매월 10GB 저장 공간과 무제한 다운로드를 평생 무료로 제공합니다.
대안 2 (AWS S3)
- 가입 후 1년 동안 매월 5GB를 무료로 제공합니다.
목표
- 1단계에서 만든 Django 코드의 '저장소 주소'만 무료 클라우드로 바꿔서
- 친구들이 실제로 스마트폰으로 접속해 파일을 올릴 수 있게 배포
- 3단계: 진정한 스케일 업 (비용: 서비스가 성공했을 때 발생)
개념
- 무료 제공량인 10GB를 꽉 채울 정도로 사용자가 많아지고 서비스가 성공했을 때 고민합니다.
- 이때 비로소 앞서 계산했던 월 1~2만 원짜리 가성비 서버로 이사하거나