엔지니어링 관점 – Smashing Magazine

엔지니어링 관점 – Smashing Magazine

콘텐츠 관리가 발전하고 있습니다. 전통적인 모 놀리 식 CMS 접근 방식은 컨텐츠 관리 및 프레젠테이션이 분리되는 헤드리스 아키텍처를 제공합니다. 이러한 변화는 특히 조직이 레거시 시스템에서 최신 헤드리스 플랫폼으로 마이그레이션해야 할 때 새로운 과제를 가져옵니다.

우리 팀은 Drupal에서 Storyblok으로 마이그레이션 경로를 만들 때이 시나리오를 만났습니다. 이 시스템은 컨텐츠 아키텍처를 상당히 다르게 처리합니다. Drupal은 PHP와 통합 된 엔티티 필드 모델을 사용하는 반면 StoryBlok은 헤드리스 전달을 위해 설계된 유연한 스토리와 블록 구조를 사용합니다.

Drupal에서 Storyblok으로 간단하지만 확장 가능한 컨텐츠 마이그레이션을 수행하기 위해 스크립트를 사용해야하는 경우 이미 다운로드 및 사용 방법에 대한 단계별 지침을 공유했습니다. 자신의 (아마도) 더 나은 버전을 쓸 수 있도록 그러한 스크립트를 만드는 과정에 관심이 있다면 여기에 머 무르십시오!

우리는 개발자가 때때로 CMS 사이를 마이그레이션 할 때 수동 컨텐츠 전송 및 사용자 정의 스크립트로 어려움을 겪고 있음을 관찰했습니다. 이로 인해 우리는 마이그레이션 접근 방식을 개발하고 공유하게되었으며, 이는 다른 사람들이 마이그레이션 요구에 대한 참조로 사용할 수있는 오픈 소스 도구로 구현했습니다.

당사의 솔루션은 컨텐츠 매핑 및 변환을 처리하는 사용자 정의 Drush 명령과 StoryBlok의 관리 API를위한 새로운 PHP 클라이언트의 두 가지 주요 구성 요소를 결합합니다.

우리는이 도구 개발 뒤에있는 엔지니어링 결정을 살펴보고 건축 선택과 현대적인 PHP 관행을 사용하여 실제 마이그레이션 문제를 해결하는 방법을 살펴 보겠습니다.

메모: Drupal Expler Repo에서 마이그레이션 도구의 전체 소스 코드를 찾을 수 있습니다.

마이그레이션 아키텍처 계획

Drupal에서 Storyblok으로의 여정은 독특한 건축 문제를 제시합니다. 근본적인 차이점은 이러한 시스템이 컨텐츠를 개념화하는 방법에 있습니다. Drupal은 컨텐츠를 필드를 갖는 엔티티로 구조화하는 반면 StoryBlok은 스토리와 블록과 함께 구성 요소 기반 접근 방식을 사용합니다.

초기 요구 사항 분석

성공적인 마이그레이션 도구는 두 시스템 모두 친밀하게 이해해야합니다. Drupal의 컨텐츠 모델은 엔티티 API에 크게 의존하여 컨텐츠를 엔티티 내에서 구조화 된 필드 컬렉션으로 저장합니다. 전형적인 Drupal 기사에는 제목, 신체 내용, 이미지 및 분류법에 대한 필드가 포함될 수 있습니다. 반면에 Storyblok은 내용을 블록을 포함하는 스토리, 유연한 방식으로 중첩되고 배열 될 수있는 재사용 가능한 구성 요소로 구성을 구조화합니다. 기술 요구 사항, 특히 컨텐츠 매핑 및 데이터 변환과 관련하여 미묘한 차이이지만 궁극적으로 두 컨텐츠 모델 간의 관계를 쉽게 볼 수 있습니다.

기술적 인 제약

개발 초기에 우리는 몇 가지 주요 제약 조건을 식별했습니다. StoryBlok의 관리 API는 컨텐츠를 얼마나 빨리 전송할 수 있는지에 영향을 미치는 요율 제한을 시행합니다. 미디어 자산을 먼저 업로드 한 다음 연결해야합니다. 수백 개의 컨텐츠를 마이그레이션 할 때 오류 복구가 필수적입니다.

새로운 관리 API PHP 클라이언트는 내장 재시도 메커니즘 및 응답 검증을 통해 이러한 제약 조건을 처리하므로 마이그레이션 스크립트를 작성하면 걱정할 필요가 없습니다.

도구 선택

