웹 소켓(WebSocket)은 웹 애플리케이션이 서버와 양방향 통신을 할 수 있게 해주는 기술입니다. Go 언어에서는 net/http 패키지를 활용하여 웹 소켓 통신을 구현할 수 있습니다. 이번 글에서는 net/http 패키지를 사용하여 간단한 웹 소켓 통신을 구현하는 방법에 대해 알아보겠습니다.
1. 웹 소켓 핸들러 등록
먼저, 웹 소켓 통신을 하기 위해 net/http 패키지를 사용하여 서버를 구현합니다. 이때 http 패키지의 HandleFunc
함수를 사용하여 웹 소켓 업그레이드 요청을 처리하는 핸들러를 등록합니다.
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 {
// 에러 처리
return
}
defer conn.Close()
// 웹 소켓 연결 처리
}
위 코드에서 websocketHandler
함수는 웹 소켓 연결 요청을 처리하며, upgrader
를 사용하여 HTTP 연결을 웹 소켓 연결로 업그레이드합니다.
2. 웹 소켓 연결 처리
웹 소켓 연결이 성공하면, 연결된 클라이언트와 서버 간의 양방향 통신을 구현할 수 있습니다. 아래의 코드는 웹 소켓 연결이 성공했을 때 메시지를 읽고 다시 클라이언트로 메시지를 보내는 예제입니다.
func websocketHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
// 에러 처리
return
}
defer conn.Close()
for {
messageType, p, err := conn.ReadMessage()
if err != nil {
// 에러 처리
break
}
if err := conn.WriteMessage(messageType, p); err != nil {
// 에러 처리
break
}
}
}
3. 웹 소켓 클라이언트 구현
웹 소켓 클라이언트를 구현하여 서버와 통신할 수 있습니다. 다음은 github.com/gorilla/websocket
패키지를 사용한 웹 소켓 클라이언트의 예제 코드입니다.
package main
import (
"fmt"
"github.com/gorilla/websocket"
"net/url"
"os"
"os/signal"
"time"
)
func main() {
u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/ws"}
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
// 에러 처리
}
defer c.Close()
done := make(chan struct{})
go func() {
defer close(done)
for {
_, message, err := c.ReadMessage()
if err != nil {
// 에러 처리
return
}
fmt.Println(string(message))
}
}()
err = c.WriteMessage(websocket.TextMessage, []byte("Hello, WebSocket!"))
if err != nil {
// 에러 처리
return
}
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
for {
select {
case <-done:
return
case <-interrupt:
// 연결 종료 처리
return
}
}
}
위 코드는 웹 소켓 클라이언트를 구현한 예제로, 서버와 연결하여 메시지를 송수신할 수 있습니다.
4. 마치며
이번 글에서는 Go 언어의 net/http 패키지를 사용하여 간단한 웹 소켓 통신을 구현하는 방법에 대해 알아보았습니다. 웹 소켓을 통해 실시간 양방향 통신을 구현할 수 있으며, 필요에 따라 보안을 강화하거나 메시지 형식을 정의할 수 있습니다. 웹 소켓을 통해 더 실시간적인 웹 애플리케이션을 개발할 수 있습니다.
참고문헌: