[go] net/http 패키지를 사용한 웹 소켓 채팅 서버 구현

웹 소켓을 사용한 실시간 채팅 서비스는 사용자들 간의 실시간 대화를 가능하게 하므로 많은 웹 애플리케이션에서 사용됩니다. Go 언어의 net/http 패키지를 사용하면 간단하게 웹 소켓을 활용한 채팅 서버를 구현할 수 있습니다.

웹 소켓이란?

웹 소켓은 클라이언트와 서버 간 양방향 통신을 가능케 하는 웹 기술입니다. 일반적인 HTTP 프로토콜의 단방향 통신과는 달리, 웹 소켓은 지속적인 연결을 통해 실시간으로 데이터를 주고받을 수 있습니다.

웹 소켓을 구현하기 위한 Go 패키지

Go 언어에서 웹 소켓을 구현하려면 github.com/gorilla/websocket 패키지를 사용하면 됩니다. 간편한 API와 사용법으로 대표적인 웹 소켓 라이브러리 중 하나입니다.

웹 소켓 채팅 서버 구현하기

아래는 gorilla/websocket 패키지를 사용하여 간단한 웹 소켓 채팅 서버를 구현하는 예제 코드입니다.

package main

import (
	"log"
	"net/http"

	"github.com/gorilla/websocket"
)

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

func handleConnections(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
		}
		// 받은 메시지를 모든 클라이언트에게 전달
		err = conn.WriteMessage(websocket.TextMessage, msg)
		if err != nil {
			log.Println(err)
			return
		}
	}
}

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

이 코드는 클라이언트로부터 메시지를 읽은 후, 해당 메시지를 다른 클라이언트에게 브로드캐스팅하는 웹 소켓 채팅 서버를 구현한 것입니다.

마무리

위 예제를 통해 net/http 패키지와 gorilla/websocket 패키지를 사용하여 웹 소켓을 활용한 채팅 서버를 구현하는 방법에 대해 알아보았습니다. 이를 기반으로 더 다양한 기능을 추가하여 실제 서비스에 적용할 수 있습니다.

더 많은 정보와 상세한 사용법은 gorilla/websocket 공식 문서를 참고하시기 바랍니다.