AEM 핵심개념(1)

YUMMY·2024년 6월 19일

AEM

목록 보기
1/2

AEM을 사용하는 프로젝트를 수행 전 공식문서를 정리한 글이다.

공식문서 자체 번역이 좀 이상하게 되어있어서,, ㅠ

AEM에서 개발하기 위한 사전 요구 사항

AEM을 기반으로 개발하려면 다음 기술이 필요하다.

  • 다음을 포함한 웹 애플리케이션 기술에 대한 기본 지식
    - 요청 - 응답(XMLHttpRequest / XMLHttpResponse) 주기

    • HTML
    • CSS
    • JavaScript
  • 컨텐츠 탐색기를 포함하여 Experience Server(CRX)에 대한 작업 지식

  • 클래식 UI에서 개발하려면 간단한 JSP 예를 이해하고 수정하는 기능을 비롯한 JSP(JavaServer Pages)에 대한 기본 지식도 필요

Java 콘텐츠 저장소

JCR(Java™ Content Repository)표준 JSR은 컨텐츠 저장소 내의 세분화된 수준에서 양방향으로 컨텐츠에 액세스할 수 있는 방법을 지정한다.

Experience Server(CRX) 및 Jackrabbit

Experience Server는 AEM이 기반으로 구축되고 사용자 정의 애플리케이션을 빌드하는 데 사용할 수 있는 Experience Services를 제공하며 Jackrabbit을 기반으로 컨텐츠 저장소를 임베드한다.

Apache Jackrabbit은 JCR API 2.0의 구현을 완전히 준수하는 오픈 소스다.

Sling 요청 처리

Sling 소개

Sling은 컨텐츠 중심 애플리케이션을 쉽게 개발할 수 있도록 해주는 REST 원칙을 기반으로 한 웹 애플리케이션 프레임워크이다. Sling은 Apache Jackrabbit과 같은 JCR 저장소 또는 AEM이 있는 경우 CRX 컨텐츠 저장소를 데이터 저장소로 사용한다.

Sling을 사용하면 렌더링되는 컨텐츠 유형이 첫 번째 처리 고려 사항이 아니다. 대신 URL이 렌더링을 수행하는 스크립트를 찾을 수 있는 콘텐츠 객체로 확인되는지 여부가 주요 고려 사항이다. 이를 통해 컨텐츠 작성자가 요구 사항에 맞춰 쉽게 사용자 지정된 페이지를 작성할 수 있다.

이러한 유연성의 장점은 다양한 컨텐츠 요소의 범위가 있는 응용 프로그램이나 쉽게 사용자가 지정할 수 있는 페이지가 필요한 경우에 명확하게 나타난다. 특히 AEM 솔루션에서 WCM과 같은 웹 컨텐츠 관리 시스템을 구현할때,,

15분 안에 Sling 살펴보기

다음 다이어그램에서는 Sling 스크립트 해상도를 설명한다. HTTP 요청에서 컨텐츠 노드로, 컨텐츠 노드에서 리소스 유형으로, 리소스 유형에서 스크립트로 가져오는 방법과 사용 가능한 스크립팅 변수를 보여준다.

다음 다이어그램은 SlingPostServlet을 처리할 때 사용할 수 있는 숨겨져 있지만 강력한 모든 요청 매개 변수에 대해 설명한다. 여기에는 저장소의 노드를 생성, 수정, 삭제, 복사 및 이동할 수 있는 끝없는 옵션을 제공하는 모든 POST 요청에 대한 기본 처리기가 포함되어있다.

Sling은 컨텐츠 중심적이다

Sling은 내용 중심. 즉, 각(HTTP) 요청이 JCR 리소스(저장소 노드)형태의 컨텐츠에 매핑되므로 콘텐츠에 처리가 집중된다.

  • 첫 번째 타겟은 컨텐츠를 보유하는 리소스(JCR 노드)이다.
  • 두 번째로, 표시 또는 스크립트는 요청의 특정 부분(ex : 선택기 및 확장)과 결합된 리소스 속성에서 가져온다.

RESTful Sling

컨텐츠 중심 Sling은 REST 기반 서버를 구현하므로 웹 애플리케이션 프레임워크에 새로운 개념이 도입되었다. 장점은 다음과 같다.

  • RESTful. 리소스와 표현은 서버 내부에서 올바르게 모델링된다.
  • 하나 이상의 데이터 모델 제거
    - 기존 : URL 구조, 비즈니스 개체, DB스키마
    • 현재 : URL = resource = JCR

URL 분해

Sling에서 처리는 사용자 요청의 URL에 의해 결정된다. 적절한 스크립트로 표시할 컨텐츠를 정의한다. 이를 위해 URL에서 정보가 추출된다.

Ex)

https://myhost/tools/spy.printable.a4.html/a/b?x=12

프로토콜 HTTP

호스트 웹 사이트 이름

