[go] Go 언어로 웹소켓을 사용하여 실시간 캘린더 애플리케이션 만들기

이번 블로그 포스트에서는 Go 언어와 웹소켓을 활용하여 실시간으로 업데이트되는 캘린더 애플리케이션을 만드는 방법을 알아보겠습니다. 캘린더 애플리케이션은 사용자가 일정을 추가하고, 업데이트하며, 실시간으로 다른 사용자들과 공유할 수 있는 기능을 제공할 것입니다.

목표

환경 설정

먼저 Go 언어를 설치하고 환경을 설정합니다. 그리고 웹소켓을 지원하는 라이브러리를 설치합니다.

go get github.com/gorilla/websocket

웹소켓 서버 구축

다음으로 Go 언어로 웹소켓 서버를 구축합니다.

package main

import (
    "net/http"

    "github.com/gorilla/websocket"
)

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

func handler(w http.ResponseWriter, r *http.Request) {
    conn, _ := upgrader.Upgrade(w, r, nil)
    for {
        messageType, p, _ := conn.ReadMessage()
        if err := conn.WriteMessage(messageType, p); err != nil {
            return 
        }
    }
}

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

위 코드는 기본적인 웹소켓 서버를 구현한 것으로, 클라이언트와의 연결을 수립한 후에 메시지를 읽고 다시 쓰는 간단한 기능을 수행합니다.

클라이언트 구현

이제 클라이언트 측을 구현해야 합니다. HTML, CSS 및 JavaScript를 사용하여 웹 인터페이스를 개발하고, 웹소켓을 통해 서버와 통신하도록 구현합니다.

<!DOCTYPE html>
<html>
<head>
    <title>실시간 캘린더</title>
</head>
<body>
    <input type="text" id="eventInput">
    <button onclick="addEvent()">일정 추가</button>
    <div id="events"></div>

    <script>
        var socket = new WebSocket("ws://localhost:8080/ws");

        socket.onmessage = function(event) {
            var eventsDiv = document.getElementById("events");
            eventsDiv.innerHTML += "<p>" + event.data + "</p>";
        };

        function addEvent() {
            var eventInput = document.getElementById("eventInput");
            socket.send(eventInput.value);
            eventInput.value = "";
        }
    </script>
</body>
</html>

위 코드는 입력란에 일정을 추가하고 추가된 일정을 실시간으로 업데이트하여 표시하는 간단한 웹 페이지를 구현한 것입니다.

마치며

이제 Go 언어를 사용하여 웹소켓을 활용하여 실시간으로 업데이트되는 캘린더 애플리케이션을 만드는 방법을 살펴보았습니다. 웹소켓을 통해 클라이언트와 서버 간에 양방향 통신을 가능하게 하여 실시간으로 데이터를 공유할 수 있습니다. 이러한 방식은 실시간 협업 애플리케이션 또는 채팅 애플리케이션을 개발할 때 매우 유용하게 사용될 수 있습니다.

참고문헌: