스토리 홈

인터뷰

피드

뉴스

조회수 1367

스타트업의 공감능력

스타트업은 항상 힘들다.자금 압박과업무 압박과시간 압박 등너무나 많은 스트레스 속에서 창업자들은 하루하루 버텨나간다.어느 대표님이 그러더라."2년째 계속 힘들다 보니 이젠 힘들다는 말도 지겹다."CEO의 약자가 무엇인지알고 있는가?한 분이 매우 공감 가는 말을 하더라.C: 씨발E: 이 짓을 O: 오~언제까지 해야 하는 거야?그러다 보니다들 어느 정도 기업가치를 올리면팔아버리고 사업 접으려는 사장님들이 많아지지.어느 정도 그 마음은 공감한다.그만큼... 아슬아슬한 리스크를 지고,하루하루 고군분투하는 삶의 연속이니까.그래도 어쩌겠어?각오하고 시작한 거 이왕이면,처음 세운 뜻을 다시 되뇌면서우린 꿈을 구현해 가는 사람들이잖아. 나의 월요일은 항상 기쁘다.기다려지고, 행복하다.일이 안 힘드냐고?아니, 진짜 많이 힘들다.피곤하고, 짜증 날 때도 있다.그것과는 별개로 여전히 사업은 즐겁다.나라고 매 순간 웃으면서 살아가는 것은 아니다.진지하게 심각한 고민으로 인상이 찌푸려져 있을 때도 있고,일이 잘 안 풀려 모든 일을 다 정지시키고 한 일주일 정도잠수 타고 싶을 때도 있다.그럴 때,아침마다 나는 거울과 대화를 한다."야! 나는 너를 잘 알잖아~ 오늘도 널 응원해"출근길에 받은 한 통의 전화!나와 동갑내기 창업자의 넋두리에 마무리는..."잘 하고 있어. 너무 고민하지 말고 좀 쉬든지."(출처: 허영만 작가님의 "식객")나는 응원이라는 말을 참 좋아한다.나에게 힘내라는 말보다 응원한다는 말이 너무 당긴다.힘들어서 지쳐있는데힘내라는 말은 얼마나 잔인한가.왠지 힘내서 더 몰아붙이라는 느낌으로 받아들여진달까?"힘내라~""파이팅"내가 너무 예민한가보다.좋은 의미로 건네는 말인데개인적으로힘들 때, 힘내라는 말은 공감되지 않는 인사말이다.너무 잦게, 너무 흔하게 쓰다보니 그런가?어쩌면 나와 거리가 있고, 나의 상황에 공감하지 않은 일상적인 위로이다.그에 반해 내가 좋아하는"응원한다"는 말은나의 힘듦을 어렴풋이나마 알고 있는 사람이나와 같은 상황을 비슷하게나마 공감하기에 할 수 있는 연대감 있는 위로이다.응원과 힘내라가 뭔 차이가 있냐고 물을 수 있다.개념적으로 응원은 여러 가지 의미를 가진다.힘내라고 말하는 것도 응원이겠지만,당신이 무얼 하든, 어떻게 하든전적으로 믿고, 지지한다는 뜻이 내포되어 있다.힘을 더 낸다면, 그것을 지지한다.잠시 쉬어야겠다면, 그것도 지지한다.포기하고 단념한다면, 그것도 지지한다.당신이 나의 의사에 따르는 것이 아니라,당신이 당신 자신의 판단으로 행동하는 것을난 믿고 지지한다.그런 의미로 난 당신을 응원한다.쉰다는 것!불과 10여 년 전만 해도사람들은 쉬는 것을 소비적인 행동으로 보는 경향이 있다.나도 그리 많이 쉰 적이 없는 사람이라이런 말은 할 자격이 없지만,쉬는 것은 생산적인 행동이다.이런 면에서 난 참 생산적이지 못 한 놈이다.쉬는 것은 재충전의 시간이다.힘이 고갈되면 힘을 짜내는 것이 아니라재충전을 해야 한다.그간 나는 휴가는 별로 없었다.어쩌면 정신없이 살아가면서도힘이 남아있었나 보다.그리고퇴근해서 가족과 함께 보내는 시간을 통해 늘 재충전이 되어왔었나 보다.나에게는 가족이 나의 충전소이다.그리고 포기하고 단념하는 것!모든 일에 무조건 끈기 가지고 매달리는 것도 어리석다.어떤 때에는 물러설 줄 알아야 한다.아까워도 포기해야 할 때가 있다.포기한 사람에게 "넌 왜 끈기가 없니?"라는 말보다는"수고했어!"라는 말이 더 필요하다.포기해야 하는 사람의 심정은옆에서 바라보는 사람보다 더 처참하다.더 고민을 많이 했고,더 두려움에 떨어야 했으며,더 자신과 치열하게 싸워서내린 결정이다.그렇기에 우리는 박수를 보내야 한다.비꼬거나, 내 그럴 줄 알았다 하는 식의 박수가 아니라진심으로 그의 선택을 존중하고, 새로운 출발을 응원하는박수를 보내야 한다.(같은 눈높이에서, 같은 것을 각자의 개성적인 시각으로 재해석하여 의견을 나누는 것이 스타트업의 미팅)공감이란 것은 조언하거나 가르치려는 입장에서 나오지 않는다.공감이란 것은 같은 선상에서 바라보려는 입장에서 나온다.회사 내에서 공감이 그러하다.경직된 조직체계와 상급자의 위치에서 직원들을 바라보면, 공감이 생기지 않는다.같은 입장에서 바라보려 하는 자세가 중요하다.스타트업의 수평적인 조직의 결과는단지, 같은 테이블 위에서 자유로운 분위기가 아니다.복장이나 호칭의 문제가 아니다.연공서열이나 나이, 경력의 틀을 깨는 것은 "수단"일뿐이다.수평적인 조직문화의 결과는 "공감"이다.공감하기 위해 우리는 수평적인 문화를 지향하는 것이다.직원들에게 "내 회사라는 주인의식을 가지라"라고 백날 말하는 것보다대표 스스로가 직원의 눈높이에서 바라보았을 때, "이 회사가 내 회사라고 인지"하도록 만드는 게 더 효과적이다.내 회사가 좋은데, 망하게 놔둘 사람이 어디 있는가앞으로 내 인생을 걸만큼 좋은 회사가 내 회사이면,더 좋게 만들려고, 더 힘을 낸다는 건 당연한 이치다.직원이 그렇게 느끼도록 회사를 만들어가려면,직원의 시각에서 회사를 바라봐야 한다.그러면, 무엇을 고쳐나가야 할지,어떻게 이끌어나가야 할지를 알게 된다.그다음은 바로 행동의 문제만 남는다어떤 정치인이 갑자기 지하철로 다니기 시작했단다.유독 선거철이 되면하루 최저생계비로 하루 체험하거나, 극빈층의 삶을 코스프레하기도 한다.그러나 그들을 바라보는 우리는 쇼인 것을 안다.(물론 제대로 된 정치인, 지도층도 있다.)그들이공감능력이 발달하지 않은 이유는 무엇일까?경험해보지 못한 세상이기에 그러하다.쌀이 떨어져 굶어 본 적도,차비가 없어 먼 길을 걸어 본 적도,다수의 남자들이라면 의무적인 군대를 가 본적도,남편과 자식을 위해 뜬 눈으로 걱정하는 어머니인 적도,가족을 위해 온갖 냉소와 거절 속에서 허리를 굽혀야 하는 아버지인 적도,신체의 불편함으로 사회 시스템에서조차 소외를 당한 적도 없다.물론 이런 것을 다 직접 경험한 사람만이 리더의 자격은 아니다.물리적으로도이런 경험을 다 할 수 있는 사람은 없으며,다양한 삶들을 모두 담아낼 수는 없다. 그렇지만우리에게는 간접경험이란 능력이 있다.커뮤니케이션!책이나 매체를 통해서든,사람들과 대화를 통해서든,만남과 협의를 통해서든...간접적인 경험을 통해 공감할 수 있다.상대가 말해도귀에 담아두지도 않기에뇌에 기억하지도 않으며, 마음으로 공감하지 않는다.우리는 머나먼 아프리카에 가 본 적이 없지만,그곳에 굶주리고, 아픈 아이들을 보고 눈물을 흘린다.TV프로에 소년소녀가장을 보며,ARS 후원을 하게 된다.우리는 사회적 약자에게부당하고, 불의한 대우가 있을 때,분노하고 마음의 쓰라림을 느낀다.보고, 들으면서 공감하기 때문이다.더 나아가 문제를 해결하고자 하는 욕구와방법에 대해 고민하며,더 나아가서는 행동으로 표현되어 더 나은 세상을 만드려고 한다.이것이 개인적인 범위에만국한되지 않는다.바로 스타트업에서도 동일하게 적용될 수 있다.더 크게는 분야별로, 국가적으로도 마찬가지다.공감하자.스타트업의 대표들은공감능력을 키워야 한다.배우고,듣고,나누고,행동해야 한다.직원들과의 공감뿐만 아니라고객과의 공감이 스타트업의 성공을 이끈다.오늘도 공감을 위해 글을 남긴다.#클린그린 #스타트업 #스타트업창업 #스타트업창업가 #창업자 #성공 #조언 #응원 #공감
조회수 1861

좋은 회사가 좋은 브랜드가 된다.

사랑받는 브랜드는 어떻게 만들어질까? 많은 기업들이 자신의 브랜드가 잊히지 않도록 시장에서 사랑받기 위해 고군분투하고 있습니다. 하지만 다각도로 급변하는 시장 상황에서 기존의 전략은 유효하지 않는 경우가 많습니다. 그래서 저는 새로운 해법을 찾아보기 위해, 젊은 열정을 갖고 있는 스타트업을 만나보기로 했습니다.2016년 봄. 저는 와디즈를 만났습니다.투박하고 소박한 것을 향해있는 와디즈의 따듯한 시선이 좋았습니다.금융권의 정보의 불균형을 해결하고 싶습니다.사람들의 이야기를 잘 들어주는 것이 우리가 해야 할 일입니다.-Brand Interview-브랜드는 정체성에 대한 이야기이며, 정체성은 사람으로부터 나옵니다. 그래서 제일 먼저 와디즈의 사람들을 만나고 이야기를 나누었습니다. 많은 분들을 인터뷰를 하며 구성원들이 브랜드 가치에 대해 이미 충분히 공감하고 있었고, 열의에 가득 차 있다는 것을 느낄 수 있었습니다. 와디즈는 분명 훌륭한 브랜드가 될 수 있을 거라고 확신했습니다. 하지만! 아이가 어른으로 성장하기 위해 자아탐색이 필요하듯, 브랜드도 꼭 그런 사춘기를 겪어야 하나 봅니다. 좋은 회사가 꼭 좋은 브랜드로 성장할 수 있도록, 먼저 와디즈가 좋은 어른이 되기 위해 기준을 세워보았습니다. 와디즈가 잊지 말아야 할 3가지! @Wadiz@Wadiz 와디(Wadi)는 사막의 강을 뜻합니다. 사막 같은 자본시장에 물줄기를 만들겠다는 당찬 포부가 느껴지는 이름입니다. @Wadiz회사의 뚜렷한 생각최근 금융권이 큰 변화를 겪고 있습니다. 많은 은행이 오프라인 지점을 축소하고, 새롭게 인터넷 전문은행도 등장하고 있습니다. 손해 없는 높은 수익을 내세우며, 새로운 투자임을 자처하는 신생 스타트업이 많아졌습니다. 대부분 편리한 사용과 함께 빠른 부의 축적을 내세우고 있죠. 우리는 어떤 차별점을 가지고 있을까?기존 금융은 극소수의 엘리트가 투자 결정을 내립니다. 스펙이 모자란 사람들은 시험대에 올라 누군가의 판단을 기다리며 그들의 미래를 운과 연줄에 맡겨야 합니다. 와디즈는 금융의 사회적 역할을 고민하며 극적인 발상의 전환을 이루었습니다. 소수의 투자자가 거액을 투자하는 것이 아니라 다수의 투자자가 소액을 모아 투자하는 방식*으로 새로운 길을 마련할 수 있다고 생각합니다. (*자금을 필요로 하는 수요자를 위해 금융 기관 없이 불특정 다수가 소셜 네트워크를 기반으로 자금을 모으는 방법을 크라우드펀딩이라고 말합니다.)  집단지성이 작동할 수 있는 커뮤니티를 만들어가고 있습니다.수익의 극대화만이 최고의 가치로 알게 되는 구조 속에서는 우리의 인간성은 상실되기 쉽습니다. 우리는 관점을 달리해 보았습니다. 기존 금융이 집중하던 스펙이나 실적보다 그 사람의 진정성 있는 이야기와 열정에 집중할 수 있도록 스토리텔링에 집중합니다. 이야기는 또 다른 이야기와 관계를 부르며, 이는 금융 플랫폼을 넘어 커뮤니티로 부를 수 있는 이유입니다. 꿈을 응원해주는 친구를 만나서 감성적 응원과 자금적 지원을 동시에 얻어가게 될 수 있습니다. 건강한 커뮤니티는 서로에 대한 신뢰로 만들어집니다. 기존 금융권에서는 열람되지 않았던 다양한 사실 자료를 예비 투자자에게 제공합니다. 스스로 비정상적인 활동에 대해 판단하여 결정할 수 있습니다. 법망을 피해 새로운 시도를 하기보다, 국가기관의 법적 안전망을 갖추어 서비스를 제공하고 있습니다. 와디즈는 투자자 보호를 가장 중요하게 여깁니다.이러한 현실적인 문제 해결을 통해 기존의 자본보다 Better Funding이 가능하다고 생각합니다. 이를 통해 건강한 Better Business를 가능하게 하는 것이 우리가 Better Life를 만드는데 기여할 수 있는 우리의 역할이라고 생각합니다.와디즈 슬로건 @Wadiz브랜드 일관성현대카드 상담전화를 하거나 계절밥상에서 식사를 하면 누구나 일관된 고객응대 태도를 느낄 수 있습니다. 보통 브랜드의 일관성은 고객 대응 매뉴얼로 정해져 있습니다. 와디즈 브랜드 일관성은 어떻게 정의해가야 할까요?  이 곳 와디즈에는 기존 시스템에 스스로 문제를 느끼고, 올바른 방향으로 변화시키고자 하는 분들이 모여있습니다. 누구나 세상을 바꾸는 멋있는 일을 꿈꿀 수 있지만 실제로 그 일에 뛰어들기란 어렵습니다. 더군다나 안정적이고 좋은 직장을 그만두고는요.  한 회사에 한두 명 만나보기도 힘든 분들이 다양한 전문성과 투철한 의지를 지닌 채 모여있습니다."기존의 불합리한 금융시스템을 와디즈와 함께 새로 만들고 싶어요." "내 아이가 자랑스럽게 이야기할 수 있는 회사에 다녔으면 좋겠어요." "내가 열심히 일할 수록 사람들이 행복해지는 일을 하고 싶어요."  와디즈는 구성원 모두 "We make  (      )  Better" 메시지를 스스로 만듭니다.와디즈의 가치에 공감하는 전문가분들과 함께더 큰 성장을 꿈꾸어 봅니다.최근 브랜드를 통해 자기표현을 하는 고객들이 늘어나고 있습니다. 그리고 자신과 비슷한 취향의 사람을 만나고 싶어 하죠. 이런 추세처럼 와디즈의 고객분들도 우리와 많이 닮아있습니다. 고객과 우리가 관심을 보이는 콘텐츠가 거의 동일합니다. 와디즈의 서포터*는 단순히 수익만을 바라보지 않습니다. 상품 하나하나에 의미와 가치를 따지며 펀딩하고, 이를 통해 사회적/윤리적 가치를 실현하기를 희망합니다. 와디즈의 메이커*는 일을 함에 있어 최선을 다하고, 실수를 솔직히 인정합니다. 신뢰를 중요하게 여겨 좋은 품질과 수익을 나누기 위해 노력합니다. (*서포터는 와디즈 프로젝트에 펀딩을 하는 지지자 *메이커는 와디즈 프로젝트를 개설하여 펀딩을 모집하는 자) 수익과 성장의 맹목성을 비판하며, 일관되게 자신이 하고 있는 업에 <질문>을 던지고 있습니다. 비슷한 가치관을 가진 사람들과 와디즈-다운 <답>을 찾는 과정에 올인합니다.환경을 생각하는 파도 에너지, 인진 / 총 218 명의 투자자에게 449,065,000원 배정완료 국내유일 수제자동차 모헤닉 게라지스 3차 앵콜펀딩 /  총 506명의 투자자에게 699,887,500원 배정완료고대 명물 영철버거 341% 달성 / 총 2,579명에게 68,115,000원 펀딩 내일에 대한 믿음브랜드는 잠깐의 선행이나 이미지 광고를 통해 고객의 관심을 끌 수 있습니다. 하지만 과거와 현재, 그 이후에도 이 모습이 일관될 것 같은 믿음을 준다면 고객은 잠깐의 친구가 아닌 영원한 친구가 될 수 있겠죠. 우리의 일관됨을 Rule을 만드는 것이 아닌 사람에게서 그 해답을 찾았었습니다. 내일에 대한 믿음 또한 외부가 아닌 내부에서 그 해답을 찾아보았습니다. 10명, 100명, 1000명, 10,000명 이상의 인원으로 성장해서도 동일한 생각을 유지하기 위해 개인의 성장, 우리가 머무는 공간, 함께 하는 시간에 대해서 많은 고민을 합니다. 1. 와디즈는 따듯한 시선으로 멤버 한 명 한 명의 진정한 성장을 옆에서 지켜봅니다. 그리고 서로를 응원하면서 와디즈의 성장을 꿈꾸죠. 그래서 인사제도 관련해서도 와디즈 브랜드가 잘 녹여져 진행될 수 있도록 많은 노력을 기울이고 있습니다. 구성원 모두 “하고 싶은 일”을 발견하고, 용기를 내어 마음 깊이 꿈꿀 수 있도록 와디즈는 돕고 있습니다. 서로의 가치에 공감하며, 함께 전문가로 성장할 수 있도록 합니다. 왜 그것을 못했는지 질책하기보다, 무엇이 문제였는지 파악하여 도울 수 있도록 합니다.2. 우리가 머무는 공간과 시간이 곧 와디즈-다울 수 있도록 브랜드 컬처를 만들기 위해 많은 시도를 하고 있습니다. 2017년 1월 공간 확장 때, 단순히 넓은 공간으로의 확장이 아닌 우리의 지향점이 곳곳에 녹아날 수 있도록 와디즈 콘텐츠에 대해 고민하였습니다. 와디즈의 사회적 임팩트를 매달 접해볼 수 있는 임팩트 포럼, 신규 입사자분들의 빠른 적응을 돕기 위한 부트캠프, 전문성 향상을 돕는 독서모임 등의 다양한 활동을 통해 와디즈-다운 것에 대해 서로의 공감을 얻을 수 있도록 노력합니다. 3. 와디즈는 지속적으로 근본적인 질문을 합니다. 좋은 질문은 그것만으로 새로운 길에 지혜를 얻을 수 있다고 합니다. 깊은 질문을 통해 와디즈 구성원 스스로가 열정과 철학을 발견하게 된다면 와디즈의 생각은 아름다운 허구가 아닌 견고한 현실이 되어 갈 수 있습니다.우리는 어떻게 살아야 할까요?우리는 왜 돈을 벌 까요?좋은 회사가 곧 좋은 브랜드가 된다. 거짓되고 자극적인 정보가 넘치는 세상에서 우리에게 필요한 것은 철학적 사유라고 합니다. 고객과 판매자는 영리해졌습니다. 그들은 기업이 만들어내는 가짜 콘텐츠를 금세 알아챕니다. 좋은 회사가 되기 위해 노력하는 과정 속에 자연스레 좋은 브랜드가 되는 것. 더 많은 이윤을 내는 것 이상의 사회적 사명을 추구하는 모습. 자신이 하는 말에 그 어느 때보다 더 진심과 신념을 담아야 합니다. 나침반이 없던 먼 옛날 뱃사람들은 밤하늘의 별을 보며 올바른 방향을 찾았습니다. 와디즈의 브랜드도 북극성처럼 길잡이가 되도록 밝게 빛나고 있겠습니다. 더 밝게 빛나 저 멀리서도 알아볼 수 있도록!#와디즈 #브랜드 #브랜딩 #마케팅 #마케터 #인사이트
조회수 1048

[Buzzvil People] Ben Yoo, Software Developer

 Buzzvil People에서는 다양한 배경과 성격 그리고 생각을 지닌 버즈빌리언들을 한 분 한 분 소개하는 시간을 갖습니다. 어떻게 버즈빌에 최고의 동료들이 모여 최고의 팀을 만들어가고 있는 지 궁금하시다면, 색색깔 다양한 버즈빌리언들 한분 한분의 이야기가 궁금하시다면, Buzzvil People을 주목해주세요.1. 간단한 자기 소개 부탁드립니다.  안녕하세요 저는 버즈빌에서 Server engineering 을 맡고 있는 유병우입니다. 회사에서는 Ben 이라는 닉네임을 쓰고 있고 저와 아내 사이에 아기가 하나 있는데 회사에서는 벤, 벤처, 미니벤이렇게 부르고 있습니다. 성격은 매우 Active 해서 웬만한 스포츠는 다 좋아하고 회사에서는 Rock band도 하고 있습니다. 프로그래머! 어린 시절 Basic 이라는 언어로 시작한 프로그래밍이 너무 재밌기도 했고 가능한 많은 사람들에게 유익을 끼치고 싶다는 생각에 Software Engineer 가 되었습니다. 10년 전 병역특례 시절 카카오톡 이전에 존재했던 m&Talk 이라는 무료 메신저 개발을 시작으로 삼성의 Chat@n, 그리고 Line, Naver 외 여러 앱에 들어가는 push notification platform 을 개발한 경험이 있습니다. 전 세계에서 억 단위가 넘는 유저들에게 서비스하고 그 유저들에게 좋은 경험을 선사하는 것이 저에게 더욱 Software 의 매력에 빠지게 만들었던 것 같습니다. 새로운 기능이나 개선사항을 배포하고 나면 유저들의 Feedback 을 보는 것이 아침에 눈을 뜨면 가장 먼저 하는 일이었습니다. (늘 즐겁기만 한 건 아니었습니다. 특히 버그를 배포한 다음 날엔.. -_-a)  2. 어떻게 버즈빌에 오시게 되셨나요?  Infobank 에서의 인연 Infobank 에서의 병역특례를 하면서 m&Talk이라는 메신저를 개발할 때 Product Team의 Jay 는 iPhone 쪽 개발을 주도하고 있었고 저는 Android 쪽 개발을 주도하고 있었습니다. 함께 하나의 Product 을 만들면서 여러 가지 의견을 주고받기도 했고 서로 부족한 부분을 잘 보완해주는 친구이자 동료라는 생각을 많이 했습니다.  창업을 결심 나중에 Jay가 미국에서 함께 잠금화면 서비스를 만들어보자고 절 찾아왔고 그렇게 해서 Slidejoy 라는 회사를 함께 공동창업하게 되었습니다. 당시 좋은 회사에서 만족하며 생활하고 있었고 한 가정의 가장으로서 불안정한 길을 선택하는 것에 대한 두려움이 있었지만 좋은 사람들과 함께 창업이라는 기회는 자주 오지 않는다는 것과 다음의 단순한 생각이 창업의 길로 저를 이끌었습니다.  “뭐, 굶어 죽지는 않겠지.” 버즈빌로 합병 많은 위기들을 헤쳐나가며 Slidejoy 는 계속 성장했고 좋은 기회에 한국에서 비슷한 서비스를 하고 있던 저희보다 규모가 큰 회사인 버즈빌로 합병을 하게 되었습니다.  3. 버즈빌에서 어떤 업무를 담당하고 계신가요?  신기술 & Refactoring  제가 Software 를 개발하면서 가장 중요하게 생각하는 것은 효율 / 훌륭한 Design 을 가지고 있는 프로젝트 설계인데요, 효율을 올리기 위해 Go 와 Kubernetes 등의 기술을 회사에 도입했고 MVP, MVC 와 같은 Design pattern 들을 도입해서 코드를 읽기 쉽고 서로 분리하고 재사용 가능한 구조로 만드는 것에 노력 중입니다.    Go server engineering 실제 업무는 BuzzScreen / HoneyScreen 에서 광고 및 콘텐츠 할당과 Slidejoy 라는 서비스의 API 서버 개발을 맡고 있으며 Slidejoy 클라이언트를 개발했어서 클라이언트 쪽도 조금씩 참여하고 있습니다. 새로운 기술에 관심이 많다 보니 BuzzScreen 과 HoneyScreen 할당 로직을 전부 Go 언어로 포팅했고 비약적인 성능 향상이 있었습니다. (Go 서버 개발하기)  4. 스타트업에서 혹은 광고업계에서 일하는 느낌이 어떠세요?  사람 > 회사 대기업에서의 경험과 다르게 스타트업에서는 한 사람 한 사람이 일당백인 경우가 많은 것 같습니다. 그리고 그런 한 사람에 의해서 회사가 좌지우지 할 수 있는 곳이 스타트업입니다. 회사가 겪는 크고 작은 성장과 위기 모두 그대로 직원들에게 전달 되다 보니 그만큼 Buzzvil 식구들 모두 함께 만들어가는 서비스의 성공에 초점을 맞출 수 있습니다.  모바일 광고 저는 사실 미디어에 큰 흥미가 없고 광고는 더더욱 관심이 없었습니다. 하지만 Mobile 이라는 Big wave 안에서 0에서 출발해서 수억 명이 사용하게 된 급속도로 성장하는 Messenger 를 개발을 몸으로 체험할 수 있었고 모바일 광고 역시 Buzzvil 을 성장시킨 Big wave 였다고 생각합니다. 이렇게 급속도로 변하고 성장하는 시장에서 스타트업에 분명히 가치를 계산할 수 없는 엄청난 기회가 있다고 생각합니다.  5. 이것만큼은 버즈빌이 참 좋다! 어떤 게 있으실까요?  밝고 명랑한 문화 회사 회식 중에서 저는 “친해지길 바래” 라는 테마를 정말 좋아하는데요. 그야말로 정해진 예산 안에서 소수의 사람들끼리 마음껏 놀 수 있습니다. 지난번 친해지길 바래 때는 간단히 막국수 먹고 그 외의 모든 예산을 사격 및 방탈출 등의 액티비티에 쏟아부었습니다. 회식 날 밤에 배가 고픈 건 태어나서 처음이었던 것 같아요. 올해 초에 다녀왔던 전 직원들과 함께 다녀온 Bali 에서의 워크숍도 빠질 수 없습니다. 워낙 서로 친하게 지내다 보니 밤잠을 아껴가며 놀았던 기억이 납니다. 휴양지를 다녀왔는데 한국 돌아와서 1~2주 체력적으로 정말 힘들었던 기억이 나네요. 어느 Slack 채널에서나 난무하는 아재개그와 어처구니없는 3행시, 직원들의 표정이 담긴 얼굴로 만든 이모티콘 등 직원들 사이에서 주고받는 대화에는 늘 위트가 넘칩니다. 다크할거야! 라고 생각할 틈을 주지 않습니다. 비록 웃기지 않더라도 응원해줍니다. 노력은 언젠가 결실을 맺을 것이라 기대하기 때문이죠. 같이 놀고 같이 공부하는 회사 마음껏 교육이나 운동을 할 수 있도록 지원해주는 프로그램이나 무제한 도서구매를 지원하고 다양한 주제의 동아리나 스터디 모임 등이 있고 이걸 회사 차원에서 장려하는 것이 빼놓을 수 없는 Buzzvil 의 특징인 것 같습니다. 머신러닝, 영어스터디, 통기타 등의 스터디 모임과 밴드, 축구, 배드민턴, 테니스, 필라테스 등의 동아리 모임 등 대부분 직원들이 하나 이상의 프로그램에 참여하고 있습니다.  6. 개인적인 목표나 꿈이 있으신가요? 있다면, 버즈빌에서의 경험이 어떻게 도움이 된다고 생각하시나요?  많은 사람들에게 편리함을 제공 잠금화면이라는 대부분 사람들이 기존에 크게 활용되지 않고 있던 공간에 Value 를 만드는 것이 버즈빌에서 더 열심히 프로그램을 개발하게 만드는 원동력입니다. 위에도 기술 했지만 저는 가능한 많은 사람들에게 유익을 끼치고 싶어서 Programming 을 하게 되었고 대부분의 다른 산업과 달리 제가 하는 개발 작업은 하나의 복제품을 생성하는데 Ctrl+C / Ctrl+V 만으로 충분하니까 좋은 제품을 만들면 더욱 발전돼서 긍정적인 영향을 더 널리 끼칠 수 있을 것 같습니다.  다른 개발자들이 읽기 쉬운 코드 실제 제가 일을 하면 할수록 기존의 코드를 구조화하고 모듈화하고 사용하지 않는 코드를 지우는 일에 열심을 가지고 있다는 사실을 알게 되었어요. 확장이나 활용이 가능한 Core 나 Library 쪽 개발을 주로 하면서 어떻게 짜면 제 코드를 사용하는 사람이 덜 혼란스럽고 잘 활용할 수 있는지와 어느 곳에 어떤 설계가 어울리는지도 많이 고민해왔던 것 같습니다 버즈빌에서 버즈스크린이라는 상품을 통해서 저의 이런 성향을 마음껏 발휘하고 있습니다. 여러 Publisher 가 쉽게 사용할 수 있어야 하고 SDK 등을 사용할 때 쉽게 Integration 되어야 하기 때문이죠. ‘내가 짠 코드를 인수인계 받을 사람이 연쇄살인범이고 그 사람은 너의 주소를 알고 있다고 생각하고 코딩하라.’ 라는 말이 있는데요. 누구에게도 부끄럽지 않은 코드를 짜려고 항상 노력합니다. 갈 길이 아직 멀지만 연쇄살인범이라도, 어떻게 이렇게 코드를 (잘?) 설계했는지 의논하러 오게 만드는 것이 저의 꿈입니다.     *고성장 스타트업 버즈빌의 채용공고(전문연구요원 포함)를 확인하고 싶으면 아래 버튼을 눌러주세요!
