스토리 홈

인터뷰

피드

뉴스

조회수 1783

#시작. 새로운 세상이 핀다.

안녕하세요? 핀다가 브런치를 시작합니다.한국 금융계의 아마존 [1] 을 꿈꾸는 '이혜민 & 박홍민' 두 창업가의 글로 시작하는 것도 의미가 있겠지만, 새로운 Finda 의 식구가 '시작'을 주제로 첫 글을 장식하는 것도 신선할 것이란 생각이 들었습니다.새로운 오늘을 맞이하시는 많은 분들,오늘은 역사상 우리가 만나는인생의 가장 새로운 날입니다.월요일은 새로운 한 주의 시작이고요. 누군가에게 새로운 연애가 시작되는 날일 수도 있습니다. (축하드려요~^^부럽!) 새로운 취미나 운동을 시작하신 분들은 에너지가 넘치는 날이겠네요.지구의 반대편 브라질에서는 리우 올림픽이 시작되었습니다. '새로운 세상(New World)'이라는 슬로건으로 1896년 그리스 아테네에서 제1회 근대 올림픽이 열린 이후 120년 만에 처음으로 남미 대륙에서 열리는 것이라 전 세계의 관심을 받고 있습니다.세상이 시작하는 것으로 반짝입니다.시작하는 모든 것은 아름답습니다.새로운 비전과 꿈, 긍정적인 희망이가득하기 때문이죠.시작하는 연애나 사랑도 아름답습니다.(누군가 남자들의 이상형은 처음 본 여자라고 하던데ㅎㅎ)새로운 물건을 소유하는 일도 신나는 일이고요.저는 최근에 새로운 회사에서 새로운 식구들과 새로운 일을 시작했습니다.#새로운 커리어의 시작자신의 일을 만들어가는 성취감은 제 인생의 가장 큰 기쁨이자 즐거움 중에 하나입니다.대학생 때부터 마케팅의 매력에 빠져 헬스케어, 문화예술, 기술 스타트업, 공공기관, 국제기구, NGO 등과 함께 일할 수 있는 기회를 가졌습니다.첫 번째 직장은 존슨앤드존슨 Johnson & Johnson에서 헬스케어 컨슈머 프로덕트 마케터로, 두 번째는 문화예술 마케팅 기업 Project AA* Asian Arts을 창업하며 예술과 기술, 스타트업 마케팅업 [2] 을  약 3년 6개월간 운영하고 회사를 매각했습니다. 감사하게도 중간중간 대외활동(세계경제포럼 산하 글로벌 쉐이퍼, 대한적십자사 홍보자문위원)과 책 출판 (세상에서 가장 이기적인 봉사여행 2011, 뉴욕 아티스트 2014) 등의 소소한 성취들도 함께했네요.세 번째 커리어는 무엇을 해야 할지 고민이 많았습니다. 학생 때는 여기저기 세계를 누비며 여행과 봉사활동을 다녔고, 직장에서는 마케팅 이론과 실천의 매력에 빠졌고, 창업을 하고 나서는 얼마나 큰 노력이 들어가는지 많은 시행착오를 통해 몸으로 체험하며 배웠던 지난 시간들을 되돌아보게 되었습니다. 사업을 통해 초기 자본 마련, 투자유치, M&A 를 진행하며 각종 법과 재무회계적인 일을 접하면서 금융의 중요성도 많이 깨달았습니다. 사업하면서 난치병(강직성 척추염 Ankylosing Spondylitis)을 얻을 정도로 지쳐있던 몸을 달래고, 한 동안 여행이나 다닐까 배부른 고민도 했었습니다. 그러나 결정이 어렵지는 않았습니다.언제 인생을 마감할지 모르겠지만, 새로운 역사를 핀다에서 함께 만들기로 결심하게 되었습니다.#핀다에 조인하게 된 이유?!가만히 생각해보니, 정말 많은 이유가 있지만딱 3가지만 말해보겠습니다.1. 반짝이고, 신나는 사람들시작은 창업가 혜민님 덕분입니다. 2014년부터 Noom Korea (눔 코리아) 대표 시절에 마케팅 프로젝트로 함께 일하면서 알게 되었는데 그때의 인연이 지금까지 예쁘게 이어졌습니다. 여리여리한 미모이지만 강단 있고 적극적인 커뮤니케이션, 정확한 일처리에 감탄을 자주 하곤 했었는데. 신사업을 하겠다며 2015년부터 자주 보고 이야기를 나누었었죠. 핀다를 시작하고 나서는 어느새 회사에 대해 알게 되고, 핀다 식구들과 종종 만나게 되고, 회사가 직면한 문제들을 함께 고민하다 보니... 현재 구글 캠퍼스로 출근하고 있네요. 지금 함께 일하는 10명 남짓한 분들은 다양한 매력을 가지고 있습니다. 나이차도 20-40대로 다양하게 구성이 되어 있구요. 직함의 호칭보다는 '이름+님'을 부르기 때문에 수평한 조직 문화를 만들어가고 있어요. 좋은 사람들 곁에는 좋은 사람들이 몰린다고 하는데 여기는 좋은 기운이 가득하네요. 앞으로 핀다 식구들에게 어떤 반짝이고 신나는 매력들을 발견하게 될지 기대가 큽니다!2. 금융은 우리 세대 (밀레니얼세대)에게 꼭 필요한 공부저도 밀레니얼 세대인데요, 1980-2000년에 태어난 사람들을 말하죠. 닐 하우, 윌리엄 스트라우스가 1991년 출간한 《세대들, 미국 미래의 역사》에서 처음 사용한 용어라고 합니다. 청소년 때부터 인터넷, 모바일, SNS & IT 에 능통하고, 대학 진학률도 높구요. 2007년 글로벌 금융 위기를 겪고 난 후, 소득은 낮고 결혼을 미루고, 내 집 마련은 적극적이지 않은...  특히, 우리나라는 역사상 가장 똑똑하고 가장 부유한 청년층이 가장 어려운 시대를 살고 있다고 합니다. 금리는 떨어지고, 취업난은 극심화되고, 투자할 곳도 마땅치 않고요. 현업에서 일하느라 개인의 재정에 대해 공부할 시간이 너무 부족한 밀레니얼 세대.시간이 부족하니, 효율적으로 공부하고 활용해야겠다는 생각. 핀다에 조인하면서 제 재정운영현황도 다시 돌아보게 되고, 미래를 좀 더 현실적으로 계획하는 시간을 가지는 게 너무 재밌습니다. 제가 재밌게 느끼고 남들에게도 필요하다고 느끼는 정보들은 핀다의 홈페이지, 블로그, 페이스북 등을 통해 다양한 금융 컨텐츠를 큐레이션해서 드리오니 꼭 한 번 확인해보세요. (어떠한 피드백도 언제든지 환영입니다 :)3. 운명이다.저는 대학에서 경영학을 공부했습니다. 경영학에서 가장 중요한 건 한정된 자원으로 최대의 효용 또는 가치를 만들어내는 일이라고 배웠습니다. 인생에서 다양한 선택을 하는데 있어서도 그와 같은 논리가 적용되어야 할 것 같지만... 오히려 그와 반대되는 일도 많이 봤습니다. 이리재고 저리재고 보다 나은 선택을 위해 계산하는 노력보다, 저를 둘러싼 기운이 제가 인생에서 경험해야 할 무언가를 알려줄 때가 많더라고요. 인연이라고도 할 수 있고, 누군가는 운명, 누군가는 종교적인 이유로 설명할 수도 있겠죠. 그리고 무언가를 선택 한 이후, 좋은 마음가짐은 '믿고 집중하고 노력하는' 것이라 생각합니다. "주사위는 던져졌다." (feat. 율리우스 카이사르 Caesar)또, 그간 사업과 대외활동 덕분에 전 세계 다양한 사람들을 만나면서 배운 것이 '금융문제'는 어느 누구도 피할 수 없는 문제라는 것입니다. 대중뿐만 아니라 연예인, 정치가, 사업가 등 누가 보아도 넉넉하고 화려한 삶을 누릴 것 같은 분들 역시 개인사와 자신의 일에 있어서 늘 "Money issue"로 고민하는 것을 많이 봤습니다. 어느 누구도 벗어날 수 없는 인간으로서 운명이자 숙명인 이 생활 속 금융 문제에 대해 너무 많은 정보들이 오고 가고 있는데, 이를 어떻게 잘 구별해야 할지, 나에게 꼭 필요한 정보가 무엇일지 고민할 수 있는 것. 제 일을 통해, 이런 문제들을 "쉽고, 재밌고, 즐겁게!" 해결해 나가는 것이 지금 제 운명이라고 생각합니다.금융상품 검색의 시작, 핀다 @ 구글 캠퍼스 서울보다 많은 사람들이 돈에 끌려다니기보다 돈을 잘 다루길 바라는 마음에서 핀다를 공동창업. 핀다를 통해 사람들이 갖고 있는 크고 작은 금융 고민들을 답해주는 것이 목표라는 창업자의 비전 (feat. 핀다 홍민님)금융정보의 불균형을 해소하겠다는 취지로 시작된 금융 플랫폼. 핀다 Finda.금융에 대해서는 많은 공부가 필요한 신입 마케터처럼 신선한 시선으로, 소비자와 시장을 분석하여 인사이트를 얻었던 경험에 기반하여 기본에 충실한 마케터로, 스타트업의 진취적이고 스피드 한 실행력의 경험을 더하고, 데이터와 전략, 시대의 문화와 트렌드를 리딩 하는 노력으로, 회사 식구들과 함께 건설적인 토론, 따뜻한 팀워크로 만들어보겠습니다. (거창하네요^^; 거창한 이 말들이 부끄럽지 않게 노력하겠습니다!)저의 새로운 커리어가 이곳에서 시작합니다.갓 입사한 신입사원만큼 상큼하지도 반짝이지도 않지만, 넉넉하지도 부족하지도 않은 적당한 커리어와 연륜(이라 쓰고 뻔뻔함이라 읽겠습니다ㅎ)이 주는 포근함과 편안함으로 다가가겠습니다.시작. 새로운 세상이 핀다.New Finda World핀다와 함께 만들어보겠습니다! #시작하는 그 마음 그대로변치 않는 첫 마음으로 노력할게요. 어떤 일이든 시작은 쉽지만, 지켜가는 것이 더 어렵고 소중한 일임을 기억하며 최선을 다하겠습니다. 많은 관심과 응원 부탁드립니다. ^^핀다의 새 식구손보미 드림Bomi from FindaVP of Marketing[1] 관련기사 : 조선일보, 금융상품 쇼핑은 왜 어려워야 되죠?금융상품 쇼핑은 왜 어려워야 되죠?스타트업 회사에서 일하는 서른한 살 여성에게 은행 문턱은 높았다. 전세 자금 대출을 받으려고 지점 몇 군데를 찾아갔지만 돌아오는 답은 비슷했다...biz.chosun.com [2] 관련기사 : 뉴스토마토, (스타트업리포트)손보미 프로젝트AA 대표 "예술과 기술 마케팅 맡겨만 주세요"#핀다 #마케터 #마케팅 #철학 #기업문화 #조직문화
조회수 1586

응원합니다. 스타트업!

그간 저의 글들이 무거웠다면,오늘은 가벼운 마음으로 희망의 뽕을 주입하는 글입니다.그렇다고 추상적이고, 근거 없는 희망론을이야기하는 것은 아니고요.오늘은 좀 부드럽게,그리고 평소에 쓰는 "요"체와 존댓말로 글을 남기겠습니다.줄어드는 통장 잔고에 한 숨이 나오나요?채용한 지 얼마 안 되어 잠수 타버리는 직원을 원망하나요?계속되는 거절과 핀잔에 위축되었나요?막 시장에 진입하려는데 누군가 같은 또는 더 진일보한 제품/서비스를 출시하였나요?그렇다고 이쯤에서 포기하기엔 너무 먼 길을 온 것 같아서더더욱 고민하고 있나요?스타트업은 원래 그런 겁니다라고 말하면,화내실 거죠?걱정하지 마세요.원래 그런 거 아니니까요.항상 내재되어 있던 리스크일 뿐이지,꼭 이런 일들이 발생하는 것은 아니랍니다.피해갈 수 있고,극복할 수 있어요.당신은 무모해 보일 정도로 용기를 가졌으니까요.당신은 남들보다 독특한 눈을 가졌으니까요.등 떠밀려서 창업한 게 아닌 이상,당신은 다른 사람들이 보지 못 한 무언가를 보고이 길을 걷기 시작했으니까요.응원을 맨 입으로 하기는 좀 그렇고,오늘은 제가 가진 리스트 중에서 도움이 될만한정보의 창고를 일부 정리해서 올립니다.도움이 되시길~~!1. 교육과 강연 그리고 네트워킹에 대한 고민교육을 듣고자 하는데 어디서부터 찾아야 할지 모르겠다면,전 "온오프노믹스"를 추천합니다.http://onoffmix.com/그곳에는 많은 강연과 교육에 대한 정보가 매일 업데이트되어 올라오고,무료/유료 교육 콘텐츠가 다양하게 올라옵니다.또한, 네트워킹이라던가 투자자를 만날 수 있는 모임도꾸준히 올라오지요.그리고 다들 잘 아시겠지만,K 스타트업(구. 창업넷)에도 쏠쏠하게 교육이 올라옵니다.http://www.k-startup.go.kr/main.do특히, 창업넷에는 대학교/기관에서 하는 교육이 많이 올라옵니다.그 외에...분야별/업종별로 다르겠지만"스타트업 얼라이언스", "팁스타운", "디캠프", "마루180"도 좋은 교육과 모임이 자주 공지됩니다.2. 창업 공간에 대한 고민참고로 전 창업 전인 2014년 4월부터 2017년 7월까지 무상으로 공간을 활용하고 있습니다.물론 그냥 거저 공간을 제공해 준다기보다는경쟁을 통해 선발된 인원에게 혜택이 있습니다.우선은 각 지역의 창조경제혁신센터를 활용하세요.https://ccei.creativekorea.or.kr/그리고 "K 스타트업" 홈페이지에서 1인 창조기업을 대상으로센터를 무상으로 활용할 수 있답니다.여기는 미리 예약해 놓고, 사용하기 때문에 부지런하게들락날락거리며 공간과 시간을 잡으세요.또 하나는,각 지방자치단체에서 제공하고 있는 창업 보육공간입니다.저렴한 공간도 있지만, 간혹 무상으로 사용하는 공간도 있어요.(특히 경기도는 G 창업 프로젝트에서 공간도 무상 제공하죠)그 외에 구글 캠퍼스라던가 스타트업 얼라이언스, 디캠프 등에서 제공하는 공간 지원도 있답니다.개인적으로 KDB 산업은행과 한국청년기업가정신에서 운영하는스타트업 카페도 있습니다.여기는 비정기 활용도 되지만 이왕이면 정기 활용을 하면,차 한 잔이 공짜! 따로 조용한 공간에서 일할 수 있습니다.위치가 강남의 신논현역 근처라는 것도 장점!http://www.kdbstartup.or.kr/무상 공간 지원의 단점은아무래도 코워킹 스페이스다 보니 작은 소리나 움직임에 민감한 분들은 개별적인 공간을 원하실 텐데요.그러면 사실 유료 공간을 얻으시는 편이 낫지요.근데 요즘 늘어나는 코워킹 스페이스나 개별 사무실이아무리 할인이다, 합리적인 가격이다 하더라도창업자에겐 꽤 부담되는 고정비가 아닐 수 없죠.그래서 주변 시세보단 싸고,개별적인 독립공간이 있는 BI센터를 추천합니다.http://www.bi.go.kr/main/main.do여기는 대학교 또는 지자체가 운영하는 창업보육센터들에 대한 정보가 올라오는데요.일반 사무실보다 저렴한 편입니다.(그래도 역시 서울에 위치한 곳은 비싸게 느껴지는 것은 우리가 돈이 늘 부족함 때문이죠)그 외에도 각 지자체의 "테크노파크" 홈페이지에 들어가시면,공간을 국가시설을 이용하는 정해진 단가로 공간을 얻을 수 있는 정보들이 있습니다.http://www.technopark.kr/index.php/main 잘 활용하시면 고정비 중 공간에 대한 걱정은 좀 덜어낼 수 있을 겁니다.3. 인력채용에 대한 고민스타트업에서 팀빌딩이 늘 고민이지요.초기 멤버(co-founder)까지는 어떻게 인맥을 동원해 구성되었지만이제 신규직원을 뽑아야 하는데 어떤 루트가 좋을까요?가장 좋은 것은 지인소개나 추천이겠지요.그러나 확장성의 한계가 있기 때문에 온라인으로 찾을 수 있는 방법을 남깁니다.1) 로켓펀치(https://www.rocketpunch.com/)스타트업 채용에서 로켓펀치를 빼놓을 순 없겠죠?블로그처럼 만들어 놓은 채용공고를 보고 스타트업에 관심 있거나 꿈을 가진 분들이 만나는 곳이죠.인지도도 높은 편이고, 인재 Pool이 많다는 장점이 있습니다.다른 회사의 채용공고를 보고 배울 점이 많아요.우리 식대로 재편성할 콘텐츠가 많습니다. 단점이라면, 많은 스타트업들이 수시로 채용공고를 업데이트하다 보니웬만큼 신경 안 쓰면.... 채용공고가 뒤로 밀릴 수도....;;;2) 더팀스(https://www.theteams.kr/)대표자의 개인 블로그라던가,회사소식 등을 지원자에게 보여주어 회사를 잘 알릴 수 있도록 해 주는 스타트업 채용 사이트입니다.참고로, 더팀스도 채용에 있어서는 꽤 인재 Pool이 좋습니다.다만, 유료 서비스가 생각보다 비싼 듯 하지만...전 무료 서비스만으로도 충분히 효과를 누릴 수 있더군요.(물론 그만큼 동료들이 채용공고에 신경 많이 썼습니다.)단점이라면,무료 서비스는 기간이 넘어가면 지원자의 정보를 볼 수 없어지기 때문에따로 저장하든, 기록하든 해 놓는 것을 추천합니다(특히! 연락처)3) 오피스엔(http://officen.kr/index.do)다소 생소하신 분도 있으시겠지만, 전 개인적으로 여기 채용사이트 만족합니다.실제로 SNS를 통해 홍보도 많이 하고 있고,구직자에게 회사를 잘 노출시켜줍니다.더불어, 저는 오피스엔에서 인터뷰도 해 주고, 회사 홍보 사진도 찍어주고, 블로그에 회사 홍보도 올려주어서애착이 더 많이 가네요.위의 세 곳!그러니까 로켓펀치와 더팀스, 오피스엔을 저는 주로 활용합니다.이것은 지극히 개취(개인적 취향)니까 존중해 주시죠~4) 위시켓(https://www.wishket.com/)이 곳은 프리랜서를 매칭 시켜주는데요.사실 디자인이라던가 개발자의 역량을 파악하기 힘든 스타트업에서먼저 외주/협력 형태로 위시캣을 활용해 업무를 맡겨보세요.그러고 나서,정말 맘에 든다 싶으면,유비가 삼고초려했듯이 매달리고, 꼬시고, 유혹하셔서팀원으로 합류시키는 방법이 있습니다.5) 원티드(https://www.wanted.co.kr/)지인 추천과 채용 보상금이라는 독특한 인재 연결 사이트입니다.사실 전 여길 사용해 보지는 않았기에 뭐라 특정할 수는 없지만,스타트업에 맞는 인재를 지인이나 함께 일 해 본 분들이추천하는 형태로 진행됩니다.다음에 한 번 여기도 도전해 보겠습니다.4. 지원사업에 대한 고민자력으로 생존할 수 있는 상황이라면,굳이 정부지원사업을 할 필요는 없습니다.하지만 대다수의 스타트업들은 초기 비용과 시제품/베타 서비스의 관문까지 힘겨운 나날을 보내며,그 외 잡다한 부대비용들이 여간 부담스러운 게 아니죠.전략적으로비용을 최소화하고, 더 다양한 시도가 가능하도록적극적으로 각종 지원제도를 활용하면서자금 소진 속도를 조절하기 위해지원사업을 꾸준히 관심 갖는 것을 추천합니다.그렇다고 지원사업에만 매몰되어버리면,회사가 산으로 올라가고,제품/서비스는 손에서 멀어지니까이 점은 항상 유의하시고요.여러분이 잘 알고 계신 K 스타트업(창업넷) 홈페이지는기본적으로 알아두시고요.중소기업청 기술개발사업 종합관리시스템은 주로 기술개발 쪽 사업을 공고하는데R&D 쪽으로 지원이 필요하신 분들은 여기는 필수!특히 창업기업에게는첫걸음 R&D라던가, 창업성장과제가 좋고요.여성창업기업이나 기업부설연구소 설립 등에 특화된 과제도 있습니다.http://www.smtech.go.kr/front/main/main.do또 자주 봐야 하는 사이트는 "기업마당"이라는 곳입니다.여기는 전국/지역/분야별로다양한 중소기업 지원사업을 올려주고 있습니다.http://www.bizinfo.go.kr그 외에는 각 지역의 창업 관련된 지원사업들이 공고되는데...경기도/강원도/충청도/전라도 등 각 도청/시청에 링크 타고 들어가서 직접 찾아보고 즐겨찾기 해두세요.예를 들어,우리 회사의 경우는 강원도에 본사를 두고 있어서,기본적으로강원 테크노파크, 춘천바이오산업진흥원, 춘천시청, 강원지식재산지원센터, 강원창조경제혁신센터 등을 자주 서치 합니다.5. 그 외 고민지식재산권 출원에 대한 고민이 있는 분들은각 지역마다 존재하고 있는 RIPC를 활용하세요."지역지식재산센터"라고 있는데특허출원부터 분쟁해결 지원까지 지식재산권에 관련된 다양한 프로그램이 있습니다.참고로 우리 회사는 지난 3년간 매우 많은 지원을 받았습니다.http://www.ripc.org/2016_main.do수출은 당연히 코트라겠죠?코트라에서는 해외전시회뿐만 아니라 사절단,해외지사 설립 등에 관한 지원이 주로 있습니다.수출을 타진하기 위한 연계 사이트도 있으니까,공부도 많이 되고, 해외진출에 활용하면 좋습니다.http://www.kotra.or.kr/kh/main/KHMIUI010M.html더불어서 우리 회사 제품의 HS코드가 뭐지? 하고 궁금하다면...사이트 주소 하나 더 붙여드릴게요. 관세법령정보포탈이라고 있는데...여기서 검색해서 찾으시면 수월하십니다.https://unipass.customs.go.kr/중소기업 진흥공단에서도 수출 관련하여 도움을 줍니다.특히 언어별 웹페이지 제작지원과 인콰이어리 대응 지원 등관련된 온라인 지원이 세세하게 존재하는데요."고비즈코리아"라고 부릅니다.여기서 계정 만들어서 이런저런 지원을 받으세요.http://kr.gobizkorea.com/support/index.jsp더 많은 사이트와 정보가 많지만,아무래도 일일이 제가 올리기보다는자신의 회사에 맞추어 직접 찾는 것이 가장 현명합니다.일단 공통적으로 필요할 정보들이 있는사이트를 올렸습니다.스타트업이라는 이름으로 길을 떠난 순간부터많은 고뇌와 막막함이 다가올 것입니다.저 역시 처음엔 무식하게 시작해서남몰래 눈물 흘리기도 했고,지금도 사업과 공부를 병행하고 있습니다.다들 쉽게, 쉽게 조언할 수는 있지만,사실 우리에게 가장 절실한 것은 문제 해결을 위한답이 아닐까요?제가 드릴 수 있는 것은답은 아니지만, 실마리라도 찾기 위해정보를 얻을 수 있는 장소만 소개입니다.어떻게 활용하고,무엇을 얻어낼지는 다 다르니까요.응원한다고 말을 꺼냈지만,제가 드릴 수 있는 것은 딱 이 정도 수준이네요.우리나라가 기업 하기 좋은 나라라고 하는 말에어느 정도 반대할 이야기도 있습니다.하지만 정부가 손 놓고 있는 게 아니랍니다.나름 창업을 통해 고용과 수출을 늘리기 위해많은 프로그램과 제도를 꾸준히 업데이트하고수정/보완하고 있습니다.저는 우리나라를 찾고, 두드리고, 행동하면,기업 하는데 도움이 되는 나라라고 생각합니다.그리고 세계 유명한 어느 기업이든,자국의 버프(도움)를 안 받는 곳은 없습니다.다만, 눈에 뻔히 보이는 지원이냐(예를 들어 중국처럼)눈에 안 보이지만 절대적으로 유리한 지원이냐(예를 들어 미국처럼)그 차이가 있을 뿐입니다.가만히 있는 것은 죽은 시체도 할 수 있는 일입니다.움직이고, 살아날 길을 찾아야 생명체입니다.우리 스타트업 동지들 모두가활발한 생명력으로성공하시길 기원합니다.그래서,세금도 많이 내고,사회환원과 업무환경도 신경 쓰고직원들과 그 가족들이 행복하도록 분배하며,우리 후대들이 우러러볼 수 있는 존경받는 기업이 되길 소원합니다.응원합니다.스타트업!#클린그린 #스타트업 #스타트업창업 #스타트업창업자 #창업자 #꿀팁 #응원 #조언
조회수 2032

