[go] Go 언어에서 웹소켓을 사용하여 채팅 애플리케이션 만들기

이번 글에서는 Go 언어를 사용하여 웹소켓을 이용한 간단한 채팅 애플리케이션을 구축하는 방법에 대해 알아보겠습니다. 웹소켓은 양방향 통신을 지원하며, 클라이언트와 서버 간의 실시간 데이터 전송에 적합합니다. 이를 통해 웹 기반의 실시간 채팅 애플리케이션을 구현할 수 있습니다.

목차

  1. 웹소켓 소개
  2. Go를 사용한 웹소켓 서버 구축
  3. 웹소켓 클라이언트 개발
  4. 테스트 및 실행
  5. 마무리

1. 웹소켓 소개

웹소켓은 HTTP보다 빠르고 가볍게 서버와 양방향 통신을 할 수 있는 프로토콜입니다. 웹소켓을 통해 클라이언트와 서버 간의 실시간 데이터를 주고받을 수 있으며, 실시간 채팅, 온라인 게임, 주식 시세 업데이트 등에 활용됩니다.

2. Go를 사용한 웹소켓 서버 구축

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

package main

import (
	"net/http"

	"github.com/gorilla/websocket"
)

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

func handleConnections(w http.ResponseWriter, r *http.Request) {
	// 웹소켓 업그레이드
	ws, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		return
	}

	// 클라이언트 연결 종료 시 연결 해제
	defer ws.Close()

	for {
		// 클라이언트로부터 메시지 읽기
		_, msg, err := ws.ReadMessage()
		if err != nil {
			break
		}

		// 받은 메시지를 다른 클라이언트에 전송
		err = ws.WriteMessage(websocket.TextMessage, msg)
		if err != nil {
			break
		}
	}
}

func main() {
	// 웹소켓 핸들러 등록
	http.HandleFunc("/chat", handleConnections)

	// 서버 시작
	http.ListenAndServe(":8080", nil)
}

3. 웹소켓 클라이언트 개발

웹소켓 클라이언트 개발은 JavaScript를 사용하여 웹 브라우저에서 진행됩니다.

// 웹소켓 연결
const ws = new WebSocket('ws://localhost:8080/chat');

// 메시지 수신 시 처리
ws.onmessage = function(event) {
    console.log('수신 메시지:', event.data);
}

// 메시지 전송
ws.send('안녕하세요!');

4. 테스트 및 실행

위의 Go 서버 코드를 작성한 뒤에는 터미널에서 해당 디렉토리로 이동하여 go run main.go 명령어를 사용하여 서버를 실행합니다. 그리고 웹 브라우저에서 JavaScript로 작성한 웹소켓 클라이언트를 실행하여 로컬호스트와 포트 8080에 접속합니다.

5. 마무리

이제 Go를 사용하여 간단한 웹소켓 채팅 애플리케이션을 만드는 방법을 알아보았습니다. 웹소켓을 통해 실시간 양방향 통신을 구현할 수 있으며, 이를 응용하여 다양한 웹 기반 실시간 애플리케이션을 개발할 수 있습니다.