성공적인 Drupal 사이트 업데이트를 위한 업데이트 및 사후 업데이트 후크 이해
게시 됨: 2023-04-25핵심 업데이트 또는 모듈 업데이트 중에 Drupal 웹사이트의 안정성과 무결성을 보장하는 것이 중요합니다. 다행스럽게도 Update API 모듈과 Update/Post Update Hooks가 도움이 될 것입니다.
Update API 모듈은 Drupal 사이트에서 코드 및 모듈을 업데이트하는 데 필요한 후크를 제공합니다. 이러한 후크는 개발자가 필요에 따라 업데이트를 사용자 지정할 수 있는 업데이트 및 사후 업데이트 후크일 뿐입니다.
이 기사에서는 Update API, 업데이트 및 사후 업데이트 후크가 무엇인지, 언제 어떻게 사용해야 하는지에 대해 설명합니다. 두 유형의 후크를 이해하면 최소한의 노력으로 Drupal 사이트를 성공적으로 업데이트할 수 있습니다. 시작하자!
업데이트 API
기존 사이트에서 작업하는 동안 모듈의 코드를 업데이트할 때 저장된 데이터가 새 코드와 호환되도록 저장된 데이터를 업데이트해야 할 수 있습니다. '웹사이트에 예기치 않은 오류가 발생했습니다.'와 같은 오류가 눈앞에 번쩍거리는 것을 보았을 것입니다. 무섭죠!? 알아요! 여기에서 Drupal의 업데이트 API가 우리를 구해줍니다.
업데이트가 Drupal 코어의 동일한 주 버전 내에서 모듈의 두 부 버전 사이에 있는 경우 Update API를 사용하여 데이터를 업데이트할 수 있습니다. Update API를 사용하면 모듈이 데이터 모델을 변경할 때마다 저장된 데이터를 업데이트하는 코드를 제공할 수 있습니다. 데이터 모델 변경은 기존 사이트에 저장된 데이터를 해당 사이트의 업데이트된 코드베이스와 호환되지 않게 만드는 변경을 말합니다. 이러한 데이터 모델 변경에는 다음이 포함됩니다.
구성 스키마 업데이트
- 구성 키 추가/제거/이름 바꾸기.
- 구성 키의 데이터 유형 변경.
- 구성 키 등의 예상 기본값 변경
데이터베이스 스키마 업데이트
- 데이터베이스 테이블 또는 필드 추가/변경/제거.
- 저장된 데이터를 다른 필드 또는 테이블로 이동합니다.
- 저장된 데이터의 형식 변경 등
엔터티 및 필드 업데이트
- 기존 엔터티 유형에 새 기본 필드를 추가합니다.
- 사용되지 않는 유형에서 새 유형으로 필드 업데이트 등
데이터 업데이트
- 기존 사이트에 저장된 데이터를 조작합니다.
업데이트 후크 작업
Hook hook_update_N()은 모듈의 부 버전 간에 업데이트를 도입하는 데 사용됩니다. 이러한 후크는 *.install 파일의 모듈 내에 배치됩니다.
hook_update_N()은 (모듈명)_update_(번호) 형식으로 작성됩니다. 여기서 N은 다음으로 구성됩니다.
- 1자리 또는 2자리는 Drupal 코어 호환성을 나타냅니다(Drupal 8, 9, 10 등).
- 다음 1자리는 모듈의 주요 릴리스 버전용입니다.
- 01부터 시작하여 순차 카운트를 위한 마지막 2자리
예:
example_update_9201(): 9.x-2.x 버전의 첫 번째 업데이트입니다.
여기서 'example'은 모듈의 이름이고 첫 번째 숫자는 Drupal 코어 버전 '9'를 나타내고 숫자 '2'는 모듈의 주요 릴리스 버전을 나타내며 마지막 두 자리 '01'은 작성된 첫 번째 업데이트 기능을 나타냅니다. 모듈 '예제'.
후크 구현 기능의 숫자 부분(예: 위의 예에서 9201)은 이미 실행된 업데이트를 추적하기 위해 데이터베이스에 저장됩니다. 따라서 업데이트 기능의 번호를 다시 매기면 안 됩니다.
'데이터베이스에 저장된 예제' 모듈의 현재 스키마 버전을 알려면 다음을 사용하십시오.
drush php-eval "echo drupal_get_installed_schema_version('example');"
모듈 'example'의 현재 스키마 버전을 '9201'로 수동 설정하려면 다음을 사용하십시오.
drush php-eval "echo drupal_set_installed_schema_version('example', '9201');"
참고: 데이터베이스를 직접 업데이트하므로 프로덕션 사이트에서 drupal_set_installed_schema_version() 함수를 사용하지 마십시오. 개발 중에 로컬 또는 하위 테스트 환경에서 사용하여 스키마 버전을 재설정할 수 있습니다.
실행하는 동안 사용자에게 인쇄될 것이므로 업데이트 후크 기능 앞에 문서 블록 주석에 적절한 설명을 추가하십시오.
Structure of hook_update_N(): /** * A aimple hook_update_N() hook. */ function example_update_9201() { // Code goes here. }
이러한 후크는 정렬된 순서로 실행됩니다. 즉, example_update_9201() 후크는 example_update_9202() 이전에 실행되고 다음은 9203, 9204 등입니다.
후크 간의 종속성을 도입하여 이러한 후크의 정렬된 순서를 변경할 수도 있습니다. 후크 hook_update_dependencies()를 사용하여 두 업데이트 후크 간에 업데이트를 실행합니다.
모든 업데이트 후크는 배치로 실행되며 항목의 배치 처리도 지원합니다. 모든 업데이트 후크는 $sandbox 매개변수에 액세스할 수 있습니다. 이 매개변수는 PHP 시간 초과 없이 대량의 데이터를 한 번에 처리하기 위해 업데이트 후크에서 배치 프로세스를 생성하는 데 사용할 수 있습니다.
새 구성 키를 추가하기 위한 업데이트 후크의 간단한 예:
현재 example_module.settings.yml 파일에는 다음이 포함되어 있습니다.
구성에 새 키 '설명'을 추가하려면:
- 설정 파일에 '설명' 키 추가
- example_module.install 파일에 update_hook를 추가합니다.
- 후크를 실행하려면 drush updb를 사용하십시오.
- 업데이트된 구성을 확인하면 새 키 '설명'이 업데이트됩니다.
사후 업데이트 후크 작업
업데이트 후크와 유사한 후크 hook_post_update_NAME()은 업데이트를 도입하는 데 사용됩니다. 그러나 이 후크는 주로 엔터티와 같은 데이터를 업데이트하기 위한 것입니다. 이 후크는 모든 hook_update_N() 후크가 실행된 후에 실행됩니다. 이 단계에서 Drupal은 이미 완전히 복구되어 사이트 내에서 모든 API를 사용할 수 있습니다.
이 후크는 모듈의 *.post_update.php 파일에 있습니다.
hook_post_update_NAME()은 (모듈명)_post_update_(임의의 이름) 형식으로 작성됩니다. 여기서 NAME은 임의의 시스템 이름이 될 수 있습니다. 파일에 있는 함수의 이 영숫자 이름은 이 후크의 실행 순서를 보장하는 유일한 것입니다.
업데이트 후크와 유사하게 post_update 후크 앞에 docblock 주석에 적절한 설명을 추가합니다. 또한 동일한 후크 이름을 재사용하지 마십시오.
hook_post_update_NAME()의 구조:
/** * A aimple hook_post_update_NAME() hook. */ function example_post_update_test() { // Code goes here. }
업데이트 후크와 마찬가지로 $sandbox 매개변수를 사용하여 post_update 후크에 Batch API를 사용해야 함을 나타냅니다.
용어 데이터를 업데이트하기 위해 업데이트 후 후크를 사용하는 간단한 예:
- 현재 태그 어휘 아래의 모든 용어에는 '테스트 예' 필드가 비활성화되어 있습니다.
- example_module.post_update.php 파일에 post_update 후크를 추가하여 모든 기존 용어에 대해 '예제 테스트' 필드를 활성화합니다.
- 후크를 실행하려면 drush updb를 사용하십시오.
- 업데이트된 용어 데이터를 확인하고 '예제 테스트' 확인란을 선택해야 합니다.
이 후크를 실행하는 방법!
Drush 명령을 사용하여 이러한 후크인 drush updb를 실행할 수 있습니다. 다음 단계에서 배치를 빌드합니다.
- 모든 업데이트 후크가 검색됩니다.
- 종속성을 해결하고 순서를 정렬합니다.
- 일괄 처리를 위해 후크가 배치됩니다.
- 다음으로 모든 Post 후크가 검색됩니다.
- post_update 후크가 있고 update_hook가 이전에 실행된 경우 캐시가 지워집니다.
- 그런 다음 각 post_update 후크를 일괄 처리에 푸시합니다.
- 배치를 실행합니다.
업데이트 후 후크가 업데이트 후 후크에 비해 갖는 한 가지 주요 이점은 Drupal이 사후 업데이트가 실행될 때 완전히 작동한다는 것입니다. 이를 통해 개발자는 업데이트 후 후크를 사용하는 동안 모든 Drupal 서비스를 사용할 수 있습니다. 업데이트 후크를 사용하면 Drupal이 완전히 복구되었다고 가정해서는 안 되며 다른 후크, 엔티티 API 등을 호출하지 않아야 합니다.
마지막 생각들
구성/데이터베이스 스키마를 업데이트하여 사이트를 수정하려고 할 때 업데이트 후크를 사용해 보십시오. 저장된 데이터 조작, 구성 다시 저장, 콘텐츠 엔터티 업데이트, 캐시 지우기 등에 관해서는 업데이트 후 후크를 사용하는 것이 더 적합합니다.
솔직히 Drupal.org에는 언제 어떤 후크를 사용해야 하는지에 대한 명확한 문서가 없습니다! 원하는 경우 기여할 수 있는 이 두 후크의 사용에 대한 문서를 개선하도록 요청하는 열린 문제가 있습니다.
그러나 개발자의 경험을 바탕으로 Drupal 9 및 10 핵심 모듈을 예로 들어 업데이트 후크를 사용하여 구성 또는 데이터베이스에서 CRUD 작업을 수행하고(예: 사이트 복구) CRUD 콘텐츠 엔터티에 대한 사후 업데이트 후크를 사용합니다( 그런 다음 업데이트된 사이트에서 데이터를 수정합니다.) 업데이트 후 후크는 업데이트 후크 이후에 실행되기 때문입니다.
이 기사를 읽으셨습니까? 오늘 저희 주간 뉴스레터를 구독하고 사랑을 보여주세요!