[python] 다중 도메인에 대한 요청 처리하기

웹 애플리케이션을 개발하다 보면 하나의 서버에서 여러 도메인에 대한 요청을 처리해야할 때가 있습니다. 예를 들어, 동적으로 생성되는 서브도메인이나 다양한 도메인 확장을 위해 웹 애플리케이션을 설정할 수 있는 경우입니다.

이 포스트에서는 파이썬을 사용하여 다중 도메인에 대한 요청을 처리하는 방법에 대해 알아보겠습니다.

Flask와 다중 도메인

Flask는 파이썬으로 웹 애플리케이션을 개발하기 위한 경량화된 프레임워크입니다. 다중 도메인에 대한 요청을 처리하기 위해서는 Flask에게 도메인을 인식하도록 설정해야 합니다.

Flask에서는 request 객체의 host 속성을 사용하여 현재 요청의 도메인을 확인할 수 있습니다. 다음은 Flask 애플리케이션에서 도메인을 인식하고 처리하는 예제 코드입니다.

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def hello():
    domain = request.host
    if domain == 'example.com':
        return 'Hello from example.com'
    elif domain == 'api.example.com':
        return 'Hello from api.example.com'
    else:
        return 'Unknown domain'

if __name__ == '__main__':
    app.run()

위의 코드에서는 Flask 애플리케이션의 루트 경로('/')에 대한 요청이 들어오면 현재 요청의 도메인을 확인합니다. request.host 값을 통해 도메인을 구분하고 다른 처리를 수행하는 예제입니다.

도메인 매핑과 라우팅

만약 많은 도메인을 처리해야 한다면, 하나의 도메인 마다 별도의 라우트를 정의하는 것은 번거로울 수 있습니다. 이런 경우에는 도메인과 처리 로직을 매핑할 수 있는 구조를 만들어야 합니다.

Flask에서는 이러한 도메인 매핑과 라우팅을 위해 데코레이터를 사용할 수 있습니다. 다음은 도메인과 처리함수를 매핑해주는 데코레이터의 예제입니다.

from flask import Flask, request

app = Flask(__name__)

def route_by_domain(domain):
    def decorator(f):
        app.route('/', subdomain=domain)(f)
        return f
    return decorator

@route_by_domain('example.com')
def hello_example():
    return 'Hello from example.com'

@route_by_domain('api.example.com')
def hello_api():
    return 'Hello from api.example.com'

if __name__ == '__main__':
    app.run()

위의 코드에서는 route_by_domain 데코레이터를 정의하여 도메인과 처리함수를 매핑합니다. app.route를 사용하여 도메인을 지정하고 해당 도메인에 대한 요청이 오면 hello_example 또는 hello_api 함수가 실행되게 됩니다.

결론

이번 포스트에서는 파이썬 Flask를 사용하여 다중 도메인에 대한 요청을 처리하는 방법을 알아보았습니다. Flask를 통해 간단하게 도메인을 구분하고 해당 도메인에 맞는 처리를 수행할 수 있습니다.

더 자세한 내용은 Flask 공식 문서를 참고하시기 바랍니다.