왜 차세대 SaaS는 페이스북처럼 될 것인가.  

사람들이 매일 사용하는 서비스 중 가장 유용한 것은 무엇일까?대부분의 경우에 있어, 그것은 Slack, Gmail 혹은 Excel 같은 SaaS 툴이 아닐 것이다. 그것은 바로 페이스북이다.페이스북으로 할 수 있는 모든 것들에 대해 생각해보자.친구들에게 메시지 보내기 영상 통화 하기 뉴스 보기 이벤트 기획하기 사진과 동영상 공유하기사람들은 페이스북에 얼마나 많이 의지하고 있는 지 종종 잊어버리지만, 페이스북은 이미 우리의 일상 생활에 아주 깊숙이 자리잡고 있다. 오늘날에는 수 백만 개의 서비스가 존재하지만, 그들은 그럼에도 만족할 줄을 모른다. 그리고 페이스북은 SaaS 회사들이 할 필요가 있는 것들을 정확히 집어서 하고 있다.On-premise(인하우스 서비스)에서 SaaS(클라우드 컴퓨팅)로SaaS는 “Software as a Service.” 의 약자이다. 페이스북은 사실 기술적으로 SaaS라기 보다는, 일종의 소비자 네트워크 서비스라고 할 수 있다. 하지만 페이스북만큼 많은 서비스를 제공하는 곳은 존재하지 않는다. 페이스북이 이렇게까지 성공한 것은 그 서비스 내에서 유저들의 이용률을 크게 늘렸기 때문이다. 다른 SaaS 기업들은 이 부분을 더 신경 써야 될 필요가 있다. 이용률이야말로 지금 SaaS 비즈니스의 생존에 있어 그 어느 때보다 중요하기 때문이다.그 이유는 다음과 같다. 예전에, 소프트웨어는 회사의 컴퓨터 네트워크에 실제 물리적으로 깔려야만 했다. 소프트웨어 판매업자들은 대기업에 라이선스를 팔기도 했고, 그런 기업들은 해당 소프트웨어 이용을 위해 Accenture나 CSC 같은 회사에 돈을 지불하기도 했다. 당시 판매업자들은 라이선스를 많이 팔기만을 원했지, 얼마나 많은 사람들이 그 소프트웨어를 쓸 지에 대해선 관심이 없었던 것이다.그리고 1999년, Salesforce의 공동 창업자인 Marc Benioff는 새로운 모델을 소개하며 다음과 같이 말했다.“설치하는 데만 수 개월이 걸리고 하드웨어와 네트워킹에 엄청난 투자를 요구하는 비싼 CD-ROM 소프트웨어를 기업들에게 파느니, 우리는 클라우드 컴퓨팅이라고 알려진 모델을 통해 Software-as-a-Service(SaaS)를 팔기로 했다. 기업들은 이제 유저의 수에 맞춰 서비스를 이용한 만큼 비용을 지불해야 할 것이고, 그런 서비스들은 인터넷, 클라우드를 통해 즉시 제공될 것이다.”구독 기반(subscription-based) 소프트웨어는 회사 내부의 데이터 센터가 아닌 웹 브라우저를 통해 제공된다. 이는 소프트웨어 개발자로 하여금 언제든지, 즉각적으로 그들의 고객에 접근할 수 있게 해주었다. 어느 순간, 유저를 만족시키는 일은 CIO(Chief Information Officer)나 시스템 통합업체의 책임이 아니게 된 것이다. 그 일은 이제 소프트웨어 판매업자가 하게 되었다.이러한 클라우드 컴퓨팅 방식은 SaaS 소프트웨어로 하여금 생존을 위해 끊임없이 자신들의 가치를 어필하게끔 만든다. 그리고 SaaS 회사들은 계속해서 자신들의 소프트웨어를 이용하는 소비자들을 확보하기 위해 많은 양의 돈을 쓰고 있다. 이는 과거 기업 고객들에게 소프트웨어 라이선스를 팔러 다니던 때와는 180도 달라진 상황인 것이다. 오늘날의 SaaS 회사들은 예전처럼 높으신 몇몇 분들을 만나 무언가를 사라고 설득할 필요가 없다. 그저 이용자들이 자신들의 제품을 계속 사용하게끔 유도하면 되는 것이다.페이스북은 SaaS의 새로운 모델이다이제 페이스북을 한 번 살펴보자. 페이스북은 클라우딩를 통해 지속적으로 서비스를 제공한다. 그들은 광고를 통해 돈을 벌기 때문에, 그들의 가장 중요한 목표는 사람들로 하여금 계속 서비스를 이용하게 하는 데 있다. CIO들을 만나서 큰 계약을 체결하는 데 시간을 쓸 바에야 그 100분의 1초도 안 되는 시간에 12억 명의 사람들에 서비스를 파는 것이 더 낫다는 것이다.페이스북이 딱 한 가지 신경 써야 될 것이 있다면 그것은 사람들이 지금보다 더 적극적으로 페이스북을 이용하게끔 만드는 것에 있다.“우리의 최우선 목표는 모바일 장치나 개인용 컴퓨터를 통해 사람들을 연결시켜주고 공유하게끔 하는 유용하고 매력적인 서비스를 창조하는 것에 있습니다.” – 미국증권협회 기업정보 페이지의 페이스북 파일에서페이스북이 사람들의 관심을 많이 받을수록, 그들은 더 많은 광고를 사람들에게 보여줄 수 있다. 페이스북에게 있어서, 그러한 관심은 아주 중요한 것이다. 더 많은 관심을 받는 다는 것은 더 많은 성장과 확장의 기회를 갖는 다는 것을 의미하기 때문이다. 이것은 드롭박스나 Slack과 같이 바텀업 방식으로 성장한 SaaS 기업들이 새겨들어야 할 점이다. 유저들이 서비스를 쓰는 시간이 많아진다면, 앞으로 그들에게 더 많은 다른 서비스를 쓰게 만들 수 있기 때문이다.앞으로 페이스북이 더 성장하고 발전하려면 유저의 관심이 필요하다. 그래야 여러 방면에서 이용률을 늘릴 수 있는 방법을 찾을 수 있기 때문이다. 이제 여기서 페이스북이 그들 서비스의 이용률과 성장을 이뤄낸 3가지 방법에 대해서 소개해 보도록 하겠다. 모든 SaaS 기업들은 비슷한 방법으로 자신들의 이용률과 성장을 이뤄낼 수 있을 것이다.페이스북은 이용률을 측정하여 현재 운영하는 서비스를 최적화 시켰다페이스북은 이용률을 늘리기 위해 새로운 서비스를 내놓는다페이스북은 다른 앱들과 통합하는 과정을 거쳤기 때문에 페이스북을 쓰지 않는 사람들조차 페이스북을 쓰게 되었다페이스북이 이용률을 어떻게 늘렸는지에 대해 좀 더 깊이 이야기해 보도록 하겠다. 그러고 나면 페이스북의 노하우를 다른 SaaS에 어떻게 적용할 수 있을 지 분명하게 보여줄 수 있을 것이다.이용률 측정을 통해 서비스의 최적화를 이뤄낸다지금 사람들이 어떻게 서비스를 이용하고 있는 지 모르고 있다면 그들에게 당신의 서비스를 사용하게 만들 수도 없을 것이다. 페이스북은 이용률을 늘리는 방법에 대해 집요하게 연구해왔기 때문에 좋은 사례로 들기에 적합하다.핵심은 사람들이 지금 하고 있는 것, 그리고 그들이 원하는 것을 정확하게 아는 것에 있다. 페이스북은 단순히 월 이용자 수나 일 이용자 수를 알아보려 애쓰지 않는다. 왜냐하면 그런 수치들은 사용자들이 그 서비스를 통해 무엇을 하는지를 전혀 설명하지 못하기 때문이다. 대신 페이스북은 서비스 이용의 질적인 부분에 집중한다. 사람들이 페이스북을 통해 무엇을 이루려고 하는 지와 그들이 실제로 그렇게 할 수 있는 지에 대해서 말이다.이 부분에 있어 페이스북의 대표적인 전략 중 하나가 바로 10일안에 친구 7명 만들기이다. 일찍이, 페이스북은 10일안에 7명의 친구를 만드는 사람은 페이스북을 계속 사용할 확률이 훨씬 더 높다는 사실을 알게 되었다. 일단 이것을 알게 되자, 그들은 신규 유저들이 7명의 친구를 만날 수 있게 하기 위해 가진 모든 수단을 쓸 수 있게 된 것이다.바로 지금도, 페이스북은 새로운 친구를 추가할 것을 사람들에게 계속해서 권장한다. 왜냐하면 이것이야 말로 네트워크를 이루는 데 있어서 가장 가치 있는 부분이기 때문이다.페이스북 계정을 만들자마자, 유저들은 뉴스 피드 상단에 새로운 친구를 추가하시겠냐는 메시지가 뜨는 것을 볼 수 있다.아래 사진은 유저들이 다른 페이지를 둘러 보는 동안 뜨는 사이드바인데, 보다시피 그들이 알 수 있을 법한 사람들을 친구로 추가하게끔 권장하고 있다.또한 페이스북은 뉴스 피드와 같이 그 기능을 최대한 활용하기 위해 더 많은 친구들을 추가할 것을 권장하고 있다.페이스북은 이런 전략을 앞으로도 고수할 것이다. 2017년, 페이스북은 “Discover people” 이라는 새로운 기능을 출시했다. 이는 당신으로 하여금 프로필을 업데이트 하게끔 유도하고 기존에 친구가 아니더라도 같은 이벤트에 참여하는 경우 서로를 연결시켜 준다.페이스북은 사람들이 자신들의 서비스를 계속 이용하게 만들기 위해 기나긴 세월 동안 노력해왔고 앞으로도 그럴 것이다. 그들은 친구 최적화를 빠르게 해줄 뿐만 아니라 흥미를 잃은 사람들도 쉽게 다시 돌아올 수 있도록 여러 요인들을 제공해준다. 페이스북의 성장 전담 부서를 이끌고 있는 Chamath Palihapitiya은 “당장의 단기적인 이익에만 집중하지 않기 위해서는 절제력이 필요하다.” 라고 말한다. 페이스북은 초창기부터 무엇보다 사람들의 이용률이야말로 그들의 성패를 좌우한다는 것을 알고 있었다. 사람들의 주된 목표를 파악해서 이용률을 장기적으로 늘리는 것이 그들의 제1과제 였던 것이다.Trello는 어떻게 유저들이 쉽게 직장 동료를 추가하도록 만들었는가페이스북과 똑같이, Trello는 유저들이 무엇을 하는지를 이해하고 그들이 원하는 걸 더 많이 하게 도와주는 방식으로 이용률을 올렸다. Trello의 핵심적인 가치는 사람들이 프로젝트를 협력하게끔 만드는 것이었기 때문에, 그들이 그렇게 하도록 도움을 줘서 자신들 서비스의 가치를 보여줘야 했다.그래서 Trello가 직장 동료를 추가하는 방식은 놀라울 정도로 쉽게 되어 있다. 이는 페이스북이 친구를 추가하는 방식과 정확히 똑같다. 페이스북이 사람들로 하여금 쉽게 친구를 추가하게 하여 소셜 네트워크의 가치를 입증했다면, Trello는 쉽게 동료들을 추가하게 하여 프로젝트 협업 툴로써의 가치를 입증했다.Trello는 유저들로 하여금 이름이나 이메일 주소로 아는 사람들을 등록할 수 있게 만들었다. 유저들은 코드나, ID, 링크 같은 것 없이도 사람들을 쉽게 추가할 수 있다. 심지어 다른 사람들이 Trello를 사용하는지도 알 필요가 없다. 어찌 됐든 Trello를 통해 사람들을 찾아보고 확인해 볼 수 있는 것이다.또 만약 Trello를 한 번이라도 썼던 사람이라면 더욱 쉽게 목록에 추가할 수 있다.이런 방식을 통해 이용자들은 아무런 마찰 없이 많은 동료, 협력자들을 통해 프로젝트를 공유할 수 있다. 즉, Trello의 핵심 가치를 이루게 되는 것이다. 이는 사람들에게 Trello가 얼마나 유용한 서비스인지를 빠르고 쉽게 이해시켰다. 또한 이는 더 많은 사람들이 더 많은 프로젝트를 하게끔 유도했고, 결국 모두가 Trello를 더 많이 이용하게 되었다.Slack은 어떻게 이용률을 늘려왔는가이렇게 사용자의 이용률에 집중해서 성장을 이루고 있는 유명한 SaaS 기업이 또 하나 더 있다. Slack이 바로 그 기업인데, Slack은 메시지를 매끄럽게 전송하는 역할 하나에만 전념하고 있다.Slack은 자신들의 서비스를 이용해 2000개 이상의 메시지를 보낸 적 있는 팀들은 Slack의 가치를 알고 있기 때문에 앞으로도 계속 서비스를 사용할 것이라고 예측한다. 왜냐하면 Slack의 통계에 따르면, 다른 요소들이 어떻든 간에, 2000개 이상의 메시지를 보낸 팀들 중 93%가 지금까지도 Slack을 사용하고 있기 때문이다. 그래서 이용률을 늘리기 위해선, 메시지를 보내는 것을 더 쉽게 만들어야 하는 것이다. Slack의 공동 창업자인 Stewart Butterfield 역시도 이 목표를 위해 사람들이 실제로 어떻게 Slack을 쓰고 있는가에 대해서 생각해보았다.“처음으로 Slack을 쓰려고 온 사람이 되었다고 생각해 보는 겁니다. 특히 진짜 사회생활을 하는 사람들 말이죠. 상사에게 Slack을 쓰라고 해서 쓰게 된 사람, 아침 먹을 시간도 없어서 짜증이 난 사람, 주말이 오기 전에 프로젝트를 끝낼 수 있을지 걱정하는 사람… Slack을 면밀히 살펴봐서, 이런 사람들에게 먹히지 않을 것 같은 요소들을 생각해 내는 겁니다. 냉정하게 보는 거에요. 최고의 서비스를 주기 위해서 말이죠.”Slack은 메시지 전송에 따르는 불편함을 개선하면서 이용률을 늘려왔다. 그러한 개선의 예를 들어 보자면, 누군가가 Slack에서 링크를 걸었다고 했을 때, Slack은 그 링크에 대한 간단한 정보를 미리 보여준다. 즉, 사람들은 링크를 보려고 앱에서 빠져나와야 될 필요가 없는 것이다. 나중에 다시 그것을 확인해보기도 편하고 말이다.이런 시스템상의 개선점들이 Slack을 성장하게 만들었다. 메시지를 보내는 것에 있어서 사람들이 원하는 부분을 아주 쉽게 할 수 있게 만들었기 때문이다.이렇듯 페이스북, Trello, Slack은 모두 실제 이용자들이 원하는 것을 이해하고 그들이 그것을 쉽고 빠르게 할 수 있는 서비스를 제공하고 있다. 아래에 이런 SaaS 기업들이 어떻게 자신들의 서비스를 통해 이용자들에게 도움을 줬는지 요약해보았다.페이스북의 10일안에 친구 7명 만들기, Slack의 2000개 이상의 메시지 보내기, Dropbox의 파일 한 개 업로드 하기 등과 같이 그들은 수치로 표시되는 목표를 세웠다. 이러한 목표는 당신의 팀으로 하여금 무엇이 가장 이용률을 끌어오는데 중요한 지를 확인시켜줄 뿐만 아니라 그들에게 목표 달성을 위한 구체적인 숫자를 알려준다.핵심적인 기능들을 사람들이 이용하게 하려면 그것을 직관적으로 만들어야 한다. Raymond Loewy(미국의 전설적인 산업 디자이너)에 따르면, 성공적인 서비스는 사람들이 당장 사용하기에 편해야 한다고 한다. 예를 들어, 페이스북이 처음 “On this day” 서비스를 도입한 것은 유저들로 하여금 무언가 새로운 것을 하는 걸 권하기 위해서였다. 하지만, 이 서비스는 여전히 유저들에게 친숙한 태그, 공유하기 기능들을 사용하고 있다.유저들의 참여를 막을 만한 요소들을 찾아서 없애야 한다. 사용자들이나 얼리 엑세스 베타 테스터 등과 이야기를 해봐서 무엇이 서비스에 있어 가장 짜증나는 요소인지 알아내야 한다. “이거 어떻게 하는 건지 모르겠어요” 라던가 “이게 좀 쉽게 됐으면 하는데…” 와 같은 불만들에 귀기울여야 한다. 이런 장애물들을 제거하면 유저들이 서비스를 이해하기 더 쉽고 그 서비스의 가치를 파악하는 것 역시 쉬워진다.즉, 현재 가지고 있는 서비스 내에서 이용률을 끌어올리려면 유저들에게 무엇이 가장 도움이 되고 의미가 있는지 파악하는 것이 가장 중요하다고 할 수 있다.이용률을 늘리기 위해 서비스를 추가한다이용률을 끌어올린다는 것은 단순히 사람들로 하여금 기존의 서비스를 계속 쓰게 만드는 것 만을 의미하지는 않는다. 당신은 끊임없이 실험을 해보고 새로운 서비스를 제공해서 유저들이 서비스를 통해 더 많은 것들을 얻을 수 있도록 해야 한다.페이스북은 기존에 그들이 가진 서비스가 수명이 다할 것을 걱정해서 계속 실험을 하고 이용자들이 앞으로 무엇을 원할지를 예상해왔다.페이스북의 직원 가이드북을 보면, 새로운 직원들은 그들의 팀이 계속 새로운 생각을 하게끔 자극 할 것을 권장하고 있다.그 결과, 페이스북은 끊임없이 혁신하고, 또 그만큼 실패를 경험하고 있다.페이스북은 스냅챗으로부터 이용자들을 뺏어오기 위해 2012년 별도의 앱인 Poke를 출시한다. 그런데 이 앱은 대실패작이 되었고 페이스북은 얼마 지나지 않아 앱스토어에서 이 앱을 삭제하게 되었다.2014년에 페이스북은 이용률을 늘리기 위한 일환으로 슬링샷이라는 앱을 출시했다. 이 앱은 사진과 함께 메시지를 보내면 스냅챗과 같이 몇 초안에 사라지는 것이 특징인데 불과 1년만인 2015년에 앱스토어에서 내려가게 되었다.또 페이스북은 2016년 Quick Update라는 것을 시도했다. 이는 스냅챗과 비슷한 기능을 페이스북 앱에 추가시키는 것이었는데, 이런 기능을 유저들을 대상으로 그룹테스트 해 본 결과 반응이 좋지 않아 결국 공식적으로는 출시되지 못하게 되었다.이런 좋지 않은 결과들은 페이스북이 혁신에서 실패하고 있다는 소문을 자아냈다. Jason Calacains 같은 논평가는 이에 대해 “페이스북의 앱 플랫폼은 망하기 위해서 혁신을 하는 것인가?” 라고 하기도 했다.하지만 페이스북의 이런 계속되는 시도는 결국 그들을 새로운 기회로 인도했다. 그들은 스냅챗의 스토리 기능을 페이스북과 인스타그램에 도입하려고 시도해 왔는데 이 과정에서 마침내 페이스북 라이브라는 새로운 서비스를 만들어냈다. 이 서비스는 대히트를 쳤고, 이제 회사, 미디어, 그리고 유명인사들까지 모두 페이스북의 라이브 스토리를 사용하고 있다.이렇듯 페이스북이 큰 성공을 거둘 수 있었던 이유는 그만큼 실패도 많이 해봤기 때문이다. 그들은 그저 사람들이 관심 가질 만한 새로운 무언가를 계속 만드는데 집중할 뿐이다. 왜냐하면 이런 시도야말로 궁극적으로 이용률을 더 많이 올릴 수 있는 방법이기 때문이다.드롭박스 역시 이용률을 높게 유지하기 위해 새로운 서비스를 만들고 있다SaaS 기업들은 현재의 서비스보다 한 걸음 더 앞선 서비스 제공을 통해 이용률을 끌어올릴 수 있다. 그들은 지금 하는 것 이외에 이용자들이 무엇을 더 원하고 더 신경 쓸까를 생각해 볼 필요가 있다.그 예로 드롭박스의 드롭박스 페이퍼를 들 수 있다. 드롭박스는 원래 파일 공유 서비스였다. 하지만 오늘날, 드롭박스는 파일을 공유하는데 있어 다양한 방법을 제공해준다. 만약 드롭박스가 처음 서비스 이외에 유저들이 뭘 더 원할 것인 지를 생각해보지 않았다면 결국 이용률을 올릴 방법이 바닥나서 망하게 됐을 것이다.즉 드롭박스는 단순한 파일 공유 서비스에서 사람들이 함께 일하는 걸 더 쉽게 만들어 주는 일종의 팀 협업 툴로 자신들의 브랜드를 쇄신한 것이다. 이러한 재브랜딩 과정과 함께, 드롭박스는 2015년에 “창조적인 업무를 위한 새로운 형태의 파일 편집 툴” 이라는 신규 서비스인 드롭박스 페이퍼를 런칭했다.드롭박스 페이퍼는 단순히 문서와 파일을 저장하는 데 드롭박스를 쓰는 것이 아니라, 이제 문서와 파일을 만드는 데에도 드롭박스를 쓸 수 있게 만들어 주었다. 드롭박스 페이퍼는 사람들이 더 많이 서비스를 이용하게 만들었는데, 이는 파일 공유를 넘어 사람들간의 협업을 더 쉽게 해준다는 추가적인 옵션을 제공해줬기 때문이다.드롭박스가 이렇게 새로운 서비스를 만들려는 이유는 생존하기 위해서이다. 이 산업에 있어 망하는 일은 너무나 쉽게 일어나기 때문이다. Intercom의 Des Traynor는 다음과 같이 이를 설명한다.“원래 이쪽 산업이란 게 이런 겁니다, 기술이란 것의 특성 자체가 이런 것이죠. 모든 서비스가 결국 다 죽어 없어지게 되어있습니다. 만약 내 말이 사실이 아니라고 생각한다면 저에게 그렇지 않은 경우를 알려주세요. 한때는 SaaS 비즈니스가 절대 안 망할 것 같은 시절도 있었습니다. 하지만 더 이상은 아니에요.”만약 당신이 유저들이 당장 원하는 것에 대해서만 생각하고 있다면, 이미 망하고 있는 것이다. 성공적인 SaaS 기업들은 항상 유저들이 미래에 뭘 원하게 될 지에 대해서 생각한다. 아래에 SaaS 기업들이 어떻게 소비자들의 미래 욕구와 새로운 서비스에 대해 예측하려 하는 지 정리해보았다.당신의 경쟁자들, 그리고 왜 유저들이 그들의 서비스를 이용하는지 이해하라. 온라인 포럼 등을 보고 사람들이 경쟁사의 서비스를 어떻게 평가하는지를 알아내라. 이를 통해 당신은 사람들이 무엇을 원하는지, 그 방향이 어디로 향하게 되는지에 대한 통찰력을 얻게 된다. 이런 과정은 서비스의 확장과 새로운 서비스를 실험해 볼 수 있는 기회도 제공해준다.당신의 서비스를 사용했을 때 유저들이 무엇을 할 수 있을지를 생각해 봐야 한다. 유저들이 당장 요구하는 것만 만드는 것이 아닌 그들이 앞으로 원할 것이 무엇인지를 한 발 앞서 생각해 보는 것이다. 예를 들어, 아마존이 최근 개시한 새로운 서비스인 “Your idea” 리스트를 보자. 이 서비스는 유저들이 쇼핑을 하면서 비록 구입 하진 않더라도 커뮤니티에 자신이 생각한 리스트를 보여주고 싶은 욕구를 미리 연구해서 나온 결과물이다.가장 효과적이면서도 남들이 쉽게 예상하기 힘든 기능들을 우선순위로 짜는 것이 좋다. Gusto의 Tomer London은 서비스를 만들고 그것을 개선시킬 때, 가장 좋은 기능은 타인이 예측하기 어려움에도 불구하고 사용자 경험을 개선시키는데 가장 효과적인 것들이라고 한다. 사람들이 서비스를 통해 무엇을 가장 하고 싶어하는 지를 이해하고 그들을 도와줄 더 쉽고 나은 방법들을 생각해본다면 가장 효과적인 기능에 대한 단서를 잡을 수 있다. 남들이 예측하기 어려운 방법들은 당신이 처한 경쟁 지형에 대해 이해함으로써 알아갈 수 있다. 서비스 이용률을 늘리기 위해 다른 서비스와 통합한다우물 안의 개구리처럼 서비스를 홀로 제공하려 한다면 최대한의 이용률을 얻기란 요원하다. 당신은 새로운 서비스를 내놓음으로써 이용률을 늘릴 수 있지만, 그것으론 충분하지 않다. 유저들은 항상 다른 서비스 역시도 사용하고 있다. 당신이 이길 수 있는 방법은 당신의 서비스를 다른 서비스에 포함시킴으로써 사람들이 그 서비스를 쓸 때, 당신의 서비스도 쓰게 만드는 것이다.당신이 페이스북 웹사이트나 앱을 통해 페이스북을 쓰고 있지 않더라도, 당신은 페이스북을 사용하고 있는 것이나 마찬가지이다.페이스북을 이용해서 다른 서비스에 로그인 할 수 있다당신은 다른 웹사이트의 컨텐츠를 페이스북에 공유할 수 있다당신이 작업하는데 쓰는 서비스를 페이스북에 연결시킬 수 있다.티켓마스터를 통해 공연 티켓을 구매하는 것 역시도 페이스북으로 할 수 있다.페이스북은 다른 서비스들과도 완전히 통합이 되었기 때문에 사람들은 페이스북 인터페이스를 다른 서비스에서 보더라도 전혀 이상하게 생각하지 않는다. 심지어 어떤 경우에는, 페이스북 계정이 없다면 다른 사이트에 가입하기 어려울 때도 있다.페이스북이 다른 서비스와 더 통합이 될수록 당신은 더 페이스북을 쓰게 되고 그것을 필요로 하게 된다. Social Capital LP의 공동 경영자인 Arjun Sethi는 이점에 대해 다음과 같이 말한다.“페이스북이 권장하는 행동들이 일종의 문화가 되고 있어요. 페이스북은 그냥 가만히 앉아서 다른 서비스가 자신의 특징들을 베끼는 걸 보고만 있지 않았습니다. 자신들의 서비스를 다른 곳에 아주 쉽게 통합될 수 있게 만들었고 그 과정에서 핵심적인 이득은 다 챙겨갔습니다.”이것은 페이스북의 신중한 성장 전략의 일환이다. 다른 서비스의 개발자들이 페이스북을 쉽게 그들의 서비스에 통합할 수 있게 만듦으로써, 그냥 자신들의 서비스 내에만 머물러 있는 것에 비해 훨씬 더 많이 사람들이 페이스북을 사용하게끔 만들었다.Slack 역시도 다른 툴과 쉽게 통합이 가능하다페이스북이 다른 소셜, 라이프스타일 서비스들과 통합해서 유저들을 끌어모은 것처럼, Slack 역시도 자신들의 서비스를 다른 관련된 툴들과 통합할 수 있게 만들었다.Front와 같은 이메일 클라이언트와의 통합은 사람들로 하여금 Slack에서 바로 이메일을 관리할 수 있게 하였다.Slack은 또 Stripe와 통합을 하였는데, 이로 인해 사람들은 Slack 내에서 고객 결제 데이터를 보고 관리할 수 있게 되었다.Google Docs와의 통합으로 Slack 앱을 나가지 않고도 구글 문서 활동들을 볼 수 있게 되었다.Slack은 서드 파티의 통합을 장려하기 위해 거대한 앱 생태계를 구축하고 있다. 2015년에, 그들은 앱과 관련해서만 8천만 달러의 벤처 펀드를 만들었다. 2016년에, Slack은 자신의 플랫폼 내에 600개 이상의 앱을 보유하게 되었다. 그래서 이메일을 관리하거나, 고객과 커뮤니케이션을 하거나, 제품 분석 결과를 보는 것 등을 하러 다른 곳으로 일일이 가는 대신에 Slack 유저들은 기존 자신들의 서비스를 통해서 그 모든 것들을 할 수 있게 되었다.페이스북과 Slack은 그들 서비스의 유저들이 사용할 만한 다른 서비스들과 통합을 통해 이용률을 올렸다. 당신 서비스의 이용자들도 알고 있는 이런 기술의 생태계 속에 당신의 서비스를 끼워 넣는 방법에 대해 아래에 정리해 보았다.당신의 서비스를 사용하는 유저들의 워크플로우 대해 생각해보고 그것을 개선시킬 수 있는 점들에 대해서 추측해보라. 예를 들어, HubSpot을 이용하는 기업들의 궁극적인 목적은 사람들을 광고로 유인해서 실제 고객으로 만드는 데 있다. 그래서 HubSpot은 그 목적을 더 잘 수행하기 위해 자신들의 CRM 툴을 페이스북의 광고 관리 프로그램인 Adespresso와 통합할 수 있 게 만들었다. 즉, 사람들이 페이스북 광고를 클릭하게 되면 그 유저의 정보는 자동으로 그들의 CRM에 업로드가 된다.다른 유명 서비스들과의 통합을 통해 그들의 규모가 가진 이점을 가져오는 것이 좋다. 눈에 잘 띄는 서비스와의 통합은 당신의 서비스 역시도 눈에 잘 띄게 만들어준다. 잠재적 유저들에게 당신의 서비스를 소개할 수 있는 기회를 더 얻을 수 있을 뿐만 아니라, 다른 유명 서비스가 가진 브랜드 신뢰성 역시도 가져올 수 있다. 만약 당신의 회사가 아직 작다면, 유명하고 접근하기도 쉬운 Slack이나 페이스북과 같은 서비스와 함께 시작하라.Zapier를 활용해서 다른 서비스들과의 통합을 도모해라. Zapier에 호환이 되도록 앱을 만든다면, 유저들로 하여금 당신이 아직 직접적으로 통합을 제안하기 어려운 다른 앱들과 통합할 수 있는 옵션을 제공해 주는 것과 다름이 없다. 이 방법은 당신의 서비스가 아무리 독특하다 할지라도 그것을 유저들의 워크플로우에 집어넣는 데 도움이 된다.서비스를 개선시키는 데 있어 한 가지 방법만 써서는 이용률을 끌어올리는 데 한계가 있다. SaaS 기업들이 정말로 유저들로 하여금 그들의 서비스를 계속 좋아하고 이용하게끔 만들려면, 할 수 있는 모든 방면에서 이용률 최적화를 해야 한다. 기존의 서비스 내에서 할 뿐만 아니라, 새로운 서비스, 다른 유저들에게 이미 필요한 다른 서비스와의 통합을 해서라도 말이다.차세대 SaaS를 만드는 것에 대해SaaS 서비스들은 점점 더 무용지물이 되어 가는 경우가 많고 사라지는 서비스들도 많다. 만약 SaaS 기업들이 왜 사람들이 그들의 서비스를 쓰는 지 이해하지 못한다면, 그들은 계속 성장할 수 없을 것이고 유저들도 이탈할 것이다.지금까지의 내용을 정리하자면 페이스북은 이용률과 성장을 도모할 수 있는 매우 포괄적이면서도 단순한 방법 3가지를 생각해냈다. 사람들이 현재의 서비스를 더 많이 사용하게 만드는 것, 새로운 서비스를 통해 더 많이 사용하게 만드는 것, 그리고 다른 서비스와의 통합을 통해 자신의 서비스를 더 이용하게 만드는 것. 이 3가지이다. 그리고 이렇게 이용률을 올린다는 것은 성공을 의미한다.미래에 가장 성공적인 SaaS 기업 역시 이용률에 중점을 두게 될 것이다. 지금까지 페이스북을 모델로 삼아 설명한 것처럼, 이것들이 SaaS 기업이 앞으로 더 나은 서비스를 만드는 방법이 될 것이다.원문 : 프로덕트해빗#더팀스 #THETEAMS #SaaS #인사이트 #페이스북
조회수 681

HHI 사람들 - “내겐 너무나 특별한 사보”

- 최지순 기장, 30년간 모아 “사보는 제 회사생활의 추억이자,안부를 전하는 편지였습니다” 현대중공업 최지순 기장에게는 특별한 보물이 있습니다. 그건 바로, 집 한 편에 회사의 역사와 자신의 추억이 오롯이 담긴 ‘사보’입니다.30살도 더된 사보부터 지난달에 나온 따끈따끈한 신간까지 총 350여권에 달하는 사보가 연도순으로 정리돼 있더라고요.  그가 사보와 첫 인연을 맺은 건 1988년 무렵입니다.초등학교 시절 은사(恩師)님이 강원도 정선의 한 분교에서 근무하신다는 소식을 접했는데요.같은 강원도(강릉) 출신인 최 기장은 동향의 산골 학생들에게 너른 바다와 웅장한 선박 건조현장을 소개하고 싶어 매월 사보를 1~2권씩 보내기 시작했대요. 그는 “회사 소식과 교훈적인 이야기, 생활 정보들로 가득해, 당시 10여명의 학생들이 사보를 닳도록 읽는다는 말에 매우 뿌듯했다”고 말했습니다. 최 기장은 고향 친구들을 만나는 날이면 그들에게 한 권씩 사보를 선물했어요. 그렇게 함으로써 울산에서의 건강하고 자랑스러운 삶을 친구들에게 알려줬어요.△최지순 기장은 2015년 4월호에 '한마음회관 아코디언 동호회' 기사에 자신의 사진이 실린 일이 가장 기억에 남는다고 말했습니다.  올해 정년퇴직이라는 최지순 기장. 그의 근속연수는 32년에 달하는데요.앞으로도 사보가 현장 곳곳의 생동감 넘치고 가슴 따뜻한 이야기들을 계속 전해주기를 바란다고 당부하며, 저희와 작별인사를 나눴답니다. 넵~! 44년 전통의 ‘현대중공업 사보’와 함께, 저희 블로그도 더더욱 분발할게요.#현대중공업 #조직문화 #기업문화 #사보 #공채정보 #직무정보 #구성원인터뷰
조회수 1002

잔디 iOS 개발자 Chris, 그가 처음으로 공개한 '잔디 1호 사원' 스토리

편집자 주: 잔디와 함께 하고 있는 멤버는 총 50여 명. 국적, 학력, 경험이 모두 다른 이들이 어떤 스토리를 갖고 잔디에 합류했는지, 무슨 일을 하고 있는지 궁금해하는 분들이 많습니다. 잔디 블로그에서는 이 궁금증을 해결해 드리고자 ‘맛있는 인터뷰’를 통해 ‘잔디’ 멤버들의 이야기를 다루고 있습니다.◇ 우리가 앉아 있는 이 공간이 어떤 곳인지 소개해 달라Chris: 설마 했다. 내가 맛있는 인터뷰 대상자가 될지는.. 머리가 멍해 고통받던 중 당신이 추천한 그릴 타이로 오늘 장소를 선정했다. 이름만 들었을 땐 ‘거기 뭥미?’ 이랬는데, 와보니 알겠다. 예전에 와 본 적이 있다.◇ 자기소개 좀 해달라C: 반갑다. 잔디에서 iOS 개발 파트를 담당하고 있는 1호 사원 Chris라고 한다. 아주 오랜 기간 동안 원래 이름인 ‘봉규’라고 불렸다가 얼마 전 회사 내 호칭에 변화가 생겼다. 아직 Chris로 불리는 게 어색하다.◇ 어떤 일을 하며 월급을 받고 있는지?C: 앞서 소개했듯 난 iOS 개발자다. 이 글을 읽는 독자분들 중 아이폰으로 ‘잔디’를 사용 중이라면, 필시 내가 개발한 잔디를 이용하고 있는 거다. 마음이 조금 아프지만 기획에 대한 관심으로 지난 겨울 잠시 PM 팀으로 외도했었다. 하지만 결국 내 마음의 고향, iOS 개발로 돌아왔다.◇ PM팀으로 외도를 했던 이유가 궁금하다C: 기획이라는 업무에 관심이 많았다. 개발을 하다 보니 자연스레 기획에도 관심을 갖게 되었다. 한 번쯤 해보고 싶었던 일이었기 때문에 롤이 주어졌을 때 정말 재미있게 일했다.하지만 PM 일을 직접 해보니 마냥 재미있기만 하지는 않더라. 비즈니스는 물론이고 개발자와 디자이너의 의견을 수렴해 조율까지 해야 하는데 모두의 의견을 100% 반영할 수 없으니 여간 괴로운 일이 아니더라. 기획자의 길이 쉽지 않다는 것을 깨닫게 되었다.그리고 PM의 업무라는 게 쉽게 눈에 띄지 않는 일이다. 제품이 아무리 잘 나와도 기획자에게 ‘기획 참 잘나왔어요’ 라고 말하는 경우를 많이 접하진 않았을 거다. 여러분 주위에 기획자를 만나게 되면 ‘고생이 많으십니다’라고 응원 한마디 해줬으면 좋겠다.◇ iOS 개발자로 컴백한 이유는 무엇인가? 향간의 소문엔 코딩이 그리워 개발자로 돌아갔는 소문이 있다C: 회사 측에서 기획보다는 iOS 개발을 다시 맡아주면 좋겠다는 이야기를 들었다. 사실 별다른 고민 없이 제안을 받아들였다. 아무래도 초기부터 개발한 자식 같은 iOS가 늘 머리 한 구석에 있었다. 물론, 잔디를 사랑하는 마음도 크게 한 몫 했다. 결코 어필하고 싶어 이런 멘트를 남기는 게 아니다.◇ 보여주기 멘트인 것 같지만 감동 받았다. 그렇다면 Chris에게 잔디 iOS란 무엇인지 조금 더 말해달라C: 나의 분신이다.  iOS는 곧 Chris다. 아무것도 없는 백지상태에서 지금에 이르기까지 수많은 과정이 있었고, 그 과정의 중심엔 언제나 내가 있었다. iOS는 분신이라는 단어 외엔 표현할 방법이 없다. 오바가 아니라 사무실 어딘가에서 누군가 ‘iOS’ 라고 속삭이면 몸이 반응한다. iOS에 대한 이야기는 곧 나에 대한 이야기와 마찬가지이니까.내가 곧 잔디 iOS이자, 잔디 iOS가 곧 나이다.그만큼 애착을 갖고 개발 업무에 임하고 있다.◇ 멘트가 찰지다. 듣기론 PM 팀의 데니스와 특별한 인연이 있다고 하는데?C: 동아리 이야기를 하는 것 같다. 사회에 나오기 전 연합 동아리 활동을 한 적이 있는데, 데니스가 그 동아리 후배다. 기수 차이가 많이 나 직접적으로 알던 사이는 아니었다. 내가 동아리에 잔디 채용 공고를 공유해 데니스가 합류하게 되었다. 특별한 인연이라면 특별하다고 볼 수 있다.◇ 어떤 동아리인지 궁금하다SOPT라는 연합 동아리로 선배들이 후배들에게 개발/디자인 등에 대해 강의하는  동아리다. 당시 나는 학년 차가 조금 되어 수업을 듣기보단 가르치는 역할을 맡았어야 했는데, 매주 시간을 내어 수업을 준비할 자신이 없어 디자인 수업을 들었다.◇ 잔디 1호 사원은 역시 남다른 것 같다. 디자인 수업은 어땠는지?C: 그 수업을 통해 내가 디자인에 소질이 없다는 사실을 깨닫게 되었다. 그림을 그리면 늘 내가 생각한 것과는 다른 결과물이 나오더라.◇ 그런데 정말 잔디 1호 사원인가?C: 말 그대로 1호 사원이다. 회사가 법인으로 등록하기 이전부터 함께 했다. 얼마 전 잔디 2주년 파티가 있었다. 나는 입사한 지 2년이 넘었다. 격세지감을 느낀다. 처음 잔디에 들어왔을 때, 나를 제외한 모든 사람이 C-Level이었다. 그리고 나서 개발자, 디자이너가 순차적으로 들어왔던 걸로 기억한다.◇ 법인 설립도 전에 잔디를 어떻게 알고 지원했나?C: 제대를 3개월 앞둔 군인 시절, 아이폰 개발자를 찾는 연락을 받았다. 그렇지 않아도 제대하고 바로 개발 경험을 쌓을 수 있었으면 좋겠다고 생각했다. 솔직히 말하면 그 당시엔 잔디가 어떤 회사인지 탐색이나 해보자는 생각에 멤버들을 만났다.◇ 그럼 사람들을 만나고 입사를 결심한 건가?C: 당시에는 아무것도 없었다. 잔디라고 말은 해도 유형적인 형태의 무언가가 존재하지 않았다. 멋진 사람들과 함께하며 일을 배울 수 있을 것 같다는 생각에 합류했다.◇ 마음가짐이 남다를 것 같다C: 내 스스로 창립 멤버라 생각하고 있다. 어찌 되었든 잔디가 지금의 모습을 갖추기 전부터 함께 해서인지 애착이 남다르다. 첫 직장이라는 사실도 한 몫하고 있고.◇ 그때로 다시 돌아가면 똑같은 결정을 할 것인가?C: 물론이다. 솔직히 좋은 결정이었다고 생각한다. 잔디가 이렇게 잘 성장하고 있고, 지금은 누구보다도 잔디의 성공을 확신한다.◇ 마지막 질문이다. 여름 휴가 계획은?C: 스타트업인이 휴가라니? 하하. 농담이다. 아쉽지만 아직 여름 휴가 계획이 없다. 생기면 알려주겠다.◇ 맛있는 인터뷰의 공식 마무리! 다음 인터뷰이에게 묻고 싶은 질문이 있다면?C: 꼭 물어봐 주셨으면 한다. “잔디에서 이루고 싶은 꿈이 있다면?”을 물어봐 달라.#토스랩 #잔디 #JANDI #iOS #개발자 #모바일개발자 #앱개발자 #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화 #사내문화
조회수 1121

앱 어트리뷰션 가이드 - 포스트백

어떤 광고에 의한 앱 설치인지를 정확하게 식별하기 위한 네 가지 방법을 지난 글에서 살펴 보았습니다. 지금까지의 가이드를 꾸준히 따라오셨다면 아래 내용과 절차에 대해서 충분히 이해할 수 있을 것입니다.어트리뷰션 툴은 트래킹 URL을 통해 광고 클릭을 감지하고 데이터를 수집트래킹 URL을 클릭한 유저는 트래커 서버를 경유한 뒤 랜딩 페이지로 이동유저가 랜딩 페이지에서 다운로드한 앱을 실행하면 앱 안의 분석 SDK가 데이터를 수집어트리뷰션 툴은 클릭에서 수집한 데이터와 실행에서 수집한 데이터를 대조하여 어트리뷰트이런 과정을 거쳐 인스톨이 성공적으로 어트리뷰트 되면 관리자 화면에서 수치 확인할 수 있게 됩니다. 대시보드에 수치가 나온다고 해서 어트리뷰션 툴의 역할이 끝난 것이 아닙니다. 더욱 중요한 작업인 포스트백(Postback)이 남아있기 때문입니다. 캠페인의 목적을 효율적으로 달성하기 위해서는 광고를 최적화해야 하는데, 이 최적화를 위해서는 포스트백이 필수라는 점에서 포스트백의 의미는 남다릅니다. 포스트백의 역할포스트백은 어트리뷰션 툴이 분석한 데이터를 매체사에 전송해, 매체사로 하여금 자기 매체로부터 얼마만큼의 광고 성과가 발생했는지를 알게 하는 프로세스를 말합니다. 예를 들어 오늘 하루에 A 매체로부터 100건의 앱 설치가 발생했다고 가정해 보겠습니다. 어트리뷰션 툴은 이런 분석 결과를 광고주 대시보드에 반영할 뿐만 아니라 A 매체에게도 전송합니다. 앱이 100건 설치되었다는 것 이외에도 앱이 설치된 단말기의 식별자, Click ID, 단말기 정보 등이 함께 전송됩니다.A 매체는 이렇게 쌓이는 데이터를 바탕으로 광고 효율을 최적화 할 수 있습니다. 가장 기본적으로는 단말기 식별자를 이용해 어떤 단말기에 이미 앱이 설치 되었는지를 알 수 있는데, 이미 앱을 설치한 유저에게는 광고를 더 이상 내보내지 않음으로써 광고 효율을 높입니다. 그리고 포스트백 데이터를 통해 어떤 시간대, 소재, 지면, 타겟 등이 성과가 높은지도 알 수 있습니다. 높은 성과를 기록한 방법으로 광고를 최적화 할 수 있게 되는 것이지요.이와 같이 포스트백은 광고로 인한 성과 데이터를 매체사에 전송함으로써 광고의 효율성을 높이는 역할을 합니다. 매체와 어트리뷰션 툴은 포스트백으로 연결된 애드테크 생태계 안에서 최적의 광고 효율을 달성하기 위해 협업하는 파트너 관계라고 할 수 있습니다. 포스트백 연동위 내용에서 알 수 있듯이 어트리뷰션 툴과 포스트백 연동이 되어있는 매체를 활용하면 간편하면서도 정교하게 광고 최적화가 이루어집니다. 이런 장점 때문에 어트리뷰션 툴과 매체 모두 포스트백 연동에 적극적입니다. 연동이 되어 있어야 광고주에게 더 나은 성과를 제시할 수 있기 때문입니다.포스트백은 어트리뷰션사의 서버와 매체사의 서버가 직접적으로 통신하는 서버 투 서버(Server to Server, S2S) 방식을 사용합니다. 즉 성공적으로 어트리뷰션을 끝마친 데이터는, 별도의 수작업 없이 어트리뷰션사의 서버에서 매체사의 서버로 자동 전송된다는 의미입니다. 따라서 툴을 사용하는 광고주나 광고를 최적화하는 매체사 담당자 모두, 포스트백에는 신경 쓸 필요 없이 핵심 업무에만 몰두할 수 있습니다.어트리뷰션사와 매체사가 포스트백 연동을 시작하면 우선 데이터를 주고받기 위한 연동 규격을 확정합니다. 연동 규격에는 전송할 이벤트 종류(앱 설치, 실행, 상품 조회, 주문, 구매 등), 형식(사용할 파라미터의 이름), 최종 전송 위치(Endpoint URL) 등이 포함됩니다. 결국 어떤 데이터를 어떤 형식으로 어느 위치에 전송하는지를 정의하는 것으로 이해하면 좋습니다. 포스트백 예시포스트백 URL은 다수의 파라미터로 구성되는데, 각 파라미터에는 누가 어떤 캠페인을 통해 얼마만큼의 전환성과를 기록했는지에 대한 값들이 포함되어 있습니다. 광고 트래킹에 사용하는 트래킹 URL과 구조적으로 유사합니다.http://api.example-media.com/app_event_track/receive_postback?tracker_id=wisetracker&action=install&ios_ifa=idfa &my_campaign=cpi_0001Ⓢ_version=12&language=kr&device_model=iphone_8_plus위 URL은 example media라는 가상의 매체로 보내는 포스트백 URL 입니다. 역시 트래킹 URL과 동일하게 앰퍼샌드(Ampersand, &)로 각각의 파라미터를 구분합니다. 각 파라미터는 데이터의 종류와 해당 데이터의 값을 포함하는데, 위의 URL에 있는 ‘os_version=12’ 파라미터를 예로 들면 12 버전의 OS를 사용한다는 것을 의미하게 됩니다. 전체 URL을 해석해보면 cpi_0001이라는 캠페인을 통해서 iOS 12 버전이 설치된 iPhone 8+를 사용하는 한국인 유저가 앱을 설치했다는 것을 매체로 포스트백 한 것이 됩니다.앞서 말했듯이 매체는 포스트백 받은 데이터를 기반으로 광고를 최적화합니다. 여기에서 매우 의미 있는 사실을 발견할 수 있는데, 어트리뷰션 툴의 기능이 뛰어나서 더 많은 데이터를 트래킹 할 수 있고, 다양한 데이터가 넘어와도 매체가 그것을 다룰 수 있는 역량이 충분하다면 광고 성과가 더 나은 수준으로 최적화 될 것이라는 점입니다. 어트리뷰션 툴을 선택하고 매체와 툴의 상성을 판단해야 할 때 이 점을 생각해볼 필요가 있을 것입니다. 포스트백의 한계포스트백만 잘 활용하더라도 매체가 광고를 최적화할 수 있는 방법이 다양해지고 최적화 수준이 향상됩니다. 하지만 다음과 같은 이유 때문에 기존의 포스트백 방식으로는 완벽한 수준의 최적화는 어렵습니다.1. 낮은 실시간성데이터가 매체로 포스트백되는 시점은 어트리뷰션이 끝난 이후입니다. 이 말은 유저가 인앱 액션을 발생시킨 시점과 매체가 해당 데이터를 받아보는 시점 사이에는 일정한 시차가 존재한다는 의미입니다. 만약 어트리뷰션 툴이 30분짜리 세션 단위로 데이터를 쌓아 뒀다가 처리한다면, 매체는 최대 30분의 시차를 두고 데이터를 받게 될 것입니다.현 시점에서 대중적이며 발전된 형태의 프로그래매틱 광고는, 흔히 ‘다이나믹 광고’로 불리는 Dynamic Creative Optimization(DCO)입니다. 정해진 한 가지 소재만 사용하지 않고 유저의 현재 상태에 비추어 가장 효과가 좋을 것 같은 소재를 순간적으로 제작해 노출합니다. 이런 유형의 광고가 높은 효과를 거두기 위해서는, 매체가 광고를 보게 되는 유저에 대한 정보를 실시간으로 쌓아놓고 있을 필요가 있습니다.예를 들어 어떤 유저가 광고에 노출 되는 시점에, 매체는 ‘이 유저가 어제는 앱을 설치 했고 오늘은 몇가지 상품을 조회 했으니, 지금은 관련 상품의 프로모션을 노출하는 것이 좋겠어’라는 판단을 할 수 있어야 합니다. 매체는 이런 유저 정보를 어트리뷰션 툴로부터 포스트백 받는데, 포스트백은 실시간이 아니므로 DCO가 잘 동작하는데 필요한 수준으로는 정보를 쌓지 못해서 광고의 기대효과가 감소하게 됩니다.2. 매체 숫자에 비례하는 비효율성오늘 100개의 앱이 설치 되었는데 그중 20개가 A 매체의 광고를 통해서 발생 했다고 가정해 보겠습니다. 이런 경우 어트리뷰션 툴은 ’20개 앱 설치’에 대한 데이터를 ‘A 매체에’ 포스트백 합니다. 문제될 것이 없어 보이지만, 최적화 관점에서 생각해보면 그냥 넘어갈 수 없는 치명적인 문제가 있습니다. 바로 나머지 80개의 앱 설치에 대한 대응이 문제입니다.이 80개는 분명히 앱이 설치된 수치입니다. 그러나 A 매체에게는 그렇지 않습니다. A 매체는 20개의 앱 설치에 대해서만 알고 있기 때문에, 이 20개에 해당하는 단말기 외의 모든 단말기는 여전히 타겟팅 대상입니다. 여기에는 A 매체가 모르고 있는 80개의 단말기도 포함되겠지요.매체가 늘어나면 어떻게 될까요? 3개의 매체를 동시에 운영한다고 생각해 봅시다. 오늘 앱이 100개 설치 되었는데 A, B, C 각 매체를 통해 20개씩, 그리고 자연유입으로 40개가 설치 되었다고 가정합니다. 이렇게 되면 각 매체들은 자기 매체를 통한 20개의 설치 데이터만 포스트백 받게 됩니다. 세 매체 모두 나머지 80개의 디바이스는 여전히 타겟팅 대상으로 삼게 되겠지요. 매체 숫자가 증가할수록 비효율성도 늘어나는 결과로 이어집니다. 리얼타임 포스트백위에서 언급한 포스트백의 한계를 보완한 것이 리얼타임 포스트백입니다. 유저의 행동을 실시간으로 트래킹 하며, 그렇게 발생한 데이터를 즉시 매체로 전송합니다. 유저가 어떤 행동을 할 때마다 어트리뷰션 툴은 그 데이터를 매체로 전송하고, 매체는 특정 유저에 대한 행동 데이터를 시계열로 쌓아 나갑니다. 결과적으로 매체는 각 유저에 대한 입체적인 정보를 확보하게 되며 이를 바탕으로 최적의 광고를 내보냅니다.또한 특정 매체에게만 포스트백 함으로써 생기는 비효율도 더 이상 발생하지 않습니다. 예를 들어 세 가지 매체를 동시에 운영 중이라면, 앱에서 발생하는 모든 유저 이벤트 데이터를 이 세 매체에 동시에 실시간으로 포스트백 할 수 있습니다. 결과적으로 운영 중인 모든 매체가 동일하게 전체 이벤트 데이터를 확보하게 되면서 기존보다 높은 수준의 효율 최적화가 가능해집니다.그리고 리얼타임 포스트백을 응용하면 기업의 데이터 시스템으로 직접 데이터를 전송할 수 있습니다. 마케팅 부서가 사용하는 BI, 전사 단위의 CRM 또는 DW 등에 트래킹 데이터를 보내는 것이 가능합니다. 이렇게 개별 고객의 모바일 행태에 관한 종합적인 데이터로, 기업은 데스크탑, 모바일, 오프라인 등의 모든 고객 접점에서 개인화된 고객 경험을 일관적으로 제공할 수 있는 기초를 마련하게 되는 것입니다.
조회수 6878

안드로이드 앱의 Persistent data를 제대로 암호화해 보자! (1/2)

