-0.5 C
New York
토요일, 12월 20, 2025

Buy now

[광고] 쿠팡 추천 링크

안녕하세요? 올해까지 삼성전자 25년 직장 생황릃 마치고 퇴직하려 합니다. 퇴직 후 아르바이트로 쿠팡 파트너스 활동을 하려고 합니다. 쿠팡 파트너스는 쿠팡 추천 링크를...

카누 캡슐 커피머신 솔직 리뷰: ‘네스프레소 호환’ 가성비 끝판왕 (ft. 쿠팡 최저가 할인)

'공유 커피' 카누가 만든 카누 캡슐 커피머신 : 캡슐 커피머신 바리스타 브리즈/어반! 네스프레소 오리지널 캡슐 호환으로 활용도는 높이고, 카누만의 황금 레시피로 커피 맛은 깊어졌습니다....
Home Blog Page 346

뉴스를 돈내고 보는 시대가 올까? 미국의 미디어 유료 구독 증가에서 얻는 인사이트

0

중국에서 뉴스 큐레이션서비스가 각광을 받고 있으며(중국 젊은이들은 자신만이 볼수 있는 또는 자기에게 맞춘) 고급 전문정보에대한 니즈가 강하고 이를 위해서는 기꺼이 지갑을 열고 있다고 합니다.

미국도 뉴스를 공짜 서비스가 아니라 유료 가치가 있는 컨텐츠로 인식하는 경향이 높아지고 있습니다. 이에 대해서 미국 정치전문지인 POLITICO(폴리티코)는 최근 미국 밀레니얼 세대들이 유료 뉴스 구독을 크게 늘리고 있다며 이에 대한
분석을 제시했습니다.

1. POLITICO(폴리티코), 젊은 구독자들이 구 미디어로 몰려들고 있다.

Young subscribers flock to old media

폴리티코 온라인 기사 캡춰

트럼프 대통령이 언론에 대한 전쟁을 지속하면서 밀레니얼 세대들의 기존 미디어에 대한 구독이 증가하고 있습니다. 이들 세대의 구독 증가세는 기존 세대에 비해 월등히 높습니다.
2016년 11월 미 대통령선거 이후 잡지 뉴욕커(Newyorker)는 1년전 동기간에 비해 밀레니얼 구독자가 두배이상 증가하였습니다. 이 잡지의 통계에 따르면 18~34세의 구독자는 106% 증가했으며 이 중 25~34세는 129% 증가했습니다.
The Atlantic도 비슷합니다. 18~24세 구독자가 130% 증가했고 18~44세 전체는 70% 증가했습니다.

워싱턴포스트지와 뉴욕타임즈와 같은 신문은 특별한 구독자 데이타를 공유하지는 않지만 워싱턴 포스트 대변인에 따르면 밀레니얼 세대으ㅟ 가입 증가율이 가장 높다고합니다. 뉴욕타임즈관계도 비슷한 경향을 보이며 밀레니얼들에게 노출되는 디지탈 트래픽이 1년전에 비해서 9% 증가했다고 밝혔습니다.

월스트리트 저널조차 학생 가입자를 두배로 늘렸다고 밝히고 있습니다. 그리고 이코노미스트지는 18~24세 그룹과 25~34세 그룹에서 신규 가입이 성장의 핵심 동인이 되고 있다고 합니다.

1.1. 밀레니얼 세대에서 유료구독이 증가하는 이유

밀레니얼 세대는 오랬동안 뉴스에 비용을 지불하지 않을 것으로 파악되어 왔습니다. 그러나 Reuters Institute’s Digital News Report에 따르면 몇가지 변화가 일어나고 있다고 합니다,

첫번째 요인은 유료 구독 경험의 증가

이러한 변화의 첫번째는 넷플릭스, 훌루 그리고 스포티파이같은 구독형 스트리밍 서비스 구독 경험이 양질의 컨텐츠에 점차 돈을 지불하게 되었다는 것입니다.

▽ 비디오 스트리밍 서비스 선두주자 넷플릭스의 자체 제작 드라마중 가장 유명한 하우스 우브 카드 house of Cards

넷플릭스 자체 제작 드라마중 가장 유명한 하우스 우브 카드 house of Cards

두번째 요인은 트럼프

Reuters Institute가 지난 여름 36 개국에서 7 만명이 넘는 사람들을 대상으로 조사한 보고서에 따르면, 미국은 2016년 온라인 뉴스를 유료 구독한 비율이 증가한 유일한 나라였습니다. 2016년에 9% 증가했고 2017년에는 16% 증가했는데 이는 밀레니얼 세대 역활이 컸습니다.

2016년에서 2017년 사이에 온라인 뉴스를 구독한 미국인 18-24 세의 점유율은 4%에서 18%로 상승했고 25-34세는 8%에서 20%로 증가해 이 두 집단의 전체 시장에 차지하는 비중은 30%에 달합니다.

잡지 New Yorker가 공개한 통계에 따르면 ‘트럼프 효과(Trump bump)’는 모든 연령대에 존재했습니다. ‘트럼프 효과(Trump bump)’는 미디어들이 트럼프 대통령에게 욕을 먹으면 오히려 구독률이나 시청률이 올라가는 현상을 일컫는 용어이다. 로이터 연구소 (Reuters Institute) 보고서에서 밀레니얼들은 다른 세대들보다 세 배 빠른 속도로 증가했으나 다른 어느 그룹도 온라인 뉴스를 구독하는 비율이 높지는 않았습니다.
로이터 연구소 (Reuters Institute)는 미국에서 유료 구독자의 수 증가는 주로 트럼프에 반대하는 사람들과 젊은층에 이해서 주도되고 있으며 트럼프에 반대해 기존 저널리즘을 지키기 위해 유료 구독으로 눈을 돌리고 있다고 분석하고 있습니다.

도널드 트럼프

1.2. 뉴스 브랜드 정체성이 중요하다.

노스 웨스턴 Medill School of Journalism의 Stephanie Edgerly 교수는 젊은 사람들이 뉴스에 어떻게 관심을 가지는지 연구했습니다. “NPR 토트 가방이 큰 이유이고 뉴요커가 핫한 상품으로 여겨지는 가방을 지녔던 이유입니다. 뉴스는 브랜드이며, 당신이 자신과 연관시키고 싶어하는 특정 유형의 가치를 상징하며, 현재의 정치 환경에서 이는 더욱 중요해졌다.“ 이야기 합니다.

이는 라이프 스타일 가치를 의미하고 당신이 예술을 소중히 여기는 사회적으로 의식있는 지식인인지 또는 아해하기 어려운 정치적 논쟁을 알고 있는 까다로운 소수 반대자로 인식되기를 원하는지 여부를 나타냅니다.
예를 들어 the Atlantic을 페이스북에서 공유하는 고등학생일지라도 이를 공유할 때 세상을 더 깊고 비판적으로 고민하고 있다는 신호를 보낸다는 것입니다.

▽ NPR 토트백

NPR 토트백 NPR tote bag2

1.3. 이러한 경향이 지속될 수 있을까?

트럼프 시대에 New Yorker나 The Atlantic이 저항의 직은 징조로 작용해 구독을 증가시킬 수 있지만 이러한 흐름이 지속될 것인가에 대한 의문은 있습니다.

로이터 연구소 (Reuters Institute)의 뉴먼 (Newman)은 트럼프 효과 (Trump effect)가 사라지더라도 밀레니엄 세대가 뉴스 서브스에 유료 가입하는 경향이 지속될 등정적인 신호가 있다고 합니다.

그것은 음악과 비디오 스트리밍 서비스에 비용을 지불하려는 사람들과 뉴스에 비용을 지불 할 의사가있는 사람들 사이에는 강한 상관 관계가 있다는 것입니다. 다른 온라인 서비스는 근본적으로 사람들에게 구독이 무엇인지 알려주고 그 경험이 영향을 미친다는 것입니다.

미국인의 84%는 온라인 뉴스에 비용을 지불하지 않지만 구독 비용이 결코 저렴하지 않지만 질 높은 저널리즘이 점차 엘리트 제품이 될 가능성이 있다는 것입니다.

2. 마치며

간단히 살펴보았지만 질 좋은 컨텐츠라면 인터넷 시대의 공유 정신에서 비롯된 공짜의식에서 벗어나 유료 구독자를 모을 수 있는 타당한 이유가 된다는 것이며, 이는 자신을 나타낼 수 있는 독보적인 브랜드 정체성을 갖춘 매체만이 살아남을수 있다는 교훈을 주는 것 같습니다.
인터넷이 만연한 이 시기 구 미디어에 대한 구독의 증가는 기존 인터넷에서 제공해주지 못하는 또는 제공하기 어려운 고품질 컨텐츠를 한군데서 쉽게 볼 수 있다는 장점이 다시 부각되는 것으로 보입니다.

인터넷 정보의 홍수속에서 쓸만한 정보를 찾아 헤매는 현대인에게 자신에게 맞는 니즈를 충족해줄 수 있는 고품질 고품격 컨테츠를 골라 제공해줄 수 있는 큐레이션은 앞으로도 각광을 받을 수밖에 없는 서비스가 될 것입니다.
이러한 조건들이 구비된다면 너무 대체제가 많아 공짜로도 인식되는 뉴스도 한국에서도 그 가치를 인정받는 시기가 올것입니다. 뭐 조금 시간이 많이 걸리겠지만…..

2018년 모바일폰 시장 예측 – 스마트폰 6%로 성장세 전환 by가트너

0

2017년이 막바지에 접어들면서 2018년에 대한 예측들이 나오고 있습니다.

가트너는 PC 및 모바일폰 출하량 예측치를 발표했습니다. Gartner Says Worldwide Device Shipments Will Increase 2 Percent in 2018, Reaching Highest Year-Over-Year Growth Since 2015가 그것인데요.
가트너는 전 셰계 소비자를 대상으로 온라인 조사를 토대로 PC와 모바일폰(스마트폰+피처폰)에 대한 수요를 예측했습니다. 조사는 2017년 6월 ~ 7월사이에 미국, 영국, 독일, 중국. 인도등에서 약 만 6천 537명을 조사했습니다.

이 조사 결과에 따르면 2018년 모바일폰(스마트폰+피처폰)은 19.3억대가 출하 예상되어 2017년 비 2.3% 성장할 것으로 예상했습니다.

프리미엄 수요를 촉발할 애플 아이폰 X 공급차질은 수요를 2018년으로 전전시키고 있다.
급격한 부품 가격 인상은 저가 시장에서 가격 전쟁을 자제토록 만들어 저가 수요가 감소하였다.
결국 프리미엄 수요의 2018년으로 이전 및 저가 시장 수요 위축이 2017년 수요 감소의 요인이자 2018년 수요 증가의 원인이다.

Device Type 2016 2017 2018 2019
Traditional PCs (Desk-Based and Notebook) 220 204 195 188
Ultramobiles (Premium) 50 59 70 81
Total PC Market) 270 263 265 269
Ultramobiles (Basic and Utility) 169 162 161 160
Computing Device Market 439 425 426 429
Mobile Phonest 1,893 1,882 1,926 1,932
Total Device Market 2,332 2,307 2,352 2,361

이를 토대로 기존에 가트너가 발표했던 과거 데이타와 합쳐서 애플 아이폰이 출시된 1997년부터 모바일폰(스마트폰+피처폰)의 수요 추이를 그려보면 아래와 같은 모습을 보여줍니다.

▽ 가트너가 발표한 2019년까지 모바일폰(스마트폰+피처폰) 출하량 예측, 단위 백만대, 그래프 by Happist

가트너 스마트폰 전망(2017년 10월 업데이트)

2018년 모바일폰(스마트폰+피처폰) 시장에 대해서 가트너는 전년대비 2.3% 성장이 예상되어 2016년 및 2017년 연속 출하량 감소에서 벗어나 3년만에 성장세로 전환될 것으로 예상하였습니다.

2018년 모바일폰(스마트폰+피처폰) 수요 중 스마트폰은 86%를 차지할 것이며 스마트폰의 성장율은 무려 6%에 달할 것으로 보았습니다. 이러한 스마트폰의 성장을 견인하는 것은 애플 아이폰 X로 비싼 가격에도 불구하고 북미와 중국 그리고 구주에서 아이폰 X가 큰 인기를 끌면서 수요를 견인할 것으로 보았습니다. 애플 아이폰 X의 수요 견인은 아이폰 교체 수요가 그만큰 강력하기 때문으로 설명하고 있습니다. (제품력보다는??)

애플 아이폰 X가 2017년 4분기 출시되지만 부품 공급이 원활하지 않아서 충분한 수요를 대응하지 못할 것이고 이러한 수요는 2018년 수요로 전이되면서 2018년 스마트폰 수요가 6% 크게 증가하는 원인으로 분석되었습니다.

또한 2017년 모바일폰(스마트폰+피처폰) 수요의 감소는 저가 스마트폰 시장 수요의 감소에서 비롯되었고 이 시장에서는 로컬 업체와 글로벌 탑 플레이어간 수요 챙탈전이 치열한 곳이지만 급격한 부품 가격의 상승은 일부 모바일폰 제조업체의 가격 경쟁력을 약화시켜 공격적인 가격전쟁이 다소 약화되었다고 보고 있습니다. 즉 부품 가격의 상승은 저가 수요 촉발을 위한 가격 프로모션이 약화되면서 수요가 감소했다는 것입니다.

스마트폰 시장 수요 및 시장점유율 관련해서는 아래 글들을 참조하세요.

모바일폰(피처폰+스마트폰) 시장규모 추이와 브랜드별 스마트폰 시장점유율 추이

[2017년 2분기] 세계 스마트폰 시장 점유율 추이 – 삼성의 안정적 리딩 , 화훼이 등 중국업체의 약진

[2017년 1분기] 세계 스마트폰 시장 점유율 추이 – 삼성의 왕좌 복귀, 화훼이와 오포 등 중국업체의 약진

[2016년 4분기]세계 스마트폰 시장 점유율 추이 – 애플의 왕좌 등극, 삼성 몰락의 가시화 그리고 화훼이 점유율 10% 돌파

[2016년 3분기 업데이트]세계 스마트폰 시장 점유율 추이 – 삼성 몰락의 전조(?) 그리고 여전한 중국 업체의 추격

[2016년 2분기 업데이트]세계 스마트폰 시장 점유율 추이 – 삼성이 선두지만 화웨이의 추격이 거세다

LG 스마트폰 실패에서 배우는LG G6 성공 요인 – G6 제품 컨셉과 마케팅에 대한 소고

다시 복기해 보는 노키아 몰락의 이유, 시장과의 정면 승부를 피한 혹독한 댓가

삼성은 어떻게 스마트폰 시장을 따라 잡았을까? 삼성의 성과와 한계를 생각해 본다

갤럭시 노트7 발화사건 그리고 삼성 스마트폰 점유율

사이트 운영을 위한 안내 – 웹서버 세팅에서 워드프레스 설치까지(우분투 17.10, NGINX 1.13.6, Marian DB 10.2, PHP7.2)

사이트가 문제가 있어서 서버부터 워드프레스까지 전부 새로 설치를 했다. 그렇지만 워드프레스 데이타베이스를 그대로 사용했으니 완전한 클린 설치라고는 할 수 없을 것 같긴하다.

그 전 단계를 간략히 정리해 본다. 다음부터는 이를 참조하면 단기간애 서버 설치에서 워드프레스 설치까지 할 수 있을 것 같다. 설치하면서 여기저기 자료를 참조하기가 너무 힘들어서 한번에 참조할 수 있는 자료가 있었으면 좋겠다는 생각을 했다. 그 마스터 자료로 앞으로 개인적으로 활용하고자 한다.

여기서는 우분투 17.10을 기반으로 Nginx 1.13.6, PHP7.1.10, Marian DB 10.2와 같은 웹서버 기본 세팅과 가장 기본적인 보안 설정, 사이트 속도를 올려줄 ngx_pagespeed 설치, Lets’ Encrypt SSL 인증서 설치 그리고 워드프레스 설치의 모든 단계를 짚어 보았다.

1. 우분투 17.10을 선택하다.

우분투를 어떤 버젼을 적용할지 많른 고민을 했다. 장기전인 운용을 염두에 둔다면 16.04버젼을 사용해야 한다. 그렇지만 최신 소프트웨어를 사용해야 직성이 풀리는 본인으로서는 가장 최근 2017년 10월 20일 발표된 17.10 코드명 Artful Aardvark을 적용하였다.

여기 엡서버 세팅은 라엘님의 안내서를 기반으로 최신 버젼으로 바뀐 부분들은 구글링을 자료를 기반으로 업데이트 했다.

아래는 주로 참조했던 자료들이다.

Lael, Ubuntu 16.04 LTS 웹서버 세팅방법 (Nginx + PHP7-FPM + MariaDB)

Install PHP 7.1 with Nginx on an Ubuntu 16.04 VPS

Amir Alamani, How to install MariaDB 10 on Ubuntu 16 & Debian 8)

내가 사용하고 있는 Vultr(아마 다른 가상서버호스팅도 마찬가지)에서는 운영 체제를 선택하면 자동으로 운영체제까지는 자동으로 설치하고 그 이후부턱 개인이 작업 할 수 있도록 해준다.

아래 단계는 운영 체제가 설치된 상황하에서 NGINX 서버 등 관련 소프트웨어를 설치하는 과정을 정리하였다.

1.1. 쉘 기본 언어값 확인

제일 먼저 쉘 기본 언어값 확인한다. apache2 명령어을 적용 시 영어로만 나오면 그냥 넘어가고 중국어나 일본어 나온다면 영어로 바꾸어야 한다.

이번 작업의 경우 아래처럼 영어로 나와서 넘어간다.

# apache2
The program 'apache2' is currently not installed. You can install it by typicdng : 
apt install apache2-bin
Code language: PHP (php)

만약 영어가 아닌 다른 언어가 나온다면 /etc/default/locale 의 파일 내용을 변경한다.

# vi /etc/default/locale
Code language: PHP (php)

에서 아래 내용을 반영한다.

LANG="en_US.UTF-8"
LANGUAGE="en"
Code language: PHP (php)

1.2. 현 운영체제의 프로그램을 최신으로 업데이트

# apt-get update
# apt-get upgrade -y
Code language: PHP (php)

1.3. 시스템 시간 설정

dpkg-reconfigure tzdata
Code language: PHP (php)

GUI 환경에서 Asia를 선택하고 이어서 Seoul을 선택한다.

서버 시간 세팅_Seoul

그러면 아래와 같은 결과를 출력한다.

Current default time zone: 'Asia/Seoul'
Local time is now:      Sat Oct 14 16:24:42 KST 2017.
Universal Time is now:  Sat Oct 14 07:24:42 UTC 2017.
Code language: PHP (php)

1.4. 메일 발송프로그램 설치하기

메일을 발송할 수 있는 sendmail 프로그램을 설치, 압축 해제 프로그램 그리고 SSL을 위한 letsencrypt도 같이 설치하자. 뒤에서 나오는 작업을 하다보면 설치하라고 나오는 프로그램들이다.

메일 발송 프로그램은 시간이 조금 걸린다. 인내를 가지고 기다려야 한다.

apt-get install sendmail -y
apt install unzip
apt install letsencrypt -y
Code language: PHP (php)

그러나 보안상의 이유로 메일 발송 프로그앰은 서버에서 사용하지말라는 권고가 많으므로 참고하길..

1.5. APT 소스리스트 파일에 Nginx, PHP, MariaDB 저장소 추가

sources.list를 열어서 파일 맨 끝에 소스리스트를 추가

# vi /etc/apt/sources.list
Code language: PHP (php)

파일 맨 끝에 아래 내용 추가

# Nginx
deb https://packages.nginx.org/unit/ubuntu/ artful unit
deb-src https://packages.nginx.org/unit/ubuntu/ artful unit

# MariaDB 10.2 repository list - created 2018-01-11 12:11 UTC
# http://downloads.mariadb.org/mariadb/repositories/
deb [arch=amd64,i386] http://ftp.kaist.ac.kr/mariadb/repo/10.2/ubuntu artful main
deb-src http://ftp.kaist.ac.kr/mariadb/repo/10.2/ubuntu artful main
Code language: PHP (php)

1.6. 각 저장소 보안키 다운로드 후 시스템에 등록

nginx 보안키 다운로드 후 적용한다.

cd /root
wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
rm nginx_signing.key
Code language: PHP (php)

다음으로는 MariaDB 보안키 다운로드 후 적용.

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
Code language: PHP (php)

다음으로는 PHP 저장소 추가 및 보안키 등록

# apt-get install software-properties-common
# add-apt-repository ppa:ondrej/php
Code language: PHP (php)

add-apt-repository ppa:ondrej/php를 실행하면 여기서 아래와 같은 메세지가 나오면서 엔터를 치라는 메세지가 나오는데요. 고민하지말고 엔터를 치면됩니다.

Co-installable PHP versions: PHP 5.6, PHP 7.x and most requested extensions are included.

You can get more information about the packages at https://deb.sury.org

BUGS&FEATURES: This PPA now has a issue tracker:
https://deb.sury.org/#bug-reporting

CAVEATS:
1. If you are using php-gearman, you need to add ppa:ondrej/pkg-gearman
2. If you are using apache2, you are advised to add ppa:ondrej/apache2
3. If you are using nginx, you are advise to add ppa:ondrej/nginx-mainline
   or ppa:ondrej/nginx

PLEASE READ: If you like my work and want to give me a little motivation, please consider donating regularly: https://donate.sury.org/

WARNING: add-apt-repository is broken with non-UTF-8 locales, see 
https://github.com/oerdnj/deb.sury.org/issues/56 for workaround:

# LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
 More info: https://launchpad.net/~ondrej/+archive/ubuntu/php
Press [ENTER] to continue or ctrl-c to cancel adding it
Code language: PHP (php)

여기서 엔터를 눌러주면 된다..

추가된 보안키 목록을 보려면 아내 명령어를 이용한다,

# apt-key list
Code language: PHP (php)
/etc/apt/trusted.gpg
--------------------
pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
      573B FD6B 3D8F BC64 1079  A6AB ABF5 BD82 7BD9 BF62
uid           [ unknown] nginx signing key <signing-key@nginx.com>

pub   rsa4096 2016-03-30 [SC]
      177F 4010 FE56 CA33 3630  0305 F165 6F24 C74C D1D8
uid           [ unknown] MariaDB Signing Key <signing-key@mariadb.org>
sub   rsa4096 2016-03-30 [E]

/etc/apt/trusted.gpg.d/ondrej_ubuntu_php.gpg
--------------------------------------------
pub   rsa1024 2009-01-26 [SC]
      14AA 40EC 0831 7567 56D7  F66C 4F4E A0AA E526 7A6C
uid           [ unknown] Launchpad PPA for Ondřej Surý

/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-archive.gpg
------------------------------------------------------
pub   rsa4096 2012-05-11 [SC]
      790B C727 7767 219C 42C8  6F93 3B4F E6AC C0B2 1F32
uid           [ unknown] Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>

/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg
------------------------------------------------------
pub   rsa4096 2012-05-11 [SC]
      8439 38DF 228D 22F7 B374  2BC0 D94A A3F0 EFE2 1092
uid           [ unknown] Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>
Code language: PHP (php)

지금까지 작업한 APT 패키지 정보를 업데이트 한다.

# apt-get update
Code language: PHP (php)

2. Nginx 설치

Nginx를 설치하고 nginx를 다시 가동(restart)시킨다.

# apt-get install nginx

# service nginx restart
# nginx -v  // Version check
Code language: PHP (php)

2017년 10월 23일 현재 설치 버젼을 체크해 보니 1.13.6이 나온다

3. PHP 7.2치

PHP7-FPM 최신버전인 PHP7.2를 설치한다. 2018년 1월 11일 현재 최신 버젼은 PHP7.2.1이다..

PHP 최신 다운로드 버젼 확인 하러 가기

# apt-get install php7.2
Code language: PHP (php)

PHP7,2을 설치하고나서 관련 모듈을 설치한다. 이 과정에서 일반적으로 널리 사용되는 모듈 list가 많이 돌아다니고 있으므로 이를 기준으로 설치해도 되고, 아니면 PHP7,2 모듈 패키지 리스트를 보고 선택을 다시 할 수도 있다.

아래 명령은 PHP 7.2 modules 리스트를 알려주는데 이를 보고 추가할 모듈 패키지가 있는지 볼 수 있다.

# apt-cache search php7.2
Code language: PHP (php)

위 명령을 내리면 아래와 같은 list가 쭈욱 나온다. 여기를 보고 추가할 모듈 리스트를 추가한다. 그렇지만 대개는 일반적으로 필요하다고 이야기되는 리스트 중심으로 설치하기 마련이다.

PHP 패키지 리스트가 출력된 모습1

그 다음으로는 일반적인 PHP 모듈을 설치한다. Install most commonly used modules

# apt-get install php7.2 php7.2-fpm php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-mysql php7.2-mbstring php7.2-mcrypt php7.2-zip php7.2-fpm  php7.2-gd php7.2-curl php7.2-xml php7.2-mcrypt php7.2-readline
Code language: PHP (php)

php.ini 파일 수정

파일 수정은 fpm과 cli 폴더의 php.ini를 모두 수정해 주어야 한다.

  • date.timezone을 찾아 Asia/Seoul로 변경
  • cgi.fix_pathinfo=0 값으로 변경
  • 쿠키값 보안을 위해서 session.cookie_httponly 와 session.cookie_secure 값을 1을 준다.
# vi /etc/php/7.2/fpm/php.ini
# vi /etc/php/7.2/cli/php.ini
Code language: PHP (php)

아래 변경 결과

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Seoul
Code language: PHP (php)

PHP 기본 세팅의 변경,

아래는 PHP 기본 세팅을 변경하는 명령어인데 제한적이지만 작용은 한다. 단 cli폴더와 fpm 폴더에 있는 php.ini 파일 모두가 변경되는 것은 아니다.

sed -i "s/memory_limit = .*/memory_limit = 256M/" /etc/php/7.2/fpm/php.ini
sed -i "s/upload_max_filesize = .*/upload_max_filesize = 1024M/" /etc/php/7.2/fpm/php.ini
sed -i "s/zlib.output_compression = .*/zlib.output_compression = on/" /etc/php/7.2/fpm/php.ini
sed -i "s/max_execution_time = .*/max_execution_time = 18000/" /etc/php/7.2/fpm/php.ini
Code language: PHP (php)

PHP-FPM 프로세스 매니저는 Static, Dynamic and Ondemand의 3가지방법이 있는데 설치시 기본은 Dynamic이다. 이를 Ondemand로 변경한다. 변경은 /etc/php/7.2/fpm/pool.d/www.conf 내용을 변경하고, /etc/php/7.2/fpm/pool.d/www.conf.org는 삭제한다. (이 파일은 없는 경우도 있다)

[www]
user = www-data
group = www-data
listen = /run/php/php7.1-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
pm = ondemand
pm.max_children = 200
pm.start_servers = 15
pm.min_spare_servers = 10
pm.max_spare_servers = 100

pm.process_idle_timeout = 10s
pm.max_requests = 200
chdir = /

php_admin_value[post_max_size] = 1024M
php_admin_value[upload_max_filesize] = 1024M
Code language: PHP (php)

php.ini 파일 수정이 끝나면 PHP-FPM service를 다시 시작한다.

# systemctl restart php7.2-fpm.service
Code language: PHP (php)

4. MariaDB 설치

안정화된 MariaDB는 10.2까지 출시되어 있었다.(2017년 10월 20일)

MariaDB Downloads, Setting up MariaDB Repositories

4.1. MariaDB 10.2 설치 준비

앞에서 저장소와 키를 등록했으므로 간단하게 아래 명령으로 MariaDB를 설치할 수 있다.

# apt-get update
# apt-get -y install mariadb-server
Code language: PHP (php)

아래는 MariaDB 재단에서 제공하는 Ubuntu 17.10에서 MariaDB를 설치하는 명령어이다.
에서서 PPA와 키를 등록하지 않았다면 아래 명령을 사용해도 좋다.

# apt-get install software-properties-common
# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
# add-apt-repository 'deb [arch=amd64,i386] http://ftp.kaist.ac.kr/mariadb/repo/10.2/ubuntu artful main'
Code language: PHP (php)

만약 운영체제가 널리 사용되는 우분투 16.04이라면 아래와 같다.
앞의 두분은 같고 마지막 세줄만은 artful을 xenial로 바뀐다.

# apt-get install software-properties-common
# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
# add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.kaist.ac.kr/mariadb/repo/10.2/ubuntu xenial main'
Code language: PHP (php)

4.2. MariaDB 10.2 설치

위에서 키와 저장소 정보를 가져오게 되면 아래 명령어로 MariaDB를 설치할 수 있다.

# apt update
# apt -y install mariadb-server
Code language: PHP (php)

설치 도중에 New password를 설정하는 화면이 나온다. 설치가 완료된 후 서비스 상태를 확인할 수 있다,

# service mysql status
Code language: PHP (php)

4.3. PHP-FPM에 DB 연동관련 모듈설치

# apt-get install php7.2-mysql
Code language: PHP (php)

기본 언어셋 설정

이는 매우 중요한 세팅으로 반드시 필요하다.

# vi /etc/mysql/conf.d/mariadb.cnf
Code language: PHP (php)

아래 내용으로 변경한다.

# MariaDB-specific config file.
# Read by /etc/mysql/my.cnf

Code language: PHP (php)

[client]

# Default is Latin1, if you need UTF-8 set this (also in server section) default-character-set = utf8mb4

[mysqld]

# # * Character sets # # Default is Latin1, if you need UTF-8 set all this (also in client section) # character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci character_set_server = utf8mb4 collation_server = utf8mb4_unicode_ci

변경 내용을 반영해 DB를 다시 시작한다,

service mysql restart
Code language: PHP (php)

1.8.2. Nginx 와 PHP-FPM 연결

nginx는 기본적으로 nginx 사용자 권한으로 실행되고, PHP-FPM 프로그램은 기본적으로 www-data 사용자 권한으로 실행되므로 둘의 사용자 권한을 www-data로 일치시킨다.

vi /etc/nginx/nginx.conf
Code language: PHP (php)
  • user nginx; 를 user www-data; 로 변경
  • worker_processes 1; 를 worker_processes auto; 로 바꾼다. 고사양 서버에서 성능이 더 좋아진다고. 일반적으로 트래픽이 적은면 1을 사용하고 트래픽이 많아지면 auto를 사용한다.
service nginx restart
Code language: PHP (php)
vi /etc/nginx/conf.d/default.conf
Code language: PHP (php)
fastcgi_params 내용 수정

fastcgi_params를 열어서 아래 내용으로 변경한다.

vi /etc/nginx/fastcgi_params
Code language: PHP (php)

아래와 같이 변경

