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

본 포스트에서는 Go 언어를 사용하여 웹소켓을 구현하고, 이를 활용하여 실시간 스토어 상태를 업데이트하는 방법에 대해 알아보겠습니다.

목차

  1. 웹소켓이란?
  2. Go 언어에서의 웹소켓 구현
  3. 실시간 스토어 상태 업데이트

웹소켓이란?

웹소켓은 웹 애플리케이션과 웹 서버간 양방향 통신을 제공하는 프로토콜입니다. 웹소켓을 통해 클라이언트와 서버는 실시간으로 데이터를 주고받을 수 있으며, 이를 통해 실시간 업데이트 및 양방향 통신이 가능해집니다.

Go 언어에서의 웹소켓 구현

Go 언어에서는 gorilla/websocket 패키지를 사용하여 웹소켓을 간편하게 구현할 수 있습니다. 아래는 간단한 예제 코드로, Go 언어에서 웹소켓을 구현하는 방법을 보여줍니다.

package main

import (
	"log"
	"net/http"

	"github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
	CheckOrigin: func(r *http.Request) bool {
		return true
	},
}

func main() {
	http.HandleFunc("/ws", func(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
			}
			log.Printf("Received: %s", msg)
		}
	})

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

실시간 스토어 상태 업데이트

이제, 웹소켓을 통해 클라이언트와 서버간 실시간으로 데이터를 주고받을 수 있는 환경이 구성되었습니다. 이를 활용하여 스토어 상태를 실시간으로 업데이트하는 방법은 다음과 같습니다.

// store.go
package main

type Store struct {
	// 스토어 상태 구조체 정의
}

func (s *Store) UpdateState(newState State) {
	// 스토어 상태 업데이트 로직
}

// main.go
package main

import (
	"encoding/json"
	"log"
	"net/http"

	"github.com/gorilla/websocket"
)

func main() {
	// 웹소켓 핸들러 및 기타 로직 구현

	store := &Store{}

	http.HandleFunc("/update", func(w http.ResponseWriter, r *http.Request) {
		// 새로운 상태 데이터를 받아옴
		var newState State
		err := json.NewDecoder(r.Body).Decode(&newState)
		if err != nil {
			http.Error(w, err.Error(), http.StatusBadRequest)
			return
		}

		// 스토어 상태 업데이트
		store.UpdateState(newState)

		// 웹소켓을 통해 모든 클라이언트에게 업데이트된 상태 전송
		// conn.WriteJSON(newState)
	})

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

위 코드에서 /update 엔드포인트는 새로운 상태 데이터를 받아와서, 스토어를 업데이트한 뒤 웹소켓을 통해 모든 클라이언트에게 업데이트된 상태를 전송합니다. 클라이언트에서는 웹소켓을 통해 받은 상태 데이터를 실시간으로 화면에 업데이트함으로써, 실시간 스토어 상태를 확인할 수 있습니다.

이제, Go 언어를 사용하여 웹소켓을 활용하여 실시간으로 스토어 상태를 업데이트하는 방법에 대해 알아보았습니다. 웹소켓을 통해 실시간으로 데이터를 주고받는 기능은 실시간 업데이트 및 양방향 통신에 유용하게 활용될 수 있습니다.

참고 문헌: