[go] Go 언어에서 웹소켓을 사용하여 실시간 스토어 상태 업데이트하기

이번에는 Go 언어를 사용하여 웹소켓을 구현하여 실시간으로 스토어의 상태를 업데이트하는 방법에 대해 알아보겠습니다.

목차

웹소켓 소개

웹소켓은 실시간 양방향 통신을 지원하는 프로토콜로, 클라이언트와 서버 간에 데이터를 주고받을 수 있습니다. 웹소켓을 통해 실시간으로 데이터를 업데이트하거나 이벤트를 전달할 수 있어 실시간 채팅, 주식 시세 업데이트, 게임 등 다양한 애플리케이션에서 활용됩니다.

Go 언어와 웹소켓 라이브러리

Go 언어에서는 gorilla/websocket 라이브러리를 활용하여 웹소켓을 쉽게 구현할 수 있습니다. 이 라이브러리를 사용하면 웹소켓 서버와 클라이언트를 간단하게 구현할 수 있습니다.

웹소켓 서버 구현하기

다음은 Go 언어를 사용하여 웹소켓 서버를 구현하는 간단한 예제 코드입니다.

package main

import (
	"fmt"
	"net/http"

	"github.com/gorilla/websocket"
)

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

func wsHandler(w http.ResponseWriter, r *http.Request) {
	conn, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		fmt.Println("웹소켓 연결 설정 실패:", err)
		return
	}
	defer conn.Close()

	// 웹소켓 연결 유지 및 메시지 처리
	for {
		_, msg, err := conn.ReadMessage()
		if err != nil {
			fmt.Println("메시지 읽기 실패:", err)
			break
		}
		fmt.Printf("받은 메시지: %s\n", msg)

		// 클라이언트에 메시지 전송
		err = conn.WriteMessage(websocket.TextMessage, msg)
		if err != nil {
			fmt.Println("메시지 전송 실패:", err)
			break
		}
	}
}

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

위 코드는 웹소켓 서버를 구현하는 예제로, 클라이언트에서 웹소켓 연결이 이루어지면 연결을 처리하고 메시지를 주고받을 수 있는 기본적인 기능이 포함되어 있습니다.

웹소켓 클라이언트 구현하기

이제 웹소켓 클라이언트를 구현해보겠습니다. 웹소켓 클라이언트에서는 서버에 연결하고 메시지를 주고받을 수 있습니다. 아래는 간단한 웹소켓 클라이언트 예제 코드입니다.

package main

import (
	"fmt"
	"log"

	"github.com/gorilla/websocket"
)

func main() {
	conn, _, err := websocket.DefaultDialer.Dial("ws://localhost:8080/ws", nil)
	if err != nil {
		log.Fatal("웹소켓 연결 실패:", err)
	}
	defer conn.Close()

	// 클라이언트에서 서버로 메시지 전송
	err = conn.WriteMessage(websocket.TextMessage, []byte("안녕하세요, 웹소켓 서버!"))
	if err != nil {
		log.Fatal("메시지 전송 실패:", err)
	}

	// 서버에서 오는 메시지 처리
	_, msg, err := conn.ReadMessage()
	if err != nil {
		log.Fatal("메시지 수신 실패:", err)
	}
	fmt.Printf("받은 메시지: %s\n", msg)
}

위 코드는 간단한 웹소켓 클라이언트를 구현한 예제로, 서버에 연결하고 메시지를 보내고 받습니다.

결론

이제 Go 언어와 웹소켓 라이브러리를 사용하여 웹소켓을 구현하고, 실시간으로 스토어의 상태를 업데이트하는 방법에 대해 알아보았습니다. 웹소켓을 통해 실시간으로 데이터를 주고받을 수 있어, 실시간 업데이트가 필요한 애플리케이션을 개발할 때 유용하게 활용할 수 있습니다.