[python] 웹 애플리케이션에서의 웹소켓과 실시간 푸시 알림

웹 애플리케이션을 개발하다보면 사용자에게 실시간으로 업데이트된 내용을 보여주는 기능이 필요할 때가 많습니다. 이를 구현하기 위해 웹소켓과 실시간 푸시 알림 기술을 사용할 수 있습니다.

웹소켓이란?

웹소켓은 클라이언트와 서버 간의 양방향 통신을 제공하는 프로토콜입니다. 이를 통해 서버에서 클라이언트로 데이터를 실시간으로 보낼 수 있습니다. 웹소켓은 기존의 단방향 통신인 HTTP의 한계를 극복하기 위해 등장했습니다.

웹소켓은 websocket 모듈을 사용하여 구현할 수 있습니다. 다음은 간단한 예제 코드입니다.

import asyncio
import websockets

async def handler(websocket, path):
    while True:
        message = await websocket.recv()
        print(f"Received message: {message}")

        response = f"Received: {message}"
        await websocket.send(response)

start_server = websockets.serve(handler, 'localhost', 8000)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

위 코드는 웹소켓 서버를 간단히 구현한 예제입니다. websockets.serve() 함수는 클라이언트의 연결을 받아들이고, handler 함수를 호출하여 클라이언트와의 통신을 처리합니다.

실시간 푸시 알림 구현

웹소켓을 사용하여 실시간 푸시 알림을 구현하는 방법에는 다양한 방법이 있습니다. 대표적인 예로는 채팅 애플리케이션, 실시간 주식 시세 업데이트 등이 있습니다.

다음은 간단한 실시간 채팅 애플리케이션 예제 코드입니다.

import asyncio
import websockets

# 클라이언트들의 웹소켓 연결을 관리하는 Set
clients = set()

async def handler(websocket, path):
    # 연결된 클라이언트를 추가
    clients.add(websocket)
    try:
        while True:
            message = await websocket.recv()
            print(f"Received message: {message}")

            # 연결된 모든 클라이언트들에게 메시지 전송
            for client in clients:
                await client.send(message)
    finally:
        # 연결이 종료되면 클라이언트를 제거
        clients.remove(websocket)

start_server = websockets.serve(handler, 'localhost', 8000)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

위 코드는 사용자들 간의 실시간 채팅을 구현한 예제입니다. clients Set에 연결된 클라이언트들을 관리하여 메시지를 전달합니다. 클라이언트에서 메시지를 받으면 연결된 모든 클라이언트에게 메시지를 전송합니다.

이처럼 웹소켓과 실시간 푸시 알림을 활용하면 웹 애플리케이션에서 사용자에게 실시간 업데이트를 제공할 수 있습니다.

참고 자료