
고급 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의 성능을 높이는 인덱스 활용법과 최적화 전략도 소개해드릴게요!