스토리 홈

인터뷰

피드

뉴스

조회수 4018

유비와 제갈공명의 이야기

고전을 좋아한다면, 삼국지라던가, 수호지, 초한지를 읽어봤음직하다.그중 많은 사람들이 선호하는 이야기는 바로 삼국지!조조나 손권, 유비의 리더십에 대한 서적도 많고,관우, 장비, 제갈공명쯤은 다들 한 번 씩은 들어봤을 테다.여포, 조운, 방통, 서서, 하후돈, 황충, 순욱, 초선, 공손찬, 손책, 조비, 주유 등조연인 듯 조연 아닌 조연 같은 각양각색의 인물들의 이야기들.군웅할거의 시대에 영웅담들과위기, 승리, 패배, 배신, 전략이 난무하는 역사를 기반한 소설!원저자인 나관중 이후에도 여러 작가들의 시각에서 재해석되면서시대에 따라 멋짐이 묻어나는 인물이 달라지고,픽션인지, 사실인지 혼동되기도 한다.잠시 주말을 맞아 중고서점에 들러서 삼국지를 잠깐 탐독하였다.학창 시절에 참 즐겨 읽었고,좋아하는 영웅들의 마음은 어떠했을까 상상도 했었는데...오늘 읽은 부분들은 이런저런 생각이 많이 들더라.스타트업 창업자로서,작지만 함께 생존기를 써가고 있는 회사의 리더로서,그리고...여전히 모르고, 막히는 것이 많아선현들과 선배들의 길을 모방해 배워가야 하는말학의 햇병아리로써...잠깐 동안 느낀 점을 나누고자 한다.시작하기 앞서 삼국지란 책의 시대적 배경은한나라의 말기에서위, 촉, 오라는 세 나라가 탄생하고최후에 진나라의 탄생까지주요 무대이다.(여기서 진나라는 진시황의 진나라가 아님, 후진이라고도 부름)그중, 유비와 제갈량(제갈공명)의 이야기를 잠시 나누어보자삼고초려라는 말이 있다.제갈량을 영입하기 위해 유비가 세 번 찾아가 간 유래에서 나온 사자성어다.유비가 인재를 얻기 위해 자존심을 굽히고, 예를 갖추어 찾아간 모습에 감탄하곤 한다.문득 이런 생각이 들었다.제갈량은 어떤 생각을 했을까?제갈량은 왜 그러한 유비를 고생시켰을까?유비를 인물됨을 시험한 것이라고 단순하게 보기엔....그렇다고, 내심 조조가 찾아와 주길 바라거나 다른 군주들 간에 비딩(biding, 경쟁입찰)시킨 건 아닐듯하다.어쩌면 이 사건을 레퍼런스로 자신의 이름을 천하에 알리는 최고의 홍보, 마케팅 수단이었을 수도 있다.더불어서 우리 주군이 인재를 얻기 위해 이런 수고로움까지도 감내하는 사람이라는 것을알리는 좋은 사례가 되었을 수도 있다.스타트업의 구성원으로 보는 시각에서는시작부터 좋은 기획자이기도 하고, 마케터이기도 하다.그 당시의 상황 속에 나를 넣어본다.내가 유비였다면...어땠을까?일단, 소문만으로 듣던 제갈량을 처음 찾아갔다.이제 그토록 바라던 인재를 영입한다는 기대감과앞으로 천하통일을 하는데 한 걸음 아니, 세네 걸음 더 앞당겨지는...아니 어쩌면 벌써 천하를 가진듯한 착각에 빠져있을 수도 있다.근데... 웬걸...ㅡㅡ;;이거 제갈량 양반! 너무한 거 아니오?만나보지도 못 하고, 기다리다가...결국 돌아가야 했다.혼자 간 것도 아닌데...옆에 함께 창업한 동료들인 관우, 장비에게얼굴을 못 들게 부끄럽게스리...면상을 구기고 돌아오는 발길이 무거웠을 거다."그래!내가 타이밍을 잘못 잡았던 거야.다음에는 꼭 만나서 영입 제안을 해야지."그리고 다음에 다시 찾아갔다.그런데 또 없다.분명 사환(심부름을 해 주는 종)에게 메시지를 전했는데...내가 왔었고, 기다리다 갔으니,다시 오겠노라고 전달했는데...제갈량은 나보다 더 중요한 미팅이 있는 걸까?나를 깔보는 걸까? 내가 사람을 잘못 봤나?예의가 없는 걸까 아니면 일부러 나를 시험하나?사환에게 다시 물어봐도전달했다고 한다.슬슬 같이 온 동생들이 불만을 표현하기 시작한다."지가 뭔데 우리를 두 번이나 퇴짜 놓는 거야?""소식 들었으면, 지가 찾아와야 하는 거 아이가?""형님! 이거 이거 지략은 뛰어난 놈인지 몰라도 버르장머리가 없네요."동행한 동생들을 진정시키기는 하지만내심 의심도 생긴다.제갈량을 추천한 사람들이 잘못 본 것 아닐까 하는 생각!이 사람을 얻으면 팀 내에 불화가 더 증폭되진 않을까나는 이 사람을 받아들일 준비가 안 된 건가,이미 누군가에게 내정된 사람은 아닐까하지만 이런 의심을 뒤로하고,다시 한번 찾아가기로 결심한다.그 시간 동안 팀 내에 구성원들에게소문이 퍼지기 시작한다.이야기는 꼬리에 꼬리를 물고 빠르게 퍼진다.나는 나 하나의 개인이 아니라 한 조직의 리더이다.이러한 대우는 어찌 보면 우리 조직의 얼굴에 먹칠을 한 것이다.과연 그러한 리스크에 대비해서 이번 영입이 더 높은 가치를 가지는 것일까 하는 고민이 든다.딱! 여기까지만 생각해보자!다시 한번 더 세 번째로 제갈량을 찾아갈 것인가, 아니면 다른 사람을 알아볼 것인가.우리 창업자들에게는 수많은 선택의 기로에서매일 한 가지 이상의 결정을 내려야 한다.하나의 결정을 완성하는데 한 번의 실패는 수차례나 경험한다.그런데 동일한 실패를 두 번 하였을 때,이 때는 진지하게 고민할 수밖에 없다.무엇이, 어디서부터 잘못된 걸까.처음부터 선택하지 말았어야 하는 건 아닐까.그리고 세 번째 동일한 시도를 한다는 것은 무모하지 않을까.냉정하게 말해서, 유비의 삼고초려는 상식적으로는 이해하기 어렵다.제갈량이 아무리 지략과 전략에 뛰어난 사람이고, 와룡봉추 중 한 명이며, 천하를 얻기 위해 꼭 필요한 사람이라는세간의 평가와 소문은....사실 소문이고, 검증되지 않았다.아무리 이 세계에서경력과 능력이 출중하다고 하여도소문은 그냥 소문일 뿐이다.우리 팀에서 함께 할 때,꼭 그 소문만큼 퍼포먼스를 낸다는 보장은 없다.이미 검증된 관우와 장비가 옆에 있는데이들이 불만을 가질 영입을 진행할 근거는 무엇인가.그럼에도 불구하고 이렇게 밀어붙였던 이유는...아마도 유비는 이런 상황이지 않았을까?내부적인 상황을 적용하자면,사실 무리한 영입이라고 판단된다.하지만 외부적인 상황도 적용해 보자.천하는 여전히 각 영지의 강한 군사력을 가진군주들이 즐비하다.그들과 경쟁을 하려면,자금, 인력, 시스템, 인프라 등 뭐하나 이길 수 있는 유비만의 차별성은 없다.허울만 있는 몰락한 황숙(황제의 삼촌뻘)쯤 되는 혈연관계.오히려 세간에서는 조롱의 대상이고, 무능함의 아이콘이 되는 마이너스한 요소이다.특히나 황제가 저리도 매가리가 없는 상황에서는경쟁자들이 더 호시탐탐 제거하려는 대상일 뿐.떠돌이 생활에는 이력이 났고,패전에 익숙해져 내륙으로 밀리고, 또 밀리는그런 입장에서...이러한 상황을 타개할 방법은 무엇이었을까?그렇다면, 제갈량을 한 번 살펴보자.일찍이 그 이름은 널리 알려졌으며,그를 영입하려고 탐내는 사람은 많았으나그는 한사코 거절하고, 숨어 다녔다.자신만의 확고한 계획과 철학이 있었기에적합한 군주를 만날 때를 기다렸을 테다.천하삼분지계!위나라, 오나라, 촉나라로 나누어져 천하를 나누고,오나라와 촉나라가 힘을 모아 위나라를 시장에서 밀어내고,오나라를 M&A 하여  옛 한나라의 부흥을 꽤 한다.일단 자신이 조조에게 가면 쉽게 천하 일통은 하겠지만,자신의 기여도는 낮을 것이다.이미 거의 다 완성형이 되고, 인재가 넘치는 대기업에 자신이 들어간들 다 된 밥에 숟가락만 얹는 꼴이다.그림으로 치자면, 이미 채색이 거의 끝나가면서조조 이름으로 작가 서명을 할까, 아님 황제 이름으로 해둘까 고민하는 정도?오나라는 강동의 풍부한 물자와 인구를 기반으로조용하게 꾸준히 성장하고 있다.중견기업이랄까. 자신이 비집고 들어갈 여유는 있겠지만오래된 가신들과 후원자들이 있다.우리식으로 말하자면,시스템이 자리 잡혀있고, 안정적인 매출과 거래처가 있어꾸준한 성장이 보장되어져 있다.거기다 많은 경력자들과 투자자들이한 자리씩 다 자리 잡아있는 상태!그림으로 비유해서 밑그림(스케치) 다 해놓고들어갈 물감도 다 구비해 놓고, 붓질 시작한 정도?그에 반해, 유비의 경우는....일단 절실하다.그리고, 작품은 만들겠다는데 계속 헤매고 있다.캔버스 들고 이리 갔다 저리 갔다 하는 정도.세력도, 자본도 없다.제갈량 자신이 참여하면 기여도에 따른 지분은확실하게 보장될 것이다.자신과 중복되는 사람도 없기에 자신의 역량이 곧 그 회사의 역량이 되고자잔하게 마찰 일어날 염려도 없다.하지만 역으로,제갈량 입장에서는 리스크 이상의 무언가가 있어야 한다.1) 그래도 관우, 장비가 있어서 그들과 서열정리는 필요하다.2) 기존에 다른 영입 제안을 거절한 것에 대한 명분이 필요하다.3) 소문으로 듣던 유비에 대한 검증이 필요하다.4) 자신의 가치를 내부뿐만 아니라 외부에도 확실히 각인시킬 필요가 있다.실제로 삼고초려가 있었는지는 여전히 의문이지만,어쨌든 이를 통해서 많은 것을 확인할 수 있다.유비가 제갈량에 대한 필요 정도를 알 수 있고,기존 멤버를 어떻게 핸들링하고, 이끌어가는지도 알 수 있다.대의를 위한 인내심과 목적을 위한 유연성도 엿볼 수 있다.이렇게 글을 적고 보니 무슨 제갈량 빠인 듯한데....개인적으로 제갈량을 좋아하지는 않는다.삼국지의 후반부로 갈수록제갈량의 모습에서 이전에 꿈을 향해 가던 모습보다는점차 수세적, 방어적으로 전환하는 모습이 눈에 띈다.유비의 후계를 능력이 아닌 혈연으로 이어가는 모습,부하의 의견을 단박에 거절하는 완고함,시스템을 구축하지 못하여, 홀로 원맨쇼를 하며 촉나라의 말미를 재미없게 만든 장본인이라고 생각하기에아쉬운 부분이 많다. 우리는 뛰어난 능력자를 찾고,우리와 fit이 맞는 멤버를 찾아다닌다.소문을 듣고, 추천을 받고, 서류를 보고...그리고 그들도 우리를 체크해 본다.나는 유비가 옳았다고는 생각하지 않는다. 지푸라기 잡는 심정으로 제갈량 영입에사활을 걸었을지는 몰라도...좀 더 세심했을면 어떨까 하는 생각을 한다.그 절실한 마음은 공감을 하지만,방법과 과정에서 더 협상과 조율이 필요하지 않았을까?와룡봉추가 있어도 천하를 얻지 못했다.위나라와 오나라를 규모가 좀 있는 회사로 비유를 했지만, 사실 부러워서 그렇다.처음부터 위나라와 오나라가 강하지는 않았다.조조도 모든 걸 잃고 도망 다니던 시절이 있고,주유(실질적인 오나라의 리더)는 기성 시스템의 우려와 반발에도능력위주의 인재 발탁을 꾀하며 시스템을 바꾸었다.유비가 인덕의 리더십이라고?조조도 자신의 부하를 아끼고, 그들에게 지지를 받았다.주유가 지병으로 앓을 때, 부하들은 전쟁의 승패보다 리더의 몸 건강을 더 걱정했다.그들에게는 시스템이 있었고,제갈량을 능가하는 책사는 없었지만,다양한 의견과 다방면에서 자기 능력을 발휘할 수 있는환경을 만들기까지 나름 많은 우여곡절이 있었다.단지, 촉나라가 후발주자였다는 것의 차이일 뿐위나라도, 오나라도 스타트업의 시절이 있었다.그리고 그들 나름이 색깔로시장을 지배하고, 고객을 확보해왔다.어찌 보면,오호장군이라는 최고의 영웅들과 제갈량이라는 최고의 지략가로 뭉친 스타트업보다개인 역량이 최고는 아니더라도,최선을 다 하는 조직으로 성장하는 것이시간은 더 걸리더라도 단단하고, 더 길게 꿈을 이뤄갈 수 있지 않을까.타이밍이 그때가 딱이었기에,속도전을 하였겠지만,마라톤을 하기에는 전략의 미스는 아니었는지...정답은 없다지만,적어도 내가 나 자신에게 묻는 질문의 답은 정해져 있다.지금 이 글은그냥 별 다를 것 없는소소한 이야기다.가끔은 회사 업무에서 벗어나려 잠시 이런 상상을 하다 보면,결국은 나도 모르게 스타트업의 이야기로 빠져든다.별 것 없는 스타트업 창업자 나부랭이지만,나는 여전히 천하제패를 꿈꾼다.이제 슬슬 또 일하러 가야겠다.#클린그린 #스타트업 #스타트업창업 #창업가 #창업자 #마인드셋 #조언
조회수 408

