[파이썬] Tornado에서의 크로스 도메인 요청

크로스 도메인 요청은 다른 도메인(또는 포트, 프로토콜)에서 온 요청을 처리하는 것을 의미합니다. 이는 웹 보안 정책에 따라 기본적으로 차단되는데, 이는 웹 애플리케이션이 소유한 리소스가 악의적인 사이트에 접근되는 것을 방지하기 위한 것입니다. 하지만, API를 제공하거나 클라이언트와 서버 간의 통신을 위해선 종종 크로스 도메인 요청을 처리해야 합니다.

Tornado에서는 크로스 도메인 요청을 처리하기 위한 CORS 미들웨어(CORS Middleware)를 사용할 수 있습니다. 이를 통해 특정 도메인의 요청을 허용하거나 특정 헤더를 추가할 수 있습니다. 아래는 Tornado에서의 크로스 도메인 요청 처리를 위한 예제 코드입니다.

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def set_default_headers(self):
        self.set_header("Access-Control-Allow-Origin", "http://example.com")
        self.set_header("Access-Control-Allow-Headers", "Content-Type")
        self.set_header("Access-Control-Allow-Methods", "GET, POST, OPTIONS")

    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()

위 코드에서, set_default_headers 메서드를 사용하여 Access-Control-Allow-Origin 헤더와 Access-Control-Allow-Headers 헤더를 설정했습니다. 이렇게 함으로써 http://example.com에서 오는 요청을 허용하고, 특정 헤더를 추가로 허용하도록 설정했습니다. 또한, Access-Control-Allow-Methods 헤더를 통해 원하는 HTTP 메서드들을 허용할 수도 있습니다.

이제, 위 예제 코드를 실행하고 http://example.com에서 해당 서버로 요청을 보내 보면 크로스 도메인 요청이 정상적으로 처리되는 것을 확인할 수 있습니다.

이처럼 Tornado에서 크로스 도메인 요청을 처리하는 방법을 알아보았습니다. Tornado의 강력한 비동기 처리 기능과 함께 크로스 도메인 요청을 처리하기 위한 이러한 기능을 활용하면 보다 강력하고 안정적인 웹 애플리케이션을 개발할 수 있습니다.