개별 페이지 가공하기¶
ePub 서비스의 강력함은 추출된 개별 페이지를 함수체인 으로 확장하면서 발휘된다.
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"
}
]
}
]
선택적으로 gray
와 resize800
을 호출하여 맞춤 서비스가 가능하다.
대신 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"
위와 같이 입력하면 암호화된 이미지를 해석할 수 없기에 이미지 변환이 실패하므로 주의한다.