0.3 C
New York
수요일, 4월 8, 2026

Buy now

Home Blog Page 262

무료로 구축하는 이미지 최적화 자동화 시스템

이전부터 효율적인 이미지 최적화 방안에 대해 고민을 했습니다. 오늘은 그동안 고민했던 효율적인 이미지 최적화 방안에 대해서 살펴보겠습니다.

1. 이미지 최적화를 고민하는 이유

먼저 이 글을 시작하게 전에 이미지 최적화를 고민한 이유를 간단히 정리해 보았습니다.

1.1. 풍부한 소스를 지닌 콘텐츠로 경쟁력을 높여야

여기와 같은 블로그 사이트든, 쇼핑몰이든 경쟁력을 가지려는 그 사이트가 얼마나 콘텐츠 경쟁력을 가지고 있느냐가 매우 중요해지고 있습니다.

사이트 방문자에게 풍부한 콘텐츠 이용 경험을 주기 위해서는 다양한 정보 소스를 풍부하게 제공하고, 흥미를 끌 수 있도록 배치해 쉽고 편하게 콘텐츠를 이용하도록 만드는 것이 필요합니다.

이러려면 포스팅이든 새로운 콘텐츠이든 이미지나 동영상 등의 정소 원천을 과하다고 생각될 정도로 풍부하게 사용해야 합니다. 웹 페이지가 가질 수 있는 장점을 최대한 활용해야 어느 정도 경쟁력을 가질 수 있습니다.

이전에는 트래픽이나 로딩 속도를 고려해 이미지나 동영상 사용을 자제하거나 최소한으로 활용했다면 앞으로는 콘텐츠 경쟁력 자체에 중점을 둬야 합니다.

이제는 5G가 전면에 등장하는 등 어느 정도 속도와 트래픽을 보장할 수 있는 시대로 나아가고 있습니다.

1.2. 속도도 중요하지만 콘텐츠 질이 더 중요

이제는 트래픽이나 속도가 중요한 것이 아니라 얼마나 풍부하게 충실한 콘텐츠를 만들 수 있느냐가 점점 더 중요해지고 있습니다.

이는 예전부터 지당하게 여견운 일종의 언명이었지만 요즘과 같이 동영상을 비롯한 다양한 콘텐츠 포맷이 경쟁하면서 콘텐츠의 질과 풍부함은 더욱 더 중요해졌습니다.

기술의 발전과 콘텐츠 최적화 기술의 발전으로 이제는 최적화가 용이해져 풍부한 콘텐츠 소스를 적용하면서도 느리다는 느낌을 주지 않아 콘텐츠 질로서 승부할 수 있는 시기가 왔습니다.

1.3. 점차 중요해지는 이용자와 커뮤니케이션

이전에도 중요해졌지만 요즘 더 중요해지는 것이 기업과 이용자 또는 소비자간 커뮤니케이션이 매우 중요해졌습니다.

이는 이용자 리뷰나 Q&A와 같은 방식으로 이용자와 적극적으로 커뮤니케이션해야합니다. 이러다보면 글과 콘텐츠를 올리는 고객 및 이용자가 늘어야 합니다.

사이트에 글을 쓰는 사람이 단 관리자 한명이라면 애정을 가지고 최적화된 이미지를 사용하겠지만 불특정 다수가 글을 쓰는 경우 최적화된 이미지를 사용하는 확율은 그리 크지 않습니다.

더우기 모바일이 보편화된 시점에서 이미지 편집이 쉽지는 않기 때문에 대부분 그냥 활영한 사진을 그대로 올릴 가능성이 높죠.

스마트폰 사진 사양이 고급화되면서 이미지 크기도 커졌기때문에 대용량 파일을 올릴 가능성이 커지지죠.

그렇기때문에 정기적으로 이미지 크기와 품질을 최적화해서 적절한 사이즈로 만들어주는 것이 필요합니다.

2, 이미지 최적화 방법

그러면 어떻게 이미지를 최적활 수 있을까요? 이미지를 최적화해주는 다양항 솔류션이 있음에도 불구하고, 하나하나 점검해 보면 괜찮은 선택지는 별로 없습니다.

그래도 몇가지 고민하고 탐색해본 내용을 여기에 정리해 봅니다.

2.1. 플러그인 + 유료 서비스 이용

워드프레스에는 당연히 수많은 이미지 최적화를 도와주는 플러그인들이 있습니다. 이미지 압축 등 이미지 최적화에 대한 니즈가 많기 때문에 관련 플러그인도 괸장히 많습니다.

그러나 이들 플러그인들을 자세히 살펴보다보면 많은 한계점을 발견하게 됩니다.

쓸만한 플러그인은 유료가 많다

그러나 워드프레스용 플러그인들 상당수는 본격적으로 이미지 최적화를 하려면 일정 비용을 내야 합니다.

이미지 크기를 줄이고, 이미지 압축도를 변경하는 등의 작업은 서버 자체를 활용해야 하므로 워드프레스 내에서 자체적으로 해결하기엔 한계가 큽니다.

그렇기때문에 API 등을 활용해 별도 작업 서버에서 작업 후 보내주는 방식을 취하게 되죠.

그리고 이러한 방식은 무료로 운영하기 힘들기도하고 어느 정도 수요도 있기 때문에 자연스럽게 비지니스 모델로 이어지고 있다는 생각입니다.

이미지 최적화 플러그인을 잘 살펴보면 무료로 쓸만한 플러그인이 많지 않습니다. 쓸만하다싶어 본격적으로 사용하려면 비용을 내야 합니다.

저의 경우 이미지량이 어느 정도인지 봤더니 12GB쯤 되더군요. 워드프레스는 다양한 크기의 이미지를 만들기 때문에 용량이 더 많은 스토리지가 필요합니다.

앞으로도 계속 콘텐츠를 만들면 이미지 및 동영상이 계속 증가할텐데 이를 유료 서비스로 해결하기엔 감당이 되지 않습니다.

워드프레스 속도에 악영향을 끼치기도

그리고 이미지 최적화 플러그인들은 API를 이용하든 다양한 서비스를 제공하기 때문이든 워드프레스 자체 속도에 영향을 미치는 경우가 많습니다.

EWWW Image Optimizer, Smush Image Compression & Optimization, Imsantiy 등은 대표적인 이미지 관리 플러그인이지만 동시에 사이트 속도르 느리게 만드는 플러그인이기도 합니다.

2.2. CDN 활용 – 유료

일부 CDN을 사용하면 이미지 압축 및 WebP 파일 생성등 로딩 속도를 높이고, 트래픽을 절감해주는 기능을 통해서 최상의 이미지 최적화 효과를 누릴 수 있습니다.

예를들어 Akamai은 이미지 품질을 유지하면서도 이미지 용량을 압축해주며, 모바일 및 데스크 탑 PC 등과 같은 이용자 디바이스별로 최적 크기의 이미지를 보여주어 속도를 개선하며, WebP(크롬, 엣지, 파이어폭스 등 지원)나 JPEG-XR/JPEG 2000과 같이 특정 브라우저에서 최고 효과를 내는 이미지 포맷으로 변환해 보여줍니다.

다만 이런 서비스는 비쌉니다. Akamai은 1TB 트래픽당 350$ 사용료를 받습니다.

무료 플랜이 있는 Cloudflare의 경우에도 자동으로 기기에 맞추어 압축해 주는 서비스는 유료(월 20$)인 프로부터 제공합니다.

2.3. 이미지 최적화 솔류션 – 유료

또한 이미지 최적화 서드파티 솔루션업체드링 많이 존재합니다.

Cloudinary, imgix, Fastly’s Image Optimizer, Instart Logic’s SmartVision, ImageOptim API등이 그것인데요. 이들 업체는 이미지 최적화를 자동으로 해주는 종합 솔류션들을 탑재하고 비지니스를 하고 있습니다.

당연히 이들은 제한적으로 무료 서비스도 제공하지만 제대로 사용하려면 유료로 서비스를 이용해야 합니다.

위 리스트중에서 맨 처음으로 언급된 Cloudinary는 Free/Plus/Advanced/Custom 서비스가 있는데요.

Free 플랜의 경우 월 트래픽을 25GB를 줍니다.. 저의 경우 최소 300GB가 나오기때문에 Free 플랜은 사용 불가하고 월 99$짜리 Plus 플랜을 사용해야 합니다.

2.4. 서버에서 자체적으로 관리 – 무료

비용 문제나 속도 저하 문제로 플러그인을 사용할 수 없다면 서버에서 자체적으로 이이미지 최적화를 할 수 밖에 없습니다.

다행히 우분투와 같은 서버에서 적용할 수 있는 다양한 이미지 최적화 패키지들이 존재하기 때문에 이를 잘 활용하면 완벽하지는 않지만 해결 가능할 것입니다.

물론 서버에서 작동하도록 만들어야하므로 상당한 서버 운용 능력이 필요하다는 어려움은 있습니다.

구체적인 방법은 다음 장에서 차분히 설명하기로 하죠.

3. 서버에서 이미지 관리 프로세스

그러면 이제부터 서버에서 이미지 관리하는 방안을 살펴보도록 하겠습니다.

참고로 저는 Vultr VPS를 이용하고 있으며, Ubuntu 18.04에 웹서버는 NGINX를 사용하고 있기 때문에 이를 기반으로 설명해 보고자 합니다.

  • 서버 업체 : Vultr(일본 동경)
  • 서버 상품 : High Frequency 4GB RAM, 2 CPU
  • 서버 타입 : Ubuntu 18.04
  • 웹서버 : NGINX

조금 더 구체적으로 어떤 솔류션을 상요해야 할까요? 무슨 작업이 필요할까요?

다양하고 훌륭한 방법이 많이 있겠지만 저는 아래와 같은 프로세스를 사용했습니다.

  • 이미지 최적화를 진행하기 전에 최적화 대상 이미지들을 백업받습니다.
  • 그 다음 업로드된 이미지 리사이즈 여부를 검토, 리사이즈 합니다. 이때 기준은 사이트 도구 – 미디어에서 정의하는 최대 이미지 사이즈에 맞추기로 합니다.
    저는 최대 이미지 폭을 1024로 정했기 때문에 폭이 1024를 넘으면 1024로 줄이도록 했고
    이미지 높이는 어쩔 수 없이 긴 이미지를 사용하는 경우가 많아서 이는 컨트롤하지 않기로 했습니다. 쇼핑몰의 경우 설명을 이미지로 대체해 아주 긴 이미지를 사용하는 경우가 많죠.
  • 다음으로는 JPEG와 PNG 이미지를 압축합니다.
  • 다음으로는 WebP나 JPEG-XR과 같은 특정 브라우저에서 효율적인 이미지 포맷을 생성합니다.
  • 이미지가 효과적으로 이용자들에게 노출될 수 있도록 Lazy Loading을 적용합니다.

이러한 이미지 최적화 프로세스는 서버에 새로운 이미지가 발생시마다 바로 바로 할 수도 있고 정기적으로 모아 한번에 처리하는 방법이 있습니다.

대부분 서비스는 이미지가 새로 생성되는 순간 관련 작업을 진행해 항상 최적의 상태로 이미지를 최적화합니다.

그러나 이러한 방식은 서버에 무리를 줄 수도 있기 때문에 일정 시간만다 일괄 처리(Batch) 하는 것도 나쁘지는 않을 듯 합니다.

여기에서는 더 적용하기가 쉽기 때문에 크론탭을 사용해 일정 시간마다 일괄 처리하는 방법을 채택해 설명드립니다. 저는 1시간마다 실행토록 만들었습니다.

4. 서버를 이용한 이미지 최적화 시스템

여기서터는 위에서 정의한 프로세스에 따라서 이미지 최적화 시스템(?)을 구축하는 구체적인 방법을 살펴봅니다.

4.1. 이미지 백업

이미지 최적화를 진행 전 백업을 진행합니다.

최적화 시스템 구축 방법에 따라 해당 이미지만을 백업 받을 수도 있고, 폴더를 통채로 백업받을 수도 있습니다.

저는 서버 공간도 남아돌고, CPU도 남아돌고 있기 때문에 폴더채 백업받는 방안을 선택했습니다. 그리고 이는 우선 서버 내에서 백업을 하는 것으로 했습니다.

4.1.1 백업 디텍토리 만들기

# mkdir /backup         # backup 디렉토리 만들기
# chmod +x  /backup  # 퍼미션 조정
Code language: PHP (php)