들어가기오늘 소개해드릴 글은 안드로이드에서 좀 더 안전하게 파일 시스템에 데이터를 저장하는 방식에 관한 내용입니다. 이 글은 중급 이상, 상급 이하 안드로이드 개발자를 대상으로 작성했으며 완독하는데 약 20분 정도가 필요합니다. 최대한 쉽게 쓰려고 노력했습니다만 이 글이 잘 이해되지 않는 독자분들은 이 문서 말미의 더 보기 섹션에 링크된 외부 문서들을 읽어보시는 편이 좋습니다.1부에서는 Shared preferences 에 저장하는 데이터를 암호화 하는 방식에 대해 다루고 있으며, 2부에서는 데이터베이스를 암호화 하는 방식에 대해 다루겠습니다.내 앱의 데이터, 과연 유출로부터 안전할까?안드로이드 공식 사이트의 저장소 개발 가이드 문서는 데이터를 저장하는 여러 가지 방법을 소개하고 있습니다. 그 중 ‘내부 저장소’ 의 다음 특징은 눈여겨볼 만 합니다.기기의 내부 저장소에 파일을 직접 저장할 수 있습니다. 기본적으로, 내부 저장소에 저장된 파일은 해당 애플리케이션의 전용 파일이며 다른 애플리케이션(및 사용자)은 해당 파일에 액세스할 수 없습니다. 사용자가 애플리케이션을 제거하면 해당 캐시 파일은 제거됩니다.즉, 다른 애플리케이션에 노출하면 곤란한 중요한 정보들은 내부 저장소에 담아두면 안전하다고 할 수 있습니다. 하지만, 정말일까요? 다음 예제를 이용해 내부 저장소에 저장한 사용자의 중요한 정보를 어떻게 탈취하는지 알아보겠습니다. 예제 앱은 충성 사용자에게 보상하기 위해 사용자가 앱을 몇 번 실행시켰는지를 기록합니다.class AppRanTimesRecordingActivity : AppCompatActivity() {    privateval sharedPrefs by lazy {        // Shared preferences 는 Internal storage 에 저장된다.        getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE)    }    private var appRanCount = 0    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        accessToSharedPrefs()        appRanCount++        Toast.makeText(applicationContext, "App has ran $appRanCount times!!", Toast.LENGTH_LONG).show()        finish()    }    override fun onDestroy() {        saveSharedPrefs()        super.onDestroy()    }    private fun accessToSharedPrefs() {         sharedPrefs.run { appRanCount = getInt(KEY_APP_RAN_COUNT, 0) }    }    private fun saveSharedPrefs() {        sharedPrefs.edit().run({            putInt(KEY_APP_RAN_COUNT, appRanCount)            apply()        })    }    companion object {        private const val SHARED_PREF_NAME = "MySecureSettings"        private const val KEY_APP_RAN_COUNT = "appRanCount"    } } [리스트 1] MODE_PRIVATE 로 보호하는 SharedPreferences 사용앱의 데이터는 /data/data/com.securecompany.secureapp 에 저장되어 있습니다만, 앱을 release 모드로 빌드하면 adb 명령으로도 볼 수 없으니 안전하다고 할 수 있을 겁니다. 실제로 adb 명령을 이용해 저장한 파일을 보려고 시도하면 아래와 같은 오류가 발생합니다.$ adb shell "run-as com.securecompany.secureapp ls -al /data/data/com.securecompany.secureapp" run-as: Package 'com.securecompany.secureapp' is not debuggable 그렇다면 디버거로도 볼 수 없으니 내부 저장소에 저장한 데이터가 안전하다고 말 할 수 있을까요?그렇지 않습니다! 안드로이드는 루팅이 매우 손쉬운 운영체제기 때문에 설령 release 모드로 빌드한 앱이라 하더라도 adb 명령을 이용해 모두 접근할 수 있습니다. 루팅한 기기에서 우리가 제작한 SecureApp의 내부 저장소 구조를 아래와 같이 확인할 수 있습니다.$ adb shell "sudo ls -al /data/data/com.securecompany.secureapp" drwxrwx--x u0_a431 u0_a431 2018-06-04 14:15 cache drwxrwx--x u0_a431  u0_a431           2018-06-04 14:15 code_cache drwxrwx--x u0_a431  u0_a431           2018-06-04 14:15 shared_prefs $ adb shell "sudo ls -al /data/data/com.securecompany.secureapp/shared_prefs" -rw-rw---- u0_a431 u0_a431 111 2018-06-04 14:15 MySecureSettings.xml $ adb shell "sudo cat /data/data/com.securecompany.secureapp/shared_prefs/MySecureSettings.xml" <?xml version='1.0' encoding='utf-8' standalone='yes' ?>     별다른 테크닉이 없더라도 인터넷에 널린 수많은 루팅 방법으로 기기를 루팅하면 제아무리 내부 저장소에 저장한 데이터라도 이렇게 손 쉽게 유출이 가능하다는 것을 확인할 수 있습니다. 이런 방식의 보안 기법은 불투명성에 의지한 보안이라고 하여, 방법을 전혀 모르는 공격자에게는 유효한 방식입니다만 이 글을 읽는 독자 수준의 개발자라면 취약점을 금세 파악할 수 있다는 단점이 있습니다.그렇다면 암호화를 적용하면 되지 않을까?맞습니다. 어차피 유출을 피할 수 없다면, 데이터를 암호화하면 됩니다. 그래서 암호화 로직으로 데이터를 암호화해 보도록 하겠습니다. 이 코드는 AES / CBC / PKCS5Padding 방식을 사용해 주어진 데이터를 암호화합니다. 각 용어를 간략하게 설명하자면 다음과 같습니다.AES: 미국에서 개발된 블럭 암호화 방식으로 좀 더 나은 보안성을 가진다. 데이터를 일정 크기(블럭)로 나눠 암호화하며 보통 128비트, 192비트, 256비트 단위로 암호화한다. 키의 길이는 암호화 방식에서 사용할 블럭 크기와 완전히 같아야 하는 특징이 있다.CBC: 블럭을 회전시키는 방식을 말한다. 최초로 소개된 블럭 회전 알고리즘인 ECB(Electronic Code Book) 의 보안 취약점을 해결하기 위한 방식으로 같은 데이터 입력에 대해 완전히 다른 결과를 내므로 보안성이 좀 더 높다. 하지만 CBC 방식을 위해서는 초기화 벡터(Initialisation Vector, IV)를 반드시 사용해야 한다.IV : CBC 블럭 회전방식에 사용하는 초기화 값. 암호화할 데이터와 키가 변하지 않더라도 이 값만 바뀌면 결과가 크게 달라진다. 암호화 key 와는 전혀 무관한 값이기 때문에 외부에 노출되더라도 보안 위협은 적은 편이며 암호화 요청마다 다른 IV 를 사용해 보안성을 높일 수 있다. 다만, 키 길이와 일치하는 길이의 IV 가 필요하다.PKCS5Padding: 블럭 암호화 방식은 입력 데이터의 길이가 블럭의 길이 혹은 그 배수와 일치해야 하는 문제점이 있다. 입력 데이터가 블럭 길이보다 짧을 경우 원칙적으로 암호화가 불가능하다. 이런 어이없는 단점을 보완하기 위한 방식으로, 입력 데이터를 강제로 블럭 크기만큼 맞춰주는 알고리즘의 일종이다.object AESHelper {    /** 키를 외부에 저장할 경우 유출 위험이 있으니까 소스 코드 내에 숨겨둔다. 길이는 16자여야 한다. */    private const val SECRET_KEY = "HelloWorld!!@#$%"    private const val CIPHER_TRANSFORMATION = "AES/CBC/PKCS5PADDING"    fun encrypt(plainText: String, initVector: String): String {        val cipherText = try {            with(Cipher.getInstance(CIPHER_TRANSFORMATION), {                init(Cipher.ENCRYPT_MODE,                         SecretKeySpec(SECRET_KEY.toByteArray(), "AES"),                         IvParameterSpec(initVector.toByteArray()))                return@with doFinal(plainText.toByteArray())            })        } catch (e: GeneralSecurityException) {            // 특정 국가 혹은 저사양 기기에서는 알고리즘 지원하지 않을 수 있음. 특히 중국/인도 대상 기기            e.printStackTrace()            ""        }        return Base64.encodeToString(cipherText, Base64.DEFAULT)    }    fun decrypt(base64CipherText: String, initVector: String): String {        val plainTextBytes = try {            with(Cipher.getInstance(CIPHER_TRANSFORMATION), {                init(Cipher.DECRYPT_MODE,                        SecretKeySpec(SECRET_KEY.toByteArray(), "AES"),                        IvParameterSpec(initVector.toByteArray()))                val cipherText = Base64.decode(base64CipherText, Base64.DEFAULT)                return@with doFinal(cipherText)            })        } catch (e: GeneralSecurityException) {            // 특정 국가 혹은 저사양 기기에서는 알고리즘 지원하지 않을 수 있음. 특히 중국/인도 대상 기기            e.printStackTrace()            ByteArray(0, { i -> 0 })        }        return String(plainTextBytes)    } } [리스트 2] 간단히 구현한 AES128 암호 및 해독 로직그리고 위의 AESHelper 를 이용해 SharedPreference 에 들어갈 자료를 암호화해 봅시다.class MainActivity : AppCompatActivity() {    privateval iv by lazy { lazyInitIv() }    privateval sharedPrefs by lazy {        getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE)    }    private var appRanCount = 0    override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main) // Shared preferences 는 Internal storage 에 저장된다. accessToSharedPrefs()        appRanCount++ Toast.makeText(applicationContext, "App has ran $appRanCount times!!", Toast.LENGTH_LONG).show()    }    override fun onDestroy() {        saveSharedPrefs()        super.onDestroy()    }    private fun accessToSharedPrefs() {        sharedPrefs.run({            val appRanCntEncrypted = getString(KEY_APP_RAN_COUNT, "")            if (appRanCntEncrypted.isEmpty()) {                return@run            }            appRanCount = AESHelper.decrypt(appRanCntEncrypted, iv).toInt()        })    }    private fun saveSharedPrefs() {        sharedPrefs.edit().run({            putString(KEY_APP_RAN_COUNT, AESHelper.encrypt(appRanCount.toString(), iv))             apply()        })    }    private fun lazyInitIv(): String {        return sharedPrefs.run({            var iv = getString(KEY_SESSION_IV, "")            if (iv.isEmpty()) {                // 2001년 - 2286년 동안에는 항상 13자리로 나타난다. 그러므로 16자리 IV가 보장된다.                iv = "${System.currentTimeMillis()}000"                edit()                    .putString(KEY_SESSION_IV, iv)                    .apply()            }            return@run iv        })    }    companion object {        private const val SHARED_PREF_NAME = "MySecureSettings"        private const val KEY_APP_RAN_COUNT = "appRanCount"        private const val KEY_SESSION_IV    = "ivForSession"    } } [리스트 3] 리스트 2를 활용해 데이터를 암호화해 저장.저장한 SharedPreferences 를 확인해 보면 다음과 같은 결과를 얻을 수 있습니다.$ adb shell "sudo cat /data/data/com.securecompany.secureapp/shared_prefs/MySecureSettings.xml" <?xml version='1.0' encoding='utf-8' standalone='yes' ?>    1528095873216000    F9dq8ezypMPeUsHpPIUcnQ==     역시 기대대로 암호화되었네요. IV 는 노출돼도 상관없는 정보라고 했으니 괜찮겠죠. 이제 우리 앱의 사용자는 설령 기기를 잃어버리더라도 소중한 정보가 암호화되어 있으니 문제없을 겁니다.라고 생각한다면 오산입니다! 불행히도 안드로이드는 디컴파일이 매우 쉬운 플랫폼이기 때문에 이런 식의 암호화는 사실 그다지 효과가 있지 않습니다. 심지어 IV 가 그대로 노출되어 있기 때문에 공격자에게 큰 힌트가 되었습니다. IV 는 키와는 다른 값이므로 유출되어도 상관없다곤 하지만, 어쨌든 암호화 과정에서 중요하게 다뤄지는 정보임에는 매한가지이므로 사용자에게 굳이 노출할 필요는 없습니다.다소 극단적인 예를 들어 설명했습니다만 요지는 이렇습니다. 어떤 식으로든 우리의 로직 내에서 키를 관리하는 방식으로는 완벽하게 암호화했다고 말할 수 없습니다. AESHelper 소스의 첫 줄에 있는 내용을 다시 한번 살펴봅시다. /** 키를 외부에 저장할 경우 유출 위험이 있으니까 소스 코드내에 숨겨둔다. 길이는 16자여야 한다. */    private const val SECRET_KEY = "HelloWorld!!@#$%" 불행히도 이 소스에 적힌 코멘트는 틀렸습니다. jadx 나 bytecode-viewer 로 획득한 우리 앱의 APK 파일을 디컴파일 해 봅시다.@Metadata(   mv = {1, 1, 10},   bv = {1, 0, 2},   k = 1,   d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0002\b\u0007\bÆ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\u0016\u0010\u0006\u001a\u00020\u00042\u0006\u0010\u0007\u001a\u00020\u00042\u0006\u0010\b\u001a\u00020\u0004J\u0016\u0010\t\u001a\u00020\u00042\u0006\u0010\n\u001a\u00020\u00042\u0006\u0010\b\u001a\u00020\u0004R\u000e\u0010\u0003\u001a\u00020\u0004X\u0082T¢\u0006\u0002\n\u0000R\u000e\u0010\u0005\u001a\u00020\u0004X\u0082T¢\u0006\u0002\n\u0000¨\u0006\u000b"},   d2 = {"Lcom/securecompany/secureapp/AESHelper;", "", "()V", "CIPHER_TRANSFORMATION", "", "SECRET_KEY", "decrypt", "base64CipherText", "initVector", "encrypt", "plainText", "production sources for module app"} ) public final class zzw {   private static final String A = "HelloWorld!!@#$%";   private static final String B = "AES/CBC/PKCS5PADDING";   public static final zzw INSTANCE; // ... } [리스트 4] 리스트 2를 디컴파일한 결과. 키가 그대로 노출됨을 확인할 수 있다.이름은 난독화했지만 문자열이 그대로 노출된 상태이므로 공격자가 단서를 찾기란 매우 쉬울 겁니다. 더군다나 원본 소스의 내용이 짧으니 아무리 난독화 했더라도 내용을 파악하기란 그리 어렵지도 않을 것이고요.여기서 일부 독자분들은 ‘그럼 이 로직을 JNI 로 만들면 되지 않냐?’ 라고 반문하실 수도 있습니다. 하지만 JNI 로 컴파일한 .so 파일조차 objdump 같은 명령으로 내용을 다 들춰볼 수 있습니다. 특히 Kotlin 구현처럼 static const 형태로 소스코드에 적어두면 공격자 입장에서는 .data 세그먼트 만 확인하면 되죠. 그렇다면 .data 세그먼트를 회피하기 위해 로직으로 키를 생성하도록 작성했다고 해 봅시다. 좀 더 난이도가 올라가긴 하겠지만 숙련된 공격자라면 .text 세그먼트를 이 잡듯이 뒤져 실마리를 찾을 수 있을 겁니다. 물론 이 정도 수준의 역공학을 할 수 있는 사람의 수는 적지만, 아예 없지는 않으니 문제는 여전히 남아 있습니다. 한번 확인해 볼까요?static const char* SECRET_KEY = "HelloWorld!!@#$%" void encrypt(char* plainText, char* initVector, char[] result) {    char* now = malloc(sizeof(char) * 13);    itoa(&time(NULL), now, 10);    char* iv = malloc(sizeof(char) * 16);    strcpy(iv, *now);    strncpy(iv, "000", 3);   const struct AES_ctx aesCtx = { .RoundKey = 16, .Iv = *iv }    AES_init_ctx(aesCtx, SECRET_KEY);    // ... } [리스트 5] C 로 작성한 AESHelper 로직(일부).$ objdump "mySecureApp/build/obj/local/armeabi-v7a/libAESHelper.so" section .data    # 의미 불명의 문자열 발견! 혹시 key 는 아닐까???    00000200 db "HelloWorld!!@#$%", 16    00000210 equ $ - 00000200 section .text    global _start    _start:    # ...        mov rsi, 00000200  # 이 명령 앞뒤로 조사해보면 저 문자열의 용도를 파악할 수 있다.        mov rdx, 00000210        syscall    # ... [리스트 6] ARM EABI V7용으로 컴파일한 바이너리를 디스어셈블 한 결과.즉, 어떤 방식으로 구현하건 암호화에 쓸 키를 소스 코드에 박아두는 것은 그다지 현명한 선택이 아니란 것입니다. 더군다나 안드로이드에서 앱을 만든다는 것은 내 로직이 공격자에게 낱낱이 까발려져 있다는 것을 의미합니다. 중요한 데이터를 .text 에 들어가도록 숨기는 것도 가능하긴 하지만, 그런 방식은 나중에 유지보수하는 사람에게도 골치 아플 겁니다. 소스 코드가 그만큼 어려워질 테니까요. 그리고 그런 방식으로 정보를 숨긴다 하더라도 최정예 크래커 집단, 예를 들어 국정원 같은 수준이라면 그 정도는 큰 어려움 없이 파훼 가능합니다.꿈도 희망도 없는 상황처럼 보입니다만 다행히도 안드로이드는 이런 문제를 해결해 주는 KeyStore API 를 제공하고 있습니다.KeyStore 를 도입하자Android KeyStore 시스템 문서의 첫 머리에 적혀있는 글은 다음과 같습니다.The Android Keystore system lets you store cryptographic keys in a container to make it more difficult to extract from the device. Once keys are in the keystore, they can be used for cryptographic operations with the key material remaining non-exportable. Moreover, it offers facilities to restrict when and how keys can be used, such as requiring user authentication for key use or restricting keys to be used only in certain cryptographic modes.Android Keystore 시스템은 암호화 키를 ‘컨테이너’ 에 저장하도록 해 기기에서 키를 추출하기 더욱 어렵게 해 줍니다. 일단 키를 Keystore 에 저장하면 키를 추출 불가능한 상태로 암호화에 사용할 수 있습니다. 또한 Keystore 는 키 사용 시기와 방법(예: 사용자 인증 등의 상황)을 통제하고, 특정 암호화에서만 키를 사용하도록 허용하는 기능도 제공합니다.좀더 쉽게 다시 설명하자면, 암호화에 쓸 키를 소스코드 내부 어딘가가 아니라, 시스템만이 접근 가능한 어딘가(컨테이너)에 저장해 문제를 해결해 준다는 뜻입니다. 여기서 키가 저장되는 ‘컨테이너’ 는 기기별로 구현이 다를 수 있습니다만 핵심은 사용자 어플리케이션이 그 영역에 접근할 수 없다는 점입니다. 이 때문에 KeyStore 를 사용해서 키를 안전하게 저장할 수 있습니다.또한 앱에서 등록한 KeyStore 는 앱 삭제 시 함께 제거되므로, 똑같은 package name 으로 앱을 덮어씌우는 등의 공격으로 키를 유출할 수도 없습니다. 이는 여러 앱에서 공유하는 KeyChain 과는 다른 특성이며 기능 활성화를 위한 별도의 입력이 필요 없다는 장점이 있습니다.[그림 1] KeyChain API 사용시 나타나는 시스템 다이얼로그. 어려운 용어가 난무하는 등 사용자 경험이 그다지 좋다고 말할 수 없다.반면 Android M 이상에서는, KeyGenParameterSpec.Builder#setUserAuthenticationRequired(boolean) API 로 시스템 다이얼로그의 표시 유무를 제어할 수 있습니다.Secure SharedPreferences 구현하기앞서 설명드렸던 KeyStore 를 사용해 SharedPreferences 의 내용을 암호화하는 로직입니다. 소스 코드의 길이가 꽤 길기에, github gist 링크로 대신합니다. 독자 여러분들을 위해 최대한 쉽고 간단한 형태로 구현했으므로 필요에 맞춰 커스터마이징 하는게 좋습니다.AndroidCipherHelper.kt - KeyStore 에서 생성한 랜덤 패스워드를 이용해 입력받은 문자열을 암호화 하는 로직. IV 설정 등 귀찮은 작업을 피하기 위해 비대칭 암호화 알고리즘을 사용했다. 또한 암호화 및 복호화 과정에서 비대칭키의 Public key 로 암호화하고, Private key 로 해독하도록 구현했다. TEE 를 올바르게 구현한 기기(안드로이드 23 이상 + 메이저 하드웨어 제조사)에서 동작하는 한, 이 데이터의 내용이 유출되더라도 복호화는 오직 이 로직 내부에서만 할 수 있다.SecureSharedPreferences.kt - AndroidCipherHelper 가 문자열 위주로 암호화하므로, 모든 입력값을 문자 형태로 변환 후 입출력한다.결과 확인Secure SharedPreferences 를 실제로 구현한 뒤, 앱의 shared preferences 를 열어보면 아래와 같은 결과가 나타납니다.$ adb shell "run-as com.securecompany.secureapp cat /data/data/com.securecompany.secureapp/shared_prefs/MySecureSettings.xml" <?xml version='1.0' encoding='utf-8' standalone='yes' ?>     oh+XL/vQqAdxNzFEkKVOfcZAkP7jh92tcKpxzM6bbv9iGUk2lR7ayJsR6FZXt3rAKC+4sLVTP1cy e+NpgZ67wjoeBM4maMjXjSkovc8cO8rVVsQLqedJtW3gGOItTTCkjIQGh+TsBDjz8C3IdmNSKqGE GmBwQBoV0QuO+uO6cdPI/Gx816P0kcLmr5xsAy9XUwJeTE9947sYydiztJsgkKxuiGFLJK435pAb UhatjSFse4MpBCugHcLUVg5UXGwQcfbJuuQ/CBcmQmYb3MldNzLfOWtsQiwQJpz0J12fsYlQOBnO UnLVcND+DU17cP+Q4Cjah8VwmiY1a0shMn09Rw==         ozh8dKH+yCRSWoiW0HQtF/bWD7Aw6rfjzklT302AlTOpYmVdEiIfVoTK97bsyK1mXbwN5Qpas82Q dYgnnZl9sfY8pzyXHM0dtm88euB5vgmzljb04LClF3oRZ7Qi5ZRyK90kQ/HN/6EgYvf6zEwR7Ydg 08kJ/bde4Z5lSz+kJ79dHEpE+QAV48U0F0/yp12+xKFRNbaBLBaaWclUNF10jONPKjC3HS/aQozT 1ngQWSKzPq87B0OFExraSPDoLT8zx8ElhTgEtpBRcUwtzmSnhGvgtIUhziFpZBbdvuqAGZ+L5El1 T7H9ipEosN3Aivh/5rz9dntJe3mJvfCFdFITlA==     (Android L 이상이라고 가정할 경우)앱의 개발자조차 키를 알 수 없기 때문에, 파일을 유출하더라도 이를 깨는것은 현재로선 매우 어렵습니다. 즉, 우리 앱은 사용자 데이터를 안전하게 보호하고 있다고 자신 있게 말할 수 있습니다.AndroidKeyStore 파헤쳐보기그렇다면 어떤 방식으로 AndroidKeyStore 가 동작하고, 왜 안전한지 좀더 상세히 살펴보겠습니다.“AndroidKeyStore” 문자열의 중요성Android Keystore system 문서에 따르면 Android Keystore Service 에 접근하기 위해서는 아래와 같이 코드를 작성해야 한다고 합니다. val keyStore = java.security.KeyStore.getInstance("AndroidKeyStore") [리스트 7] Android Keystore 인스턴스 획득 방법여기서 주의할 점은 AndroidKeyStore 라는 문자열입니다. 반드시 정확한 문자열로 입력해야 합니다. 왜냐면 이는 Google 이 안드로이드의 보안 시스템을 Java Cryptography Architecture(JCA) 표준에 맞춰 구현했기 때문에 그렇습니다. 그리고 JCA 표준을 구현하면 JVM 인스턴스(안드로이드도 변형 JVM 의 일종입니다) 내에서 동작하는 모든 로직이 Security 클래스에 등록된 암호화 구현체를 사용할 수 있게 됩니다. 즉, Google 이 컨트롤 할 수 없는 서드파티 로직(우리의 앱 혹은 각종 안드로이드 오픈 소스들)에서도 Android Keystore 를 표준 Java 방식으로 사용할 수 있도록 구현했기에 이런 방식으로 호출해야 하는 겁니다.물론 안드로이드에서는 AIDL 파일을 제공받는 방식 혹은 Context#getSystemService(String) 메소드로 서비스 인스턴스를 획득할 수도 있습니다. 하지만 첫 번째 방식은 바인드된 서비스가 언제든 Kill 될 수 있다는 문제가 있습니다. 그리고 두 방식의 공통적인 문제점은 보안을 사용하는 모든 로직에 if (currentEnvironment == "Android") then... 같은 예외 처리 로직을 넣어줘야 한다는 점입니다. 전 세계 모든 오픈소스 개발자들이 안드로이드로의 포팅을 위해 그런 귀찮은 작업을 해 줘야 하는 일인데.. 그게 가능할까요?“AndroidKeyStore” JCA Provider 등록 과정앞서 AndroidKeyStore 라는 문자열의 중요성을 알아봤습니다. 그렇다면 왜 중요한지도 알아두면 좋겠죠?안드로이드는 linux 기반의 운영체제입니다. 시스템 부팅 직후 실행되는 init.rc 스크립트에서는 /system/bin/app_process 명령을 실행하는데 이 명령은 Android Runtime 위에서 실행되는 Zygote process를 초기화 합니다.Zygote 는 간단하게 설명하자면 안드로이드 앱 실행속도를 향상시키기 위한 일종의 공용 런타임 같은 것입니다. 그리고 앱이 실행되면 Zygote 에 설정된 내용이 사전에 로드되는데, 아까 언급한 초기화 과정 중에 아래와 같은 내용이 있습니다.package com.android.internal.os; /**  * Startup class for the zygote process.  *  * Pre-initializes some classes, and then waits for commands on a UNIX domain  * socket. Based on these commands, forks off child processes that inherit  * the initial state of the VM.  *  * Please see {@link ZygoteConnection.Arguments} for documentation on the  * client protocol.  *  * @hide  */ public class ZygoteInit {    private static final String TAG = "Zygote"; /**     * Register AndroidKeyStoreProvider and warm up the providers that are already registered.      *     * By doing it here we avoid that each app does it when requesting a service from the      * provider for the first time.      */     private static void warmUpJcaProviders() {        // ...        // AndroidKeyStoreProvider.install() manipulates the list of JCA providers to insert        // preferred providers. Note this is not done via security.properties as the JCA providers        // are not on the classpath in the case of, for example, raw dalvikvm runtimes.        AndroidKeyStoreProvider.install();        Log.i(TAG, "Installed AndroidKeyStoreProvider in "                 + (SystemClock.uptimeMillis() - startTime) + "ms.");        // ...    } // ... } [리스트 8] ZygoteInit.java 의 JCA provider 설치 및 속도향상 과정package android.security.keystore; /**  * A provider focused on providing JCA interfaces for the Android KeyStore. *  * @hide  */ public class AndroidKeyStoreProvider extends Provider {    public static final String PROVIDER_NAME = "AndroidKeyStore";    public AndroidKeyStoreProvider() {        super(PROVIDER_NAME, 1.0, "Android KeyStore security provider");        // ...    } /**     * Installs a new instance of this provider.     */    public static void install() {        // ....        Security.addProvider(new AndroidKeyStoreProvider());        // ...    } } [리스트 9] AndroidKeyStoreProvider.java - “AndroidKeyStore” 라는 이름의 JCA provider 등록 과정이런 일련의 과정을 거쳐 시스템에서 등록한 AndroidKeyStore 라는 이름으로 Android KeyStore 서비스에 접근할 수 있게 됩니다. 그리고 안드로이드에서 사용 가능한 KeyStore provider 들의 종류를 뽑아보면, 아래와 같은 결과가 나타납니다.// List all security providers for (Provider p : java.security.Security.getProviders()) {    System.out.println(String.format("== %s ==", p.getName()));    for (Provider.Service s : p.getServices()) {        System.out.println(String.format("- %s", s.getAlgorithm()));    } } output: == AndroidKeyStoreBCWorkaround == == AndroidOpenSSL == ... == AndroidKeyStore ==    - AndroidKeyStore     - HmacSHA256    - AES    ... [리스트 10] 안드로이드 M(6.0.1)에서 지원하는 KeyStore provider 목록(중요) AndroidKeyStore 의 Hardware 레벨 지원 여부 확인다시 Android KeyStore 시스템의 설명으로 돌아가 봅시다.Key material of Android Keystore keys is protected from extraction using two security measures:…Key material may be bound to the secure hardware (e.g., Trusted Execution Environment (TEE), Secure Element (SE)) of the Android device. When this feature is enabled for a key, its key material is never exposed outside of secure hardware.Android KeyStore 는 키의 추출을 방지하기 위해 두 가지 보안 조치를 사용합니다:…키는 안드로이드 기기의 보안 하드웨어(e.g., Trusted Execution Environment (TEE), Secure Element (SE)) 에서만 동작할 수 있습니다. 이 기능이 활성화되면 키는 절대로 보안 하드웨어 밖으로 노출되지 않습니다.그런가보다 싶지만 유심히 읽어봐야 할 대목이 있습니다. 바로 Key material may be bound to … 부분입니다. is 가 아니라 may be 랍니다. 즉, 키가 하드웨어에 저장되지 않을 수도 있다는 사실입니다. 물론 문서에는 언급되어 있지 않지만 안드로이드 시스템 특징상 제조원가 절감을 위해 디바이스 제조사들이 KeyStore 를 소프트웨어로 구현할 수도 있다는 뜻입니다. AOSP 의 Keymaster 구현을 살펴보면 sw_enforced 라는 키워드가 있습니다. 이 keymaster API 를 하드웨어 제조사에서 Keymaster HAL 을 통해 호출하는데 만약 sw_enforced 인스턴스를 넘기는 형태로 구현할 경우 그 하드웨어는 KeyStore 를 지원하지만 (API Level 18), 그것이 반드시 별도의 보안 하드웨어 위에서 동작한다고 말할 수는 없습니다.그리고 “Inside Android Security” 의 저자 Nicolay Elenkov 에 의하면 Android M 이전의 Software-backed KeyStore 는 root 된 기기에서 유출 가능하다고 합니다. 링크의 내용이 다소 길기 때문에 요약하자면 software 기반의 KeyStore 구현은 키를 /data/misc/keystore/user_X(여기서 X 는 uid - 시스템이 앱마다 부여하는 id)에 저장하는데 이 파일의 내용은 keystore-decryptor 로 풀어볼 수 있다고 합니다. 그리고 하드웨어 보안을 지원하지 않는 기기를 확보하지 못해 실 기기에서는 확인할 수 없었습니다만, 에뮬레이터에서 실제로 확인해 본 결과 사실이었습니다.즉, (Android KeyStore)를 쓰더라도 Android M 이전의 기기에서는 우리 앱의 데이터가 100% 안전하다는 장담을 할 수는 없습니다. 아직까지 이 문제를 해결할 방법은 찾지 못했습니다만 아래와 같은 로직으로 ‘이 기기에서의 앱 실행은 안전하지 않을 수 있다’ 같은 안내를 띄우는 정도의 가이드는 개발 가능합니다.val privKey = (keyEntry as KeyStore.PrivateKeyEntry).privateKey val factory = KeyFactory.getInstance(privKey.getAlgorithm(), "AndroidKeyStore") val keyInfo: KeyInfo try {    keyInfo = factory.getKeySpec(privKey, KeyInfo::class.java)    println("HARDWARE-BACKED KEY???? " + keyInfo.isInsideSecureHardware) } catch (e: InvalidKeySpecException) {    // Not an Android KeyStore key. e.printStackTrace() } [리스트 11] KeyInfo API 로 키가 하드웨어로 안전하게 보호되고 있는지를 확인하는 방법다행히도 저희가 보유 중인 개발 시료에서 모두 확인해본 결과 모두 true 로 확인되는 것으로 보아 전 세계의 대중적인 API Level 18 이상인 Android 기기에서는 KeyStore 를 안심하고 사용할 수 있다는 결론을 얻었습니다.다만 API Level L 이전의 Android KeyStore 에는 사용자가 Lock screen 을 설정하지 않을 경우 초기화 된다거나, 직접 확인하진 못했지만 앱을 삭제하더라도 KeyStore 가 완전히 초기화되지 않는 등의 문제도 있다고 하니 유의하는 것이 좋겠습니다.맺으며이상으로 KeyStore 를 사용해 데이터를 암호화하는 방법에 대해 알아봤습니다. 저희 하이퍼커넥트에서도 현재 제작 중인 안드로이드 앱 일부에서 이 기능을 탑재해 고객 여러분들의 데이터를 안전하게 보호하려 노력하고 있습니다. 또한 iOS 도 Secure enclave라 하여 비슷한 기능을 제공하고 있으며 역시 저희 개발진은 이 기술의 적극 도입을 위한 노력을 진행 중입니다.물론 여기 적혀있는 내용들은 Android M(API Level 23) 이후에서만 100% 안전하기 때문에 저희는 그 이전의 안드로이드 버전에서도 데이터를 안전하게 저장할 방법에 대해 지금도 계속 고민 중입니다.또한 눈치 빠른 독자분들은 이 기법을 잘 응용하면 외부 저장소에 저장하는 파일도 암호화 할 수 있다는 사실을 깨달으셨을 겁니다. 이 기법은 요즘 데이터 불법 유출로 몸살을 앓고 있는 웹툰 앱들에도 유용합니다. 임시로 다운로드 한 이미지 파일을 KeyStore 가 생성해주는 키로 암호화해 버리고, WindowManager.LayoutParams#FLAG_SECURE 를 사용해 화면 캡쳐까지도 막아버린다면 대부분의 어설픈 유출 시도는 손쉽게 막으실 수 있으리라 생각합니다.꽤 길었던 1부가 끝났습니다. 2부에서는, 2017년 5월에 소개된 Room을 사용한 안드로이드 데이터베이스를 암호화하는 법에 대해 소개하겠습니다.더 보기Android KeyStore 시스템블록 암호 운용 방식초기화 벡터문자 인코딩AES 암호화RSA 암호화Padding(Cryptography)AOSP KeyStore implementation requirementsHow the Android keystore system can be secureJCA reference guideUnderstanding Android zygote and DalvikVMAndroid InternalsKeystore redesign in Android M - by Nicolay ElenkovAnalysis of Secure Key Storage Solutions on Android#하이퍼커넥트 #개발 #개발자 #안드로이드 #모바일 #앱개발 #PersistentData #개발후기 #인사이트
조회수 24751

KBS 신입사원 입사후기 - [기아영]과연 내가 PD가 될 수 있을까?(시사교양 PD 편)

입사 후기를 쓰기에 앞서 이 글을 읽는 KBS 지원자, 더 넓게는 언론사 입사 준비생들이 가장 궁금해 하는 것이 무엇일지를 고민해봤습니다. 당장 한 달 전까지만 해도 PD 준비생이었던 저를 떠올렸습니다. 당시 입사를 간절히 바랐던 제가 합격자들을 만날 기회를 갖게 된다면 무엇을 묻고 싶을지에 대한 질문을 스스로에게 해보았습니다. 필기 전형에서 어떤 방식으로 글을 써야 합격에 가까워질지, 면접은 어떻게 준비해야하는지에 대해서는 시중에 나와 있는 책들, 관련 강의, 주변의 선배, 스터디원들의 조언 등 저보다 훨씬 더 많은 정보를 가진 준비생들이 대부분일 것이라 생각합니다. 이렇듯 언론사에 입사하기 위해 필요한 노력의 방향을 우리는 분명히 알고 있지만, 그럼에도 자꾸 궁금증이 생기는 이유는 바로 ‘불안함’ 때문일 것입니다. 그 불안함의 원인은 준비가 부족하다는 자기 인식에도 있지만, 노력과는 무관하게 바꿀 수 없는 자신의 정체성으로 인해 서류에서, 또는 면접에서 배척당할 수 있다는 우려에 있다고 생각합니다. 그래서 저는 입사 준비를 하면서 제 자신을 가장 괴롭혔던 것들을 중심으로 이야기를 풀어가 보려고 합니다. 그리고 이것은 준비생들이 가장 궁금해 하지만 결국엔 ‘썰’에 의존할 수밖에 없는 정보들과도 관련 있을 것입니다. 당장 언론사에 입사하는 데는 어떤 수준의 글을 쓸 수 있느냐가 중요한 것 같습니다. 거기에 더해 언론인으로서 세상을 바라보는 관점을 연마하는 연습 역시 자신이 쓸 글의 내용을 결정하고 면접에서 보여줄 나만의 콘텐츠를 구성한다는 점에서 필요합니다. 이처럼 입사에 결정적인 영향을 미치는 것들을 준비하는 것만으로도 시간이 모자랄 때 저는 다른 보통의 지원자들과는 구별되는, 제가 가진 특별한 특성까지도 함께 고민해야 했었습니다. 이는 비단 저뿐만 아니라 주변 준비생들에게도 마찬가지인 문제처럼 보입니다. 언론사 입사 준비생 커뮤니티에 올라 온 글들을 보면 알 수 있었습니다. ‘전공이 방송국 PD와는 전혀 관계없는데 괜찮을까요?’, ‘언론사 인턴 경력이 없는데 문제가 될까요?’, ‘나이가 많습니다. 불리하게 작용할까요?’ 게시판에는 이런 종류의 질문들이 끊이지 않았습니다. 필기, 면접 준비에 대한 질문만큼이나 큰 비중을 차지하지만 만족스런 대답을 찾기란 어려웠습니다. 나이 서른, 언론사 관련 경력無, 기혼자, 아기 엄마 KBS에 최종합격한 작년 2018년의 저를 대표하는 단어들입니다. 결론부터 말하자면, 적어도 KBS 입사하는데 위의 것들은 전혀 문제되지 않았습니다. 저는 대학 때 ‘경영학’을 전공했고 언론학 관련 강의조차도 수강한 적이 없었습니다. 재학시절 보험회사 인턴, 광고대행사 아르바이트를 거쳐 2015년 1월 자동차부품 제조사에 입사해 3년 넘게 근무한 이력을 가졌을 뿐 언론사와 관련된 어떤 경험도 해보지 못했었습니다. 물론 PD에 대한 동경과 선망은 아주 오래전부터 가지고 있었습니다. 하지만 그 일을 하는 사람이 나같이 ‘평범’한 사람일리 없다는 자기 부정을 거듭했던 것 같습니다. 제 또래 대부분이 그렇듯 하고 싶은 걸 다 할 수 있을 만큼 충분한 경제력과 시간을 가지지 못하는 현실 속에서 최상보다는 최적을 선택해야한다는 한계도 작용했습니다. 그래서 리스크가 적고 사례는 많은, 항상 다수가 선택하는 길을 따라왔던 것 같습니다.꾸역꾸역 취업이란 과제까지 완수하고 나니 공허감. 허탈함이 한꺼번에 몰려왔습니다. 이것들을 이겨내기가 힘들었습니다. 자연스레 제 안에서 울리는 목소리에 집중하기 시작했던 것 같습니다. 남들이 그토록 원하는, 일과 여가가 명확히 구분되는 삶이 저에게는 맞지 않았습니다. 주목하지 않으면 자칫 그냥 지나칠 수도 있는 일상의 고민이 제가 하는 일에 도움이 되고, 다시 일로부터 제 삶이 달라지는 그런 일을 하고 싶다는 꿈을 꾸게 됐습니다. 제 자아와 외부조건이 일치되고 그 환경 속에서 ‘나’를 실현할 수 있는 일을 평생 꾸려나가고 싶다는 생각을 하게 됐습니다. 그렇게 아무도, 심지어 제 자신조차도 보지 못하게 꽁꽁 싸매두었던 PD란 꿈의 포장을 하나 둘 벗겨내기 시작한 게 신입 1년 차였던 2015년이었습니다. PD란 직업과 관련해 아무것도 해보지 않은 제가 할 수 있던 건 그저 가장 효율적으로 PD가 되는 길을 알려줄 ‘학원’에 의존하는 방법이었습니다. 시간이 되는 대로 학원에 개설되는 수업을 수강하려 노력했습니다. 그럼에도 2015년부터 2017년까지 3년간 썼던 글이 10편에 불과할 정도로 공부량이 부족했습니다. 언론사 입사를 준비하는 사람이라면 모두 알겠지만 글은 정말 많이 써야 어떻게 써야하는지 미약하게나마 감이 잡히고 늘게 되는 것입니다. 하다못해 일기조차 꾸준히 쓴 경험이 없던 저였기에 절대적인 공부량의 증가가 절실하다 판단했고. 일과 병행하는 건 불가능하다는 결론에 이르게 됐습니다. 결국 2018년 2월 회사를 그만두고 본격적으로 입사 준비를 시작했습니다. PD의 길에만 집중하겠다 결심하고 용기내기까지 무려 3년의 시간이 걸린 셈입니다. 그 사이 저는 결혼을 했고, 회사를 그만둔 2018년 2월에는 뱃속에 3개월 된 아기도 있는 상황이었습니다. 언제나 리스크를 피해 살아왔던 제가 어쩌면 생애 처음으로 가장 많은 악조건들 속에서 새로운 시작을 준비하게 된 것이었습니다.퇴사하고 집중해서 준비하면 금방 어디든 들어갈 수 있을 거라는 생각이 얼마나 낙관적인 기대였는지는 금방 깨닫게 됐습니다. 2018년 KBS 필기 합격 전까지 단 한군데도 필기 합격을 하지 못했었습니다. 첫 필기 통과와 면접 합격에 이어 마침내 시사교양PD란 명찰을 달게 해준 곳이 바로 KBS였습니다. 제 일천한 경험만으로는 모든 언론사가 그렇다 확언할 수 없지만 적어도 KBS만큼은 나이의 많고 적음, 결혼 유무, 경력 유무가 신입으로 입사하는데 전혀 문제가 되지 않았다고 확실히 말씀 드릴 수 있습니다. 서류에서도 관련 질문을 하지 않을뿐더러 면접에서도 역시 그와 직간접적으로 연관된 질문은 전혀 없었습니다. 그렇다면 경력도 없고 본격적인 준비 역시 뒤늦게 시작한 제가 어떻게 KBS에 합격할 수 있었을까를 되짚어 보려 합니다. 뭔가 대단한 비결을 알려드리면 좋겠지만 아쉽게도 특별한 비법은 없었던 것 같습니다. 공부 시간이 늘어남에도 별다른 성과가 보이지 않는 탓에 ‘이러다 아무것도 아닌 사람이 되면 어쩌지’란 불안이 저를 잠식해 갈수록, 노력해도 바꿀 수 없는 조건들에 대해 전전긍긍해하기보다 ‘나라는 존재’와 ‘PD’라는 직업의 연결선을 어떻게 마련할 수 있고 남들에게 증명할 수 있을지를 고민하며 이겨내고자 제 자신과 치열하게 싸웠습니다. 왜 내가 ‘PD’일 수 있는지, 왜 ‘시사교양 PD’인지와 같은 질문들을 스스로에게 던졌습니다. 그리고 그에 대한 대답을 방송 기획으로 어떻게 풀어낼 수 있을지 대답하고자 노력했던 것 같습니다. 필기 전형과 면접 당시에 완전하고 완벽한 답을 내놓지는 못했겠지만 그래도 그 부분에 대한 수없이 많은 고민의 시간이 있었기에 상대가 납득할 만한 수준의 답은 할 수 있었고 최종 합격으로 이어질 수 있었다고 생각합니다. 힘겹게 입사를 하고 나니 이제는 모두들 진짜 시작은 지금부터라고 말을 합니다. KBS 시사교양 PD란 사원증을 다는 데는 성공했지만 그 앞의 수식어는 다시 제가 만들어 가야할 길이고 그렇게 만들어진 그 길이 곧 제 인생이 될 것입니다. 그래서 마지막으로 드리고 싶은 이야기는 PD가 되기 위해 준비하는 여러분도 단지 KBS 시사교양 PD가 되는데 집중하기보다는 어떤 모습의 PD가 될 지와 같은, 합격 너머에 대한 고민 역시 함께 해나가길 바란다는 것입니다. 긴 글 읽어주셔서 감사합니다. 곧 만나 뵙게 되길 기원하겠습니다.#한국방송공사 #KBS #KBS공채 #KBS신입채용 #KBS채용 #입사후기 #구성원인터뷰
조회수 254

컴공생의 AI 스쿨 필기 노트 ③ K-평균 군집화

AI 스쿨 3주차에서는 K-means clustering(K 평균 군집화)에 대해 배웠어요. 이에 대해서 간략하게 정리해볼게요.K-means clustering클러스터링이란 군집화를 의미하는데요, K-means clustering은 비슷한 데이터끼리 묶어주는 머신 러닝 기법이에요. K-means clustering은 비지도학습(Unsupervised learning)의 일종이에요. 비지도 학습이란 데이터와 각각의 데이터가 무엇인지를 설명해주는 라벨이 없는 학습을 말해요. 따라서 우리는 주어진 데이터들을 가장 잘 설명하는 클러스터를 찾아 데이터를 분류할 수 있어요. 아래는 데이터를 2개의 클래스로 군집화한 것을 잘 나타내주는 그래프에요.K-means는 클러스터 내부에 속한 데이터들이 서로 가깝다고 정의해요. 그렇다면 같은 클러스터에 속한 데이터들은 서로 가까이 근접해 있겠죠? K-means는 클러스터의 중심으로부터 가까운 데이터들을 찾아서 묶어주는 알고리즘이에요. 데이터들은 가장 가까운 내부 거리를 가지는 클러스터를 고르게 되는데, 이를 위해서 각각의 클러스터는 중심(프로토타입)이 존재하고 각각의 데이터가 그 중심과 얼마나 가까운지를 Cost로 정의해요.위의 식은 같은 클러스터에 속하는 각각의 점들로부터 그 클러스터의 평균(프로토타입)과의 거리의 합을 제곱한 함수에요. - N : 데이터의 개수- K : 클러스터의 개수- uk : k 번째 클러스터의 중심(프로토타입)- rnk : n 번째 데이터가 k 번째 클러스터에 속하면 1, 속하지 않는다면 0을 가지는 이진 변수우리는 위 식에서 rnk, uk를 구해야 해요. 이때 반드시 잊지 말아야 하는 조건은 각 데이터가 한 개의 클러스터에 할당이 되어야 한다는 것이에요.K-means 알고리즘K-means algorithm을 구하는 방법은 아래와 같이 크게 2단계로 나누어져요. 먼저 uk에 랜덤 값을 사용하여 임의의 초깃값을 설정해요.1. Expectationuk를 고정시키면서 J를 최소화하는  rnk값을 지정해야 하는데,  rnk은 모든 데이터 n에 대해 각각 모든 클러스터 중에서 xn- uk가 가장 작은 클러스터에 할당해요.2. Maximization새롭게 얻어진 rnk를 고정하고 uk는 k 번째 클러스터의 mean을 계산해요. 두 값이 적당한 범위 내로 수렴할 때까지 계산을 반복해요, 위의 두 단계를 각각 E(expectation) 단계와 M(maximization) 단계라 하고, 이 두 단계를 합쳐서 EM 알고리즘이라고 해요.알고리즘 코드로 나타내기그럼 K-means algorithm을 코드로 어떻게 나타내는지 살펴볼게요!Step1. 데이터 만들기np.random.seed(42)digits = load_digits()  data = scale(digits.data)n_samples, n_features = data.shapen_digits = len(np.unique(digits.target))labels = digits.targetx_train, x_test, y_train, y_test = train_test_split(data, labels, test_size=0.25, random_state=42) - digits = load_digits(): load_digits 함수를 사용하면 data와 target이 반환되는데 이 데이터를 scale 함수를 사용하여 전처리해요.- data.shape을 사용하면 n_samples에는 1797, n_feature에는 64가 할당돼요.- n_digits에는 digits의 target의 중복된 값을 제외한 개수를 할당해요.- train_test_split() 함수를 이용하여 train_set과 test_set을 랜덤 시드를 42를 가지는 75:25의 비율로 나눠요.Step2. KMeans model 만들기sklearn 라이브러리를 사용하면 KMeans model을 아주 쉽게 구현할 수 있어요.kmeans = KMeans(init='k-means++', n_clusters=10, random_state=42)clusters = kmeans.fit_predict(x_train)- KMeans 함수를 이용하여 모형은 k-means++를 가지고, cluster는 10개를 가지며 랜덤 시드는 42를 가지는 K-means clustering을 만들어요.- x_train 데이터 셋을 중심으로 클러스터의 중심을 계산하고 각 샘플에 대한 클러스터의 인덱스를 예측할 수 있도록 fit_predict()를 사용해요.Step3. K-means clustering 결과 출력print('Clusters: ', clusters)위와 같이 출력하면 아래와 같은 결과가 나와요.Clusters: [1 3 2 ... 6 6 0]]그래프를 출력하면 아래와 같은 결과를 볼 수 있어요!이번 수업에 배운 K-means clustering의 개념은 1주차와 2주차 수업의 개념에 비해 어렵지 않았던 것 같아요. 이해하기에 큰 문제는 없었지만 코드로 직접 짜려고 하니 막히는 부분이 있어서 고생을 좀 했어요. 저는 과제를 하다가 에러가 나면 구글링을 통해서 에러를 해결하거나 도저히 못하겠다 싶으면 도움 요청을 해요. 목요일에는 조교분들께서 Multiple Regression에 대해 숙명여대에서 수업을 진행해주셨는데요. 1, 2주차에 배운 내용을 복습하고 3주차 수업에서 짧게 살펴본 Multiclassification을 더 자세히 알려주셔서 본 수업 때 이해가 되지 않았던 부분이 해결이 되었습니다! 목요일 수업은 정식 수업이 아닌 보충수업이었기 때문에 소수의 사람들이 강의에 참여했는데요. 시간이 된다면 참석을 꼭 해주시면 굉장히 큰 도움이 될 것 같아요. * 이 글은 AI스쿨 - 인공지능 R&D 실무자 양성과정 3주차 수업에 대해 수강생 최유진님이 작성하신 수업 후기입니다.
조회수 1311

린더를 만들고 있는 이유 2.0

본문은 2017년 8월 작성한 린더를 만들고 있는 이유 1.0 의 후속편입니다.히든트랙이 해결하고자 한 문제히든트랙팀은 '린더'라는 일정을 받아보는 경험을 만들어가고 있습니다. 2018년 4월 기준 약 16만명의 사용자가 린더를 통해 일정을 받아보고 있으며, 린더가 존재하기 전 사람들을 일일히 자신들이 필요로 하거나 궁금한 일정들을 검색하여 확인해야만 했습니다. 우리가 문제를 해결한 방식은 매우 간단합니다. 매번 필요할 때마다 검색해봐야 했던 일정을 우리가 대신 기록하여 그것을 받아볼수 있도록 제공 하는것, 다시 말해 다수가 공통적으로 안고 있던 귀찮음을 소수의 노력으로 해결하고자였으며 이와 같은 문제 해결 방식은 명함 수기 입력 앱 - 리멤버 또는 전단지 모음 앱 - 배달의 민족이 접근한 방식과 유사합니다.첫 번째 선택, 캘린더 기반 일정 구독 ( https://linder.kr/ )일정을 받아보는 경험은 모바일앱, 챗봇, AI 스피커 등 다양한 방식으로 구현될 수 있습니다. 그중에서도 히든트랙팀이 선택한 첫 번째 방식은 이미 다수가 활용중인 캘린더 앱의 구독 기능을 활용한 것입니다. 스마트폰 기본앱인 캘린더를 하나의 정보 전달 채널로 활용함으로써 거부감 없이, 낮은 진입장벽으로 출시 반년 만에 15만명이 넘는 사용자를 확보할수 있었습니다.캘린더 기반 일정 구독의 한계하지만 캘린더를 기반으로 한 일정 구독에는 명확한 한계가 몇 가지 있었습니다. 1) 구독 캘린더의 특성상 리마인더 기능이 매우 제한적이었으며  2) 각 플랫폼 별 다른 동기화 시간으로 인해 실시간 업데이트가 불가했습니다. 3) 또한 기존 캘린더에 입력되어있던 개인 일정과 받아보는 일정이 혼재되어 분류가 어려웠으며 4) 일정을 삭제하거나 메모를 입력할 수 없었습니다.캘린더의 한계를 극복할 수 있는 자체 앱 제작 ( http://bit.ly/2EB41TW )이에 히든트랙팀은 지난 2017년 말 진행한 다수의 유저 인터뷰를 바탕으로 2018년 1월부터 약 3개월 간 일정을 받아보는 경험에 최적화된 모바일 앱을 개발하였습니다. 모바일의 핵심은 필요한 일정을 정확한 시점에, 검색 없이도 쉽게 받아 볼 수 있는데 초점을 두고 있습니다.린더 : 받아보는 캘린더 - Google Play 앱play.google.com 일정을 받아보는 경험에 대한 사용자와 이해 관계자히든트랙팀이 캘린더 기반의 일정 구독자와 모바일앱 사용자 모두에게 공통적으로 제공하고자 하는 것은 사용자가 자신에게 필요한 일정을 보다 쉽고 확실하게 소비할 수 있도록 돕는 것입니다. 사람들에게 필요한 일정은 아이돌 스케줄부터 화장품 세일, 학사일정에서부터 마트 휴무일까지 다양한 분야에 존재합니다. 일정을 받아보는 경험을 만들어가는 과정에서 우리가 일반 사용자 외에도 고려해야 할 나머지 두 종류의 이해 관계자는 일정을 공급하는 공급 파트너와 유통을 돕는 유통 파트너가 있습니다.망하기 딱 좋은 일정 데이터 생산 비즈니스일정을 받아보는 경험을 만들어가는 과정은 여느 타 서비스에 비해 매우 소모적입니다. 일정 데이터는 리뷰(왓챠)나 댓글(크리마), 연락처(리멤버) 등 과는 다르게 데이터의 휘발성이 매우 강하며 변동성 또한 매우 크기 때문에 다수의 기업들이 기피하는 데이터 형태라고 볼 수 있습니다. 일례로 2016년부터 2017년 중순까지 운영되었던 SKT의 Someday(썸데이)는 내부 조직장 교체와 비효율적인 ROI로 서비스가 종료된 바 있습니다.같은 실수를 저지르지 않기 위한 일정 데이터 서비스 전략 로드맵히든트랙팀은 2017년 1월부터 다수의 일정 관련 서비스 개발을 진행해왔으며 이 과정에서 습득한 노하우를 바탕으로 일정 데이터 생산 및 공급망을 구축할 수 있는 3단계 계획을 세우게 되었습니다.STEP.1 린더 파트너스 - 데이터 공급 파트너 확보캘린더 기반 일정 마케팅 솔루션 '린더 파트너스'는 해외 eCal, CalendarX, Eventable 등 다수의 캘린더 마케팅 업체를 벤치마킹하여 국내 인터넷 환경에 맞추어 최적화시킨 아시아 유일의 캘린더 마케팅 솔루션 입니다. 2018년 3월 기준 롯데자이언츠, 두산베어스, 수원삼성FC, 아디다스 코리아 등 20여 개의 데이터 공급 파트너를 확보한 린더 파트너스를 기반으로 히든트랙팀은 공식적인 데이터 공급 파트너를 확보함과 동시에 데이터 생산을 위한 초기 자본을 조달할 수 있게 되었습니다. 파트너스 영업은 현재 영업팀을 주축으로 이루어지고 있으며 2018년 말까지 현 20여 개의 파트너를 50여 개 수준으로 늘리는 것을 목표로 하고 있습니다.STEP.2 린더 모바일앱 - 일반 사용자 확보린더 파트너스를 통해 확보한 자금과 일정 생산력을 바탕으로 모바일앱 데이터의 정확도와 품질을 향상하고 사용자 중심의 서비스를 구축합니다. 기업 친화적인 린더 파트너스와는 다르게 린더 모바일앱은 오로지 일반 사용자를 위한 서비스로서 사용자 친화적인 인터페이스와 일정 콘텐츠 소비 경험을 핵심으로 합니다. 다수의 일반 사용자를 확보함으로써 제보 기능(크라우드소싱)을 활용하여 데이터의 정확도와 유저별 선호 캘린더 데이터를 파악할 수 있게 됩니다.  2018년 4월 안드로이드/iOS 앱 출시가 예정되어 있으며 2018년 연말까지 5만 이상의 MAU 확보를 목표로 하고 있습니다.STEP.3 린더 데이터헙 - 데이터 유통 파트너 확보글의 서두에서 언급한 바와 같이 일정을 받아보는 경험은 단순히 캘린더나 모바일앱 외에도 다양한 방식으로 제공될 수 있습니다. 확보한 데이터 공급 파트너와 일반 사용자 제보를 바탕으로 일정 데이터량과 품질을 향상하고, 더 나아가서는 보유한 유저 Pool을 바탕으로 사용자들의 선호도를 사전에 파악할 수 있게 됩니다. 이러한 다양한 종류의 데이터를 기반으로 현재 스피커 및 기타 AI 서비스를 제공 중인 네이버, 카카오, 삼성, SKT, KT 등의 유통 파트너를 대상으로 영업을 진행, 협력을 통해 다양한 방식으로 사용자들에게 일정 정보를 전달할 수 있게 됩니다.히든트랙의 3가지 비즈니스 모델위 언급한 3단계의 전략 로드맵을 통해 히든트랙은 3가지 수익창출 기회를 확보할 수 있습니다. 1) 캘린더 마케팅 솔루션 - 린더 파트너스의 Enterprise SaaS 형태 공급 및 데이터 관리 용역을 통한 수익2) 린더 앱 내 확보한 사용자 선호도를 바탕으로 일정 기반의 마케팅 광고주들에게 제공하여 창출하는 수익 3) 그리고 유통 파트너들에게 일정 데이터를 제공하는 대가로 받는 데이터 판매 및 용역에 대한 수익 이 바로 그 3가지 입니다.'린더' 하다 = 일정을 받아보다다각적인 비즈니스 모델과 단계가 존재하지만 결과적으로 이를 통해 확보한 매출의 재투자와 회사의 방향성은 하나로 일원화 될 수 있습니다. 그것은 바로 사람들의 소중한 일정을 놓치지 않도록 도와주는것. 자동차 네비게이션과 같이 서비스가 삶에 완벽히 녹아들어 그것이 부재하던 시절의 삶을 상상할 수 없게 되는 것이야 말로 가장 높은 수준의 서비스 구현이라 할 수 있습니다. 과거에 지도에만 의존하여 길을 찾던 시절 소수의 사람들이 네비게이션의 가능성을 보고 그것을 만들어왔던 것처럼, 사람들이 린더를 통해 그들의 소중한 일정을 놓치지 않도록 도와주는 것이 우리의 최종 목표입니다.#히든트랙 #챗봇 #기술기업 #개발자 #개발팀 #인사이트 #경험공유
조회수 1093

Do Well이 곧 Do Good이 되는 일

지난 금요일에 회사에서 어버이날 SNS에 올릴 콘텐츠에 대해 각자 앉은자리에서 가볍게 이야기 나누다가 순간 발끈한 일이 있었다.출발은 '부모님 은혜에 감사한다'는 메시지만 심플하게 전달하자는 것이었다. 그러다 누군가 아이디어를 냈다."요즘 학생들은 편지 쓰기를 어려워하니까 원한다면 잘라서 바로 부모님께 드릴 수 있게 카드 형태에 메시지까지 써서 이미지를 만들어 올리면 어떨까."나는 이견을 제시했다."우리 회사의 서비스는 중고등학생들이 주로 이용하기 때문에 중고등학생들이라면 아마도 카드를 만들어서 드리지는 않을 것 같다."여기에 대해 다시 이야기들이 오갔다. 마케팅팀 내 20대 중반부터 30대 중반까지의 팀원들이 함께였다. 세대와 관계없이 누군가는 고등학생 때까지도 직접 카드와 카네이션을 만들어서 부모님께 드렸다고 했고 누군가는 초등학교를 졸업한 이후로는 직접 만든 카드를 만들어본 적이 없다고 했다.이야기를 나누면서 '요즘 중고등학생들은 어버이날에 어떤 방식으로 감사를 표하는가'에 대해 짐작할 뿐 실제로는 잘 모르고 있다는 생각이 들었다. 요즘 중고등학생은 이렇다, 저렇다에 대한 확신이 없었다. 그래서 제안했다."그럼, 잘라서 쓸 수 있는 카드를 디자인해서 올려놓고 '설마 이걸 잘라서 쓰는 사람은 없겠지?'라는 메시지를 함께 써보면 어때?"농담처럼 던져본 후 '아님 말고~' 식으로 피해갈 수 있는 방법이라고 생각해서 낸 아이디어였다. 그런데 팀원 중 한 명이 이렇게 반응했다."으~~ 너무 선생님 같애."내가 발끈했던 건 이때였다. 요즘 들어 농담 비슷한 것만 하면 아재 냄새가 난다느니, 철 지난 유행어라느니, 요즘 애들은 그런 말 안 쓴다느니 하는 평가를 받아온 터였다."이게 뭐 선생님 같냐. 재미없으면 재미없다고 할 수는 있지만 무슨 말만 하면 선생님 같다, 아재 같다, 어디 무서워서 말하겠냐."농담처럼 웃으며 발끈했지만 아마 다른 팀원들은 모두 내가 '발끈했다'고 생각했을 거다. 그때 상황을 내가 다시 돌아봐도, 실제로 마음속에 그런 설움과 동시에 홍보와 브랜드 관리, 마케팅을 하고 있는 사람으로서의 두려움이 응어리져 있다가 분출돼 있었던 게 아마 맞지 싶다.우리 회사는 모바일 교육 서비스를 만들고 있으므로 중고등학생이 주 이용자인데 내가 고등학교를 졸업한 지는 15년도 더 지났다. 그렇다고 해서 중고등학생 학부모 나이도 아니다. 아직 시집을 안 갔으니까 자녀교육에 대한 경험이 전무할 뿐만 아니라 하다못해 자녀교육에 대해, 일반적인 자녀교육이 아니라 '내 새끼 교육'에 대해 고민해본 적조차 없다.이용자들의 마음과 욕구를 읽고 싶고, 그들이 즐겨 쓰는 언어를 알고 싶지만 모든 건 그저 짐작일 뿐이라는 아쉬움이 늘 마음속에 있었다. 궁극적으로는 그들에게 도움이 되고 싶은 건데, 사실은 학생들을 웃기고 싶다는 욕구도 굉장히 컸다. 필요한 걸 줄 수 있는 서비스를 만들고 싶고, 공감할 수 있는 콘텐츠를 만들고 싶고, 그리고 그들을 웃기고 싶었다.회사 입사 초기에 동갑내기 개발자와 둘이 굴국밥을 먹으러 간 적이 있다. 굴국밥은 내가 정말, 굉장히, 무척 좋아해서 매일 먹어도 질리지 않을 것 같은 메뉴 중 하나인데 팀원들 대부분은 굴국밥을 좋아하지 않는다. 호불호가 갈리는 음식인 데다 팀원들의 상당수가 자극적이고 맵고 짜고 단 것을 좋아하는 입맛을 갖고 있다. 이날 같이 밥을 먹던 개발자가 나에게 물었다."이 회사에서 네가 하고 싶은 게 뭐야?""누구나 평등하게 양질의 교육을 받을 수 있는 세상을 만들고 싶어."개발자는 고개를 갸웃했다. 나는 그의 반응에 살짝 당황해서 물었다."왜? 거짓말 같아? 너무 비현실적인가?""그렇다기보다는, 너무 구체적이지가 않아서."구체적이지가 않아서 고개를 갸웃한 동료를 이해한다. 하지만 나는 그때 받은 질문이 '목표'라기보다는 '비전'이라고 생각했고 목표가 아닌 비전에 대한 대답으로는 그 대답이 여전히 유효하다.이전에 나는 카셰어링 스타트업에서 일했다. 이때 대표님이 한 이야기 중에서 가장 기억에 남는 것은 '우리가 Doing Well 하는 것이 곧 Doing Good이 된다.'는 것이었다. 데이터에 기반한 빠른 의사결정으로 공유차량 유휴 비율을 낮추고 매출은 극대화하는 방식으로 이루어지는 마케팅 방법과 서비스와 기업의 가치를 잘 전달하는 데 좀 더 초점이 맞춰진 마케팅 방법 사이에서 고민이 있었던 나에게 해준 말이었다.차량 공유 서비스라는 것이, 꼭 소유하지 않아도 되는 것은 필요할 때만 나눠쓰는 문화를 만들어 공유의 가치를 실현하고, 구체적으로는 도로 위의 차량 숫자를 줄여 환경에도 기여하는 바가 클 것이라는 점에 끌려 카셰어링 스타트업에 입사했었다. 마케팅이나 홍보의 방향 역시 그럴 거라고 생각했고 나는 그게 하고 싶었다. '멋있는 것, 있어 보이는 것.'하지만 스타트업은 BM을 증명해 보이고 매출을 만들어 자생하는 것 역시 중요했다. '중요하다'라는 말로는 모자라고 필연적이라고 하는 게 맞겠다. 아무리 좋은 서비스이고, 아무리 사회에 공헌하는 사업이라도 결국 스스로 돈을 벌지 못하면 살아남을 수 없으니까. 그래서 Doing Well = Doing Good이라고 했던 대표님의 이야기에 수긍할 수밖에 없었다.그리고 그 공식은 지금 일하는 회사에서도 역시 마찬가지라 생각한다. 우리가 우리 서비스의 비즈니스 모델을 스스로 증명해 보여야 우리가 원하는 긍정적인 영향을 사회에 미칠 수 있게 될 것이라는 점에서, 역시 우리가 잘 하는 것이 곧 사회에 기여하는 것이 될 것이다.그렇다 보니 최근 새롭게 선보인 서비스 마케팅과 홍보 전략을 짤 때도 조바심이 생겼다. 좋은 서비스라는 자신감을 갖고 내놨고 무엇보다 이전에 오랫동안 호평을 받으며 운영해온 서비스를 바탕으로 한 것이었기 때문에 성과에 대한 기대 또한 컸다. 기존 이용자들이 새 서비스의 이용자도 돼 줄 것이라고 믿었다.하지만 신규 서비스 출시 후 한 달 남짓 지난 지금 우리는 기존 서비스 이용자들이 쉽게 새로운 서비스 쪽으로 넘어올 것이라는 기대가 예상과 다르다는 것을 알게 됐다. 비슷한 서비스라 해도 무료로 사용하려는 이용자와 유료로 사용하려는 이용자는 같지 않았다.내 경우, 조바심은 자꾸 자극적인 메시지를 만드는 쪽으로 드러났다.스마트폰만 있으면 누구나, 공부를 하고 싶고 양질의 교육을 받고 싶다면 누구나, 부모님의 재력과 상관없이 공평한 배움의 기회를 제공받을 수 있도록 해서 '새로운 공부 문화'를 만들겠다는 비전, '공부 문화가 바뀌면 학생들의 현재와 미래도 바뀔 것'이라는 기대를 자꾸 잊게 됐고 애써 잊어야 했다.대신에 공부 때문에 현재 행복하지 않은 학생들, 성적 때문에 미래가 불안한 학생들을 자극하는 쪽으로, 아이에게 충분한 교육을 제공해주지 못하고 있는 건 아닐까 불안한 학부모들을 자극하는 쪽으로 메시지를 만들고 있는 나를 발견했다. 우리가 잘하는 것이 곧 학생과 학부모들에게도 좋은 일이라는 핑계를 깔고.살아있는 그들만의 언어를 우리도 잘 안다고 어필하며 센스 있게 웃기고 싶은 욕심, 불행하고 불안한 그들을 한 명이라도 더 우리 서비스의 이용자로 만들고 싶다는 목표 때문에 잠시 초심을 잃었던 내게 최근 다시 초심을 되짚어보게 하는 일이 있었다.신규 서비스를 출시한 후 우리는 학생들을 대상으로 두 차례 전단지를 나눠줬다. 첫 번째는 서울, 대구, 부산 등 여러 지역의 중고등학생들에게 나눠줬고, 두 번째는 경기 지역 고등학생들에게만 나눠줬다. 또 첫 번째는 4월 초였고 두 번째는 중간고사 준비가 한창인 4월 말이었다. 그러므로 두 번의 전단지 배포 효과를 그대로 놓고 비교하기는 어렵다. 하지만 두 번째 전단지 배포 결과는 무척 고무적이었다.이용자들을 직접 만날 수 있다는 점은 오프라인 홍보의 장점이지만, 들여야하는 공수가 크고 효과 역시 구체적으로 트래킹 하기 어렵다는 것은 단점이다. 실제로 첫 번째 전단지 배포 후에는 큰 효과를 느낄 수 없었다. 서비스 출시 직후 언론 보도의 영향으로 늘었던 가입자수가 오히려 이즈음에는 감소하는 경향을 보였고, 전단지를 나눠준 지역 가입자가 그렇지 않은 지역 가입자보다 눈에 띄게 더 늘어나지도 않았다.하지만 여전히 가장 효과적이고 유효한 광고 툴로 인식되는 페이스북 광고나 기존 서비스 이용자들을 대상으로 한 마케팅 활동 역시 이렇다 할 성과가 없는 상황이었기 때문에 우리는 이전의 기반에 기대지 않고 완전히 새로운 서비스를 전혀 모르는 사람들에게 알린다는 생각으로 마케팅을 해야 한다고 판단했다. 그래서 한 번 더 학생들을 직접 만나 메시지를 전달하는 전단지 배포를 해보기로 했다. 대신 효과 측정을 위해 특정 지역에 집중해서, 공부에 대한 필요성과 의지가 더 높은 고등학생(> 중학생)에게만, 남학생보다는 여학생 위주로.또 하나의 변화는 메시지였다. 그리고 나는 무엇보다 이게 가장 주효했던 것은 아닐까 생각하고 있다.첫 번째 전단지의 핵심 메시지는 '무료 혜택'을 '재미있게' 설명해보자는 것이었다. 그런데 어떤 서비스인지를 알려야 하니까 그 내용도 넣었다. 글자가 너무 빽빽하게 많으면 학생들이 잘 읽어보지 않을 거라고 생각해 이미지를 최대한 많이 넣었다. 일단 '무료 혜택'에 혹하게 만든 후 내용 전체를 다 보게 하는 게 목적이었지만, 신문기사를 작성할 때 첫 문장만 보고 뒤를 읽지 않아도 알 수 있도록 쓰는 것처럼 혹시 자세히는 안 보더라도 핵심('무료 혜택')이라도 보게 만들기 위해서 만들어진 전단지였다.그런데 두 번째를 만들 때는 생각을 다르게 했다. 오프라인 마케팅 활동의 성과를 섣불리 판단할 순 없지만 공짜라고 꾄다고 해서 무조건 먹히는 건 아니구나, 그렇다면 학생들이 정말로 필요로 하는 건 뭘까. 그걸 고민했다. 그걸 고민하는 데에는 그 사이 약 2주간 쌓인 학생들과의 상담 결과도 도움을 줬다. 전문 상담사를 채용하기 전 대표님이 직접 상담을 맡아서 해보고 있었기 때문에 학생들과 직접 이런저런 이야기를 나눠보고 그들의 고민을 들어본 경험을 바탕으로, 공부하느라 지치고 힘든 학생들에게 정말 필요한 건 진심 어린 위로가 아닐까. 아니, 그 전에 누군가 자신들의 고민을 들어줄 사람이 필요한 건 아닐까 하는 생각에 이르게 됐다.그렇다면 우리는 정말로 진심으로 그들에게 다가가 봐야 한다고 생각했다. 우리 서비스는 좋으니까 무조건 이용해보라고 말하기 전에, 우리가 어떤 생각으로 왜 이런 서비스를 만들었는지를 진심으로 전달해보기로 했다. 그래서 실제로 서비스를 만들고 최근까지도 학생들과 활발히 소통해온 대표가 직접 그들에게 보내는 편지를 써보기로. 편지라니, 옛날 방식이다. 재미없고 진지하다. 이미지보다 글이 많다. 이건 전부다 그동안 우리가 '요즘 학생들은 이런 걸 좋아할 거야.'라고 짐작해온 것의 반대다.실제로 주말 동안 대표님이 써서 나에게 보여준 편지는 하나도 안 웃겼고, 하나도 트렌디하지 않았고, 심지어 길었다. 하지만 진심이었다. 그래서 나는 아주 조금만 줄이고 대표님이 전달하려고 하는 말을 거의 그대로 둔 채 전단지 디자인을 맡겼다. 전단지 치고 텍스트가 너무 많지 않냐, 이러면 아무도 안 읽어볼 것 같다는 피드백이 있었지만, 편지로 진심을 전달하려면 이 정도의 내용은 다 들어가는 게 맞다고 판단해서 더 이상은 내용을 줄이지 않기로 했다.아예 안 보거나, 끝까지 보거나, 둘 중 하나라고 생각했기 때문이었다. 그리고 끝까지 본다면 분명 마음이 전달될 거라고 생각했다. 그 편지들은 지난주에 전달됐는데, 한 달 동안 늘 비슷한 비율을 유지했던 경기지역 가입자 수가 편지가 전달된 이틀 동안 평상시 대비 무려 15% 가까이 올랐다. 가입자 수도 평균을 훨씬 상회했다. 물론 앞서 말한 것과 같은 변수들이 있고 중간고사 직전이라는 점도 영향을 미쳤을지 모르지만 나는 분명 그 메시지들에 힘이 있었다고 믿는다.물론 데이터 드리븐 마케팅 시대의 홍보마케터로서 이 한 번의 결과를 진리라고 받아들여선 안 되겠지만, 저 방식이 실제로 유효한 건지 확인하는 작업들을 하겠지만, 무엇보다 '진심은 통한다'라는 아주 오래된, 그래서 가끔은 촌스럽게 받아들여지기도 하는 저 경구를 계속 증명해나갈 수 있기를 바란다.그리고 앞으로는 내가 지금의 십대들을 잘 알지 못하고, 그들과 동떨어진 언어를 쓰고 있다는 부담과 불안감은 조금 떨쳐버리려고 한다. 입시 제도가 많이 바뀌었고, 바뀌고 있고, 공부에 대해 느끼는 압박이나 부담 역시 내가 느꼈던 것과는 정도가 다르겠지만, 그 안엔 여전히 내가 겪었던 것과 비슷한 감정들이, 비슷한 욕구들이 존재한다고 믿는다.그래서 나는 어땠는지, 내 중고등학생 시절은 어땠는지, 나는 왜 어떻게 공부했는지를 되돌아봤다. 나는 한 번도 과외라는 걸 받아본 적이 없다. 중학교 2학년 때 영어 단과 학원을 두어 달 다닌 것과 고1이 되기 전 중3 겨울 방학 때 선행학습을 위한 수학 단과 학원을 한두 달 다닌 것이 입시학원을 다녀본 경험의 전부다. 재수없게 들릴지도 모르지만 대학도 전액 장학금을 받을 수 있는 곳으로 갔다. 내가 대학을 졸업할 때쯤이면 어떤 대학을 나왔느냐는 중요하지 않게 될 것이라는 순진한 믿음도 있었지만, 어쨌든 나는 부모님께 부담을 안겨드리지 않고 스스로 해서 할 수 있는 만큼의 결과를 얻고 싶었기 때문이었다.당시 내가 과외를 받는다는 건 상상조차 해볼 수 없는 일이었다. 아마 지금도 '개인과외'는 받아본 사람보다 받아보지 않은 사람이 더 많을 것이다. 요즘은 자녀를 적게 낳아 교육비를 집중 투자하는 세상이 됐고 과외나 사교육에 대한 인식도 달라졌지만 여전히 과외나 학원비가 부담스러운 학생들이 그렇지 않은 학생들보다 훨씬 더 많을 것이다.우리가 만드는 서비스들은 주로 '혼자서 공부하는 학생들'이 많이 이용하는데 '왜 혼자서 공부하려고 할까'를 생각해보면 '도움을 받기 싫어서'는 아마 아니지 싶다. 누군가 자신의 공부를 도와주고 모르는 걸 알려준다면 그걸 싫어할 사람은 적을 텐데, 도움을 받기 위해 부담해야 하는 비용이 크기 때문에 어떻게든 혼자서 해보려고 하는 게 아닐까. 결국은 부모님에게 너무 큰 부담을 지우고 싶지 않은 마음들이 아닐까.공부를 잘하는 일이 행복해지는 유일한 방법이 되어서는 안 되지만, 적어도 공부를 잘하고 싶은 마음을 학생들 본인이 갖고 있다면, 그걸 비싼 고액과외나 부담스러운 학원비를 지불하지 않고도 스스로 한 번 해보고 싶다면, 그 기회는 누구나 공평하게 가져볼 수 있어야 한다. 그리고 그걸 공교육이 해낼 때까지는 우리 같은 젊고 혁신적인 기업들이 대신 해낼 것이다.우리는 이렇게 중요한 일을 하고 있으니까, 우리가 어떤 마음으로 일을 하는지가 너무 중요하니까, 나는 초심을 잃지 않고 비전을 놓치지 않기 위해 늘 애쓸 거다. 그리고 물론 그 중요한 일을 누구보다 잘 하기 위해 애쓸 거다. 우리가 잘하는 것이 곧 세상에 이로운 것이니까.#바풀 #콘텐츠 #콘텐츠마케팅 #콘텐츠마케터 #마케터 #인사이트 #경험공유 #콘텐츠기획
조회수 914

어반베이스만의 독특한 복지문화, '백일잔치'!

 백일잔치는 어반베이스의 가족이 되어 무사히 잘 적응하시고 건강하게 100일을 보낸 것을 다 함께 축하해 주는 자리입니다. 이번 100일 잔치의 주인공은 지난 7월에 입사하신 정준, 종훈님이셨습니다. 스파크 플러스 4층의 넓은 라운지에서 다 함께 피자파티를 했어요! 4인당 피자 1판의 넉넉한 양의 프리미엄 피자와 함께, 종훈님과 정준님의 케익도(1인 1케익) 준비를 했답니다.마침 점심시간이어서 다들 배가고팠기 때문에 맛있는 피자를 먹을 생각에 아주 들떴습니다. 거기다 맥주까지 있다니 금상첨화입니다. (점심시간에 맥주먹기 완전 가능!) 취향 존중을 위해 시원한 스프라이트도 준비하였습니다. 두 분 고깔모자도 쓰시고 제대로 파티분위기를 내 봅니다. (고깔모자 넘나 찰떡인 것!) 케이크에 초도 꽂고, 불도 붙이고, 폭죽까지 장전 완료! 백일잔치 답게 100일 축하 노래도 불렀습니다.100일 축하합니다~~ 100일 축하합니다~사랑하는 종훈, 정준님 100일 축하합니다~!!!우리 어반베이스 가족들이 정말 본인의 일처럼 정말 기뻐하며 축하해 주었습니다!백일'잔치'답게 귀여운 초도 불어보았습니다. 어떤 소원을 비셨을까요?!추억이 될 만한 사진을 대신 찍어주는 우리 어반베이스 가족분들 훈훈하네요 : ) 정준님, 종훈님 다시 한 번 100일 축하드립니다! 입사 100일 잔치?! 인생을 살며 백일잔치는 생후 100일 이후 다시는 없을 줄 알았는데, 그걸 회사에서 다시 하게 되다니, 어색하고 또 낯설기도 했습니다. 하지만 어반베이스만의 문화인만큼, 다 함께 모여 축하할 수 있어 참 기분좋은 자리였습니다. 많은 어반베이스 가족들이 100일을 넘어 1년 10년까지 함께했으면 좋겠어요!  출처: https://blog.naver.com/urbanbaseinc  

기업문화 엿볼 때, 더팀스

로그인

/