[go] Go 언어의 웹 소켓 프로그래밍

Go 언어는 빠른 속도와 효율적인 동시성 처리로 인기 있는 프로그래밍 언어입니다. 웹 소켓은 양방향 통신을 지원하여 웹 애플리케이션에서 실시간 데이터를 주고받는 데 사용됩니다. Go 언어로 웹 소켓을 구현하는 방법을 살펴봅시다.

  1. 웹 소켓 라이브러리 설치
  2. 웹 소켓 서버 구현
  3. 웹 소켓 클라이언트 구현

1. 웹 소켓 라이브러리 설치

Go 언어에서는 gorilla/websocket 라이브러리를 사용하여 웹 소켓을 구현할 수 있습니다. 아래 명령을 사용하여 라이브러리를 설치합니다.

go get github.com/gorilla/websocket

2. 웹 소켓 서버 구현

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

package main

import (
	"net/http"

	"github.com/gorilla/websocket"
)

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

func websocketHandler(w http.ResponseWriter, r *http.Request) {
	conn, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		// error handling
	}

	// 클라이언트로부터 메시지 수신
	for {
		_, msg, err := conn.ReadMessage()
		if err != nil {
			// error handling
			break
		}
		// 메시지 처리
	}
}

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

3. 웹 소켓 클라이언트 구현

웹 소켓 클라이언트를 구현하는 방법은 브라우저 측 JavaScript를 사용하거나 다른 언어로 구현할 수 있습니다. Go 언어로 웹 소켓 클라이언트를 구현하는 방법은 다음과 같습니다.

package main

import (
	"log"
	"net/url"
	"os"

	"github.com/gorilla/websocket"
)

func main() {
	u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/ws"}
	c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
	if err != nil {
		// error handling
	}
	defer c.Close()

	// 서버로 메시지 전송
	err = c.WriteMessage(websocket.TextMessage, []byte("Hello, world!"))
	if err != nil {
		// error handling
	}

	// 서버로부터 메시지 수신
	_, msg, err := c.ReadMessage()
	if err != nil {
		// error handling
	}

	log.Printf("Received: %s", msg)
}

이러한 방식으로 Go 언어를 사용하여 웹 소켓을 구현할 수 있습니다. 더 많은 기능을 추가하여 실제 프로젝트에 적용해 보세요!


본 포스팅은 gorilla/websocketA Beginner’s Guide to WebSockets를 참고하여 작성되었습니다.