[go] Go 언어에서 웹소켓을 사용하여 실시간 스토어 상태 업데이트하기
본 포스트에서는 Go 언어를 사용하여 웹소켓을 구현하고, 이를 활용하여 실시간 스토어 상태를 업데이트하는 방법에 대해 알아보겠습니다.
목차
웹소켓이란?
웹소켓은 웹 애플리케이션과 웹 서버간 양방향 통신을 제공하는 프로토콜입니다. 웹소켓을 통해 클라이언트와 서버는 실시간으로 데이터를 주고받을 수 있으며, 이를 통해 실시간 업데이트 및 양방향 통신이 가능해집니다.
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 언어를 사용하여 웹소켓을 활용하여 실시간으로 스토어 상태를 업데이트하는 방법에 대해 알아보았습니다. 웹소켓을 통해 실시간으로 데이터를 주고받는 기능은 실시간 업데이트 및 양방향 통신에 유용하게 활용될 수 있습니다.
참고 문헌: