이미지 용량 최적화

해결하고 싶은 문제

고용량 이미지 파일이 서비스되는 경우 전송비용이 상승할 뿐만 아니라 클라이언트 서비스 품질이 저하되는 문제가 발생한다.

솔루션/패턴 설명

이미지가 스토리지에 저장되면 통제가 불가능하다고 생각하는 경향이 있다. 스토리지에 저장되기 전에 이미지 최적화 프로세스를 진행하려는 시도는 실패할 확률이 높다. 서비스 고도화에 따라 스토리지로 향하는 입구가 많아지기 때문이다.

입구를 모두 통제할 수 없다면 단일 출구 정책을 사용하는 것이 효과적이다.

../../_images/dgm001.png

이미지서버가 이미지를 전송/배포하기 전 고용량 이미지를 최적화한다.

구현

  • 이미지 스토리지 앞에 M2 를 배치한다.

  • DIMS 기능을 활성화한다. (최대크기를 제한하지 않는다.)

    {
      "hosting": [
        {
          "name": "image.example.com",
          "origin": {
            "protocol": "http",
            "address": [ "internal-object.example.com" ]
          },
          "urlRewrites" : [
            {
              "pattern": "image.example.com/(.*\\.(jpg|png).*)",
              "replace": "image.example.com/#1/dims/optimize"
            }
          ],
          "functions": {
            "contents": {
              "dims": {
                "meta" : {
                  "enable": true,
                  "keyword": "dims",
                  "maxSourceSize": 20
                }
              }
            }
          }
        }
      ]
    }
    
  • 이미지 스토리지 도메인을 M2 로 위임한다.

장점/효과

  • 기존 URL을 변경없이 사용한다.

  • 항상 균일하게 최적화된 이미지 서비스가 가능하다.

  • 별도의 관리/배치 프로세스 없이 이미지 처리가 자동화된다.

  • 이미지 최적화 정책이 변경되더라도 무중단 정책 변경이 가능하다.

  • 이미지 처리량이 많아질 경우 손쉽게 Scale-out이 가능하다.

주의점

이미지 저장시 최소한의 용량 최적화는 반드시 필요하다.

  • 이미지 크기가 너무 크면 자칫 스토리지 대역폭에 병목이 발생할 수 있다.

  • 이미지 최적화를 위한 컴퓨팅 파워가 과도하게 투입될 수 있다.

기타

  • 자주 변환되는 이미지를 캐싱해 놓으면 불필요한 중복 최적화를 방지할 수 있다.