[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 공식 문서를 참고하시기 바랍니다.