fastcgi_param   QUERY_STRING            $query_string;
fastcgi_param   REQUEST_METHOD          $request_method;
fastcgi_param   CONTENT_TYPE            $content_type;
fastcgi_param   CONTENT_LENGTH          $content_length;

fastcgi_param   SCRIPT_FILENAME         $document_root$fastcgi_script_name;
fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
fastcgi_param   PATH_INFO               $fastcgi_path_info;
fastcgi_param   PATH_TRANSLATED         $document_root$fastcgi_path_info;
fastcgi_param   REQUEST_URI             $request_uri;
fastcgi_param   DOCUMENT_URI            $document_uri;
fastcgi_param   DOCUMENT_ROOT           $document_root;
fastcgi_param   SERVER_PROTOCOL         $server_protocol;

fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR             $remote_addr;
fastcgi_param   REMOTE_PORT             $remote_port;
fastcgi_param   SERVER_ADDR             $server_addr;
fastcgi_param   SERVER_PORT             $server_port;
fastcgi_param   SERVER_NAME             $server_name;

fastcgi_param   HTTPS                   $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS         200;
Code language: PHP (php)

5. 웹서버 보안 설정

보안에 대해서는 아래 내용을 참조하라

가상서버호스팅에서 서버 보안 설정 방법 – Nginx +Ubuntu 16.04의 경우

랜섬웨어 대응, 서버 및 워드프레스 필수 보안 설정 15가지

가장 기본이 되는 방화벽 설정이다.

  • 일반 및 SSL 설치 시 작동 가능토록 80, 443포트는 열어둔다.
  • ssh에서 널리 알려진 22포트는 해킹의 집중 대상이 되므로 자신많이 알수 있는 포트를 바꾼다. 이 작업은 sshd_config에서 사용할 포트를 지정해야 한다.
  • /etc/ssh/sshd_config 에서 Port 22 를 찾아서 자기가 사용할 포트 숫자를 기억하기 쉽고 10000자리이상에서 임의의 숫자를선택한다. 예를 들어 58722, 65322 등등
ufw enable  # 방화벽을 활성화한다.
ufw allow 80/tcp  # 일반 웹 정보 관련 입출력 통로
ufw allow 443/tcp  # SSL 설치 시 웹정보 관련 입출력 통로 
ufw allow ****/tcp  # ssh용 신규 포트
ufw deny 22/tcp  # ssh용으로 22포트를 사용할 수 없게 한다.
Code language: PHP (php)

6. ngx_pagespeed 설정

워드프레스 속도를 빠르게 만들기위해 구글에서 만든 ngx_pagespeed를 설치한다. 이것을 설치 시 구글 어낼리틱스 코드를 추가하면 별도로 워드프레스에서 구글 어낼리틱스 관련 작업할 필요가 없다.
또 이미지 압축이나 CSS 압축등의 기존 캐시 프로그램이 하는 일들을 대신해 준다. 그외 여러가지 기능이 있다.
add

6.1. 작업 폴더로 이동하기

아래 작업 방식은 아래를 주로 참조하였다,

[워드프레스 속도 개선] Nginx에 페이지스피드(mod_PageSpeed)설치 방법 두번째

그리고 위의 글도 이 방식을 소개한 우성군의 글에서 대부분의 생각을 빌려왔다.

우성군, Nginx PageSpeed 모듈 설치하기

자기가 작업할 폴더로 이동한다,

cd /usr/local/src
Code language: PHP (php)

6.2. ngx_pagespeed 소스 다운 받기

소스를 받으려면 최신 버젼 확인해야 한다. 아래로 들어가서 최신 버젼 확인

최신 버젼 확인 PageSpeed Release Notes

2017년 10월 14일 현재 최신 버젼은 1.12.34.3-stable임을 알 수 있다.

앞으로 1.12.34.3버젼을 많이 사용할 것이므로 이를 연결하는 명령을 준다. NPS_VERSION을 적용하면 이곳은 1.12.34.3로 인식한다고

NPS_VERSION=1.12.34.3
Code language: PHP (php)

아래 ngx_pagespeed 소스 받는 명령어

wget https://github.com/pagespeed/ngx_pagespeed/archive/v${NPS_VERSION}-stable.zip

unzip v${NPS_VERSION}-stable.zip

rm -f v${NPS_VERSION}-stable.zip

cd ngx_pagespeed-${NPS_VERSION}-stable/

psol_url=https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz

[ -e scripts/format_binary_url.sh ] && psol_url=$(scripts/format_binary_url.sh PSOL_BINARY_URL)

wget ${psol_url}

tar -xzvf $(basename ${psol_url})

cd ../
Code language: PHP (php)

6.3. Nginx 소스 컴파일 설치

이제 Nginx모듈을 설치하자. 작업 폴더로 이동해 기본 필수 패키지를 설치한다..

cd /usr/local/src 
apt-get -y install build-essential libpcre3 libpcre3-dev zlib1g-dev unzip git
Code language: PHP (php)

Nginx 소스 파일을 다운받는다. 작업 당시 최신버젼은 1.13.6이었다. 버젼이 바뀌면 바뀐 버젼으로 변경

wget -c https://nginx.org/download/nginx-1.13.6.tar.gz

tar zxf nginx-1.13.6.tar.gz

rm -f nginx-1.13.6.tar.gz
Code language: PHP (php)

6.4. Nginx 컴파일을 설치

  • root로 이동, 불필요한 문제를 만들지 않기 위해 루트에서 작업
  • 먼저 몇가지 필요한 라이브러리를 설치
  • Nginx 최신 버젼을 받아 놓은 곳으로 이동
  • 여러가지 모듈을 같이 설치

ngx_pagespeed만 설치할수도 있는데 단독 설치 시 제대로 설치된 않는 경우가 있어서(아마 어디서 출돌이 생기는지 모르겠음) 같이 설치함

cd ~ # 루트로 이동

apt -y install libperl-dev libpcre3 libpcre3-dev libssl-dev openssl libgd2-xpm-dev libgeoip-dev zlib1g-dev libxslt-dev

cd /usr/local/src/nginx-1.13.6

./configure --with-cc-opt='-Wno-deprecated-declarations' --sbin-path=/usr/sbin/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/run/nginx.pid --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module    --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-stream_realip_module  --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module  --add-module=../ngx_pagespeed-${NPS_VERSION}-stable ${PS_NGX_EXTRA_FLAGS}


make install
Code language: PHP (php)

6.5. 최적화 setting

nginx.conf에서 최적화 옵션 적용
아래는 시스템에 적용된 내용이다.

   # enable pagespeed module on this server block
    pagespeed on;              

    # let's speed up PageSpeed by storing it in the super duper fast memcached
    #pagespeed MemcachedThreads 1;
    #pagespeed MemcachedServers "localhost:11211";

    # This setting should be enabled when using HTTPS
    # Take care when using HTTP > HTTPS redirection to avoid loops
    pagespeed MapOriginDomain http://happist.com https://happist.com;


    # show half the users an optimized site, half the regular site
    pagespeed RunExperiment on;
    pagespeed AnalyticsID UA-64766674-1;
    pagespeed ExperimentVariable 1;
    pagespeed ExperimentSpec "id=1;percent=50;level=CoreFilters;enabled=collapse_whitespace,remove_comments;";
    pagespeed ExperimentSpec "id=2;percent=50";

    pagespeed EnableFilters extend_cache;
    pagespeed JpegRecompressionQuality 65;
    pagespeed RewriteLevel CoreFilters;    

    # Filter settings
    pagespeed DisableFilters convert_jpeg_to_webp;
    pagespeed DisableFilters lazyload_images;
    pagespeed EnableFilters defer_javascript; # 페이지 로딩 완료 시까지 자바 실행 지연
    pagespeed EnableFilters insert_dns_prefetch; # DNS resolution time 축소

    pagespeed EnableFilters prioritize_critical_css;

    pagespeed EnableFilters make_google_analytics_async,make_show_ads_async;

    # 이미지관련 대부분이 Core에 기본으로 들어가 있음, 사용하지 않으려면 비활성화 해야 함 예를 들어 pagespeed DisableFilters convert_to_webp_animated; 기본 rewrite_images, convert_jpeg_to_progressive, convert_png_to_jpeg, convert_jpeg_to_webp, convert_to_webp_lossless, inline_images, recompress_images, recompress_jpeg, recompress_png, recompress_webp, convert_gif_to_png, strip_image_color_profile, strip_image_meta_data, jpeg_sampling, resize_images, resize_rendered_image_dimensions, 

    pagespeed EnableFilters sprite_images;
    pagespeed EnableFilters resize_mobile_images;


    # needs to exist and be writable by nginx  755로 되어 있음 
    # cache 비우는 방법 Flushing PageSpeed Sever-ide Cache
    # rm -rf /var/ngx_pagespeed_cache/* or touch /var/ngx_pagespeed_cache/cache.flush
    # ngxrestart
    pagespeed FileCachePath /var/ngx_pagespeed_cache;

    pagespeed FileCacheSizeKb            1024000000;  # cache를 적용 후 다 차면 비운다
    pagespeed FileCacheInodeLimit        50000000;
    pagespeed CssFlattenMaxBytes 5120;
    pagespeed LRUCacheKbPerProcess     8192;
    pagespeed LRUCacheByteLimit        16384;


    # onfiguring SSL Certificates
    pagespeed SslCertDirectory directory;
    pagespeed SslCertFile file;

    pagespeed RewriteLevel CoreFilters;

    pagespeed FetchWithGzip on;
Code language: PHP (php)

6.6. ngx_pagespeed 설치 유무 간단 확인

ngx_pagespeed가 설치되었는지 간단히 확인하는 방법이다.
nginx -V(대문자)를 치면 시스템에 설치된 nginx 관련 모듈 리스트가 뜨는데 여기에 ngx_pagespeed가 나오면 제대로 설치된 것이다.

nginx -V
Code language: PHP (php)

그러면 아래와 같은 모듈 리스트가 뜬다. 여기에 ngx_pagespeed가 있는지 확인해 보자.

nginx version: nginx/1.13.6
built by gcc 7.2.0 (Ubuntu 7.2.0-8ubuntu3) 
built with OpenSSL 1.1.0f  25 May 2017
TLS SNI support enabled
configure arguments: --with-cc-opt=-Wno-deprecated-declarations --sbin-path=/usr/sbin/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/run/nginx.pid --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-stream_realip_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --add-module=../ngx_pagespeed-1.12.34.3-stable
Code language: PHP (php)

7. Let’s Encrypt 무료 SSL인증서 발급

보안의 일종으로 Let’s Encrypt 무료 SSL인증서 발급해 보자. 이 글은 주로 아래 글을 참조하였다.

[워드프레스 Tips] Let’s Encrypt 무료 SSL인증서 발급 및 자동 갱신 방법

[워드프레스 Tips] Lets’ Encrypt SSL 인증서 수동 갱신 방법

7.1. git 설치하고 certbot설치 하기

첫째 /root에서 작업을 진행할 수 있게 /root로 이동한다.

둘째, 필요한 소프트웨어를 GitLab에서 받을 수 있도록 git를 설치

처음 소프트웨어 설치 시 관련 소프트웨어를 업데이트할 수 있도록 Git repositories를 등록해 놓았다면 별도로 설치할 필요는 없는 것 같다.

셋째, 새로운 작업을 시작하기전에 항시 최신 소프트웨어가 없는지 점검하기 위해서 업데이트 명령을 준다.

넷째, 그 다음 git를 설치 명령을 준다.

다섯째, git이 설치되면 git 저장소에서 SSL 인증을 위한 소프트웨어 클라이언트인 certbot를 다운받는다.

cd /root   # /root 디렉토리로 이동해 작업 시작
apt-get update   # 항상 소프트웨어를 설치하기 전에 최신 업데이트가 있는 지 학인
apt-get install git # git 설치
git clone https://github.com/certbot/certbot  # certbot 설치
Code language: PHP (php)

7.2. certbot으로 인증서를 생성

첫째, certbot이 깔린 폴더로 이동. cd certbot 명령 사용

둘째, nginx를 중단시킨다. Let’s Encrypt 의 인증 방식인 Standalone plugin 은 서버 인증을 위해서 80포트를 이용하는데 nginx가 80 포트를 계속 사용하고 있으면 인증이 제대로 될 수 없으므로 nginx 서버를 일시적으로 멈추는 것.

셋째, 인증 절차에 돌입. 여기서 certonly 명령을 사용. certonly는 인증서만 설치하겠다는 명령으로 nginx에선 아직 아파치처럼 다양한 명령 옵션이 없다.

넷째, 나오는 화면 요구사항에 맞추어 인증을 진행.

cd certbot  # /certbot 디렉토리로 이동해 작업 시작
service nginx stop   # 80포트를 사용하지 않토록 nginx를 중단시킴
./certbot-auto certonly # 인증 절차 진행, 조금 시간이 걸립니다.
service nginx start # 작업이 끝나면 다시 nginx를 가동시킴
Code language: PHP (php)

인증시 이메일주소를 입력 후 적용하고 싶은 사이트 주소를 입력하게 끔 되어 있는데 큰 어려움은 없이 진행된다.

4.3. DH Param 생성, 적용하기

앞의 작업으로 인증서 설치는 끝나지만 보다 보안을 강화하기 위해서 DH Param 생성 한다.

DH Param은 일부 암호화 알고리듬에 사용되는 커다란 난수 하나를 미리 생성해 두어서 암호화 성능을 향상시키고 보안을 높이는 방법이다.

mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl dhparam -out dhparams.pem 4096  # 2048비트로 하려면 4096대신 2048로 대체 한다.
openssl rand 48 > session_ticket.key  # 세션 티켓키도 생성 이는 시간이 거의 걸리지 않는다.
Code language: PHP (php)

7.3. 암호화 알고리즘 설정하기

인증서를 획득하는게 중요한게 아니고 얼마나 철저한 암호화 설정을 하느냐가 중요하기에 암호화 알고리즘을 적용한다.

아래는 시스템에 적용된 암호화 알고리즘들이다.

# Letsencrypt 기본 RSA 인증서
    ssl_certificate /etc/letsencrypt/live/happist.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/happist.com/privkey.pem;

    #OCSP Stapling(인증서가 유효하다는 증명을 미리 받아두어서 사이트에 처음 방문할 때 접속 속도를 높여주는 방법dla)
    ssl_trusted_certificate /etc/letsencrypt/live/happist.com/chain.pem; 
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4  valid=300s;
    resolver_timeout 10s;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';

    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:50m;

    ssl_dhparam /etc/nginx/ssl/dhparams.pem;
    ssl_session_tickets        on;
    ssl_session_ticket_key /etc/nginx/ssl/session_ticket.key;

   # HTST 설정 ; 해당 도메인에 접근시 HTTPS로 접속을 강제하는 옵션 
    # 밑 옵션을 넣은 후 https://hstspreload.appspot.com  사이트에서 도메인 등록 필요
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

    #HPKP 설정
    #add_header Public-Key-Pins 'pin-sha256="lrJxl2mZhg9wlQ9JncdCBWyMq9oInWn2Wecefuv61T4=" ; pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=" ; pin-sha256="Vjs8r4z+80wjNcr1YKepWQboSIRi63WsWXhIMN+eWys=" ; max-age=2592000; includeSubDomains';
Code language: PHP (php)

참고 Let’s Encrypt SSL인증서 발급 관련 참고 – 1주일에 5번만 발급 가능

서버를 세팅하다보면 본의아니게 서버 설치를 반복하게 된다. 이런 저런 문제를 해결하고자 고민하다 문제 원인을 못 잡으면 다시 설치하는 경우가 있다.
그런데 Let’s Encrypt SSL인증서는 1주일에 5번까지 발급 받을 수 있다. 여러번 시행 착오를 통해서 5번이 넘어서면 아래와 같은 메세지가 나오면서 발급이 안된다.

