파일 업로드 기능은 웹 개발에서 중요한 기능 중 하나입니다. 사용자가 웹 어플리케이션에 파일을 업로드하면 서버는 해당 파일을 저장하거나 처리하는 작업을 수행합니다. 이번 포스트에서는 Tornado 웹 프레임워크를 사용하여 파일 업로드를 구현하는 방법을 알아보겠습니다.
Tornado란?
Tornado는 파이썬 기반의 비동기 웹 프레임워크로, 빠른 속도와 확장성이 특징입니다. Tornado는 하나의 프로세스에서 수천 개의 동시 연결을 처리할 수 있는 네트워크 라이브러리이며, 자체적인 웹 서버를 포함하고 있습니다.
Tornado에서의 파일 업로드 구현
Tornado에서 파일 업로드를 구현하기 위해서는 다음과 같은 단계를 따릅니다:
- HTML form을 생성하여 사용자로부터 파일을 선택하도록 합니다.
- 클라이언트가 파일을 업로드하면 서버에서 해당 파일을 처리할 수 있도록 요청을 처리하는 핸들러를 작성합니다.
- 핸들러에서 클라이언트가 업로드한 파일을 저장하거나 처리합니다.
HTML Form 생성
먼저, 파일을 업로드하기 위한 HTML form을 생성해야 합니다. 아래 예제에서는 간단한 파일 업로드 폼을 작성하였습니다.
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
위의 HTML 코드에서 action
은 파일을 업로드할 URL을 지정한 것이고, enctype="multipart/form-data"
는 폼 데이터가 파일을 포함하고 있음을 나타냅니다.
파일 업로드 핸들러 작성
파일을 업로드하기 위해서는 Tornado의 RequestHandler
를 상속받은 업로드 핸들러를 작성해야 합니다. 아래는 간단한 파일 업로드 핸들러의 예제 코드입니다.
import tornado.web
class UploadHandler(tornado.web.RequestHandler):
def post(self):
file = self.request.files.get('file')[0]
filename = file['filename']
body = file['body']
# 파일 처리 로직 작성
# (예: 파일 저장, 분석, 데이터베이스에 저장 등)
self.write('File "{}" uploaded successfully.'.format(filename))
위의 코드에서 post
메서드는 클라이언트로부터 POST 요청을 받아서 처리합니다. self.request.files
에서 클라이언트가 업로드한 파일을 가져올 수 있습니다. 파일의 정보는 딕셔너리 형태로 제공되며, filename
과 body
를 사용하여 파일을 처리할 수 있습니다.
파일 업로드 핸들러 등록
마지막으로, 업로드 핸들러를 Tornado 애플리케이션에 등록해야 합니다. 아래는 업로드 핸들러를 등록하는 예제 코드입니다.
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render('index.html')
def make_app():
return tornado.web.Application([
(r'/', MainHandler),
(r'/upload', UploadHandler),
])
if __name__ == '__main__':
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
위의 코드에서 /upload
URL에 UploadHandler
를 매핑시켜주었습니다. 메인 핸들러 MainHandler
에서는 파일 업로드를 위한 HTML form을 렌더링하는 역할을 합니다.
실행 및 테스트
위의 코드를 실행하고, 웹 브라우저에서 http://localhost:8888
로 접속합니다. 파일 선택 버튼을 클릭하여 파일을 선택한 후 업로드 버튼을 클릭하면, 파일이 성공적으로 업로드되었다는 메시지가 출력됩니다.
결론
이번 포스트에서는 Tornado 웹 프레임워크를 사용하여 파일 업로드를 구현하는 방법을 간단히 알아보았습니다. Tornado는 비동기적인 처리 방식과 빠른 속도로 파일 업로드 기능을 구현할 수 있는 강력한 도구입니다. 파일 업로드는 다양한 웹 어플리케이션에서 필요한 기능이므로, Tornado를 활용하여 효율적인 파일 업로드 기능을 구현해보시기 바랍니다.