2016. 3. 13. 21:36ㆍ프로젝트/서비스
한 달도 넘어서 쓰는 '새해 치킨 많이 받으세요!' 프로젝트 후기 :)
...
솔직하게 말하면, 주변 사람들에게 매년 보내는 '설날 인사'를 조금 새롭게 해보려고 했던건데..
이렇게까지 판이 커지리라고는 생각도 못했다..
처음에는 내 주위 한 사람, 두 사람이 재미 삼아 하던 것이,
점점 돌고 돌더니 기하급수적[!]으로 사용자가 늘어나면서 내 예상치를 가뿐히 넘겨버렸다..
혹시나 하는 마음에 배포 직전에 구글 애널리틱스(Google Analytics)를 붙여놓은 덕분에
실시간으로 통계자료를 볼 수 있었는데.. 이벤트 기간 중 분당 PV(페이지뷰)가 3,000 이상으로 치솟기도 했었다ㅎ
(오늘 3/15 기준 누적 PV는 97만 건!)
덕분에 설 연휴 내내 노트북 들고 서버랑 앱에 올라오는 request log를 보며,
서버 트래픽이 초과되거나 카카오 링크 API 제한이 걸리면 일일히 대응을 하며 보냈다.
(아까운 내 연휴 ㅠㅠ 쉬는 날도 일이라니 ㅠㅠ)
(서버랑 앱에 올라오는 리퀘스트 로그를 볼 때 내 모습)
내가 예상했던 것보다 일이 커진 것도 재미있었고, 이번 기회로 여러가지 경험하게 된 것도 많아서..
이 '프로젝트'(?)가 어떻게 진행되었었는지, 의미 있는 포인트마다 살짝살짝 정리해 남겨보려고 한다.
이름하여, '새해 치킨 많이 받으세요!' 프로젝트 후기!
프롤로그: 낚시는 아주 단순하게 시작되지.
이번 프로젝트는 아주 단순한 낚시에서 시작되었다.
그것은 바로 친한 지인인 ㅈㅅㅎ형이 보내준 '피자헛 온라인' 카카오톡 선물 메시지!
평소 봐왔던 카카오톡 선물함 아이콘 덕분에 단 0.1%도 의심하지 않고 철썩같이 믿고 '고맙다♥'를 했는데...
선물함으로 가기를 누르자마자 나에게 나온 건 '물고기 그림'과 '월척이다!'라는 문구였다!!!
(프로_낚시꾼에게_피자로_당함.screenshot)
있지도 않은 피자를 잃은 슬픔에 한참을 '멍~'하게 있던 나는..
곧 '나만 당할 수는 없지!'라는 생각으로 곧 있을 설날 이벤트를 이걸로 하기로 결정했다..
(이 자리를 빌려 좋은 insight를 주신 노량진 ㅈㅅㅎ 형님께 진심으로 감사 드립니다ㅎ)
그동안 매년 새해와 명절에는 내 초곰(CHOGOM) 캐릭터를 활용해서 축전을 그려서 카톡 메시지와 함께 보냈었다.
매번 비슷한 스타일의 이미지로 만들다가, 2014년에는 '신이 ○○를 만들 때', 2015년에는 '복 주머니 놓고가기'를 패러디 했었다. (특히 2015년 '복 주머니 놓고가기'는 GIF 애니메이션으로 한컷 한컷씩 찍어서 움직일 수 있게 만들었음!)
(지금까지 만들어 왔던 새해&명절 인사용 축전)
문제는 해가 지나 갈수록 매번 비슷한 스타일의 이미지다 보니, 아이디어도 고갈 되었고 (ㅠㅠ)
슬슬 새로운 스타일을 찾을 때가 되었다고 생각하고 있었는데, 이번이 적기[!]란 생각이 들어 바로 설계를 시작했다!
다만, 해가 갈 수록 매번 비슷한 스타일의 이미지이다 보니깐, 슬슬 새로운 스타일을 찾아야 한다는 생각도 있었는데.
이번 기회에 확 바꿔 보겠다는 생각으로 바로 설계를 시작했다!
낚시 용품을 설계해 보자!
(낚시는 계획적으로! 철저하게!)
우선! 낚시용품(?)은 카카오링크 API를 활용한 모바일 웹으로 만들기로 했다.
내가 만들고 싶었던 기능은 내가 낚였던 '카톡낚○'와 같은 앱에서 이미 가능했기 때문에.. '안드로이드 네이티브 앱으로 만들어볼까?'라는 생각을 아주 잠깐 했었지만.. 안드로이드 개발을 마지막으로 한 지 어언 3~4년이 되었고, iOS 대응이 바로바로 안 되기 때문에 바로 접었다 -_-;;
무엇보다도 앱이 '확산(?)'되기 위해서는 누구나 쉽게 접근할 수 있는 모바일웹이 여러모로 더 낫겠다고 판단했다.
다행히 카카오 링크(https://developers.kakao.com/)에서 제공하는 카카오링크 API 중에 안드로이드/iOS 네이티브 외에 Javascript를 이용한 방식도 지원했기 때문에 '아싸! 좋구나!'를 외치며 바로 설계를 시작 했다.
먼저 발사믹(balsamiq)으로 아주 간단하게 구현하고자 하는 앱의 모습을 그려 놓았다.
(예전에는 그냥 코딩부터 시작했지만 각 화면마다 필요한 코드나 기능을 사전에 확인하기 위해 사용했는데 꽤나 유용함!)
(balsamiq으로 만든.. 허접한.. 앱 구성도..)
어느 정도 화면 구성과 기능을 정의한 다음에는 카카오 개발자 페이지에서 신규 앱을 만든 후 API Key를 발급 받았다.
카카오 아이디만 있으면 누구나 쉽게 카카오 개발자 계정을 만들 수 있고, 클릭 몇 번으로 앱 생성을 할 수 있기 때문에 쉽게 시작할 수 있었다.
개발 가이드에서 가이드 해주는 대로 카카오링크 API(javascript)를 활용해서 적용을 마치고, 다음은 프론트앤드 개발로 넘어갔다. 프론트앤드는 개발 요소가 얼마되지 않아서(헤더, 메인 이미지, 버튼이면 끝!!) 큰 걱정이 없을 것이라고 생각했는데.. 이미지 리사이징을 잘못해서 이미지에 열화가 생겼고 이걸 수습하기 위해서 코드를 수정하느냐고 시간을 다 보냈다ㅠㅠ
(구글 크롬 개발자도구 - 서브라임텍스트, 단순단순한 코드!)
우여곡절 끝에 앱을 완성했고, 다행히 처음 balsamiq으로 그리고 계획했던 모습과 비슷하게 만들어 냈다.
(물론 카카오톡 기반으로 해서 개발할 것이 많지 않아 금방 끝났음.. -_-;;)
①→② 카카오톡 메시지에 있는 '기프티큰' 버튼을 누르면, 낚시(?) 페이지로 이동!
②→③ 페이지 안에 있는 '나만 당할 순 없지'를 누르면 대화상대를 선택해서 똑같은 낚시용 메시지를 보낼 수 있도록 완성했다. (이것이 바로 낚시의 선순환 구조!! 창조경제낚시!!)
이렇게 모든 준비를 끝내고 이제 실제로 앱을 이용해 새해 인사를 시작했다 :D
빈약하긴 하지만 열심히 준비한 낚시도구(?)를 챙겨 하나, 둘 씩 주변 친구들에게 선물을 보내기 시작했다.
계획대로 순조롭게 잘 진행되었고, 낚시인 것을 알게 된 친구들의 소소하고 욕설사랑이 가득한 메시지를 보며 즐거워 했다.
여기까지는 큰 문제가 없는 것 같았었다.
그.런.데..
트래픽 초과! 결제, 결제, 또 결제!
(예상도 못했던 트래픽 초과 이슈..)
잘 진행되고 있던 프로젝트에 갑작스런 문제가 찾아왔다. 바로 '트래픽 초과!'
카카오링크를 눌러 이동하는 낚시(?) 페이지를 평소 구입해 놓고 방치해 뒀던 고○호스팅에 물려 놓았었는데, 예상보다 너무 빠르게 앱이 퍼져나가다 보니 트래픽 초과로 접근이 차단되어 버린 것 ㅠㅠ (사실 주변 지인들한테만 보내려고 한 거라 이 때까진 트래픽 초과는 생각도 못했었다;;;)
다행히 일 1회에 한해서 트래픽이 리셋되기 때문에 바로 다시 초기화 한 다음 서비스를 이어갔다.
하지만 ...
별도 최적화를 하지 않은 이미지를 그대로 쓰다보니 트래픽은 계속 터져나갔고ㅠㅠ 트래픽이 초과될 때마다 추가 트래픽을 결제하면서 대응하게 되었다... (내 카드비 ㅂㄷㅂㄷ...)
하지만 트래픽 추가 결제에도 한계가 왔고, 더 이상 트래픽을 감당하지 못해서 서비스를 내려야 하나 고민하던 중에..
와로련(와동영상·개발노동자연합) 상현(yangs)이에게 도움을 요청했고! 다행히 IDC에 입주시켜놨던 서버에 공간을 마련해 주었다!
(도움을 준 상현, 사실상 이번 프로젝트 1등 공신)
무제한 트래픽 덕분에 탄력을 받은 서비스는 열심히 달리기 시작했고, 고○호스팅에서 트래픽 초과로 차단되면서 속을 끓이던 일은 더 이상 일어나지 않게 되었다. 덕분에 PV는 쭉쭉 오르기 시작했고! 구글 애널리틱스를 통해 실시간으로 통계자료를 보는 재미도 있었다.
처음 사이트 활성 사용자 수가 30~50만 되어도 '우와!'를 외쳤고, 100을 넘었을 때는 '세상에!!!'라고 했는데..
점점 숫자가 치솟기 시작했다 -_-;; 어느 순간부터 숫자 4자리가 기본이 되었고.. 그게 1인지 2인지가 중요하게 되었다 ㄷㄷ
쉴 틈 없이 조용히.. 2,000을 돌파해서 오르고 또 오르더니!
어..? 어?! 어!!!!
하면서 정신을 차릴 때쯤 3,500을 넘어서게 되었다.
이 때 분당 PV는 평균 1,000이었고, 초당 PV는 평균 25까지 오르게 되었다.
(물론 한번 들어와서 나가기 전까지 계속 PV로 잡히기 때문에 초당 PV가 큰 의미는 없지만 신기했음ㅎㅎ)
예상치 못한 결과에 한껏 고무되어 신이 나기도 했지만, 한편으로는...
'수백명이 동시에 내가 만든 페이지에 들어오고 있다!'라는 생각이 들다보니, '이걸 이제 어떻게 수습해야 하나..', '코드 한 줄 바꿀 때마다 엄청 영향을 받겠네..'라는 걱정이 앞섰다.
동시에, 내게 서버 공간을 준 상현이의 서버 상태는 불이 붙은 듯 했다;;
쉴새 없이 들어오는 이미지 파일 request로 인해 트래픽은 계속 올라갔고, 급기야 도메인 관리업체에서 DDOS 공격이 의심된다는 -_-;; 연락을 받기도 했다. 그래도 다행히 트래픽 초과 에러로 접속이 아예 차단 되는 것은 아니었기 때문에 우선 계속 가보자 결정하고 서버 로그를 살폈다.
(영원히 고통받는 상현s_서버_실시간_request로그.gif)
(다행히 DDOS는 아니었습니다.)
왜 갑자기 뚝! 떨어지지?
트래픽 초과 문제를 어느 정도 해결하고 나서는 프로젝트 진행헤 큰 어려움이 없을 것이라고 생각했다.
그런데 7일에서 8일로 넘어가는 새벽[!].. 잠들기 직전에 본 구글 애널리틱스 실시간 데이터에 갑자기 PV가 훅!하고 곤두박질 치는 것이 눈에 띄었다. (마치 내가 작년 말에 산 주식처럼..ㅠ)
(당시 실시간 그래프 캡처가 없어 누적 리포트로 대체. 빨간 포인트 지점으로 하강 시작ㅠ)
가장 속을 썩이던 트래픽 초과 여부를 제일 먼저 확인했지만, IDC에서 든든하게 트래픽을 커버해 주고 있었기 때문에 그 문제는 아니었다. 도대체 뭐가 문제인지 찾지 못하고 헤매다가 직접 폰으로 테스트를 했더니, 발견할 수 있었다.
바로, 이번에는 카카오톡에서 내 앱을 차단한 것 -_-;;
팝업 메시지 그대로 '단기간'에 '다량의 메시지 전송' ... 즉, 동일한 API를 비정상적으로 많이 호출하다 보니 차단시킨 것이었다.
(뭐야_이건_또_뭐야.jpg)
처음 만들 때 API Request 제한을 넘길 것이라고 생각하지 않았기 때문에 따로 확인해 보지 않았었는데, 뒤늦게 확인해 보니 3만 건/일로 제한되어 있었다. 그래서 어쩔 수 없이 임시방편이긴 했지만, '나만 당할 순 없지' 버튼을 누르면 '사용할 수 없습니다.'는 팝업이 뜨도록 해 두었다.
하지만 곧 개발자 계정을 새로 만들고 API Key를 생성해서 대응할 수 있도록 최종 수정을 했다.
(물론 수동이라 구글 애널리틱스를 보며 뚝 떨어지면 대응하고를 반복했음.)
덕분에 3만 건 이상 API Request가 넘치더라도 계속 API Key를 바꿔가면서 서비스가 멈추는 일은 막을 수 있었다.
재미있는 경험, 즐거운 마무리 :D
(2/8 ~ 2/11 PV 수치)
누적 PV 973,791건! (3/13 기준)
비록 100만 건에는 미치지 못했지만 그래도 나름 의미가 있었고, 한편으로는 너무나도 무서운 수치였다.
내가 만든 서비스가 실시간으로 수많은 사람들이 사용하고 있다는 생각이 계속 머리에 맴돌다 보니..
버그 하나만 터져도 ㄷㄷㄷ했고, 트래픽과 API Request 초과로 실시간 PV 수치가 급강하 하는 것을 보면서 어찌해야할 바를 몰랐다.
(사실... 2년 전, 故.Linkle 서비스를 만들었을 때 이런 포텐이 나왔어야 했어 ㅠㅠ)
(연휴 내내 집에 상황실 만들어 놓고 대응함..)
이번 프로젝트를 진행하면서 가장 즐거웠던 순간은,
맨 처음 시작했던 사람에게 다른 사람의 손을 타고 타서 다시 돌아왔다고 들은 순간!
자기는 보낸 적 없는데 다른 사람에게 받았다는 이야기를 들은 순간!
왠지 모를 즐거움과 짜릿함을 동시에 맛볼 수 있었다!
(피해자?들의 이야기 모음..ㅎ)
에필로그: 감사의 이야기
수십번은 아니지만 한두번 정도 '이걸 왜 만들어서 이 고생이냐 ㅠㅠ'라고 생각했었다.
특히 현질(?)과 고O호스팅 담당자와 휴일에 전화통화 하면서 트래픽 조정할 때.. 연휴에 친척들 왔는데 인사만 하고 방으로 튀어들어가서 계속 모니터 보기 바쁠 때..ㅠㅠ
그럼에도 불구하고, 돈을 벌거나 많은 사람들을 낚아버리겠다(!)라는 목적을 가지고 만든 것도 아니었고.
그냥 주위 사람들에게 매년하던 새해 인사를 '조금 더 재미있는 방법으로 할 수는 없을까?'라는 생각으로 시작한 소소한 프로젝트였음에도 불구하고 많은 사람들이 관심을 가져주고 재미있게 써 주었으니 그보다 기쁜 일은 없을 듯!
무엇보다도 이번 프로젝트를 원활하게 진행할 수 있도록!
아침부터 밤까지! 새벽에도 갖은 VOC와 트래픽 방어에 힘써준 'ESTS의 양핫'이랑
맨 처음 아이디어 제공부터 실시간으로 계속 응답해주시며 격려해주신 '노량진 상O 형님'께 깊은 감사를 표한다 :D
그런데...
올해 추석에는 뭐하지? ㅠ
{쓸데없는 덧;}
(나도_알아_내가_몰라서_그랬겠니.jpg)
물론.. 조금 더 깨어 있는 자들은.. 애드센스를 언급했고..
애드센스를 걸지 않았던 과거의 나는 좀 많이 혼나야 할 것 같다..