콘텐츠 경로 렌더링할 컨텐츠를 지정하는 경로. 확장과 함께 사용. (ex:tools/spy.html)

선택기 컨텐츠를 렌더링하는 대체 방법에 사용. 이 예에서는 A4버전.

확장 컨텐츠 형식 : 렌더링에 사용할 스크립트도 지정한다.

접미사 추가 정보를 지정하는 데 사용할 수 있다.

매개 변수 다이내믹 컨텐츠에 필요한 모든 매개 변수.

URL에서 컨텐츠 및 스크립트로

  • 매핑은 요청에서 추출된 컨텐츠 경로를 사용하여 리소스를 찾는다.
  • 적절한 리소스가 있으면 sling리소스 유형이 추출되고, 컨텐츠 렌더링에 사용할 스크립트를 찾는데 사용된다.

아래 이미지는 사용된 메커니즘을 보여주는 이미지이며, 이 메커니즘에 대해서는 다음 섹션에서 설명.

Sling을 사용하여 특정 엔티티를 렌더링하는 스크립트를 지정한다.(sling:resourceType JCR 노드의 속성). 이 메커니즘은 리소스가 여러 변환을 가질 수 있으므로 스크립트가 데이터 엔티티에 액세스하는 것(PHP 스크립트의 SQL 문처럼)보다 더 많은 자유를 제공한다.

리소스에 요청 매핑

요청이 분류되고 필요한 정보가 추출된다. 요청된 리소스(컨텐츠 노드)에 대해 저장소가 검색된다.

  • 첫 번째 Sling은 노드가 요청에 지정된 위치에 있는지 확인한다. (ex : ../content/corporate/jobs/developer.html)
  • 노드를 찾을 수 없으면 확장이 삭제되고 검색이 반복된다. (ex : ../content/corporate/jobs/developer)
  • 노드를 찾을 수 없으면 Sling은 http 코드 404를 반환한다.

또한 Sling을 사용하면 JCR노드 이외의 항목이 리소스가 될 수 있지만 고급 기능이다.

스크립트 찾기

적절한 리소스(컨텐츠 노드)가 있는 경우 Sling 리소스 유형이 추출된다. 컨텐츠 렌더링에 사용할 스크립트를 찾는 경로이다.

sling:resourceType

  • 절대 경로
  • 상대 경로(이동성을 높이므로 Adobe에서 권장)

모든 Sling 스크립트는 다음 중 하나의 하위 폴더에 저장된다. ./apps 또는 /libs: 이 순서로 검색된다.(구성 요소 및 기타 요소 맞춤화).

몇 가지 주목할 사항은 다음과 같다.

  • 메서드(GET, POST)가 필요한 경우 HTTP 사양(ex:jobs.user.esp)에 따라 대문자로 지정된다.

  • 다양한 스크립트 엔진이 지원된다.

    • HTL(HTML 템플릿 언어 - Adobe Experience ManagerHTML 기본 및 권장 서버측 템플릿 시스템): html

    • ECMAScript(JavaScript) 페이지(서버측 실행): .esp, .ecma

    • Java™ 서버 페이지(서버측 실행): .jsp

    • Java™ 서블릿 컴파일러(서버측 실행): .java

    • JavaScript 템플릿(클라이언트측 실행): .jst

지정된 AEM 인스턴스에서 지원하는 스크립트 엔진 목록이 Felix 관리 콘솔(http://:/system/console/slingscripting).

또한 Apache Sling은 다른 인기 있는 스크립팅 엔진(ex: Groovy, JRuby, Freemarker)과의 통합을 지원하며 새로운 스크립팅 엔진을 통합하는 방법을 제공한다.

위의 예를 사용하여 sling:resourceType은 hr/jobs 다음 기간:

  • GET/HEAD 요청 및 .html로 끝나는 URL(기본 요청 유형, 기본 형식)
    스크립트는 /apps/hr/jobs/jobs.esp이며 sling:resourceType의 마지막 섹션이 파일 이름을 형성한다.

  • POST 요청(GET/HEAD를 제외한 모든 요청 유형, 메서드 이름은 대문자로 지정)
    POST는 스크립트 이름에 사용된다.
    스크립트는 /apps/hr/jobs/jobs.POST.esp.

  • .html로 끝나지 않는 다른 형식의 URL
    ex) ../content/corporate/jobs/developer.pdf
    스크립트는 /apps/hr/jobs/jobs/pdf/esp; 접미사가 스크립트 이름에 추가된다.

  • 선택기가 있는 URL
    선택기를 사용하여 동일한 콘텐츠를 대체 형식으로 표시할 수 있다. 예를 들어 프린터에 친숙한 버전, rss피드 또는 요약이 있다.

    선택기가 다음과 같을 수 있는 프린터용 버전을 보는 경우
    ../ content/corporrate/jobs/developer.print.html

    스크립트는 /apps/hr/jobs/jobs/print.esp; 선택기가 스크립트 이름에 추가된다.

  • sling:resourceType이 정의되지 않은 경우 다음을 수행한다.

    • 컨텐츠 경로는 적절한 스크립트를 검색하는 데 사용된다(ResourceTypeProvider가 활성화된 경우).
      예를 들어 다음 스크립트 ../content/corporate/jobs/developer.html에서 검색을 생성한다.
      /apps/content/corporate/jobs/.

    • 기본 노드 유형이 사용된다.

  • 스크립트가 없으면 기본 스크립트가 사용된다.

    기본 렌디션은 일반 텍스트(.txt), HTML(.html)및 JSON(.json)으로 지원되며, 이 모든 렌디션은 노드의 속성(적절한 형식)을 나열한다. 확장 .res의 기본 렌디션 도는 요청 확장명이 없는 요청은 리소스를 스풀 처리하는 것이다.(가능한 경우).

  • HTTP 오류 처리(코드 403 또는 404)의 경우 Sling은 다음 중 하나에서 스크립트를 찾는다.

    • /apps/sling/servlet/errorhandler 위치 사용자 지정된 스크립트

    • 또는 각각 표준 스크립트 /libs/sling/servlet/errorhandler/403.esp 또는 404.esp의 위치다.

