개별 페이지 가공하기

ePub 서비스의 강력함은 추출된 개별 페이지를 함수체인 으로 확장하면서 발휘된다.

../../../_images/archive.png

추출된 개별페이지를 묶기전에 가공한다.

M2가 제공하는 모든 함수와 연계가 가능하며 몇 가지 예제를 통해 사용법을 설명한다.

이미지 가공하기

ePub문서의 모든 이미지를 가공할 수 있다. 이미지처리 함수인 dims 를 활성화한 뒤 archive 규칙을 구성한다.

{
   "hosting": [
      {
         "name": "example.com",
         ... (생략) ...
         "functions": {
            "contents": {
               "dims": {
                  "meta" : {
                     "enable": true,
                     "keyword": "dims"
                  }
               },
               "epubedit": {
                  "meta" : {
                     "enable": true,
                     "keyword": "epubedit"
                  },
                  "archive": {
                     "enable": true,
                     "rules": [
                        {
                           "name": "gray",
                           "matchingList": [
                              {
                                 "pattern": "/image/i-([^/]+).jpg",
                                 "replace": "/image/i-#1.jpg/dims/grayscale/true"
                              }
                           ]
                        }
                     ]
                  }
               },
               "unzip": {
                  "meta" : {
                     "enable": true,
                     "keyword": "unzip"
                  }
               }
            }
         }
      }
   ]
}

기본설정과 단위테스트 를 기준으로 2가지 구성이 추가되었다.

  • 이미지처리를 위해 dims 함수가 활성화되었다.

  • 추출된 리소스 중 path 규칙이 /image/i-([^/]+).jpg 인 리소스에 대해 대해 흑백변환 함수인 /dims/grayscale/true 를 수행하는 gray 라는 규칙이 생성되었다.

호출규격은 다음과 같다.

# 원본
https://example.com/book.epub

# 1~10페이지 추출
https://example.com/book.epub/epubedit/trim/1-10

# 전체페이지 흑백이미지 변환
https://example.com/book.epub/epubedit/archive/gray

# 1~10페이지 추출 후 흑백이미지 변환
https://example.com/book.epub/epubedit/trim/1-10/archive/gray

Important

archive 명령어는 하나만 수행이 가능하다. 복합구성이 필요한 경우 해당 규칙을 별도로 생성 후 호출해야 한다.

이미지 리사이즈

위 예제에 더해 리사이즈 규칙을 추가할 수 있다. 다음 예제는 resize800 조건을 추가한 것이다.

# functions.contents.epubedit.archive

"rules": [
   {
      "name": "gray",
      "matchingList": [
         {
            "pattern": "/image/i-([^/]+).jpg",
            "replace": "/image/i-#1.jpg/dims/grayscale/true"
         }
      ]
   },
   {
      "name": "resize800",
      "matchingList": [
         {
            "pattern": "/image/i-([^/]+).jpg",
            "replace": "/image/i-#1.jpg/dims/resize/800x600"
         }
      ]
   }
]

선택적으로 grayresize800 을 호출하여 맞춤 서비스가 가능하다. 대신 archive 규칙은 단일호출만 가능하기 때문에 다음과 같은 호출은 바람직하지 않다.

https://example.com/book.epub/epubedit/archive/gray/archive/resize800/

위와 같이 복합구성이 필요한 경우 별도의 조건을 추가하는 것이 바람직하다.

# functions.contents.epubedit.archive

"rules": [
   ... (생략) ...
   {
      "name": "gray_resize800",
      "matchingList": [
         {
            "pattern": "/image/i-([^/]+).jpg",
            "replace": "/image/i-#1.jpg/dims/resize/800x600/grayscale/true"
         }
      ]
   }
]

다음과 같이 호출한다.

https://example.com/book.epub/epubedit/archive/gray
https://example.com/book.epub/epubedit/archive/resize800
https://example.com/book.epub/epubedit/archive/gray_resize800

리소스 암호화하기

ePub문서의 특성상 개인화, 보안과 연결되는 경우 콘텐츠 암호화가 필요하다. 이미지 가공하기 와 유사하게 구성되며 달라지는 부분만 설명한다. denc 암호화 함수를 활성화한다.

{
   "hosting": [
      {
         "name": "example.com",
         ... (생략) ...
         "functions": {
            "contents": {
               "denc": {
                  "bulk" : {
                     "enable": true,
                     "keyword": "dencbulk",
                     "maxSourceSize": 500,
                     "encrypt": {
                        "algorithm": "AES_128_CBC",
                        "iv": "0000000000000000",
                        "token": "1234567890123456",
                        "key": "$Token"
                     }
                  }
               }
               ... (생략) ...
            }
         }
      }
   ]
}

archive 규칙에 암호화 함수를 연동한다.

# functions.contents.epubedit.archive

"rules": [
   {
      "name": "myenc",
      "matchingList": [
         {
            "pattern": "/image/i-([^/]+).jpg",
            "replace": "/image/i-#1.jpg/dencbulk/true"
         }
      ]
   }
]

호출규격은 다음과 같다.

# 모든 페이지의 jpg 를 암호화한다.
https://example.com/book.epub/epubedit/archive/myenc

Note

  • 암호화시 클라이언트 cookie 정보등을 조합하여 동적으로 암호화키를 생성하면 맞춤형 암호화가 가능하다.

  • ePub 문서 전체를 암호화하려면 표준함수체인을 사용한다.

멀티 함수체인 구성하기

이상의 모든 예제를 결합해 흑백이미지 변환 후 암호화도 가능하다. 사전에 사용되는 단위 함수가 모두 활성화되어 있어야 한다.

{
   "hosting": [
      {
         "name": "example.com",
         ... (생략) ...
         "functions": {
            "contents": {
               "dims": {
                  "meta" : {
                     "enable": true,
                     "keyword": "dims"
                  }
               },
               "denc": {
                  "bulk" : {
                     "enable": true,
                     "keyword": "dencbulk",
                     "maxSourceSize": 500,
                     "encrypt": {
                        "algorithm": "AES_128_CBC",
                        "iv": "0000000000000000",
                        "token": "1234567890123456",
                        "key": "$Token"
                     }
                  }
               }
               ... (생략) ...
            }
         }
      }
   ]
}

선행되어야 하는 작업을 먼저 명시한다. 다음은 이미지를 흑백으로 변환 후 암호화하는 archive 규성이다.

# functions.contents.epubedit.archive

"rules": [
   {
      "name": "gray_enc",
      "matchingList": [
         {
            "pattern": "/image/i-([^/]+).jpg",
            "replace": "/image/i-#1.jpg/dims/grayscale/true/dencbulk/true"
         }
      ]
   }
]

matchingList 는 매칭되는 우선순위대로 동작한다. 만약 cover 에 대해서만 암호화를 뺄 수 있다면 가장 높은 우선순위에 배치한다.

# functions.contents.epubedit.archive

"rules": [
   {
      "name": "gray_enc",
      "matchingList": [
         {
            "pattern": "/image/i-cover.jpg",
            "replace": "/image/i-cover.jpg/dims/grayscale"
         },
         {
            "pattern": "/image/i-([^/]+).jpg",
            "replace": "/image/i-#1.jpg/dims/grayscale/true/dencbulk/true"
         }
      ]
   }
]

Warning

함수체인은 순서가 중요하다.

"replace": "/image/i-#1.jpg/dencbulk/true/dims/grayscale/true"

위와 같이 입력하면 암호화된 이미지를 해석할 수 없기에 이미지 변환이 실패하므로 주의한다.