[python] Tornado와 엑셀 파일 처리 방법

이번 포스트에서는 Tornado 웹 프레임워크를 사용하여 엑셀 파일을 처리하는 방법에 대해 알아보겠습니다.

Tornado란?

Tornado는 파이썬으로 작성된 비동기 웹 프레임워크로, 네트워크 프로그래밍과 비동기 작업에 특화되어 있습니다. Tornado는 고성능 웹 서버로 알려져 있으며, 대규모 데이터 처리를 위한 웹 애플리케이션에 적합합니다.

엑셀 파일 처리를 위한 모듈 설치

Tornado에서 엑셀 파일을 처리하기 위해서는 openpyxl 모듈을 설치해야 합니다. openpyxl은 파이썬에서 엑셀 파일을 읽고 쓸 수 있게 해주는 라이브러리입니다. 아래 명령어로 openpyxl 모듈을 설치할 수 있습니다.

pip install openpyxl

엑셀 파일 업로드 처리

Tornado로 엑셀 파일을 업로드하는 기능을 구현해보겠습니다. 아래는 엑셀 파일 업로드를 처리하는 핸들러의 예시입니다.

import tornado.web
from openpyxl import load_workbook

class ExcelUploadHandler(tornado.web.RequestHandler):
    def post(self):
        file = self.request.files['excel_file'][0]
        filename = file['filename']
        workbook = load_workbook(file['content'])
        # 엑셀 파일 처리 로직 구현
        # ...

        self.write(f"엑셀 파일 '{filename}'이 업로드되었습니다.")

위의 코드에서 post 메소드는 엑셀 파일을 받아서 openpyxl 라이브러리를 사용하여 엑셀 파일을 읽습니다. 그리고 엑셀 파일 처리 로직을 구현하고, 응답으로 업로드된 파일의 이름을 출력합니다.

엑셀 파일 다운로드 처리

Tornado로 엑셀 파일을 다운로드하는 기능을 구현해보겠습니다. 아래는 엑셀 파일을 다운로드하는 핸들러의 예시입니다.

import tornado.web
from openpyxl import Workbook

class ExcelDownloadHandler(tornado.web.RequestHandler):
    def get(self):
        # 엑셀 파일 생성
        workbook = Workbook()
        sheet = workbook.active
        sheet['A1'] = 'Hello'
        sheet['B1'] = 'World'
        # ...

        # 엑셀 파일 다운로드
        self.set_header('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        self.set_header('Content-Disposition', 'attachment; filename=my_excel_file.xlsx')
        workbook.save(self)

위의 코드에서 get 메소드는 엑셀 파일을 생성하고, 원하는 데이터를 엑셀 파일에 씁니다. 그리고 엑셀 파일을 다운로드할 수 있도록 헤더를 설정하고, 생성한 엑셀 파일을 저장합니다.

그리고 나서 Application 클래스에서 핸들러를 등록합니다.

import tornado.ioloop
import tornado.web

class MyApplication(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r'/upload', ExcelUploadHandler),
            (r'/download', ExcelDownloadHandler)
        ]
        super().__init__(handlers)

if __name__ == '__main__':
    app = MyApplication()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

이제 웹 애플리케이션을 실행하고, /upload 경로로 엑셀 파일을 업로드하거나, /download 경로로 엑셀 파일을 다운로드할 수 있습니다.

결론

본 포스트에서는 Tornado 웹 프레임워크를 사용하여 엑셀 파일을 처리하는 방법에 대해 알아보았습니다. 엑셀 파일 업로드 및 다운로드 기능을 구현하는데에는 openpyxl 라이브러리가 매우 유용하게 사용됩니다. Tornado를 활용하여 다양한 업무 시스템 개발에 활용할 수 있을 것입니다.