간단한 6단계로 SQL 소스에서 Drupal 8로 마이그레이션하는 방법
게시 됨: 2020-11-24Drupal 8로 마이그레이션하는 것의 중요성과 이점에 대해 많은 이야기가 있었습니다. Drupal 마이그레이션은 개발 워크플로에서 가장 중요한 부분입니다. 중요한 사용자 정보와 데이터를 잃지 않고 콘텐츠가 원활하게 전송되도록 해야 합니다. Drupal 7에서 Drupal 8로의 성공적인 마이그레이션을 위해 이 전체 가이드를 확인하십시오.
다양한 소스를 사용하여 Drupal 8로 마이그레이션하는 방법에는 여러 가지가 있습니다. 우리는 이미 CSV에서 Drupal 8로 마이그레이션하는 방법에 대해 작성했습니다. 다른 소스에는 SQL, XML, JSON 등이 있습니다. 이 블로그에서는 SQL을 소스로 사용하여 Drupal 8로 마이그레이션하는 방법에 대해 설명합니다.

왜 SQL인가?
데이터 소스를 선택하는 것은 마이그레이션에 필요한 기존 데이터의 소스에 따라 크게 달라지지만 Drupal 8 마이그레이션을 위해 SQL 소스를 선택하는 다른 일반적인 이유는 다음과 같습니다.
- 데이터베이스에 연결하여 필요한 데이터를 얻기 위한 쿼리를 작성하는 것은 쉽습니다.
- 한 서버에서 다른 서버로 데이터를 마이그레이션하는 것은 다른 어떤 방법보다 빠릅니다.
- 많은 기여 모듈의 사용을 줄입니다.
- Drupal 7 사이트에서 보기 CSV 데이터를 내보내는 데 사용되는 보기 데이터 내보내기가 필요하지 않습니다.
- DB 쿼리를 사용하기 때문에 민감한 정보(해시 암호)를 마이그레이션하는 데 사용되는 보기 암호 필드가 필요하지 않습니다.
- SQL 소스를 사용하기 때문에 소스 CSV 모듈 마이그레이션도 필요하지 않습니다.
마이그레이션 프로세스를 시작하십시오!
이 블로그에서는 사용자를 Drupal 8 사이트로 마이그레이션할 것입니다. 다음은 Drupal 8로 마이그레이션하기 위해 수행할 단계입니다.
1. 마이그레이션을 위한 사용자 지정 모듈을 만듭니다.
2. 소스 데이터베이스를 참조하십시오.
3. 마이그레이션 YML을 정의하고 식별된 Drupal 필드를 매핑합니다.
4. 마이그레이션을 위한 소스 플러그인을 생성합니다.
5. 단일 값, 다중 값 및 주소 필드를 처리합니다.
6. drush 명령줄 도구를 사용하여 마이그레이션을 실행합니다.
1단계: Drupal 8 마이그레이션을 위한 사용자 지정 모듈을 만듭니다.
먼저 Drupal 8에서 생성한 것처럼 사용자 정의 모듈을 생성해 보겠습니다. Drupal 8에서 사용자 정의 모듈을 생성하는 방법에 대한 자세한 블로그를 확인하십시오. 여기에서 " 회사 직원 마이그레이션 "이라는 모듈을 생성합니다. 모듈 구조는 다음과 같습니다.

company_employee_migrate.info.yml : 모듈 및 종속 항목에 대한 기본 정보로 구성됩니다.
company_employee_migrate.install : 모듈을 설치 및 제거하는 동안 트리거되어야 하는 PHP 스크립트를 작성하는 데 사용됩니다. 우리의 경우 모듈이 제거될 때 마이그레이션 구성을 삭제합니다. 스크립트는 아래 스크린샷을 참조하세요.

company_employee_migrate.module : 사이트에 대한 일반 후크를 정의하는 데 사용됩니다. 모듈에 필요한 초기 사항입니다. 나머지는 다음 단계에서 설명하겠습니다.
2단계: 원본 데이터베이스 참조
다음으로 데이터를 추출할 소스 데이터베이스를 설정해야 합니다. webroot -> sites -> default -> settings.php로 이동하여 Drupal 사이트의 settings.php 파일을 업데이트합니다 .
아래 스크린샷과 같이 기본 연결 아래에 새 데이터베이스 연결을 추가합니다. " 마이그레이션 "은 소스 데이터베이스의 핵심입니다.

3단계: 마이그레이션 YML을 정의하고 Drupal 필드를 매핑합니다.
이제 마이그레이션할 필드를 식별하고 마이그레이션 yml에서 해당 필드를 매핑해야 합니다. 이 예에서는 사용자 ID, 사용자 이름, 비밀번호, 이메일, 상태, 생성된 타임스탬프, 이름, 성, 직무 역할, 우편 주소 등을 마이그레이션하고 있습니다.
필드 식별 후 migrate_plus.migration.company_employee.yml 에서 마이그레이션을 정의해야 합니다. 이제 마이그레이션 yml과 해당 매핑을 자세히 살펴보겠습니다.