iOS 개발자를 구합니다!

“세상 모든 광고영상을 누구나 쉽게 만들 수 있게 한다.”영상광고는 사업의 규모와 업종을 막론하고 모든 분야에서 필수적인 요소로 자리잡고 있습니다. 잘 만든 영상광고가 매출로 이어진다는 사실은 검증되었고, 그 중요성은 나날이 증가하고 있습니다.하지만, 영상제작 전문기술 없이 광고영상을 제작한다는 것은 시간과 비용적인 측면에서 매우 어려운 일입니다. 광고영상을 SNS에 업로드 하고 싶은 마케터나 창업가들은 영상 전문가나 디자이너가 되는 것을 꿈꾸지 않습니다. 단지 자신의 서비스와 제품이 멋지게 홍보될 영상을 원하고 있습니다.더브이플래닛은 전문기술 없이도 누구나 쉽고 빠르게 광고영상을 제작할 수 있는 브이플레이트를 통해 많은 마케터들과 창업가들이 겪는 시간과 비용에 대한 어려움을 해소할 것입니다.“더브이플래닛”에서 영상광고 생태계의 흐름을 바꿀 iOS개발자를 모집합니다.광고영상을 누구나 쉽게 만들 수 있도록 함께 고민하고 시장을 주도해나갈 분을 애타게 찾고 있어요.우리는 한사람 한사람의 소중한 능력들이 맘껏 발휘될 수 있도록 존중과 배려로 서로를 응원하고 있어요. 우리와 함께 소중한 능력을 맘껏 발휘하실 분들의 많은 지원 부탁드려요.
조회수 1691

청년들에게 보내는 편지

이 글은 진작에 쓰고 싶었던 주제야.채용을 진행할 때, 많은 생각과 느낀 점들이 있어서꼭 들려주고 싶은 오지랖이지.크게 성공하거나 유명한 사람도 아니며,오히려 나도 현재 진행형의 소시민 중 하나일 뿐이지만내가 보는 세상에 대해 공유하고자 키보드질이다.지금의 청년들을내가 100% 완벽하게 이해한다고 말할 수 없어.그건 내가 아니라 세상 누구도너와 같은 삶을 살지 않은 이상,할 수 없는 말이거든.하지만, 나는 너를 공감하고 있어.얼마나 힘든 시대에, 불합리한 시스템과정해져 있는 틀 안에서 발버둥 치고 있는너에 대해 공감하려고 노력하고 있어.나름 사회 부조리와 세대 간의 입장차라는 현실에저항도 하고 있고, 바꾸려고 나 역시 발버둥 치지.내가 너에게 인생선배라는 말 같지 않은 이유로 꼰대질 하려는 게 아냐.내가 너에게 선생이나 되는 듯 훈계하려는 것도 아냐.그냥 너의 젊음이 부러운,너의 좌절과 불안을 함께 경험하고 있는,좀 나이 든 친구로서 내 수다에 어울려주길 바라는 것뿐이야.많이 힘들지?그놈의 취업이 뭔지, 항상 옆집이나 엄마 친구 자식들은그럴듯한 대기업, 공기업에 다 자리 잡은 것 같아.나도 노력을 안 한 것은 아닌데...해도 해도 안되고, 항상 제자리에 있는 것 같아.통장에 잔고는 계속 줄어들고,이제는 밖에서 누군가를 만나는 것조차지갑이 텅 비어서 부담스러워.결혼하는 친구 축하하고는 싶은데축의금이 부담돼서 그냥 카톡에 답을 못 남기지.여자 친구에게 이별을 꺼냈을 때,사실 내가 돈도 없고, 미래도 불투명하기 때문이라는 걸자존심 상해서 다른 이유로 둘러대기도 하지.공무원 준비한다고 몇 년째 공부하고 있지만,매년 더 늘어가는 같은 처지의 경쟁자들을 보며 한숨만 들어가지.명절은 이미 오래전에 나와 상관없는 일이고,그나마 부모님조차도 찾아가기 미안해져서 카페에서 공부를 하지.어쩌다 서류 통과해서 면접을 봤는데 역시나 불합격 메일이 날아와침대에 누워 아무것도 할 의욕이 안 생겨.어떤 사람들은 말하지.눈을 낮추라고.말은 쉬운데 그러기엔 그동안 시간과 비용이 너무 아까워.말은 쉬운데 중소기업에 들어가면 이 삶이 반복될 미래가 뻔해 보여.말은 쉬운데 그 말하는 네가 내 입장이라면 그럴 수 있을까 되묻고 싶어.언제부터인가세상이 다르게 보이기 시작해.처음에 그래도 "다 잘 될 거야"라는 마음이었는데,절대로 나는 다른 사람들과 다를 거라는 믿음,간절히 원하고 바라면 온 우주가 도와준다고 했는데....그랬던 마음은 온데간데없고세상이 무서운 곳이라는 걸,세상 일이 내 맘대로 되는 게 없다는 걸,세상 속 나는 매우 작은 존재라는 걸서서히 깨닫게 되지.참 많은 빌딩 숲 속에서 나 하나 있을 작은 자리 하나 없다고 느껴져.나는 왜 여기에서 이렇게 살아가고 있는지,무얼 위해서 내가 존재하는지 생각이 많아지고, 번민이 심해지지.그러다 보면더 안 좋은 잡생각이 들어.어차피 해도 안 될 거야.난 할 만큼 했어. 근데 세상이 문제인 거야.내가 살아야 할 이유가 있을까?그냥 막살아도 누구 하나 나에게 관심을 안 줄 거야.내가 너에게 공감하는 것은 일부분일 뿐...며칠 밤을 지새워도 모자랄 만큼 너는 그 이상으로 더 많은생각과 고민, 현실 속에서 이 글을 보고 있을 거야.이 글을 보고 있다면,집 근처 할인마트 가서 작은 맥주 하나 사 와서내 이야기에 시간을 투자해주지 않으련?하긴 요즘 맥주 한 캔조차도 사치가 되어버리지...아니면,믹스 커피 한 잔 타서 천천히 내 말을 들어봐 주라.내 나이는 38세(80년 생)이야.나는 청년이라고 생각하는데...아저씨라는 말에 익숙해지는 세 대지.원숭이 띠라는 이유로손재주가 있다고 믿었던 적이 있는참 엉뚱한 스타트업 창업자야.참고로 난 지방대 출신이야.일부 커뮤니티에서는 지잡대라고 비하하기도 하지.직장생활도 중소기업에서 시작해서이직한 곳도 중소기업이었어.그리고 지금은 창업해서하루하루 치열하게 살아가고 있지.책임져야 할 가족이 있어 늘 생계 걱정도 하지.얼마 전 올라간 전세금 걱정에 흰머리가 더 생긴,어디서나 길에서 흔히 볼 수 있는 아재 중 하나야.이런 사람이 무슨 자격으로 청년들에게 이야기를 남기냐고?난 너를 자주 만나거든.저 멀리서 성공스토리를 나열하거나,뜬구름 잡는 이론으로 널 설득하려는 사람이 아니라,그냥 널 자주 만나는 사람 중 하나라서너의 이야기를 자주 듣고 있는 사람 중 하나라서이야기하는 거야.난 작은 스타트업의 창업자야.근데 돈이 없었고, 지금도 없어.결혼을 했는데빚으로 시작해서, 여전히 빚이 있어.자녀도 둘이나 있는데애들이 커가는 모습이 흐뭇해야 하는데,오히려 앞으로의 필요한 비용에 대한 걱정을 하지.어떤 사람들에게는 "노답"이라고 불려지는 사람이지.나도 답이 없다는 말에 동의해.그런데 "답이 없다"라는 게 아니라"정답은 없다"라는 의미로 동의하는 거야.대학을 졸업해서 취업을 준비할 때,좌절도, 방황도 많이 했지.지금은 더 어려운 상황과 시대인데...나도 나 나름대로 가장 힘들었어.누구나 자신이 처한 상황이 가장 힘들다고 느끼듯이그때는 만신창이에 처참한 나의 현실에 울기도 하고 화내기도 했어.IMF시대라고 불리는 경제적으로 힘겨워진 학창 시절에도어째 어째 잘 이겨내서 웬만한 고난에는 내성이 있다고 자부했는데그건 그 때고, 지금 힘든 건 지금의 문제더라고.첫 직장이 중소기업이라는 것을좋은 기회라는 식의 포장을 하지 않을게.적은 임금 수준과 열악한 복지,과도한 업무와 불합리한 조직 내 문제들...그런 문제들에서 받는 상처들이 얼마나쓰라리고, 억울한지 내 마음이 아직도 기억하니까.그래서 어떻게 할까?방구석에 짱 박혀서 세상 원망만 할까?현실 탓하며 내 삶을 포기할까?난 흙수저니까, 여긴 헬조선이니까 하면서기성세대 욕하고, 세상 욕하고, 시스템 욕하고그러면 되려나?SNS에 똥글 싸지르고, 일베 짓거리나 악플러로 욕구 해소할까?그러고 나면 뭐가 바뀔까?아니, 아무것도 안 바뀌고, 돌이켜보면 나만 더 초라해져.비참해져.세상이 문제 많은 거 인정해.사회 시스템이 불공정한 거 인정해.기성세대의 탐욕이 지금의 세대를 병들게 했지.그릇된 이념교육과 이기적인 연고/지역/학연주의가 만연하지.나는 막무가내식의 희망을 강요하는 게 아니야.확률을 높이고, 단계적으로 달성할 수 있는 작은 변화를 이야기 나누고 싶어.수많은 창업자들은 경쟁이 반복되지.때로는 SKY 출신이라는 타이틀을 가진 친구들과 경쟁하지.아직은 학벌이 더 나은 인프라를 연결해주는 수단이기에경쟁에 한 발 뒤쳐지는 걸 부인할 수 없어.대기업 경력자 출신 창업가들이 더 인정받는다는 건매우 당연한 일이야.왜냐면 그들도 이전에 다수와의 경쟁 속에서 승리를 쟁취한 사람들이야.보다 나은 대접과 시선으로 대우받는 게 배 아픈 일이냐고?아니, 이것이야말로 당연한 결과라고 생각해.지금에 와서 그들을 바라보는가장 큰 감정은 부러움이야.한편으로는 나는 부끄럽고 아쉬워.난 이미 그들과 동일선상에 있을 수 있던 기회와 시간들이 있었지만,그 시절의 나 자신에게 떳떳하지 못해.최선을 다 하지 않았어.정말 목숨 걸고 공부하지도 않았고,필사적으로 길을 찾지 않았어.우리 집은 가난하니까, 학비를 대 줄 형편도 안되니까라는안일한 핑곗거리를 달고 그냥 적당히 공부하는 척을 한 거지.군대에 갔을 때, 나는 또 하나의 기회가 있었어.전투병이 아니었고, 공부할 시간도 있는 보직이었음에도그냥 군 전역일만 세면서 하루하루 흘리기만 했지.그때, 공부하던 전우 몇몇은 다시 수능을 보고이전과 다른 인생의 기회 범위를 늘려갔지.지나간 과거들을 하나하나 나열하자면,참 부끄러운 일이 많아.나는 최선을 다 하지 않았다는 증명이지.나는 그들이 땀 흘리고,그들이 잠 못 이루고,그들이 여러 가지를 포기하면서꿈을 설계할 때...난 잠들어 있었거든.너는 주변에 좋은 대학/직장에 간 친구의 소식을 들으면 어때?스스로에게 솔직하게 물어봐봐.만약 내가 좋은 대학/직장에 들어갔을 때,정말 그 결과가 정상적인 결과인가.그들만큼 내가 최선을 다 했던가.치열하게 살아왔다는 것은 어떻게 증명할 것인가.너는 열심히 살아왔어.나도 열심히 살아왔어.근데 치열하게 살아왔는지는 다시 생각해봐야 해.그냥 정해져 있는 방식에서 다들 열심히 살아가는 것은누구나 할 수 있는 일이야.치열하다는 것은 다른 거야.열심히라는 것은 틀 안에서 결과보다는 과정에 의미를 두는 최소한의 노력 같은 거야.치열이라는 것은 수단과 방법을 가리지 않고 목적을 달성하기 위한 강한 노력이랄까?목숨을 건 듯한 절실함이 와닿을때,"열심"을  "치열"이라는 단어로 바꾸어주는차이를 만들어 주지.열심히 준비하는 것과 치열하게 준비하는 것의 차이를 예를 들자면,비즈니스 상 협상을 자주 하게 되는데...열심히 준비할 때는시간을 잡고 장소를 잡고, 자료를 준비하고,우리의 협상안과 대안을 준비해.각 파트 담당자들은 열심히 맡은 일을 수행하지.왜냐면 우리에게 맡겨진 일을 완수해야 하니까.치열하게 준비할 때는...우리에게 유리한 시간을 고르고,장소 선정도 신경 쓰게 되지.경쟁사와 차별성을 부각할 자료뿐만 아니라어떤 방식으로 소개할까도 고민하게 되지.상대방이 2명이면 우리 측도 최소한 2명 수를 맞춰주는 것도,상대 회사가 우리를 만나는 이유에 대한 조사와그 이유를 충족시킬 수 있는 방법에 대한 시나리오도 짜는 거야.왜냐면.... 맡겨진 목적을 이루어야 하니까.너무 비약하는 것 같니?너는 취업을 위해 스펙을 만들었겠지.많은 비용과 시간, 노력을 들이며 열심히 만들어왔어.근데 너의 경쟁자들은 다들 그렇게 열심히 만들어왔어.다들 열심히 만들어왔어.어떤 친구는 꼭 어디를 취업하기로 마음먹었어.그럼 그 회사에 대한 조사부터 시작해서 어떤 스펙이 먹힐지,어떤 부분을 회사가 중시하는지에 대한 것부터 시작하겠지.전략을 짜고 나면, 그다음은 열심히 만들 거야.무언가 차별성을 어필할 거야.냉정하게 그 차별성이 넘사벽의 스펙일 수도 있어.하지만 그 차별성이 스펙이 아닌 어떤 것일 수도 있어.치열해질 필요가 있어.그냥 "열심히"가 아니라,진짜 고통스러운 집중과속이 쓰릴 정도의 고민의 끝에나오는 무언가를 찾아야 하지.내가지금의 젊은 너에게그래도 희망이 있다고 한다면,너는 반발할 수도 있어.지금이 최악이라고 생각하니?아니,아직 너는 살아갈 날 들이 더 많이 남아있어.나이가 많은 세대를 옹호하는 이야기는 아니지만,괜히 어른들이 6.25 이후를 말하는 게 아냐.팩트로 말하자면,전쟁 직후의 세대들은 하루 먹고사는 게 과제였어.그 당시 젊은 세대는 꿈이라는 것보다,서바이벌이 가장 큰 고민이었어.그런 경험을 했던 세대들의 입장에서는지금의 세상은 풍요롭게 보일 거야.한국 경제가 급성장하던 시절,그때 호황의 혜택을 모든 세대가 누린 것 같아?아니,그때도 있는 분들은 더 챙기고,없는 분들은 늘 가난했어.지금의 경제상황과 시스템에 잘못된 게 많다는 것은나도 공감하고, 문제가 있다는 걸 알아.그러나 우리에겐세상을 바꿀 수 있는 힘이 있어.얼마 전에정치적인 큰 변화가 있었음을 기억해.아무것도 안 하고 무력하게 바라보기만 했다면일어나지 않았을 변화였어.행동하니까 바뀌는 것들이 있어.기억해.네가 생각한 것보다 실제로 행동하면생각보다는 쉽게 해결될 수 있는 것들이 있어."이생망"(이 생애는 망했어)이 신조어를 매우 싫어해.이 생애가 망한 건지, 흥한 건지는아직 누구도 몰라.다만,앞으로 망하는 길로 갈 건지,흥하는 길로 갈 건지를 결정하는순간순간의 선택과 행동이라는길 위에 있을 뿐이야.먼저 포기하지 마.나를 봐줘.내 소개를 했지만,난 "이생망"이 아니야.하루하루, 매 순간마다점을 찍어가고 있어.하나의 선을 만들고,면을 만들고,그 위에 채색을 할 시간을 만들고 있어.그게 내 나이 40에 될지,50에 될지, 90에 될지,혹은 오지 않을지는 모르잖아.어쨌든 지금 멈추고,포기한 순간보다는변화가 있을 거야.이 전보다는 더 나아진 내가 있을 거야.여전히 가난할 수도 있겠지만,나는 이 전보다는 달라져 있을 거야.스타트업 대표로서많은 두려움이 있어.제품에 대한 고객의 반응,시장성에 대한 불확실성,경쟁사의 굳건한 시장지배력,자금에 대한 압박...바로 한 치 앞을 알 수 없어.나는 나 혼자가 아니라,많은 사람들의 인생을 짊어지고 걷고 있어.이런 부담감 때문에 포기할까?아니면, 이런 부담감 때문이라도 더 분발할까?제품에 대한 반응이 두려워서,시장에 대한 불확실성이 두려워서,경쟁사가 두려워서,환경이 두려워서,포기할까?아니면,그럴수록 더 길을 찾고, 부딪힐까?내가 둘로 나누어져서두 가지 선택을 각각 했다면,그렇게 몇 년이 더 흐르고 나면,무언가는 크게 달라져 있겠지?어차피...아무것도 안 하면, 망해.포기하면, 항상 나는 그대로야.근데 움직이면, 망하더라도 뭔가 달라져 있어.근데 행동하면, 예전의 나와는 뭔가 달라져 있어.희망이 없다고 말하지 말자.헬조선이니, 망할 민국이라느니,이생 망이라는 소리는 하지 말자.지금 너는 깊은 어두움 속에 있어.손으로 벽을 더듬고, 움직이다 보면너의 위치는 처음과는 달라.계속 더듬다 보면,희미한 불빛이 눈에 들어와서네가 처음 있던 그곳이 꽉 막힌 어둠 속이 아니라동굴이었다는 걸 깨달을 때가 올 거야.그리고 실낱같은 빛을 의지해 달리다 보면,동굴의 끝에 다다를 날이 올 거야.물론 그 날이 언제일지는 나도 모르고,너도 몰라.반대로,잘못된 길이라서.... 더 깊이 동굴 안 쪽으로들어갈 수도 있음을 인정해.근데 그때그때마다...너의 감각과 늘어가는 지식과 경험이잘못된 방향이라는 것을 인지할 수도 있잖아.방향을 돌이킬 수 있는 선택의 시간이 올 수 있잖아.처음 있던 그 자리에서 머물러 버리면,움직일 생각조차 포기해 버리면,너에게 선택의 기회조차 오지 않을 거야.그리고...넌 절대로 혼자가 아니야.젊은 20대가 고립되었다고 생각하니?아니,너의 세대에 공감하는 사람들이 생각보다 많아.20대보다 30, 40대가더 변화에 지지한 사실이투표로 증명되잖아.(이것은 객관적인 사실이야)상대적인 시각으로 보면, 이견이 생길 수 있지만,절대적인 사실로 보면, 서로 공감할 수 있는 부분들이 보여.그리고 이해할 수 있는 영역을 통해 보다 나은 결과를 만들 수 있지.공감하는 누군가가 있어.길을 헤매는 사람들이 너만 있는 게 아니기에,함께 길을 찾는 방법도 있어.네가 길을 헤매는 것을 바라보고,손을 내밀어 줄 수 있는 사람도 어딘가에는 있어.세상은 절대로 혼자가 아니야.외톨이라고 생각하는 틀에 스스로를 가둔 것일 뿐.각자의 틀을 깨버리면,외톨이들이 모여서 "우리"가 될 수 있어.집단지성, 연합, 공동체...생각보다 우리들이 할 수 있는 것들이 많아.책은 마지막 장까지 다 읽어야 결말을 알 수 있어.너는 지금 책의 초반부를 읽고 있어.일찍 결말을 단정 지을 필요가 없어.너의 이야기가 마지막에 대반전의 해피엔딩 일 수도 있어.남은 페이지가 아직 많이 남아있다고.난 너를 응원해.그리고 난 나를 응원해.우리를 응원하고 있어.왜냐고?움직이면 변한다는 것을 믿으니까.행동하면 바뀌는 것을 믿으니까.환경에, 세상에지쳐있을 너에게그나마 내가 해 줄 수 있는 말은"너를 쉽게 포기하지 마"나도 포기하지 않을 거야.나는 꼭 내가 꿈꾸던 사업가가 될 거야.그래서 더 많은 너와 소통하고 공감하고 싶어.그래서 더 많은 너와 맥주 한 잔 나누고 싶어.그래서 더 많은 너와 세상을 바꾸어 나가고 싶어.나는 오늘도 조금이지만 앞으로 전진했어.내일도 조금이지만 앞으로 나가려고 다짐하고 있어.가끔은 뒤로 많이 물러나야 할 때도 있지만,그래도 꾸준히 앞을 향해 나아가고 있어.나와 함께 동행하지 않을래?너 역시도....오늘, 내일, 모레...조금씩이지만 앞으로 나아가는 습관을만들어가면 어떨까?그리고 아직은 드러나지 않지만,나와 비슷한 생각, 나보다 더 체계적이고나 이상으로 앞서서 세상을 바꾸려고 애쓰고 있는스타트업 대표들도 있어.난 앞서있는 그분들을 보고 뒤따라가고,배우면서 성장하고 있지.물론여전히 본받으면 안 될 스타트업 대표들이 많아.여전히 방해하고, 억압하고, 지배하려는 기득권층이 강해.여전히 엉터리인 시스템은 견고하고, 높은 장벽과 천장이 있어.근데우리들이 더 모이고,더 성장하고, 더 늘어나면...세상이 이전보다는 조금씩일지라도더 좋게 바뀔 수 있지 않을까?딱 10년 후에 이 글을 너와 같이 보면서웃으며 기쁨의 건배 나누는 날을 꿈 꿔본다.마지막으로 덧붙이면,여기에 적어놓은 글은...20대에 내가 방황하던 시절,후회하고 느꼈던 점들을 남겼던메모와 일기장을 되읽다가...쓰게 되었어^^#클린그린 #스타트업 #스타트업창업 #창업자 #초기창업 #조언 #고민
조회수 2594

웹 플러그인 개발기 - iframe의 재발견

채널 웹 플러그인을 개발하며 겪은 문제들과 우리 팀의 해결책을 소개합니다. 채널 웹 플러그인은 SDK의 형태로 고객사 웹사이트에 붙어서 고객이 매니저와 대화할 수 있는 인터페이스를 제공합니다. 이 글을 쓰고 있는 당시 약 2300개의 채널이 개설되었고, 하루 약 180만 명의 일반 유저가 웹사이트에 붙은 저희 플러그인을 보고 있습니다.플러그인은 고객사 웹사이트 (이하 호스트 웹사이트라고 함) 의 HTML 도큐멘트에 붙어서 실행됩니다. 이 말은 실행 환경 (자바스크립트, CSS, DOM 환경 등) 을 우리가 컨트롤하지 못한다는 것을 의미합니다. 이것이 일반적인 웹서비스와 플러그인 개발의 가장 큰 차이점이고 사실상 많은 이슈들은 이 차이로부터 기인합니다. 또 이것에 대응하기 위해 프레임워크의 선택부터 개발, 배포에 이르기까지 훨씬 신경 써야할 부분이 많았습니다. 이 글에서는 그 중 호스트 웹사이트와의 실행 환경 공유에 따른 문제들을 자바스크립트와 CSS로 나누어 나열하고 iframe 을 이용하여 해결한 과정에 대해 설명하겠습니다.채널 홈페이지에 웹 플러그인이 붙은 모습1. 자바스크립트와 관련된 이슈1-1. 네임스페이스 공유에 따른 충돌 문제브라우저에서 자바스크립트는 글로벌 네임스페이스를 공유합니다. 이 속성 때문에 플러그인에서 window 를 접근해서 수정한다던가 글로벌로 객체를 정의해서 사용하면 호스트 웹사이트에 영향을 미칠 수 있습니다. 이 문제는 코딩할 때 아래 항목을 주의하는 정도로 큰 비용 없이 방지할 수 있습니다.플러그인의 최상위 네임스페이스를 만든다.(ex. window.CHPlugin)플러그인에서 사용하는 모든 객체는 최상위 네임스페이스 아래에 정의되도록 한다.(ex. window.CHPlugin.outObject)window 객체에 접근할 때는 수정하거나 추가하는 부분이 없도록 주의한다.(ex. [removed] = function(){}와 같은 코드는 사용하면 안 됨. 기존에 [removed] 이벤트가 날아감)사용하는 라이브러리들 중에 window에 바인딩하는 것이 없는지 체크하고 있으면 직접 수정하여 모듈화한다. (ex. lodash는 기본적으로 window 에 _ 객체를 생성함)이건 사실 플러그인이 아니더라도 주의해야하는 거죠..1-2. 에러로 인한 오동작 가능성더 어려운 문제는 바로 예측하기 어려운 오동작의 가능성이 있다는 것입니다. 호스트 웹사이트에서 동작하는 자바스크립트에서 에러가 날 경우 플러그인의 동작에도 영향을 미칠 수 있으며, 반대로 플러그인에서 에러가 발생해서 호스트 웹사이트의 코드 실행을 멈출 수 있다는 것입니다. 양방향으로 영향을 미칠 수 있는 것이죠. 특히 후자의 경우는 우리의 실수로 고객사의 서비스에 피해를 끼칠 수 있으니 쉽게 넘길 문제는 아닙니다.아이디어 1: try/catch를 적절히 처리한다?이를 해결하기 위해 가장 쉽게 생각할 수 있는 방법으로는 호스트 웹사이트 쪽에서 try/catch를 적절하게 처리하도록 가이드를 하는 방법입니다. 예를 들어 플러그인 코드의 바깥 쪽에 try/catch처리를 하고 호스트 웹사이트의 자바스크립트에도 적당하게 처리를 하면 되지만 이 방법은 현실적으로 어려움이 있습니다. 우리의 타겟 고객사들은 일반 쇼핑몰들이고 이들은 대부분 개발자가 없거나 쇼핑몰 빌더를 이용해 만들어진 사이트들이기 때문에 개발력이 없는 경우가 많습니다. 또 설사 개발력이 있다 하더라도 플러그인을 붙이기 위해 가이드할 것이 너무 늘어나는 문제가 있죠.아이디어 2: 자바스크립트 실행 순서를 강제한다?생각해볼 수 있는 또 다른 방법은 호스트 웹사이트의 코드와 플러그인 코드의 실행 순서를 명확히 정해서 한 방향의 영향이라도 차단하는 것입니다. 예를 들어 플러그인 코드가 호스트 웹사이트의 코드보다 항상 먼저 실행되도록 고객사에게 가이드한다면 우리의 코드는 항상 문제 없이 실행될 것이고 호스트 웹사이트에서 에러가 발생하더라도 영향을 받지 않을 것입니다. 하지만 이 방법 역시 마음에 들지 않았는데요 양방향의 영향을 모두 차단하지는 못하기 때문입니다. 그리고 더욱 큰 문제는 플러그인은 한 번 실행되고 끝나는 단순한 스크립트가 아니라 계속해서 실행이 되는 애플리케이션이기 때문에 사실상 소용이 없습니다.2. CSS와 관련된 이슈채널 웹 플러그인은 UI도 포함합니다. 플러그인의 DOM이 호스트 웹사이트에 붙어있기 때문에 플러그인의 스타일을 정의하는 CSS도 호스트 웹사이트에 Inject 되어야합니다. 호스트 웹사이트의 CSS와 플러그인의 CSS가 같은 스코프에 존재하기 때문에 우리가 의도한 스타일이 제대로 표현되지 않을 가능성이 있습니다. 실제로 이 문제는 런칭 초기에 우리를 가장 괴롭혔던 문제입니다. 쉽게 생각해볼 수 있는 방법은 아래와 같습니다.플러그인의 CSS에 네임스페이스를 둔다.(플러그인 CSS가 호스트 웹사이트 CSS에 주는 영향을 차단함)CSS 의 우선순위를 이해하고 플러그인 CSS의 우선순위가 항상 높도록 처리한다. (CSS Specificity 링크 참조)하지만 위처럼 처리하더라도 모든 경우에 대해 해결이 되는 것은 아닙니다. 주된 이유는 우리가 개발을 할 때 모든 CSS 속성을 정의하지 않기 때문입니다. 플러그인에서 정의하지 않은 속성을 호스트 웹사이트에서 사용한다면 호스트 웹사이트의 스타일이 적용될 것입니다. 또 특수한 경우이긴 하지만 만약 호스트 웹사이트에 !important 가 적용되어 있다면 그 속성이 덮어씌워지게 됩니다.!important는 사용하지 맙시다..ㅜ아이디어: 스타일 Normalizing?여기에서 의미하는 Normalizing은 모든 DOM 엘리먼트에 가능한 모든 CSS 속성의 기본값을 정의하는 것을 의미합니다. 크로미움을 기준으로 모든 CSS 속성 목록은 이 곳을 참조하시면 됩니다. 이것을 바탕으로 normalize.css를 만들어 적용했습니다.이 방법을 적용한 이후로는 스타일이 오버라이딩되는 문제는 어느 정도 해결되었습니다. 물론 !important에 대한 대응은 여전히 되지 않지만요. 그런데 예상하지 못한 부작용이 발생했는데 첫번째는 디버깅할 때 크롬 인스펙터가 도저히 사용하지 못할 정도로 느리다는 것입니다. 두번째는 CSS가 inheritance 가 안 되고 기본 엘리먼트 셀렉터의 우선순위가 높아서 직접 코딩해야하는 CSS가 2~3배는 길어지는 불편함입니다. 위 두 이유로 개발 피로도가 상당히 높아져서 머지 않아 다른 방법을 알아보게 되었습니다.3. iframe 도입위에 나열한 문제들을 해결할 수 있는 아이디어로 iframe을 리서치하게 되었습니다. 사실 iframe은 최근 웹서비스에서는 잘 사용하지 않기도 하고, 보통은 사용하지 않는 것을 권장하기도 하죠. 따라서 저희 팀에서도 처음에는 고려사항이 아니었는데요 우리와 유사하게 채팅 인터페이스를 제공하는 인터콤에서 iframe 을 적용한 것으로부터 아이디어를 얻어왔습니다.원래 목적에 맞게 사용하지 않으면 독이 됩니다.iframe은 HTML 도큐멘트 안에서 또 다른 도큐멘트를 임베드합니다. iframe 내에 있는 도큐멘트는 호스트 도큐멘트와 자바스크립트 스코프가 분리되어 있고, CSS가 적용되는 스코프 역시 분리되어 있습니다.이런 속성 때문에 위에 나열한 문제들을 원천 차단할 수 있습니다. 자바스크립트 스코프가 분리되어 있기 때문에 글로벌 네임스페이스에 접근해도 호스트 웹사이트에는 전혀 영향이 없고, 자바스크립트의 에러로 인해 다른 쪽 자바스크립트까지 실행을 멈추는 오동작을 막을 수 있습니다. CSS 역시 Normalizing 을 하지 않더라도 호스트 웹사이트와 플러그인은 완벽히 분리가 됩니다.4. iframe 의 단점iframe을 도입하여 1, 2번에 나열한 문제들은 해결했지만 그에 따른 작은 문제들도 발생했습니다. 첫번째는 iframe도입 시 가장 먼저 고민해야할 부분인데 바로 3rd-party cookie 문제입니다. iframe 안에서 로드되는 도큐멘트는 3rd-party 컨텐츠로 인식합니다. IE에서는 기본 설정이 3rd-party cookie 허용을 하지 않기 때문에 쿠키를 사용해서 인증을 구현한 경우 문제가 될 수 있습니다.두번째는 도큐멘트가 분리됨에 따라 발생하는 코딩상의 여러 불편함들입니다. 여기에서는 범위를 벗어나 더 자세하게는 설명하지 않겠지만 도큐멘트가 분리되니 조금 더 신경써야할 것들이 있었습니다.저희 팀의 경우 쿠키 인증 방식이 아닌 토큰 형태의 인증도 지원을 하고 있었기 때문에 첫번째는 크게 문제되지 않았고 두번째 문제도 얻는 이득에 비하면 불편함을 감수하는 편이 훨씬 좋다는 판단이 들어서 도입을 결정했습니다.마무리플러그인 개발을 시작할 당시에 우리 팀은 웹 SDK 형태의 프로젝트 개발 경험이 없었습니다. 리서치를 해도 플러그인 개발과 관련된 아티클이나 리소스 그리고 보일러플레이트 프로젝트도 많지 않았습니다. 프레임워크, 아키텍쳐를 선택하는 것부터 프로젝트를 구성하는 것부터 개발, 배포 및 운영에 이르기까지 일반적인 웹서비스를 개발할 때와 조금 다른 고민들을 해왔던 것 같습니다. 앞으로 저희가 해 온 고민을 공유하려고 합니다. 저희와 같은 플러그인, SDK 형태의 제품을 개발하고 계신 분들에게 도움이 되었으면 좋겠습니다.#조이코퍼레이션 #개발자 #개발팀 #인사이트 #경험공유 #일지
조회수 766