4.1.2. 백업 스크립트 만들기

이어서 백업 스크립트를 만듭니다. 이걸 실핼해도 되고, 뒤에서 설명하는 크론탭에서 자동 실행토록 하면 됩니다.

# 이미지 최적화 진행 전에 백업하기
tar -zcvf /backup/"happistimagebackup$(date +%y%m%d%H%M).tgz" /home/happist/wp-content/uploads/2020 1>/dev/null 2>/dev/nullCode language: PHP (php)

4.1.3. 오래된 백업 파일 삭제

백업을 계속하다보면 엄청난 백업 파일이 쌓이게 됩니다. 그러면 아무리 서버 용량이 많아도 곧 용량 부족 상태에 이르게 되겠죠.

그래서 일정 시간이 경과한 백업 파일은 삭제하도록 합니다. 여기서는 10일 지난 백업 파일은 삭제하도록 했습니다.

find /backup/ -type f -mtime +10 | sort | xargs rm -fCode language: PHP (php)

워드프레스 자동 백업 시스템에 대해서는 아래 글을 참조하세요.

4.2. 이미지 리사이즈

먼저 이미지가 새로 업로드되면 이미지가 지나치게 크지는 않은지를 검토합니다.

이 전 글에서도 언급했지만 사이트에 글을 쓰는 사람이 단 관리자 한명이라면 애정을 가지고 최적화된 이미지를 사용하겠지만 불특정 다수가 글을 쓰는 경우 최적화된 이미지를 사용하는 확율은 그리 크지 않습니다.

더우기 모바일에서 댓글 등의 글을 쓴다면 모바일에서 이미지 편집이 쉽지는 않고 그 귀찮은 일을 할 사람이 거의 없기 때문에 대부분 그냥 활영한 사진을 그대로 올립니다.

스마트폰 카메라 사양이 고급화되면서 이미지 크기도 커졌기때문에 대용량 파일을 그냥 올릴 가능성이 커졌습니다. 물론 댓글이나 상품 리뷰 시 이미지를 사용하지 않토록 만들었다면 별 문제는 없지만 대세는 적극적으로 이미지를 댓글과 상품 리뷰에 적용하고 있는 상황이기도 합니다.

그렇기때문에 정기적으로 이미지 크기와 품질을 최적화해서 적절한 사이즈로 만들어주는 것이 필요합니다.

저는 이러한 이미지 크기를 점검해 지나치게 크다면 사이즈를 줄이는 것을 Imagemagick를 이용해 구현했습니다.

기준으로 폭만 변경하려면 widthxheighr중에서 앞의 width만 적어주고, 높이를 맞추려면 xheight를 사용합니다. 아래 내용을 보시고 제가 사용한 명령어를 그 아래에 소개해 놓았습니다.

  • 폭만 변경하여면 width> 예를 들어 1024>
  • 높이만 변경하려면 xheight> 예를 들어 x1024>
# JPEG 이미지가 지나치게 크다면 폭을 1024px로 줄임
find /home/happist/wp-content/uploads/2020 -iname '*.jpg' -exec convert \{} -verbose -resize 1024\> \{} \;

# PNG 이미지가 지나치게 크다면 폭을 1024px로 줄임
find /home/happist/wp-content/uploads/2020 -iname '*.png' -exec convert \{} -verbose -resize 1024\> \{} \;
Code language: PHP (php)

ImageMagick를 이용한 이미지 리사이즈에 대해서는 아래 글을 참조해 보세요.

4.3. 이미지 압축

적절한 크기의 이미지로 사이즈 조정되었다면 각 이미지를 압축하는 단계로 진입니다. 이미지 압축 대상은 가장 많이 사용하는 JPEG와 PNG 이미지입니다.

JPEG 이미지 압축 방법

JPEG 이미지를 압축하는 방법은 여러가지가 소개되어 있습니다. 각기 자기 방법이 최고라고 주장하고 있죠.

그렇지만 전문가들의 평가를 보면 MozJPEGGuetzli를 가장 좋은 JPEG 이미지 압축 방법으로 소개하고 있습니다.

그렇지만 Guetzli는 가장 압축 효과가 뛰어난 대신 인코딩 시간이 많이 걸리고, Progressive를 지원하지 않는등 약점이 있습니다.

그래서 저는 MozJPEG를 사용하는 JPEG-recompress를 사용하기로 했습니다.

JPEG-recompress를 이용해 JPEG와 PNG 이미지를 압축하는 아래와 같은 명령을 사용했습니다.

# jpeg-recompress를 이용 JPEG 이미지 압축
find /home/happist/wp-content/uploads/2020 -type f -iname '*.jpg' -exec jpeg-recompress --quality medium --min 60 --method smallfry \{} \{} \;Code language: PHP (php)

JPEG 압축 방법에 대한 설명은 아래 글을 참조하세요

PNG 파일 압축 방법 – pngquant 사용

마찬가지로 PNG 이미지 압축 방법도 여러가지가 있지만 가장 효율이 좋은 압축 방법으로 pngquant가 추천되고 있기에 이를 사용하기로 했습니다.

pngquant를 이용한 PNG 이미지 파일 압축 명령을 아래와 같습니다.

# pngquant를 이용 PNG 이미지 압축
find /home/happist/wp-content/uploads/2020 -iname "*.png" -exec pngquant --force --quality=40-100 --skip-if-larger --strip --verbose \{} --output \{} \;Code language: PHP (php)

pngquant를 비롯한 PNG 이미지 파일 압축에 대한 내용은 하기 포스팅을 참조하세요

4.4. WebP 적용 및 WebP 이미지 생성

기존 JPEG이미지보자 20%이상 압축효과가 좋다는 WebP 이미지를 사용할 수 있도록 만들고 WebO 이미지를 생성하는 방법을 알아 봅니다.

여기서는 아주 간단히 정리해 설명하니 자세한 내용은 아래 링크하는 포스팅을 참조하시기 바랍니다.

WebP이미지를 사용 가능하게 만들자.

웹서버가 NGINX인 경우 WebP를 지원하는 브라우져가 WebP 이미지를 인식토록 하기위해 아래와 같은 과정을 거칩니다.

먼저 NGINX 웹서버 동작을 설정하는 http 블락안에 다음 코드를 추가합니다.

map $http_accept $webp_suffix {
  default   "";
  "~*webp"  ".webp";
}Code language: PHP (php)

다음으로는 server 블락안에 다음 코드를 추가합니다.

이는 브라우져가 WebP 이미지를 지원하는 경우, 모든 이미지(jpg, png)에 대한 WebP 이미지를 로딩하도록 합니다.

location ~* ^.+\.(jpe?g|png) {
  add_header Cache-Control "public, no-transform";
  add_header Vary "Accept-Encoding";
  try_files $uri$webp_suffix $uri =404;
  expires max;
}Code language: PHP (php)

WebP 이미지 생성

그 다음으로는 WebP 이미지를 만들기 위해 아래와 같은 명령을 사용합니다.

물론 이 명령이 제대로 실행되면면 사전 서버에 webp 패키지를 설치해야 합니다.

apt-get install webpCode language: PHP (php)

JPEG 이미지나 PNGㅇ 이미지에 대한 WebP 이미지 생성은 아래와 같은 명령어를 사용합니다.

# JPEG와 PNG 이미지 파일을 WebP파일로 변환 
echo "===== Converting images into WebP .webp ====="
for x in `find /home/happist/wp-content/uploads/2020 -type f \( -iname \*.jpeg -o -iname \*.jpg -o -iname \*.JPG -o -iname \*.png \)`
  do cwebp -quiet -q 80 ${x} -o ${x}.webp;
  echo "Converted $x to ${x}.webp"
doneCode language: PHP (php)

위와 같이 WebP 이미지 이용에 대해서는 아래 포스팅을 참조해 보시기 바랍니다.

4.5. 이미지 Lazy Loading 적용

페이지 로딩 시 페이지 전체의 이미지를 한꺼번에 로딩하지 말고 이용자가 이미지를 볼 시점에 로딩시켜주자는 것이 lazy Loading인데요.

이 lazy loading의 효과나 사용자 경험 관련해서는 긍정과 부정이 섞여 있습니다. 심지어 lazy loading은 인터넷 속도가 느리던 시절의 유산이므로 요즘에는 전혀 신경쓸 필요가 없다는 주장도 있습니다.

사용자 경험 관점에서 마우스를 내리면 그제야 이미지가 로딩되는 경험은 그리 좋은 경험은 아닙니다.

그렇지만 유튜브의 경우 지나치게 많은 이미지와 자바스크립트 등을 로딩하면서 확실히 속도를 늦추고 있기 때문에 Lazy Loading 효과가 아주 극명합니다.

저는 Lazy Loading은 유튜브 동영상과 이미지 lazy loading을 지원하는 플러그인을 사용해 로딩 시간이 많이 걸리는 문제를 해결했습니다.

5. 이미지 최적화 크론탭 설정

위에서 설명한 일련의 이미지 최적화 과정을 하나씩 하나씩 실행하기는 쉽지 않으므로 우분투 서버의 크론탭 기능을 활용해 자동화 합니다.

저의 경우 매시 15분마다 살행되도록 성정했습니다.

실행 배치 파일 만들기

먼저 실행 배치 파일을 만듭니다. 여기서는 nano 편집기를 이용해 webp.sh 파일을 만듭니다.

nano webp.shCode language: PHP (php)

nano 편집기가 열리면 아래와 같은 실행 명령문을 입력하고 저장합니다.

# 이미지 최적화 진행 전에 백업하기
tar -zcvf /backup/"happistimagebackup$(date +%y%m%d%H%M).tgz" /home/happist/wp-content/uploads/2020 1>/dev/null 2>/dev/null

# 10일이 지난 백업 파일은 삭제합니다.
find /backup/ -type f -mtime +10 | sort | xargs rm -f

# JPEG 이미지가 지나치게 크다면 폭을 1024px로 줄임
find /home/happist/wp-content/uploads/2020 -iname '*.jpg' -exec convert \{} -verbose -resize 1024x10240\> \{} \;

# PNG 이미지가 지나치게 크다면 폭을 1024px로 줄임
find /home/happist/wp-content/uploads/2020 -iname '*.png' -exec convert \{} -verbose -resize 1024x10240\> \{} \;

# jpeg-recompress를 이용 JPEG 이미지 압축
find /home/happist/wp-content/uploads/2020 -type f -iname '*.jpg' -exec jpeg-recompress --quality medium --min 60 --method smallfry \{} \{} \;

# pngquant를 이용 PNG 이미지 압축
find /home/happist/wp-content/uploads/2020 -iname "*.png" -exec pngquant --force --quality=40-100 --skip-if-larger --strip --verbose \{} --output \{} \;

# JPEG와 PNG 이미지 파일을 WebP파일로 변환 
echo "===== Converting images into WebP .webp ====="
for x in `find /home/happist/wp-content/uploads/2020 -type f \( -iname \*.jpeg -o -iname \*.jpg -o -iname \*.JPG -o -iname \*.png \)`
  do cwebp -quiet -q 80 ${x} -o ${x}.webp;
  echo "Converted $x to ${x}.webp"
doneCode language: PHP (php)

이제 자동 실행되도록 크론탭을 설정합니다.

crontab -eCode language: PHP (php)

아래와 같이 15분마다 webp.sh 파일이 실행되도록 합니다.

15 * * * * webp.shCode language: PHP (php)

크론탭 설정을 마쳤으면 크론탭이 재시작할 수 있도록 합니다. 아래 명령어를 사용합니다.

service cron restartCode language: PHP (php)

크론탭 사용 방법에 대해서는 아래 포스팅을 참조하세요.

Imagemagick 이용, 이미지 사이즈 일괄 변경 방법

사이트에 글을 쓰는 사람이 단 관리자 한명이라면 애정을 가지고 최적화된 이미지를 사용하겠지만 불특정 다수가 글을 쓰는 경우 최적화된 이미지를 사용하는 확율은 그리 크지 않습니다.

더우기 모바일이 보편화된 시점에서 이미지 편집이 쉽지는 않기 때문에 대부분 그냥 활영한 사진을 그대로 올릴 가능성이 높죠.

스마트폰 사진 사양이 고급화되면서 이미지 크기도 커졌기때문에 대용량 파일을 올릴 가능성이 커지지죠.

그렇기때문에 정기적으로 이미지 크기와 품질을 최적화해서 적절한 사이즈로 만들어주는 것이 필요합니다.