주어진 요청에 여러 스크립트가 적용되는 경우 가장 일치하는 스크립트를 선택한다. 일치가 구체적일수록 더 좋다. 즉, 요청 확장이나 메서드 이름 일치에 관계없이 더 많은 선택기가 더 잘 일치한다.

예를 들어 리소스에 대한 액세스 요청
/content/corporate/jobs/developer/print/a4/html
유형
sling:resourceType="hr/jobs"

올바른 위치에 다음 스크립트 목록이 있다고 가정한다.

  1. GET.esp
  2. jobs.esp
  3. html.esp
  4. print.esp
  5. print.html.esp
  6. print/a4.esp
  7. print/a4/html.esp
  8. print/a4.html.esp

기본 설정 순서는 (8)-(7)-(6)-(5)-(4)-(3)-(2)-(1)이다.

리소르 유형 외에도 sling:resourceType 속성을 입력하면 리소스 슈퍼 타입도 있다. sling:resourceSuperType. 이러한 슈퍼 타입은 스크립트를 찾으려고 할 때도 고려된다. 리소스 슈퍼 유형의 장점은 기본 리소스 유형이 있는 리소스의 계층 구조를 형성할 수 있다는 것이다. sling/servlet/default(기본 서블릿에서 사용)은 사실상 루트이다.

리소스의 리소스 슈퍼 타입은 두 가지 방식으로 정의될 수 있다.

  • 작성자 sling:resourceSuperType 리소스의 속성이다.
  • 작성자 sling:resourceSuperType 이 속한 노드의 속성 sling:resourceType 포인트.

ex:

  • /

    • a

    • b

      • sling:resourceSuperType = a
    • c

      • sling:resourceSuperType = b
    • x

      • sling:resourceType = c
    • y

      • sling:resourceType = c
      • sling:resourceSuperType = a

유형 계층:

  • /x
    • 은(는) [c, b, a, ]
  • /y
    • 계층 구조 : [c, a, ]

이유는 다음과 같다. /y 다음 포함:sling:resourceSuperType 속성 /x에서 지원되지 않으므로 해당 슈퍼타입을 리소스 유형에서 가져온다.

Sling 스크립트는 직접 호출할 수 없다.

Sling에서 스크립트는 REST 서버의 엄격한 개념을 손상시킬 수 있으므로 직접 호출할 수 없다. 리소스와 표현을 혼합해야 한다.

스크립트를 직접 호출하는 경우 스크립트 내에 리소스를 숨김으로써 프레임워크(Sling)가 더 이상 해당 리소스를 알지 못한다. 따라서 다음과 같은 특정 기능이 손실된다.

  • GET 이외의 http 메서드에 대한 자동 처리
    • sling 기본 구현으로 처리되는 POST, PUT, DELETE
    • 다음 POST.jsp sling:resourceType 위치의 스크립트
  • 코드 아키텍처가 더 이상 깔끔하거나 구조화되지 않으므로 대규모 개발의 경우 매우 중요

sling:include를 사용하여 기존 요소 참조

마지막으로 스크립트 내의 기존 요소를 참조해야 한다는 점을 고려해야 한다.

보다 복잡한 스크립트는 여러 리소스(검색, 사이드바, 푸터, 목록 요소 등)에 액세스해야 한다.

sling:include("/<path>/<resource>")
여기에는 이미지 렌더링에 대한 기존 정의를 참조하는 다음 문과 같이 참조된 리소스의 정의가 효과적으로 포함된다.

%><sling:include resourceType="geometrixx/components/image/img"/><%

0개의 댓글