An unexpected error occurred:
There were too many requests of a given type :: Error creating new cert :: too many certificates already issued for exact set of domains: test.com www.test.com

이메세지가 무엇일까 구글링해보니 Let’s Encrypt SSL인증서는 5회 발급으로 제한되어 있다고 한다. Let’s Encrypt SSL인증서없이 서버를 테스트해보고 충분하다싶으면 Let’s Encrypt SSL인증서를 발급받는게 좋을 듯..

8. 워드프레스 설치

이제 워드프레스를 설치해보자. 아래 내용은 아래 포스팅을 참조하여 일정부분 수정하였다.

[워드프레스 Tips] 가상서버호스팅(VPS)에서 워드프레스 설치하기

8.1. 가상호스트 루트 폴더(document root) 정하기

기본으로 우분투 16.04의 기본 디렉토리는 /usr/share/nginx/html/ 이다. 사람들의 취향에 따라서 다양한 위치에서 설치하고자하는 욕구가 있으나 보안이나 원인을 알수 없는 문제가 지속 발생하므로 가능하면 /usr/share/nginx/html/ 를 그냥 사용하는 게 좋다.

vultr에서 서버를 세팅하면 몇가지 우분투의 기본 위치는 아래와 같다.

  • 기본 루트 폴더(document root) 디렉토리는 /usr/share/nginx/html/
  • nginx 설정 파일 위치는 /etc/nginx/conf.d

8.2. 디렉토리 소유권 변경

다음으로는 기본 디렉토리의 소유권을 nginx 기본 사용자인 www-data에게 넘긴다.

# chown -R www-data:www-data /usr/share/nginx/html/
Code language: PHP (php)

8.3. 파일 권한 설정(필요 시)

위의 디렉토리 소유권 변경이 제대로 되었다면 파일 권한 설정이 필요없다. 권한 설정은 젣로 작동되지 않을때 강제로 파일 권한을 준다고 생각하고 권한을 강제 조정한다.

파일 권한을 확인해서 파일 권한을 755로 변경한다.

# chmod -R 755 /usr/share/nginx/html
Code language: PHP (php)

워드프레스 관련 디렉토리 소유권을 nginx인 www-data로 넘겼지만 가끔 플로그인들이 제대로 설치가 안되는 경우도 나타납니다. 이럴경우 파일 권한을 더 정확히 줍니다. 아래 폴더들은 디렉토리에 파일을 써야하므로(설치) 일정 권한이 필요합니다.

  • wordpress 폴더
  • wp-content/
  • wp-content/plugins/
  • wp-content/uploads
  • wp-content/upgrade/ (워드프레스 코어 업그레이드 필요)

이러한 폴더들에 대해서는 파일 권한을 확인해서 파일 권한을 755로 변경한다.

chmod 755 /usr/share/nginx/html/
chmod 755 /usr/share/nginx/html/wp-content/
chmod 755 /usr/share/nginx/html/wp-content/themes/
chmod 755 /usr/share/nginx/html/wp-content/plugins/
chmod 755 /usr/share/nginx/html/wp-content/uploads/
chmod 755 /usr/share/nginx/html/wp-content/upgrade/
Code language: PHP (php)

이렇게 선별적으로 권한 변경을 하는게 조금 더 안정적일 수 있는데 귀찮다면 -R옵션을 사용해 일괄 변경하는 방법도 있다.

8.4. Nginx 가상호스트 설정 파일을 생성, 작성

이 단계이후 할일은 Nginx 가상호스트 설정 파일에 이 새로 만든 document root 위치를 반영 시켜주는 것이다.
이 설정은 우분투 버젼 16.04기준 /etc/nginx/conf.d라는 폴더에 있는 default 파일에서 수정 가능하다. 이렇게 할수도 있지만 멀티 사이트를 운영할 시 설정 파일이 너무 복잡해져서 혼란스럽지않게 사이트마다 별도 파일로 관리를 할 수 있다.

변경하기 전 default.conf 파일을 처음 열어보면 아래와 같은 내용을 볼 수 있는데 이 내용을 변경해서 각 사이트명+conf를 만들어 내용을 채워 넣는다.

각 도메일별 서버블록 파일을 만들어 /etc/nginx/conf.d에 올린다.

아래는 본인이 사용했던 설정이다.

server {
    listen       80;
    server_name test1.com www.test1.com;
    return       301 https://$server_name$request_uri;
    }

server {
    listen       443 ssl http2;
    server_name  test1.com www.test1.com;
    root   /usr/share/nginx/test1.com;

    #set same size as post_max_size(php.ini or php_admin_value).
    client_max_body_size 1024M;

    server_tokens off; # 버전 숨기기 활성화

    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    charset utf-8;

    ssl_certificate /etc/letsencrypt/live/test1.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test1.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/test1.com/chain.pem; 

    ssl_dhparam /etc/nginx/ssl/dhparams.pem;

    # Enable HSTS. This forces SSL on clients that respect it, most modern browsers. The includeSubDomains flag is optional.
    add_header Strict-Transport-Security "max-age=31536000";

    # Set caches, protocols, and accepted ciphers. This config will merit an A+ SSL Labs score.
    #ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5';


    access_log /var/log/nginx/test1.com.access.log;
    error_log /var/log/nginx/test1.com.error.log warn;

    location / {
       try_files $uri $uri/ /index.php?$args;
       index index.php index.html index.htm;
    }

    location ~ /(\.|wp-config.php|readme.html|license.txt|wp-comments-post.php) { 
       deny all;
    }

    location ~ /\.(ht|git|svn) {
        deny all;
    }

    location ~ /.*\.(inc|ini|conf|cfg)$ {
        deny all;
    }

    #Block scripts from being run that shouldn’t be running
    location ~* .(pl|cgi|py|sh|lua)$ {
        return 444;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    #the site that should not be public
    location ~* wp-admin/includes { deny all; }
    location ~* wp-includes/theme-compat/ { deny all; }
    location ~* wp-includes/js/tinymce/langs/.*\.php { deny all; }
    location /wp-content/ { internal; }
    location /wp-includes/ { internal; }

    # Letsencrypt의 Webroot Plugin을 사용하기 위해서 임
    location ~ /.well-known {
    allow all;
    }

    location @wp_admin_ban {
    rewrite ^(.*) http://test1.com permanent;
    }

    # Add trailing slash to */wp-admin requests.
    rewrite /wp-admin$ $scheme://$host$uri/ permanent;

    # Aggressive caching for static files that rarely/never change
    location ~* \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|ogv|otf|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|t?gz|tif|tiff|ttf|wav|webm|wma|woff|wri|xla|xls|xlsx|xlt|xlw|zip)$ {
    expires 31536000s;
    add_header Pragma public;
    add_header Cache-Control "max-age=31536000, public";
    }

    location ~* \.(css|js)$ {
    expires 86400s; 
    access_log off;
    add_header Pragma public;
    add_header Cache-Control "max-age=86400, public";
    }

    # Add PHP handler
    location ~ [^/]\.php(/|$) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }

        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;

        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 16k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;

        # This file is present on Debian systems..
        include fastcgi_params;

    }

    # Ensure requests for pagespeed optimized resources go to the pagespeed handler
    # and no extraneous headers get set.
    location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
    add_header "" "";
    }
    location ~ "^/pagespeed_static/" { }
    location ~ "^/ngx_pagespeed_beaconCode language: PHP (php)
quot; { } } Code language: PHP (php)

권한부여하고 설정 파일에 반영이 끝나면 설정이 제대로 되었는지 테스트 해본다. 테스트 명령어는 nginx -t

# nginx -t
Code language: PHP (php)

테스트에서 아래와 같은 메세지가 나오면 성공

결과물
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Code language: PHP (php)

이렇게 성공하게 되면 nginx를 정식으로 다시 가동시킨다.

# systemctl restart nginx
Code language: PHP (php)

8.5. 워드프레스 설치를 위한 DB 생성

우선 워드프레스가 사용할 DB 생성이 필요하다. 아래는 Maria DB에 접속해서 DB를 생성하는 과정을 간략히 정리한 것이다.

MariaDB에 접속

mysql -u root -p
Code language: PHP (php)

DB 생성

CREATE DATABASE wp;
Code language: PHP (php)

DB사용자 계정 생성

CREATE USER user1@localhost;
Code language: PHP (php)

사용자 계정 패스워드 설정

SET PASSWORD FOR user1@localhost= PASSWORD('password');
Code language: PHP (php)

사용자가 wp라는 DB에 접근할 권한 부여.

GRANT ALL PRIVILEGES ON wp.* TO user1@localhost IDENTIFIED BY 'password';
Code language: PHP (php)

설정값을 적용

FLUSH PRIVILEGES;
Code language: PHP (php)

8.6. 워드프레스 파일 받아 설치하기

워드프레스 한국 버젼은 워드프레스의 공홈이라하 할 수 있는 https://ko.wordpress.org에서 다운 받을 수 있다.

워드프레스 최신 버젼을 릴리즈 하는 곳

여기에서 최신 버젼의 링크주소를 복사한다.
2017년 10월 11일 현재 최신은 4.8.2으로 링크 주소를 확인하니 아래와 같다. https://ko.wordpress.org/wordpress-4.8.2-ko_KR.tar.gz

cd /home/happist  # 설치할 디렉토리로 이동
wget https://ko.wordpress.org/wordpress-4.8.2-ko_KR.tar.gz  # 워드프레스 최신 버전의 링크주소
tar -xzf https://ko.wordpress.org/wordpress-4.8.2-ko_KR.tar.gz     # 압축을 푼다.
Code language: PHP (php)

8.7. 워드프레스 설치

워드프레스 설치파일을 /home/사용자계정/www에 올려놓았다면 인터넷상에서 사이트 주소를 치면 바로 워드프레스 설치화면으로 들어간다.
여기까지왔다면 거의 성공한 것이나 마찬가지이다.

여기서부터는 그 유명한 5분 설치가 가능하다.
기존에 준비했던 정보들을 입력하면서 진행하면 된다.

아래 설치 단계별 이미지를 순서대로 소개한다. 이를 참조하면 된다.

워드프레스에 오신 것을 환영합니다.

처음으로 나오는 화면

워드프레스 설치 시작 화면_워드프레스에 오신 것을 환영합니다.

데이타베이스 연결 설정

위 장면에서 let’s go를 누르면 아래 화면이 나온다.
여기에서 데이타베이스 연결을 위한 세팅을 한다.

  • db name
  • db user
  • 비밀번호
  • 데이타베이스 호스트 대개 그냥 localhost를 사용한다.
  • 데이타베이스 접두어, wp를 대부분 사용하는 듯
워드프레스 설치 시작 화면_데이타베이스 연결 설정

데이타베이스 설치과정 완료

데이타베이스 세팅이 완료되면 아래와 같이 설치과정을 마쳤다는 메세지가 나온다.
정말로 간단하게 설치가 끝난 것이다.

워드프레스 설치 시작 화면_데이타베이스 설치과정 완료

워드프레스 5분 설치과정에 오신 것을 환영합니다.

위에서 데이타베이스 설정이 끝나면 바로 본격적인 워드프레스 설치과정이 시작된다.
이 단계가 너무 쉽고 간단하기때문에 워드프레스에서는 5분 워드프레스 설치 과정이라고 홍보하고 있다.

여기에서는 관리자가 필요한 항목들을 입력하고 춰드프레스 설치하기를 누른다.

  • 사이트제목
  • 사용자명
  • 비밀번호
  • 이메일주소
워드프레스 설치 시작 화면_워드프레스 5분 설치과정에 오신 것을 환영합니다

워드프레스 설치 완료

그러면 몇분 걸리지 않아 워드프레스가 설치되고 대시보드 화면이 나타난다.

이제부터는 정상적으로 워드프레스로 사이트를 운영하면 된다.

워드프레스 설치성공 후 첫 시작 화면05

워드프레스 세팅

워드프레스가 설치 되었으면 몇가지 세팅 한다.

  • 먼저 고유주소를 세팅, SEO에 좋다고 누가 그래서 ID와 이름으로 고유주소를 만들었다. 이는 생각보다 기렁지고 한글 문제는 속을 썩힌다. – /%post_id%/%postname%/
  • 적절한 테마 설정
  • 테마에 따른 위젯 등 설정

참고

우버의 성장엔진은 무엇인가 By GrowthHackers

2

이 글은 과거에 작성하다 버려둔 글을 다시 꺼내어 조금 포맷을 변경하고 불필요한 내용들을 제외하고 (초기에는 영문+번역을 그대로 소개하려고 했었다.) 단순화해서 다시 포스팅 한다.

2014년 한국에도 Uber taxi가 도입되어 다른 나라들과 마찬가지로 합법 여부를 놓고 시끄러웠고, 한국에서는 최종적으로 불법이라고 결론 났다.

그리고 Uber가 철수하면서 비어있는 틈을 비집고 들어온 것이 카카오택시를 비롯한 택시앱들이다. 그래서 먼저 먼저 카카오택시 및 티맵택시와 같은 한국에 도입된 택시앱 서비스에 대한 분석을 해보았다 이는 아래를 참조해 보자

파괴적 혁신으로서 카카오택시 티맵택시 사례 – 택시앱 ‘박힌돌’ 콜택시를 걷어차다

그리고 우버에 대서 기존 자료를 중심으로 정리해 우버 사례를 소개한 적이 있다.

공유경제의 전형으로서 우버(Uber Case study)

그러다 GrowthHackers라는 곳에서 우버 사례를 분석한 내용이 있어 여기 분석을 기반으로 우번에 대해서 좀더 자세하게 살펴 보고자 한다. 여기에서는 Uber의 Business model은 무엇이고 그 성공 요인은 무엇인지를 중심으로 설명하고 있다.

  우버택시   <

급성장하는 우버의 성장 엔진은 무엇인가?

Uber — What’s Fueling Uber’s Growth Engine?

1. The Need for Uber

우버가 성공할 수 있었던 배경 또는 소비자들의 니즈는 무엇일까?

  • 과거 택시를 잡는 것은 악몽과 같다. 거리에 나가 택시가 잡힐때까지 손을 흔들어야했고 (번호를 알고 있다면) 콜택시를 부르고 20분이상 기다려야 한다. 비가 오는 날 우산을 들고 택시를 잡아 본적이 있는가?
    우버 성장엔진 Uber growth EngineUber관련이미지02

  • 택시를 타고 목적지에 도착했어도 팁을 포함한 정확한 택시비 산정에 골치를 썪여야하고 정확한 잔돈을 가지고 있지않은 기사, 출발 시 미터기를 꺾지 않은 기사 또는 신용카드기가 고장난 기사들과 협상을 해야 한다.

  • 택시 서비스를 즐겁게 이용하는 사람은 거의 없다. 단지 대안이 없어서 이용할 뿐

2. 우버에 대한 초기 반응

Uber는 2009년에 샌프란시스코에서 Luxury Car service로 시작하였고 2010년 6월 공식 서비스를 시작하였다.

지금 Uber의 가치는 $3.76B에 달한다. (이 글을 쓴 당시) 비록 회사는 2009년 설립했지만 2010년 6월까지 공식적으로 출범하지 못했다. 6개월후인 2011년 1월 3000~6000여 사용자를 확보했고 10,000 ~ 20,000탑승을 기록했다.

3. Uber의 혁신 Point