앱 재사용율(Retention)이 앱 설치수보다 더 중요한 이유

사용자획득에 집중된 모바일 마케팅모바일앱 시장 내 경쟁이 치열해지면서, 새로운 앱 사용자들을 유치하기 위한 마케팅 비용은 점차 상승하고 있습니다. 글로벌 조사에 따르면, CPI (Cost per Install) 광고 단가는 검색광고채널의 경우 평균 $8.63, SNS 플랫폼은 $5.84, 배너 및 비디오 채널은 $2.99로 한 명의 새로운 유저를 데려오기 위해 높은 비용이 든다는 것을 알 수 있습니다. ( Souce : Singular )지금까지 대다수 모바일 마케팅의 성과 척도는 앱 사용자 획득에 있었기 때문에, 마케터들은 높은 단가에도 불구하고 광고를 통해 최대한 많은 사용자들이 앱을 설치하도록 만드는데 집중했습니다. (구글플레이 스토어의 앱인스톨 광고 )낮은 앱 재사용율(RETENTION), 이유는?하지만 그들이 간과했던 것은 대다수의 앱을 설치했던 사용자들 중에 지속적으로 앱을 사용하는 비율이 매우 낮다는 점입니다. Appboy의 2016년 글로벌 리포트에 따르면, 앱을 설치한 다음날 앱을 재사용하는 사용자 비율은 평균적으로 25% 보다 낮게 나타났습니다. 7일 뒤에 재사용율(retention rate)은 11%로 떨어졌고, 45일 뒤에는 5% 미만, 90일 뒤에는 4.1%를 기록했습니다.즉, 앱 설치형 광고를 통해 100명의 사람이 앱을 설치했다 하더라도, 그 중 다음날 앱을 재접속하는 사람은 25명 미만이고, 일주일 뒤에는 11명, 90일 뒤에는 오직 100명 중 4명만이 앱을 사용한다는 의미입니다.(Source; Appboy, Retention Report 2016)이와 같은 수치는 다른 조사에서도 유사하게 나타나고 있습니다. Quettra의 조사에 따르면, 평균적으로 앱 (안드로이드 기준) 을 설치한 다음날 77% 사용자가 앱을 떠나고, 30일 내에 90%, 90일 후에는 95%가 앱을 삭제하거나 더이상 방문하지 않는 것으로 나타났습니다.(Source; Quettra)실제 Wisetracker 를 이용하는 앱 서비스의 retention report를 보아도 위와 유사한 수치를 발견할 수 있습니다.(Source; Wisetracker의 retention report)이와 같은 낮은 retention (재사용율) 이 나타나는 이유는 하루에도 수많은 앱들이 생겨나는 상황에서 사용자들은 다양한 앱을 테스트하는 동시에, 1~3일의 짧은 시간 안에 그 서비스를 지속적으로 사용할지 안 할지를 결정하기 때문입니다.즉, 앱을 처음 방문했을 시 사용자의 흥미를 끌지 못하면 다음날, 일주일, 3달 뒤에도 그가 앱을 지속적으로 사용할 확률은 매우 낮다고 볼 수 있습니다.앱 재사용율(RETENTION)을 높이기 위한 3가지 전략사용자가 앱에 처음 접속 시, 서비스를 쉽게 이해하고 매력적으로 느끼는지 파악합니다.앱 서비스의 회원가입 단계가 복잡하거나, UI/UX가 사용하기 어렵다면 처음 사용자의 경우 서비스 이용을 포기할 확률이 높습니다. 앱을 설치한 사용자들이 회원가입 단계에서 이탈율은 얼마인지, 처음 사용자들의 페이지뷰, 체류시간은 얼마인지에 대한 데이터를 통해 처음 사용자들이 우리 서비스를 문제없이 사용하고 있는지 파악합니다. 만일 회원가입 특정 단계에서 이탈율이 높다거나, 체류시간이 반복사용자에 대해 짧다면 처음 사용자들이 우리 서비스를 어려워하거나 매력적으로 느끼지 못하고 있기 때문에 서비스 개선을 통해 retention을 높일 수 있습니다.타겟팅 푸시메시지를 통해 사용자가 앱을 재방문하도록 유도합니다.푸시메시지는 사용자가 앱을 재방문하도록 유도하는 효과적인 방법 중에 하나입니다. 푸시메시지를 더욱 효과적으로 사용하기 위해서는 개개인에 맞춤화된 메시지 전달이 중요합니다. Wisetracker에서는 우리 서비스의 처음 방문자들의 데모그래픽 또는 방문행동 특성을 기반으로 ADID/IDFA를 추출해 각 그룹마다 타겟팅된 메시지를 보낼 수 있습니다.앱 사용자에게 개인 맞춤 리타겟팅 광고 및 콘텐츠를 보여줍니다.만약 커머스 앱을 다운받아 방문한 처음 사용자가 몇 개의 상품을 둘러본 뒤 앱을 종료했다면, 그에게 리타겟팅 광고를 통해 해당 상품을 다시 보여주는 것이 retention 을 높이는데 가장 효과적일 것입니다. 우리 서비스에 방문한 사용자들이 조회했던 콘텐츠 정보를 기반으로, 리마켓팅 광고를 진행하거나, 해당 사용자가 앱에 접속 시 관련 콘텐츠를 보여줌으로써 retention 을 높일 수 있습니다.사용자 유지 > 사용자 획득기존 앱 마케팅 캠페인의 목표를 사용자 획득으로만 잡으셨다면, 지금 앱 서비스의 retention 리포트를 확인해 보시길 바랍니다. 하루가 지나고, 30일이 지난 뒤 재사용율이 높지 않다면 우리 비즈니스의 핵심 목표는 사용자 획득이 아닌 재사용율(retention) 을 높이고 앱 삭제율을 낮추는 것으로 나아가야 합니다. 2017년에는 Wisetracker를 통해 정확한 In-app 데이터를 분석하고, 앱 사용자들을 보다 깊게 이해함으로써 높은 retention 을 달성할 수 있는 한 해가 되시길 바랍니다.* WISETRACKER는 모바일 광고 성과 측정부터 In-app 이용자/컨텐츠 분석, 푸시메시지 최적화까지 지원하는 모바일 통합 분석/타겟팅 솔루션입니다. 와이즈트래커 솔루션의 무료체험을 원하실 경우 여기를 클릭해주세요.* WISETRACKER가 제공하는 무료 데이터 분석 컨설팅를 원하신다면 여기를 클릭해주세요.#와이즈트래커 #앱마케팅 #마케터 #인사이트 #꿀팁 #조언 
조회수 1188

통제의 세상에서 꽃을 피울 수 있을까

