[파이썬] aiohttp 웹소켓 서버 구성하기

웹소켓(WebSocket)은 실시간 양방향 통신을 위한 프로토콜입니다. aiohttp는 Python에서 비동기 웹 애플리케이션을 개발하기 위한 웹 프레임워크입니다. 이번 글에서는 aiohttp를 사용하여 웹소켓 서버를 구성하는 방법에 대해 알아보겠습니다.

1. aiohttp 설치하기

먼저, 우리는 aiohttp를 설치해야 합니다. 아래의 명령어를 사용하여 설치할 수 있습니다.

pip install aiohttp

2. 새로운 aiohttp 웹소켓 서버 만들기

이제 새로운 aiohttp 웹소켓 서버를 만들어 보겠습니다. 아래의 예제 코드를 참고해주세요.

from aiohttp import web
import aiohttp

async def websocket_handler(request):
    ws = web.WebSocketResponse()
    await ws.prepare(request)

    async for msg in ws:
        if msg.type == aiohttp.WSMsgType.TEXT:
            if msg.data == 'close':
                await ws.close()
            else:
                await ws.send_str('You sent: {}'.format(msg.data))
        elif msg.type == aiohttp.WSMsgType.ERROR:
            print('WebSocket connection closed with exception {}'.format(ws.exception()))

    return ws

app = web.Application()
app.router.add_get('/ws', websocket_handler)

web.run_app(app)

위의 코드는 aiohttp를 사용하여 새로운 웹소켓 서버를 생성하는 간단한 예제입니다. /ws 경로로 요청이 들어오면 websocket_handler 함수가 호출되어 웹소켓 연결을 처리합니다. 요청이 오면 서버는 클라이언트에게 메시지를 보내거나 메시지를 수신할 수 있습니다.

3. aiohttp 웹소켓 서버 실행하기

이제 웹소켓 서버를 실행해보겠습니다. 예제 코드를 실행하기 위해 터미널에서 다음 명령어를 사용합니다.

python app.py

웹소켓 서버는 localhost:8080/ws 주소에서 실행됩니다.

4. 클라이언트에서 웹소켓 서버에 연결하기

이제 클라이언트를 만들어 웹소켓 서버에 연결해보겠습니다. 웹소켓 클라이언트는 HTML과 JavaScript를 사용하여 작성할 수 있습니다. 아래의 HTML과 JavaScript 코드를 참고해주세요.

<html>
  <head>
    <script>
      var ws = new WebSocket('ws://localhost:8080/ws');
      ws.onopen = function () {
        console.log('WebSocket connection established.');
        ws.send('Hello from the client!');
      };
      ws.onmessage = function (event) {
        console.log('Received message:', event.data);
      };
      ws.onclose = function () {
        console.log('WebSocket connection closed.');
      };
    </script>
  </head>
  <body>
    <h1>WebSocket Example</h1>
  </body>
</html>

위 코드를 HTML 파일로 저장하고 웹 브라우저에서 실행하면 클라이언트가 웹소켓 서버에 연결되고 서버에서 보낸 메시지를 수신할 수 있습니다.

마치며

이번 글에서는 aiohttp를 사용하여 웹소켓 서버를 구성하는 방법을 알아보았습니다. aiohttp는 Python에서 비동기 웹 애플리케이션을 구성하는 강력한 도구입니다. 웹소켓을 사용하여 실시간 통신을 구현하는 경우, aiohttp는 확장성과 성능 면에서 우수한 선택이 될 수 있습니다.