여기에서는 Imagemagick을 이용해 쉽게 이런 작업을 할 수 있는 방법을 찾아 보았습니다.

Imagemagick 설치

먼저 Imagemagick을 설치합니다.

우분투용 Imagemagick 패키지가 있기때문에 설치는 매우 간단합니다.

apt-get update
apt-get install imagemagick -yCode language: PHP (php)

배치 실행 파일을 만듭니다.

편집기를 이용해 패치 실행 sh 파일을 만듭니다.

nano resizeimage.sh
Code language: PHP (php)

아래와 같은 내용을 추가 합니다.

# 이미지가 있는 절대 주소를 입력합니다(absolute path to image folder)
FOLDER="/var/www/happist.com/wp-content/uploads"

# 이미지 최대 폭을 설정합니다.max width
WIDTH=1024

# 이미지 최대 높이를 설정
# 쇼핑몰등은 설명 이미지를 길게 만드는 경우가 많아 높이 조정은 문제가 있어 가능한 큰 값을 지정
HEIGHT=102400


# PNG와 JPG의 폭이나 높이가 최대치를 넘어가면 이미지 폭이나 높이를 조정합니다. 
# 이때 imagemagick은 그 이미지의 폭과 높이 비율을 유지합니다. 
find ${FOLDER} -iname '*.jpg' -o -iname '*.png' -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;

# PNG만 폭이나 높이가 최대치를 넘어가면 이미지 폭이나 높이를 조정합니다. 
# 이때 imagemagick은 그 이미지의 폭과 높이 비율을 유지합니다.
# find ${FOLDER} -iname '*.png' -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;

# JPG만 폭이나 높이가 최대치를 넘어가면 이미지 폭이나 높이를 조정합니다. 
# 이때 imagemagick은 그 이미지의 폭과 높이 비율을 유지합니다.
# find ${FOLDER} -iname '*.jpg' -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;

# 다른 대안 소개 폭과 높이를 일정 비율로 축소하는 방법
# mogrify -path ${FOLDER} -resize ${WIDTH}x${HEIGHT}% *.png -verboseCode language: PHP (php)

다음으로는 배치 파일 resizeimage.sh 파일이 실행 가능하도록 만듭니다.

chmod a+x resizeimage.shCode language: PHP (php)

배치 파일 실행

이제 준비가 다 끝났습니다. 아래와 같은 방식으로 배치 파일 resizeimage.sh를 실행시켜 이미지 사이즈를 조정하도록 합니다.

sh resizeimage.shCode language: PHP (php)

나중에 크론탭을 이용해 정기적으로 이를 실행하면 됩니다.

참고

서버에서 PNG 이미지 최적화로 사이트 속도 개선 방법

이미지 최적화 중 PNG 포맷의 이미지를 최적화하는 방법을 알아봅니다.

여기서는 PNG 이미지 포맷 최적화 방법을 설명하지맘 이미 이전에 우리가 가장 많이 사용하는 이미지 포맷인 JPEG 파일 최적화 방법에 대해 포스팅 한적이 있습니다. 이 내용은 아래 포스팅한 글을 참조하세요.

또한 이미지 최적화 방법 중 WebP 포맷을 이용해 사이트 로딩 속도를 높이고 트래픽을 줄이는 방법에 대해서는 아래 글을 참조하시기 바랍니다.

1. 왜 PNG 포맷을 사용할까?

일반적으로 알기에, 아니 사실 그대로 가장 효율이 좋은 이미지 포맷은 JPEG, JPG입니다. 그러면 이 JPEG만 사용하면 되는데 왜 PNG나 GIF를 사용할까요?

이는 이미지 포맷마다 특성이 조금씩 다르기에 이미지 효율을 높이려면 이미지 포맷마다의 특성을 살려, 별도로 적용할 필요가 있기 때문입니다.

PNG는 투명부분을 지원하고 무손실에 가깝기 때문에 하얀색이 많은 그래프나 도표와 문자 중심의 화면을 저장시 압축 효율과가독성이 뛰어납니다.

그래프를 JPG로 저장 후 압축하면 글자나 그래프의 선들이 뭉개지면서 가독성을 엄청 떨어뜨리는데요. PNG를 사용하면 그런 문제가 없어집니다.

아래는 넷플릭스 실적을 막대와 선 그래프로 그려 PNG로 저장한 것인데요. 폭 1024px로 비교적 큰 이미지이지만 용량은 34kb정도로 작습니다. 그러면서도 그래프 고유의 가독성을 유지하고 있습니다.

JPG로 이정도 용량이 나오도록 압축하면 글자나 선등이 많이 뭉게집니다. 특히 붉은 계열 컬러의 선과 글자는 뭉게져 보기 싫을 정도입니다.

넷플릭스 연도별 매출 및 성장율 추이, Graph by Happist
넷플릭스 연도별 매출 및 성장율 추이, Graph by Happist
GIF지원지원전체
PNG지원지원 안 함전체
JPEG지원 안 함지원 안 함전체
JPEG XR지원지원IE
WebP지원지원Chrome, Opera, Android

2. 가장 좋은 PNG 압축 유틸리티

PNG도 많이 사용하기 때문에 다양한 압축 유틸리티들이 존재합니다.

그들 PNG 이미지 압축 유틸리티 중 pngquant의 압축율이 가장 낫고 그러면서도 속도도 빠르다는 평가입니다.

저도 이미지 작업 시 데스크탑용 pngquant로 PNG 이미지를 압축하는데 확실히 압축율이 좋더군요. 그래서 PNG 압축운 pngquant를 사용하기로 했습니다. 알아보니 구글 전문가들도 이를 추천하고 있더군요.

3. pngquant 설치

우선 pngquant를 우분투 18.04 서버에 설치해 보죠. 아래는 설치 명령어입니다.

apt-get update
apt-get install pngquant -yCode language: PHP (php)

3.1. pngquant 버젼 업데이트

pngquant가 설치되었으면 버젼 체크를 해봅니다. 2015년 6월에 발표된 버젼 2.5.0이네요.

pngquant -V
2.5.0 (June 2015)Code language: PHP (php)

pngquant 사이트에 확인해보니 pngquant의 최신 버젼은 2.12.5네요. 업데이트할 필요가 있습니다.

업데이트는 아래와 같은 패키지를 설치한 후 진행합니다.

apt-get update
apt-get install build-essential liblcms2-dev libpng-dev git -yCode language: PHP (php)

Tmp 폴더에서 최신 pngquant를 다운받습니다.

cd /tmp
git clone https://github.com/pornel/pngquant/
cd pngquant*
./configure --prefix=/usrCode language: PHP (php)

컴파일을 합니다.

make
make installCode language: PHP (php)

다시 pngquant 버젼을 확인해 봅니다. 이제는 최신 버젼이 설치되었네요.

pngquant -V
2.12.6 (July 2019)Code language: PHP (php)

4. pngquant 이용 방법

  • –force : 원본 파일을 덮어쓰기, overwrite existing output files (synonym: -f)
  • –skip-if-larger : 원본 파일 사이즈보다 작은 경우만 저장, only save converted files if they’re smaller than original
  • –output file : destination file path to use instead of –ext (synonym: -o)
  • –ext new.png : set custom suffix/extension for output filenames
  • –quality min-max : don’t save below min, use fewer colors below max (0-100)
  • –speed N : speed/quality trade-off. 1=slow, 4=default, 11=fast & rough
  • –nofs : disable Floyd-Steinberg dithering
  • –posterize N : output lower-precision color (e.g. for ARGB4444 output)
  • –strip : remove optional metadata (default on Mac)
  • –verbose : print status messages (synonym: -v)

5. Batch PNG 최적화

특정 폴더의 PNG 이미지 전체를 한꺼번에 압축 최적화

find /***/******/wp-content/uploads -iname "*.png" -exec pngquant --force --quality=40-100 --skip-if-larger --strip --verbose \{} --output \{} \;Code language: PHP (php)

서버에서 JPEG 이미지 최적화로 사이트 속도 개선 방법

오늘은 사이트 속도 최적화 방법중에서 가장 귀찮고도 어려운 이미지 최적화 방안에 대해서 알아봅니다.

흔히 사용하는 이미지 포맷에는 JPEG와 PNG 그리고 드물게 GIF가 있는데요. 이 중에서 가장 많이 사용하는 JPEG파일 최적화에 대해서 먼저 살펴보죠,

그리고 PNG 파일 최적화 방법은 아래 글을 참조하시기 바랍니다.

또한 이미지 최적화 방법 중 WebP 포맷을 이용해 사이트 로딩 속도를 높이고 트래픽을 줄이는 방법에 대해서는 아래 글을 참조하시기 바랍니다.

1. JPEG 압축 모드에는 무엇이 있을까?

먼저 JPEG 압축에 대해서 본격적으로 살펴보기 전에 JPEG관련 배경 지식 몇가지를 살펴보죠.

1.1. JPEG 이미지 압축모드 세가지

먼저 JPEG 이미지 압축포맷 종류를 알아 보도록 합니다.

당연히 JPEG 가 널리 사용되고 역사도 오래되었기 때문에 끊임없이 새로운 기술이 등장했기에 상당히 많은 압축 모드가 있습니다.

이러한 압축모드 중 널리 사용되는 압축모드 세가지는 Baseline(순차적으로 보여주는 jpeg), Progressive(점진적으로 보여주는 jpeg), 그리고 Lossless(무손실)입니다.

  • Baseline JPEG는 인코딩과 디코딩이 위에서 아래로 진행되기 때문에 웹에서 이미지는 위에서부터 아래로 순서대로 보여줍니다.
    JPEG 이미지 최적화, Baseline모드 설명, Image from google
  • Progressive JPEG는 이미지를 여러번 나누어서 스캡합니다. 첫번째는 흐리게 나타나는 낮은 품질의 이미지이고 스캔 횟수가 늘어날수록 이미지가 뚜렸해지고 품질이 정상에 가까워집니다.
    JPEG 이미지 최적화, Progressive JPEG 설명, Image from google
  • Lossless JPEG는 말 그대로 이미지 품질 저하없이 EXIF 데이타만 제거하거나 이미지 허프만 테이블을 최적화는 정도로 이미지 품질 저하없이 압축하는 것입니다.

1.2. 웹에서 좋은 압축모드는?

그러면 웹에서는 무엇이 좋을까요?

일반적으로 인터넷 속도가 느려도 저품질 이미지를 먼저 보여주고 이미지가 로딩되면 완전한 이미지를 보여주면 사용자들은 사이트가 느리다는 인식을 받지 않는다고 합니다.

그런 의미에서 처음에는 흐린 이미지를 보여주다가 점점 또렸하게 보여주는 Progressive JPEG 방식이 더 낫습니다.

이미지rk 아닌 동영상관련 내용이지만, 넷플릭스의 성공 요인중의 하나로 이런 방식으로 영상 품질 또는 영상 접속에 대한 불만을 최소화한 점이 손꼽히고 있습니다.

즉 넷플릭스는 인터넷 망 상태에 따라 처음에는 저화질 영상을 보여주다가 데이타를 완전히 받으면 고화질 영상으로 전환해 보여주는 기술을 개발, 적용해 낮은 품질의 인터넷 환경하에서도 사용자들의 불만을 최소화하면서 스트리밍 서비스를 할 수 있었습니다.

또한 Progressive JPEG 이미지 용량이 10k 이상되는 경우 Baselinr 방식보다 대역폭이 2~10% 줄어들어 보다 높은 압축이 가능합니다.

다만 이러한 Progressive JPEG 이미지 압축은 인코딩 속도가 느립니다. 경우에 따라서 Baseline 방식보다 3배이상 걸릴 수 있습니다.

그러나 데스크탑 PC를 사용하거나 서버에서 한가한 시간을 이용해 압축한다면 이런 시간 소요는 감당할 수 있을 것입니다.

모바일과 같은 리소스가 제한적인 디바이스에서는 다소 무리가 따를 수 있습니다.

2. 어떤 압축 알고리즘(인코더)을 사용할 것인가?

JPEG 이미지 품질을 크게 낮추지 않으면서도 파일 크기를 획기적으로 줄일 수 있다면 정말 좋겠죠.

어떤 JPEG 인코더를 사용하느냐에 따라 압축률이 차이가 납니다.

이에 대한 답은 이 글에서 추천하는 내용을 그대로 가져오겠습니다.

  • 일반 웹 이미지 에셋: MozJPEG
  • 품질이 주요 고려 대상이고 인코딩 시간이 길어도 상관없다면: Guetzli를 사용

