[파이썬] Tornado에서의 URL 라우팅

개요

Tornado는 Python 기반의 웹 프레임워크로, 강력한 URL 라우팅 기능을 제공합니다. URL 라우팅은 클라이언트의 요청에 따라 어떤 핸들러로 연결할지 결정하는 중요한 기능입니다. 이번 블로그 포스트에서는 Tornado에서의 URL 라우팅에 대해 알아보겠습니다.

URL 라우팅 기본 설정

Tornado의 URL 라우팅은 Application 객체를 사용하여 구현합니다. Application 객체는 URL과 핸들러를 매핑하는 역할을 합니다. 다음은 URL 라우팅을 설정하는 기본 코드입니다.

import tornado.web
import tornado.ioloop

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, World!")

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

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

위 예제에서는 / URL에 대한 요청을 MainHandler 클래스로 라우팅하고 있습니다. 따라서 / URL을 요청하면 “Hello, World!” 메시지가 반환됩니다.

정규식을 이용한 동적 URL 라우팅

Tornado의 URL 라우팅은 정규식 패턴을 사용하여 동적인 URL을 처리할 수도 있습니다. 예를 들어, 다음과 같이 정규식을 이용한 동적 URL 라우팅을 구현할 수 있습니다.

import tornado.web
import tornado.ioloop

class UserHandler(tornado.web.RequestHandler):
    def get(self, user_id):
        self.write(f"User ID: {user_id}")

def make_app():
    return tornado.web.Application([
        (r"/user/(\d+)", UserHandler),
    ])

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

위 예제에서는 /user/ 다음에 오는 숫자를 user_id로 받아서 처리하는 동적 URL 라우팅을 구현하고 있습니다. UserHandler 클래스의 get 메소드에서 user_id를 사용하여 필요한 작업을 수행할 수 있습니다.

URL 인자 전달

Tornado의 URL 라우팅은 추가 인자를 전달할 수도 있습니다. 예를 들어, 다음과 같이 추가 인자를 전달하는 URL 라우팅을 구현할 수 있습니다.

import tornado.web
import tornado.ioloop
import tornado.escape

class GreetingHandler(tornado.web.RequestHandler):
    def get(self, name):
        message = self.get_argument("message", default="Hello", strip=False)
        self.write(f"{message}, {tornado.escape.xhtml_escape(name)}!")

def make_app():
    return tornado.web.Application([
        (r"/greeting/([^/]+)", GreetingHandler),
    ])

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

위 예제에서는 /greeting/ 다음에 오는 문자열을 name으로 받아와서, message라는 추가 인자를 전달하는 URL 라우팅을 구현하고 있습니다. GreetingHandler 클래스의 get 메소드에서 namemessage를 사용하여 필요한 작업을 수행할 수 있습니다.

결론

Tornado의 URL 라우팅은 강력하고 유연한 기능을 제공하여 웹 애플리케이션을 개발할 때 매우 유용합니다. 위의 예제 코드를 참고하여 Tornado에서의 URL 라우팅을 구현해보세요.