[go] Go 언어에서 웹소켓을 사용하여 실시간 채팅 봇 만들기

웹소켓은 클라이언트와 서버 간의 양방향 통신을 제공하는 프로토콜로, 실시간 통신 애플리케이션에 적합합니다. Go 언어의 간결하면서도 강력한 기능을 활용하여 웹소켓을 사용하여 실시간 채팅 봇을 만들어보겠습니다.

필수 패키지 설치

Go 언어에서 웹소켓을 사용하기 위해서는 gorilla/websocket 패키지를 설치해야 합니다. 아래 명령을 사용하여 패키지를 설치합니다.

go get github.com/gorilla/websocket

웹소켓 서버 만들기

package main

import (
	"log"
	"net/http"

	"github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
	ReadBufferSize:  1024,
	WriteBufferSize: 1024,
}

func handleConnections(w http.ResponseWriter, r *http.Request) {
	conn, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		log.Println(err)
		return
	}
	defer conn.Close()

	for {
		// 클라이언트로부터 메시지 수신
		_, msg, err := conn.ReadMessage()
		if err != nil {
			log.Println(err)
			return
		}
		// 수신한 메시지를 다른 클라이언트에게 브로드캐스트
		err = conn.WriteMessage(websocket.TextMessage, msg)
		if err != nil {
			log.Println(err)
			return
		}
	}
}

func main() {
	http.HandleFunc("/chat", handleConnections)
	log.Fatal(http.ListenAndServe(":8080", nil))
}

위 코드는 웹소켓 연결을 관리하고 클라이언트 간 메시지를 브로드캐스트하는 간단한 웹소켓 서버를 만드는 예제입니다.

클라이언트와의 연결

웹 브라우저에서 웹소켓 클라이언트를 구현하여 서버에 연결합니다. 아래 예제는 간단한 HTML과 JavaScript를 사용한 클라이언트 예제입니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>웹소켓 채팅</title>
</head>
<body>
    <input type="text" id="message" />
    <button onclick="sendMessage()">전송</button>
    <ul id="chat"></ul>

    <script>
        const socket = new WebSocket('ws://localhost:8080/chat');
        
        socket.onmessage = function(event) {
            const chat = document.getElementById('chat');
            const message = document.createElement('li');
            const text = document.createTextNode(event.data);
            message.appendChild(text);
            chat.appendChild(message);
        };
        
        function sendMessage() {
            const message = document.getElementById('message').value;
            socket.send(message);
        }
    </script>
</body>
</html>

마치며

Go 언어를 사용하여 웹소켓을 구현하는 방법을 살펴보았습니다. 이를 기반으로 실시간 채팅 봇을 만들어 확장하거나 다른 웹소켓 기반의 기능을 개발할 수 있을 것입니다.

이 글에서 소개한 내용은 gorilla/websocket 공식 문서를 참고하여 작성되었습니다.

참고 문헌: