[python] aiohttp를 사용하여 비동기적으로 웹소켓 서버 구축하기

웹소켓은 실시간 통신을 위한 프로토콜로, 클라이언트와 서버 간 양방향 통신을 지원합니다. 비동기 웹 서버 개발을 위해 많이 사용되는 aiohttp를 사용하여 웹소켓 서버를 구축하는 방법을 알아보겠습니다.

aiohttp 설치하기

먼저, aiohttp를 설치해야 합니다. 아래의 명령어를 사용하여 aiohttp를 설치합니다.

pip install aiohttp

웹소켓 서버 구축하기

aiohttp를 사용하여 웹소켓 서버를 구축하려면 다음과 같은 단계를 따라야 합니다.

  1. aiohttp 애플리케이션 생성하기
  2. 웹소켓 핸들러 구현하기
  3. 애플리케이션에 웹소켓 라우팅 등록하기
  4. 애플리케이션 실행하기

1. aiohttp 애플리케이션 생성하기

먼저, aiohttp 애플리케이션을 생성해야 합니다. 다음과 같이 aiohttp의 web.Application() 함수를 사용하여 애플리케이션 객체를 생성합니다.

from aiohttp import web

app = web.Application()

2. 웹소켓 핸들러 구현하기

다음으로, 웹소켓 핸들러를 구현해야 합니다. aiohttp의 web.View를 상속받는 클래스를 생성하여 웹소켓 핸들러를 구현할 수 있습니다.

class WebSocketHandler(web.View):
    async def get(self):
        ws = web.WebSocketResponse()
        await ws.prepare(self.request)
        
        async for msg in ws:
            # 웹소켓에서 받은 메세지 처리하기
            if msg.type == web.WSMsgType.TEXT:
                await ws.send_str("서버에서 받은 메세지: " + msg.data)
            elif msg.type == web.WSMsgType.ERROR:
                print('웹소켓 에러 발생: %s' % ws.exception())
                
        return ws

위의 코드에서는 get() 메소드를 사용하여 웹소켓 핸들러를 구현하였습니다.

3. 애플리케이션에 웹소켓 라우팅 등록하기

웹소켓 핸들러를 애플리케이션에 등록해야 합니다. 이를 위해 app.router.add_get() 함수를 사용하여 웹소켓 라우팅을 등록합니다.

app.router.add_get('/websocket', WebSocketHandler)

위의 코드에서는 /websocket 경로로 요청이 오면 웹소켓 핸들러인 WebSocketHandler를 호출합니다.

4. 애플리케이션 실행하기

애플리케이션을 실행하기 위해 web.run_app() 함수를 사용합니다.

web.run_app(app)

위의 코드를 실행하면 aiohttp 서버가 실행되고, 웹소켓 서버가 준비됩니다.

웹소켓 클라이언트와 통신하기

웹소켓 클라이언트는 WebSocket을 사용하여 서버와 통신할 수 있습니다. JavaScript에서는 WebSocket 클래스를 사용하여 웹소켓 클라이언트를 구현할 수 있습니다.

var socket = new WebSocket("ws://localhost:8080/websocket");

socket.onopen = function () {
    console.log("웹소켓 연결 성공");
    socket.send("클라이언트에서 보낸 메세지");
};

socket.onmessage = function (event) {
    console.log("서버에서 받은 메세지: " + event.data);
};

위의 코드에서는 new WebSocket()을 사용하여 웹소켓 클라이언트를 생성하고, onopen 이벤트 핸들러를 사용하여 연결이 성공적으로 열렸음을 확인한 후, onmessage 이벤트 핸들러를 사용하여 서버에서 받은 메세지를 처리합니다.


위의 방법을 따라하면 aiohttp를 사용하여 비동기적으로 웹소켓 서버를 구축할 수 있습니다. aiohttp는 높은 수준의 성능과 쉬운 사용법을 제공하여 실시간 웹 애플리케이션을 개발할 때 매우 유용한 도구입니다.

참고 자료