조회수 908

당신이 놓치고 있던, 측정 항목 : Dwell Time

Dwell Time은 가장 중요한 지표지만, 자주 오역되어 사용되는 웹사이트 측정 항목 중 하나입니다. 많은 마케팅 담당자가 데이터를 분석할 때 페이지에 머문 시간(Duration Time)만을 지나치게 신뢰하고 있지만, 단순히 사용자들의 체류시간은 그리 믿을만한 측정항목이 되지 못합니다.오늘 포스트에서는 , 도대체 Dwell Time 이 뭔지, 검색엔진이 왜 이 Dwell Time을 검색 결과 순위를 매기는 데 사용하는지, 그리고 여러분의 비즈니스 사이트에 이 Dwell Time을 증대시킬 수 있는 방법론에 대해서 자세히 써보겠습니다 :)Dwell Time이 뭘까?3년 전에 Bing 소속의 Duane Forrester 라는 분이 "퀄리티있는 컨텐츠를 만드는 방법론" 에 대해서 자세한 블로그 글을 쓴적이 있습니다. 이 글에서 Dwell Time에 대해서 처음으로 언급하게 됩니다.쉽게 말하자면, Dwell Time은 실제 방문자가 우리 웹사이트를 나가기 이전에 우리 웹사이트 내에서 사용한 순수 시간입니다. 단순히 머문시간이 아니라 '순수 사용 시간' 이라 이해하시면 될 듯 합니다. 이론적으로, Dwell Time이 길면 길수록 사용자들이 웹사이트에 있는 컨텐츠들을 소비할 확률이 높아지고, 우리 웹사이트 내의 다른 Action들로 전환할 수 있는 확률도 높아집니다.이탈률 그리고, 진짜 이탈률더 자세한 내용을 다루기 이전에, 이탈률과 '진짜 이탈률'의 차이를 짚고 넘어가는 것이 굉장히 중요합니다. 왜냐하면 우리가 다루고 있는 이 Dwell Time이 이탈률과 직접적으로 관련이 있기 때문이지요.Google Analytics를 포함한 모든 데이터 분석 플랫폼에서는 웹페이지 내 체류시간을 정확하게 측정하기 위하여, 2번의 클릭을 필요로 합니다. (웹사이트를 들어오는 클릭과 나가는 클릭). 하지만, 가장 중요한 나가는 클릭이 없다면, 25분 정도가 지나도 사용자가 아무런 움직임이 없을시에는 자동으로 해당 사용자가 나갔다고 판단하여 명확히 나간것인지는 모르겠지만, 세션을 종료해버립니다. 이것이 바로 이탈률과 진짜 이탈률 뒤에 숨어있던 원리입니다.6초 동안 방문하게 되는 트래픽이 진짜 이탈이라는 것이죠. 방문자가 사이트에 들어와서, 페이지를 바로 나가버리기로 결정했거나, 어떤 컨텐츠도 소비하지 않기로 마음먹고 바로 나가버리는 경우 6초가 걸립니다. 하지만 사용자가 방문하는 동안 들어와서 거의 30 분 정도 긴 시간 동안 긴 내용의 콘텐츠를 읽은 후 이탈하는 것은 실제 이탈 행위가 아닙니다. 따라서 순위가 높고 우수한 콘텐츠를 가진 페이지 중 일부가 높은 이탈률을 보일 수 있습니다. 이탈률은 높게 나올 수 있지만, 진짜 이탈률이 아닐 수도 있다는 것이지요.이것이 Dwell Time이 페이지 품질 및 관련성에 대한 신뢰할 수있는 지표인 이유입니다. 일부 마케팅 담당자는 이탈률이란 지표가 너무 단순하게 측정되기 때문에 신뢰할 수 없다고 생각합니다.Dwell Time은 검색엔진 순위에 영향을 끼칠까?검색 엔진에 의해 Dwell Time이 순위를 매기는 기준들 중 하나로 사용되는지 여부에 대한 토론은 SEO 분야에서 오랫동안 이루어졌습니다. Google은 알고리즘은 특정 측정 항목에 대해 영향력을 가지고 있긴하지만,  Google의 특정 기능을 살펴보면 Dwell Time이 가장 중요한 요소입니다. 하기 이미지의 기능은 지정된 도메인의 모든 결과를 차단하는 옵션입니다.Google은 체류 시간을 기준으로 검색 결과로부터 도메인을 차단할 수있는 옵션을 제공할지 여부를 결정한다는 이론이 생겼습니다. 당연히 정확한 사실은 여전히 수수께끼이지만, Dwell Time이 짧아지면 방문객에게 차단 옵션이 제공된다는 결과를 낳습니다. 이로 인해 구글 검색 엔진을 사용하는 사람들의 사용자 경험이 상당히 향상되었습니다.순위표에서 SERPs의 '더보기'기능으로 Google 알고리즘이 Dwell Time에주의를 기울이고 있다는 또 다른 증거가 있습니다.이 기능은 저작자와 밀접하게 연결되어 있습니다. 긴 Dwell Time을 가지고 있는 기사를 게시한 콘텐츠 제작자는 SERP에서 더 높은 게재 위치를 얻었고 기본 검색 결과 아래의 "More by" 링크로 다른 컨텐츠도 조회가 가능하도록  보상을 받고있는 것 같습니다.저작권이 중요한 신호로 남아 있지만 "더보기"와 도메인 차단 기능은 모두 Google에서 폐기되었습니다. (이 기능들이 얼마나 유용한지를 생각해 보면 부끄러운 일입니다.)어쨌든 구글 알고리즘은 사용자의 페이지 콘텐츠에 대한 품질 및 관련성을 안정적으로 추측하는 데 Dwell Time을 사용할 가능성이 높을 것입니다. 지금은 Dwell Time이 결정적인 순위를 매기는 항목인지 여부에 대한 정답은 없습니다.어떻게 Dwell Time을 늘릴 수 있을까?이제 우리는 Dwell Time이 무엇인지, 그리고 왜 그것이 검색 결과 순위를 결정하는 항목이라고 생각해야하는지, 알아보았습니다. 그렇다면 어떻게 해야 Dwell Time을 늘릴 수 있을까요 ?여러분이 Dwell Time을 늘리려고 노력할지 여부에 관계없이, 어쨌든 좋은 컨텐츠를 만들기 위해 네 가지 중 적어도 세 가지는 해야합니다. 체류 시간을 늘리는 말도 안되는 마법 같은 것은 아니지만,  이러한 기술을 직접 해보면 사이트 내 콘텐츠의 이탈을 어느정도 줄일 수 있습니다.1. 더 좋은 컨텐츠를 만들자 !체류 시간을 늘리는 데 도움이되는 첫 번째 제안은 당연하게도 더 나은 콘텐츠를 만드는 것입니다. 아무도 쓰다만 내 물건을 아무도 사용하지 않는 것 처럼, 우리는 쓰레기와 같은 컨텐츠를 만들면 의미가 없습니다.블로그 게시물, 인포 그래픽 또는 비디오를 제작하든 좋은 콘텐츠는 다음과 같아야합니다.- 유용해야 한다. (실무적이거나 교육적인것)- 재밌어야 한다. (재밌거나, 평범하지 않거나, 놀라운 것)- 이해가 쉬워야 한다. (탁월하고, 대화가 잘되고, 잘 설계된 것)콘텐츠가 좋을수록 방문자가 머무를 확률이 높아 지므로 체류 시간이 길어집니다.2. 사이트 내 연결 링크를 자주 사용하자 ! 체류 시간은 페이지에 도착한 후 다시 검색결과창으로  돌아가는 시간 사이에 측정되므로, 사용자가 콘텐츠를 읽었을 때 취할 추가 행동을 사용자에게 제공하는 것이 좋습니다. 따라서 사이트 콘텐츠 내 두번째 링크를 두는 것은 방문객에게 더 나은 사용자 환경을 제공합니다.물론 SEO를 극대화하려면 내부 연결이 필수적입니다. 강하고 논리적인 내부 연결 전략이 없으면 사이트가 검색 결과 순위에서 어려움을 겪을 수 있습니다. 검색 엔진의 거미가 철저하게 여러분의 위치의 전체 index를 붙일 수 없을지도 모르기 때문입니다.3. 더 나은 참여 전략 채택하라 !다른 기사 및 페이지에 대한 내부 링크가 방문자가 사이트를 더 오래 머물도록 유도 할 수있는 것처럼 콘텐츠 참여 기법도 사용할 수 있습니다. 여러분의 독자에게 관련 콘텐츠를 제시함으로써 독자가 여러분의 사이트에 계속 머물 수있는 강한 인센티브를 제공하게됩니다. 이 전략은 올바르게 구현된다면, 매우 효과적일 수 있으며 추천 기사는 독자가보고있는 콘텐츠에 더 밀접한 관련이 있기 때문에, 클릭을 통해 귀하의 사이트에 머무를 확률이 높습니다. 결국 방문자가 검색결과 창으로로 돌아 가지 않고도 관심있는 주제에 대해 더 많이 알게될 수 있어 유용하지요.4. [Pageless 스크롤 디자인]을 도입하라 !Dwell Time을 늘리는 데 사용할 수있는 또 다른 기술은 웹 페이지에 "무언가"또는 스크롤되는 디자인을 도입하는 것입니다. 스크롤이 긴 웹페이지는 사용자 경험 측면에서는 우수 할 수 있지만 실제로 구현이 잘못되면 SEO에 피해를 줄 수 있습니다. 이는 검색 엔진 크롤러가 클릭이나 스크롤과 같은 사용자 동작을 항상 추적할 수 없기 때문입니다.(멍청하거든요)다행히도 많은 작업이 필요없는 편리한 솔루션이 있습니다. 검색 엔진 크롤러가 스크롤링 페이지의 컨텐츠를 철저하게 색인 할 수있게하려면 페이지를 다른 페이지 섹션으로 분리해야합니다. 각 섹션에는 유사한 <title> 태그가 있으며 rel = "next"및 rel = "prev"값은 <head> 태그에 선언되어 있으면 좋겠죠.무한 스크롤 페이지에 페이지를 매기는 방법에 대한 자세한 내용은 해당 주제에 대한 Google의 공식 블로그 게시물을 확인하시면 됩니다.결론Dwell Time이 검색결과 순위를 측정하는 항목인지 여부에 관계없이 방문자가 사이트에 머문 시간을 늘리고 이탈률을 낮추는 것은 굉장히 유의미합니다. 위에 나열된 기능을 구현하면 페이지를 더 끈끈하게 만들고 방문자에게보다 매력적인 경험을 제공하며 잠재적으로 전환을 늘릴 수 있습니다.퍼포먼스 마케팅 에이전시, 오피노 바로가기
조회수 776