그리고 압축 알고리즘(인코더)의 옵션을 변경해 보다 풍부하고 효율적으로 압축하고 싶다면 아래 방법을 사용할 수 있습니다.

  • JPEGRecompress(내부적으로 MozJPEG을 사용)
  • JPEGMini : 유료 서비스
    Guetzli와 유사하게 자동으로 최상 품질로 인코딩 해줌.
    Guetzli처럼 정교하지는 않으나 속도가 더 빠름
  • ImageOptim API : 유료 서비스

결국 JPEG 압축시 여러 옵션을 주려면 자체적으로 구축 가능한 JPEGRecompress를 사용할 수 밖에 없다는 결론이네요. 비용이 많다면 다른 유료 서비스를 이용할 수 있겠지만요.

2.1. Guetzil에 대해서

Guetzil은 구글에서 만든 지각력을 갖춘 JPEG 인코더입니다.

즉 사람 눈으로는 차이를 느낄 수 없는 수준의 압축 상태를 자동으로 판별해 최상의 품질을 유지하면서 높은 압축율을 보여주는 새로운 기술입니다.

구글의 최신 기술이 잘 녹여든 이 Guetzli에 대한 칭찬도 많지만 이에 대한 비판도 많습니다.

장점이라면 압축율이 가장 좋다고 합니다.

그렇지만 일부 테스트 결과는 MozJPEG를 활용한 JPEGRecompress보다는 못하다는 테스트 결과도 있습니다. 압도적으로 압축율이 좋다고 말할 수 없죠

그렇지만 앞서 이야기한대로 자동으로 눈으로 확인 불가능한 수준까지 압축을 해주기 때문에 가장 효율적으로 이미지를 활용할 수 있습니다.

반면 단점도 많이 있죠. 아래와 같은 단점을 지적할 수 있을 것 같습니다.

  • 압축시간이 많이 걸려 CPU에 많은 부담을 줍니다.
    MozJPEG보다 800~1000배 더 시간이 걸린다고 하네요.
  • jpeg Progressive 옵션을 지원하지 않습니다.
  • 오직 sRGB만 지원합니다.
  • 정적인 콘텐츠에서만 사용 가능합니다.

구글에서는 Guetzli는 고품질 이미지에 사용하라고 제안합니다. (Butteraugli는 q=90+에 가장 적합)

2.2. MozJPEG는 뭐죠?

MozJPEG는 파이어폭스 브라우져를 개발한 곳으로 유명한 모질라는 인터넷 사용 경험 개선을 위한 여러가지 프로젝트를 진행해 왔는데요.

이 중 하나가 웹 트래픽을 줄이고, 로딩을 빠르게 만들어 인터넷 사용 경험을 개선하기 위한 획기적인 JPEG 파일 압축 방식을 2014년에 발표했습니다.

이 방식을 사용하면 JPEG 파일 용량을 약 10%이상 줄일 수 있다고 합니다.

일반적으로 MozJPEG는 압축 품질을 q=75 정도로 세팅하면 가장 좋다고 합니다.

2.3. 무엇을 사용할 것인가?

구글에서 야심차게 개발한 Guetzil은 압축은 뛰어나지만 너무 서버 자원을 많이 요구하고 몇가지 단점도 있습니다.

따라서 Guetzil 대안으로 MozJPEG를 적용한 JPEGRecompress를 사용하기로 했습니다.

3. 우분투에서 JPEGRecompress 적용 방법

우분투 18.04가 적용된 Vultr VPS 서버에서 테스트한 방법입니다.

3.1. 백업

뭐든 새로운 작업을 하려면 완벽한 백업을 한다음 해야죠.

지금 하려는 것은 워드프레스에서 사용하는 JPEG 이미지를 최적화하는 방법이므로 최소한 이미지들은 전부 백업해 놓은 것이 좋습니다.

우선은 이미지 폴더인 uploads 폴더 전체를 백업하기로 하죠.
아래와 같은 명령어를 사용하면 금방 전체 이미지를 압축해 줍니다.

# tar -cvzf imagebackup20200129.tgz /****/****/wp-content/uploadsCode language: PHP (php)

3.2. 먼저 MozJPEG 설치하자

jpeg-recompress는 기본 압축 알고리즘으로 MozJPEG를 사용하므로 이를 설치해 줍니다.

MozJPEG를 설치하기 전에 업데이트 및 MozJPEG 컴파일에 필요한 프로그램들을 설치합니다.

apt-get update
apt-get install build-essential autoconf pkg-config nasm libtool git gettext libjpeg-dev -y
Code language: PHP (php)

다음으로는 MozJPEG 최신 버젼이 무엇인지 확인합니다. MozJPEG 최신 버젼 확인은 여기 링크 주소에서 할 수 있습니다. 제가 확인 시 v3.3.1이 최신 버젼이네요.

MozJPEG 최신 버젼 3.3.1.을 wget을 사용해 다운받습니다.

cd /tmp
wget https://github.com/mozilla/mozjpeg/archive/v3.3.1.tar.gz -O mozjpeg.tar.gz
tar -xf mozjpeg.tar.gz
cd mozjpeg-3.3.1
autoreconf -fiv
./configure --with-jpeg8 --prefix=/usr
make
make installCode language: PHP (php)

3.3. jpeg-recompress 설치하기

아래 명령어를 사용해서 jpeg-recompress를 설치합니다.

다만 jpeg-archive는 2.2.0으로 업데이트되었지만 리눅스용으로 컴파일된 것을 찾지못해 2.1.1 버젼을 그대로 사용했습니다.

apt-get install bzip2
cd /tmp
wget https://github.com/danielgtaylor/jpeg-archive/releases/download/2.1.1/jpeg-archive-2.1.1-linux.tar.bz2 -O jpeg-archive.tar.bz2
tar -xf jpeg-archive.tar.bz2
cp jpeg-recompress /usr/bin/jpeg-recompress
chmod 755 /usr/bin/jpeg-recompressCode language: PHP (php)

여기까지 마쳤다면 필요한 모든 것은 설치된 셈입니다.

3.4. jpeg-recompress에서 사용가능한 이미지 매트릭스

jpeg-recompress에서는 아래 이미지 매트릭스가 사용 가능합니다. 디폴트는 SSIM입니다.

NameOptionDescription
MPE-m mpeMean pixel error (as used by imgmin)
SSIM-m ssimStructural similarity DEFAULT
MS-SSIM*-m ms-ssimMulti-scale structural similarity (slow!) (2008 paper)
SmallFry-m smallfryLinear-weighted BBCQ-like (original project2011 BBCQ paper)

이러한 매트릭스 및 옵션 명령어를 사용해 이미지를 압축합니다. 예를드면 아래와 같은 명령을 사용할 수 있습니다.

jpeg-recompress --quality medium --method ssim dog.jpg dogoutput.jpg
jpeg-recompress --quality high --method smallfry --min 60 dog.jpg dogsmallfry.jpg
jpeg-recompress --quality high --accurate --method smallfry --min 60 dog.jpg accurate.jpgCode language: PHP (php)

3.5. Screen 설치

서버에 있는 수만개의 이미지를 압축한다면 screen을 설치해 사용하라고 합니다.

이 screen은 SSH 세션이 끊겨도 계속 작업을 진행하기 때문에 수만장의 이미지 압축처럼 장시간 작업이 필요한 경우 유용하다고 합니다.

apt-get install screenCode language: PHP (php)

screen 명령을 사용해 screen 세션으로 전환합니다.

screenCode language: PHP (php)

3.6. JPEG 파일의 Batch 최적화

특정 폴더, 워드프레스에서는 이미지가 있는 uploads 폴더에 있는 jpeg 파일 전체를 압축하려면 아래와 같은 명령을 사용합니다.

  • find 명령은 하위 폴더를 포함해 모든 이미지가 압축 처리되도록 검색합니다.
  • 목적에 맞도록 적절한 quality와 min 값을 매트릭스 및 압축 옵션을 적용해야 합니다.
find /***/******/wp-content/uploads -type f -iname '*.jpg' -exec jpeg-recompress --quality medium --min 60 --method smallfry \{} \{} \;Code language: PHP (php)

3.7. screen 해제

Batch 작업을 위해 작동했던 screen을 해제하기 위해는 Ctrl+A를 누른다음 D를 누릅니다.

screen을 다시 가동시키려면 아래 명령을 사용합니다.

screen -rCode language: PHP (php)

3.8. 이미지의 EXIF 정보를 일괄 삭제하기

exiftool를 이용하면 이미지의 EXIF 정보를 일괄 삭제 가능합니다.

먼저 exiftool를 설치합니다.

apt install exiftoolCode language: PHP (php)

일괄 삭제는 아래와 같은 명령을 사용합니다.

  • 디폴트로 이미지를 jpg_original 확장자를 붙여 백업하도록 되어 있음
  • 백업하지않고 압축파일만 사용하려면 -overwrite_image 옵션을 사용합니다.
find /***/******/wp-content/uploads -type f -iname "*.jpg" -exec exiftool -overwrite_original -all= \{} \;Code language: PHP (php)

NGINX에서 최고의 이미지 압축 포맷 WebP 적용 방법

오늘은 Nginx 웹서버에서 최고의 이미지 압축 포맷이라고 불리우는 Webp 적용 방법을 알아봅니다.

적용 방법에는 매우 다양한 방법이 있는데요, 오늘은 조금 단순하면서 적용하기 용이한 방법을 소개합니다.

참고로 WebP를 지원하는 브라우저에 대한 관심이 높을 수 밖에 없는데요. 아래 링크 페이지에서 WebP 지원 브라우저 현황을 볼 수 있습니다.

이에 따르면 WebP 포맷은 20년 11월 현재 전체 브라우저 79% 정도 87.7%를 커버하고 있네요(데스크탑 90%, 모바일 87%)

이 글을 작성한 지 1년이 채 지난지 않았는데 webp 포맷 커버리지 10%이상 올랐습니다. 아마도 아이폰에서 이 webp 포맷을 지원하면서 비율이 크게 올라간 것 같습니다.

WebP image format

2020년 11월 현재 webp 이미지 포맷 지원 브라우저

이 방법은 아래 글을 기반으로 정리, 수정 보완했습니다.

ADDING WEBP SUPPORT FOR NGINX

1. WebP 설치

먼저 우분투 NGINX 웹서버에서 WebP를 설치합니다. 우분투에서는 apt-get 명령어를 사용해 WebP를 설치하면 그것으로 끝입니다.

apt-get install webpCode language: PHP (php)

2. Webp 적용을 위한 NGINX 웹서버 세팅

이제는 NGINX 웹서버 세팅을 통해서 WebP 이미지를 브라우저가 지원하는지 학인 후 지원한다면 Webp 이미지가 기본으로 설정되도록 만듭니다

먼저 NGINX 웹서버 동작을 설정하는 http 블락안에 다음 코드를 추가합니다.

이는 브라우저가 WebP 이미지를 지원하는지 확인합니다. 만약 브라우저가 Webp 이미지를 지원한다면 WebP 이미지 파일이 웹 소스의 기본 이미지 파일로 설정됩니다.

인터넷 익스플러처럼 WebP 이미지를 지원하지 않는다면 WebP 이미지가 아닌 본래의 jpg나 png 파일을 웹 소스의 기본 이미지 파일로 설정합니다.

map $http_accept $webp_suffix {
  default   "";
  "~*webp"  ".webp";
}Code language: PHP (php)

다음으로는 server 블락안에 다음 코드를 추가합니다.

이는 브라우저가 WebP 이미지를 지원하는 경우, 모든 이미지(jpg, png)에 대한 WebP 이미지를 로딩하도록 합니다.

location ~* ^.+\.(jpe?g|png) {
  add_header Cache-Control "public, no-transform";
  add_header Vary "Accept-Encoding";
  try_files $uri$webp_suffix $uri =404;
  expires max;
}Code language: PHP (php)

Webp 적용위해 NGINX 웹서버에서 이미지 변환하기

글을 작성 시 jpg 파일과 함께 WebP 이미지 파일을 같이 올렸다면 상관이 없지만 대부분은 그렇지 않기 때문에 서버에 있는 jpg나 png 포맷 이미지에 WebP 포맷 이미지를 추가합니다.

즉 서버의 이미지 저장 폴더에는 확장자가 jpg 또는 png인 이미지 파일 하나와 WebP 확장자를 가진 이미지 파일의 2개의 이미지가 존재하게 됩니다.

