오늘은 파이썬 웹 애플리케이션을 구축하고 파일 업로드 기능을 구현하는 방법에 대해 알아보겠습니다. 이번 튜토리얼에서는 Zappa와 AWS S3를 사용하여 파일 업로드 애플리케이션을 구축하는 방법을 다룰 것입니다.
1. Zappa 설정하기
Zappa는 서버리스 아키텍처를 사용하여 파이썬 웹 애플리케이션을 배포하는 프레임워크입니다. 먼저 Zappa를 설치해야 합니다. 아래 명령어를 사용하여 Zappa를 설치합니다:
pip install zappa
Zappa가 설치되면 애플리케이션의 루트 폴더에서 zappa init
명령어를 실행하여 Zappa를 설정합니다. Zappa는 zappa_settings.json
파일을 생성하여 설정을 저장합니다. 이 파일에서 필요한 설정을 수정할 수 있습니다.
2. Flask 애플리케이션 만들기
이제 Flask 애플리케이션을 만들어보겠습니다. 먼저 Flask를 설치합니다:
pip install flask
다음으로, AWS S3를 사용하기 위해 boto3
패키지를 설치합니다:
pip install boto3
Flask 애플리케이션 코드를 작성합니다. app.py
파일을 만들고 다음 코드를 작성합니다:
from flask import Flask, render_template, request
import boto3
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/upload', methods=['POST'])
def upload():
file = request.files['file']
if file:
s3 = boto3.client('s3')
s3.upload_fileobj(file, 'your-bucket-name', file.filename)
return 'File uploaded successfully.'
return 'No file selected.'
이 코드는 Flask 애플리케이션에 두 개의 라우트를 정의합니다. 첫 번째 라우트는 '/'
로 접근하며 index.html
파일을 렌더링합니다. 두 번째 라우트는 'upload'
로 접근하며 파일을 업로드합니다. 업로드된 파일은 AWS S3에 저장됩니다.
3. HTML 템플릿 만들기
이제 HTML 템플릿을 만들어보겠습니다. 애플리케이션의 루트 폴더에서 templates
폴더를 만들고 index.html
파일을 생성합니다. 다음 코드를 작성합니다:
<!DOCTYPE html>
<html>
<head>
<title>File Upload App</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
</body>
</html>
이 코드는 간단한 파일 업로드 양식을 생성합니다. 사용자는 파일을 선택하고 “Upload” 버튼을 클릭하여 파일을 업로드할 수 있습니다.
4. AWS S3 버킷 설정하기
이제 AWS S3에 파일을 업로드할 수 있는 버킷을 만들어야 합니다. AWS Management Console에 접속하여 S3 서비스로 이동합니다.
버킷을 생성하기 위해 “Create bucket” 버튼을 클릭합니다. 버킷 이름을 지정하고 지역을 선택한 후, “Create” 버튼을 클릭하여 버킷을 생성합니다.
5. 배포하기
이제 Zappa를 사용하여 애플리케이션을 배포할 차례입니다. 애플리케이션의 루트 폴더에서 아래 명령어를 실행하여 애플리케이션을 배포합니다:
zappa deploy dev
배포가 완료되면 Zappa는 배포된 애플리케이션의 URL을 보여줍니다. 이 URL을 사용하여 애플리케이션에 접속할 수 있습니다.
마무리
이제 파이썬 Zappa와 AWS S3를 이용하여 파일 업로드 애플리케이션을 구축하는 방법에 대해 알아보았습니다. 파일 업로드 기능을 가진 웹 애플리케이션을 만들고 배포하는 것은 매우 유용한 기능입니다. 이를 사용하여 다양한 파일 관리 및 공유 시나리오를 구현할 수 있습니다.
#Zappa #AWS