id: 마이그레이션 yml의 고유 ID입니다.
레이블: 마이그레이션의 표시 이름입니다.
마이그레이션_ 그룹 : 마이그레이션 그룹 이름입니다.
source: 주석 마이그레이션 소스 플러그인의 이름입니다. 이것은 src/Plugin/migrate/source/CompanyEmployee.php 의 @MigrateSource 주석에 정의됩니다.
destination: 마이그레이션 대상 플러그인의 이름입니다. 이 경우 사용자 엔터티를 마이그레이션하므로 entity:user입니다.
프로세스: 진행 중에 Drupal 필드를 소스 필드와 매핑할 것입니다. 왼쪽 값은 필드 머신 이름이고 오른쪽 값은 소스 플러그인에서 전달한 필드 이름입니다.
마이그레이션_종속성: 선택적 키입니다. 이것은 다른 마이그레이션에 대한 종속성이 있는 경우에만 사용됩니다.
4단계: 마이그레이션을 위한 소스 플러그인 만들기
마이그레이션 소스 플러그인은 SQL 마이그레이션의 핵심입니다. 다음은 소스 플러그인에 대한 자세한 설명입니다.
- 소스 플러그인은 src/Plugin/migrate/source/CompanyEmployee.php 에서 생성할 수 있습니다.
- 네임스페이스는 Drupal\company_employee_migrate\Plugin\migrate\source 가 됩니다.
- @MigrateSource 주석에는 마이그레이션 정의에서 매핑하는 소스 플러그인 ID가 포함됩니다.
- 여기에서 핵심 마이그레이션 모듈에서 제공하는 Abstract SqlBase 클래스를 확장합니다.
참고로 아래 스크린샷을 참조하세요.


소스 플러그인은 다음 세 가지 방법을 구현해야 합니다.
query() : 원본 데이터베이스에 연결하여 원본 필드 데이터를 반환합니다. 사용자 ID가 0보다 크고 사용자 메일이 "@phyins.com"으로 끝나는 필드 데이터를 반환하는 아래 스크린샷을 참조하십시오.

fields() : 이 메서드는 소스에서 사용 가능한 필드를 반환합니다. 아래에서 baseFields()와 함께 사용 가능한 필드 목록에 대한 코드 조각을 추가했습니다.

getIds() : 이 메서드는 소스 행에 대한 고유 ID를 반환합니다. uid는 각 사용자마다 고유하므로 아래 코드는 정수 유형의 사용자 ID를 반환합니다.

위에서 언급한 이러한 방법 외에도 다음이 있습니다.
prepareRow() : 이 메소드는 각 행에 대해 한 번씩 호출됩니다. 요구 사항에 따라 다른 테이블과 프로세스에서 데이터를 로드하고 있습니다. $row->setSourceProperty를 사용하여 생성한 모든 속성은 프로세스 단계에서 사용할 수 있습니다. Drupal 8 DB 쿼리를 사용하여 prepareRow() 에서 데이터를 가져옵니다.
baseFields() : 여기에는 query() 메서드에서 사용할 수 있는 "users_field_data "의 기본 필드 배열이 포함됩니다. 아래 이미지에서 코드를 찾으세요.

5단계: 단일 값, 다중 값 및 주소 필드를 처리합니다.
Drupal에는 다양한 유형의 필드가 있으며 일부 필드를 처리하는 것은 콘텐츠를 마이그레이션하는 동안 개발자에게 약간 까다로울 수 있습니다. 아래 일부 필드에 대한 코드 스니펫을 추가했습니다.
단일 값 필드: 이 필드에는 텍스트 필드, 부울 필드, 이메일 등이 포함됩니다. 단일 값 필드를 얻으려면 아래 코드 스니펫을 찾으십시오. 여기서 field_first_name 은 아래와 같이 설정할 수 있습니다.

다중 값 필드: 이 필드에는 사용자 역할, 작업 역할, 다중 값 선택 필드, 확인란 등이 포함됩니다. 다중 값 필드의 경우 연관 배열을 반환해야 합니다. "역할" 필드에 대한 코드 스니펫 아래에서 찾으십시오.

주소 필드: 주소 모듈에서 제공하는 주소 필드를 마이그레이션하는 것은 다른 필드를 마이그레이션하는 것과 약간 다릅니다. field_mailing_address 에 대해 아래와 같이 적절한 키를 사용하여 쿼리된 데이터를 연관 배열로 사전 처리해야 합니다.

이제 Drupal 8 사이트에 company_employee_migrate 모듈을 설치하여 마이그레이션을 실행하도록 설정되었습니다.
6단계: drush 명령줄 도구를 사용하여 마이그레이션 실행
마지막으로 SQL 마이그레이션을 위한 준비가 되었습니다. 마이그레이션을 실행하려면 drush를 설치해야 합니다(아직 사용하지 않는 경우).
Drupal 마이그레이션에 유용한 drush 명령 목록:
drush migrate-status : 세부 정보와 함께 마이그레이션 상태를 반환합니다.

drush migrate-import migration_id : 소스에서 사이트로 데이터를 가져옵니다.

drush migrate-reset-status migration_id : 스크립트 실행이 중지되거나 일시 중지된 경우 마이그레이션 상태가 "가져오기"로 표시됩니다. 이 명령은 마이그레이션 가져오기를 진행할 수 있도록 마이그레이션 상태를 "유휴"로 재설정합니다.

drush migrate-rollback migration_id : 이전 상태 로 롤백 하는 데 사용됩니다.
