[python] Tornado를 사용한 서버 사이드 렌더링

Tornado는 파이썬으로 작성된 비동기 웹 프레임워크로, 서버 사이드 렌더링을 위해 사용될 수 있습니다. 서버 사이드 렌더링은 웹 애플리케이션의 모든 페이지를 서버에서 렌더링하여 클라이언트에게 전달하는 방식입니다. 이를 통해 초기 페이지 로딩 속도를 개선하고 SEO에 더욱 효과적으로 대응할 수 있습니다.

Tornado와 템플릿 엔진

Tornado는 자체적인 템플릿 엔진을 제공하지 않습니다. 따라서 서버 사이드 렌더링을 위해 템플릿 엔진을 선택하고 사용해야 합니다. 대표적인 템플릿 엔진으로는 Jinja2, Django 템플릿, Mako 등이 있습니다. 이 중에서 사용하기 편하고 성능이 우수한 엔진을 선택하여 Tornado와 통합할 수 있습니다.

import tornado.ioloop
import tornado.web
import jinja2


# Jinja2 템플릿 엔진 초기화
jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader("templates"))


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        # 템플릿 렌더링
        template = jinja_env.get_template("index.html")
        self.write(template.render())


def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])


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

위의 예제 코드에서는 Jinja2 템플릿 엔진을 사용하여 서버 사이드 렌더링을 구현하였습니다. jinja_env 객체를 통해 템플릿 파일을 로드하고, render() 메소드를 사용하여 템플릿을 렌더링한 후 결과를 클라이언트에게 전달합니다. 이를 위해 MainHandler 클래스의 get() 메소드에서 템플릿 렌더링 작업을 수행합니다.

정적 파일 처리

Tornado는 기본적으로 정적 파일을 처리하는 기능을 제공합니다. 이를 통해 CSS, JavaScript, 이미지 등의 정적 파일을 쉽게 서비스할 수 있습니다. 정적 파일은 static 디렉토리에 저장되어 있어야 하며, tornado.web.StaticFileHandler 클래스를 사용하여 처리할 수 있습니다.

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"/static/(.*)", tornado.web.StaticFileHandler, {"path": "static"}),
    ])


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

위의 예제 코드에서는 tornado.web.StaticFileHandler를 사용하여 /static/ 경로로 요청이 들어왔을 때, static 디렉토리에 있는 정적 파일을 처리하도록 설정하였습니다. 즉, /static/image.png로 요청이 들어오면 static/image.png 파일을 반환하게 됩니다.

결론

Tornado를 사용하여 서버 사이드 렌더링을 구현할 수 있습니다. 템플릿 엔진과 정적 파일 처리 기능을 통해 웹 애플리케이션의 초기 로딩 속도를 개선할 수 있으며, SEO에도 더욱 효과적으로 대응할 수 있습니다. Tornado의 간단한 예제를 통해 서버 사이드 렌더링의 구조를 이해하고, 실제 프로젝트에 적용해 보세요.