[go] net/http 패키지를 사용한 빠른 파일 전송 구현

이 글에서는 Go 언어의 net/http 패키지를 사용하여 파일을 빠르고 안전하게 전송하는 방법을 알아볼 것이다.

웹 서버 설정

먼저, 파일 전송을 위한 간단한 웹 서버를 설정하자. 다음 코드에서는 /upload 경로에 handleFileUpload 함수를 할당하여 파일을 받고, /files/로 시작하는 모든 요청은 http.FileServer를 통해 파일을 제공한다.

package main

import (
    "net/http"
)

func handleFileUpload(w http.ResponseWriter, r *http.Request) {
    // 파일 업로드 처리
}

func main() {
    http.HandleFunc("/upload", handleFileUpload)
    http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("uploads"))))
    http.ListenAndServe(":8080", nil)
}

파일 업로드 처리

다음으로, 파일을 업로드하는 handleFileUpload 함수를 작성해야 한다. 요청에서 파일을 읽고, 원하는 경로에 저장하는 방법은 다음과 같다.

func handleFileUpload(w http.ResponseWriter, r *http.Request) {
    r.ParseMultipartForm(10 << 20) // 최대 10MB 파일 크기
    file, handler, err := r.FormFile("file")
    if err != nil {
        // 에러 처리
        return
    }
    defer file.Close()
    // 파일 저장
}

파일 다운로드

또한, 웹 서버에서 파일을 다운로드 받기 위해서는 URL 경로에 따라 파일을 제공해야 한다. 위에서 설정한 /files/ 경로에 파일이 있을 경우, 해당 파일을 클라이언트에게 제공한다.

func main() {
    http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("uploads"))))
    http.ListenAndServe(":8080", nil)
}

이제 Go 언어의 net/http 패키지를 사용하여 파일 전송을 구현하는 방법을 알았다. 이를 통해 빠르고 안전하게 파일을 전송할 수 있게 되었다.

참고문헌: