AEM 헤드리스 SPA 배포
- 적용 대상:
- Experience Manager as a Cloud Service
작성 대상:
- 중간
- 개발자
AEM Headless SPA(단일 페이지 앱) 배포에는 React 또는 Vue와 같은 프레임워크를 사용하여 빌드된 JavaScript 기반 애플리케이션이 포함되며, Headless 방식으로 AEM의 콘텐츠를 소비하고 상호 작용합니다.
Headless 방식으로 AEM과 상호 작용하는 SPA를 배포하려면 SPA를 호스팅하고 웹 브라우저를 통해 액세스할 수 있도록 해야 합니다.
SPA 호스팅
SPA는 기본 웹 리소스 HTML, CSS 및 JavaScript 의 컬렉션으로 구성됩니다. 이러한 리소스는 build 프로세스(예: npm run build
) 중에 생성되며 최종 사용자가 사용할 수 있도록 호스트에 배포됩니다.
조직의 요구 사항에 따라 다양한 호스팅 옵션이 있습니다.
-
Azure 또는 AWS 와 같은 클라우드 공급자.
-
회사 데이터 센터 에서 온-프레미스 호스팅
-
AWS Amplify, Azure App Service, Netlify, Heroku, Vercel 등과 같은 프런트 엔드 호스팅 플랫폼
배포 구성
AEM Headless와 상호 작용하는 SPA를 호스팅할 때 주로 고려해야 할 사항은 SPA가 AEM의 도메인(또는 호스트)을 통해 액세스되는지 또는 다른 도메인에서 액세스되는지 여부입니다. 그 이유는 SPA가 웹 브라우저에서 실행되는 웹 애플리케이션이기 때문에 웹 브라우저 보안 정책의 적용을 받기 때문입니다.
공유 도메인
SPA와 AEM은 동일한 도메인에서 최종 사용자가 둘 다 액세스할 때 도메인을 공유합니다. 예:
- AEM은
https://wknd.site/
을(를) 통해 액세스됩니다. - SPA는
https://wknd.site/spa
을(를) 통해 액세스됩니다.
AEM과 SPA는 동일한 도메인에서 액세스되므로 웹 브라우저를 사용하면 SPA에서 CORS 없이도 AEM Headless 엔드포인트에 대한 XHR을 만들 수 있으며 HTTP 쿠키(예: AEM의 login-token
쿠키)를 공유할 수 있습니다.
SPA 및 AEM 트래픽이 공유 도메인에서 라우팅되는 방법은 여러 원본을 사용하는 CDN, 역방향 프록시가 있는 HTTP 서버, AEM에서 SPA를 직접 호스팅하는 방법 등에 따라 다릅니다.
다음은 AEM과 동일한 도메인에서 호스팅되는 경우 SPA 프로덕션 배포에 필요한 배포 구성입니다.
다른 도메인
SPA와 AEM에는 다른 도메인의 최종 사용자가 액세스할 때 다른 도메인이 있습니다. 예:
- AEM은
https://wknd.site/
을(를) 통해 액세스됩니다. - SPA는
https://wknd-app.site/
을(를) 통해 액세스됩니다.
AEM과 SPA는 서로 다른 도메인에서 액세스하므로 웹 브라우저는 CORS(원본 간 리소스 공유)와 같은 보안 정책을 시행하고 HTTP 쿠키(AEM의 login-token
쿠키 등) 공유를 차단합니다.
다음은 AEM이 아닌 다른 도메인에서 호스팅되는 경우 SPA 프로덕션 배포에 필요한 배포 구성입니다.
다른 도메인에서의 SPA 배포 예
이 예에서 SPA는 Netlify 도메인(https://main--sparkly-marzipan-b20bf8.netlify.app/
)에 배포되고 SPA는 AEM 게시 도메인(https://publish-p65804-e666805.adobeaemcloud.com
)의 AEM GraphQL API를 사용합니다. 아래 스크린샷은 CORS 요구 사항을 강조합니다.
-
SPA는 Netlify 도메인에서 제공되지만 다른 도메인의 AEM GraphQL API에 대해 XHR을 호출합니다. 이 사이트 간 요청을 사용하려면 Netlify 도메인의 콘텐츠 액세스를 허용하도록 AEM에 CORS을(를) 설정해야 합니다.
SPA 및 AEM 호스트
-
AEM GraphQL API에 대한 XHR 요청을 검사하는 동안
Access-Control-Allow-Origin
이(가) 있으며, 이는 AEM이 이 Netlify 도메인의 콘텐츠 액세스를 요청할 수 있음을 웹 브라우저에 나타냅니다.AEM CORS이(가) 없거나 Netlify 도메인을 포함하지 않는 경우 웹 브라우저에서 XHR 요청을 실패하고 CORS 오류를 보고합니다.
단일 페이지 앱 예
Adobe은 React로 코딩된 단일 페이지 앱의 예를 제공합니다.
예제 애플리케이션은 Adobe Experience Manager(AEM)의 Headless 기능을 탐색할 수 있는 훌륭한 방법입니다. 이 React 애플리케이션은 지속 쿼리를 사용하여 AEM의 GraphQL API를 사용하여 콘텐츠를 쿼리하는 방법을 보여 줍니다.