고급 PHP 프로그래밍 – 데이터베이스 프로그래밍 – 4 – 데이터베이스 마이그레이션

고급 PHP 프로그래밍 - 데이터베이스 프로그래밍 - 4 - 데이터베이스 마이그레이션
고급 PHP 프로그래밍 – 데이터베이스 프로그래밍 – 4 – 데이터베이스 마이그레이션

고급 PHP 프로그래밍 – 데이터베이스 프로그래밍 – 데이터베이스 마이그레이션

안녕하세요~ 😊
이번 시간에는 웹 개발자라면 반드시 익혀야 할 **데이터베이스 마이그레이션(Database Migration)**에 대해 알아보겠습니다!

마이그레이션이라고 하면 뭔가 복잡하게 들릴 수 있지만, 쉽게 말하면 **”데이터베이스의 구조나 데이터를 변경하거나 이동하는 작업”**을 뜻합니다.
예를 들어, 테이블을 새로 만들거나 컬럼을 추가하거나, 데이터를 백업했다가 복원하거나, 개발 서버의 DB를 운영 서버로 옮기는 것 등이 모두 마이그레이션이에요!


마이그레이션이 왜 중요할까요?

웹 서비스를 운영하다 보면 다음과 같은 상황이 자주 발생해요:

  • 새로운 기능을 추가하면서 DB 구조(스키마)를 바꿔야 할 때
  • 개발 서버에서 만든 테이블을 운영 서버에 반영할 때
  • 버전 관리처럼 데이터베이스도 단계별로 관리하고 싶을 때
  • 실수로 데이터를 날려서 복원해야 할 때

그럴 때 필요한 것이 바로 체계적인 마이그레이션 관리입니다!


1. 마이그레이션의 대표적인 작업 종류

작업 설명
테이블 생성 새로운 테이블을 생성함
컬럼 추가/수정/삭제 테이블 구조 변경
인덱스 생성/삭제 검색 성능 향상을 위한 조정
데이터 이전 테이블 간 데이터 복사 또는 이동
백업/복원 데이터 보호를 위한 저장과 복구

2. SQL로 직접 마이그레이션 하기 (기초 방법)

PHP에서는 직접 SQL 쿼리를 작성해서 마이그레이션 작업을 수행할 수 있어요.

🧪 예제 1: 테이블 생성

$sql = "CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";
mysqli_query($conn, $sql);

🧪 예제 2: 컬럼 추가

$sql = "ALTER TABLE users ADD COLUMN phone VARCHAR(20)";
mysqli_query($conn, $sql);

🧪 예제 3: 컬럼 수정

$sql = "ALTER TABLE users MODIFY email VARCHAR(200) NOT NULL";
mysqli_query($conn, $sql);

🧪 예제 4: 컬럼 삭제

$sql = "ALTER TABLE users DROP COLUMN phone";
mysqli_query($conn, $sql);

3. mysqldump를 이용한 백업과 복원

데이터베이스 전체를 파일로 백업하고, 다시 복원하는 방법도 매우 중요합니다.

✅ 데이터베이스 백업

mysqldump -u root -p test_db > test_db_backup.sql
  • -u root: 사용자 이름
  • -p: 비밀번호 입력
  • test_db: 백업할 DB 이름
  • >: 백업 파일로 저장

✅ 데이터베이스 복원

mysql -u root -p test_db < test_db_backup.sql

이렇게 하면 전체 테이블과 데이터가 이전 상태로 복원됩니다.


4. 마이그레이션 자동화 도구 (고급 방법)

✅ Laravel처럼 프레임워크를 쓴다면?

PHP 프레임워크를 사용할 경우 artisan migrate 같은 명령어로 쉽게 마이그레이션을 관리할 수 있어요.

php artisan make:migration create_users_table
php artisan migrate

→ 코드로 DB 구조를 정의하고, 버전별로 관리할 수 있어 매우 효율적입니다.


5. 마이그레이션을 버전처럼 관리하는 팁

전략 설명
순차적 SQL 파일 관리 001_create_users.sql, 002_add_column.sql 등으로 파일 이름 규칙 정하기
버전 테이블 만들기 migration_version 테이블을 만들어 현재 DB 구조 버전 관리
실행 이력 기록 어떤 마이그레이션이 실행됐는지 로그 테이블에 기록
자동 적용 스크립트 작성 특정 폴더의 .sql 파일을 순서대로 실행하도록 PHP로 자동화

6. 실전 예제: 마이그레이션 자동 실행기

$files = glob("migrations/*.sql");
sort($files);

foreach ($files as $file) {
    $sql = file_get_contents($file);
    if (mysqli_multi_query($conn, $sql)) {
        echo "✅ 실행됨: " . basename($file) . "<br>";
        while (mysqli_more_results($conn)) {
            mysqli_next_result($conn);
        }
    } else {
        echo "❌ 오류 발생: " . mysqli_error($conn) . "<br>";
        break;
    }
}

이 스크립트를 이용하면 개발할 때마다 .sql 파일을 자동으로 실행할 수 있어요!


7. 마이그레이션 시 주의사항

주의점 설명
실서버에 직접 실행 금지 항상 개발/테스트 환경에서 먼저 검증 후 적용
백업 필수 모든 마이그레이션 전에 mysqldump로 백업 권장
트랜잭션 사용 여러 쿼리 동시 수행 시 오류 발생하면 rollback 하도록 설정
인덱스 조심 인덱스 추가/삭제는 성능에 큰 영향 있음. 사전 테스트 필수
사용자 데이터 손실 주의 DROP, DELETE 쿼리는 매우 신중하게 실행할 것!

8. 마이그레이션 정리 요약

작업 유형 사용 예
테이블 생성 CREATE TABLE
컬럼 추가 ALTER TABLE ADD
데이터 백업 mysqldump
데이터 복원 mysql < 파일.sql
자동화 SQL 실행 스크립트 or 프레임워크 사용
버전 관리 파일명 규칙 or 전용 테이블 이용

마무리하며 😊

데이터베이스 마이그레이션은 단순히 테이블을 바꾸는 작업이 아닙니다.
서비스를 운영하면서 발생할 수 있는 모든 변화에 유연하게 대응하기 위한 중요한 관리 능력이에요.

마이그레이션을 체계적으로 관리할 줄 안다면
팀 개발에서 버전 충돌을 방지하고, 운영 환경의 안정성을 크게 높일 수 있답니다!

앞으로는 어떤 스키마 변경이나 기능 추가를 하실 때
“이걸 마이그레이션으로 정리해서 남겨야지!” 라는 습관을 꼭 들여보세요.

오늘도 멋진 개발자에 한 걸음 더 가까워지셨습니다! 💻🚀🎉
다음 편에서는 PHP와 MySQL의 성능을 높이는 인덱스 활용법과 최적화 전략도 소개해드릴게요!

답글 남기기