[파이썬] RESTful API를 위한 파일 업로드 및 다운로드

RESTful API는 웹 개발에서 매우 중요한 개념입니다. 이는 HTTP 메서드를 통해 리소스를 다루는 일관된 방법을 제공하여 클라이언트와 서버 간의 통신을 간단하고 효율적으로 처리할 수 있게 합니다.

파일 업로드 및 다운로드는 대부분의 웹 애플리케이션에서 필요한 기능입니다. 이 기능을 RESTful API로 구현하는 방법에 대해 살펴보겠습니다. Python의 Flask 라이브러리를 사용하여 구현할 것입니다.

파일 업로드

파일을 업로드하기 위해서는 클라이언트는 HTTP POST 요청을 통해 파일을 서버에 보내야 합니다. 서버는 이 요청을 받고 파일을 처리하여 저장해야 합니다.

Flask에서는 request 객체를 사용하여 POST 요청의 데이터를 처리할 수 있습니다. 파일 업로드를 위해서는 request.files 객체를 사용합니다.

from flask import Flask, request

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_file():
    file = request.files['file']  # 클라이언트에서 전달된 파일
    file.save('uploads/' + file.filename)  # 파일 저장

    return 'File uploaded successfully.'

if __name__ == '__main__':
    app.run()

위의 코드에서 '/upload' 엔드포인트는 파일을 업로드하기 위한 URL입니다. 클라이언트는 이 URL에 HTTP POST 요청을 보내야 합니다. 요청에는 file이라는 이름으로 파일 데이터를 담아 보내야 합니다. 서버는 파일을 file.save() 메서드를 통해 저장합니다.

파일 다운로드

파일 다운로드는 클라이언트가 서버로부터 파일을 가져오는 것을 의미합니다. RESTful API에서 파일 다운로드를 구현하기 위해서는 클라이언트가 GET 요청을 통해 파일의 경로를 전달하고, 서버는 해당 파일을 전송해야 합니다.

from flask import Flask, send_file

app = Flask(__name__)

@app.route('/download/<filename>', methods=['GET'])
def download_file(filename):
    return send_file('uploads/' + filename, as_attachment=True)

if __name__ == '__main__':
    app.run()

위의 코드에서 '/download/<filename>' 엔드포인트는 파일을 다운로드하기 위한 URL입니다. 클라이언트는 이 URL에 HTTP GET 요청을 보내야 합니다. 요청 URL의 <filename> 부분에는 다운로드할 파일의 이름이 포함되어야 합니다.

서버는 send_file() 함수를 사용하여 파일을 전송합니다. as_attachment=True 옵션은 파일 다운로드를 위해 첨부 파일로 다운로드 될 수 있도록 설정합니다.

결론

이상으로 RESTful API를 통한 파일 업로드 및 다운로드를 구현하는 방법에 대해 알아보았습니다. Flask라이브러리를 사용하여 간편하게 구현할 수 있습니다. RESTful API를 사용하면 클라이언트와 서버 간의 통신을 일관되고 효율적으로 처리할 수 있으므로, 웹 애플리케이션 개발에서 중요한 개념이라고 할 수 있습니다.