[go] Go 언어로 웹소켓 기능을 활용한 실시간 주식 시세 애플리케이션 만들기

이번에 우리는 Go 언어와 웹소켓을 사용하여 실시간 주식 시세 애플리케이션을 만들어 볼 것입니다. 웹소켓은 클라이언트와 서버 간의 양방향 통신을 가능하게 하는 프로토콜이며, 주식 시세와 같은 실시간 데이터를 전달하기에 적합합니다.

프로젝트 설정

먼저, Go 언어로 웹소켓을 사용할 수 있는 라이브러리를 설치해야 합니다. Go 언어의 경우, gorilla/websocket 패키지를 이용하면 간단하게 웹소켓을 구현할 수 있습니다. 패키지 설치는 다음과 같이 해줍니다.

go get github.com/gorilla/websocket

웹소켓 서버 구현

다음으로, 웹소켓 서버를 구현해보겠습니다. 아래는 간단한 예제 코드입니다.

package main

import (
    "github.com/gorilla/websocket"
    "net/http"
)

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

func wsHandler(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
        }
        // 데이터 처리
        err = conn.WriteMessage(messageType, p)
        if err != nil {
            return
        }
    }
}

func main() {
    http.HandleFunc("/ws", wsHandler)
    http.ListenAndServe(":8080", nil)
}

위의 코드는 /ws 엔드포인트로 웹소켓 연결을 받고, 클라이언트로부터 메시지를 읽어들여 다시 전송하는 기본적인 웹소켓 서버를 구현한 것입니다.

클라이언트 측 구현

웹소켓 서버를 구현했다면, 클라이언트 측에서도 웹소켓 연결을 설정하고 데이터를 주고받을 수 있어야 합니다. HTML과 JavaScript를 사용하여 간단한 클라이언트를 구현해봅시다.

<!DOCTYPE html>
<html>
<head>
    <title>실시간 주식 시세</title>
    <script>
        var socket = new WebSocket("ws://localhost:8080/ws");

        // 소켓 열릴 때 이벤트 처리
        socket.onopen = function(event) {
            console.log("웹소켓이 열렸습니다.");
        };

        // 메시지 수신시 이벤트 처리
        socket.onmessage = function(event) {
            var data = event.data;
            console.log("받은 메시지: " + data);
        };
    </script>
</head>
<body>
    <h1>실시간 주식 시세</h1>
</body>
</html>

위의 HTML은 웹소켓을 통해 서버와 통신할 수 있는 간단한 클라이언트를 구현한 것입니다.

마치며

이렇게하면 Go 언어를 이용하여 실시간 주식 시세와 같은 실시간 데이터를 처리하는 애플리케이션을 구현할 수 있습니다. Go 언어의 간결한 문법과 함께 높은 성능을 바탕으로, 웹소켓을 통한 실시간 통신 기능을 사용하여 다양한 실시간 애플리케이션을 만들 수 있습니다.