[go] Go 언어를 사용한 RESTful API의 파일 업로드 처리

이 문서에서는 Go 언어를 사용하여 RESTful API에서 파일 업로드를 처리하는 방법에 대해 알아보겠습니다.

요구사항

아래는 파일 업로드를 처리하기 위해 필요한 요구사항입니다.

파일 업로드 핸들러 생성

첫 번째로, 파일 업로드를 처리하기 위해 HTTP 핸들러를 생성해야 합니다. 아래와 같이 http.HandleFunc()을 사용하여 업로드 요청을 처리할 핸들러를 등록할 수 있습니다.

import (
    "fmt"
    "io"
    "net/http"
    "os"
)

func uploadFile(w http.ResponseWriter, r *http.Request) {
    // 파일을 읽고 저장하기 위한 코드 작성
}
    
func main() {
    // 파일 업로드 핸들러 등록
    http.HandleFunc("/upload", uploadFile)
    
    // 서버 시작
    fmt.Println("Server started on port 8080")
    http.ListenAndServe(":8080", nil)
}

파일 업로드 처리

실제 파일 업로드를 처리하기 위해서는 HTTP 요청에서 multipart/form-data를 사용하여 파일을 전송해야 합니다. r.FormFile() 함수를 사용하여 전송된 파일을 읽은 후, 이를 원하는 위치에 저장할 수 있습니다.

func uploadFile(w http.ResponseWriter, r *http.Request) {
    // 파일 읽기
    file, handler, err := r.FormFile("file")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    defer file.Close()

    // 실제 파일 저장
    f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    defer f.Close()

    // 파일 복사
    io.Copy(f, file)

    // 업로드 완료 메시지 출력
    fmt.Fprintf(w, "File uploaded successfully")
}

위 코드에서는 r.FormFile() 함수를 사용하여 file이라는 이름의 파일을 읽습니다. 이후, handler에는 파일의 메타데이터가 저장되어 있습니다. 파일은 os.OpenFile() 함수를 사용하여 원하는 경로에 저장됩니다.

서버 실행

서버를 실행하기 위해 터미널에서 다음 명령을 입력합니다.

go run main.go

서버가 성공적으로 실행되면, Server started on port 8080 메시지가 출력됩니다. 이제 클라이언트에서 /upload 엔드포인트로 multipart/form-data 형식의 파일을 전송하면, 서버는 해당 파일을 받아 디스크에 저장할 것입니다.

결론

Go 언어를 사용하여 RESTful API에서 파일 업로드를 처리하는 방법을 살펴보았습니다. net/http 패키지를 사용하여 파일을 읽고 저장할 수 있으며, multipart/form-data 형식의 요청을 처리할 수 있습니다. 파일 업로드는 많은 웹 애플리케이션에서 중요한 기능이므로, 이러한 방법을 활용하여 안전하고 효율적인 파일 업로드 처리를 구현할 수 있습니다.

참고 자료