우리는 몇 가지 이유로 Drush를 명령 줄 인터페이스로 선택했습니다. 첫째, Drupal의 부트 스트랩 프로세스와 깊이 통합되어 엔티티 API 및 필드 데이터에 직접 액세스 할 수 있습니다. 둘째, Drupal Developers는 이미 컨벤션에 익숙해 져서 도구를보다 쉽게 ​​액세스 할 수 있도록합니다.

새로운 개발 결정 관리 API 클라이언트 첫 번째 PHP 클라이언트를 개발 한 이후 PHP의 진화에 대한 경험과 개발자에게 개발자에게 개선 된 DX와 맞춤형 기능 세트를 제공하는이 특정 API를위한 전용 도구를 제공하려는 목표.

이 토대는 우리가 마이그레이션 워크 플로에 접근하는 방법을 형성했습니다.

빌딩 블록 : 새로운 관리 API 클라이언트

컨텐츠 마이그레이션 도구는 StoryBlok의 Management API & Mdash와 크게 상호 작용하여 스토리 생성, 자산 업로드 및 태그 관리입니다. 각 작업은 신뢰할 수 있고 예측 가능해야합니다. 우리의 새로운 클라이언트는 직관적 인 메소드 호출을 통해 이러한 상호 작용을 단순화합니다. 클라이언트는 인증을 처리하고, 요청 서식을 요청하며, 반응을 파싱하여 Devs가 API 메커니즘이 아닌 컨텐츠 작업에 집중할 수 있습니다.

신뢰성을위한 설계

컨텐츠 마이그레이션에는 종종 수백 개의 API 호출이 포함됩니다. 우리의 클라이언트에는 요금 제한 및 실패 요청과 같은 일반적인 시나리오를 처리하기위한 내장 메커니즘이 포함되어 있습니다. 응답 처리 패턴은 운영 성공에 대한 명확한 피드백을 제공합니다. Drupal의 마이그레이션 스크립트에서 Drush Logger를 사용했을 때 로거를 클라이언트 클래스에 주입 할 수 있습니다.

개발 경험 향상

기본 API 운영 외에도 클라이언트는 예측 가능한 패턴을 통해인지 부하를 줄입니다. 데이터 객체는 StoryBlok을 위해 컨텐츠를 준비하는 체계적인 방법을 제공합니다.이 패턴은 프로세스 초기에 데이터를 검증하여 API에 도달하기 전에 잠재적 인 문제를 포착합니다.

마이그레이션 워크 플로 설계

Drupal의 엔티티 기반 구조에서 Storyblok ‘s로 이동합니다 구성 요소 모델 마이그레이션 워크 플로의 신중한 계획이 필요합니다. 우리의 목표는 다른 컨텐츠 구조에 신뢰할 수 있고 적응할 수있는 프로세스를 만드는 것이 었습니다.

명령 구조

마이그레이션은 드 루팔을 활용합니다 엔티티 쿼리 체계적으로 컨텐츠를 추출하는 시스템. 기본적으로 액세스 점검이 비활성화되었습니다 (가역적 사업 결정) 마이그레이션에만 집중합니다 게시 된 노드.

주요 단계와 통찰력

  • 텍스트 필드

    • 필요한 최소 노력 : 값과 같은 값 value() Storyblok 필드에 직접 매핑됩니다.
    • 풍부한 텍스트는 인코딩 도전 과제를 제기하지 않았으므로 1 : 1 전송을 간단하게 만들었습니다.
  • 이미지 처리

    1. 업로드: 자산은 AWS S3 버킷으로 전송되었습니다.
    2. 링크: Storyblok ‘s 자산 API upload() 메소드가 반환되었습니다 object_id단순화 필드 매핑.
    3. 양수인: 자산 ID와 파일 이름은 이야기에 첨부되었습니다.
  • 태그 관리

    • Drupal에서 추출한 태그는 Storyblok ‘s를 통해 사전 제작되었습니다 Day API (선택 사항이지만 일관성을 보장합니다).
    • 스토리 블록은 스토리에 태그를 할당 할 때 자동으로 누락 된 것들을 생성하여 프로세스를 간소화합니다.

무대 워크 플로가 중요한 이유

마이그레이션은 종속성을 우선 순위로하여 깨진 참조를 피합니다 (자산 먼저, 다음 태그 다음, 컨텐츠가 마지막). 사전 제작 태그가 컨트롤을 추가하는 동안 팀은이 논리를 조정할 수 있습니다. 예를 들어 StoryBlok 자동 생성 태그를 사용하여 시간을 절약 할 수 있습니다.

유연성은 핵심입니다. 모든 결정 (액세스 점검, 태그 워크 플로)을 프로젝트 목표와 일치하도록 조정할 수 있습니다.

실제 구현 과제

Drupal과 Storyblok 사이의 콘텐츠를 마이그레이션하면 구현 자로서 귀하가 발생할 수있는 문제가 발생합니다.

예를 들어, 대형 데이터 세트를 처리 할 때는 수천 개의 노드가있는 Drupal 사이트가 StoryBlok의 관리 API에 의해 시행되는 속도 제한을 빠르게 누를 수 있음을 알 수 있습니다. 그러한 경우, 귀하의 요청에 대한 배치 메커니즘을 고려할 가치가 있습니다. 모든 노드를 한 번에 처리하는 대신 레코드의 하위 집합을 처리하고 짧은 시간을 기다린 다음 계속할 수 있습니다.

또는 사용할 수 있습니다 createBulk Management API의 스토리 API 방법은 내장 속도 제한 처리 및 검색으로 여러 스토리 크리에이션을 처리 할 수 ​​있습니다. 또 다른 잠재적 장애물은 복잡한 필드 유형의 변환, 특히 Drupal의 중첩 구조 또는 단락 필드를 Storyblok의보다 유연한 블록 기반 모델에 매핑해야 할 때입니다.

한 가지 방법은 먼저 Drupal 함량의 중첩 깊이와 구조를 분석 한 다음 올바른 계층 구조를 유지하면서 재사용 가능한 스토리 블록 구성 요소로 깊게 중첩 된 요소를 평평하게하는 것입니다. 예를 들어, a paragraph 내장 미디어와 텍스트가 포함 된 필드는 Storyblok 내의 블록으로 나눌 수 있으며 각 구성 요소는 논리적 인 컨텐츠 섹션을 나타냅니다. 마이그레이션 전에 이러한 방식으로 데이터를 구조화함으로써 컨텐츠가 새 시스템에서 편집 가능하고 적절하게 구성되도록합니다.

데이터 일관성은 신중하게 관리 해야하는 또 다른 측면입니다. 수백 개의 레코드를 마이그레이션 할 때 부분 실패는 항상 위험합니다. 이를 관리하기위한 한 가지 방법은 각 마이그레이션 작업에 대한 자세한 정보를 기록하고 실패한 작업에 대한 재 시도 메커니즘을 구현하는 것입니다.

예를 들어, API를 닫는다 try-catch 블록 및 로깅 오류는 레코드가 조용히 삭제되지 않도록 실용적인 방법이 될 수 있습니다. StoryBlok에서 분류법 또는 태그와 같은 분야와 같은 분야를 다룰 때는 중복 문제가 발생할 수 있습니다. 모범 사례는 새 태그를 만들기 전에 수표를 수행하는 것입니다. 여기에는 이전에 생성 된 태그의 로컬 캐시를 유지 관리하고 API에 대한 요청을 보내기 전에 태그를 확인하는 것이 포함될 수 있습니다.

이미지도 마찬가지입니다. 수표는 동일한 자산을 두 번 업로드하지 않도록 할 수 있습니다.

배운 교훈과 기대

에이 전용 API 클라이언트 StoryBlok의 경우, 상호 작용을 간소화 한 경우 코드 유지 가능성을 향상시키는 동시에 백엔드 복잡성을 추상화합니다. 초기 사용 구조화 된 데이터 객체 컨텐츠를 준비하기 위해서는 결정적인 것으로 판명되어 선제 적 오류 감지를 가능하게하고 API 실패를 줄입니다.

우리는 또한 몇 가지 도전에 부딪 히고 개선의 여지를 보았습니다.

  • 인코딩 문제 풍부한 텍스트 (예 : HTML Entities)는 사전 프로세싱 단계로 해결되었습니다.
  • 성능 병목 현상 큰 텍스트/이미지가 필요한 메모리 최적화 및 세련된 요청 처리

향상에는 지원이 포함될 수 있습니다 드 루팔 레이아웃 빌더고급 유효성 검사 계층 또는 동적 자산 관리 시스템.

∎ 관리 API 클라이언트 또는 마이그레이션 전략에 대한 심층적 인 다이빙은 불화를 통해 연락하거나 PHP 클라이언트 리포를 탐색하거나 Mastodon에서 나와 연결하십시오. 피드백과 기부금을 환영합니다!

스매싱 편집
(IL)

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다