부정을 바라보는 관점

"저는 항상 고민이 많습니다. 그래서 이렇게 사연을 보내게 되었습니다. 고민하는 문제들이 타인에겐 작은 문제일지라도 저는 심각하다고 늘 느낍니다. 항상 부정적인데 친구들이 저의 그런 부정적인 문제점을 닮아간다고 해서 저 고민이기도 합니다. 저의 그런 늘 부정적인 면 때문에 사람들과 갈등도 많아지고 제 자신도 너무 힘들답니다. 고치려고 노력하지만 정말 힘들더라고요. 그래서 조언을 조금 듣고 싶어요." - '쬬맹이쿠키'님의 사연종종 우린 '긍정의 힘'에 대해 듣곤 한다. 그래서 다들 긍정 긍정한다. 마치 긍정적이면 작은 기적이 일어날 거라고 믿는 모양이다. 긍정이란 진짜 뭘까? 어떠한 힘든 순간에서도 웃을 수 있는 힘? 다시 일어날 수 있는 힘? 긍정적인 사람은 타고나는 걸까? 아니면 상황에 따라 변하는 걸까?나도 오래전부터 비슷한 경험을 했다. 나는 분명 철 없이 해맑고 긍정적인 사람이었는데 어느 순간 주변 사람으로부터 왜 이렇게 부정적이냐며 핀잔을 받았다. 그리고 나 자신에 대해 혼란이 가기 시작했다. 왜 이렇게 많은 것들에게 대해 호의적이지 않고 비판적인지, YES가 아닌 'NO를 먼저 말하고 생각하게 되었는지 꽤나 오랜 시간 동안 고민하고 돌이켜보니 상황에 따라 내가 겪어온 환경에 따라 변할 수 있다는 것을 알게 되었다. 닥친 환경이 얼마나 사람을 많이 변화시키지를 사람들은 모른다. 어떤 트라우마들이 쌓이고 쌓여 두려움을 안겨주었는지 이해하지 못하는 것 같다. 무엇보다도 '부정적'인 면모가 얼마나 살아가면서 우리에게 필요한지를 모르는 사람도 꽤 많다고 느낀다. 어떤 책들은 마치 긍정적이면 이 세상 모든 것을 해낼 수 있을 것처럼, 어떤 어려움도 다 헤쳐나갈 수도 있을 것 마냥 긍정을 우리에게 요구한다. 그렇다고 '부정적'인 사람을 마냥 옹호하는 것은 아니다. 다만 '부정'이 단지 나쁜 의미가 아니라는 걸 말해보고 싶다. 개인적으로 나는 부정적이기에 현재의 내가 있다고 생각한다. 마냥 철 없이 긍정적이던 그때의 나보다 현재 부정적인, 비판적인 내가 나는 더 좋다. 우리는 비판하고, 부정적인 사고를 가져야 성장을 한다. 되러 현재에 만족하며 살아가자는 긍정적인 사고는 성장을 멈춘다고 생각한다. 사실 부정과 긍정은 정말 밀접한 관계가 있다는 걸 느낀다. 마냥 긍정도 마냥 부정도 결국 우리에 인생에 있어 아무 도움이 되지 않는다는 것이다. 내가 생각하는 부정은 '현실 직시'와도 같다. 내가 부족한 점이 있다면 그걸 인지하고 더 좋아지도록 노력하는 것도 일종의 부정에서 비롯된다고 생각한다. 물론 나의 부족한 점을 포용하고 긍정적으로 받아들이고 살아갈 수도 있다. 그냥 현재 나에게 만족해하며 살아갈 수 있다. 본인이 그렇게 사는 것이 행복하다면 말이다. 하지만 나의 부족한 점을 채우고 조금 더 나은 결과를 원한다면 현재를 부정해야 한다. 현재에 만족하고 안주하지 않고 현재, 현실을 인정할 줄 알아야 우리는 앞으로 나아갈 수 있다고 생각한다. 개인적으로 나는 그렇게 생각하고 늘 그래 왔다.잘될 거야!라고 무작정 긍정적으로 믿고 멈춘다면 그 이상으로 원하는 바로 나아가기가 힘들다. 그저 믿는 긍정은 부정보다도 못하는 생각이 든다. 이런 친구들이 있다. 무슨 말만 하면 부정적으로 대답하는 친구들. 가끔 정말 분위기를 망치기도 하고 그런 사람들과는 함께 하기가 거부감이 들 때가 많다. (나도 그런 사람 중 한 사람 아닐까 싶다) 하지만 그런 친구들의 이야기를 잘 곱씹어보면 정말 현실 직시를 하는 이야기를 해줄 때가 많다. 물론 매번 그러면 정말 짜증 나고 함께 하기 힘들다고 생각하게 되지만.. 개인적인 경험이지만 나를 포함해 주변 부정적인 사람들을 보면 보통 겁이 많다. 그리고 부정적인 경험에서 오는 불안감도 큰 것 같다. 이런 일이 있었는데.. 또 이러면 어쩌지?경험, 트라우마에서 오는 일종의 방어가 아닐까 싶다. 그렇다고 부정 자체를 마냥 옹호하고 싶지는 않다. 더군다나 주변 사람들을 너무 힘들게 할 만큼 부정적인 영향을 끼친다면 더더욱 말이다. 부정적인 사고는 가지되, 부정을 긍정으로 그리고 긍정을 부정으로 오고 가며 사고하는 방식을 배우면 좋겠다. 예를 들어 앞으로 나가기 위한 부정 말이다. 그리고 부정함을 완화시키기 위해서 조금씩, 앞으로의 좋은 경험을 쌓을 필요가 있지 않을까 싶다. 내게 부정적인 이미지로 고민으로 다가왔던 것들을 하나하나씩 긍정적인 경험으로 쌓도록 노력한다면 조금은 완화가 되곤 한다. 물론 사람마다 각각 다른 방법과 정도가 다르겠지만 말이다.  '부정' 자체를 너무 부정하지 말자 (부정에도 긍정만큼의 힘이 있다.) 부정을 통해 긍정을 얻도록 노력해보자 (부정을 긍정으로 완화시키는 노력을 조금씩 해보자) 전문가에게 도움을 받는 것도 꼭 한번 고려해보자 (감기에 걸려서 병원에 가듯이, 마음이 아플 때도 병원에 가는 것은 당연한 것이다.) 부정적인 본인을 너무 미워하지 말자. 나의 부정적인 면도 이해하고 감싸주면 변화가 올 수 있다.끝으로 부정적인 나의 곁에서 나의 존재 자체를 받아주고 나를 응원해주는 그리고 변화하도록, 노력하도록 도와주는 주변인들에게 진심으로 고맙다는 말과 미안하다는 말을 한 번씩 해보는 건 어떨까? 주변인들에 대한 감사와 미안함으로부터 부정에서 긍정으로의 작은 변화가 시작될 수 있다.안녕하세요. 스푼 라디오입니다.'쬬맹이쿠키' 님, 본인의 부정적인 면을 먼저 안아주고 이해해주셨으면 좋겠습니다. 먼저 왜 이렇게 무엇이 나를 부정적으로 만들었는지에 대한 생각과 시간이 먼저 필요하지 않을까란 생각과 함께, 부정적인 면도 충분히 노력을 통해 개선될 수 있고, 부정도 꼭 필요한 감정중 하나라는 것도 알아주셨으면 좋겠습니다. 얼마든지 노력 또는 환경에 의해 개선될 수 있는 부분이라고 생각합니다. 혼자 고민 많이 되셨을 텐데, 사연을 이렇게 보내주셔서 감사합니다. 끝으로 쬬맹이 쿠키님께 따뜻한 겨울맞이 하시길 바라며 스푼에서 직접 제작한 스푼 굿즈 Made in Spoon '담요' 그리고 '머그컵'을 보내드리도록 하겠습니다.누구에게나 사연은 있다.당신의 사연, 고민을 함께 나누는 공간 스푼 라디오입니다.사연에 채택되신 스푼 유저 '쬬맹이쿠키'님께 스푼 라디오 공식 굿즈를 선물로 보내드립니다.여러분의 이야기를 듣고 싶습니다. 스푼 라디오에 사연을 보내주세요.사연에 채택되신 분들께 소정의 선물을 보내드립니다.자세한 사항은 [email protected]으로 문의 바랍니다.
조회수 307

“점점 더 좋은 답을 찾게 되는 것 같아요.”

인터뷰를 위해 작성한 질문지에 쓴 답을 보고 조금 감동받았다. 사실, 인터뷰 전 질문지는 흡족한 대답을 듣기 위함이라기보다 만나기 전 아이스-브레이킹 같은 개념이라 서로가 힘을 싣지 않기 마련인데 조윤성은 달랐다. 질문 하나하나에 얼마나 고민을 하고 성심성의껏 답을 썼을지 투명하게 보이는 답안들을 건네주었다. 더 추가적인 질문을 할 게 있을까 당황이 들 정도로 충분히 100% 다 눌러 담아낸 듯. 비록 질문지의 답을 그대로 적더라도, 계속 사람들을 만나고 더 좋은 답을 찾고 싶다는 그와 만나 좋은 답에 대한 이야기를 나누어야겠다는 생각이 들었다.인터뷰 시작하기 전, 자신감 충전 좀 하고 가시죠. 입사한지 얼마 되지 않았는데 이번에 처음 생긴 MBP(Most B.A.Table Player) 시상식(?)에서 유기적인 협업상을 받았잖아요. 축하해요!하하 너무 쑥스럽네요. 진짜 예상도 못 했거든요. 나 지금 잘하고 있는 건가, 뭘 더 해야 하는 건 아닌가 하는 생각이 들 찰나에 이런 상을 받게 되었네요. 앞으로 더 잘하라는 부담인 것 같기도 한데.. (웃음) 어쨌든 더 열심히 해보겠습니다!자, 기분 좋은 부담을 안고 인터뷰를 시작해볼까요? 먼저 조윤성이 어떤 사람인지 말해주세요.안녕하세요. 사람에 대한 관심이 많은 AE 조윤성입니다. 음, 쓸데없는 생각이 많은 사람일 수도 있는데요. 누군가가 어떤 행동이나 말을 하면 왜, 무슨 생각으로, 어떤 이유로 그런 말이나 행동을 했는지 궁금하고 생각하게 되는 편입니다.이런 성향(?)이기 때문에 지금 하는 일이 적성에 맞는 것 같은걸요. (웃음) 자연스럽게 이어질 것 같으니 B.A.T에서 무슨 일을 하고 있는지 알려주세요. 전 클라이언트 커뮤니케이션과 광고 기획을 담당하고 있습니다. 현재는 레드락, LG 소셜 캠퍼스, KT&G 등의 브랜드를 맡아 클라이언트와 내부 크리에이티브 팀 사이의 커뮤니케이션을 진행하고 디지털 컨텐츠 방향을 조율합니다. 또, 경쟁 PT도 준비하면서 제안서를 이끌어갈 빅 아이디어를 생각하고 온오프라인 캠페인 아이디어를 고민하고 있고요. 최근에는 신사업 준비를 위해 다양한 포토그래퍼와 PD 분들도 만나고 있어요! 워낙 사람들과 만나서 대화하는 걸 좋아하다 보니 즐겁게 돌아다니고 있습니다. [(좌) LG 소셜 캠퍼스, (우) 레드락 프로젝트 외에도 많은 프로젝트를 담당하고 있다.]B.A.T는 어떻게 알고 지원했는지 궁금해요.전 회사에서는 사수가 기본적인 방향을 잡아주고 퀄리티 컨트롤을 해주셔서 조금은 수동적으로 일을 했던 것 같아요. 스스로가 더 주체적인 개념이 되어 다양한 실무에 직접 부딪혀보고 싶다는 욕심이 생겼을 때, 우연히 B.A.T를 발견하게 되었습니다. 관심이 생겨 브런치를 정독하다 보니 가보지도 않은 회사에 일원이 된 듯한 호감을 느끼기도 했고, 스타트업이기에 하고 싶은 것들을 도전해볼 수 있겠다는 생각이 들어서 주저 없이 지원하게 되었습니다.그래서 지금 만족스러운가요?생각했던 것처럼 100% 흘러가진 않지만 (웃음) 지금보다 더 나은 방법에 대해 고민하고 디테일까지 꼼꼼하게 신경 쓰며 진취적으로 일할 수 있는 부분들은 좋습니다. 철저한 아웃풋 퀄리티에 신경 쓰다 보니 책임감도 더 생기고 제 자신이 발전하는 것 같기도 하고요. 아, 무엇보다 함께 일하는 좋은 사람들, 자유로운 근무환경, 다양한 분야의 지식 공유 등이 만족스럽습니다!최종적으로 이루고 싶은 목표가 있다면.요즘 고민하는 부분이기도 한데, 제 스스로에 대한 브랜딩이 확실해야 할 것 같아요. 대체 가능한 누군가가 아닌 저만의 무기를 가지고 이런 상황에선 바로 저라는 사람이 생각날 수 있도록 말이죠. 그리고 이 모든 것을 아우를 수 있는, 필요한 사람이 되고 싶어요!오, 멋지네요. 마지막 질문이에요. 윤성님에게 B.A.T란?Better Answer Team이요! 아무리 자신의 프로젝트라고 해도 혼자 생각하고 일하다 보면 항상 막히거나 부족한 부분이 나오기 마련인데, 그럴 때마다 주변 동료들에게 도움을 요청하고 이야기를 나누다 보면 항상 더 좋은 답이 나왔어요. 특히 우리가 하는 일은 그저 그런 답이 아니아 항상 지금보다 더 좋은 답을 찾는 일이잖아요. 그래서 B.A.T는 지금 제 일을 더 잘 할 수 있게 해주는, 더 좋은 답을 찾게 해주는 Better Answer Team입니다!
조회수 1246

창업과 사업으로 전환하기

"나는 초보 창업가입니다.""나는 아직 사업을 시작도 안 했습니다."라는 말을 입에 달고 살았다.이제 막 제품을 출시하고,판매를 하고, 입점 계약을 하나 둘 하면서사업으로 전환되기 직전에수박 겉 핥기 식으로 경험하고 있다.모든 것이 또 다른 첫 경험들 뿐이다.더욱더 물어볼 일이 많아졌고,만나야 할 분들이 많아졌다.밖에 나돌아야 하는 일이 늘어난 만큼밀린 결재서류는 밤마다 선 잠자게 만든다.내가 창업과 사업을 나누는 기준은"고객에게 팔아봤어?"이다.그리고 부수적으로 몇 가지 Gap을 극복해야 한다고 믿는다.시제품을 뚝딱뚝딱 만들고,수정하고, 피드백을 받고,다시 뚝딱뚝딱....투자를 유치하고,또 부족한 자금을 구하러동에 번쩍, 서에 번쩍!!아이디어에서 시제품까지,예비창업자에서 재무제표가 발행되는 순간까지,전시회에서 제품 입점 판매까지....우리는 여러 가지 과정들을통틀어서 창업활동이라고 부른다.이때만 해도...사실 테크트리...다시 말해 사업계획서만 제대로 만들어서로드맵을 따라 잘 따라가기만 해도창업이라는 활동은 잘 굴러간다.(물론, "진짜 사업계획서"라는 전제 하에서...)창업과 사업 사이에 어떤 차이가 있을까?1. 팀빌딩과 HR은 전혀 다른 이야기다.아는 친구들과 술자리 하다가 한 놈이 우웩~~ 하고 토할 때,등을 두드려주며..."나랑 같이 하자"라며...팀을 결성하는 것과공채로 직원을 채용해서 업무분장을 하고, 함께 동행하는 것과는 다르다.친구나 지인과 팀빌딩을 했을 때는우리가 알게 모르게 "정"이라던가"친분"에 의해 서운한 것도, 희생하는 것도묻고 넘어가고 있지만...정식으로 채용 절차를 밟고 전혀 다른 인생을 살던 멤버들과같은 방향, 고난 길을 걷도록독려하고, 챙길 것은 챙기면서나아가는 것이 어떻게 같을 수 있는가.특히나,매달 쏜살같이 다가오는 급여일,한 해가 지나고 연봉협상의 시기가 올 때면우리는 그 차이를 확실하게 느낄 수 있다.2. 제품에 대한 평가시제품을 만들 때만 해도,사실 주관적이고, 우호적인 평가를 많이 받는다.왜냐면... 아직 완성되지 않은 아이디 어니까.주변인들부터 심지어 고객 체험까지도부족한 부분에 대한 피드백을 받으면수정/보완하면 되는 거니까.그러나 완제품이 나오는 순간부터는객관적이고 냉철한 평가가 기다리고 있다.제품에 하자가 있다는 것은 돌이키기 힘든 치명타이다.고객이 돈을 지불하고 구매하면서 기대하는 가치에미치지 못한다고 판단되면 가차 없이 외면당한다.시제품 만들 때, 주변의 칭찬이나 찬사에마음이 홀리면 안 된다.진짜 평가는 고객이 구매를 하면서숫자와 재구매로 드러나게 된다.3. 통장 잔액의 차이창업의 시기에는 통장 잔고가 비어있다는 점을어느 정도 감수할 수 있다고 믿는다.정부지원제도도 많이 있지만,융자라던가, 투자의 가능성이 어느 정도 열려있기 때문이다.하지만 매출이 발생하면서의투자와 융자는 매우 명확한 기준으로 정해져 있다.매출이 잘 나오면 문제없겠지만,매출이 시원치 않으면,다이렉트로 거절당하기 십상이다.이전에 시제품일 때는아직 검증받지 않은 단계라서...과거와 현재의 기준이 모호한 상태에서투자자에게 멋들어진 미래를 설명하고,근거는 미약하지만 가능성을 주로 제시할 수 있었지만,완제품이 출시된 후에는너무나도 확실한 근거와 추정 가능한 확장성이눈에 뚜렷하게 그려지기 때문에과거와 현재를 기반으로 미래를 예상할 수 있다.그리고 한 가지 더!통장에 잔액을 비용으로 나갈 것을 산정해서회사의 운영기간을 예상하던 시절에서들어오는 자금과 나가는 자금을 따져가면서, 수익성을 근거로회사의 존속기간을 계산한다.이게 참 단순하지가 않다.세금과 예상치 못 한 비용 지출이 늘어나고,인건비 상승, 협력사 납품단가 조정, AS예비비,원재료 구매비용 상승분, 운영비 상승분, 물류비,마케팅 비용, 심지어 계약을 위해 들어가는 영업비용까지...특히나 고정비는 참 빠르게 증가하더라.디지털 노매드 족,코워킹 스페이스로 줄일 수 있는 한계점이 반드시 오게 되어있다.게다가신경 쓸 자금 운용의 문제가 한두 가지가 아니거든.수익성이 좋아질 이유보다 안 좋아질 이유가 더 많다.가격은 한 번 정해지면 내려가기는 쉬워도올리는 것은 언감생심이고....제품의 수명은 한정되어 있기에...다가오는 탈모 현상을 막을 수 없다.창업이라는 리그에서는 잘 살아남았을지 몰라도,사업이라는 리그에서는또 미지의 세계에 들어간다.귀가 따갑도록 듣던 시장에 관한 중요성을실감하는 시기가 바로 이 시기가 아닐까.처음이라 그런 거 아니냐고 자위해보지만....10년째 사업을 영위하고 있는 멘토 형님은 이렇게 답해주셨다."처음부터 오늘, 지금까지 계속 그래 왔어"참으로 무서운 세상에 무식하게 들어왔구나란 인식을 하게 되었다.이제 막...영업하고, 제품을 팔러 다니다 보니왜 간절함이란 단어가....간이 저릴 정도의 절실함인지... 알겠더라.지금 하나라도 더 팔지 못하면,이번 주에 목표한 매출을 달성하기 어렵고,한 달, 두 달 이어지면...직원들의 급여와회사의 결제 미지급과그동안 기대와 응원해 준 분들에게약속을 못 지키게 되는 것이다.신뢰를 깨는 것이고,사업가로서의 자질의 문제가 발생한다.시제품이 구현되어 현실화되었다고?그동안 가졌던 계획도 현실화되었다고.그것도 매우 구체적이고, 선명하게 말이야.이제는 고객이 얼마나 관심을 가졌는지,긍정적인 반응이 얼마나 되었는지,구매의향서가 몇 장이었는지 등의애매모호한 지표들이 아니라구매라는 숫자,재구매라는 성과로 증명되어야 하는 때고,그동안의 가설이 정답을 내놓아야 할 때라고.그리고 그에 따르는 엄청난 서류들이 우리를 기다리고 있다.어려운 단어와 처음 접해보는 양식들에섣불리 도장 찍을 수 없도록마음을 단디 해야 한다.나름 "청년창업사관학교"라는 곳에서처음 창업의 도움을 받았을 때,서류 작업이 많다고 곤란해하던 분들!(나를 포함해서....-.,-)지금에 와서는 그때 툴툴거렸다는 사실에술안주 거리 정도로 우습게 에피소드 일뿐!그만큼 그래도 우리가 성장했다는 걸까?그럴수록 우리는 더 정신 바짝 차려야 한다.창업가로 익숙해지면 안 된다.어서 빨리 사업가로 변해야 한다.조급증도 생기고,의무감과 책임감은 더 커진다.두려움의 크기는 이미 오래전에감당하기 어려울 정도의 괴물이 되어 있다.그렇기에 더 빠르고, 정확한 판단과 결정이 필요하고더 조심하고, 과감해야 하는 딜레마스런 상황에 놓이게 된다.다음에 시간이 좀 나면,사업을 두 가지로 나누어 이야기 나누겠다."장사"와 "사업"으로 말이다.생각 외로 쓸 이야깃거리가 늘어나는데...압박감으로 글 쓸 마음의 여유가 안 생긴다.일전에 말했던 "내가 생각하는 정의(Justice)"에 대하여도쓰다가 멈추고를 반복한 게 벌써 2달이 흘렀는데...그리고...스타트업에게 다가오는 검은 손길에 대한 글도 예전에 써 놓은 게...오래 묵혀서 발효가 되었는데...숙제가 되는 것 같지만,브런치에 글 하나 올리고 나면 그래도 스트레스와 잡념이 사라지니까~!그리고 특히나요즘에는 와디즈 크라우드 펀딩을 진행하면서그나마 동료들에게, 투자자분들께이런 핑계로 글을 남기고 있다."저... 브런치를 활용해서 영업하고 있어요.""미약하지만 나름 홍보하고 있어요."라고...그런 의미에서...클린그린의 첫 제품에떼떼를 만날 수 있는 와디즈 크라우드 펀딩 소개로 마무리!추천과 지지서명으로 저의 압박감을 덜어주세유~~!좋은 글을 꾸준히 남기도록제 논리의 이유와 근거가 되어 주세요.#클린그린 #스타트업 #창업가 #창업자 #마인드셋 #조언 
조회수 488

출퇴근기록 시스템 도입. 꼭 따져보자

귀하의 비즈니스에 도입할 적합한 도구 또는 시스템을 찾는 것은 간혹 어려운 프로젝트가 될 수 있습니다. 운영방침에 맞는 완벽한 소프트웨어 검색은 그 자체만으로도 매우 시간 소모적인 작업입니다. 몇 가지 옵션을 찾았다고 하더라도 이는 시작에 불과합니다. 많은 사장 또는 관리자는 직원들의 출퇴근기록을 위해 POS 내의 근태관리 서비스, 인트라넷, 펀치 카드 등과 같이 쉽게 찾을 수 있는 서비스를 선택하곤 합니다. 요즘처럼 이미 많은 업무들이 디지털화된 시대에 모바일 앱을 통해 근무표 스케줄링이나 출퇴근기록을 할 수 있다면 편리하고 매력적인 옵션이 될 수 있습니다.부적절한 출퇴근기록 시스템을 도입하면 무엇이 잘못될 수 있까요?신뢰성 저하: 직원은 동료를 위해 대신 출퇴근해 줄 수도 있습니다.관리 권한 불충분: 시스템에 액세스 레벨이 명확하게 구분되지 않는 경우, 누구나 출퇴근기록에 접근하여 수정할 수 있으므로 효과적이지 않습니다.다수 지점 지원: 둘 이상의 매장을 운영하십니까? 도입한 출퇴근기록 시스템이 다수 지점을 지원하지 않으면 각 매장마다 출퇴근기록 자료를 수집하는 것이 불편합니다.낮은 접근성: 어디서나 시스템에 접속할 수 있습니까? 말 그대로, 관리자가 스마트폰이나 자택의 PC에서도 출퇴근기록을 관리할 수 있나요? 출퇴근기록을 정정하거나 보고서를 만들기 위해 내일 아침까지 기다리는 당신을 상상해보세요.리포트/급여정산 업무: 기록된 출퇴근시간만 출력해 볼 수만 있는 출퇴근기록 시스템을 사용하고 있나요? 리포트 기능이 없으면 사용자가 직접 보고서 및 급여정산 작업을 수행하게됩니다.이 외에도... 목록은 계속됩니다.시프티는 위의 출퇴근기록 문제를 모두 해결할 뿐만 아니라 근무일정 스케줄링 및 급여정산까지도 서비스합니다. 근무일정과 실제 출퇴근기록을 대조하여 어느 직원이 근면하고 태만한지도 분석할 수 있습니다. 각종 출퇴근 및 지각 알림 기능은 보너스!시프티 - 근무일정 스케줄러 및 출퇴근기록기의 장점:다수 지점 관리가 가능합니다. (자세히 알아보기)총괄관리자와 지점관리자 중 관리자 액세스 레벨을 배정할 수 있습니다. (자세히 알아보기)직원들의 근무일정 스케줄링직원들이 자신의 스마트폰을 이용하여 출퇴근기록을 하도록 합니다.근태 보고서를 열람하거난 시급직원에 대한 급여정산을 처리할 수 있습니다.계획한 근무일정이 직원들에게 실시간 공유됩니다.출퇴근기록 활동에 대한 알림을 받습니다. (출근/퇴근, 지각, 초과근무 알림)복잡하고 어려운 직원관리 업무도 적합한 시스템을 도입한다면 많은 시간을 절약 할 수 있습니다.시프티의 출퇴근기록기에 대해 자세히 알아보세요.#시프티 #고객가치 #핵심가치 #기업소개 #서비스소개
조회수 908

할아버지/할머니도 코딩을 해야 하는 이유

대부분의 교육은 초, 중, 고등학생이나 대학생 등 주로 젊은 층을 위주로 진행되고 있습니다. 프로그래밍 교육도 마찬가지로, 현재 10대에서 30대인 주로 젊은 층의 학생과 직장인들을 대상으로 교육이 서서히 일어나고 있습니다. 하지만 높아진 평균 수명으로 노인층이 급격히 늘어나고, 빠르게 변화하는 산업 아래 노인층의 재교육을 통한 지속적인 사회 활동이 요구 되는 시대가 되었습니다.2016년 한국의 인구분포도. 42–57세의 중장년층이 15–24의 청년층보다, 청년층이 0–9세의 유아층보다 월등히 많습니다. Wikipedia위 그래프에서 보이는 것처럼 이렇게 사회의 전체적인 평균 연령의 급격한 상승이 예고되어있음에도 불구하고, 고등학교나 대학까지의 일회성 교육이 아닌 전 연령층을 대상으로 한 지속적인 교육 제공은 아직 보편화 되어 있지 않습니다. 노인층 대상으로 진행되는 교육은 미미하며, 특히나 젊은층도 배우기 어려운 코딩 교육은 노인층에게는 교육이 불가능하거나 전혀 필요하지 않다고 여겨지고 있습니다.UC San Diego 대학의 Phillip Guo 교수Phillip Guo 교수는 HCI (사람-컴퓨터 인터랙션) 및 온라인/컴퓨터 교육 분야에서 명성이 높은 연구자입니다. Guo 교수는 처음으로 노인층에 대한 코딩 교육 연구를 진행하여 온라인에서 프로그래밍을 배운 52개국 60~80대 504명으로부터 다양한 설문조사와 심층조사를 진행한 결과를 CHI 국제 학술회에 출간했습니다. 본 연구 설명과 함께 엘리스에서 생각하는 로드맵을 소개합니다.연구본 연구는 http://www.pythontutor.com 웹사이트에서 실시된 온라인 코딩 교육 설문조사에 응한 504명의 60~85세 학생에 대한 심층 분석과 인터뷰로 이루어져있습니다. 이들이 코딩을 배우는 목적은 세가지 주요 요점으로 종합됩니다.첫째는 코딩을 배움으로서 노화되는 뇌를 자극하기 위함이고, 둘째로 젊은 시절 놓쳤던 새로운 기회를 잡기 위함, 그리고 마지막으로 어린 가족 구성원들과 소통하기 위함이었습니다.혼자 공부하는 방식의 교육은 온라인에서 특히 더 높은 이탈율을 보입니다.이들이 프로그래밍을 배우는 원동력은 교육을 통한 취업과 같은 정확히 정해진 목표보다는, 스스로의 동기부여 및 젊은층과의 소통을 위한 이유가 더 컸습니다. 코딩을 배우는 과정 중에 가장 힘든 세가지는 감퇴하는 인지력, 질문에 대답해 줄 수 있는 강사나 조교 혹은 학생이 없었고, 매번 변화하는 SW를 따라가기 어려움이 있었습니다. 첫번째를 제외한 나머지 어려움은 다른 연령층에서도 겪은 어려움이었습니다.마치며Philip Guo 교수의 논문에서 알 수 있는 것은 노인층이 노화하면서 겪을 수밖에 없는 배움의 어려움과 더불어, 현재 교육 시스템이 노인층을 전혀 고려하지 않고 있다는 것입니다. 이것은 노인층 대상의 교육을 더욱 어렵게 합니다.논문에서는 노인층에게 적합한 교육 시스템이 만들어지거나 제공된다면, 이들이 산업에 바로 투여될 수 있는 능력을 갖추기는 어려울 수도 있으나 프로그래밍 교육을 할 수 있는 선생님으로 활동할 수 있다고 서술하고 있습니다. 이를 활용하면 현재 현저히 부족한 SW 교육자 수로 어려움을 겪고 있는 공교육에 도움이 될 수 있습니다.엘리스에서는 라이브 교육 방송 진행, 헬프 센터 조교 도우미 등 학생들에게 좋은 교육을 제공하기 위해 부단히 노력하는 다양한 연령층의 온라인 조교님들이 계십니다. 언젠가는 60~80대 조교님이 활동하실 수 있다고 믿고 있습니다. 이러한 믿음을 주신 중2 아들을 둔 한 어머니의 피드백을 참조합니다. (엘리스 기초 자바 과정에서 최상위 점수를 받으셨습니다.)저는 전공도 인문학쪽이고 수학 싫어서 문과갔던 문과생인지라, 코딩처럼 논리력 요구하는 수업 따라가기나 할까 큰 기대없이 시작했었습니다.수업 초반에는 마냥 어리둥절했고, 시키는대로 따라하면 다 되었기 때문에 ‘어라 쉽잖아?’ 라고 느꼈습니다. 하지만 중반부 넘어가면서…클래스, 메소드라는 개념이 낯설기도 했고, 각종 연산자의 적용이나 변수들을 식에 적용시키는 다양한 패턴들이 적응이 잘 안되었어요. 반복문의 순서나 마침표,세미콜론, 콜론을 기억하지 못해서 다시 되돌아와서 확인한 것만도 수 십번이었습니다.다른 분들은 마치 초급 과정을 어디서 마스터 하고 온 것처럼 잘 따라가시는데, 저는 매 시간마다 헤매고 오류나고…하지만 똑똑한 것 보다 꾸준한 것이 더 낫다고… ‘머리가 안따라가면 더 오래 공부하면 되겠지’ 하고 다시 보고, 다시 풀고, 계속 질문하고그러나보니 어느 순간 이해가 가는 개념들, 저절로 외워지는 패턴들이 조금씩 늘어났어요.특히 실시간 강의라서 피드백을 받을 수 있고, 조교님이나 강사님들께 질문을 편하게 할 수 있는 시스템이 정말 좋았습니다. 비주얼 좋은 두 분이 수업을 진행해 주신 것도 좋았구요. 반응 좋은 우리 반 수강생들도 참 좋았습니다.저녁 설거지 해 두고 (때로는 저녁상을 치우기 바쁘게) 컴퓨터 앞에 앉아서 8주간 공부한 시간들이 저한테는 정말 소중한 시간이었습니다. 이렇게 집안 일 하고, 애들 챙기면서도 공부할 수 있고, 배울 수 있다는 것이 너무 좋습니다. 좋은 강의 열어주셔서 고맙습니다. ^^*p.s.수업 중에 어떤 분이 자바 알고리즘 강의 열어달라고 하시던데, 알고리즘이 뭔지 물어보고 싶었는데 못 물어봤네요 ㅋ#엘리스 #코딩교육 #교육기업 #기업문화 #조직문화 #서비스소개
조회수 1837

Google I/O 2018: Firebase의 새로운 기능

멋진 서비스를 제공하기 위해 잘 만들어진 앱을 개발하는 것은 중요합니다. 하지만 출시 이후 앱 운영을 통해 사용자 Retention과 Engagement를 유지 및 증가시키는 것 또한 앱을 잘 개발하는 것 만큼이나 중요하고 많은 고민과 노력을 들여야합니다. 그런 관점에서 Firebase는 앱을 운영함에 있어서 고민할 법한 다양한 기능들을 적절히 잘 모아놓은 서비스인 것 같습니다.스타일쉐어에서도 Crashlytics, Remote Config, Analytics 등 Firebase에 포함된 서비스들을 잘 활용하고 있습니다. 그래서 Firebase에 개선 및 변경 사항이 있다면 항상 주의 깊게 살펴보고 있습니다.https://events.google.com/io/올해도 어김없이 Google I/O가 개최됐습니다. 역시나 흥미로운 주제들이 많았습니다만, 이번 글에서는 앞서 언급한 Firebase 에 추가된 새 기능을 다룬 ‘What’s new in Firebase’ 세션에 대해서 공유드리고자 합니다.세션에서 주요 골자는 다음 4 가지입니다.ML Kit 베타 시작Test Lab iOS 플랫폼 지원Performance Monitoring 개선Google Analytics 개선이 글에서는 이 4 가지 내용에 대해서 정리하도록 하겠습니다.ML Kit 베타아직까지 베타 버전이긴 합니다만 ML Kit 를 통해 Machine Learning 을 앱에서 쉽게 활용할 수 있다고 하니 Machine Learning 이 한층 가까워진 느낌입니다.ML Kit 는 Android, iOS 양 플랫폼 모두 지원합니다. 따라서 앱에서 Machine Learning 을 활용해 서비스를 제공해보고 싶다면, 양 플랫폼 모두 시도해볼 수 있겠네요.What’s new in Firebase (Google I/O ’18) SlideML Kit 은 기본 API 를 제공합니다. 이 API 들은 Machine Learning 에 대한 폭 넓은 배경지식이 없더라도 충분히 활용할 수 있기 때문에 저처럼 막막한 느낌이 드는 분들은 아래 기본 API 5가지를 사용해서 먼저 친해져보는 것도 좋겠네요.텍스트 추출얼굴 인식바코드 스캔이미지 라벨링렌드마크 인식ML Kit 은 on-device 와 cloud 에서 모두 동작하기 때문에 상황에 맞게 적절한 방식을 사용하면 된다고 합니다. 예를 들어 사진앱 처럼 네트워크 연결이 중요치 않은 서비스의 경우에는 on-device 를 통해 오프라인으로도 동작이 원활하게 만들 수 있겠네요.또한 Machine Learning 에 대한 배경 지식이 충분하다면 TensorFlow-Lite 모델을 통해 직접 원하는 학습을 시킬 수도 있습니다.ML Kit 은 Android, iOS 양 플랫폼 모두 사용 가능하며 기본으로 제공하는 5가지 이외에도 향후에 더 추가될 예정이라고 합니다. 추가될 기능들에 대해서 조금 더 일찍 테스터로서 경험해보고 싶다면 waiting list에 메일을 등록하면 됩니다.Test Lab iOS 플랫폼 지원Test Lab 은 다양한 디바이스를 모두 고려한 앱을 개발하기 어려운 Android 플랫폼의 특징을 보완하기 위한 서비스입니다. 주로 UI 테스팅과 관련된 기능들을 제공하며, 좀더 쉽고 편하게 UI 테스팅을 작성하고 다양한 디바이스에서 테스트할 수 있는 환경을 제공해줍니다.What’s new in Firebase (Google I/O ’18) Slide앱을 서비스 할 때 Android, iOS 어느 한 쪽 플랫폼만 개발하는 경우는 드문 것 같습니다. 그래서인지 Firebase 팀도 iOS 지원에 항상 신경을 쓰는 것 같은 인상을 받았는데, 이번 경우도 그런 느낌이 강하게 듭니다.이번에 추가된 iOS 용 Test Lab 을 활용한다면 출시 전 Android와 iOS 모두 동일한 기준으로 품질 상태를 확인하고 배포할 수 있는 환경을 갖출 수 도 있겠네요. iOS용 Test Lab 은 다음 달에 정식으로 선보일 예정입니다만, 이 기능 또한 일찍 테스터로 참여하고 싶다면 waiting list에 메일을 등록하면 됩니다.Performance Monitoring 개선Performance Monitoring 의 베타 기간이 끝나고 정식으로 서비스를 한다고 합니다. Crash-free 도 중요하지만 사용자 입장에서 고려해봤을 때 앱의 퍼포먼스도 놓치면 안되는 중요한 요소입니다. Performance Monitoring 은 이런 관점에서 인사이트를 얻을 수 있게 도와주는 서비스라고 합니다.What’s new in Firebase (Google I/O ’18) Slide세션에서 강요한 기능은 New Issues Feed 입니다. Performance Monitoring화면의 상단에서 확인할 수 있는 이 기능은 단순한 데이터를 나열하는 것이 아니라 자체적인 분석을 통해 가장 최근에 해결해야할 이슈를 제안합니다.What’s new in Firebase (Google I/O ’18) Slide이 외에도 디바이스에서 렌더링할 때나 네트워크 요청을 할 때의 이벤트들을 기록해서 퍼포먼스 저하 요소들을 보여줍니다. 덕분에 어떤 부분에서 퍼포먼스 저하가 가장 심한지 보다 쉽게 파악할 수 있다고 합니다.Performance Monitoring 은 별도 코드 없이 모든 페이지에서 자동으로 데이터를 수집하고 있으니 별도의 노력없이 인사이트를 얻을 수 있다는 점이 또 다른 장점입니다.Google Analytics 개선What’s new in Firebase (Google I/O ’18) SlideGoogle Analytics 에서 두드러지는 개선 점은 Project level reporting이 가능해졌다는 것 입니다. 플랫폼 별 사용자 특성이 있기는하지만 하나의 서비스 차원에서 병합해서 데이터를 보고싶은 경우가 종종 있는데, 그럴 때 마다 별도의 서버 처리를 통해 병합하는 과정이 번거로웠습니다. 하지만 이번 개선을 통해서 프로젝트 단위의 데이터 분석이 가능해진 덕분에 번거로움을 좀 덜어낼 수 있겠습니다.그리고 세션에서 언급하진 않았지만, Filter가 조금 더 유연해지고 세분화된다고 합니다.지금까지 ‘Google I/O 2018: What’s new in Firebase’ 세션 중 주요 내용만 간단하게 살펴봤습니다. Firebase 는 매년 발전을 거듭해가며 앱 운영의 통합 관리 서비스로서의 자리매김을 해나가는 중인 것 같습니다. 덕분에 직감에만 의존해서 앱의 방향을 정하던 예전에 비해 정량적 데이터에 기반을 두며 더 성공에 가깝게 한발짝 씩 다가갈 수 있는 것 같습니다.이번에 Firebase 에 새로 추가된 기능들을 조금씩 건드려보면서 우리 서비스에서 어떻게 활용하며 인사이트를 얻고, 서비스를 이용하는 사용자들에게 더 나은 서비스를 제공해 줄 수 있을까 고민해봐야겠습니다.#스타일쉐어 #개발자 #개발팀 #인사이트 #Firebase #경험공유 #일지 #후기
조회수 1940