웹서버는 WebP 이미지를 지원하는 브라우저에게는 WebP 이미지를 로딩해 주고, 지원하지 않는 브라우저에게는 원래의 jpg 또는 png 파일을 로딩합니다.

그렇기 때문에 WebP 이미지를 이용한다는 것은 기존 jpg 파일에 추가로 WebP 이미지를 추가로 가지고 있기 때문에 서버 용량을 더 많이 차지 합니다.

다만 WebP 이미지를 지원하는 대부분의 브라우져에서는 로딩 속도가 빠르고 트래픽 양이 줄어드는 긍정적인 효과가 있습니다.

아래 코드는 jpg나 png 파일 원본은 그대로 유지하면서 추가로 WebP 파일을 생성해주는 코드입니다.

여기에서는 쉽게 사용하기 위해 sh 파일 스크립트로 사용하도록 만들겠습니다.

먼저 webp.sh 파일을 만듭니다. 만드는 파일 위치는 적절히 관리 가능한 곳에 만듭니다.

여기서는 제가 주로 사용하는 편집기로 가장 쉽다는 nano를 사용했으니 여러분이 사용하는 편집기로 webp.sh 파일을 만들고 코드를 입력하면 됩니다.

nano webp.shCode language: PHP (php)

다음으로는 webp.sh 파일안에 WebP 파일 생성 코드를 추가합니다.

  • 아래 코드 중 echo가 있는 줄은 삭제해도 무방합니다.
  • 이미지 파일이 있는 폴더 위지는 서버의 풀 주소를 사용합니다.
    예를 들어 /home/mysite/wp-content/uploads
  • WebP 파일을 만드는 명령어인 cwebp의 옵션을 정합니다. 옵션은 아래와 같은 것들이 있습니다.
    -lossless : 무손실 WebP 이미지 파일을 만듭니다.
    -q : 압축율 지정 예를 들어 -q 80처럼
    -quiet : 아무것도 인쇄하지 말라는 옵션
    -resize width height : 이미지 크기를 조정, width나 height 중 하나가 0이라면 종횡비를 유지
  • Webp 적용을 위한 압축율을 조정할 수 있습니다.
    아래는 압축 옵션으로 -q 80를 적용하고 있는데요. 이 압축율 대신 다른 원하는 압축율로 변경합니다. 예를 들어 -q 90처럼 말입니다.
    중간 품질 -q 75가 WebP에선 기본값이라고 하네요.
    80~99는 고품질로 WebP의 잇점은 감소한다고 구글은 이야기합니다. WebP는 품질보다 속도가 중요한 경우 사용하라고 하네요.
echo "===== Converting images into WebP .webp ====="
for x in `find 이미지 파일이 있는 폴더 위치(예 /var/www/happist) -type f \( -iname \*.jpeg -o -iname \*.jpg -o -iname \*.JPG -o -iname \*.png \)`
  do cwebp -quiet -q 80 ${x} -o ${x}.webp;
  echo "Converted $x to ${x}.webp"
doneCode language: PHP (php)

다음으로는 webp.sh 파일을 실행 가능하도록 만들어야 합니다. 이는 chmod 명령어를 사용합니다.

chmod a+x webp.shCode language: PHP (php)

이제 준비가 다 끝났습니다. 아래와 같은 방식으로 webp.sh를 실행시켜 WebP 이미지를 생성하도록 합니다.

sh webp.shCode language: PHP (php)

Webp 적용을 위한 cwebp 옵션

Options:
  -h / -help ............. short help
  -H / -longhelp ......... long help
  -q <float> ............. quality factor (0:small..100:big), default=75
  -alpha_q <int> ......... transparency-compression quality (0..100),
                           default=100
  -preset <string> ....... preset setting, one of:
                            default, photo, picture,
                            drawing, icon, text
     -preset must come first, as it overwrites other parameters
  -z <int> ............... activates lossless preset with given
                           level in [0:fast, ..., 9:slowest]

  -m <int> ............... compression method (0=fast, 6=slowest), default=4
  -segments <int> ........ number of segments to use (1..4), default=4
  -size <int> ............ target size (in bytes)
  -psnr <float> .......... target PSNR (in dB. typically: 42)

  -s <int> <int> ......... input size (width x height) for YUV
  -sns <int> ............. spatial noise shaping (0:off, 100:max), default=50
  -f <int> ............... filter strength (0=off..100), default=60
  -sharpness <int> ....... filter sharpness (0:most .. 7:least sharp), default=0
  -strong ................ use strong filter instead of simple (default)
  -nostrong .............. use simple filter instead of strong
  -sharp_yuv ............. use sharper (and slower) RGB->YUV conversion
  -partition_limit <int> . limit quality to fit the 512k limit on
                           the first partition (0=no degradation ... 100=full)
  -pass <int> ............ analysis pass number (1..10)
  -crop <x> <y> <w> <h> .. crop picture with the given rectangle
  -resize <w> <h> ........ resize picture (after any cropping)
  -mt .................... use multi-threading if available
  -low_memory ............ reduce memory usage (slower encoding)
  -map <int> ............. print map of extra info
  -print_psnr ............ prints averaged PSNR distortion
  -print_ssim ............ prints averaged SSIM distortion
  -print_lsim ............ prints local-similarity distortion
  -d <file.pgm> .......... dump the compressed output (PGM file)
  -alpha_method <int> .... transparency-compression method (0..1), default=1
  -alpha_filter <string> . predictive filtering for alpha plane,
                           one of: none, fast (default) or best
  -exact ................. preserve RGB values in transparent area, default=off
  -blend_alpha <hex> ..... blend colors against background color
                           expressed as RGB values written in
                           hexadecimal, e.g. 0xc0e0d0 for red=0xc0
                           green=0xe0 and blue=0xd0
  -noalpha ............... discard any transparency information
  -lossless .............. encode image losslessly, default=off
  -near_lossless <int> ... use near-lossless image
                           preprocessing (0..100=off), default=100
  -hint <string> ......... specify image characteristics hint,
                           one of: photo, picture or graph

  -metadata <string> ..... comma separated list of metadata to
                           copy from the input to the output if present.
                           Valid values: all, none (default), exif, icc, xmp

  -short ................. condense printed message
  -quiet ................. don't print anything
  -version ............... print version number and exit
  -noasm ................. disable all assembly optimizations
  -v ..................... verbose, e.g. print encoding/decoding times
  -progress .............. report encoding progress

Experimental Options:
  -jpeg_like ............. roughly match expected JPEG size
  -af .................... auto-adjust filter strength
  -pre <int> ............. pre-processing filter
Code language: PHP (php)

참고

무료로 구축하는 이미지 최적화 자동화 시스템

아파치에서 inotify-tools을 사용한 WebP 이미지 적용 및 관리 방법

NGINX에서 최고의 이미지 압축 포맷 WebP 적용 방법

워드프레스 이미지 설정 최적화 방법

[워드프레스 최적화] 구글 페이지스피드 활용, 최고 이미지 포맷 WebP 이용 방법

Imagemagick 이용, 이미지 사이즈 일괄 변경 방법

서버에서 PNG 이미지 최적화로 사이트 속도 개선 방법

서버에서 JPEG 이미지 최적화로 사이트 속도 개선 방법

[트렌드] 20년에 주목할 중국 이커머스 트렌드 10

0

신종 코로나바이러스로 중국을 비롯한 전 세계가 난리인 이즈음 중국 이커머스 트렌드를 논한다는 것이 조금 시기적으로 부적절하다는 견해가 있습니다.

그러나 이러한 신종 코로나바이러스 확산으로 이동이 금지, 제한되고, 행사나 관광지 등이 문을 닫으면서 IT업계는 새로운 전기를 맞을 가능성도 잇습니다.

오프라인의 문제점이 부각된만큼이나 이에 대한 반작용으로 온라인 의존도가 높아질 것이고 이러한 기회를 잘 살리는 IT 기업이 시장을 리딩할 기회를 잡을 것입니다.

그런 의미에서 오늘 이야기하고자하는 중국 이커머스 트렌드는 의미가 있다고 할 것입니다.

이 글은 Coresight Research에서 발표한 Retail 2020: 10 Trends for China E-Commerce를 기반으로 정리하였습니다.

Executive Summary

2020년 중국 이커머스 시장을 강타할 10가지 트렌드는 아래처럼 간략히 정리할 수 있습니다.

  • 라이브스트리밍 판매는 훨씬 더 중요한 판매 수단이 될 것
  • KOL 마케팅(오피니언 리더 중심 마케팅)에서 KOC 마케팅(실 사용자 의견/추천 중심 마케팅)으로 전환될 것이다.
  • 숏폼 동영상 앱들은 지속해서 이커머스로 확장할 것이다.
  • 중고거래(Recommerce)가 새로운 성장 동력으로 등장할 것
  • 주요 이커머스 플랫폼들이 공동구매(Group buying) 기능을 지원하면서 공동구매는 계속 성장할 것이다.
  • 앱속에 구축되는 미니 프로그램(mini program)은 브랜드를 위한 쇼핑 플랫폼을 보완하면서 발전할 것이다.
  • 상픔 배송은 점점 빨라질 것이다.
  • 데이타 기반 소비자와 생산 공장간 직거래하는 C2M 모델이 이커머스 성장을 추동할 것이다.
  • 수직적 이커머스(Vertical eCommerce) 업체들이 각광을 받을 것이다.
  • 크로스 보더 이커머스(Cross-border eCommerce)가 성장하고 크게 변화할 것이다.

1. 라이브스트리밍은 훨씬 더 중요한 판매 수단이 될 것

2019년 라이브스트리밍은 점점 더 소비자들의 쇼핑 행동에 영향을 미쳐왔으며, 2020년 중국 이커머스 시장에서 더 중요한 역활을 맡을 것으로 보입니다.

이 라이브스트리밍 판매 방식은 이 전의 홈쇼핑 방식과도 유사해 보일 수 있지만 이보다는 훨씬 더 진화된 것입니다.

라이브스트리밍 세션에서 소셜 미디어로 널리 알려진 인플러언서와 같은 설명자는 실시간동영상 방송을 통해서 제품을 소개하거나 시험 사용해 보여줍니다.

시청자들은 이러한 라이브스트리밍 동영상을 시청하면서 동시에 내장된 링크를 통해서 제품을 구매할 수 있습니다.

소비자들이 이러한 라이브스트리밍에 매력을 느끼는 몇가지 이유가 있습니다.

  • 큐레이션 된 제품 소개 : 라이브스트리밍 진행자들은 팬들의 취향을 고려해 세심하게 제품들을 큐레이션하므로써 높은 전환율을 이끌어 냅니다.
    실제 타오바오 자료에 따르면 208년 라이브스트리밍의 전환율은 65%에 달했다고 합니다.
  • 다양한 제품 소개 : 미용, 패션, 식료품 등 다양한 범위의 제품들이 라이브스트리밍을 통해서 소비자들에게 소개됩니다. 심지어는 영화 티켓이나 호텔 패키지를 소개하기도 합니다.
  • 저렴한 가격 : 라이브스트리밍 진행자들은 이들 방송 시청자들이 전반적으로 가격에 민감하기 때문에 브랜드와 협의해 경쟁력있는 가격을 제시합니다.
  • 경품 : 경품 추첨은 라이브스트리밍에서 시청자들과 소통하는 인기있는 방법입니다.
    시청자들의 관심을 끌기위해 다이슨 헤어 드라이어나 아이폰과 같은 프리미엄 제품들을 경품으로 내걸고 이를 얻기위한 경쟁을 가열시킴으로써 라이브스트리밍 판매 효과를 극대화 합니다.
  • 한정 수량 및 시간 한정 : 홈쇼핑과 마찬가지로 라이브스트리밍 진행자들은 종종 플래시 세일 전략을 사용합니다.
    이들 판매는 매우 짧은 시간동안 진행되고 구매 가능한 품목이나 수량도 매우 제한해 관심을 높이기도 합니다.
  • 선택의 패러독스(oaradox of choice) 극복 : 라이브스트리밍에서는 많은 상품을 제시해 소비자가 무엇을 살까 고민할 여지를 주지 않토록 한 제품에 집중해 구매 결정을 쉽게 내릴 수 있도록 만듭니다.
