파이썬 장고에서 마이그레이션(Migration)이란 무엇이며, 어떻게 사용하는가요?
_____마이그레이션(Migration)은 장고 프로젝트에서 데이터베이스 스키마(테이블 구조)를 생성, 변경, 삭제하는 과정을 말합니다. 즉, 모델(Model) 클래스에 정의된 데이터베이스 구조를 실제 데이터베이스에 반영하는 역할을 합니다.
---
왜 마이그레이션이 필요한가요?
프로젝트 개발 중에 데이터베이스 구조가 변경될 때마다, 일일이 직접 SQL문을 작성하고 적용하는 것은 번거롭고 오류가 발생하기 쉽습니다. 장고 마이그레이션은 이러한 번거로움을 줄여주고, 데이터베이스의 변경 이력을 관리할 수 있게 도와줍니다.
---
마이그레이션은 어떻게 작동하나요?
1. 모델의 변경사항을 감지해 자동으로 마이그레이션 파일을 생성합니다.
2. 생성된 마이그레이션 파일에는 테이블 생성, 필드 추가/삭제 등 변경 내용이 기록됩니다.
3. `migrate` 명령어를 통해 데이터베이스에 해당 변경사항이 적용됩니다.
---
마이그레이션을 만드는 방법은?
터미널에서 해당 앱이 위치한 장고 프로젝트 디렉터리로 이동한 뒤, 다음 명령어를 실행합니다.
```bash
python manage.py makemigrations
```
- 이 명령어는 모델 변경사항을 기반으로 마이그레이션 파일들을 생성합니다.
- 생성된 마이그레이션 파일은 앱의 `migrations` 폴더에 `.py` 파일로 저장됩니다.
---
마이그레이션을 데이터베이스에 적용하는 방법은?
생성된 마이그레이션을 데이터베이스에 반영하려면 다음 명령어를 사용합니다.
```bash
python manage.py migrate
```
- 이 명령어는 지금까지 만들어진 모든 마이그레이션 파일을 실행시켜 데이터베이스를 최신 상태로 만듭니다.
---
특정 앱의 마이그레이션만 적용할 수 있나요?
네. 특정 앱에만 마이그레이션을 하려면 다음처럼 앱 이름을 지정합니다.
```bash
python manage.py migrate <앱이름>
```
마이그레이션 상태를 확인하는 방법은?
현재 데이터베이스가 어떤 마이그레이션이 적용되었는지 보고 싶다면 다음 명령어를 사용합니다.
```bash
python manage.py showmigrations
```
---
마이그레이션을 롤백(이전 상태로 되돌리기)하려면 어떻게 하나요?
예를 들어 특정 앱의 마이그레이션을 이전 단계로 되돌리려면, 다음과 같이 마이그레이션 이름이나 번호를 지정할 수 있습니다.
```bash
python manage.py migrate <앱이름> <마이그레이션이름>
```
예) 가장 처음 상태로 돌리고 싶다면 숫자 `zero`를 사용할 수 있습니다.
```bash
python manage.py migrate <앱이름> zero
```
---
수동으로 마이그레이션 파일을 수정해도 되나요?
일반적으로는 `makemigrations` 명령어가 생성하는 파일을 직접 수정하지 않는 것이 좋지만, 복잡한 상황에서는 수정을 해야 할 수도 있습니다. 다만, 마이그레이션 파일을 잘못 수정하면 데이터베이스 상태와 불일치가 발생할 수 있으니 주의해야 합니다.
---
마이그레이션 관련 문제 발생 시, 어떻게 해결하나요?
- 마이그레이션 충돌이 발생하면, 충돌한 마이그레이션 파일을 확인 후 병합하거나 재생성합니다.
- 데이터베이스 상태가 꼬였을 경우, 마이그레이션을 되돌리거나 필요 시 데이터베이스를 초기화하고 새로 적용하는 방법도 있습니다.
- 공식 문서나 커뮤니티를 참고하여 구체적인 에러 메시지에 맞게 대응합니다.
---
정리
- 마이그레이션은 장고 모델 변경을 데이터베이스에 적용하는 기능입니다.
- `makemigrations`로 변경 기록 파일을 만들고, `migrate`로 실제 데이터베이스에 반영합니다.
- 마이그레이션 파일은 소스코드로 관리되며, 버전 관리와 배포에 유용합니다.
---
필요할 경우, 장고 공식 문서 ‘Migrations’ 섹션을 참고해 보다 심층적으로 학습할 것을 추천합니다.
작성자:
ㅁㅁ [비회원]
| 작성일자: 1년 전
2024-08-26 08:17:56
조회수: 192 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 192 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.