[python] 웹 서버에 파일 압축/해제 기능 추가하기

이번에는 Python으로 웹 서버에 파일 압축과 해제 기능을 추가하는 방법에 대해 알아보겠습니다. 이 기능은 사용자가 웹 사이트를 통해 파일을 업로드하거나 다운로드할 때 특히 유용합니다.

1. 파일 압축하기

우선, 파일을 압축하기 위해 zipfile 모듈을 사용합니다. 다음은 파일을 압축하는 함수의 예시입니다.

import zipfile

def compress_files(file_list, output_filename):
    with zipfile.ZipFile(output_filename, 'w') as zipf:
        for file in file_list:
            zipf.write(file)

이 함수는 file_list에 있는 파일들을 output_filename으로 지정된 이름으로 압축합니다. zipfile.ZipFile 객체의 write 메서드를 사용하여 파일을 압축합니다.

2. 파일 해제하기

파일을 해제하기 위해서는 압축 파일의 경로와 해제할 위치를 지정해야 합니다. 아래는 파일을 해제하는 함수의 예시입니다.

import zipfile

def extract_files(zip_filename, extract_path):
    with zipfile.ZipFile(zip_filename, 'r') as zipf:
        zipf.extractall(extract_path)

zipfile.ZipFile 객체의 extractall 메서드를 사용하여 압축 파일 내의 모든 파일을 지정된 위치에 해제합니다.

3. Flask 웹 서버에 적용하기

이제 Flask 웹 서버에 파일 압축/해제 기능을 적용해보겠습니다. Flask의 request 모듈을 사용하여 클라이언트로부터 POST 요청을 받고, compress_files 함수와 extract_files 함수를 호출하여 파일을 압축하거나 해제합니다.

from flask import Flask, request
import os

app = Flask(__name__)

@app.route('/compress', methods=['POST'])
def compress():
    file_list = request.files.getlist('files')
    output_filename = request.form['filename']

    # 파일을 업로드한 후, 첨부된 파일들을 지정된 폴더에 저장

    compress_files(file_list, output_filename)

    # 압축된 파일을 다운로드할 수 있도록 응답

@app.route('/extract', methods=['POST'])
def extract():
    zip_file = request.files['file']
    extract_path = request.form['path']

    # 압축 파일을 업로드한 후, 지정된 폴더에 저장

    extract_files(zip_file, extract_path)

    # 파일을 해제한 후, 성공적으로 완료되었음을 응답

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

이 예시 코드는 ‘/compress’와 ‘/extract’ 엔드포인트를 정의하며, 각각 파일을 압축하고 해제하는 작업을 수행합니다. 클라이언트가 요청을 보내면 해당 엔드포인트의 함수가 실행되며, 요청에서 필요한 파일과 경로를 받아와서 압축 또는 해제 작업을 수행합니다.

이제 Python 웹 서버에 파일 압축과 해제 기능을 추가하는 방법에 대해 알게 되었습니다. 이 기능은 파일 관리 및 배포에 유용하게 사용될 수 있으며, 다양한 웹 애플리케이션에서 활용할 수 있습니다.

참고 자료