[파이썬] shutil과 데이터베이스 간의 통합 작업하기

데이터베이스는 소프트웨어 애플리케이션에서 중요한 역할을 수행합니다. 데이터베이스에는 기업 및 개인의 정보를 저장하고 관리하는 데 사용되는 구조화된 데이터가 포함됩니다. 이러한 데이터를 백업 또는 복사하거나 데이터베이스 간에 이동해야하는 경우도 있습니다. 이때 shutil 라이브러리를 사용하여 데이터베이스와 파일 시스템 간의 통합 작업을 수행할 수 있습니다. 이번 포스트에서는 이러한 작업을 어떻게 수행하는지 알아보겠습니다.

shutil 라이브러리란?

shutil은 Python 표준 라이브러리 중 하나로, 파일 및 디렉토리 작업을 수행하는 데 사용됩니다. shutil은 다양한 기능을 제공하여 파일 복사, 디렉토리 생성, 파일 이동 등과 같은 작업을 쉽게 수행할 수 있습니다. 이 라이브러리를 사용하여 데이터베이스의 백업 파일을 생성하거나 다른 데이터베이스로 데이터를 이동하는 등의 작업을 수행할 수 있습니다.

데이터베이스 백업하기

데이터베이스의 백업은 중요한 작업입니다. 데이터의 손실을 방지하기 위해 정기적으로 백업 파일을 생성하는 것이 좋습니다. shutil을 사용하여 데이터베이스의 백업 파일을 생성하는 예제를 살펴보겠습니다.

import shutil
import sqlite3

def backup_database():
    db_file = 'example.db'
    backup_file = 'example_backup.db'
    shutil.copy2(db_file, backup_file)
    print(f"Database backup created: {backup_file}")

backup_database()

위의 예제에서는 shutil.copy2() 함수를 사용하여 example.db라는 데이터베이스 파일을 example_backup.db란 이름으로 복사합니다. copy2() 함수는 파일을 복사하는데 사용되며, 파일의 메타데이터(권한, 수정일자 등)도 함께 복사합니다. 백업 파일 생성 후 해당 파일의 경로가 출력됩니다.

데이터베이스 이동하기

데이터베이스를 다른 위치로 이동하는 것은 데이터베이스 관리 작업 중 하나입니다. 이를 위해 shutil.move() 함수를 사용하여 데이터베이스 파일을 다른 디렉토리로 이동하는 예제를 살펴보겠습니다.

import shutil
import os

def move_database():
    db_file = 'example.db'
    new_location = 'new_directory/example.db'
    shutil.move(db_file, new_location)
    print(f"Database moved to: {new_location}")

move_database()

위의 예제에서는 shutil.move() 함수를 사용하여 example.db라는 데이터베이스 파일을 new_directory라는 디렉토리로 이동합니다. 이동 후 해당 파일의 새로운 경로가 출력됩니다. 이동시키는 파일이 이미 해당 위치에 존재하는 경우, 해당 파일은 덮어씌워지게 됩니다.

데이터베이스 복제하기

때로는 하나의 데이터베이스 내용을 다른 데이터베이스로 복제해야하는 경우가 있을 수 있습니다. 이를 위해서는 shutil 라이브러리와 함께 데이터베이스 연결을 위한 라이브러리를 사용해야합니다. 예를 들어 sqlite3를 사용하여 example.db 데이터베이스의 내용을 clone.db라는 새로운 데이터베이스로 복제하는 예제를 살펴보겠습니다.

import shutil
import sqlite3

def clone_database():
    source_db = 'example.db'
    target_db = 'clone.db'

    # 데이터베이스 연결 생성
    connection = sqlite3.connect(source_db)
    cursor = connection.cursor()

    # 데이터베이스 복제
    cursor.execute(".dump")
    with open(target_db, 'w') as file:
        for line in cursor.fetchall():
            file.write(line[0])
    
    # 연결 및 커서 종료
    cursor.close()
    connection.close()
    
    print(f"Database cloned to: {target_db}")

clone_database()

위의 예제에서는 sqlite3 라이브러리를 사용하여 example.db 데이터베이스의 내용을 복제합니다. cursor.execute(".dump")를 사용하여 데이터베이스의 내용을 SQL 문 형식으로 추출하고, 추출한 내용을 clone.db 파일에 씁니다. 복제 후 해당 파일의 경로가 출력됩니다.

마치며

Python의 shutil 라이브러리를 사용하여 데이터베이스와 파일 시스템 간의 통합 작업을 수행할 수 있습니다. 데이터베이스의 백업 파일 생성, 데이터베이스의 이동, 데이터베이스의 내용 복제 등 다양한 작업을 shutil을 활용하여 간단하게 수행할 수 있습니다. 이를 통해 데이터베이스를 보호하고 유지 관리하는 데 도움이 될 수 있습니다.