Uber는 몇가지 핵심적인 방법으로 개인 교통 수단을 완전히 변화 시켰다. 그것은 기존 택시 시스템의 문제를 완벽하게 개선한 완벽한 솔류션에 있다.

3.1. 구글맵이 설치된 스마트폰 어플

  • 가장 가까운 택시가 어디에 있는지 알수 있고
  • 구글맵에 만날 장소를 설정 할 수 있다.
  • 또한 택시 기사의 인적 사항을 (rating을 포함) 볼 수 있다.

3.2. 상황을 알려준는 전화 또는 문자 메세지

Uber 기사의 전화나 가고 있는 중이라는 메시지는 당신의 주문이 받아드려졌다고 안도하게 된다.

차가 도착하면 택시 기사는 당신의 이름을 부를 것이고 여러분은 타면 된다

3.3. App에서 설정한 카드로 자동 계산

  • 목적지에 도착하면 app이 당신의 카드에서 택시비를 charge한다.

  • 여기엔 현금을 가지고 실랑이할 필요도 없고, 거스름돈을 가지고 실랑할 필요도 없으며 영수증을 가지고 실랑이 할 필요도 없다.

  • Uber는 전통적인 택시 운송에서의 갈등 요소를 없애고 택시 이용을 광장히 즐거운 과정으로 만들었다.

3.4. 우버 운전사에 대한 이익

우버는 택시 운전사를 직접 고용하지는 않지만 그 지역에서 택시를 타려는 사람과 택시 운전사를 연결자의 역활을 한다.

  • 일을 할 수 없어 쉬고 있었던 많은 운전 기사들에게 돈을 벌 수 있는 기회를 만들었다.

  • 효율적인 연결을 통해서 우버 택시운전자는 하루 $500을 벌수 있도록 해주었는데 이는 다른 택시 운전사들이 1주일 동안 벌 수 있는 금액이라고 한다.
    우버 성장엔진 Uber growth EngineUber homepage_HER TURN TO EARN

즉 우버는 사람들이 일을 할 수 있도록 만들었고, 사람들을 제대로 연결해주어 택시운전사들이 더 많은 돈을 벌 기회를 제공했다.

Fortune, The trials of Uber

4. Uber’ Growth Engine

우버의 성장 엔진을 다시 한번 정리해 보자.
우버 사례에서 가장 중요한 것은 기존 택시 시스템의 불만, 문제점을 거의 완벽하게 해결한 서비스 솔류션에 있었다. 그런 완변란 서비스는 고객들이 전혀 기대하지 못했던 훌륭한 사용 경험을 할 수 있었고 이런 경험은 사용자를 자발적으로 서비스를 소개하는 강력한 구전 효과를 낳았다.

  • 서비스 개선을 열망하는 tech group을 target으로 이 그룹에서 지지를 이끌어내려고 노력했다.

  • 이벤트를 지원하고 Free 탑승기회를 주고 인지도를 높혔다.

  • 서비스를 시작한 샌프란시스코는 택시서비스가 나쁘기로 악명이 높은 곳이었다. 그리고 자신들의 불편을 해결해줄 새로운 서비를 찾고 있던 테키한 전문가 그룹이 많은 곳이었다. 새로운 서비스를 경험한 이들은 블로그와 쇼셜 미디어와 기타 도구를 통해 그들의 친구들에게 이 새로운 서비스를 알리면서 널리 알려졌다.

  • 이러한 서비스는 다른 도시로 빠르게 도입되면서 마찬가지로 선순환을 타면서 Uber는 지속 성장하게 된다.

이러한 우버의 성장 엔진을 도식화하면 아래 이미지와 같이 정리될 수 있다. 즉 도시 내에서 런칭 → Free 탑승 기회 제공 → (롼벽한 서비스에 기반한) 와우 사용자 경험 → 강력한 구전 효과 발생의 선순환

▽ 우버 성장 엔진 사이클

  우버 성장 엔진 사이클  <

참고

공유경제의 전형으로서 우버 사례(Uber Case study)

구매로 이어지는 온라인 리뷰 5가지 요소

2

온라인 리뷰가 판매에 어느정도 영향을 미칠까요? Northwestern University와 PowerReviews가 조사 연구한 보고서 내용이 소개되었는데요. 이 내용을 번역해 공유합니다.

5 Online Review Factors that Can Influence Conversion

1. 구매로 이어지는 온라인 리뷰 5가지 요소, 5 Online Review Factors that Can Influence Conversion

온라인 리뷰가 구매에 미치는 요소 5가지 - 고가 제품과 저가 제품의 온라인 리뷰에 따른 구매 전환 효과
고가 제품과 저가 제품의 온라인 리뷰에 따른 구매 전환 효과

마케팅 담당자들은 온라인 상 고객 리뷰가 중요하다는 것을 알고 있지만, 고객 리뷰가 최종 수익에 얼마나 영향을 주는지 알고 있을까요?

Northwestern University의 Spiegel Research Center와 온라인 고객 평점 및 리뷰 솔류션 업체인 PowerReviews는 세 회사의 고객 리뷰와 수백만 구매 데이타를 분석하여 이러한 질문에 대한 답을 풀려고 했습니다. 이 세 회사 중 하나는 고급 선물 용품 회사이고 다른 두회사는 저렴한 각겨의 소비 제품을 판매하는 회사입니다.

결과는 어떠할까요? 고급 선물 용품 쇼핑몰에서 비슷한 두가지 유형의 제품을 비교 시 리뷰가 5개인 제품의 구매 확율이 고객 리뷰가 없는 제품의 구매 확율보다 270% 높다는 것을 발견하였습니다.

여기 “온라인 리뷰가 판매에 미치는 영향”이라는 제목의 보고서 내용을 아래와 같이 정리합니다.

이 연구 보고서의 다른 주요 결과에 대한 요약은 다음과 같습니다.

1.1. 온라인 리뷰는 고가 제품 및 고관여 제품에 더 큰 영향을 미친다. Reviews have a greater influence on conversion for high-priced and high consideration products

고가 제품을 판매하는 소매 업체 데이타를 기반으로 리뷰가 있는 저가 제품 구매 전환율은 190% 상승했지만 리뷰가 있는 고각 제품 구매 전환율은 380% 증가했습니다.

가격이 구매 위험도를 증가시키는데 영향을 줄 수 있으나, 그게 유일한 요인은 아닙니다. 위 보고서에 따르면 얼마나 제품이 소비자의 정체성담고 있는지 또는 일상적인 구매 여부도 이에 포함 될 수 있습니다.

결정의 불확실성은 고객 리뷰가 가장 큰 영향을 미칠 수 있다고 Spiegel Research Center의 전무 이사인 Tom Collinger는 이야기 합니다.

Review and rating 리뷰와 평점 관리 reviews image

1.2. 부정적 리뷰가 반드시 나쁜 것은 아니다. Negative reviews aren’t necessarily a negative

높은 고객 평가를 받은 제품이 가장 높게 구매 전환된다는 말은 논리적으로 타당해 보이지만 항상 그런 것은 아닙니다.

보고서에 따르면 구매 의향은 고객 평점이 5점 만점에 4 ~ 4.7점 수준에서 최고치를 기록한다고 합니다. 고객 평점이 4,7점에서 5점사이의 제품은 믿기에는 너무 좋은 점수라는 인식을 갖게 되어 구매 의향이 떨어진다고 보고되었습니다.
다시 말해 비판적 고객 의견은 오히려 신뢰감을 줍니다.

“부정적인 고객 리뷰의 영향력은 긍정적인 리뷰보다 크다”고 Spiegel Research Center의 전무 이사인 Tom Collinger는 말합니다.

1.3. 고객 리뷰의 양이 가장 중요하지는 않다. Volume of reviews is not a main factor

연구에 따르면 고가 제품에서 구매 전환율을 올리기 위해서는 최소 5회의 고객 리뷰가 필요하며 저가 제품은 일반적으로 2~4회의 고객 리뷰가 중요한 영향을 미친다고 합니다. 그러나 아래 그래프에서 보여주듯이 더 많은 고객 리뷰가 있다고 더 많이 팔리는 것은 아닙니다.

▽ 리뷰의 양과 판매량의 상관 관계,
고객 리뷰의 양과 판매는 비례하지는 않는다.

온라인 리뷰가 구매에 미치는 요소 5가지 - 리뷰의 양과 판매량의 상관 관계

Collinger는 “리뷰의 양이 너무 많으면 고객 리뷰를 추가하기 어렵다.”고 합니다.

고가 제품 소매 업체 데이터를 기반으로 한 보고서에 따르면 거의 대부분 처음 10개 고객 리뷰에서 구매 가능성이 높아지고 처음 5개 리뷰가 가장 큰 영향을 미칩니다. (고객 리뷰가 너무 많은 경우) 앞의 10개 리뷰가 제품에 긍정적인 인식과 평가되도록 선정된 것인지는 확인할 수 없다고 지적했습니다.

1.4. 고객 리뷰의 출처가 중요하다. Source of reviews matters.

연구는 검증된 구매자와 익명의 소비자가 작성한 리뷰의 효과 차이가 있는지를 분석했습니다. 여기서 검증된 구매자란 상품을 구매한 고객으로 구매 후 리뷰를 작성해 달라는 요청은 받은 사람들이고 익명의 소비자들은 제품을 구매했지만 그들의 제품 리뷰를 직접적으로 확인할 수 없는 사람들입니다.

보고서에 따르면 검증된 구매자 리뷰는 “실질적으로 보다 더 긍정적”인 것으로 나타났습니다. 검증된 구매자의 평균 상품 평점은 5점 만점에 4.34점이었으나 익명의 소비자는 평균 3.89점을 주었습니다. 검증된 구매자들은 별 5개 즉 만점을 준 비율이 높았으며, 익명의 소비자들은 별 1개 의 가장 낮은 등급을 준 비율이 높았습니다.

▽ 검증된 구매자와 익명의 소비자간 평점 비율 차이

온라인 리뷰가 구매에 미치는 요소 5가지 - 검증된 구매자와 익명의 소비자 차이

게다가 소비자들이 검증된 구매자들의 리뷰(검증된 구매자라는 표기가 있음)를 볼때 익명의 소비자가 작성한 리뷰에 비해 15% 구매 확율이 높아진다고 합니다.

그러나 리뷰어들은 편견에 영향을 받을 수 있습니다. 검증된 구매자는 익명의 소비자보다 리뷰 작성시 장애가 적습니다. 익명의 소비자는 상품 리뷰 사이트로 이동해서 가입해 계정을 만들고 리뷰를 작성해야하지만 검증된 구매자는 구매 후 리뷰 요청 메일을 클릭하기만하면 리뷰를 작성할 수 있습니다.

따라서 연구원들은 매우 부정적인 경험을 가진 익명의 소비자들이 힘들더라도 이러한 추가 절차를 밟을 가능성이 높다는 가설을 세웠습니다. (아주 부정적인 사람들이 더 적극적으로 평가를 하고 평점을 남기므로 익명의 소비자들의 평균 평점이 낮다는 것 – 역자 주)

또한 검증된 구매자는 이메일 링트를 타고 들어와 리뷰를 작성하므로 다른 사람들의 평가나 평점을 보지 못하는 경우가 많습니다. 익명의 소비자들은 다른 사람의 평가나 평점을 봅니다.

결론적으로 익명의 소비자들은 다른 사람들의 평가나 평점에 영향을 받을 수 있다고 합니다.

1.5. 사용자 경험이 가장 중요하다. Experience trumps all

고객 리뷰가 높은 영향을 발휘 하려면 최적의 제품과 쇼핑 경험을 제공하는 것입니다.
제대로 된 제품과 쇼핑 및 구매 경험을 최적으로 제공한다면 나머지는 저절로 풀리 것이다“고 Colliner는 이야기 합니다.

[워드프레스 Tips] 워드프레스에서 최종 업데이트 날짜 표시 하기

워드프레스 테마로 newspaper를 사용하면서 업데이트 일정을 표시하는 방법을 포스팅했었습니다.

[워드프레스 Tips] 워드프레스 Newspaper 테마에서 최근 업데이트 날짜 표시하기

테마를 Grace나 Basic 등 보다 가벼운 테마로 바꾸면서 공통적 Newspaper에서 적용했던 방법을 응용하려 했더니 Custom code를 찾는 게 더 힘들더군요. 그래서 일반 원드프레스 테마에서 적용할 수 있는 방법을 찾아 봤습니다.

구글링하니 이미 관련 좋은 팁들이 있어서 이를 간단히 응용해 적용했습니다.

테마 function.php에 코드 추가

이를 위해서는 function.php에 관련 코드를 추가하거나 Custom code를 변경하는 방법이 있는데 위에서도 언급했다시피 테마마다 날짜 표기하는 Custom code 들이 있는 곳이 다릅니다.

가벼운 테마라고 적용한 Basic 테마는 도대체 어디에 날짜관련 Custom code가 있는지 한참 찾다가 포기했습니다.
그리고 공통저그로 적용할 수 있는 function.php에 코드 추가하기로 했습니다.

테마의 function.php에 아래 코드를 추가합니다.

function wpb_last_updated_date( $content ) {
$u_time = get_the_time('U'); 
$u_modified_time = get_the_modified_time('U'); 
if ($u_modified_time >= $u_time + 86400) { 
$updated_date = get_the_modified_time('Y-M-D');
$updated_time = get_the_modified_time('a h:i');
$custom_content .= '<p class="last-updated">Last updated on '. $updated_date . ' at '. $updated_time .'</p>';  
} 

    $custom_content .= $content;
    return $custom_content;
}
add_filter( 'the_content', 'wpb_last_updated_date' );

업데이트 일정 표기 방법 적용 결과

위 코드에서 취향에 따라 날짜만 표시하고 싶다면 $updated_time 부분 코드를 지우거나 작동하지 않토록 마킹하면 됩니다.

$updated_date = get_the_modified_time('Y-m-d');
/* $updated_time = get_the_modified_time('a h:i'); */
$custom_content .= '<p class="last-updated">Last updated on '. $updated_date . ' </p>';

Custom CSS에서 스타일을 지정

그냥 두어도 되나 업데이트 일자를 강조하려면 custom css 코드를 추가합니다.

그리고 function.php에서 문구를 한글로 변경합니다. 오늘이 한글날이이므로.

hackYa님의 사이트가 이런식으로 적용되어 있는데요. 최종수정일을 강조해주니 보기가 좋고 더 신뢰가 되더군요.. 문구도 비슷하게 따왔습니다.

저는 아래와 같이 코드를 넣었습니다.

.last-updated {
    font-size: 1.2em;
    font-style:italic;
    color: #26a69a;
}

▽ 최종 적용 결과

업데이트 일정 표기 방법 적용 및 Custom css 적용 결과

이 글은 아래 글을 토대로 응용하면서 작성하였습니다.

How to Display the Last Updated Date of Your Posts in WordPress

도브(Dove) 인종 차별 광고와 브랜드 리스크 관리

지난 주에 도브는 페이스북에 3초짜리 짧은 광고를 올렸는데요. 이는 도브를 사용하면 흑인도 백인으로 바뀐다는 내용으로 거센 인종 차별 논란을 불러 일으켰습니다.

1. 도브의 페이스북 광고

이미 삭제되어 없어졌지만 화면 갈무리로 인터넷에 공유되고 있습니다.

광고는 3초짜리 GIF광고로 도브 제품옆의 흑인 여성이 갈색 티셔츠를 벗자 핑크 티셔츠를 입은 백인 여성으로 변한다는 내용인데요. 이는 도브 제품을 사용하면 흑인이 백인으로 변할정도로 완벽하게 깨끗해진다는 것을 의미합니다.

도브의 인종차별적인 광고 2017년 10월 Doe racism advert

흑인이 백으로 변한다는 것은 흑인보다 백인이 더 선망되고 우월하다는 것을 나타내는 인종주의적 표현이라는 지적이 일면서 인터넷을 달구고 있습니다.

▽ 작가인 Habeeb Akande의 도브 광고 관련 트윗,
많은 매체에서 이 트윗을 인용하고 있다.

결국 도브는 페이스북 광고를 바로 내렸고 바로 사과했지만이 광고 화면이 갈무리되어 빠른 속도로 퍼지면서 도브 브랜드 이미지 실추를 가속화 하고 있습니다.

▽ 인종차별적 광고에 대한 도브의 페이스북 사과

2. 도브의 반응에 대한 비판이 커지다.

도브가 재빨리 광고를 내리고 페이스북에서 사과했지만 도브의 대처에 대해서 비판하는 목소리가 높습니다. 도브의 대처는 안일하고 철저핮 못하다는 것입니다.

이는 해당 제품이 여전히 판매되고 있다는 불만과 책임자 처벌이 미흡하다는 인식에서 기인하고 있습니다.

CNN 정치 평론가인 Keith Boykin은 왜 이런 인종 차별적인 제품이 여전히 판매되고 있느냐며 비판하는 트윗을 올렸습니다. 이러한 비판에 동조하는 의견들이 점차 힘을 얻고 있습니다.

또한 이러한 광고를 기획하고 의사 결정한 사람이 누구인지 책임을 져야 한다는 의견도 있습니다. 단순하게 페이스북 사과로 끝날 문제는 아니라는 것이지요.

이러한 의견은 배우이자 행동주의자인 Gabrielle Union의 트윗에서도 나타납니다.

앞으로 절대 도브 제품을 사지 않겠다는 도브 보이코트 움직이도 나타나고 있습니다.

▽ 저널리스트 Flora Garamvolgyi의 트윗
앞으로는 도브 제품을 사지 않겠다고..

3. 도브의 과거 인종차별광고가 주복받고 혐의를 굳히다.

그런데 이번 도브의 인종차별적 광고에 대해서 이전에도 많은 인종 차별적 광고가 집행되었다면 이번 광고는 일시적인 실수가 아니라 도브 자체의 인종주의적 태도가 문제라는 지적일 일고 있습니다.

이렇게 과거 광고와 연계되면서 도브의 브랜드 이미지가 극도도 나빠지는 조짐을 보여주고 있습니다. 그동안 도브가 TV CF등을 통해서 쌓아왔던 이미지가 인종차별이라는 지적을 받으면서 브랜드 위기가 오고 있는 것입니다.

그동안 도브가 쌓아온 브랜드 파워가 있기 때문에 이것으로 인해 도브가 큰 타격을 받지는 않을 수도 있습니다. 그러나 계속 이런 이슈를 만들어 낸다는 것은 장기적인 브랜드 전략에는 아주 부정적으로작용할 것입니다.

아래는 타임에서 도브 관련 광고와 기존에도 이슈되었던 광고를 묶어서 비판하고 있는 내용인데요. 전체적으로 잘 정리가 되어 있습니다.

Time, Dove Apologizes After Body Wash Ad Is Slammed For Being Racist

▽ Time에서 공개한 이번 도브 광고 및 이전의 인종 차별적 광고.

CNN 정치 평론가인 Keith Boykin는 도브의 이전 인종 차별적 광고를 투윗하면 한번은 의심읗 하지만 두번째는 분명한 범죄 행위라고 비판하고 있습니다.

▽ 두번째 인종차별적 광고는 범죄라는 Keith Boykin의 트윗

역사가인 Francois Soyer는 도브의 안종차별적인 광고가 오랜 역사를 가지고 있다고 비판하고 있습니다.

▽ 역사가인 Francois Soyer의 도브의 오래된 인종차별 광고 트윗

이러한 가운데 뉴욕타임즈도 인텔의 2007년 광고, 도브이 2011년 광고, Popchips의 2012년 광고, Qiaobi의 2016년 광고, 니베아의 2017년 광고 등 기존 인종 차별적 광고들을 소개하면서 도브의 광고를 비판하고 있습니다.

New York Times, Dove Drops Ad After It Draws Criticism for Being Racist In a Facebook ad for Dove body wash, a black woman removes her brown shirt and — voilà! Underneath is a white woman in a light shirt.

2017년 4월 논란이 되었던 도브의 홍보 영상
도브 영국 본사는 Limited Ediion을 출시하면서 길고 홀쭉하거나 작고 둥그런 제품 용기를 여럿 세워두고 “아름다움은 모든 모양과 크기에서 온다”는 글귀를 실은 온라인 광고를 냈다가 여성을 몸매로만 평가한다는 지적을 받았습니다.

한겨레신문, ‘도브’로 씻으면 흑인이 백인으로 바뀐다고?
도브’가 지난주 공개한 온라인 광고
논란되자 삭제했지만 갈무리 돼 퍼져
일부 누리꾼들 불매운동 뜻까지 보여
도브 “일어나지 않았어야 하는 일” 사과
NYT “수많은 인종차별적 광고 떠올리게 해”

▽ 2017년 4월 도브의 문제적 홍보 영상

▽ 도브의 문제적 홍보 영상을 비판한 테크 인사이더 영상

4. 마치며

어쩌면 그동안 논란이 되었던 도브의 광곧ㄹ이 전부 인종차별적이라고 단정할 수는 없을 것입니다.

인존차별적 광고로 많이 인용되는 2011년 광고에 대해서 인종차별적 광고냐에 대해서는 많은 논란 있는 것은 사실입니다.
아래는 혐의는 있지만 인종차별적 광고는 아니다라는 moneyWatch의 기사 입니다.

Money watch, This Dove Ad Isn’t Racist — but Unilever’s Overseas Skin-Lightening Business Is

▽ 2011년 도브의 인쇄 광고,
인종차별적 광고로 많이 언급되나 논란은 있다.

2011년 도브의 인종차별적인 광고 사례 06

사실 도브뿐만이 아나리 경쟁사인 유니레버도 이런 류의 인종차별적 광고가 횡횡하고 있습니다. 근본적으로 사람들 마음속에 백인 피부색에 대한 우월적 인식이 피부를 다루는 화장품이나 생활용품업계에서는 만연되어 있고 이러한 생각들이 불쑥 불쑥 광고로 표출되면서 문제를일으키고 있는 것입니다,

누구의 지적대로 전 세계 사람들의 인종에 대한 생각, 피부에 대한 생각이 보다 이상에 가까워지면 이런 문제들은 많이 없지지 않을까 싶습니다.

그리고 도브로서는 이런 광고를 사소하게 처리하지말고 인종차별에 대해서는 분명히 대응한다는 선언과 행동으로 비판자들과 브랜드에 실망한 사람들을 설득할 수 있는 과감한 정책이 필요하다는 생각입니다.

그렇지만 도브는 안이하게 대처하고 있고 이는 향후 브랜드 자산에 악영향을 미칠것으로 보입니다.

스마트홈 장악에 사활을 건 아마존 새로운 에코 시리즈 by TechCrunch

0

아마존의 대대적인 에코 신제품을 출시가 의미하는 전략적 함의에 대해서 나름 4가지로 정리해 포스팅을 했습니다.

Happist, 아마존 에코 신제품으로 읽어보는 아마존의 스마트홈 전략

이후 에코 신제품에 대한 테크 크런치의 분석 기사가 있서 소개해 봅니다. 제목을 어떻게 잡아야 할지 혼란스럽지만 “아마존 에코 시리즈의 확대 전략의 영민함” 정도로 해석해 봅니다.

The brilliance of Amazon’s Echo sh*tshow

The brilliance of Amazon’s Echo sh*tshow

파편화 또는 유연성이라하든 우리가 선택할 수 있는 아마존 에코 디바이스가 7개나 있습니다. (에코 버트(Echo Button)은 에코 제품이라 부르기 애매해서인지 라인업 리스트에서 뺀 것 같음 – 역자 주) 오늘 아마존은 새로운 스마트홈 디바이스들을 출시해 생각할 수 있는 모든 사용자 시니리오와 설치 공간을 커버할 수 있습니다. 이로 인해 경쟁사인 구글 홈은 제한된 솔류션처럼 보입니다.

이제 오디오 애호가를 위한 에코가 있습니다. 패셔니스타를 위한 에코 룩(Echo Look)이 있습니다. 저렴하게 상요하고 싶은 사람들을 위해 에코 닷(Echo Dot)이 있습니다. 스마트홈을 위해서는 에코 플러스(Echo Plus)가 있습니다. 조부모님과 하상 통화를 위한 에코 쇼(Echo show)가 있습니다. 집 전화를 싫어하는 사람에겐 에코 커넥트(Echo Connect)가 있습니다. 그리고 아침에 일찍 일어나는 사람을 위해서 에코 스팟(Echo Spot)이 있습니다.


Amazon Echo Family

이러한 제품 라인업은 어떤이에게는 환상을 주고 어떤이에게는 혼란을 줄 수 있습니다. 그러나 이러한 라인업에는 몇가지 똑똑한전략이 숨어 있습니다.

1. 테스트

스마트 홈은 여전히 초기 단계로 아무도 사용자들이 정확히 무엇을 원하는지, 실제로 무엇을 사용하는지 알지 못합니다. 다양한 제품을 출시해 반응을 시험해 봄으로서 아마존은 시장을 테스트해보고 아마존 개발 자원을 어디에 투입해야 할지 파악할 수 있습니다.

2. 알렉사의 제도화

정말로 아마존의 목적은 가정에 대한 기본 운영체제로 만드는 것이지 많이 파는 것이 아닙니다. 7개의 아마존 라인업으로 모든 주거 유형이나 예산 상황을 감안한 스마트홈을 시작하거나 보강할 수 있다면 아마존은 스마트홈 사업에 쉽게 안착할 수 있습니다.

아마존 알렉사에 익숙해지면 구글과 같은 경쟁사 생태계로 이탈할 가능성이 낮아집니다. 그 이후 아마존은 업데이트와 새로운 디바이스로 사용자의 돈을 가져갈 수 있으며 배송이 빠르고 무료인 아마존 프라임 멤버쉽으로 더욱 단단히 (아마존 생태계에) 묶어 버릴 수 있습니다.

▽ 아마존 에코 제품 라인업 및 사양

아마존 에코 라인업 에코 제품 Amazon Echo product List

3. 스마트홈 허브로의 역할

필립스 휴 전구와 같은 스마트홈 장치에서 가장 귀찮은 점 중 하나는 각 개별 장치를 연결할 자체 허브가 필요하다는 것입니다. 만약 당신이 다른 브랜드를 많이 소유하고 있다면 연견하기가 애매래집니다. 에코 플러스(Echo Plus)는 100여개 스마트홈 디바이스를 위한 통합 허브 역할을 합니다. 이러한 스마트홈 디바이스 중 하나를 구입하게 되면 아마존 생태계에 갇히게 됩니다. 아마존은 앞으로 이 허브 기능을 다른 Echo 디바이스에도 적용할 것으로 보입니다.

아마존 에코 스마트홈 디바이스 컨트롤 alexa-cp-smarthome._V527808781_

4. 유선전화의 대체

아마존은 파이어폰을 단종했지만, 컴퓨터를 통한 음성 전화의 중요성을 알고 있습니다. 그래서 영상통화와 알람 시계 기능이 있는 에코 스파(Echo Spot)과 에코를 유선 전화와 연결시켜주는 에코 커넥트(Echo Connect)를 출시했습니다.

▽ 에코 커넥트(Echo Connect)와 유선전화를 연결하는 모습

에코 커넥트(Echo Connect)와 유선전화를 연결하는 모습

▽ 에코 커넥트(Echo Connect) 사용 시나리오

에코 커넥트(Echo Connect) 사용 시나리오

에코 쇼(Echo Show)에 음성 전화 통화만 추가된 게 아닙니다. 연락처 동기화를 사용해 사람 이름으로 전화를 걸 수 있습니다. 현재 미국과 멕시코, 캐나다로 거는 전화는 무료로 아마존은 더 많은 지역으로 확대 및 자체 전화 서비스를 제공 할 예정입니다. 그리고 Alexa 통신 API 확장으로 개발자는 Echo에 음성 및 메시징 기능을 구축 할 수 있습니다. 유선 전화는 우리 가정에서 쓰이는 가장 오래된 기술중의 하나로 아마존은 이런 오랜된 것들을 쉽게 사용하게 하고 전문성을 부여하고 있습니다.

▽ 에코 스팟(Echo Spot) 시나리오, 화상 통화

에코 스팟(Echo Spot) 시나리오 화상 통화 Video Call 02

마치며

정말로 놀라운 점은 아마존이 스마트홈 공간에서 너무 빠르게 움직이고 있어 아마존의 많은 제품 출시에 대한 뉴스가 새어 나오지 않았다는 것입니다. 구글과 애플은 스마트홈을 부가적인 사업이나 음성 , IoT를 위한 좋은 토대로만 여길 뿐입니다. 그러나 아마존은 스마트홈을 회사의 현실적인 전환점으로 여기고, 앞서 나갈 수 있도록 모든 자원을 쏟아 붓고 있습니다.

제프 베조스(Jeff Bezos)는 스마트폰 비지니스를 놓쳤다는 것을 알고 있습니다. 많은 사람들이 매년 iPhone에 어마어마한 돈을 지출하는 것을 고려하면 안타까운 일입니다. 그래서 집밖에서 경쟁할 수 없다면(집 밖은 스마트폰을 기본으로 이루어지므로 아마존은 당장 여기에 참입할 수 없다. – 역자 주) 아마존은 집안에서 수익 창출의 기회를 만들기 위해 전력을 다할 것입니다.

아마존 에코 신제품으로 읽어보는 아마존의 스마트홈 전략

0

얼마전 아마존은 에코 신제품을 발표했는데요. 하나씩 발표하던 예전과 달리 한꺼번에 4개에 달하는 많은 디바이스들을 선보였습니다. 조금 시간이 지났지만 이번에 발표된 신제품들을 살펴보면서 아마존의 전략 방향에 대해서 짚어보겠습니다.

1. 간단히 정리해 본 에코 라인업

이번에 발표된 4개의 디바이스를 포함해 에코 제품 리스트 및 제 사양을 간략히 표로 정리해 보았습니다. 연도별로 다시 정리해 보면

  • 2014년 11월 최초로 아마존 에코 출시
  • 2015년 6월 에코닷 출시
  • 2017년 4월 에코룩(Echo Look) 출시
  • 2017년 6월 에코쇼(Echo Show) 출시
  • 2017년 9월 에코 플러스(Echo Plus), 에코 스팟(Echo Spot), 에코 커넥트(Echo Connect), 에코 버튼(Echo Button) 발표

이를 보면 2017년 아마존은 에코관련 사업의 자신을 가지고 엄청나게 밀어 부치고 있습니다. 8개의 제품중에서 2017년에만 2가지를 출시했고 4가지를 더 출시하겠다고 발표한 상황입니다.

또한 굉장히 다양한 상황에서 사용할 수 있는 제품들로 라인업을 넓히고 있는데요. 패션 의류와 관련이 높은 에코 룩을 비롯해 보안 카메라 모니터링이 가능한 에코 쇼, 알람 시계 역활을 하면서 비디오, 오디오 통화가 가능한 에코 스팟, 스마트홈 허브를 내장하고 성능을 향상시킨 에코 플러스(Echo Plus) 등등 집안에서 일어나는 많은 상황들을 커버해가고 있습니다.

가격도 7” LCD가 적용된 에코 쇼만 230$로 200$이 넘지 대부분 100$대에 구입할 수 있고 굉장히 다양한 프로모션을 통해서 큰 부담없이 구입할 수 있도록 가격을 설정해 놓고 있습니다.

▽ 아마존 에코 제품 라인업 및 사양

아마존 에코 라인업 에코 제품 Amazon Echo product List

2. 에코 신제품 특징

그러면 아마존 전체 전략을 살펴보기 전에 이번에 발표한 에코 신제품들의 특징을 좀더 자세히 살펴보겠습니다.

2.1. 에코 플러스(Echo Plus)

에코 플러스(Echo Plus)에 대해 설명한 유튜브 동영상인데요. 이를 보면 에코 플러스(Echo Plus)로 할 수 있는 다양한 시나리오를 볼 수 있습니다.

이 에코 플러스(Echo Plus)의 특징은 빌트인 스마트홈 허브를 내장하고 있어서 다양한 스마트 제품들을 연결하고 제어할 수 있습니다. 기존 삼성 SmartThings나 Nest와 같은 스마트홈 허브를 아마존 에코가 대체하고 스마트홈을 장악하겠다는 의지를 분명히 한 제품으로 보입니다.

이러한 전략에 에코 플러스(Echo Plus)에는 스마트홈 디바이스의 대표격인 필립스 휴 하나를 기본으로 제공합니다.

▽ 에코 플러스(Echo Plus)와 필리스 휴

에코 플러스(Echo Plus)와 필리스 휴

에코 플러스(Echo Plus)는

  • 3가지 컬러 모델
  • 360도 오디오를 적용해 모든 방향에서 풍부한 사운드 감상 가능
  • 빌트인 스마트홈 허브로 스마트홈 디바이스 연결 및 제어
  • 가격 $149

에코 플러스(Echo Plus) 구조도 02

아마존 에코 플러스 Amazon Echo Plus 라이프 스타일 이미지

2.2. 에코 스팟(Echo Spot)

에코 스팟(Echo Spot)은 상당히 흥미로운 제품인데요. 2.5” LCD가 적용되어 에코와 에코 쇼가 결합된 형태의 기기라고 할 수 있습니다.

에코가 할 수 있는 모든 것을 할 수 있고, 2.5” LCD를 통해서 비디오콜을 할 수 있고 아마존 프라임 비디오 영화를 볼 수도 있고(이 작은 화면으로 영화를 보는것은 조금 그렇겠죠. 대형 화면 달린 디바이스가 넘치는 세상이니), 메세지를 확인할 수 있으며 시계나 사진을 보는 디바이스로 활용될 수도 있습니다.

The Verge에서 소개하는 에코 스팟(Echo Spot)입니다. 대략 제품의 특징을 알 수 있습니다.

아래 이미지로 살펴보는 에코 스팟(Echo Spot)를 활용 시나리오입니다.

▽ 에코 스팟(Echo Spot) 시나리오, 뮤직
노래를 들려주고 가사를 보여주고

에코 스팟(Echo Spot)  시나리오 노래를 들려주고 가사를 보여주고

▽ 에코 스팟(Echo Spot) 시나리오, 시계
시간을 알려주고 알람을 주고

에코 스팟(Echo Spot) 시나리오 시계

▽ 에코 스팟(Echo Spot) 시나리오, 도어락 연동
스마트 도어락과 연동해 누가 왔는지 알 수 있고 열어 줄 수도 있고

에코 스팟(Echo Spot) 시나리오 도어락 연동

▽ 에코 스팟(Echo Spot) 시나리오, 비디오 브리핑오

에코 스팟(Echo Spot) 시나리오 아마존 프라임 비디오

▽ 에코 스팟(Echo Spot) 시나리오, 베이비 모니터링

에코 스팟(Echo Spot) 시나리오 베이비 모니터링

▽ 에코 스팟(Echo Spot) 시나리오, 화상 통화

에코 스팟(Echo Spot) 시나리오 화상 통화 Video Call 02

2.3. 에코 버튼(Echo Button)

아직 그 정체가 명확히 밝혀지지는 않았지만 알렉사에 호환되는 게임에 적용되는 디바이스라고 합니다. 알렉사ㅘ 퀴즈를 풀거나 보드게임을 하거니 여러가지 게임 용도로 활용될 것으로 예상되는데요.

아마존 알렉사와 연동되는 스킬 중 에코 버튼(Echo Button)을 활용한 스킬들이 등장하면서 알렉사 활용 범위를 게임가지 넓혀보겠다는 아마존의 의도가 아닐까 싶습니다.

아래 cnet 동영상을 보면서 이해를 높여 보는게 좋을 것 같습니다.

▽ 에코 버튼(Echo Button) 이미지

아마존 에코 버튼 Amazon Echo Button

▽ 아마존에서 제공한 에코 버튼(Echo Button)를 활용해 게임을 즐기는 이미지

에코 버튼(Echo Button) amazon_echo_buttons_thumb800

에코 버튼(Echo Button) amazon_echo_buttons_thumb800

에코 버튼(Echo Button) amazon_echo_buttons_thumb800

2.4. 에코 커넥트(Echo Connect)

에코 커넥트(Echo Connect)는 유선전화와 에코는 연결시켜주는 장치입니다.

에코 커넥트(Echo Connect)

여러가지 에코 기기들은 에코 커넥트(Echo Connect)로 유선 전화에 연결한 후 알렉사를 통해 음성으로 친구에게 전화를 할 수 있다고 합니다.

▽ 에코 커넥트(Echo Connect)와 유선전화를 연결하는 모습

에코 커넥트(Echo Connect)와 유선전화를 연결하는 모습

▽ 에코 커넥트(Echo Connect) 사용 시나리오

에코 커넥트(Echo Connect) 사용 시나리오

아마존 에코 제품들이 전부 스피커가 있기 때문에 유선전화와 연결해 에코를 스피커폰으로 활용 가능한 것인데요. 아마존의 전략이 집안 구석구석에 아마존 에코로 채우겟다는 전략이므로 이 에코 커넥트(Echo Connect)가 있다면 집안 어디에서나 쉽게 알렉사를 통해서 전화 통화가 가능할 것으로 아마존은 기대하고 있습니다.

아래는 아마존 공식 에코 커넥트(Echo Connect) 설명 영상입니다.

에코 커넥트(Echo Connect) 사양

3. 아마존의 전략은 무엇일까?

그러면 이렇게 미친듯이 새로운 제품을 내놓는 아마존의 전략은 무엇일까요? 어떤 의미를 가지고 있을까요?

이를 간단하게 아래처럼 4가지로 정리해 보았습니다.

첫째, 아마존 에코는 스마트한 음성 비서에서 시작해 이제는 가정의 모든 활동 영역을 커버하는 알렉사 음성 서비스 플랫폼 체계를 갖추게 되었습니다.

에코의 다양한 디바이스들은 가정에서 일어나는 거의 모든 사용 시나리오를 커버하는 알렉사 음성 서비스의 프론트 엔드(front end) 역활을 하고 있습니다. 알렉사는 이러한 에코의 입력을 기반으로 백 엔드(back end)라 할 수 있는 아마존 웹 서비스와 연결해 알렉사 음성 서비스 플랫폼을 완성해 가고 있는 것으로 보입니다.

아마존 에코 amazon-echo 02

둘째, 전방위적 리인업 구축은 미래 스마트홈 선점의 중요한 계기를 만들고 있습니다. 에코 플러스(Echo Plus)에 스마트홈 허브를 내장함으로써 기존 삼성 SmartThings나 (구) 구글 Nest가 추구했던 스마트홈 허브 전략을 다양한 에코 디바이스를 기반으로한 알렉사 음성 서비스 플랫폼과 연계함으로써 한차원 높은 서비스를 제공하고, 스마트홈 부분을 리딩할 수 있는 준비를 갖추고 있습니다.

이는 에코 스팟(Echo Spot)에서 베이비 모니터링, 도어락 연동 시나리오 그리고 에코 룩에서 제안한 각존 보안 서비스 모니터링 기능 등이 그러한 것입니다.

아마존은 집안 내 언제 어디서나 알렉사 음성 서비스 플랫폼에 접속하고 모니터링 할 수 있도록 제안하면서 스마트홈에 성큼 다가가는 모습을 보여주고 있습니다.

아마존 에코 스마트홈 wink+Amazon Echo

셋째, 집안 내 언제 어디서나 활용할 수 있는 다양한 에코 디바이스 기반한 알렉사 음성 서비스 플랫폼은 아마존 이커머스 사업을 강력하게 지원해 줄 수 있습니다.
이미 에코 룩(Echo Look)을 통해서 패션 비지니스와 연계 가능성을 타진하고 있으며, 에코 스팟(Echo Spot)은 2.5” LCD를 통한 다양한 사용시나리오를 제안하면서 동시에 히든 카메라를 내장해서 향후 수면 모니터링 가능성을 열어놓아 핼쓰케어 부분까지 확장할 수 있는 가능성도 있습니다.

아마존 에코 amazon-echo-shopping

이렇게 다양한 디바이스에서 다양한 사용 시나리오는 사용자들의 풍부한 사용 데이타를 얻을 수 있도록 해주므로 아마존은 이런 강력한 빅데이타로 이커머스 등 관련 사업 경쟁력을 더욱 강화할 수 있을 것입니다.

이에 대해서 에디슨 투자 연구소 애널리스트인 리차드 윈저의 이야기에 주목할 필요가 있습니다.

Amazon is aggressively compensating for the lack of Alexa on smartphones by effectively giving the devices away and pushing e-commerce as hard as it can. A land grab strategy makes complete sense because the more Amazon can drive Alexa usage, the more data it will generate and the better it can become. Usage is the key to making all digital assistants better and this is the one area where Amazon has huge ground to make up compared to Google.

넷째, 이러한 아마존의 전략 방향은 아마존의 전통적인 강력한 침투 가격 전략에 의해 뒷받침되고 있습니다. 위에서도 지적했듯이 아마존 에코 디바이스들은 $20 ~ $230 사이에 있으며 이 조차 많은 경우 강력한 가격 프로모션에 따라 더 한층 매력적인 가격으로 제공되고 있습니다.

에코 가격은 2014년 출시 시 $199에서 시작했지만 2017년 9월 에코 뉴버젼을 출시하면서 $99로 조정되었습니다. 이보다 훨씬 진화된 기능을 가진(예를 들어 스마트홈 허브 기는 채용) 에코 플러스(Echo plus) 가격이 $149로 책정되었습니다.

▽ 2017년 8월 아마존은 홀푸드를 인수한 후 홀푸드에서 에코를 $179에서 $99로 대폭 낮추어 판매 했다.
Jason Del Rey이 홀푸드 프로모션을 트윗한 내용

아마존은 진입하는 시장마다 최소 마진 및 규모의 경제를 기반으로 강력한 가격 드라이브 전략을 수행해 왔습니다.

  • 1995년 온라인 서점으로 시작한 아마존은 오프라인 서점들이 25구너을 판매했을 시 공간 제약이 없는 온라인 서점 특성으로 250만권을 판매하고 매장 운영 비용이 없는 점을 이용해 최대 40% 저렴하게 가격 전쟁을 시작했고 결국 반스앤노블같은 거인을 무너뜨릴 수 있었습니다.
  • 1988년 DVD 판매를 시작하면서 전 제품 50% 할인을 주도하면서 당시 온라인 판매 1위였던 DVD 엠파이어(Empire)를 무너뜨렸습니다.

TTimes, 아마존 가격전쟁 잔혹사를 살펴본다.

이처럼 아마존은 손해를 감수하고 낮은 가격으로 사용 고객을 확보하고, 고객이 많아지면 축적된 데이타를 기반으로 더 나은 사용 경험을 제공하고 , 더 많은 고객은 물류 배송 및 서비스에서 규모의 경제를 달성할 수 있어 이를 이익으로 환원하지 않고 더 가격을 내려 시장을 학보하는 전략을 취했습니다.

에코를 기반으로한 알렉사 음성 서비스 전략도 이런 아마존의 가격 전략에서 크게 벗어나지 않습니다. 상상할 수 없는 낮은 가격($199)으로 시장에 진입했고 시간이 흘러 생긴 경쟁력(규모의 경제든 다른 오인으로든)을 기반으로 $99까지 Tag price를 떨어뜨렸습니다. 여기레 프로모션이 진행되면 아주 저렴한 가격으로 아마존 에코를 구입할 수 있게 되죠.

3. 마치며

이상으로 간단히 이번에 아마존의 대대적인 에코 관련 신제품에서 읽을 수 있는 전략에 대해서 개인적인 생각을 정리해 보았습니다.

아마존의 전통적 전략대로 매력적인 가격 전략 그리고 끊임없는 새롭고 폭넓은 사용 경험 제안으로 통해서 알렉사 음성 서빗 플랫폼을 완성해 가고 있다는 생각입니다.

현재 기술적인 완성도는 구글이 더 뛰어나지만 먼저 시작해축적한 다양한 사용자 데이타 및 다양한 사용 시나리오를 대비한 라인업 구축이 스마트홈과 음성서비스 플랫폼 전반에 걸쳐 아마존의 우위를 점치게 만들고 있습니다.

무려 8가지나 되는 에코 제품들이 시장에서 어떠한 반응을 얻을지, 어떤 제품의 어떤 사용 시나리오가 호응을 얻을 지 향후 스마트홈 또는 음성 서비스에 관심이 있다면 주시해봐야할 포인트인것 같습니다.

4. 추가 읽을꺼리

아마존 에코 관련해 다음 글들도 참고해 보세요.

터치스크린 달린 아마존 에코의 비지니스 가능성을 생각해 본다.

아마존 에코 사용자들은 에코를 어떻게 사용하고 있을까?

스마트 스피커(음성 AI) 사용자 행태 조사 결과 by NPR & Edison Research

브랜드 마케팅의 차세대 주자, 음성 AI에 대해 알아야 할 모든 것

새로운 생태계를 만들고 있는 아마존 알렉사 스킬(Skills) 10,000개 돌파의 의미 그리고 향후 전망

스마트홈 시장에서 애플과 구글을 제치고 아마존 알렉사가 선두를 달리다

[Tips] 본고딕(노토산스CJK) 경량화 버젼 적용법

4

속도를 위해서 테마를 자주 바꾸다보니 폰트 적용 문제에 대해서 다시 한번 뒤돌아보게 되었습니다.

그동안 속도를 중시해서 사용자 PC에 설치된 시스템폰트를 적용토록 설계하였으나 이는 브라우저마다 다른 모습으로 보여지고 생각만큼 마음에 들지 않았습니다. 그래서 속도와 디자인을 모두 고려한 방법을 고민했습니다.

폰트 적용에 대한 전반적인 내용은 이전 정리했던 포스팅을 조금업데이트 했습니다.

[Tips]나눔고딕을 가장 효율적으로 적용하는 방법

1. 어떤 폰트를 적용할 것인가?

오랬동안 나눔계열의 폰트를 사용했는데요. 이번에는 2014년 발표이후 많이 적용되는 본고딕을 적용해 보기로 했습니다.

나눔고딕체

나눔고딕체는 2008년 한글날을 맞아 발표된 폰트로 거의 10년이 되어가네요. 상용이 아닌 누구나 쓸 수 있도록 배포되어 초기에 상당히 많은 인기르 끌었습니다. 이후에는 다은 다양한 폰트들이 출시되면서 주춤한 상태이긴 합니다.

 나눔고딕체

나눔바른고딕체

나룸바른고딕은 2013년 한글날을 맞아 발표한 모바일 가독성을 강화한 폰트죠. 상당히 미려한 폰트로 나눔고딕의 아쉬웠던 부분을 어느 정도 커버했다는 평가를 받았고 오늘날에도 여전히 인기있는 폰트입니다.

 나눔고딕체

본고딕(노토산스CJK)

본고딕은 2014년 7월 16일 발표되었는데요. 구글과 어도비가 아시아에서 표준으로 삼을만한 폰트를 만들기위해 한국어, 일본어,중국어 폰트를 3년에 걸쳐 만들었습니다.

아래는 어도비에서 설명하고 있는 본고딕체에 대한 설명입니다.

본고딕(Source Han Sans) 소개: 오픈 소스 한중일 통합 서체

글꼴이름에 대해서는 조금 혼선이 있는데요. 어도비에서는 본고딕(Source Han Sans)이라고 부르고 구글에서는 노토산스CJK라고 부릅니다. 여차하면 서로 다른 폰트라고 이애할 수도 있지만 사실은 같은 폰트를 서로 달리 부르고 있답니다.

본고딕체 노토산스CJK02

본고딕(Source Han Sans)은 하나의 서체로 한국어, 일본어, 중국어 번체 및 간체를 모두 지원하고 있습니다. 이 서체에는 총 65,535개의 글리프(OpenType 포맷으로 지원되는 최대 글리프 수)가 포함되어 있다고 합니다.

한국어 폰트 제작에는 한글 서체 제작으로 유명한 산돌커뮤니케이션이 참여해서 만들었습니다. 네이버에서 발표한 나눔 바른 글꼴은 4가지 굵기를 제공하는데 반해서 본고딕은 7가지 두께를 지원해서 보다 다양한 폰트를 사용할 수 있습니다.

본고딕체 경량화 버젼

사실 본고딕체는 용량이 아주 큽니다. 우선 한국어, 일본어, 중국어 간체와 번체를 지원하므로 용량이 어마어마하죠. 한국어는 전체 116MB에 이르고 글꼴 종류하나당 약 16MB에 이르러 웹폰트로 사용하기는 너무 무겁습니다.

그래서 이를 경량화하는 작업이 필요합니다. 원래 폰트안에는 11,172 글자가 포함되어 있는데 이중 가장 많이 사용하는 완성형 2350개와 알파벳, 숫자., 기호만 포함한 크기를 확 줄인 경량화 버젼을 만듭니다.

인터넷을 검색하면 이런 경량화버젼을 만들어 제공하는 곳이 있습니다.

UYEONG님의 경량화 버젼, NotoSans-subset

베누시안,님 경량화 버젼, 본고딕(Noto Sans) 웹폰트 사용하기

스포카 한 산스

본고딕체를 개량한 스포카 한 산스라는 폰트가 있습니다. 2015년 한글날 공개한 커스텀 글골로 기존 본고딕이 영문폰트에 어울리게 제작되었던 특수문자들을 한국어와 일본어에도 어울리게 변형해 전체 글의 세밀함과 가독성을 높였다고 합니다.

최근 인터넷에서 당야한 표현들이 많이 등장했는데요. 이를 반영해서 기존 완성형 2350에 추가 224자를 더해 2574자를 반영했다고 합니다.

그러다보니 다른 경량화 버젼과는 용량 차이가 큽니다.
위에서 소개한 베누시안님의 본고딕체 레귤라 WOFF 경량화 버젼은 183K인데 반해서 스포카 한 산스는 455K로 차이가 큽니다.

스포카 한 산스(spoqa-han-sans) 소개

스포카 한 산스 웹폰트로 사용하기

다국어 환경에 맞게 타이포그래피 세팅하기 – 다국어 반응형 타이포그래피

스포카 한 산스가 여러 장점이 크지만 용량이 배이상 차이가 나기 때문에 개인으로서는 본고딕체 경량화 버젼을 사용할 수 밖에 없습니다. 그러나 상업 용도거나 커뮤니티 사이트에 적용한다면 스포카 한 산스가 제격이라고 보여집니다.

2. 본고딕체 최적화 적용

굳이 최적화 적용이란 단어를 사용한 이유는 속도를 고려해서 최적화 방안을 찾아보고자 하였기 때문입니다. 따라서 아래와 같은 원칙을 세웠습니다.

  • 폰트로 나눔바른고딕체나 본고딕체나 적용에는 차이가 없다고 생각
  • 애플 사용자들을 배려하기 위해 애플 SD 산돌고딕 Neo를 사용토록 함
  • 따라서 사용자 PC에 나눔바른고딕이나 본고딕 또는 애플 SD 산돌고딕 Neo가 설치되어 있는지 확인해 있다면 이를 사용(local 명령 사용)
  • PC에 원하는 시스템폰트가 없다면 본고딕 웹폰트를 다운로드 적용

이러한 원칙에 따라 아래와 같이 CSS코드를 구성해 style.css 앞부분에 적용했습니다. 본고딕중에서 본문에 어울리는 폰트는 Regular와 demilight인데 demilight가 조금 더 유려해 보여서 이를 선택했습니다.

2.1. 사용자 PC의 시스템 폰트 활용

local() 명령어를 사용해 사용자의 PC에 필요 글꼴이 설치되어 있는지 확인합니다.
즉 사용자 PC에 애플 사용자라면 애플 SD 산돌고딕 Neo, 위도우즈 사용자라면 나눔바른고딕이나 본고딕 regular 또는 demilight가 깔려 있으면 이를 사용토록 합니다. 본고딕 regular를 넣은 이유는 용량등의 이유로 본고딕 regular만 설치하는 경우에도 시스템 글골을 사용토록 한 것입니다.

그런데 local() 명령을 사용해서 사용자 PC의 시스템 폰트를 확인하는데 local()명령에는 아래와 같은 문제가 있다고 합니다.

Inside of Web Fonts

  • 로컬 서체를 로딩조차 못하는 웹 브라우저들이 존재한다. (예를들어 IE6-8은 src 속성을 지원 안함)
  • 웹 브라우저 별로 참조하는 로컬 서체의 이름이 다르다.
  • 운영체제별로 참조하는 로컬 서체의 이름이 다르다.
  • 운영체제에 탑재된 웹 브라우저별로 참조하는 로컬 서체의 이름이 다르다.

이러한 문제점을 고려해 최대한 호환성을 높일 수 있도록 최대한 많은 이름을 포함토록 하였습니다.

  • 나눔 바른 고딕은 나눔바른고딕, NanumBarunGothic, 나눔바른고딕OTF, NanumBarunGothicOTF을 적어야 합니다. NanumBarunGothicOTF와 나눔바른고딕OTF는 맥용 safari, Firefox, Chrome에서 필요 합니다.
  • 애플 SD 산돌고딕 Neo는 ‘애플 SD 산돌고딕 Neo’, ‘Apple SD Gothic Neo’를 모두 적어야 모든 브라우저에서 적용 가능합니다.
  • 참고로 맑은고딕은 ‘맑은 고딕’, ‘Malgun Gothic’을 적어야 합니다. 나눔고딕은 나눔고딕, NanumGothic 두가지를 적어주면 됩니다.
 src: local(나눔바른고딕), local(NanumBarunGothic), local(나눔바른고딕OTF),local(NanumBarunGothicOTF), local(애플 SD 산돌고딕 Neo'), local('Apple SD Gothic Neo'), local(''Noto Sans KR'),local('Noto+Sans');

2.2. 본고딕 웹폰트 적용

  • 먼저 IE계열은 EOT 파일을 내려 받도록 설정합니다. IE9+은 WOFF도 지원합니다. WOFF가 EOT에 비해서 가독성은 더 좋다고 합니다. 그런데 용량이 더 크네요. 184K와 152K로 큰 차이는 나지 않지만 아직 속도가 중요하다면 아래처럼 코드를 적용합니다.

    src: url('https://happist.com/Font/notokr-demilight.eot');
    
  • 그런데 IE 6~8은 EOT 파일만 지원하고 포맷명을 해석하지 못한다고합니다. 그래서 파일명뒤에 물을표(?)를 추가하면 물음표 이후 구문을 모두 쿼리문으로 인식해 무시하므로 NanumGothic.eot? 파일을 다운한다고 하네요. 그래서 아래와 같은 코드가 추가됩니다.

    src: url('https://happist.com/Font/notokr-demilight.eot?#iefix') format('embedded-opentype'),
    
  • 만약 IE9+이상은 용량이 조금 크지만 가독성이 좋은 WOFF를 다운받도록 한다면 아래 코드로 대신 합니다. 여기서는 url(‘https://happist.com/Font/notokr-demilight.eot?#iefix‘) format(‘embedded-opentype’), 대신 local(“☺”)로 바꾸어 주는 것이죠.

    src: local(☺),
    
  • WOFF 포맷을 30% 더 압축해 용량을 줄인 WOFF2를 지원하는 브라우저는 WOFF2를 내려 받도록 합니다. Chrome, Fire Fox, Opera, Edge가 지원합니다. Edge는 초기에는 지원하지 않았지만 2016년 5월을 전후로 지원토록 업데이트 되었습니다.

        url('https://happist.com/Font/notokr-demilight.woff2') format('woff2'),
    
  • 최근 브라우저들은 WOFF 포맷을 지원합니다. 원래 TTF가 많이 사용되었으나 TTF형식은 쉽게 복제 가능해 이를 대체코자 WOFF가 만들어졌습니다. TTF의 압축된 버젼으로 보다 빠르게 로딩됩니다. WOFF를 지원하는 IE9+, Chrome, Safari, Opera 등인데요. Chrome, Fire Fox, Opera, Edge는 더 용량이 작은 WOFF2를 내려받으므로 이 WOFF는 Safari에서 다운로드 됩니다.

        url('https://happist.com/Font/notokr-demilight.woff') format('woff'),
    
  • ttf가 가장 용량도 큰데요. 위의 로직대로라면 ttf가 필요없을 듯 하지만 위에서 자용하지 않을 경우 ttf를 다운받도록 합니다.

      url('https://happist.com/Font/notokr-demilight.ttf') format('truetype');
  • WOFF나 TTF 포맷을 지원하지 않은 구 모바일 브라우져(Safari 4.3 이하, Android 4.3 이하, Opera Mobile 10 이하 등)를 위해서 CSS2에서 폰트로 활용 가능한 SVG(Scalable Vector Graphics)를 적용합니다. 사람마다 다르겠지만 이런 구형 모바일 브라우져는 사용자가 많지 않으므로 고려하지 않는 경우도 많습니다. 저는 적용하지 않기로 했습니다.
      url(https://happist.com/Font/notokr-demilight.svg') format('svg');

2.3. font-family 정의

font-family에서 사용할 수 있는 폰트를 정의해 줍니다.

    font-family: '애플 SD 산돌고딕 Neo', 'Apple SD Gothic Neo', 나눔바른고딕, NanumBarunGothic, 나눔바른고딕OTF, NanumBarunGothicOTF, 'Noto Sans KR', 'Noto+Sans',  'notokr-demilight',  '맑은 고딕', 'Malgun Gothic', 'Helvetica Neue', Helvetica, Dotum, '돋움', sans-serif !important;

이를 해석해 보면 나눔바른고딕체와 애플 SD 산돌고딕 Neo체와 본고딕체를 시스템에서 찾아보고 없으면 본고딕 데미라이트체(notokr-demilight)를 내려받기 시작합니다.
내려받기전엔 뒤에 나오는 맑은고딕 등 폰트로 우선 보여주고 웹폰트가 전부 다운로드되면 브라우저는 본고딕 데미라이트체(notokr-demilight)로 다시 렌더링해서 보여주게 됩니다. 물론 이 과정에서 폰트가 반짝하고 바뀌는 글꼴 깜박이 현상인 FOUT(flash of unstyled text)이 나타나긴 합니다.

2.4. 최종 폰트 적용 코드

위의 내용을 반영하여 아래와 같이 적용 코드를 정리할 수 있습니다.

IE9+도 전부 EOT 파일을 다운 받는 코드입니다.

 @charset “utf-8″
 @font-face {
 font-family: 'notokr-demilight';
 font-style: normal;
 font-weight: normal;
 src: local('나눔바른고딕'), local('NanumBarunGothic'), local('나눔바른고딕OTF'),local('NanumBarunGothicOTF'), local('애플 SD 산돌고딕 Neo'), local('Apple SD Gothic Neo'), local('Noto Sans KR'),local('Noto+Sans'); 
 src: url('https://happist.com/Font/notokr-demilight.eot'); 
 src: url('https://happist.com/Font/notokr-demilight.eot?#iefix') format('embedded-opentype'),
      url('https://happist.com/Font/notokr-demilight.woff2') format('woff2'), 
      url('https://happist.com/Font/notokr-demilight.woff') format('woff'), 
      url('https://happist.com/Font/notokr-demilight.ttf') format('truetype'),
      url('https://happist.com/Font/notokr-demilight.svg') format('svg');
 }
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video 
 {
    font-family: 나눔바른고딕, NanumBarunGothic, 나눔바른고딕OTF, NanumBarunGothicOTF, '애플 SD 산돌고딕 Neo', 'Apple SD Gothic Neo', 'Noto Sans KR', 'Noto+Sans',  'notokr-demilight',  '맑은 고딕', 'Malgun Gothic', 'Helvetica Neue', Helvetica, Dotum, '돋움', sans-serif !important;
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  vertical-align: baseline;
 }

아래은 IE9+은 가독성이 좋은 WOFF 파일을 다운받도록하는 코드입니다. 그 대신 용량은 조금 늘어납니다.

 @charset “utf-8″
 @font-face {
 font-family: 'notokr-demilight';
 font-style: normal;
 font-weight: normal;
 src: local('나눔바른고딕'), local('NanumBarunGothic'), local('나눔바른고딕OTF'),local('NanumBarunGothicOTF'), local('애플 SD 산돌고딕 Neo'), local('Apple SD Gothic Neo'), local('Noto Sans KR'),local('Noto+Sans'); 
 src: url('https://happist.com/Font/notokr-demilight.eot'); 
 src: local(☺),
      url('https://happist.com/Font/notokr-demilight.woff2') format('woff2'), 
      url('https://happist.com/Font/notokr-demilight.woff') format('woff'), 
      url('https://happist.com/Font/notokr-demilight.ttf') format('truetype'),
      url('https://happist.com/Font/notokr-demilight.svg') format('svg');
 }
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video 
 {
    font-family: 나눔바른고딕, NanumBarunGothic, 나눔바른고딕OTF, NanumBarunGothicOTF, '애플 SD 산돌고딕 Neo', 'Apple SD Gothic Neo', 'Noto Sans KR', 'Noto+Sans',  'notokr-demilight',  '맑은 고딕', 'Malgun Gothic', 'Helvetica Neue', Helvetica, Dotum, '돋움', sans-serif !important;
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  vertical-align: baseline;
 }

3. 마치며

웹폰트 적용과 관련해 아래에서 많은 도움을 얻었습니다. 좋은 글을 공유해 주셔서 감사드립니다.

현화 Hyunhwa, Inside of Web Fonts

안형우, 웹 폰트를 로컬 스토리지에 저장하는 기법 – 캐시 안정성 증가, 글꼴 깜빡임 현상 제거

김원준, 웹폰트 사용하기 (웹폰트 101)

코드쓰는사람, 한국어와 웹 폰트에 관한 6.1가지 사실

베누시안,님 경량화 버젼, 본고딕(Noto Sans) 웹폰트 사용하기