[파이썬] Flask를 이용한 비동기 처리

Flask는 파이썬으로 구현된 경량 웹 프레임워크로서, 간편한 사용법과 확장성으로 인해 많은 개발자들에게 인기가 있는 프레임워크입니다. 이번 포스트에서는 Flask를 이용하여 비동기 처리를 하는 방법에 대해 알아보겠습니다.

비동기 처리란?

비동기 처리는 한 작업이 끝날 때까지 기다리지 않고 다른 작업을 동시에 처리하는 방식을 말합니다. 이를 통해 웹 애플리케이션의 응답 시간을 단축할 수 있으며, 사용자 경험을 향상시킬 수 있습니다.

Flask에서의 비동기 처리 방법

Flask에서 비동기 처리를 위해 사용되는 주요 라이브러리 중 하나는 Flask-SocketIO입니다. 이 라이브러리를 사용하면 WebSocket을 통해 실시간 통신을 할 수 있습니다.

설치

먼저, Flask-SocketIO를 설치합니다. 다음 명령어를 사용하면 됩니다:

pip install flask-socketio

예제 코드

다음은 Flask-SocketIO를 사용하여 실시간으로 현재 시간을 표시하는 간단한 예제 코드입니다.

from flask import Flask, render_template
from flask_socketio import SocketIO, emit
import datetime

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@app.route('/')
def index():
    return render_template('index.html')

@socketio.on('connect')
def test_connect():
    emit('server_time', datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

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

위 코드는 Flask 애플리케이션에서 / 경로로 접근했을 때 index.html을 렌더링하고, 클라이언트가 소켓에 연결되면 현재 시간을 서버에서 클라이언트로 전송하는 기능을 제공합니다.

HTML 템플릿

Flask-SocketIO를 사용하여 실시간으로 현재 시간을 표시하려면, 클라이언트에서 해당 정보를 받을 수 있도록 HTML 템플릿에 다음 코드를 추가해야 합니다:

<!DOCTYPE html>
<html>
<head>
    <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/3.1.0/socket.io.js"></script>
    <script type="text/javascript" charset="utf-8">
        $(document).ready(function(){
            var socket = io.connect('http://' + document.domain + ':' + location.port);
            socket.on('server_time', function(msg) {
                $('#time').text('Server Time: ' + msg);
            });
        });
    </script>
</head>
<body>
    <h1 id="time">Server Time: </h1>
</body>
</html>

위 코드는 Socket.IO 클라이언트 라이브러리를 로드하고, 서버에서 받은 현재 시간을 표시합니다.

결론

Flask를 이용한 비동기 처리는 웹 애플리케이션의 성능과 사용자 경험을 향상시키는 데 도움을 줄 수 있습니다. Flask-SocketIO를 사용하면 쉽게 실시간 통신을 구현할 수 있으며, WebSocket을 통해 비동기 처리를 할 수 있습니다.

Flask와 Flask-SocketIO의 자세한 사용법에 대해서는 공식 문서를 참고하시기 바랍니다.