[go] Go 언어를 사용하여 웹소켓으로 파일 전송하기

이번에는 Go 언어를 사용하여 웹소켓을 통해 파일을 전송하는 방법에 대해 알아보겠습니다. 웹소켓은 실시간 양방향 통신을 제공하여 파일 전송에 적합한 프로토콜입니다. Go 언어는 효율적이고 빠른 속도로 파일을 전송할 수 있도록 지원합니다.

구현하기

먼저, gorilla/websocket 라이브러리를 사용하여 Go에서 웹소켓 서버를 구현합니다.

package main

import (
    "net/http"
    "github.com/gorilla/websocket"
)

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

func wsHandler(w http.ResponseWriter, r *http.Request) {
    conn, _ := upgrader.Upgrade(w, r, nil)
    defer conn.Close()

    for {
        _, message, _ := conn.ReadMessage()
        // 파일 처리 로직
    }
}

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

위의 예제에서 /ws 엔드포인트를 통해 웹소켓 연결을 설정하고, 파일 처리 로직을 추가하면 됩니다.

클라이언트 구현

웹소켓 클라이언트 측은 HTML과 JavaScript를 사용하여 구현할 수 있습니다. 파일을 선택한 후, WebSocket을 통해 서버로 파일을 전송하면 됩니다.

const socket = new WebSocket('ws://localhost:8080/ws');

socket.onopen = function(event) {
    console.log('WebSocket is open now.');
}

socket.onmessage = function(event) {
    console.log('Message from server:', event.data);
}

function sendFile(file) {
    const reader = new FileReader();
    reader.onload = function(event) {
        const data = event.target.result;
        socket.send(data);
    };
    reader.readAsBinaryString(file);
}

const inputElement = document.getElementById('fileInput');
inputElement.addEventListener('change', function(event) {
    const file = event.target.files[0];
    sendFile(file);
});

위의 JavaScript 예제는 웹소켓을 통해 파일을 서버로 전송하는 방법을 보여줍니다.

결론

Go 언어를 사용하여 웹소켓으로 파일을 전송하는 방법은 매우 간단합니다. gorilla/websocket 라이브러리를 이용하면 쉽게 웹소켓 서버를 구현할 수 있고, 클라이언트 측에서는 JavaScript를 사용하여 간단히 파일을 전송할 수 있습니다.

이를 통해 빠르고 효율적으로 파일을 전송하는 웹 어플리케이션을 구현할 수 있습니다.

더 자세한 내용은 gorilla/websocket 공식 문서를 참고하세요.