1년 전 이맘때만 하더라도 나는 국내에서 꽤 잘 나간다는 대기업에서 근무를 하고 있었다. 나름 내부에서 평가도 좋게 받고 있다고 생각했고, 나름은 남들이 부러워할만한 연봉을 받으며 직장을 다니고 있었다. 회사 내에서 나의 목표도 설정해놓고 한 걸음씩 한 걸음씩 그것에 다가가고 있는 느낌도 받고 있었다.근로계약서상 근로시간은 아침 9시부터였지만 업무시간엔 업무를 해야 한다며 8시 정도에 회의를 시작했다. 아침 5시가 조금 넘으면 일어나서 7시가 조금 넘은 시각에 회사에 도착했다. 회의시간은 업무에 관하여 말할 수 있는 몇 안 되는 시간이지만 내 몫만 얘기한 후에는 말하면 안 된다. 정해진 회의 시간을 넘겨버리게 되고 혹여나 버릇없게 보이면 안 되기 때문이다. 주말에는 회사에서 나를 내버려두면 매일 놀기만 할 것으로 생각했는지 끊임없이 사이버 교육에 나를 입과시키고 특정 자격증들을 취득할 것을 요구했다. 회사에서 시키는 것이니깐 이왕 할 거 열심히 하자라는 생각으로 착실히 공부하고 좋은 성적을 취득해나갔다. 근로계약서에 일하다 졸리면 잠을 잔다라는 계약조건은 없기 때문에 무척 피곤하여 잠이 쏟아지면 화장실로 가서 변기 위에서 잠을 자곤 했다. 피곤해서 눈을 감고 있으면 누군가가 계속 내 등을 밀며 앞으로 걸어가고 있는 기분의 나날이었다.‘나의 시간에 대해 조금만 더 나에게 통제력이 주어진다면, 자율성이 주어진다면 나 자신과 회사에 훨씬 도움이 될 만한 것들에 대하여 준비할 수 있는데!’자연스럽게 입사 초기에 비하여 내부 성적은 떨어져 갔다. 최상위권을 유지했던 성적은 커트라인 부근에서 놀고 있었다. 점점 회사에 대한 불만은 늘어갔다. 무엇보다 가장 큰 불만은 나의 시간 중 압도적으로 큰 부분을 차지하고 있는 주중 업무시간이었다. 대기업의 특징은 이미 모든 업무의 매뉴얼화가 상당 부분 이루어졌다는 점이다. 가끔은 다른 생각을 하면서 일을 해도 될 정도로 업무 시간 중에 고민하고 문제 해결을 해나가는 시간이 없었다. 항상 주중엔 회사에서 나에게 부여한 일을 하고, 그러면서 피곤해진 몸을 이끌고 주말에 나의 성장을 준비하는 과정의 연속이었다. 글을 읽다 보면 어느 정도 눈치를 챘겠지만, 나는 결국 퇴사하였다. 일을 하면서 동시에 성장하는 경험을 해보고 싶었다. 일과 배움이 따로 떨어져 있는 것은 체력적으로나 정신적으로 경험하고 싶지 않은 것이었다. 대부분의 기업의 업무가 매뉴얼화되어 있는 마당에 또다시 일정 규모 이상의 기업을 가고 싶지 않았다.퇴사를 한 후에 스타트업에 합류한 지 이제 10개월 정도 되었는데, 어쩔 수 없이 양쪽을 비교해보게 된다. 지금도 내가 퇴사한 회사는 무척이나 잘 나가고 있다. 당연한 얘기지만 나 같은 사람 한 명이 퇴사하여도 회사에는 아무런 영향이 없다. 누군가가 매우 빠른 속도로 나의 업무를 대체했을 것이다. 그와 나는 같은 매뉴얼을 보고 일을 했기 때문에.  현재 일하고 있는 스타트업은 어떨까. 그에 앞서, 난 이 글이 결코 ‘스타트업이 만능이자 최고’라는 식으로 읽히지 않았으면 좋겠다. 다만 너무나 큰 조직에 잠시나마 몸을 담으면서 느꼈던 여러 아쉬움을 해결할 수 있는 열쇠를 스타트업이라는 작은 조직에서 찾을 수 있었고, 이러한 소중한 가치가 훼손되지 않고 널리 전파되었으면 하는 마음에 조심스럽게 적고 있는 중이다.이곳에서 일을 하며 느낀 가장 큰 차이점은 구성원들이 나에 대해 보장해주는 자율성이다. 일을 하다가 졸음이 와서 쇼파에서 자거나 카페에서 노트북으로 일을 한다고 하더라도 이에 대하여 제한을 두는 것이 전혀 없다. 기본적으로 나를 포함한 구성원들이 서로에 대한 신뢰에 기반한 업무 환경 속에 지내고 있다. 이러한 신뢰가 밑받침되어 있다 보니 회의나 논의를 진행할 때 감정이 배제될 수 있다. 격렬하고 진지하고 깊게 논의를 하고도 회의실 밖에서는 다시 아무렇지도 않게 업무에 복귀할 수 있는 것은 논리와 근거에 바탕을 둔 회의를 진행할 수 있어서가 아닐까. 평소에 본인이 무시하거나 감정이 있던 상대방으로부터 피드백을 받을 때, 그때부터 회의가 감정에 의하여 산으로 가는 경우 종종 경험하였다. 기본적으로 구성원에 대한 신뢰는 모든 일의 기본이다.이러한 분위기가 형성되니 그다음으로는 내가 변하기 시작했다. 스스로 팀에 도움이 되고 필요한 일을 찾아보기 시작하였고, 팀원의 도움이 필요한 경우에는 찾아가 설명을 하고 프로젝트 팀을 구성하기도 하였다. 자율은 책임을 수반하기 때문에 그동안 느낄 수 없었던 최고조의 책임감 속에 일하기 시작했다. 매일매일 진행 상황에 대하여 보고할 필요도 없었고, 모두가 자신의 일들이 워낙 많아 서로의 일에 대하여 큰 관심을 보일 수 없음에도 불구하고 ‘나의 일’이라는 책임감 아래 시간 가는 줄 모르고 끊임없이 고민하고 또 생각하였다. 나는 내가 전 직장에서 잃어버리고 말았던 자발성이 요즘 기업들이 자주 외치는 혁신과 도전의 핵심 열쇠라고 생각한다. 그렇다면 구성원들의 자발성을 고취시키기 위해서는 조직은 어떤 것을 제공해주어야 하는가? 앞에서 어느 정도 내가 생각하는 답을 언급한 대로, 일과 배움의 일치성이 높을수록 구성원의 자발성은 높아질 것이라 생각한다. 회사에서 일을 하면서 본인이 성장하고 있다는 느낌을 받게 되면 그것은 어느 정도까지의 연봉 갭까지도 커버할 수 있으며, 더 나아가 회사에 대한 로열티도 강하게 상승시킬 수 있다. 당연히 주중에 일을 하며 머리를 짜내며 성장했기 때문에 주말엔 잠시 몸과 마음에 휴식을 주며 마음 편히 독서도 하고 사람들도 만나는 선순환 구조까지 만들 수 있다.퇴사한 전 회사에서 갖게 된 고민이었던 일과 배움의 일치성을 높이기 위한 방안 중 하나를 현재 일하고 있는 회사에서 찾았다. 바로 배울만한 동료들이 주변에 가득한 것인데, 같은 목표를 바라보는 뛰어난 팀원들이 주변에 있으며 끊임없이 토론하고 의견을 주고받을 수 있는 환경이 조성되어 있으니 일을 열심히 하면서도 자극받고 내가 성장하고 있다는 느낌을 받고 있다. 실제로 개인의 성장이라 함은 누군가가 객관적 지표로 측정할 수 없기 때문에 결국 당사자의 자기 최면이 중요한 것인데, 이렇게 함으로써 능동적으로 업무에 참여할 수 있게 되었다. 그렇다면 주변에 같은 목표를 생각하고 있는 뛰어난 사람이 많기만 하면 일과 배움의 일치성이 높아지는 것인가? 앞에서 약간의 힌트가 있었지만 이때에는 자유로운 토론을 할 수 있는 분위기가 조성되어 있어야 한다. 이 점이 현재 우리나라의 대다수 큰 기업들의 고민이라 생각된다. 현재 우리나라 기업에는 뛰어난 분들이 많고 매년 대졸자 분들 중에서도 매우 능력 있는 분들이 합류하고 있다. 이는 즉, 사람의 문제는 아니라는 것이다. 도전과 창의 그리고 직원들의 근무기강 통제가 공존하고 있는 현재 우리나라 대부분 기업의 현실이다. 회의 시간에 회의와 보고의 구분이 애매한 것 또한 현실이다. 회의라기보단 보고하고 질책당하는 자리이며, 새로운 목표를 강제로 부여받는 자리이기도 하다. 심지어 창의적인 아이디어마저 한 사람당 몇 개씩 뽑아오라고 할당하기도 한다. 과도한 통제의 문제라고 생각한다. 구성원들의 업무에 관한 대화 행위 자체도 통제된 시간과 장소에서만 가능하며, 대부분 기업의 경우는 회의시간, 식사시간, 회식 시간으로 되어있다. 심지어 자유롭지도 않은 시간들이다. 매우 거창해 보이는 도전과 혁신이란 가치는 각 조직에서 유지하고 있는 통제력을 조금씩만 낮춰도 훨씬 가깝게 다가올 수 있다. 구성원들의 자발적인 참여를 막았던 조직의 통제는 구성원들에 대한 불신이 바탕이 되어있다. 따라서 통제와 혁신은 절대로 함께 할 수 없는 단어들이다. 즉, 현재 우리나라 기업들이 주장하는 통제 속의 혁신은 불가능하다는 것이다. 요즘 정부, 기업 가릴 것 없이 도전과 혁신을 외치고 있어서 들어도 아무런 감흥이 없는 정도의 단어가 되었고 점점 더 추상적인 것들이 되고 있다. 혁신을 위한 행동 수칙 10 계명을 만드는 회사도 있고, 회장님과 신입사원의 자유로운 대화시간이라는 통제된 시간을 만들어 통제된 모습을 사진으로 수백 장씩 담기도 한다. 모든 것의 매뉴얼화를 해오다 보니 도전과 혁신, 창의력마저도 매뉴얼화하여 쉽게 쉽게 생산하고 싶은 마음이 앞서 만들어진 결과물이다.이런 반문이 올 수 있다. 스타트업은 조직이 작기 때문에 이러한 통제 속에 업무를 할 필요성이 없지만, 일정 규모의 대기업이 되면 자율성의 부여는 곧 조직의 엄청난 혼란을 야기한다는 것이다. 하지만 내가 이야기하고 있는 ‘통제’와 ‘신뢰’, ‘자발성’ 은 거창한 것이 아니다. 수천 명, 수만 명이 일하는 대기업에서 명문화된 규정을 상당 부분 없애 구성원들에게 해방감을 안겨주자는 극단적인 글이 아니다. 최고의 효율성을 끌어내야 하는 대기업의 특성도 알고 있고, 이와 동시에 거대한 글로벌 기업들과의 경쟁을 위해 창의와 혁신 또한 끌어내야 하는 어려움도 알고 있다. 그러나 현재 우리 사회는 창의와 혁신이라는, 어찌 보면 이 지긋지긋한 단어 때문에 더 많은 통제를 생산하고 있다. 오히려 나는 우리의 생활 가까운 곳에서의 조그마한 변화를 통해 효율성을 해하지 않으며 일정 수준의 긴장된 창의와 혁신성을 이끌어낼 수 있다고 본다. ‘더 하고 싶은 말은 없나?’라는 말이 안 나오는 회의를 해보는 건 어떨까, 사전에 모든 의견을 조율한 후 보고하는 것이 아닌 다듬어지지 않는 주제로 논쟁을 펼치면서 시간 가는 줄 모르고 해보는 회의는 어떨까, 꼭 회의는 정해진 시간에 정해진 순서에 의해서 진행되고 끝나야만 하는 것일까. 사무실은 항상 조용해야만 하는 것일까. 부장님과 사원이 이야기를 할 때에 항상 부장님은 앉아있고 사원은 부장님의 책상 옆에 서서 공손하게 대답을 해야만 하는 것일까. 회식의 참여가 왜 회사에 대한 충성심일까. 왜 열정은 신입직원의 몫일까, 열정은 나이가 들면 식어야만 하는 것일까. 왜 내가 시키지 않으면 상대방은 일을 하지 않을 것이라 생각할까. 의외로 통제의 수준을 낮추는 것은 가까이에 있다. 우리도 모르게 너무 많은 것들이 매뉴얼화되고 통제되면서 갖고 있는 매우 좋은 인적 자원들 간의 시너지 효과가 잘 나고 있지 않은 것은 아닐까.분명 혁신과 도전이라는 꽃은 현재 우리나라 기업들과 정부에서 피워야 할 과제이다. 그리고 아직은 우리나라에는 많이 피어나지 못했다. 가만히 보고 있으면, 황폐한 땅에서 꽃을 피우기 위해 사용했던 재배법을 아직 사용 중인 것 같다. 끊임없이 만져대는 사람의 손길 속에서 과연 아무리 흙이 좋아도, 종자가 아무리 좋아도 아름다운 꽃을 피울 수 있을까. 도전과 혁신이라는 꽃을 피우기 위하여 우리 기업들이 잠시 통제의 끈을 적절히 내려놓는 것도 필요해 보인다.#어니스트펀드 #대기업경험 #스타트업 #스타트업일상 #인사이트
조회수 10251

Next.js 튜토리얼 7편: 데이터 가져오기