중국 이커머스 트렌드, 로에알 라이브스트리밍, Livestreaming of L’Oréal’s products by key opinion leaders during Singles’ Day 2019
중국 이커머스 트렌드, 로에알 라이브스트리밍, Livestreaming of L’Oréal’s products by key opinion leaders during Singles’ Day 2019

브랜드에게 주는 시사점

라이브스트리밍 이커머스 시장 규모는 2019년 4,400억 위안으로 중국 전체 이커머스 시장 규모의 약 9%를 차지할 정도로 거대한 규모이며, 이는 2020년에는 더욱 더 커질 것으로 전망됩니다.

라이브스트리밍 판매가 브랜드에 미치는 영향은 당연히 판매를 늘릴 수 있고, 더 나아가 브랜드 인지도를 높일 수 있다는 점입니다.

2. KOL 마케팅에서 KOC 마케팅으로 전환

KOC 마케팅이란 Key opinion consumer의 약자로 인플러언서나 유명인사들의 추천이 아니라 실 사용자의 사용기나 추천을 기반으로 마케팅을 전개하는 것을 말합니다.

최근 이용자들에게 호평을 받는 콰이(Kwai)나 RED 그리고 틱톡(TiKTok)과 같은 몇몇 소셜 앱의 인기로 재미있고 유익한 상품 리뷰 콘텐츠를 더 쉽게 공유할 수 있게 되었습니다.

이러한 콘텐츠들은 다른 사람들의 구매 결정에 영향을 줍니다.

KOC 콘텐츠들이 인기를 끄는 이유는 소비자들은 인플러언서나 유명인들의 제품 추천은 협찬의 결과라는 것을 잘 알게 되었고, 이들의 추천이나 정보가 신뢰성과 진실성이 떨어진다는 믿게 되었기 때문입니다.

반면 KOC 콘텐츠들에 공정한 상품 평가를 제공하는 것은 바로 그들 자신이기 때문에 신뢰를 얻을 수 있습니다.

중국 이커머스 트렌드, KOC 콘텐츠, China eCommerce Trends-2

KOC 콘텐츠들이 인기를 끄는 것은 소비자들이 일반 소비자들에게 실제 경험을 묻고 조언을 구하고 싶어하기 때문입니다.

이는 새로 부모가 된 애기 엄마 아빠들은 그들의 친구와 이런 경험을 가진 다른 부모들에게서 조언을 얻고 싶어합는 것과 같습니다.

위에서 언급한 소셜 앱들을 통해서 이제 소비자들은 구매 결정을 내리기 전에 기 쇼핑 경험자들의 동영상과 리뷰들을 쉽게 찾아 볼 수 있습니다.

브랜드에게 주는 시사점

KOC 리뷰 콘텐츠들이 고객들의 구매 결정에 큰 영향을 미친다는 것을 감안하면, 이를 마케팅 전 부문에 폭넓게 활용하는 것이 유리할 것입니다.

KOC 리뷰 콘텐츠로 타겟 고객의 구매 결정에 영향을 미쳐 브랜드 이미지를 높이고 매출을 증진할 수 있는 기회를 잡을 수 있습니다.

3. 숏폼 동영상 앱들의 이커머스로 확장

틱톡을 비롯한 숏폼 동영상 앱들은 이미 이커머스 시장으로 진입해 왔습니다. 그리고 이런 추세는 2020년에 더욱 가속화 될 것입니다.

숏폼 동영상은 10~20초 정도 짧은 길이의 동영상으로 립싱크로부터 노래, 애완동물과 상호작용에 이르기까지 아주 다양한 부문에서 재미있는 콘텐츠들입니다.

이런 숏폼 동영상은 점점 더 콘텐츠가 풍부해지고 관심을 끌면서 점점 이용자들의 이용 시간이 증가하고 있습니다.

숏폼 동영상 앱들은 인공지능, AI 기술과 검색 알고리즘을 이용해 사용자의 선호에 맞는 콘텐츠들을 지속 보여주면서 더 많은 시간을 그들 플랫폼에서 지내도록 만드는데 성공하고 있습니다.

22019년 6월 기준 중국에서는 약 8.2억명이 숏폼 동영상 앱을 이용하고 있으며, 이는 전년 비 32% 증가했다고 비지니스 정보 제공 업체인 QuestMobile은 밝혔습니다.

틱톡은 2019년 10월, 이용자들의 상품 검색을 돕기위해 콘텐츠에 알라벨을 할당하는 ‘Marketing Label’이라는 이커머스 기능을 제공하기 시작했습니다.

이어 틱톡은 2019년 11월 모든 이용자가 틱톡을 이용해 상품 판매가 가능토록 제한을 풀었습니다. 이전에는 최소 3,000명의 팔로어를 확보해야 가능했었습니다.

이러한 제한 해제는 하루 32억명이 이용자가 있는 틱톡이 거대한 동영상 기반 이커멋 사이트로 변모하도록 만들고 있습니다.

4. 중고거래(Recommerce)의 활성화

사용하던 제품 또는 보유 제품을 팔고 사는 중고거래(Recommerce)가 점점 더 인기를 끌고 있습니다.

Mobdata에 따르면 2020년 중고거래 시장은 1조 2천 5백억 위안에 달할 것이라고 합니다. 이는 중국 공유경제 규모의 약 46%에 달하는 엄청한 규모라는 지적입니다.

중고거래(Recommerce)의 인기는 다양한 제품을 사용하고 싶은 욕구, 지속 가능성 그리고 합리적 가격을 원하는 소비자들에 의해서 높아지고 있습니다.

소비자들은 최신 유행의 의상을 입고 싶어 합니다. 또 지구 보존을 위해서 재사용과 재활용을 더욱 더 강조하고 있습니다. 원하는 것이 점점 많아지면서 제한 예산을 합리적으로 사용할 방법을 계속 고민하게 됩니다.

소비자들은 기 사용 상품을 쉽게 온라인에서 구할 수 있게 되면서 예전 오프라인 판매 중심 시절보다도 중고거래(Recommerce)에 대한 수요가 늘었습니다.

Getui와 China Internet Network Information center에 다르면 2019년 8월 현재 9천 9백만명이 중고거래(Recommerce) 앱을 사용하고 있다고 합니다.

브랜드에게 주는 시사점

중고거래(Recommerce) 상품 시장은 2014년 1,328억 위안에서 2018년에 7,400억 위안으로 연평균 53.64% 성장하고 있다고 합니다.

이러한 성장은 당장 신상품 판매에도 영향을 미칠 수 있으며, 잠재적으로 소매 판매 전체에 영향을 미칠 수 있습니다.

브랜드들은 중고거래(Recommerce)가 계속해서 증가할 것이기 대문에 이 중고거래(Recommerce) 비지니스 모델을 수용하고 협력할 수 있는 방법을 찾아야 합니다.

브랜드 관리는 브래드 상품이 거래되는 모든 현장에서 브랜드 정체성이 지켜지도록 관리되어야 합니다.

5. 공동구매(group buying) 성장

주요 이커머스 플랫폼들이 공동구매(Group buying) 기능을 지원하면서 공동구매는 계속 성장할 것입니다.

이커머스 플랫폼은 소비자가 대량 구매 시 재품이나 서비스를 대폭 할인된 가격으로 제공하는 공동구매(group buying) 기능을 확대하고 있습니다.

이러한 기능은 가격 경쟁력이 커지기 때문에 가격 민감도가 높은 농어촌과중소도시들의 소비자들에게 매력적으로 다가가고 있습니다.

이러한 트렌드에 맞추어 적극 대응한 핀두오두오(Pinduoduo)는 좋은 사례입니다. 핀두오두오는 2015년에 공동구매(group buying) 기능을 출시했고 이 기능이 호응을 얻어 이제는 알리바바, 텐센트, 메이투안, JD.com에 이어 5번째로 큰 인터넷 기업으로 성장할 수 있었습니다.

이러한 공동구매(group buying) 수요 증가에 따라 유통업체들은 적극적으로 공동구매(group buying)에 대응하고 있습니다.

JD.com은 2018년 6월에 공동구매(group buying) 미니 프로그램을 런칭했고 2019년 4월에는 공동구매(group buying) 전용 앱을 출시해 적극 대응하고 있습니다. 또 다른 유통업체인 쑤닝은 2018년 7월 자체 공동구매(group buying) 앱을 런칭했습니다.

브랜드에게 주는 시사점

공동구매(group buying)는 가격 경쟁력을 확보할 수 있기 대문에 가격 민감도가 높은 농어촌이나 하위 도시로 진출하려는 브랜드들은 이를 잘 활용할 방법을 찾아야 합니다.

공동구매(group buying) 판매는 가격 민감도가 높은 고객들 대상으로 판매를 증진할 수 있으며, 때로는 소매상들이나 브랜드가 재고정리할 수 있는 기회를 만들어 주기도 합니다.

6. 미니 프로그램(Mini program)이 쇼핑몰을 보완할 것

알리페이나 메이투안 그리고 위챗과 같은 앱속에 구축되는 미니 프로그램(mini program)은 브랜드를 위한 쇼핑 플랫폼을 보완하면서 발전할 것입니다.

이러한 미니 프로그램은 브랜드 자체적으로 마케팅이 가능하고, 판매도 할 수 있는 온라인 플랫폼을 제공하면서도 이용자들은 별도 앱을 설치할 필요가 없다는 장점이 있습니다.

따라서 브랜드로서는 이러한 미니 프로그램을 대규모 이커머스 플랫폼을 대체할 수는 없지만 이를 보완할 수 있는 장치로 활용할 수 있습니다.

여기서는 플래시 판매 프로모션을 통해서 판매를 촉진할 수도 있고, 브랜딩 도구로 사용할 수도 있습니다. 고객들을 끌어들이고, 친구들에게 콘텐츠를 공유하도록 장려하도록 미니 프로그램을 설계할 수도 있습니다.

이러한 미니 프로그램은 다양한 기능을 제공해 정식 이커머스 플랫폼 못지않은 효용을 줍니다. 예를들어 위챗 미니 프로그램은 증강 현실(AR) 지원해 상품을 가상의 현실에에서 사용하거나 테스트해 볼 수 있습니다.

이처럼 미니 프로그램 기능이 고도화됨에 따라 브랜드의 판매 활성화나 브랜 사용 경험을 고도화 시키는 툴로서 사용 가능합니다.

아래 이미지는 아르마니 화장품 미니 프로그램 모습인데요. 증강현실(AR) 기능과 스마트폰의 카메라를 이용해 다양한 립스틱 색조 등을 테스트해 볼 수 있습니다.

아르마니 화장품 미니 프로그램이 증강 현실(AR), Armani’s WeChat Mini-Program A(augmented reality), Image from wechat blog
아르마니 화장품 미니 프로그램이 증강 현실(AR), Armani’s WeChat Mini-Program A(augmented reality), Image from wechat blog

브랜드에게 주는 시사점

각 소셜 미디어 도는 인터넷 업체들이 제공하는 미니 프로그램은 다양한 기능에도 불구하고 가볍고 쉽게 사용할 수 있기 대문에 마켕, 고객 참여 그리고 이커머스를 위해서 적극적으로 투자하는 것이 좋습니다.

미니 프로그램의 선구자인 위챗은 2019년 7월 현재 미니 프로그램 이용자가 7억명에 달하며, 사용자들은 월 평균 42.6회 미니 프로그램을 이용했다고 밝히고 있습니다.

이렇게 많이 사용하는 미니 프로그램은 아주 적은 데이타만 사용하기에 데아타 요금에 민감한 이용자 대상으로 도는 증강 현실(AR) 기능을 활용한 풍부한 사용 경험을 제공하려는 브랜드에게 좋은 선택이 될 수 있습니다.

7. 배송은 점점 빨라진다.

2020년 배송업체들은 물류 인프라를 업그레이드하고, 창고 처리 용량을 늘려서 더 빠른 배송이 가능해질 것으로 전망됩니다.

점점 더 많은 지역에서 당일 배송이 가능해질 것입니다.

이러한 것을 가능케 하는 것은 대규모 사물인터넷 (IoT) 솔류션등으로 전체 배송 과정을 디지탈화해 효율을 높이고, 직접 배송 외에 스마트 라커와 배송지 픽업과 같은 다양한 대안들이 등장하고 있기 때문입니다.

더우기 5G 기술을 적용, 차세대 커넥티비티를 구축하고 지제차 위치와 경로를 실시간으로 모니터링해 비정상적인 상황을 선제적으로 제어해 효울을 높이는 시도가 이루어지고 있습니다.

