[go] Go 언어에서 웹소켓으로 실시간 푸시 알림 구현하기

웹 어플리케이션에서 실시간 푸시 알림을 구현하기 위해서는 웹소켓을 사용할 수 있습니다. Go 언어로 웹소켓을 통한 실시간 푸시 알림을 구현하는 방법에 대해 알아보겠습니다.

웹소켓이란?

웹소켓은 클라이언트와 서버 간의 양방향 통신을 가능하게 하는 통신 프로토콜입니다. HTTP 프로토콜과 달리 연결을 유지하고 있는 상태에서 데이터를 주고받을 수 있어 실시간 통신에 적합합니다.

Go 언어로 웹소켓 라이브러리 사용하기

Go 언어에서는 gorilla/websocket 라이브러리를 사용하여 웹소켓을 구현할 수 있습니다. 아래는 간단한 예제 코드입니다.

package main

import (
    "net/http"

    "github.com/gorilla/websocket"
)

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

func main() {
    http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
        conn, _ := upgrader.Upgrade(w, r, nil)
        defer conn.Close()

        for {
            messageType, p, err := conn.ReadMessage()
            if err != nil {
                return
            }

            if err := conn.WriteMessage(messageType, p); err != nil {
                return
            }
        }
    })

    http.ListenAndServe(":8080", nil)
}

위 예제 코드는 /ws 엔드포인트에 접속한 클라이언트와 웹소켓 연결을 만들고, 메시지를 주고받는 서버를 구현한 것입니다.

클라이언트에서 Go 언어로 구현된 웹소켓에 접속하기

클라이언트에서는 JavaScript의 WebSocket을 사용하여 Go 언어로 구현된 웹소켓에 접속할 수 있습니다. 아래는 간단한 클라이언트 JavaScript 코드입니다.

<script>
    var ws = new WebSocket("ws://localhost:8080/ws");
    ws.onopen = function() {
        console.log("WebSocket 연결 성공");
        ws.send("안녕, Go 웹소켓 서버");
    };
    ws.onmessage = function(evt) {
        console.log("서버에서 메시지 수신:", evt.data);
    };
</script>

위 코드는 ws://localhost:8080/ws 주소로 웹소켓에 접속한 후, 연결 성공시 메시지를 보내고 서버에서 오는 메시지를 콘솔에 출력합니다.

마치며

Go 언어를 사용하여 웹소켓을 통한 실시간 푸시 알림을 구현하는 방법을 알아보았습니다. 웹소켓을 통해 실시간 통신 기능을 구현하면 실시간으로 데이터를 주고받을 수 있어 다양한 실시간 애플리케이션을 개발할 수 있습니다.