* 이 글은 Next.js의 공식 튜토리얼을 번역한 글입니다.** 오역 및 오탈자가 있을 수 있습니다. 발견하시면 제보해주세요!목차1편: 시작하기 2편: 페이지 이동 3편: 공유 컴포넌트4편: 동적 페이지 5편: 라우트 마스킹6편: 서버 사이드 7편: 데이터 가져오기 - 현재 글8편: 컴포넌트 스타일링9편: 배포하기개요꽤 그럴듯한 Next.js 애플리케이션을 만드는 방법과 Next.js 라우팅 API의 모든 장점을 배웠습니다.대부분의 경우 데이터 소스에서  원격으로 데이터를 가져와야 합니다. Next.js는 페이지에 데이터를 가져오기 위한 표준 API를 제공합니다. getInitialProps라 불리는 비동기 함수를 사용하여 구현할 것입니다.주어진 페이지에 원격 데이터 소스를 통해 데이터를 가져오고 원하는 페이지에 props을 통해 전달할 수 있습니다. 서버와 클라이언트 둘 다 동작하도록 getInitialProps를 작성할 수 있습니다. 그래서 Next.js는 클라이언트와 서버에서 모두 사용할 수 있습니다. 이번 편에서는 getInitialProps를 사용하여 공개된 TVmaze API에서 가져온 데이터로 배트맨 TV 쇼에 대한 정보를 보여주는 애플리케이션을 구현할 예정입니다.설치이번 장에서는 간단한 Next.js 애플리케이션이 필요합니다. 다음의 샘플 애플리케이션을 다운받아주세요:아래의 명령어로 실행시킬 수 있습니다:이제 http://localhost:3000로 이동하여 애플리케이션에 접근할 수 있습니다.배트맨 쇼 데이터 가져오기데모 애플리케이션 내의 home 페이지에 블로그 포스트 목록이 있습니다. 배트맨 TV 쇼 목록을 표시할 것입니다.쇼의 데이터들을 하드코딩하는 대신에 원격 서버에서 그 정보를 가져옵시다.여기서는 TV 쇼를 가져오기 위해 TVMaze API를 사용합니다.TV 쇼 정보를 검색하는 API 입니다.먼저 isomorphic-unfetch를 설치해야 합니다. 데이터를 가져올 때 사용할 라이브러리입니다. 브라우저 fetch API 구현을 간단히 할 수 있도록 만들어진 것이지만 클라이언트와 서버 환경에서 모두 동작합니다.npm install --save isomorphic-unfetchpages/index.js를 다음과 같이 변경해주세요:위의 페이지에 있는 모든 내용은 아래에 표시된 Index.getInitialProps를 제외하고는 익숙할 것입니다:애플리케이션의 어떤 페이지에든 추가할 수 있는 정적 비동기 함수입니다. 이것을 사용하여 데이터를 가져오고 가져온 데이터를 props를 통해 페이지로 보낼 수 있습니다.보다시피 배트맨 TV 쇼 데이터를 가져오고 'shows' props를 통해 페이지로 전달합니다.위에서 보았던 getInitialProps 함수에서 가져온 데이터 숫자를 콘솔에 출력합니다.이제 브라우저 콘솔과 서버 콘솔을 살펴봅시다. 그리고 페이지를 새로고침 해주세요.페이지를 새로고침 한 후 출력되는 메시지는 어디에서 보였나요?- 서버 콘솔- 브라우저 콘솔- 둘 다- 어떤 콘솔에도 출력되지 않았다서버에서만 출력됩니다이 경우 메시지는 서버에서만 출력됩니다.이는 서버에서 페이지가 랜더링되기 때문입니다.이미 데이터를 가지고 있어 클라이언트에서 다시 정보를 가져올 필요가 없습니다.post 페이지 구현하기TV 쇼에 대한 자세한 정보를 보여주는 "/post" 페이지를 구현해봅시다.먼저 server.js를 열고 /p/:id 라우트를 다음과 같이 바꿔주세요.위처럼 바꾼 코드를 적용하기 위해 애플리케이션을 재실행시켜주세요.이전에는 title 쿼리 파라미터를 페이지에 매핑했습니다. 이제 id로 이름을 바꿔야합니다.다음과 같은 내용으로 pages/post.js를 변경해주세요.페이지의 getInitialProps을 살펴봅시다:여기에서 함수의 첫 번째 파라미터는 context 객체입니다. 정보를 가져올 때 사용할 수 있는 쿼리 필드를 가지고 있습니다.예제에서 쿼리 파라미터로부터 보여지는 ID를 선택하고 TVMaze API로부터 데이터를 가져옵니다.이 getInitialProps 함수에서 표시할 제목을 출력하는 console.log를 추가했습니다. 이제 어디에서 출력되는지 볼 수 있습니다.서버와 클라이언트의 콘솔를 둘 다 열어주세요.그 다음 홈페이지 http://localhost:3000로 이동하여 배트맨 쇼 제목을 클릭하세요.위에서 애기했던 console.log 메시지가 보여지는 장소는 어디인가요?- 서버 콘솔- 브라우저 콘솔- 콘솔 둘 다- 아무 콘솔에서도 출력되지 않는다클라이언트 사이드에서 데이터 가져오기브라우저 콘솔에서 메시지를 볼 수 있습니다.클라이언트 사이드를 통해 포스트 페이지에 이동했기 때문입니다. 그런 다음 클라이언트 사이드로부터 데이터를 가져오는 것은 가장 좋은 방법입니다.예를 들어 http://localhost:3000/p/975에 직접 이동한다면 클라이언트가 아닌 서버에서 메시지가 출력되는 것을 볼 수 있습니다.마무리데이터를 가져오고 서버 사이드에서 렌더링하도록 만드는 Next.js의 가장 중요한 기능 중 하나를 배웠습니다.대부분의 유스 케이스에서 충분히 사용할 수 있는 getInitialProps의 기본을 배웠습니다. 더 많은 것을 배우고 싶다면 Next.js의 문서 중 data fetching 문서를 참고할 수 있습니다.#트레바리 #개발자 #안드로이드 #앱개발 #Next.js #백엔드 #인사이트 #경험공유
조회수 972

Rxjava를 이용한 안드로이드 개발