8. 소비자와 생산 공장간 직거래하는 C2M 모델이 이커머스를 선도할 것

중국 데이타에 기반한 소비자와 생산 공장간 직거래하는 C2M 모델이 2020년이후 이커머스 성장을 주도할 것입니다.

C2M 모델에서 생산 공장은 점점 소비자 중심으로 변모할 것입니다.

C2M을 통해서 소매업체와 생산업체는 고객 데이타를 수집하고, 빅데이타를 활용해, 고객별 특성을 분류하고 소비 특성을 분석해 이를 생산 계획에 반영합니다.

이를 통해 생산업체는 제품 수요를 예측하고 재고 및 공급망 위험을 줄일 수 있습니다. 이는 브랜드 및 소매 업체에도 도움이됩니다.

2019년 双十一(Singles ‘Day, 광균제) 동안 티몰(Tmall)에서는 1억 7천만개의 C2M 제품을 판매했습니다.

이 날(2019년 11월 11일) 로만 샤오구오슈아(Roaman Xiaoguoshua) 전동 칫솔 판매량이 25,000개 달했는데요. 로만(Roaman)은 티몰에서의 C2M 경험동안 축적한 소비자 통찰력으로 칫솔의 크기, 다크 그린 컬러같은 디자인으로 이렇게 소비를 획기적으로 늘릴 수 있었습니다. .

중국 이커머스 트렌드, 로만 샤오구오슈아(Roaman Xiaoguoshua) 전동 칫솔, Roaman Xiaoguoshua electric toothbrush, China eCommerce Trends
중국 이커머스 트렌드, 로만 샤오구오슈아(Roaman Xiaoguoshua) 전동 칫솔, Roaman Xiaoguoshua electric toothbrush, China eCommerce Trends

브랜드에게 주는 시사점

중국 C2M 시장은 2018년 175억 위안(약 25억 달러)에 달했고 2022년에는 420억 위안으로 연평균 성장율(CAGR) 24.4%로 빠르게 성장할 것으로 전망됩니다.

이는 2018년 중국 전체 이커머스 매출의 0.4%이고 2022년에는 0.6%에 해당할 것으로 보입니다.

브랜드는 C2M 모델을 사용하여 소비자 니즈를 더 잘 해결할 수 있을 뿐만 아니라 공급망 전반에 걸쳐 효율성을 개선할 수 있습니다.

9. 수직적 이커머스(Vertical eCommerce) 업체들이 각광

수직적 시장(Vertical marketplaces)은 재화와 서비스를 특정 고객 그룹에 판매하는 전자상거래 플랫폼으로, 온라인 커뮤니티를 통해 서로 소통할 수 있다.

우리는 이런 유형의 사이트가 2020년에는 크게 번창할 것으로 예상합니다.

베이비 트리(부모와 아기용품을 중심으로 판매하는 사이트) 및 Gegejia.com(여성 타겟의 글로벌 식품 수입업체)와 같은 사이트와 앱이 성공적인 수직 시장의 좋은 예입니다.

  • 수직 플랫폼은 자연스럽게 같은 생각을 가진 소비자를 묶어 특정 부문이나 제품을 중심으로하는 강력한 소셜 커뮤니티로 이어집니다.
    예를 들어, 부모와 아기 용품을 판매하는 베이비트리(Babytree) 경우 플랫폼 사용자들은 육아 팁과 아기 제품 추천 등을 지식을 공유합니다.
  • 수직 플랫폼은 사용자가 구매 결정을 내릴 수 있도록 보다 나은 컨텐츠를 제공합니다.
    2019년 Mckinsey 설문 조사에 따르면 중국 디지털 소비자 3분의 2는 구매 결정 시 수직적 웹 사이트에서 수집 한 정보를 활용한ㄷ고 합니다.

브랜드에게 주는 시사점

소비자들은 구매 옵션을 점점 더 까다롭게 살펴보기 때문에 에 대해 점점 더 정교해짐에 따라, 수직적 전자 상거래 사이트는 제품 지식뿐만 아니라, 같은 생각을 가진 고객들이 상호작용을 할 수 있는 커뮤니티를 제공하기 때문에 관심을 끌 것으로 기대합니다.

브랜드는 이러한 플랫폼과 협력하여 와인의 경우 Jiuxian , 부모 및 아기용품의 경우 제품의 경우 베이비트리(Babytree) 등과 같은 적절한 소비자가 모인 곳을 효과적으로 공략할 수 있습니다.

10. 크로스 보더 이커머스(Cross-border eCommerce) 성장

2020년에는 크로스 보더 이커머스(Cross-border eCommerce)가 더욱 더 성장할 것으로 전망합니다.

알리바바는 2019년 9월 중국 최대 규모의 크로스 보더 이커머스(Cross-border eCommerce) 플랫폼 카올라(Kaola)를 인수해 티몰(Tmall)에 통합했습니다. 이렇게되면 알리바바는 중국 크로스 보더 이커머스(Cross-border eCommerce) 시장의 50% 이상을 차지할 것입니다.

조사기관인 아이 미디어 리서치 그룹(iMedia Research Group)에 따르면 2019년 상반기 NetEase Kaola는 27.7%의 시장점유율을 기록했고 알리바바의 Alibaba’s Tmall Global marketplace은 25.1%의 점유율을 기록했었습니다.

알리바바의 이번 카올라(Kaola) 인수로 알리바바는 부유한 중국 쇼핑객들을 적극 공략할 것입니다.

그것은 또한 알리바바가 자사 사이트에 온라인 숍을 개설토록 해외 브랜드를 초청하는 것을 포함하는 티몰의 비지니스 모델을 다각화하는데 도움이 될 것입니다.

카올라(Kaola)는 대부분 해외 머천트로부터 다양한 상품을 대량으로 구입하여 중국 소비자들에게 재판매합니다.

다니엘 장(Daniel Zhang) CEO에 따르면 알리바바의 올라(Kaola) 인수는 알리바바 생태계 전반에 걸친 시너지를 높이고, 중국 소비자에 대한 수입 서비스와 경험을 더욱 고도화시킬 것이라고 히망하고 있습니다.

브랜드에 주는 시사점

Statista에 따르면, 중국의 수익성 높은 크로스 보더 이커머스 시장 규모는 2020년에 1,640억 달러에 이를 것으로 예상됩니다.

이는 올 2020년 중국 이커머스 전체 매출액의 약20 %에 해당합니다. Statista는 중국 이커머스 전체 매출액을 8,320억 달러로 추정했습니다.

외국 브랜드는 원하는 비즈니스 모델에 따라 알리바바의 티몰(Tmall) 또는 카올라(Kaola)와 협력하거나, 티몰(Tmall)에 오라인 숍을 운영하거나 카올라(Kaola) 구매자에게 판매 할 수 있습니다.

참고

워드프레스 이미지 최적화에 필수적인 ImageMagick 설치 방법

워드프레스 이미지 최적화에 필수적인 ImageMagick 설치 방법에 대해서 알아봅니다.

이미지를 압축할 수 있는 다양한 방법이 있기 때문에 서버에서 직접 ImageMagick 활용 가능성이 적어지기는 했습니다.

그러나 워드프레스 시스템 자체에서는 ImageMagick을 옵션으로 요구하고 있기 때문에 설치하는 것이 좋습니다.

설치되어 있지 않으면 사이트 건강상태 점검 부분에서 필수 모듈이 누락되어 있다는 메세지를 받습니다.

PHP 모듈은 서버에서 사이트를 실행시키는 대부분의 작업을 수행합니다. 이에 대한 모든 변경은 서버 관리자가 수행해야합니다.

워드프레스 호스팅 팀은 팀 핸드북 (새탭에서 열기)에서 추천 또는 필수 모듈의 목록을 관리하고 있습니다.

– 경고 : 선택모듈 imagick가 설치되어 있지 않거나 사용할 수 없습니다.

아래에서는 우분투에서 기본적으로 지원하는 6.9대 버젼을 설치 방법을 알아보고 워드프레스 시스템에서 요구하는 7.0버젼 설치 방법을 알아보도록 하겠습니다.

1. ImageMagick 설치 여부 확인

# convert -version

Command 'convert' not found, but can be installed with:

apt install imagemagick-6.q16                
apt install graphicsmagick-imagemagick-compat
apt install imagemagick-6.q16hdri            
Code language: PHP (php)
# apt list imagemagick -a

Listing... Done
imagemagick/bionic-updates,bionic-security 8:6.9.7.4+dfsg-16ubuntu6.8 amd64
imagemagick/bionic 8:6.9.7.4+dfsg-16ubuntu6 amd64
Code language: PHP (php)

2. ImageMagick 설치

ImageMagick은 버젼 7이 나왔지만 공식 우분투 공식 파일 저장소에서는 아직 6.9대 버젼을 지원하고 있습니다.

여기서는 우선 6.9.7버젼 설치 방법을 살펴보고 뒤에서 ImageMagick 버젼 7을 설치 방법을 살펴봅니다.

워드프레스 보안에서는 6.9대 버젼 설치 시 제대로 설치되지 않았다고 나옵니다. 그래서 다시 ImageMagic 7을 설치했습니다.

2.1. ImageMagick 6.9.7 버젼 설치

# apt install imagemagick
Code language: PHP (php)

ImageMagick이 제대로 설치되었는지 확인하기 위해 아래와 같이 convert 명령을 사용한다.

# convert -version

Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org
Copyright: © 1999-2017 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP 
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib
Code language: PHP (php)

설치가 끝났으면 웹서버를 재가동시킵니다.

NGINX라면

# service nginx restart

또는 

# systemctl restart nginxCode language: PHP (php)

웹서버가 아파치라면

# systemctl restart apache2Code language: PHP (php)

2.2. ImageMagick 7 버젼 설치

먼저 ImageMagick 소스 파일을 다운 받습니다.

# wget https://www.imagemagick.org/download/ImageMagick.tar.gzCode language: PHP (php)

그 다음에는 다운받은 소스 파일의 압축을 풉니다. 그 다음 ImageMagick 소스 파일이 있는 폴더로 이동합니다.

이 폴더는 버젼에 따라 이름이 다르니 LS 명령을 사용해 정학한 폴더명을 확인합니다. 제가 설치할 시 버젼은 ImageMagick-7.0.9-19이었습니다.

# tar xvzf ImageMagick.tar.gz
# cd ImageMagick-7.0.9-19Code language: PHP (php)

이제는 ./configure 명령을 이용해 다운받은 ImageMagick 버젼을 compilation configuration 합니다

# ./configure Code language: PHP (php)

다음은 compilation을 진행합니다. 이때 사용하는 명령어는 make입니다.

# makeCode language: PHP (php)

위 명령어로 compilation이 성공하면 설치하고 다이나믹 링크를 걸어줍니다.

# make install 
# ldconfig /usr/local/libCode language: PHP (php)

마지막으로 제대로 설치되었는지 버젼을 확인해 봅니다.

# magick -version

Version: ImageMagick 7.0.9-19 Q16 x86_64 2020-01-28 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5) 
Delegates (built-in): 
Code language: PHP (php)

3.  Imagick PHP Extension 설치

Imagick PHP Extension 설치되어 있어야 워드프레스 시스템에서 정상적으로 인식하는 듯 합니다. 이는 6.9대를 설치 후 또는 7.0 설치 후 설치하면 됩니다.

# apt install php-imagickCode language: PHP (php)

참고

[Stackable plugin problem] Stackable plugin conflict with IE

There is a problem between Stackable Plugin and IE11.

I am using Post block of Stackable plugin. I applied vertical card layout in this post block.

In IE, the style originally intended is not implemented.
Below is the implementation of vertical card layout in Crome and IE11.

Stackable plugin Post Block admin setting

Below is the vertical card layout setting.

Vertical Card Layout

Stackable Post setting_Vertical Card 02

Vertical Card Style

Stackable Post setting_Vertical Card

Show in IE11

Below is the implementation of vertical card layout in IE11.

Stackable Plugin, IE 11에서 보여지는 모습
Stackable Plugin, IE 11에서 보여지는 모습

Show in Crome

Below is the implementation of vertical card layout in Crome.

Stackable Plugin,Cromedptj  보여지는 모습
Stackable Plugin,Cromedptj 보여지는 모습

The pages in question are as follows.

