personal project - Cloud

김기훈·2026년 3월 25일

개인프로젝트

목록 보기
10/10

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만 원짜리 가성비 서버로 이사하거나
        • R2 요금을 결제하여 20TB로 확장
profile
안녕하세요.

0개의 댓글