[파이썬] Tornado에서의 파일 업로드

파일 업로드 기능은 웹 개발에서 중요한 기능 중 하나입니다. 사용자가 웹 어플리케이션에 파일을 업로드하면 서버는 해당 파일을 저장하거나 처리하는 작업을 수행합니다. 이번 포스트에서는 Tornado 웹 프레임워크를 사용하여 파일 업로드를 구현하는 방법을 알아보겠습니다.

Tornado란?

Tornado는 파이썬 기반의 비동기 웹 프레임워크로, 빠른 속도와 확장성이 특징입니다. Tornado는 하나의 프로세스에서 수천 개의 동시 연결을 처리할 수 있는 네트워크 라이브러리이며, 자체적인 웹 서버를 포함하고 있습니다.

Tornado에서의 파일 업로드 구현

Tornado에서 파일 업로드를 구현하기 위해서는 다음과 같은 단계를 따릅니다:

  1. HTML form을 생성하여 사용자로부터 파일을 선택하도록 합니다.
  2. 클라이언트가 파일을 업로드하면 서버에서 해당 파일을 처리할 수 있도록 요청을 처리하는 핸들러를 작성합니다.
  3. 핸들러에서 클라이언트가 업로드한 파일을 저장하거나 처리합니다.

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에서 클라이언트가 업로드한 파일을 가져올 수 있습니다. 파일의 정보는 딕셔너리 형태로 제공되며, filenamebody를 사용하여 파일을 처리할 수 있습니다.

파일 업로드 핸들러 등록

마지막으로, 업로드 핸들러를 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를 활용하여 효율적인 파일 업로드 기능을 구현해보시기 바랍니다.