[go] net/http 패키지를 사용한 멀티파트 폼 데이터 처리

웹 애플리케이션이나 웹 서비스를 개발하다 보면 클라이언트로부터 전달받은 멀티파트 폼 데이터를 처리해야 하는 경우가 많습니다. 멀티파트 폼 데이터란 파일 업로드와 함께 일반적인 텍스트 데이터도 함께 전송되는 HTTP 폼 데이터를 말합니다. Go 언어에서는 net/http 패키지를 사용하여 클라이언트로부터 전송된 멀티파트 폼 데이터를 처리할 수 있습니다.

멀티파트 폼 데이터 파싱

net/http 패키지의 Request 객체를 통해 멀티파트 폼 데이터를 파싱할 수 있습니다. 클라이언트로부터의 요청을 처리하는 핸들러 함수에서 r.ParseMultipartForm 함수를 사용하여 멀티파트 폼 데이터를 파싱할 수 있습니다.

func uploadHandler(w http.ResponseWriter, r *http.Request) {
    err := r.ParseMultipartForm(10 << 20) // 최대 10MB 크기의 폼 데이터 처리
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // 멀티파트 폼 데이터에서 파일명과 값 가져오기
    file, fileHeader, err := r.FormFile("file")
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }
    defer file.Close()

    // 파일 처리
    // ...
}

위 예제에서는 r.ParseMultipartForm 함수를 사용하여 최대 10MB 크기의 멀티파트 폼 데이터를 파싱한 후, r.FormFile 함수를 사용하여 특정 필드명에 해당하는 파일 정보를 가져오는 방법을 보여줍니다.

파일 저장과 처리

멀티파트 폼 데이터에서 가져온 파일을 저장하거나 처리해야 하는 경우, Go 언어의 os 패키지와 io 패키지를 사용하여 파일을 저장하고 처리할 수 있습니다.

func uploadHandler(w http.ResponseWriter, r *http.Request) {
    // ...

    // 파일 저장
    dst, err := os.Create("uploads/" + fileHeader.Filename)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    defer dst.Close()

    if _, err := io.Copy(dst, file); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // 파일 처리
    // ...
}

위의 예제에서는 os.Create 함수를 사용하여 파일을 생성하고, io.Copy 함수를 사용하여 클라이언트로부터 전송된 파일 데이터를 새로 생성한 파일에 복사하는 방법을 보여줍니다.

멀티파트 폼 데이터를 처리하는 기술은 웹 개발에서 빈번하게 사용되므로, 이러한 처리를 위한 Go 언어의 net/http 패키지 활용은 매우 유용하며 효과적입니다. 원활한 데이터 처리를 위해 클라이언트와 서버 간의 통신을 위한 이러한 기술을 잘 숙지하는 것이 중요합니다.

참고 자료

위에서 언급된 내용은 Go 언어에서 net/http 패키지를 사용하여 멀티파트 폼 데이터를 처리하는 방법에 대한 간단한 예시입니다. 클라이언트의 요청에 따라 실제 개발 환경에 맞게 유연하게 처리될 수 있습니다.