Tips for building fast portrait segmentation network with TensorFlow Lite

PrefaceDeep learning has led to a series of breakthroughs in many areas. However, successful deep learning models often require significant amounts of computational resources, memory and power. Deploying efficient deep learning models on mobile devices became the main technological challenge for many mobile tech companies.Hyperconnect developed a mobile app named Azar which has a large fan base all over the world. Recently, Machine Learning Team has been focusing on developing mobile deep learning technologies which can boost user experience in Azar app. Below, you can see a demo video of our image segmentation technology (HyperCut) running on Samsung Galaxy J7. Our benchmark target is a real-time (>= 30 fps) inference on Galaxy J7 (Exynos 7580 CPU, 1.5 GHz) using only a single core.Figure 1. Our network runs fast on mobile devices, achieving 6 ms of single inference on Pixel 1 and 28 ms on Samsung Galaxy J7. Full length video. There are several approaches to achieve fast inference speed on mobile device. 8-bit quantization is one of the popular approaches that meet our speed-accuracy requirement. We use TensorFlow Lite as our main framework for mobile inference. TensorFlow Lite supports SIMD optimized operations for 8-bit quantized weights and activations. However, TensorFlow Lite is still in pre-alpha (developer preview) stage and lacks many features. In order to achive our goal, we had to do the following:Understand details of TensorFlow and Tensorflow Lite implementation.Design our own neural network that can fully utilize optimized kernels of TensorFlow Lite. (Refer to 1, 2 and 3)Modify TOCO: TensorFlow Lite Optimizing Converter to correctly convert unsupported layers. (Refer to 4)Accelerate several quantized-layers with SIMD optimized code. (Refer to 5 and 6)We are willing to share our trials and errors in this post and we hope that readers will enjoy mobile deep learning world :)1) Why is depthwise separable layer fast in Tensorflow Lite ?Implementing low-level programs requires a bit different ideas and approaches than usual. We should be aware that especially on mobile devices using cache memory is important for fast inference.Figure 2. Memory access requires much more energy (640 pJ) than addition or multiplication.Accessing cache memory (8 pJ) is much cheaper than using the main memory (table courtesy of Ardavan Pedram) In order to get insight into how intrinsics instructions are implemented in Tensorflow Lite, we had to analyze some implementations including depthwise separable convolution with 3x3 kernelsBelow we describe some of the main optimization techniques that are used for building lightweight and faster programs.Loop UnrollingCan you spot the difference between the following two code fragments?for (int i = 0; i < 32; i++) { x[i] = 1; if (i%4 == 3) x[i] = 3; } for (int i = 0; i < 8; i++) { x[4*i ] = 1; x[4*i+1] = 1; x[4*i+2] = 1; x[4*i+3] = 3; } The former way is what we usually write, and the latter is loop-unrolled version of former one. Even though unrolling loops are discouraged from the perspective of software design and development due to severe redundancy, with low-level architecture this kind of unrolling has non-negligible benefits. In the example described above, the unrolled version avoids examining 24 conditional statements in for loop, along with neglecting 32 conditional statements of if.Furthermore, with careful implementation, these advantages can be magnified with the aid of SIMD architecture. Nowadays some compilers have options which automatically unroll some repetitive statements, yet they are unable to deal with complex loops.Separate implementation for each caseConvolution layer can take several parameters. For example, in depthwise separable layer, we can have many combinations with different parameters (depth_multiplier x stride x rate x kernel_size). Rather than writing single program available to deal with every case, in low-level architectures, writing number of case-specific implementations is preferred. The main rationale is that we need to fully utilize the special properties for each case. For convolution operation, naive implementation with several for loops can deal with arbitrary kernel size and strides, however this kind of implementation might be slow. Instead, one can concentrate on small set of actually used cases (e.g. 1x1 convolution with stride 1, 3x3 convolution with stride 2 and others) and fully consider the structure of every subproblem.For example, in TensorFlow Lite there is a kernel-optimized implementation of depthwise convolution, targeted at 3x3 kernel size:template <int kFixedOutputY, int kFixedOutputX, int kFixedStrideWidth, int kFixedStrideHeight> struct ConvKernel3x3FilterDepth8 {}; Tensorflow Lite further specifies following 16 cases with different strides, width and height of outputs for its internal implementation:template <> struct ConvKernel3x3FilterDepth8<8, 8, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 4, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 2, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 1, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 2, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 4, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<1, 4, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 1, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 2, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 4, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 1, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 2, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 4, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 1, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<1, 2, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<1, 4, 2, 2> { ... } Smart Memory Access PatternSince low-level programs are executed many times in repetitive fashion, minimizing duplicated memory access for both input and output is necessary. If we use SIMD architecture, we can load nearby elements together at once (Data Parallelism) and in order to reduce duplicated read memory access, we can traverse the input array by means of a snake-path.Figure 3. Memory access pattern for 8x8 output and unit stride, implemented in Tensorflow Lite's depthwise 3x3 convolution. The next example which is targeted to be used in much smaller 4x1 output block also demonstrates how to reuse preloaded variables efficiently. Note that the stored location does not change for variables which are loaded in previous stage (in the following figure, bold variables are reused):Figure 4. Memory access pattern for 4x1 output and stride 2, implemented in Tensorflow Lite's depthwise 3x3 convolution. 2) Be aware of using atrous depthwise convolutionAtrous (dilated) convolution is known to be useful to achieve better result for image segmentation[1]. We also decided to use atrous depthwise convolution in our network. One day, we tried to set stride for atrous depthwise convolution to make it accelerate computation, however we failed, because the layer usage in TensorFlow (≤ 1.8) is constrained.In Tensorflow documentation of tf.nn.depthwise_conv2d (slim.depthwise_conv2d also wraps this function), you can find this explanation of rate parameter.rate: 1-D of size 2. The dilation rate in which we sample input values across the height and width dimensions in atrous convolution. If it is greater than 1, then all values of strides must be 1.Even though TensorFlow doesn’t support strided atrous function, it doesn’t raise any error if you set rate > 1 and stride > 1. <!-- The output of layer doesn't seem to be wrong. -->>>> import tensorflow as tf >>> tf.enable_eager_execution() >>> input_tensor = tf.constant(list(range(64)), shape=[1, 8, 8, 1], dtype=tf.float32) >>> filter_tensor = tf.constant(list(range(1, 10)), shape=[3, 3, 1, 1], dtype=tf.float32) >>> print(tf.nn.depthwise_conv2d(input_tensor, filter_tensor, strides=[1, 2, 2, 1], padding="VALID", rate=[2, 2])) tf.Tensor( [[[[ 302.] [ 330.] [ 548.] [ 587.]] [[ 526.] [ 554.] [ 860.] [ 899.]] [[1284.] [1317.] [1920.] [1965.]] [[1548.] [1581.] [2280.] [2325.]]]], shape=(1, 4, 4, 1), dtype=float32) >>> 0 * 5 + 2 * 6 + 16 * 8 + 9 * 18 # The value in (0, 0) is correct 302 >>> 0 * 4 + 2 * 5 + 4 * 6 + 16 * 7 + 18 * 8 + 20 * 9 # But, the value in (0, 1) is wrong! 470 Let’s find the reason why this difference happened. If we just put tf.space_to_batch and tf.batch_to_space before and after convolution layer, then we can use convolution operation for atrous convolution (profit!). On the other hand, it isn’t straightforward how to handle stride and dilation together. In TensorFlow, we need to be aware of this problem in depthwise convolution.3) Architecture design principles for efficient segmentation networkUsually segmentation takes more time than classification since it has to upsample high spatial resolution map. Therefore, it is important to reduce inference time as much as possible to make the application run in real-time.It is important to focus on spatial resolution when designing real-time application. One of the easiest ways is to reduce the size of input images without losing accuracy. Assuming that the network is fully convolutional, you can accelerate the model about four times faster if the size of input is halved. In literature[2], it is known that small size of input images doesn’t hurt accuracy a lot.Another simple strategy to adopt is early downsampling when stacking convolution layers. Even with the same number of convolution layers, you can reduce the time with strided convolution or pooling within early layers.There is also a tip for selecting the size of input image when you use Tensorflow Lite quantized model. The optimized implementations of convolution run best when the width and height of image is multiple of 8. Tensorflow Lite first loads multiples of 8, then multiples of 4, 2 and 1 respectively. Therefore, it is the best to keep the size of every input of layer as a multiple of 8.Substituting multiple operations into single operation can improve speed a bit. For example, convolution followed by max pooling can be usually replaced by strided convolution. Transpose convolution can also be replaced by resizing followed by convolution. In general, these operations are substitutable because they perform the same role in the network. There are no big empirical differences among these operations. <!-- substitutable -->Tips described above help to accelerate inference speed but they can also hurt accuracy. Therefore, we adopted some state-of-the-art blocks rather than using naive convolution blocks.Figure 5.  Atrous spatial pyramid pooling (figure courtesy of Liang-Chieh Chen) Atrous spatial pyramid pooling[1] is a block which mimics the pyramid pooling operation with atrous convolution. DeepLab uses this block in the last layer.We also substitute most of the convolution layers with efficient depthwise separable convolution layers. They are basic building blocks for MobileNetV1[3] and MobileNetV2[4] which are well optimized in Tensorflow Lite.4) Folding batchnorm into atrous depthwise convolutionWhen quantizing convolution operation followed by batchnorm, batchnorm layer must be folded into the convolution layers to reduce computation cost. After folding, the batchnorm is reduced to folded weights and folded biases and the batchnorm-folded convolution will be computed in one convolution layer in TensorFlow Lite[5]. Batchnorm gets automatically folded using tf.contrib.quantize if the batchnorm layer comes right after the convolution layer. However, folding batchnorm into atrous depthwise convolution is not easy.In TensorFlow’s slim.separable_convolution2d, atrous depthwise convolution is implemented by adding SpaceToBatchND and BatchToSpaceND operations to normal depthwise convolution as mentioned previously. If you add a batchnorm to this operation by including argument normalizer_fn=slim.batch_norm, batchnorm does not get attached directly to the convolution layer. Instead, the graph will look like the diagram below: SpaceToBatchND → DepthwiseConv2dNative → BatchToSpaceND → BatchNorm The first thing we tried was to modify TensorFlow quantization to fold batchnorm bypassing BatchToSpaceND without changing the order of operations. With this approach, the folded bias term remained after BatchToSpaceND, away from the convolution layer. Then, it became separate BroadcastAdd operation in TensorFlow Lite model rather than fused into convolution. Surprisingly, it turned out that BroadcastAdd was much slower than the corresponding convolution operation in our experiment:Timing log from the experiment on Galaxy S8 ... [DepthwiseConv] elapsed time: 34us [BroadcastAdd] elapsed time: 107us ... To remove BroadcastAdd layer, we decided to change the network itself instead of fixing TensorFlow quantization. Within slim.separable_convolution2d layer, we swapped positions of BatchNorm and BatchToSpaceND. SpaceToBatchND → DepthwiseConv2dNative → BatchNorm → BatchToSpaceND Even though batchnorm relocation could lead to different outputs values compared to the original, we did not notice any degradation in segmentation quality.5) SIMD-optimized implementation for quantized resize bilinear layerAt the time of accelerating TensorFlow Lite framework, conv2d_transpose layer was not supported. However, we could use ResizeBilinear layer for upsampling as well. The only problem of this layer is that there is no quantized implementation, therefore we implemented our own SIMD quantized version of 2x2 upsampling ResizeBilinear layer.Figure 6. 2x2 bilinear upsampling without corner alignnment. To upsample image, original image pixels (red circles) are interlayed with new interpolated image pixels (grey circles). In order to simplify implementation we do not compute pixel values for the bottommost and rightmost pixels, denoted as green circles.for (int b = 0; b < batches; b++) { for (int y0 = 0, y = 0; y <= output_height - 2; y += 2, y0++) { for (int x0 = 0, x = 0; x <= output_width - 2; x += 2, x0++) { int32 x1 = std::min(x0 + 1, input_width - 1); int32 y1 = std::min(y0 + 1, input_height - 1); ResizeBilinearKernel2x2(x0, x1, y0, y1, x, y, depth, b, input_data, input_dims, output_data, output_dims); } } } Every new pixel value is computed for each batch separately. Our core function ResizeBilinearKernel2x2 computes 4 pixel values across multiple channels at once.Figure 7. Example of 2x2 bilinear upsampling of top left corner of image. (a) Original pixel values are simply reused and (b) – (d) used to interpolate new pixel values. Red circles represent original pixel values. Blue circles are new interpolated pixel values computed from pixel values denoted as circles with black circumference. NEON (Advanced SIMD) intrinsics enable us to process multiple data at once with a single instruction, in other words processing multiple data at once. Since we deal with uint8 input values we can store our data in one of the following formats uint8x16_t, uint8x8_t and uint8_t, that can hold 16, 8 and 1 uint8 values respectively. This representation allows to interpolate pixel values across multiple channels at once. Network architecture is highly rewarded when channels of feature maps are multiples of 16 or 8:// Handle 16 input channels at once int step = 16; for (int ic16 = ic; ic16 <= depth - step; ic16 += step) { ... ic += step; } // Handle 8 input channels at a once step = 8; for (int ic8 = ic; ic8 <= depth - step; ic8 += step) { ... ic += step; } // Handle one input channel at once for (int ic1 = ic; ic1 < depth; ic1++) { ... } SIMD implementation of quantized bilinear upsampling is straightforward. Top left pixel value is reused (Fig. 7a). Bottom left (Fig. 7b) and top right (Fig. 7c) pixel values are mean of two adjacent original pixel values. Finally, botom right pixel (Fig. 7d) is mean of 4 diagonally adjacent original pixel values.The only issue that we have to take care of is 8-bit integer overflow. Without a solid knowledge of NEON intrinsics we could go down the rabbit hole of taking care of overflowing by ourself. Fortunately, the range of NEON intrinsics is broad and we can utilize those intrinsics that fit our needs. The snippet of code below (using vrhaddq_u8) shows an interpolation (Fig. 7d) of 16 pixel values at once for bottom right pixel value:// Bottom right output_ptr += output_x_offset; uint8x16_t left_interpolation = vrhaddq_u8(x0y0, x0y1); uint8x16_t right_interpolation = vrhaddq_u8(x1y0, x1y1); uint8x16_t bottom_right_interpolation = vrhaddq_u8(left_interpolation, right_interpolation); vst1q_u8(output_ptr, bottom_right_interpolation); 6) Pitfalls in softmax layer and demo codeThe first impression of inference in TensorFlow Lite was very slow. It took 85 ms in Galaxy J7 at that time. We tested the first prototype of TensorFlow Lite demo app by just changing the output size from 1,001 to 51,200 (= 160x160x2)After profiling, we found out that there were two unbelievable bottlenecks in implementation. Out of 85 ms of inference time, tensors[idx].copyTo(outputs.get(idx)); line in Tensor.java took up to 11 ms (13 %) and softmax layer 23 ms (27 %). If we would be able to accelerate those operations, we could reduce almost 40 % of the total inference time!First, we looked at the demo code and identified tensors[idx].copyTo(outputs.get(idx)); as a source of problem. It seemed that the slowdown was caused by copyTo operation, but to our surprise it came from int[] dstShape = NativeInterpreterWrapper.shapeOf(dst); because it checks every element (in our case, 51,200) of array to fill the shape. After fixing the output size, we gained 13 % speedup in inference time.<T> T copyTo(T dst) { ... // This is just example, of course, hardcoding output shape here is a bad practice // In our actual app, we build our own JNI interface with just using c++ code // int[] dstShape = NativeInterpreterWrapper.shapeOf(dst); int[] dstShape = {1, width*height*channel}; ... } The softmax layer was our next problem. TensorFlow Lite’s optimized softmax implementation assumes that depth (= channel) is bigger than outer_size (= height x width). In classification task, the usual output looks like [1, 1(height), 1(width), 1001(depth)], but in our segmentation task, depth is 2 and outer_size is multiple of height and width (outer_size » depth). Implementation of softmax layer in Tensorflow Lite is optimized for classification task and therefore loops over depth instead of outer_size. This leads to unacceptably slow inference time of softmax layer when used in segmentation network.We can solve this problem in many different ways. First, we can just use sigmoid layer instead of softmax in 2-class portrait segmentation. TensorFlow Lite has very well optimized sigmoid layer.Secondly, we could write SIMD optimized code and loop over depth instead of outer_size. You can see similar implementation at Tencent’s ncnn softmax layer, however, this approach has still its shortcomings. Unlike ncnn, TensorFlow Lite uses NHWC as a default tensor format:Figure 8. NHWC vs NCHW In other words, for NHWC, near elements of tensor hold channel-wise information and not spatial-wise. It is not simple to write optimized code for any channel size, unless you include transpose operation before and after softmax layer. In our case, we tried to implement softmax layer assumming 2-channel output.Thirdly, we can implement softmax layer using pre-calculated lookup table. Because we use 8-bit quantization and 2-class output (foreground and background) there are only 65,536 (= 256x256) different combinations of quantized input values that can be stored in lookup table:for (int fg = 0; fg < 256; fg++) { for (int bg = 0; bg < 256; bg++) { // Dequantize float fg_real = input->params.scale * (fg - input->params.zero_point); float bg_real = input->params.scale * (bg - input->params.zero_point); // Pre-calculating Softmax Values ... // Quantize precalculated_softmax[x][y] = static_cast<uint8_t>(clamped); } } ConclusionIn this post, we described the main challenges we had to solve in order to run portrait segmentation network on mobile devices. Our main focus was to keep high segmentation accuracy while being able to support even old devices, such as Samsung Galaxy J7. We wish our tips and tricks can give a better understanding of how to overcome common challenges when designing neural networks and inference engines for mobile devices.At the top of this post you can see portrait segmentation effect that is now available in Azar app. If you have any questions or want to discuss anything related to segmentation task, contact us at [email protected]. Enjoy Azar and mobile deep learning world!References[1] L. Chen, G. Papandreou, F. Schroff, H. Adam. Rethinking Atrous Convolution for Semantic Image Segmentation. June 17, 2017, https://arxiv.org/abs/1706.05587[2] C. Szegedy, V. Vanhoucke, S. Ioffe, J. Shlens, Z. Wojna. Rethinking the Inception Architecture for Computer Vision. December 11, 2015, https://arxiv.org/abs/1512.00567[3] A. Howard, M. Zhu, B. Chen, D. Kalenichenko, W. Wang, T. Weyand, M. Andreetto, H. Adam. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications, April 17, 2017, https://arxiv.org/abs/1704.04861[4] M. Sandler, A. Howard, M. Zhu, A. Zhmoginov, L. Chen. MobileNetV2: Inverted Residuals and Linear Bottlenecks. January 18, 2018, https://arxiv.org/abs/1801.04381[5] B. Jacob, S. Kligys, B. Chen, M. Zhu, M. Tang, A. Howard, H. Adam, D. Kalenichenko. Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference. December 15, 2017, https://arxiv.org/abs/1712.05877
조회수 828