https://ownergolf.net/2019/12/31/%ec%bd%94%ed%83%80%ed%82%a4%eb%82%98%eb%b0%9c%eb%a3%a8-%ea%b3%a8%ed%94%84-%ec%97%ac%ed%96%89%ec%9d%84-%ec%9c%84%ed%95%9c-%ea%b3%a8%ed%94%84%ec%9e%a5-%ec%b6%94%ec%b2%9c-%ec%86%8c%ea%b0%9c/

Request mail

I have asked several times that there is a problem between Stackable Plugin and IE11. But it still remains unresolved, so I ask again.
I plan to apply the Stackable plug-in to multiple sites, but I’m putting it on hold because this problem is not resolved.

For specific problems between Stackable Plugin and IE11 see the posting below.

[미디어 사용 조사 보고서] 2019년 처음으로 SNS 사용율이 감소하다

0

정보통신정책연구원이 매년 초 발표한 ‘한국미디어패널조사’ 2019년 결과가 발표되었길래 이중 흥미있는 내용 중심으로 몇가지 공유해 봅니다.

다만 패널 조사이다보니 연령별 트렌드를 알수없고, 일부 조사 결과는 쉽게 수용하기 어려운 점도 있어 참고시 이점을 고려할 필요가 있다는 생각입니다.

Executive Summary

  • 미디어 기기 중 미지탈TV 보유율이 90.4%로 처음으로 90%를넘었고
    노트북 보유율 31%로 처음으로 30%를 넘었고, 태블릿 보유율이 14.3%로 처음으로 10%를 넘어 새로운 미디어 기기 확산이 한단계 진화
  • 핸드폰 보유율은 96.5%, 이중 스마트폰 사용율은 91.7% 차지
  • SNS 사용율 47.7%로 처음으로 사용율이 하락
    페이스북과 카카오스토리를 가장 많이 사용
    인스타그램이 빠르게 사용율을 높아지고 있으며,
    반면 트위터, 카카오스토리 등은 눈에 띄게 사용율이 감소 추이를 보임
  • 클라우드 사용율 18.6%로 처음으로 사용율 하락을 보임
  • 스마트기기에서 이용하는 애플은 카카오톡과 같은 인스탄트 메신저가 37.7%로 가장 높음
  • 매체별로는 TV 이용시간이 3시간 2분으로 가장 높고, 줄어드는 추이는 아님
    스마트폰을 포함 전화기 이용시간은 2시간으로 꾸준히 증가 추세를 보임

한국미디어패널조사 개요

한국미디어패널조사는 정보통신정책연구원이 정책 결정에 참고하고자 매년 실시하는 패널 추적조사 결과입니다.

이 조사는 2010년부터 매년 조사되는 것으로, 전국에 걸친 패널들의 추적 조사방식으로 조사 됩니다.

2020년 한국미디어패널조사는 전국 4,583가구 및 10,864명 개인을 대상으로 미디어 기기 보유 현황, 서비스 가입 및 지출 현황, 미디어 활용 현황, 미디어 다이어리 등을 조사했습니다.

미디어 기기 보유 – 노트북, 태블릿 보유율 증가

디지탈TV 보유율은 90.4%로 전년 89.3% 비 소폭 증가했으나, 데스크탑 컴퓨터 보유율은 56.6%로 매년 조금씩 보유율이 하락하고 있습니다.

반면 노트북 보유율은 31%로 처음으로 30%를 넘었고, 태블릿 보유율도 14.3%로 처음으로 10% 벽을 넘었습니다.

디지탈TV 보유율 – 90.4%로 처음으로 90%를 넘다

2019년 미디어패널조사, 디지탈TV 보유율 추이, Graph by 정보통신정책연구원
2019년 미디어패널조사, 디지탈TV 보유율 추이, Graph by 정보통신정책연구원

데스크탑 PC 보유율 – 56.6%로 갈수록 하락

2019년 미디어패널조사, 뎃크탑 PC 보유율 추이, Graph by 정보통신정책연구원
2019년 미디어패널조사, 뎃크탑 PC 보유율 추이, Graph by 정보통신정책연구원

노트북 PC 보유율 – 31%로 처음으로 30%를 넘다

2019년 미디어패널조사, 노트북 PC 보유율 추이, Graph by 정보통신정책연구원
2019년 미디어패널조사, 노트북 PC 보유율 추이, Graph by 정보통신정책연구원

태블릿 보유율 – 14.3%로 처음으로 10%를 넘다

2019년 미디어패널조사, 태블릿 PC 보유율 추이, Graph by 정보통신정책연구원
2019년 미디어패널조사, 태블릿 PC 보유율 추이, Graph by 정보통신정책연구원

스마트폰 사용율 증가 – 91.7%

2019년 96.5%가 핸드폰을 보유하고 있으며, 스마트폰 보유율은 2011년이후 꾸준히 상승하고 있습니다.

핸드폰중 유형별로 91.7%가 스마트폰을 사용, 대다수를 차지하고 있습니다.

2019년 미디어패널조사, 스마트폰을 비롯한 핸드폰 보유율 추이, Graph by 정보통신정책연구원
2019년 미디어패널조사, 스마트폰을 비롯한 핸드폰 보유율 추이, Graph by 정보통신정책연구원

SNS 사용율이 처음으로 감소하다

소셜네트워크서비스(SNS) 이용률은 47.7%로 절반 정도가 SNS를 이용하고 있는 것으로 나타났습니다.

그러나 SNS 이용율은 2011년, 16.8%이후 꾸준히 상승하다 2019년 처음으로 소폭(0.6%p)하락했습니다.

개인적으로는 꾸준히 지적되어 온 SNS 피로증후군이 확산되면서 SNS 사용율이 하락하지 않았나 추정합니다.

2019년 미디어패널조사, SNS 사용율 추이, Graph by 정보통신정책연구원
2019년 미디어패널조사, SNS 사용율 추이, Graph by 정보통신정책연구원

SNS 서비스병 이용율을 살펴보면, 가장 많이 사용하는 SNS 서비스는 페이스북으로 29.6% 사용율을 보였습니다. 이어 카카오스토리가 사용율 26.3%로 두번째를 기록했네요.

그런데 트위터 사용율은 전년 14%에서 2019년에는 5%로 낮아졌는데요. 이건 쉽게 납득이 안되는 추세 데이타로 보여집니다. 트위터 사용율은 꾸준히 하락하고 있는 추세는 유지하고 있습니다.

반명 인스타그램 사용율은 19.3%로 전년 10.8%에서 크게 증가한 것으로 나타났습니다.

그외 대부분 서비스는 전년 비 사용율이 하락했습니다. 전성기와 비교하면 싸이월드, 카카오스토리 그리고 트위터의 하락이 눈에 띄입니다.

2019년 미디어패널조사, 사용하는 소셜네트워킹서비스(SNS), Graph by 정보통신정책연구원
2019년 미디어패널조사, 사용하는 소셜네트워킹서비스(SNS), Graph by 정보통신정책연구원

매체별 이용 시간 – 여전히 TV이용 시간이 가장 크다

이 조사에서 매체별 평균 이용 시간을 아직도 TV 이용시간이 3시간 2분으로 가장 높으면 다른 매체에 비해서 월등하고, 특별히 이용 시간이 감소하는 경향은 아니라고 나타났습니다.

스마트폰을 비록한 유무선 전화기 사용시간은 전반적으로 꾸준히 증가하고 있습니다.

2019년 미디어패널조사, 매체별 이용시간 추이, Graph by 정보통신정책연구원
2019년 미디어패널조사, 매체별 이용시간 추이, Graph by 정보통신정책연구원

보고서

Loader Loading…
EAD Logo Taking too long?

Reload Reload document
| Open Open in new tab

Download [146.00 B]

참고

‘파괴적 혁신’의 구루 클레이튼 크리스텐슨 교수 인터뷰 요약 인용

0

지난 1월 23일(미국 시간) 우리에게 ‘파괴적 혁신’으로 널리 알려진 경영학의 구루 클레이튼 크리스텐슨(Clayton Christensen) 교수가 작고했습니다.

2013년 다보스 포럼에서 토론하는 경영학의 구루 클레이튼 크리스텐슨(Clayton Christensen) 교수, Image from WEF
2013년 다보스 포럼에서 토론하는 경영학의 구루 클레이튼 크리스텐슨(Clayton Christensen) 교수, Image from WEF

이분에 대한 여러 추도 글이 있는데요. 저는 ‘더밀크(The Milk)’를 운영하는 손재권 전 매일경제 특파원이 예전 클레이튼 크리스텐슨 교수 인터뷰 내용 요약을 여기에 소개하면서 제 나름대로 추도의 시간을 가져보겠습니다.

클레이튼 크리스텐슨 교수 인터뷰

우선 손재권 전 매일경제 특파원이 예전 클레이튼 크리스텐슨 교수 인터뷰 내용은 아래 매일경제 기사에서 볼 수 있습니다.

“韓기업 파괴적 혁신해야 성장…전담조직 회사 밖에 만들라”

그리고 추도의 의미로 예전 인터뷰 내용을 16가지로 요약해 공유한 손재권님의 페이스북 페이지는 아래 링크로 연결해 보시길

크리스텐슨 교수님이 저의 매경 특파원 시절 단독 인터뷰에서(2018년 12월) 주신 한국의 미래를 위한 메시지 

크리스텐슨 교수님이 저의 매경 특파원 시절 단독 인터뷰에서(2018년 12월) 주신 한국의 미래를 위한 메시지 (3) 18. 한국인들은 기존 시장에서 이익을 내기 위해 노력한 나머지 새로운 시장 창출 기회에 대해…

Posted by JaeKwon Son on Sunday, January 26, 2020

클레이튼 크리스텐슨 교수 인터뷰 요약

아래는 더밀크 손재권님이 정리한 인터뷰 요약입니다. 개인적으로 생각핼볼만한 내용엔 컬러를 칠해 보았습니다.

  1. 북한은 non consuming market. 개방된다고 지금의 한국(기업)이 잡을 수 있는 시장은 아닐 것이다.
  2. 한국이 ‘시장 창출 혁신’을 할 수 있는 영역이 있다. 엔터테인먼트, 헬스케어, 교육 등 3대 영역이다.
  3. ‘가족’도 신시장이다. 이 영역(가족)이 바로 정부가 해야할 분야이기도 하다.
  4. 한 회사가 시장의 파괴적 혁신을 여러 번 할 수는 없다.
  5. 기존 시장에서 이익만을 추구하는 회사에 성장은 없다.
  6. 파괴적 혁신이 일어나고 그 기업은 기존 기업이 되고 존속적 혁신과 효율적 혁신에 몰두하다가 또 다른 파괴적 혁신가가 나와서 시장을 혁신한다. 같은 시퀸스가 계속 발생하고 있다.
  7. 민주주의는 정부가 디자인한 것이 아니다. 민주주의의 원칙은 모두가 자발적으로 선택할 수 있도록 하는 것이다. 국민들이 자발적으로 법을 지킬 수 있도록 선택할 수 있어야 한다. 이것이 중요한 원칙이다.
  8. 삼성전자, 현대기아차, LG전자와같은 한국 기업들은 ‘효율적 혁신’을 하고있다. 효율적 혁신에 성장(Growth)은 없다.
  9. 기술 자체는 시장을 만들지 않는다. 어떻게 시장에 적용되는가에 따라 달라진다.
  10. (지금 한국 대기업들은 창업자가 아니라 3~4세 경영을 하고 있다는데) 그들은 재무적 투자를 하고 신시장을 만드는데 투자하지 않는 것처럼 보인다. 더 많은 돈을 현상 유지하는데 쓰고 있다.
  11. 한국의 모빌리티는 기존 택시와 경쟁하려 한다면 성공할 수 없을 것이다. 택시와 경쟁하지 말라.
  12. 파괴적 혁신은 시장과 일자리를 없애는 것이 아니라 새로운 시장과 고객으로 뛰어들어 ‘시장 창출 혁신’을 해야 한다는 것이다.
  13. 기존 기업들은 규제를 파괴적 혁신을 가로 막는데 활용되고 있다.
  14. 내가 한국이 있으면 신기술을 활용해서 기존 기업이 미처 보지못한, 새로운 소비자가 기다리고 있는 시장을 개척하려 할 것이다.
  15. 한국은 경제주체들이 새 시장을 창출하는 혁신을 하기보다는 ‘존속 혁신’에만 초점을 맞춘다.
  16. 시장 창출 혁신하고 성장을 위해서는 기업가정신(앙트러프러너십)을 독려해야 한다.

마지막으로 교수님의 영면을 기원합니다!!!