[python] Tornado와 웹 소켓을 이용한 실시간 알림 구현

이번 포스트에서는 Python의 Tornado 웹 프레임워크와 웹 소켓을 활용하여 실시간 알림 기능을 구현하는 방법을 살펴보겠습니다.

웹 소켓이란?

웹 소켓은 웹 애플리케이션과 서버 간의 양방향 통신을 가능하게 해주는 프로토콜입니다. 기존의 HTTP 프로토콜은 클라이언트에서 서버로 요청을 보내고, 서버는 그에 대한 응답을 돌려주는 단방향 통신 방식이었습니다. 하지만 웹 소켓을 사용하면 클라이언트와 서버 간에 실시간으로 데이터를 주고받을 수 있습니다.

Tornado와 웹 소켓 설정

Tornado는 웹 프레임워크로써 다양한 기능을 제공하며, 웹 소켓도 쉽게 구현할 수 있습니다.

먼저 Tornado를 설치합니다:

pip install tornado

다음은 Tornado를 초기화하고 웹 소켓 핸들러를 설정하는 예제입니다:

import tornado.ioloop
import tornado.web
import tornado.websocket

class WebSocketHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        # 웹 소켓 연결이 열리면 실행되는 코드
        pass

    def on_message(self, message):
        # 클라이언트로부터 메시지를 수신하면 실행되는 코드
        pass

    def on_close(self):
        # 웹 소켓 연결이 닫히면 실행되는 코드
        pass

app = tornado.web.Application([
    (r'/websocket', WebSocketHandler),
])

if __name__ == '__main__':
    app.listen(8080)
    tornado.ioloop.IOLoop.current().start()

위의 코드에서 WebSocketHandler 클래스 내부에 있는 open, on_message, on_close 메소드는 웹 소켓 연결이 열리거나 메시지를 받거나 연결이 닫힐 때 각각 실행됩니다.

실시간 알림 구현하기

실시간 알림을 구현하기 위해서는 웹 소켓을 사용하여 클라이언트와 서버 간에 실시간으로 데이터를 주고받아야 합니다. 예를 들어, 새로운 알림이 생성되면 서버에서 해당 알림을 클라이언트로 전송하여 실시간으로 화면에 표시하도록 합니다.

서버에서 실시간 알림을 클라이언트로 전송하기 위해서는 클라이언트와 연결된 모든 웹 소켓 객체를 저장하고 있어야 합니다. 이를 위해 Tornado에서는 WebSocketHandler 클래스를 상속한 새로운 클래스를 만들고, 웹 소켓 연결이 열리면 해당 객체를 리스트에 추가하고, 연결이 닫힐 때는 리스트에서 제거하는 방식을 사용합니다.

import tornado.ioloop
import tornado.web
import tornado.websocket

class WebSocketHandler(tornado.websocket.WebSocketHandler):
    connections = []

    def open(self):
        self.connections.append(self)

    def on_close(self):
        self.connections.remove(self)

    def send_message_to_all(self, message):
        for conn in self.connections:
            conn.write_message(message)

위의 코드에서 connections 리스트에 웹 소켓 객체들을 관리하고, send_message_to_all 메소드를 통해 모든 클라이언트에게 메시지를 전송할 수 있습니다.

클라이언트에서는 웹 소켓을 통해 서버로부터 메시지를 수신하고 화면에 표시하도록 해야 합니다. 자세한 클라이언트 구현은 이 포스트의 범위를 벗어나니 생략하도록 하겠습니다.

결론

Tornado와 웹 소켓을 이용하여 실시간 알림 기능을 구현하는 방법을 알아보았습니다. 웹 소켓을 사용하면 클라이언트와 서버 간에 실시간으로 데이터를 주고받을 수 있어 웹 애플리케이션의 실시간성을 쉽게 구현할 수 있습니다. Tornado의 간편한 사용법과 웹 소켓의 기능을 활용하여 다양한 실시간 알림 서비스를 개발해보세요.