Overview브랜디는 현재 2.0 기반 Android 버전입니다. Main Thread와 Sub Thread 사이의 ANR를 방지하려고 Volley, Otto Bus Library를 사용해서 백엔드 서비스(back-end Service)를 연동하고 있습니다. 이제 3.0 개발로 더 좋은 백엔드 서비스 기능을 만들려고 합니다. (기반 작업은 이미 완료했습니다.) 다만 3년 동안 브랜디 앱을 개발하면서 느꼈던 고통과 피로를 ‘제발’ 줄여보고 싶어서 브랜디 3.0에서는 Retrofit2 와 RxJava, Lambda 표현식을 사용하기로 했습니다. RxJava(Reactive programming)는 가장 추천하고 싶은 것 중 하나입니다. 우리는 함수형 리액티브(반응형) 프로그램이라는 표현으로 자주 마주치곤 하는데요. 주로 옵저버 패턴(Observer pattern)을 대체하기 위해 사용합니다. 단순히 데이터를 넘기고 마무리하는 건 옵저버 패턴으로도 충분하지만 대부분의 문제는 이벤트들을 묶어서 사용할 때 생깁니다.1) RxJava는 이벤트에 대한 조건 처리나 실패 처리, 리소스 정리에 대비해 사용합니다. 기존 방식의 명령형 리액티브 접근 방식을 사용하면 복잡함이 지속적으로 증가하는 반면, 함수형 리액티브 프로그래밍은 효율을 크게 높일 수 있습니다. 몇 가지 예제와 함께 살펴보겠습니다. Android에 직접 사용해보기새로운 프로젝트를 생성한 후, 아래와 같이 build.gradle 파일을 수정해봅시다. (JDK 1.8 설치 필수) apply plugin: 'com.android.application' android {    compileSdkVersion 26   defaultConfig {        applicationId "kr.co.brandi.myapplication"        minSdkVersion 21        targetSdkVersion 26        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }   //추가된 부분 1      compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8   }  } dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])       //추가된 부분2    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'    implementation 'io.reactivex.rxjava2:rxjava:2.1.3'      implementation 'com.android.support:appcompat-v7:26.1.0'    implementation 'com.android.support.constraint:constraint-layout:1.0.2'    implementation 'com.android.support:design:26.1.0'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'com.android.support.test:runner:1.0.1'    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } 이제 람다 표현식과 RxJava를 사용할 준비가 되었습니다.Flowable.just("Hello World").subscribe(new Consumer() {    @Override   public void accept(String s) throws Exception {        Log.v(tag, s);   }  });   Flowable.just("Hello World !").subscribe(s -> Log.v(tag, s)); 간단한 생성자와 결과를 출력하는 부분입니다. 두 번째 subscribe는 람다 표현식으로 인터페이스를 생성하지 않더라도 첫 부분과 동일하게 결과물을 얻을 수 있습니다.2) 이제 RxJava에서 간단한 필터링으로 간편하게 데이터를 가공하는 능력을 확인해보겠습니다. 아래 코드는 기본적인 List 의 값을 출력하는 부분입니다.List valueList = Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);   for (int data : valueList) {    String result = "value " + data;    Log.v(tag, result);  } Flowable.fromIterable(valueList)        .map(new Function() {            @Override            public String apply(Integer data) throws Exception {                return "value : " + data;            }        })        //.map(data -> "value : " + data)        .subscribe(data -> Log.v(tag, data)); 위의 코드에 조건을 추가해 ’짝수’만 출력하겠습니다.for (int data : valueList) {    if ((data % 2) == 0) {        String result = "value " + data;        Log.v(tag, result);    }  } Flowable.fromIterable(valueList)        //.filter(data -> {        //      return (data % 2) == 0;        //})        .filter(data -> (data % 2) == 0)        .map(data -> "value : " + data)        .subscribe(data -> Log.v(tag, data)); 위와 같이 데이터 가공은 순차적으로 진행되고, 여러 함수로 간단하게 처리할 수 있습니다. 원하는 데이터 가공을 위해 filter, map 등의 함수들을 순차적으로 이어 붙일 수도 있습니다.위에서 보여드린 RxJava는 간단한 예시이기 때문에 RxJava 의 기능을 좀 더 보여드리겠습니다.String[] data1 = {Shape.HEXAGON, Shape.OCTAGON, Shape.RECTANGLE};  String[] data2 = {Shape.TRIANGLE, Shape.DIAMOND, Shape.PENTAGON};   Flowable source =        Flowable.combineLatest(                Flowable.fromArray(data1)                        .zipWith(Flowable.interval(100L, TimeUnit.MILLISECONDS), (shape, notUsed) -> Shape.getId(shape)),                Flowable.fromArray(data2)                        .zipWith(Flowable.interval(150L, 200L, TimeUnit.MILLISECONDS), (shape, notUsed) -> Shape.getSuffix(shape)),                (id, suffix) -> id + suffix);   source.subscribe(s -> Log.d(getThreadName(), s)); CombineLatest() 함수를 이용해 두 개의 스트림을 하나로 처리하는 방법을 보여 드렸습니다. 각각의 스트림은 interval 함수를 시간 간격으로 data1과 data2 배열의 개수만큼 반복하여 처리하는 로직입니다. 서로 다른 두 스트림은 마지막 데이터를 가지고 있으며 새로운 데이터가 나올 때마다 하나의 스트림으로 출력됩니다.마블 다이어그램 3)결과Conclusion만약 RxJava를 이용하지 않고 두 개의 TimerTask를 이용해서 코딩했다면 결과는 같았을지도 모릅니다. 이제 RxJava를 알기 때문에 다시는 TimerTask를 이용해서 코딩할 일은 없을 겁니다. 알면 알수록 다양한 기능을 갖추고 있는 RxJava! 이제 브랜디 상용화 버전에 사용할 수 있게 다시 개발의 숲으로 들어가겠습니다. 그럼 이만. 1)함수나 네트워크 호출의 비동기 응답 2)Java 8 람다 표현식 자세히 살펴보기, 2018.03.09. 3)RxJava on Android 글고재성 과장 | R&D 개발1팀[email protected]브랜디, 오직 예쁜 옷만#브랜디 #개발문화 #개발팀 #업무환경 #인사이트 #경험공유
조회수 1624

잔디의 공식 모델, 그래픽 디자이너 Diane을 만나다.

축복받은 창가 자리에서 꾸준히 광합성을 하고 있다는 Diane편집자 주: 잔디에는 현재 40명 가까운 구성원들이 일본, 대만, 한국 오피스에서 일하고 있습니다. 국적, 학력, 경험이 모두 다른 멤버들. 이들이 어떤 스토리를 갖고 잔디에 합류했는지, 잔디에서 무슨 일을 하고 있는지 궁금해하시는 분들이 많았습니다.  이에 잔디 블로그에서는 매 주 1회 ‘맛있는 인터뷰’라는 인터뷰 시리즈로 기업용 사내 메신저 ‘잔디’를 만드는 사람들의 이야기를 다루고자 합니다. 인터뷰는 매 주 선정된 인터뷰어와 인터뷰이가 1시간 동안 점심을 함께 하며 다양한 이야기를 나누며 진행됩니다. 인터뷰이에 대해 궁금한 점은 댓글 혹은 이메일([email protected])을 통해 문의 부탁드립니다.‘맛있는 인터뷰’를 요청하니 바로 고기를 먹자고 했다. 이 곳은 어떤 곳인지 알려달라.이번 주 내내 ‘스테이크’라는 단어가 머리속에서 떠나지 않았다. 회사 근처 가성비 높은 스테이크 집을 찾은 결과, ‘리즈스테이크갤러리’를 발견했다. 하는 일이 디자인쪽이라 스테이크의 가성비 뿐만 아니라, 레스토랑 인테리어도 신경 써서 골랐다. 유리 지갑 직장인의 심금을 울리는 장소라 확신한다.스테이크는 사랑입니다.간단하게 자기소개 부탁한다.맛있는 인터뷰를 오매불망 기다렸다. 잔디에서 그래픽 디자인을 맡고 있는 Diane이다. 반갑다.그래픽 디자인? 구체적으로 하는 일을 무엇인가?못 믿겠지만 다 하고 있다. 일종의 분산 투자다. 한 분야만 깊이 파는 것보단 UI(User Interface), 일러스트레이터, 콘텐츠 이미지 제작 등 다양한 분야에 발을 담그고 있다. 사실 여러 가지 작업을 동시에 하는 게 더 재미있다. 같은 팀의 Jane과 인쇄 작업을 한 적이 있는데 시간 가는 줄 몰랐다. 내겐 나름 호시절이었는데, 디자인 팀에 인원이 하나, 둘 늘어나며 각자의 R&R이 명확해졌다. 업무가 분담돼 효율성은 높아졌으나, 경험할 수 있는 분야가 줄어들었다. 개인적으로는 안타깝다. 하지만 돌려 생각해보면 잔디가 성장하고 있다는 청신호이니 기쁜 마음으로 분산 투자를 접을 생각이다.디자이너를 만나면 꼭 묻고 싶은 질문이 있었다. 어떻게 미술을 시작하게 되었는가?중학교 2학년 때 미술 선생님이 매력적인 딜을 제시하셨다. 내가 그림을 그리면 교과서에 실어준다는 제안이었다. 선생님은 미술 교과서를 출판하는 곳에서 꽤 지위가 높으셨다. 열심히 그림을 그린 결과, 내 그림이 교과서에 실릴 수 있었고 이때의 성취감이 계속 그림을 그려야겠다는 결심을 하게 된 계기가 되었다.대단하다. 나도 그런 제안이 있었다면 지금쯤 Diane과 같은 팀에 있지 않았을까 싶다. 잔디는 어떻게 들어오게 되었는가?대학교를 졸업할 즈음, 산업체리크루팅(졸업을 앞둔 디자인 전공 학생들이 자신의 포트폴리오를 회사에 소개하는 프로그램이다 – 편집자 주)을 통해 잔디와 인연을 맺게 되었다. 포트폴리오가 괜찮으면 회사에서 2차 면접을 제안한다. 그 당시 떨리는 마음으로 내 포트폴리오를 소개했었는데, YB와 Jane이 스윽 다가와 명함을 주고 가셨다.그 당시 잔디에 대해 어떤 생각을 가지고 있었나?YB에게 처음 ‘잔디’에 대해 들었을 땐 ‘음~ 파릇파릇한 신생 기업이군!’이라고만 생각했다.YB에게 어떤 이야기를 들었는가?지금도 또렷하게 기억난다. 그대로 읊어보겠다. “우리는 멤버 한명 한명의 역량을 중요시합니다. 나영(잔디 안에서는 Diane이라는 닉네임으로 불리고 있다-편집자 주)님의 잠재력을 이런 좋은 기회에 살짝 보게 되었는데, 앞으로도 그 잠재력을 펼쳐나가는 모습을 볼 수 있었으면 좋겠습니다.” 이 말을 듣고 두근거렸다. 정말 잔디에서 일하고  싶게 만드는 멘트였다. ‘이 사람에게 인정받고 싶다’는 생각이 절로 들었다. 그리곤 근로 계약서에 도장을 찍고 Diane으로 살아가고 있다.산업체 리크루팅 관련해 꿀팁 아닌 꿀팁을 후배 분들에게 공유하고 싶다. 일반적으로 산업체 리크루팅은 여러 회사가 동시에 모여 진행된다. 그러다 보니, 각 회사의 인사 담당자의 태도를 통해 얼추 어떤 분위기인지 유추해볼 수 있다. “저기야”라고 부르는 회사, “해보세요”라고 명령하는 회사, “합격, 불합격 버튼 눌러야지~♪”라고 장난치듯 말하는 회사까지 다양하다. 그 중 “나영님”이라고 부른 회사는 잔디 뿐이었다. 김춘수 시인의 ‘꽃’처럼 잔디가 내 이름을 불러 주기 전까지 난 그저 하나의 디자인 노예에 지나지 않았다. 사실 “누구님”이라는 호칭이 낯간지러웠다. 하지만 이젠 익숙하다. 누구를 봐도 ‘~씨’보다는 ‘~님’이 편하다.잔디 1주년 파티에서 흥이 오른 Diane이 카메라를 보며 포즈를 취하고 있다.첫 직장으로서 잔디 어떤 것 같나? 가감없이 말해달라.후회보단 점점 더 잔디가 좋아지고 있다. 나보다 일찍 졸업한 친구들의 직장고난기에 폭풍 스트레스를 받고 있는 모습을 지켜보며, 회사란 곳은 매일 야근과 갈굼이 일상이구나라고 생각했었다. 하지만 잔디는 그렇지 않다. 팀에서 막내임에도 불구하고 내 의견이나 작업이 다른 팀원들의 그 것과 동일선상에서 다뤄지며 적용되는 건 경험해보지 못한 사람은 모를 것이다. 상당히 짜릿하다.같은 분야에 종사하고 있는 친구를 만나 회사 얘기를 하면 으레 욕에서 시작해 욕으로 끝난다. 에이전시 업무 특성 상, 좋은 디자인이 아닌 클라이언트가 맘에 드는 디자인을 해야 하니 불만족, 회의감이 많을 거라 생각한다. 한 친구는 B치킨 페이스북에 올라가는 광고 배너를 매일 만들며 치킨의 ‘치’자만 나와도 부들부들 떤다. 치킨을 먹지 않겠다는 절식 선언도 꽤 인상 깊었다. 반면, 난 그런 스트레스가 없다. 나를 위한, 그리고 우리를 위한 디자인을 하다 보니 좀 더 예쁘게 잘 만들고 싶은 마음이 크다.누가 보면 회사에서 사주한 줄 알겠다. 이제 다른 회사는 못 갈 것 같은데 어떤가?그렇다. 잔디에서스트레스 없이 편히 일하다 혹시라도, 정말 혹시라도 이직하게 된다면 암울할 것 같다. 이미 난 잔디의 문화에 완전 빠진 상태다.처음 스타트업에 간다고 했을 때 주변 반응은 어땠나?에이전시에 취직하면 이름만 대면 누구나 아는 브랜드의 포트폴리오를 만들 수 있다. 첫 직장으로선 안전하다. 반면, 스타트업은 ‘모 아니면 도’라는 주변의 반응이 있었다. 부모님도 처음엔 반신반의하셨으나, 잔디의 모습이 담긴 사진들을 보시고 이야기도 들으시면서 지금은 나보다 잔디를 더 좋아하신다.디자인 뿐만 아니라 남심을 사로 잡는 잔디의 광고/홍보 모델로도 활약하고 있다. 한국경제에 실린 잔디의 기사에서 Diane 사진을 보고 Hugo의 친구 분이 소개팅을 강력히 원했다고 들었는데 기분이 어떤가? 같은 여자로서 부럽다.한국 경제에 실린 기사 사진은 전문 포토그래퍼가 잘 찍어주셨다. 그리고 최근 집행되고 있는 잔디의 페이스북 광고의 경우, 광고 컷 촬영 초반 연기가 어색해 어려워 힘들었다. 하지만 나중에 라이브 된 광고 이미지를 보며 ‘내가 저런 표정도 지을 수 있구나’하고 감탄했다. 직장인의 비애를 리얼하게 연기한 광고가 실렸었는데, 직장인분들이 공감해주셨으면 한다. 광고 촬영을 계속 하다 보니, 점점 표정이 리얼해진다고 주위에서 칭찬해주고 계셔 힘을 내고 있다.페이스북 광고를 본 지인들의 반응은 어떤가?광고가 올라오는 대로 캡쳐를 떠 보내준다. 친구들이 덕분에 웃는다고 하더라. 왜 웃는지는 모르겠지만..나도 촬영할 때 옆에서 지켜봤었다. 광고 촬영할 땐 상당히 격정적이었는데, 막상 일할 때는 차분하더라. 사무실 밖의 모습은 어떤지 궁금하다.집에서 쉬면 우울하고 센치해진다. 그래서 차라리 밖에서 친구들을 만나 재미있는 곳을 찾아다닌다. 얼마 전에는 건대에 새로 생긴 ‘커먼그라운드’를 다녀왔는데 정말 좋더라. 아직 가보지 않았다면 꼭 가보길 추천한다.만약 회사에 출근했는데 1일 휴가를 선물로 받는다면 어떻게 보낼 것인가?힙합 콘서트를 보러 갈 것이다. 고등학교 1학년 때 처음으로 친구를 따라 힙합 콘서트를 갔었다. 당시, 친구들은 아이돌파와 힙합파로 나뉘어 있었는데 나는 아이돌의 상업적인 느낌이 싫었다. 반면 힙합의 가사 한 마디, 한 마디는 레알 자기 이야기라서 들을 수록 그 가수랑 친해지는 느낌이 있었다. 흥이 오르면 직접 트위터를 통해 메시지를 보내곤 했다.요즘엔 어떤 음악을 듣나?쇼미더머니, 언프리티랩스타 등의 프로그램을 통해 많은 크루들이 급부상하고 있다.  이들 중 저스트뮤직, 일리네어레코즈, AOMG 등의 레이블에서 나오는 음악을 고루 듣고 있다. 요즘에는 특히 스윙스, 기리보이가 속해 있는 저스트뮤직의 음악을 많이 듣는다. 이들이 언더에 있을 당시, 나만 알고 나만 좋아한다는 느낌이 있어 좋았는데, 요즘에는 이들이 너무 유명해져 오히려 아쉽다.이 집 빙수로 돈 좀 벌어봤어다음은 맛있는 인터뷰의 고정 코너 ‘어서 말을 해’이다. Mark의 질문은 ‘최근 3년 동안 당신에게 가장 행복했던 일은?’인데 뭐가 가장 행복했나?대학생 때 입시학원에서 1-2년 동안 아이들에게 미술을 가르쳤다. 내가 가진 걸 다른 사람에게 알려 줄 수 있다는 점이 굉장히 재미있었다. 입시생들에게 큰 의미인 ‘합격’이라는 단어에  내가 일조할 수 있다는 점은 무척 의미있었다. 나이 차이가 그리 많지 않아 제자라기 보단 동생 대하듯 가르쳤던 친구들인데 입시가 끝날 무렵 합격 기념 깜짝 파티를 열어주었다. 너무 행복한 기억이다.다음 인터뷰이에게는 어떤 질문을 남기고 싶나?회사에 여름방학이 생겨 30일 휴가 기회가 주어진다면 무엇을 할 것인가?그럼 Diane은 30일 휴가가 생기면 뭘 하고 싶은가?30일 내내 통영에 내려가 바다를 보며 지낼 거다. 유치원을 통영에서 다녔는데 집 밖에 나가면 보이던 항구와 바다 냄새가 아직도 생생하다. 해산물 먹방을 찍으며 푹 쉬고 싶다.나중에 꼭 이루고 싶은 꿈이 있다면?디자인하는 친구들과 함께 디자인 전문 회사를 차리고 싶다. 하루하루 열심히 경력도 쌓고, 돈도 차곡차곡 모은다면 언젠가 시작할 수 있을 거라 믿는다.#토스랩 #잔디 #JANDI #디자인 #디자이너 #그래픽디자이너 #그래픽디자인 #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화 #사내문화
조회수 2216

Angular Lazy Loading 모듈 사용하기

Angular는 비동기식 라우팅이 가능합니다. 나중에 사용할 기능들을 NgModule로 분리하여 사용자의 요청이 들어왔을 때 모듈을 불러와 기능을 사용할 수 있고, 이러한 기술을 지연 로딩이라 합니다.프로젝트가 진행되고 기능이 추가될수록 어플리케이션 번들 크기가 커지고, 결국엔 초기 로딩 시간도 길어지게 됩니다. 지연 로딩을 사용하면 초기 로딩 시간을 줄일 수 있습니다. 컴파일 단계에서 나중에 사용할 모듈들을 메인 모듈에서 분리하여 번들을 생성합니다. 그리고 사용자가 기능을 요청할 때 비동기로 스크립트를 불러와 실행합니다. 지연 로딩에 대한 소개와 사용법은 Angular 공식 문서의 Routing & Navigation — Milestom 6: Asynchronous routing 을 참고하시길 바랍니다하지만 지연 로딩을 사용할 때 유의해야할 점이 몇 가지 있습니다.지연 로딩 모듈과 인젝터(Injector)지연 로딩이 완료되었을 때 Angular는 지연 로딩된 모듈을 루트 인젝터(Root Injector)의 자식이 되는 자식 인젝터를 이용하여 초기화하고, 서비스들을 자식 인젝터에 추가합니다. 즉, 인젝터가 분리되기에 지연 로딩된 모듈의 클래스들은 자식 인젝터로의 서비스 주입이 가능하지만 루트 인젝터로 만들어진 클래스들은 불가능합니다.이는 Angular의 독특한 의존성 주입 시스템 때문입니다. Angular의 인젝터는 처음 애플리케이션이 시작되었을 때, 컴포넌트나 다른 서비스에 주입되기 전에 포함된 모든 모듈들의 서비스 제공자들을 블러와 루트 인젝터를 생성합니다. 애플리케이션이 시작되고 나면 인젝터는 서비스들을 생성하고 주입을 시작하고, 새로운 서비스들을 제공자로 추가가 불가능합니다.그러므로 지연 로딩된 서비스들은 이미 생성이 완료된 루트 인젝터로 추가가 불가능합니다. 따라서 Angular는 지연 로딩된 모듈에 대해서 새로운 자식 인젝터를 만들는 전략을 취하게 된 것입니다.자식 인젝터가 새로 만들어지기 때문에 공통된 모듈을 사용할 때 주의하여야 합니다. 예를 들어 다음과 같이 SharedModule 에 CounterService 를 서비스로 추가하고 루트 모듈인 AppModule 과 지연 로딩 모듈인 LazyModule 에 각각 SharedModule 을 import 하였습니다.import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { SharedModule } from './shared/shared.module'; import { AppShellComponent } from './app-shell.component'; const APP_ROUTES = [ { path: 'lazy', loadChildren: 'app/lazy/lazy.module#LazyModule' } ]; @NgModule({ imports: [ BrowserModule, SharedModule, RouterModule.forRoot(APP_ROUTES) ], declarations: [ AppShellComponent ], bootstrap: [AppShellComponent] }) export class AppModule { }import { Injectable } from '@angular/core'; @Injectable() export class CounterService { count = 0; increase(): void { this.count++; } decrease(): void { this.count--; } }import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; import { SharedModule } from '../shared/shared.module'; import { SomeLazyComponent } from './some-lazy.component'; const LAZY_ROUTES = [ { path: '', component: SomeLazyComponent } ]; @NgModule({ imports: [ SharedModule, RouterModule.forChild(LAZY_ROUTES) ] }) export class LazyModule { }import { NgModule } from '@angular/core'; @NgModule({ providers: [ CounterService ] }) export class SharedModule { }그리고 루트 모듈의 컴포넌트와 지연 로딩 모듈의 컴포넌트에서 각각 CounterService 를 사용하여 숫자 값을 바꿔봅니다.서로 다른 인젝터에 CounterService 인스턴스가 만들어졌기 때문에 두 컴포넌트에 표시되는 숫자값은 다릅니다. 앞에서 말했듯이 지연 로딩 모듈은 루트 인젝터가 아닌 자식 인젝터를 이용하여 초기화하기 때문입니다.만약, 지연 로딩 모듈에서 제공되는 서비스를 다른 모듈에서 사용하려면 루트 모듈에 포함시켜 줘야 합니다. 다음과 같이 루트 모듈에게만 노출시킬 서비스 제공자들을 따로 빼내어 줄 수 있습니다.import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { AccountLoginPageComponent } from './login-page.component'; const ACCOUNT_ROUTES: Routes = [ { path: 'login', component: AccountLoginPageComponent } ]; @NgModule({ imports: [ ... RouterModule.forChild(ACCOUNT_ROUTES) ], decalartions: [ AccountLoginPageComponent ] }) export class AccountLazyModule { }import { ModuleWithProviders, NgModule } from '@angular/core'; import { AccountAuthService } from './auth.service'; @NgModule({ imports: [...] }) export class AccountModule { static forRoot(): ModuleWithProviders { return { ngModule: AccountModule, providers: [ AccountAuthService ] }; } }AccountModule.forRoot() 를 루트 모듈에 import하면 다른 모듈에서도 AccountAuthService 를 사용할 수 있게 됩니다. 물론 이 경우 AccountModule를 지연로딩 모듈로 만들면 루트 모듈에 포함되기 때문에 번들을 나누는 의미가 없어질 수 있으니 AccountLazyModule 을 따로 두어 코드를 분리하였습니다.#타운컴퍼니 #개발 #개발자 #인사이트 #꿀팁
조회수 1168

나의 첫 번째 사업 이야기

내 첫 번째 사업은 초등학교 때 했던 만화책 대여 사업이었다. 거창하게 사업이라고 말하면 쑥스럽지만, 어쨌든 돈거래가 일어났던 엄연한 비즈니스였다. 난 어렸을 때 만화책을 정말 좋아했다. 동네 만화방에 거의 살다시피 했고, 그래서 동네 만화방에서 VVIP 고객이었다. 그 시절에는 비디오가 귀했고, 만화방에서는 만화를 볼 때마다 쿠폰을 주었고 쿠폰을 모아 오면 비디오를 상영할 때 볼 수 있도록 해주었다. 하지만 죽돌이 수준의 VVIP 고객이었기 때문에 쿠폰 없이도 언제든지 내가 원할 때 비디오를 볼 수 있었다. 난 그 정도로 만화책을 좋아했다.만화책을 좋아하다 보니 자연스럽게 만화책을 사고 싶었다. 하지만 부모님은 책은 사주셨어도 만화책을 사주지않으셨다. 그리고 집안 형편이 넉넉지 않아서 만화책을 살만큼의 용돈을 받을 수는 없었다. 그래서 생각한 것이 만화 대여사업이었다. 내가 원하는 만화책을 사서 이걸 친구들에게 대여해서 돈을 벌어 다시 그 돈으로 내가 원하는 만화책을 다시 사는 것이었다. 딱히 돈을 벌기 위해서 한 것은 아니고, 단순히 만화책이 너무 갖고 싶었기 때문에 시작한 사업이었다. 만화 대여업에 대한 개념은 이미 만화방의 고객으로 터득하고 있었기 때문에 '업'의 개념은 충실히 알고 있었다. 지금 기억으로는 꽤 사업이 번창했고, 내가 원하는 만화책을 많이 살 수 있었다. 하지만 나의 첫 번째 사업은 얼마 가지 못했다. 사업의 번창으로 사모은 만화책이 화근이었다. 아버지에게 발각된 것이다. 아버지는 무슨 돈으로 이 만화책을 산 것인지 물어보았고, 난 나의 사업에 대해서 이야기할 수밖에 없었다. 아버지는 친구 간에 돈을 받고 물건을 빌려주는 것이 옳지 않다고 하셨고, 나의 첫 번째 사업은 그렇게 허무하게 문을 닫았다.나의 아버지는 평생 장사를 하셨다. 하지만 내가 장사 혹은 사업을 하는 것을 바라지 않으셨다. 내가 커서 박사 학위를 받고 교수가 되기를 원하셨다. 나도 그러한 아버지의 꿈을 알고 있었고, 나도 그 길이 멋있어 보였기 때문에 그 길로 가는 것에 대해서 이견이 없었다. 그런데 내가 친구들을 상대로 장사를 하는 모습을 보시고 나서는 적잖이 실망하셨던 것 같다. 친구 간에 돈거래를 하고 장사를 한다는 것에 대해서 옳지 않다고 생각하셨던 것 같다.아버지는 어렸을 때 공부를 잘하셨다고 한다. 내가 확인할 수는 없지만, 지금도 종종 친척들을 만나면 우리 아버지가 초등학교, 중학교 때 언제나 반에서 1등을 놓치지 않으셨다는 이야기를 한다. 하지만 집안 형편이 심하게 안 좋은 관계로 고등학교를 중간에 그만 두실 수밖에 없었다. 치킨집에 들르시는 아버지 초등학교 동창분이 술 드시면서 반에서 1등 했던 우리 아버지는 치킨집을 하고 있고, 본인은 대학도 나오고 학원 선생도 하고 있다는 이야기를 하는 거 보면 잘하긴 잘 하셨던 것 같다. 그런 본인의 이루지 못한 꿈에 대한 '한'때문인지 아버지는 나와 동생의 교육에 대해서 관심이 많으셨다.  그리고 본인은 평생 작업복을 입고 육체노동을 하시고 계시지만 나는 그런 삶을 살지 않기를 바라셨다. 나 또한 그러한 아버지의 꿈대로 과학고를 가고, KAIST를 가서 '박사'가 되는 꿈을 이루기 위해서 노력했다.하지만 그런 꿈이 깨진 건 1997년도였다. 1997년도 IMF가 터지면서 대전에 연구단지는 흉흉한 소문이 돌았다. 수많은 연구원들이 구조조정 대상이 되었고, 이공계에 대한 천시 풍조가 과장되게 들려왔다. 대덕연구단지 횟집 사장이 박사 출신이라는 확인할 수 없는 소문도 돌았다. 그러한 모습을 보면서 내가 꿈꾸었던 '연구원', '박사'라는 이름이 생각만큼 좋지 않을 수 도 있다는 생각을 했다. 게다가 난 그때 학과 공부에도 적응하지 못하고 방황하고 있었다. 그래서 난 대학원을 가지 않고 경영학을 복수전공해 보기로 했다. 그리고 학부를 졸업하고 취직하기로 마음을 정하고 아버지에게 말씀을 드렸다. 아버지는 예상대로 나에게 많이 실망하셨다. 하지만 난 내 뜻을 굽히지 않았다. 그리고 아버지는 1998년도 5월에 갑자기 돌아가셨다.난 내가 어렸을 때 꿈꾸었던 삶을 살고 있지 않다. 아버지가 원했던 '연구원', '박사'와는 거리가 먼 삶을 살고 있다. 어쩌면 아버지가 원하지 않았던 '장사', '사업'이라는 것을 하고 있다. 아버지가 살아계셨으면 어떻게 생각하셨을까?  비록 내가  아버지가 원하지 않았던 삶을 살고 있지만 기뻐하셨을것 같다. 아버지는 언제나 내가 행복하기를 바라셨던 분이기 때문이다.#NEOFECT #개인경험 #경험공유 #인사이트 #성장
조회수 656

앱 어트리뷰션 가이드 - 입문

앱 어트리뷰션 툴은 앱 마케팅의 필수 도구로 자리잡았고 갈수록 활용범위가 증가하고 있습니다. 그러나 툴을 사용하는 현장에서는 ‘어렵다’라는 반응이 여전합니다. 그래서 이번 ‘앱 어트리뷰션 가이드 (A Walkthrough of App Attribution)’에서는 툴 유저들이 공통적으로 느끼는 어려움을 해소할 수 있는 내용을 다뤄보려 합니다.가이드는 어트리뷰션과 연관된 주요 개념과 기술에 대한 설명을 주로 다루게 됩니다. 이를 통해 어트리뷰션 툴이 필요할 수 밖에 없는 이유와 애드테크 생태계에서의 역할, 그리고 복잡한 어트리뷰션 기능들이 왜 필요하며 어떤 원리로 동작하는지에 대한 이해를 높이는 것이 목적입니다.첫번째 글인 ‘앱 어트리뷰션 가이드 – 입문’에서는 어트리뷰션 툴이 등장하게 된 배경과 문제 해결 방법을 설명합니다. 등장 배경: 과금 기준이 다르다웹에서 집행하는 키워드 광고를 클릭하면 바로 웹사이트로 연결되고 사이트에 방문한 상태가 됩니다. 광고 클릭 자체가 사이트 방문인 셈입니다. 광고 클릭이 트래픽을 늘려 주었으니 클릭당 비용(Cost Per Click, CPC)을 지불하는 것이 합리적입니다.그러나 앱 광고를 클릭하면 앱이 열리지 않습니다. 스토어를 거쳐 단말기에 앱을 설치한 후 실행까지 해야 앱을 방문한 상태가 됩니다. 결국 광고 클릭이 앱의 트래픽을 직접적으로 늘려주지 못하며, 설치된 앱이 실행 되어야만 트래픽이 늘어납니다. 그래서 설치된 앱의 최초 실행수(Cost Per Install, CPI)를 기준으로 비용을 지불하는 것이 합리적입니다.트래픽을 늘려준 액션에 광고비를 지불하는 것이 합리적이다. 그래서 앱은 CPC가 아닌 CPI를 사용한다.이런 이유로 CPI는 앱 생태계의 광고비 과금 기준으로 자리잡습니다. 하지만 기준을 CPI로 변경하는 초기에는 장애물이 있었습니다. 광고를 통해서 몇 개의 앱이 설치 되었는지를 정확하게 알 수 없었기 때문입니다. 앱 설치 숫자를 확인하는 것은 간단한 일인데 왜 문제가 되는지 의문을 가질 수도 있겠지만, 조금 깊이 들여다보면 생각보다 어려운 문제임을 알 수 있습니다.우선 전체 앱 설치 중에 광고를 통한 설치가 몇 건인지 분리해 내기가 쉽지 않습니다. 플레이 스토어나 앱스토어에서 그날 그날의 설치 개수를 확인할 수 있지만, 그 중에 몇 개가 유료 광고로 인한 설치인지는 보여주지 않기 때문입니다. 이렇게 되면 광고 매체에 확인해 볼 수 밖에 없습니다.하지만 매체 역시 앱 설치 개수를 모르는 것은 마찬가지 입니다. 매체는 자신이 관리하는 영역에서 클릭이 발생한 것을 감지함으로써 유저가 광고를 클릭하고 스토어로 넘어간 것은 알 수 있으나, 스마트폰에서 앱이 실행되는 것은 매체의 관리 영역 바깥의 일이므로 유저가 클릭 이후에 앱을 받아서 실행을 했는지 그렇지 않은지는 분명하게 알 수 없습니다. 결국 광고주와 매체 모두 광고를 통한 앱 설치 숫자를 알지 못하기 때문에 CPI를 기준으로 광고비를 산정할 수 없는 문제가 남게 됩니다. 어트리뷰션 툴이 문제를 해결하는 방법이 문제를 해결하기 위해 등장한 것이 앱 어트리뷰션 툴입니다. 어트리뷰션 툴의 핵심 역할 중 하나는 성공적으로 설치된 앱들 중에서 광고의 영향을 받은 앱 설치가 얼마나 되는지를 측정해 내는 일입니다. 광고주와 매체 모두 정확하게 측정할 수 없었던 이 수치를 어트리뷰션 툴이 어떤 방법으로 측정하는지를 요약하면 다음과 같습니다.1. 트래킹 URL 활용유저에 의해 광고가 클릭 되는 것을 분석하기 위해 광고물에 트래킹 URL을 세팅합니다. 트래킹 URL이 설정되어 있는 광고를 유저가 클릭하게 되면, 어트리뷰션 툴은 어떤 매체의 광고가 언제 누구로부터 클릭 되었는지를 알 수 있게 됩니다. 어트리뷰션 툴은 이 정보를 측정한 뒤 유저를 앱 설치 페이지로 리다이렉트 시킵니다.2. 분석 SDK를 앱에 삽입설치된 앱이 실행까지 되는지를 분석하기 위해서 앱 자체에 분석 도구를 삽입합니다. 분석 SDK는 앱의 네이티브 영역(OS의 언어로 작성되었으며 앱의 구조를 이루는 부분)에 적용하며 앱이 실행되는 시점에 함께 동작하는 것이 장점입니다. 앱 실행 직후에 분석 SDK가 동작함으로써 앱 실행에 영향을 준 트래픽 소스(광고인지 아닌지, 광고라면 어떤 매체인지)를 검출하게 됩니다.3. 클릭 데이터와 실행 데이터를 대조광고를 통해 앱이 설치(또는 실행)되었는지를 정확하게 확인하기 위해 1번의 클릭 데이터와 2번의 실행 데이터를 대조합니다. 클릭 데이터를 통해서는 누가 언제 어떤 매체를 클릭 했는지를 알 수 있으며, 실행 데이터를 통해서는 누가 언제 어떤 매체로 유입되어 앱을 실행 했는지를 알 수 있습니다. 따라서 클릭 데이터와 실행 데이터가 정확하게 일치하는 경우에는 광고를 통한 앱 설치로 판단하게 됩니다.어트리뷰션 툴 사용자가 트래킹 URL을 만들어서 배포하는 일, 앱 개발자가 분석 SDK를 앱에 삽입하는 일, 트래킹사가 데이터를 대조하여 리포팅 하는 일 모두가 결국 광고를 통한 앱 설치를 분류해 내기 위해서 반드시 필요한 작업입니다. 어느 하나라도 부족하면 정확한 측정이 어려울 수 밖에 없겠지요.다음 글에서는 어트리뷰션의 한 축을 담당하는 트래킹 URL에 대해서 알아보도록 하겠습니다.

기업문화 엿볼 때, 더팀스

로그인

/