[모바일 앱분석] Step3. CONVERSION (성과 분석)

모바일 앱 분석의 마지막 3단계 Conversion (성과분석) 에 대해 알아보겠습니다.[모바일 앱분석] Step1. MARKETING (마케팅분석)[모바일 앱분석] Step2. EXPERIENCE (사용자경험분석)마케팅 활동으로 아무리 많은 사용자를 확보하고, 좋은 경험을 제공해도 전환 최적화가 되어 있지 않다면, 투자 만큼의 결과(Outcomes)를 얻지 못해 지속적인 앱 운영의 어려움을 느끼게 됩니다. Conversion 단계의 분석 핵심은 사용자의 전환 트렌드를 이해하고, 전환 효율을 떨어뜨리는 문제점을 도출하여 더 많은 전환을 획득할 수 있도록 개선하는 데 있습니다. 앱 비즈니스 마다 목표 값이 다르겠지만, 이번 설명에서는 커머스 앱 기준으로 설명했습니다.# 전환 트렌드 이해먼저 사용자의 주문이 집중되는 시점(시간/요일/계절 등)을 인지하는 게 중요합니다.  주문이 집중된다는 건 그만큼 구매 욕구가 증가하는 시점으로 해석할 수 있기 때문에, 해당 시간을 활용한 이벤트로 높은 성과를 기대하거나 반대로 주문에 영향을 줄 수 있는 앱 업데이트, 서버 점검 등은 해당 시간을 피해서 작업하는 것이 좋습니다.데이터를 볼 때는 매크로 컨버전(거시적 전환) 지표가 중요하지만, 필히 마이크로 컨버전(미시적 전환)도 함께 봐야 합니다.  많은 주문을 얻기 위해선 당연하게도 ‘장바구니담기’, ‘바로구매시도’ 등의 전환이 많이 발생해야 하며, 주문까지의 연결율이 높아야 하기 때문에 이런 상황을 파악할 수 있는 마이크로 컨버젼 지표에 대한 관리가 중요합니다.( 와이즈트래커 > 커머스 > 주문/매출액 리포트 )# 타겟별 선호 상품 파악커머스 업계에서 가장 뜨거운 기술은 바로 개인화(personalization)입니다. 개인화의 목적은 범용적 컨텐츠 제공이 아닌 나만을 위한 컨텐츠를 제공함으로써 구매 확률을 높이고자 함입니다. 이 기술의 근간은 타겟팅이라고 볼 수 있습니다.저에게 원피스, 브라우스를 수백번 보여줘도 구매할 확률은 0%이겠지만, 시계, 운동화 등의 관심 상품을 제시한다면 앞선 상품보다 구매 확률은 크게 증가할 것입니다. 이처럼, 상품 구매 데이터를 성별, 연령대, 직업 등의 사용자 정보를 다차원으로 조합 후 세분화하면 타겟이 선호하는 상품이 무엇인지 알 수 있으며, 이를 바탕으로 상품 구매 의사가 높은 최적의 타겟을 설정하고 마케팅 전략을 수립한다면 매스 마케팅과는 차원이 다른 ROI를 경험할 수 있습니다.( 와이즈트래커 > 커머스 > 상품별 주문/매출에서 다차원 세그먼트 적용 후 리포트 ) # 전환 시나리오 분석사용자가 주문(전화)을 하기 위해 거쳐야 하는 일련의 프로세스를 전환 시나리오라고 합니다. 전환 시나리오는 전환 단계별 통과율/이탈률 데이터 제공으로, 전환을 방해하는 문제 화면을 도출하여 개선의 힌트를 얻을 수 있는 리포트입니다.아래 예시를 보면 사용자가 주문을 하기 위해 1) 상품 상세 > 2) 장바구니 > 3) 주문정보 입력 > 4)주문완료, 총 4단계의 스텝을 밟게 되는데요. ‘상품 상세’에서 ‘장바구니’로의 이탈률(92%)은 이해할 수 있습니다. 상품 조회 자체를 목적으로 온 사용자가 많기 때문입니다. 그러나 ‘주문정보 입력’까지 온 사용자는 구매의사가 매우 높은 사용자로, 81%의 높은 이탈률은 심각한 문제입니다.이를 통해 ‘주문정보 입력’의 통과율을 높이기 위한 폼 양식 리뉴얼, 결제 방식의 개선 등의 최적화 작업을 한다면 전체적인 주문율 향상을 기대할 수 있습니다(와이즈트래커 >  컨텐츠   > 화면이동경로 분석 리포트)앱 분석의 단계별 접근방법에 대해 살펴봤는데요, 모든 앱에는 개선이 필요한 부분이 존재합니다. 데이터는 개선의 방향을 알려주고, 실행(Action)은 성과 향상으로 답할 것입니다.* WISETRACKER는 모바일 광고 성과 측정부터 In-app 이용자/컨텐츠 분석, 푸시메시지 최적화까지 지원하는 모바일 통합 분석/타겟팅 솔루션입니다. 와이즈트래커 솔루션의 무료체험을 원하실 경우 여기를 클릭해주세요.* WISETRACKER가 제공하는 무료 데이터 분석 컨설팅를 원하신다면 여기를 클릭해주세요.#와이즈트래커 #데이터분석 #성과분석 #마케팅 #마케터 #인사이트 

기업문화 엿볼 때, 더팀스

로그인

/