스토리 홈

인터뷰

피드

뉴스

조회수 1148

위대한 여정으로 2.0v

동기부여 : 올바른 일들을 통해 세상에 위대한 영향력을 끼칠 수 있다고 믿습니다.미션 : 사람들이 반려동물과 더 행복하고 건강한 삶을 살아갈 수 있도록 새로운 기준을 만듭니다.비전 : 믿을 수 있는 정보와 제품, 간편한 모바일 서비스를 통해 반려인들에게 새로운 라이프 스타일을 제공합니다.핵심 가치 : 이타적인 방향(Core Value 1) 으로 아주 큰 크기의 꿈(2)을 꾸며 현실 감각을 갖춘 사람들(3)이 실제로 이 비전을 현실화시켜 나갑니다.1) What drive us = "Impact the world"우리의 동기부여.Peopet team can have a great impact on the world doing right things.올바른 일들을 통해 세상에 위대한 영향력을 끼칠 수 있다고 믿습니다.● 페오펫 팀은 개인 단위의 옳은 행동들이 모여 사회에 선한 영향력을 끼칠 수 있다고 믿습니다. 올바른 입양, 책임감 있는 등록을 통해 강아지 공장과 유기견 문제를 지속가능하게 해결할 수 있습니다.2) Our mission ? = why우리가 꿈꾸는 세상.Peopet team make a new standard totally for healthier & happier pet lifestyle.사람들이 반려동물과 더 행복하고 건강한 삶을 살아갈 수 있도록 새로운 기준을 만듭니다.● 페오펫 팀은 사람들이 올바른 입양을 통해 건강한 강아지와 새로운 삶을 시작할 수 있게 돕고 간편한 등록을 통해 반려견을 진정한 가족으로 책임감있게 맞이하도록 돕습니다. 반려인과 반려동물이 더 행복하고 건강한 삶을 살아갈 수 있도록 새로운 기준을 만들어 나갑니다.3) Our vision ? = how미션을 달성하기 위한 단기적이고, 장기적인 그림"Peopet will be A to Z pet lifestlye platform."Peopet team provide really trustable information and product, so simple mobile service믿을 수 있는 정보와 제품, 간편한 모바일 서비스를 통해 반려인들에게 새로운 라이프스타일을 제공합니다.● 페오펫 팀은 반려인들에게 믿을 수 있는 정보, 제품을 제공하여 건강한 강아지 입양을 할 수 있도록 돕고, 간편한 모바일 등록 서비스를 제공하여 반려견을 진정한 가족으로 맞이하도록 돕습니다. 페오펫은 앞의 접점에서 쌓고있는  유니크한 데이터들을 종합하여 반려인들에게 새로운 라이프 스타일을, 파트너사에는 유익한 채널이(반려동물에 로얄티가 특히 높은 페오펫 고객층들) 될 수 있는 토탈 플랫폼 제공합니다. 이를 통해 수준 높은 고객 중심의 반려동물 서비스와 펫 업계의 시너지를 한 단계 도약시킵니다.4) Our core value ? = what그것을 지켜내기 위한 우리가 지녀야할 핵심 가치, 가치관.The most important thing is how you can dream great things.가장 중요한 핵심 가치는 얼마나 큰 크기의 꿈을 꿀 수 있는지입니다.● 이타적인 방향으로 아주 큰 크기의 꿈을 꾸고 현실 감각을 갖춘 사람들이 실제로 이 비전을 현실화시켜 나갑니다. 다음 3가지를 가장 중요한 핵심 가치로 봅니다.(1) Have a great scale of dream - 거대하고 위대한 꿈의 크기를 꿈꾸는 것.(2) Seek altruism - 이타심을 활용하여 내 꿈을 이루어나갈 것.(3) Have a sense of reality - 현실 감각을 갖추어 이상과 현실의 균형 감각을 갖출 것.(1) 페오펫 문화 - "핵심 문화" 편(2) 페오펫 문화 - "복지 문화" 편(3) 페오펫 문화 - "합의 문화" 편(4) 페오펫 문화 - "회의 문화" 편PPL. 페오펫에서는 위대한 개발자, 디자이너, 마케터를(CMO) 모시고 있습니다. 커피 한잔 하실 분은 연락주세요. 펫 산업에서의 완벽한 A to Z 수직 계열화를 꿈꿉니다. 한국에서 가장 밀도있는 생애주기 데이터를 압도적으로 쌓고 활용하는 데이터 플랫폼이 될 것입니다. #페오펫 #peopet #아이디어기업 #기업문화 #목표 #비전 #각오
조회수 1158

[인터뷰] Humans of MEME, 그 다섯 번째 주인공을 만나다. - 순간을 행복하게 살아가는 졔졔의 이야기

안녕ㅎr세요 !멋진 미미박서의 이야기를 담아오는 MOTH 입니다 !이번 주에는미미박스 사이트, 상품 페이지나 프로모션 등미미박스를 더욱 아름답게 만들어주시는 디자이너 분을 만나보았어요 !오늘의 주인공 jyejye 를 만나러 가볼까용?Q. 졔졔! 안녕하세요. 졔졔는 그렇다면 전공이 디자인 계열이신가요?A. 아니요. 저는 미생물학과였어요. 제 전공으로 학위를 받고 직업군을 가지게 된다면, 보통 제약회사 아니면 화장품 R&D 에서 제품을 연구하는 일을 하게 되는 전공이에요.( Moth : 와우! 그러면 어떻게 디자인을 하고 계신거에요? )저는 어렸을 때부터 미술에 관심이 많았어요. 교과목 수업 중 미술 시간이 사실 제일 행복했었거든요. 근데 그 당시 스스로 생각해봤을 때, 중학생 때부터 미술을 시작하는 것이 늦었다고 생각했었던 것 같아요. 당시 미술 학원을 다니고 벌써부터 예중∙예고의 과정을 밟고 있는 친구들도 많았구요. 근데 사실 생각해보면 ‘나는 늦었다, 힘들 것 같다, 안될 것 같다’ 이런 것이 다 핑계 같고 또 그만큼 하고 싶은 용기가 없었던 것 같아요. 그런데 어른이 되어서도 디자인 하는 것이 굉장히 즐겁고 재밌다는 것을 점점 스스로 느끼는 것 같았어요. 대학생 때에도 당시 전공 교수님께서도 전공을 살려서 일하라고 하시는데 제가 스스로 생각했을 때 대학교 이후의 제 삶에서도 이렇게 보내게 된다면, 굉장히 후회할 것 같은 거예요. 부모님도 사실 그 방향으로 가시면 좋아하셨거든요. 그랬는데 그 때, 제가 용기를 가졌던 것 같아요. 이과에 가고 대학교에 진학하고, 그런 것이 어떻게 보면 부모님이 원하시는 안정적인 방향의 삶 쪽으로 간 것이었는데, 제가 결국에도 직업을 그렇게 선택한다면 정말 후회할 것 같았고 제 삶이 즐겁지 않을 것 같았어요. 그래서 결국 졸업 한 후, 약 1~2년정도 무작정 배워야겠다는 결심으로 웹디자인 학원도 다니면서 이것 저것 만들어보며 다시 새롭게 디자인을 시작했어요.    Q. 정말 용기 있는 선택이셨네요. 다시 새로운 길을 가기 정말 어렵잖아요. 지금은 어떠세요, 용기 낸 선택에 만족하시나요?A. 네. 사실 제 대학교 생활만 봐도, 이미 디자인으로 마음이 기울어져 있었을지도 몰라요. 대학생 때 발표하며 PPT를 만들잖아요. 저는 내용도 내용이지만, 그것을 더 잘 보이고 집중되게 만들고 싶었어요. 발표 시간에 대부분 딴짓을 하는 경우도 많지만 집중을 하게 만드는 요소로 비주얼적인 것이 크잖아요. 그렇게 이 발표를 집중하게 만들고 싶었어요. PPT의 내용도 내용이지만, 어떻게 구성하고 내용을 풀어나가는 것이 중요한 것을 느껴서 그 당시에도 디자인 측면에서 많이 집중했었어요. 주변 사람들도 제가 평소에 디자인하는 것을 좋아하는 것을 아셔서 학회활동에서도 과티를 만드는 것도 저에게 맡겨서 디자인 해보라고도 하시는 등요.학교생활만 돌아봐도 항상 제 일상엔 그런 것이 많이 있었던 것 같아요. 그래서 결국에는 평소에도 제가 좋아하는 것들을 항상 느끼고 있었기 때문에, 졸업 후에도 직업을 선택할 수 있는 지표가 되어줬던 것 같아요. Q. 그렇다면 어떻게 미미박스에 오시게 되셨어요?A. 사실 미미박스에 가장 끌렸던 것이 기업문화였어요. 저는 다른 무엇보다도 제가 일할 수 있는 환경이 중요하다고 생각해요. 좋지 않은 환경에서 제가 제 일만 하여 높은 보수를 받는 것이 아니라, 지금 이 순간을 즐겁고 행복하게 보내는 것이 결국에는 나중에도 행복할 수 있는 것 같아요. 그래서 순간 순간을 즐겁게 일할 수 있게 만드는 기업문화가 제일 매력있게 느껴졌던 것 같아요. 그렇게 미미박스에 들어오게 되었고, 자연스레 화장품에도 관심이 생겼어요. 기업문화 때문에 회사에 들어왔는데 화장품에도 관심이 생겼고, 화장품에 관심이 생기다보니 이 화장품을 더 잘 보이게 하는 콘텐츠를 만들어야겠다는 열정으로 자연스럽게 이어졌네요(웃음).  저는 제가 걸어왔던 발자취와 경험들을 중요하게 생각해요. 결국 지금을 기준으로 했을 때는 모든 것이 다 경험이잖아요. 나중에 어떻게 쓰이는지 모르는 거더라고요. 힘들 때도 정말 많았어요. 버티고 버티면서, 그렇게 버텼던 순간들이 나중에는 도움이 많이 되더라구요. 그 시간들이 우리가 인지하지 못한 채로 잘 흘러가잖아요. 그 흘러가는 순간에도 최선을 다하면, 그게 허투루 쓰이는 경우는 없는 것 같아요. 대학교 4년 동안 배웠던 전공을 직업으로 선택한 것도 아니니 그 시간도, 등록금도 아깝다고 생각했어요. 그런데 제가 배우고 경험했던 순간들이 항상은 아니더라도 생각보다 디자인을 할 때도 응용할 수 있는 부분이 생기며 ‘내가 한 모든 경험들이 다 쓸모 없는 것은 아니구나’라는 생각이 들더라구요. 예를 들면, 연예인 이성경씨도 피아노를 전공했지만 모델이 됬는데, 모델 일을 하기도 연기도 하면서 기회가 생겨서 피아노를 연주하기도 하더라고요. 그런 것처럼 지금 하고 있는 일이 옳다, 그르다 라고 판단하기 보다 그저 긍정적으로 받아들이면 좋을 것 같아요. 언제 어떤 순간들이 일어날지 모르니까요.저는 부끄럼도 많고 두려움도 많으면서도 도전정신도 있거든요. 상반적인 것을 같이 가지고 있고 해보고 싶은 것도 많아요. 이것 저것 해보고싶고.. 등 그런 것들이 결국 모여서 제가 되기도 하니깐요(웃음).그래서 제가 아직도 쓰는 슬로건이 manymuch 이에요. 뭐든지 많이 경험해보는 것이 중요한 것 같아요.저는 강박관념을 가지고 주말에 나가는 경우도 꽤 있어요. 정말 피곤해서 쉬고 싶은데 ‘그래 쉬자’ 라고 생각하면 또 몸이 근지러운 성향이기도 하고요. 피곤해도 나갔다 오면 ‘역시 나오길 잘했네.’ 라는 생각이 들어서 가능하면 주말에 새로운 곳에 많이 가보려고 해요. 전시가 있으면 보러가고 새로운 공간에 계속 찾아가보는 것도 디자이너한테는 감각을 키울 수 있어요. 제가 생각하기에 디자인은 아무것도 없는 것에서 완전한 창조가 일어날 수는 없다고 생각해요. 이것 저것 많이 보면서 응용하고 다양하게 생각할 수 있는 스펙트럼이 넓어지는 것 같아요. 사람들이 어떠한 분위기를 원하는지, 요즘 트렌디한게 무엇이며 제가 디자인을 하고 싶은 욕심이 있으니깐 더 찾아보려고 하는 것 같아요.Q.  졔제는 어떤 목표가 있으신가요?A. 졔졔가 바꾼 한정특가 이벤트 가이드 변경기본적인 한정특가 이벤트 가이드가 있어요. 한정특가 작업물을 만들어야 할 때, 그 이벤트가 디자인적으로 고객이 느낄 수 있을만큼 후킹하게 느껴져야 하잖아요. 그래서 이벤트 가이드 자체를 바꾸었어요. 누군가 저한테 시켜서가 아니라 이렇게 디자인을 하면 고객들의 눈에 확 들어오지 않을까? 라는 생각으로 기본 가이드 룰에 어긋나지 않으면서 좀 더 눈에 띄게 바꾸었어요. 그렇게 제가 만든 것이 또 자연스레 가이드가 되었어요. MD분들도 제가 만든 방식으로 제작을 해달라고 요청해주신다던지, 그런 것이 가장 많이 뿌듯했던 것 같아요. 기존의 것을 개선하는 것도 일의 일부며 딱 주어진 일만은 하고 싶지는 않아요. 앞으로도 좀 더 고객의 눈을 사로잡을 수 있게 개선하고 싶은 마음이 커요.어느 정도 퍼포먼스를 내고 있지만 완전히 퍼포먼스를 냈다고 생각은 안해요. 제가 하는 업무에서 스스로 만족할 때까지 그리고 사람들이 어느 정도 인정할 수 있을 정도의 퍼포먼스를 내고 싶고, 그게 또 제 목표에요. 앞으로 우린 어디에 있던 간에 계속 나아갈 사람이잖아요(웃음).졔졔와 이야기를 나누며저는 개인적으로는 삶의 방향과업무를 하는 마음가짐 등 배울 수 있었던 것 같아요 !사실 이번 주의 이야기는 인터뷰라기보다 졔제가 저의 고민도 많이 들어주시고격려도 많이 해주시며 이야기 하면서 정말 시간 가는 줄 몰랐답니다..맛있는 코~퓌~도 사주신 졔졔 흑흑흐그흑 ㅠㅠㅠㅠ항상 쉬운 것에 안주하지 않고더 나은 것을 만들어내기 위해 노력하시는 졔졔이런 멋진 미미박서분이 계셔서미미박스가 더욱! 멋진 회사로 성장할 것 같아요 !다음에는 더욱 알찬 이야기로 찾아오도록 하겠습니다 :  )그럼 이 10000 안녕히계세요!
조회수 1654

HBase 설정 최적화하기 - VCNC Engineering Blog

커플 필수 앱 비트윈은 여러 종류의 오픈 소스를 기반으로 이루어져 있습니다. 그 중 하나는 HBase라는 NoSQL 데이터베이스입니다. VCNC에서는 HBase를 비트윈 서비스의 메인 데이터베이스로써 사용하고 있으며, 또한 데이터 분석을 위한 DW 서버로도 사용하고 있습니다.그동안 두 개의 HBase Cluster 모두 최적화를 위해서 여러 가지 설정을 테스트했고 노하우를 공유해 보고자 합니다. 아랫은 저희가 HBase를 실제로 저희 서비스에 적용하여 운영하면서 최적화한 시스템 구성과 설정들을 정리한 것입니다. HBase를 OLTP/OLAP 목적으로 사용하고자 하는 분들에게 도움이 되었으면 좋겠습니다. 아래 구성을 최적화하기 위해서 했던 오랜 기간의 삽질기는 언젠가 따로 포스팅 하도록 하겠습니다.HBaseHBase는 Google이 2006년에 발표한 BigTable이라는 NoSQL 데이터베이스의 아키텍처를 그대로 따르고 있습니다. HBase는 뛰어난 Horizontal Scalability를 가지는 Distributed DB로써, Column-oriented store model을 가지고 있습니다. 사용량이 늘어남에 따라서 Regionserver만 추가해주면 자연스럽게 Scale-out이 되는 구조를 가지고 있습니다. 또한, Hadoop 특유의 Sequential read/write를 최대한 활용해서 Random access를 줄임으로 Disk를 효율적으로 사용한다는 점을 특징으로 합니다. 이 때문에 HBase는 보통의 RDBMS와는 다르게 Disk IO가 병목이 되기보다는 CPU나 RAM 용량이 병목이 되는 경우가 많습니다.HBase는 많은 회사가 데이터 분석을 하는 데 활용하고 있으며, NHN Line과 Facebook messenger 등의 메신저 서비스에서 Storage로 사용하고 있습니다.시스템 구성저희는 Cloudera에서 제공하는 HBase 0.92.1-cdh4.1.2 release를 사용하고 있으며, Storage layer로 Hadoop 2.0.0-cdh4.1.2를 사용하고 있습니다. 또한, Between의 데이터베이스로 사용하기 위해서 여러 대의 AWS EC2의 m2.4xlarge 인스턴스에 HDFS Datanode / HBase Regionserver를 deploy 하였습니다. 이는 m2.4xlarge의 큰 메모리(68.4GB)를 최대한 활용해서 Disk IO를 회피하고 많은 Cache hit이 나게 하기 위함입니다.또한 Highly-Available를 위해서 Quorum Journaling node를 활용한 Active-standby namenode를 구성했으며, Zookeeper Cluster와 HBase Master도 여러 대로 구성하여 Datastore layer에서 SPOF를 전부 제거하였습니다. HA cluster를 구성하는 과정도 후에 포스팅 하도록 하겠습니다.HDFS 최적화 설정dfs.datanode.handler.countHDFS에서 외부 요청을 처리하는 데 사용할 Thread의 개수를 정하기 위한 설정입니다. 기본값은 3인데 저희는 100으로 해 놓고 사용하고 있습니다.dfs.replicationHDFS 레벨에서 각각의 데이터가 몇 개의 독립된 인스턴스에 복사될 것 인가를 나타내는 값입니다. 저희는 이 값을 기본값인 3으로 해 놓고 있습니다. 이 값을 높이면 Redundancy가 높아져서 데이터 손실에 대해서 더 안전해지지만, Write 속도가 떨어지게 됩니다.dfs.datanode.max.transfer.threads하나의 Datanode에서 동시에 서비스 가능한 block 개수 제한을 나타냅니다.과거에는 dfs.datanode.max.xcievers라는 이름의 설정이었습니다.기본값은 256인데, 저희는 4096으로 바꿨습니다.ipc.server.tcpnodelay / ipc.client.tcpnodelaytcpnodelay 설정입니다. tcp no delay 설정은 TCP/IP network에서 작은 크기의 패킷들을 모아서 보냄으로써 TCP 패킷의 overhead를 절약하고자 하는 Nagle's algorithm을 끄는 것을 의미합니다. 기본으로 두 값이 모두 false로 설정되어 있어 Nagle's algorithm이 활성화되어 있습니다. Latency가 중요한 OLTP 용도로 HBase를 사용하시면 true로 바꿔서 tcpnodelay 설정을 켜는 것이 유리합니다.HBase 최적화 설정hbase.regionserver.handler.countRegionserver에서 외부로부터 오는 요청을 처리하기 위해서 사용할 Thread의 개수를 정의하기 위한 설정입니다. 기본값은 10인데 보통 너무 작은 값입니다. HBase 설정 사이트에서는 너무 큰 값이면 좋지 않다고 얘기하고 있지만, 테스트 결과 m2.4xlarge (26ECU) 에서 200개 Thread까지는 성능 하락이 없는 것으로 나타났습니다. (더 큰 값에 관해서 확인해 보지는 않았습니다.)저희는 이 값을 10에서 100으로 올린 후에 약 2배의 Throughput 향상을 얻을 수 있었습니다.hfile.block.cache.sizeHBase 의 block 들을 cache 하는데 전체 Heap 영역의 얼마를 할당한 것인지를 나타냅니다. 저희 서비스는 Read가 Write보다 훨씬 많아서 (Write가 전체의 약 3%) Cache hit ratio가 전체 성능에 큰 영향을 미칩니다.HBase 에서는 5분에 한 번 log 파일에 LruBlockCache (HBase 의 Read Cache) 가 얼마 만큼의 메모리를 사용하고 있고, Cache hit ratio가 얼마인지 표시를 해줍니다. 이 값을 참조하셔서 최적화에 사용하실 수 있습니다.저희는 이 값을 0.5로 설정해 놓고 사용하고 있습니다. (50%)hbase.regionserver.global.memstore.lowerLimit / hbase.regionserver.global.memstore.upperLimit이 두 개의 설정은 HBase에서 Write 한 값들을 메모리에 캐쉬하고 있는 memstore가 Heap 영역의 얼마만큼을 할당받을지를 나타냅니다. 이 값이 너무 작으면 메모리에 들고 있을 수 있는 Write의 양이 한정되기 때문에 디스크로 잦은 flush가 일어나게 됩니다. 반대로 너무 크면 GC에 문제가 있을 수 있으며 Read Cache로 할당할 수 있는 메모리를 낭비하는 것이기 때문에 좋지 않습니다.lowerLimit와 upperLimit의 두 가지 설정이 있는데, 두 개의 설정이 약간 다른 뜻입니다.만약 memstore 크기의 합이 lowerLimit에 도달하게 되면, Regionserver에서는 memstore들에 대해서 'soft'하게 flush 명령을 내리게 됩니다. 크기가 큰 memstore 부터 디스크에 쓰이게 되며, 이 작업이 일어나는 동안 새로운 Write가 memstore에 쓰일 수 있습니다.하지만 memstore 크기의 합이 upperLimit에 도달하게 되면, Regionserver는 memstore들에 대한 추가적인 Write를 막는 'hard'한 flush 명령을 내리게 됩니다. 즉, 해당 Regionserver이 잠시 동안 Write 요청을 거부하게 되는 것입니다. 보통 lowerLimit에 도달하면 memstore의 크기가 줄어들기 때문에 upperLimit까지 도달하는 경우는 잘 없지만, write-heavy 환경에서 Regionserver가 OOM으로 죽는 경우를 방지하기 위해서 hard limit가 존재하는 것으로 보입니다.hfile.block.cache.size와 hbase.regionserver.global.memstore.upperLimit의 합이 0.8 (80%)를 넘을 수 없게 되어 있습니다. 이는 아마 read cache 와 memstore의 크기의 합이 전체 Heap 영역 중 대부분을 차지해 버리면 HBase의 다른 구성 요소들이 충분한 메모리를 할당받을 수 없기 때문인 듯합니다.저희는 이 두 개의 설정 값을 각각 0.2, 0.3으로 해 놓았습니다. (20%, 30%)ipc.client.tcpnodelay / ipc.server.tcpnodelay / hbase.ipc.client.tcpnodelayHDFS의 tcpnodelay 와 비슷한 설정입니다. 기본값은 전부 false입니다.이 설정을 true로 하기 전에는 Get/Put 99%, 99.9% Latency가 40ms 와 80ms 근처에 모이는 현상을 발견할 수 있었습니다. 전체 요청의 매우 작은 부분이었지만, 평균 Get Latency가 1~2ms 내외이기 때문에 99%, 99.9% tail이 평균 Latency에 큰 영향을 미쳤습니다.이 설정을 전부 true로 바꾼 후에 평균 Latency가 절반으로 하락했습니다.Heap memory / GC 설정저희는 m2.4xlarge가 제공하는 메모리 (68.4GB)의 상당 부분을 HBase의 Read/Write cache에 할당하였습니다. 이는 보통 사용하는 Java Heap 공간보다 훨씬 큰 크기이며 심각한 Stop-the-world GC 문제를 일으킬 수 있기 때문에, 저희는 이 문제를 피하고자 여러 가지 설정을 실험하였습니다.STW GC time을 줄이기 위해서 Concurrent-Mark-and-sweep GC를 사용했습니다.HBase 0.92에서부터 기본값으로 설정된 Memstore-Local Allocation Buffer (MSLAB) 을 사용했습니다. hbase.hregion.memstore.mslab.enabled = true #(default)hbase-env.sh 파일을 다음과 같이 설정했습니다. HBASE_HEAPSIZE = 61440 #(60GB) HBASE_OPTS = "-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps"GC log를 Python script로 Parsing해서 STW GC 시간을 관찰하고 있습니다. 지금까지 0.2초 이상의 STW GC는 한 번도 발생하지 않았습니다.그 밖에 도움이 될 만한 설정들hbase.hregion.majorcompactionHBase는 하나의 Region에 대해서 여러 개의 StoreFile을 가질 수 있습니다. 그리고 주기적으로 성능 향상을 위해서 이 파일들을 모아서 하나의 더 큰 파일로 합치는 과정을 진행하게 됩니다. 그리고 이 과정은 많은 CPU usage와 Disk IO를 동반합니다. 그리고 이때 반응 속도가 다소 떨어지게 됩니다. 따라서 반응 속도가 중요한 경우에는, 이 Major compaction을 off-peak 시간대를 정해서 manual 하게 진행하시는 것이 좋습니다.저희는 사용자의 수가 상대적으로 적은 새벽 시간대에 crontab 이 실행시키는 script가 돌면서 전체 Region에 대해서 하나하나 Major Compaction이 진행되도록 하였습니다.기본값은 86,400,000 (ms)로 되어 있는데, 이 값을 0으로 바꾸시면 주기적인 Major Compaction이 돌지 않게 할 수 있습니다.hbase.hregion.max.filesizeHBase는 하나의 Region이 크기가 특정 값 이상이 되면 자동으로 2개의 Region으로 split을 시킵니다. Region의 개수가 많지 않을 때는 큰 문제가 없지만, 계속해서 데이터가 쌓이게 되면 필요 이상으로 Region 수가 많아지는 문제를 나을 수 있습니다. Region 수가 너무 많아지면 지나친 Disk IO가 생기는 문제를 비롯한 여러 가지 안 좋은 점이 있을 수 있기 때문에, split 역시 manual 하게 하는 것이 좋습니다. 그렇다고 Table의 Region 수가 너무 적으면 Write 속도가 떨어지거나 Hot Region 문제가 생길 수 있기 때문에 좋지 않습니다.HBase 0.92.1 에서는 기본값이 1073741824(1GB)로 되어 있는데, 저희는 이 값을 10737418240(10GB)로 늘인 후에 manual 하게 split을 하여 Region의 개수를 조정하고 있습니다.hbase.hregion.memstore.block.multipliermemstore의 전체 크기가 multiplier * flush size보다 크면 추가적인 Write를 막고 flush가 끝날때까지 해당 memstore는 block 됩니다.기본값은 2인데, 저희는 8로 늘려놓고 사용하고 있습니다.dfs.datanode.balance.bandwidthPerSec부수적인 설정이지만, HDFS의 Datanode간의 load balancing이 일어나는 속도를 제한하는 설정입니다. 기본값은 1MB/sec로 되어 있지만, 계속해서 Datanode를 추가하거나 제거하는 경우에는 기본값으로는 너무 느릴 때가 있습니다. 저희는 10MB/sec 정도로 늘려서 사용하고 있습니다.dfs.namenode.heartbeat.recheck-intervalHDFS namenode에만 해당되는 설정입니다.Datanode가 응답이 없는 경우에 얼마 후에 Hadoop cluster로부터 제거할 것인지를 나타내는 값입니다.실제로 응답이 없는 Datanode가 떨어져 나가기까지는 10번의 heartbeat가 연속해서 실패하고 2번의 recheck역시 실패해야 합니다. Heartbeat interval이 기본값인 3초라고 하면, 30초 + 2 * recheck-interval 후에 문제가 있는 Datanode가 제거되는 것입니다.기본값이 5분으로 되어 있는데, fail-over가 늦어지기 때문에 사용하기에는 너무 큰 값입니다. 저희는 문제가 있는 Datanode가 1분 후에 떨어져 나갈 수 있도록 이 값을 15,000 (ms) 으로 잡았습니다.Read short-circuitRegionServer가 로컬 Datanode로부터 block을 읽어올 때 Datanode를 통하지 않고 Disk로부터 바로 읽어올 수 있게 하는 설정입니다.데이터의 양이 많아서 Cache hit이 낮아 데이터 대부분을 디스크에서 읽어와야 할 때 효율적입니다. Cache hit에 실패하는 Read의 Throughput이 대략 2배로 좋아지는 것을 확인할 수 있습니다. OLAP용 HBase에는 매우 중요한 설정이 될 수 있습니다.하지만 HBase 0.92.1-cdh4.0.1까지는 일부 Region이 checksum에 실패하면서 Major compaction이 되지 않는 버그가 있었습니다. 현재 이 문제가 해결되었는지 확실하지 않기 때문에 확인되기 전에는 쓰는 것을 추천하지는 않습니다.설정하는 방법은 다음과 같습니다. dfs.client.read.shortcircuit = true #(hdfs-site.xml) dfs.block.local-path-access.user = hbase #(hdfs-site.xml) dfs.datanode.data.dir.perm = 775 #(hdfs-site.xml) dfs.client.read.shortcircuit = true #(hbase-site.xml)Bloom filterBloom filter의 작동방식에 대해 시각적으로 잘 표현된 데모 페이지HBase는 Log-structured-merge tree를 사용하는데, 하나의 Region에 대해서 여러 개의 파일에 서로 다른 version의 값들이 저장되어 있을 수 있습니다. Bloom filter는 이때 모든 파일을 디스크에서 읽어들이지 않고 원하는 값이 저장된 파일만 읽어들일 수 있게 함으로써 Read 속도를 빠르게 만들 수 있습니다.Table 단위로 Bloom filter를 설정해줄 수 있습니다.ROW와 ROWCOL의 두 가지 옵션이 있는데, 전자는 Row key로만 filter를 만드는 것이고, 후자는 Row+Column key로 filter를 만드는 것입니다. Table Schema에 따라 더 적합한 설정이 다를 수 있습니다.저희는 데이터 대부분이 메모리에 Cache 되고 하나의 Region에 대해서 여러 개의 StoreFile이 생기기 전에 compaction을 통해서 하나의 큰 파일로 합치는 작업을 진행하기 때문에, 해당 설정을 사용하지 않고 있습니다.결론지금까지 저희가 비트윈을 운영하면서 얻은 경험을 토대로 HBase 최적화 설정법을 정리하였습니다. 하지만 위의 구성은 어디까지나 비트윈 서비스에 최적화되어 있는 설정이며, HBase의 사용 목적에 따라서 달라질 수 있음을 말씀드리고 싶습니다. 그래서 단순히 설정값을 나열하기보다는 해당 설정이 어떤 기능을 하는 것인지 저희가 아는 한도 내에서 설명드리려고 하였습니다. 위의 글에서 궁금한 점이나 잘못된 부분이 있으면 언제든지 답글로 달아주시길 바랍니다. 감사합니다.
조회수 1028

일본 스타트업 적응기#4 「지금」

언제부터였을까,학창 시절디자인을 공부하던 학생으로서스름 없이 도전하고, 특이해지길 겁내지 않던 나는사회생활을 시작하면서부터,갑옷 같이 정제된 옷을 입고,상명하복 문화에 스스로를 맞추고살은 찌고, 눈빛은 흐려지고..점점 '사회화'된 다수 속에 한 명으로 바뀌어가고 있었다.10대 말,몸이 막 어른이 되어가며 만들어지는 호르몬,아직 그 균형을 맞추지 못해, 못난 사춘기처럼20 대 말,이제 막 사회화되던 나는 그 균형을 맞추지 못하고, 못난 20대의 모습을 하고 있었는지 모른다.설익은 어른 놀이에 옛 추억만 뒤적거리고언제부터 이렇게, 속된 말로 찌질해졌는지어쩌다 찍힌 사진 속에서도 난 왜 그렇게 고개 숙인 모습이 많았는지살은 찌고, 눈빛은 흐려지고, 축 늘어져있고..대학생이 돼서야 고등학교 때 사진을 보고,아 정말 못났었구나를 느끼게 되는 것처럼삶의 패러다임이 바뀌고야, 그땐 정말 못났었구나를 새삼 뒤돌아보게 된다.그럼, 지금은 어떻길래?어쩌다 닿은 옛 친구의 연락 "요즘 어떻게 지내?""나? 더할 나위 없이 행복하게 지내고 있어"나도 이런 이야기를 하게 될지 몰랐고 또 믿지도 않았지만,그렇다. 더할 나위 없이 행복하게 지내고 있다.내 삶은 학생이라는 단계를 넘어서아직은 미숙한 사회인의 단계를 보내고 있지만,내 표정은, 내 사진은다시 행복한 미소를 짓고 꿈을 꾸었던예전 모습으로 돌아간 듯 하다.무엇이 나를 이렇게 만들었을까내 안에 쌓여있던 독을 빼내고,안에서부터 변화를 만들고 있을까를 생각하지만-글을 쓰지만 -글 실력이 부족한지 왜 죄다 상투적이기만 한 것인지그냥 만화 속에 캐릭터가 된 것 같은 기분이다.꿈을 좇는 해적선에 몸을 실은,하나하나 특성이 그리고 포지션이 분명한사람들 속에서 나도 하나의 캐릭터로그 특성과 포지션을 인정받으며동료들과 함께 신나는 항해를 해나가는 기분이다.화혜복지소의, 복혜화지소복禍兮福之所倚, 福兮禍之所伏불행 속에 행복이 있고,행복 속에 불행이 있으며이는 끊임없이 순환한다고 하지만  없어질 사탕이라면닳기 전에 충분히 즐기며젊음을 행복한 기억으로  채워나가야겠다.나이가 들 수록 선천적으로 타고난 모습을 떠나스스로 변화하는 모습에 책임져야 한다는데,10년 후,나는 여전히 꿈꾸고천진난만한 미소를 지을 수 있을까오늘은 그냥꾸밈없이 담백한 글을 담고 싶었다.#Fuller #일본 #스타트업 #해외취업 #스타트업합류 #일상 #인사이트
조회수 1464

AWS, Kubernetes 그리고 WAF

모니터링을 지속적으로 강화하다 보니 사용자 약관에 어긋나게 행동하는 주체가 눈에 띄기 시작한다. 특정 시간대에 판매 목록을 긁어가려고 시도하는 크롤러가 대표적이다. 비정상적인 서비스 이용을 탐지한 건 좋은데 이를 어떻게 차단할지가 또 고민이다. 차단 방법이야 많지만 가급적유지보수가 쉽고현재 서비스 구조에 살짝 얹기만 하면 되는그런 멋진 구조가 없을까 잠시 조사를 해보았다. 결론적으로는 현재 우리의 구조에선 1시간만 작업하고 펑펑 놀아도 되는 그런 방법은 없었다. 하지만 조금만 더 참고 기다리면 꽤 괜찮은 접근방법이 있을 것도 같더라. 우선 현 상황을 보자면 우리의 인프라는 주로Kubernetes가 서비스의 90% 이상을 통제하며웹 서비스는 주로 AWS ELB를 통해 인터넷 망에 노출한다.그러니 이론상으로는 AWS의 WAF, 그러니까 Web Application Firewall을 이용하면 손 안대고 코 풀기가 딱이다. 하지만 문제가 하나 있으니!!!AWS WAF는 ELBv2 그러니까 Application Load Balancer만 지원하는데 Kubernetes 1.5.x는 ELBv1만 지원한다. AWS WAF가 L4 로드밸런서인 ELBv1을 지원하던가 Kubernetes가 AWS ELBv2도 External Load Balancer로 선택가능하게 지원하던가 해야 Kubernetes + AWS ELB + WAF를 조합할 수 있다. 이 문제만 해결되면 금방 적용가능한 구성이라 매우 땡긴다. 설사 Kubernetes이 ELBv2는 지원하되 WAF 연동을 지원하지 않더라도 이를 수행하는 Kubernetes 플러그인을 개발하는 건 이틀이면 충분하지 싶다.왜 WAF인가?그러고 보니 여태 왜 이런 구성이 제일 낫다고 생각하는지 설명하지 않았다. 웹애플리케이션 방화벽을 구현하는 방법이야 AWS WAF 말고도 많지만 이러한 구성에는 분명한 장점이 있는데IP 평판 목록을 수집해서 한데 정리하는 서비스를 AWS가 제공하기 때문에 내가 이걸 구현한다고 시간낭비할 필요 없고매우 간단한 구조라서 처음 설치하고 설정하는데 30분에서 1시간이면 족하고Classless Inter-Domain Routing (CIDR) 표기법을 지원하므로 특정 아이피 대역을 막는 건 일도 아니며무엇보다 내가 관리하는 평판 목록도 쉽게 추가할 수 있다.이러니 “굳이 다른 솔루션을 찾아서 생고생해야 하나?”라는 생각이 들 수밖에 없다.다른 읽을꺼리How to Import IP Address Reputation Lists to Automatically Update AWS WAF IP Blacklists: AWS WAF의 구조와 WAF를 CloudFront에 적용하는 방법을 설명한다.AWS WAFがALB(Application Load Balancer)で利用出来るようになりました: AWS WAF를 ELBv2에 적용하는 방법을 설명한다.Akamai — Protect your organization with a web application firewall.Originally published at Andromeda Rabbit.#데일리 #데일리호텔 #개발 #개발자 #개발팀 #인사이트
조회수 1847

덕질도 신박하게! R을 활용한 텍스트 마이닝 도전기

Overview대학원에서 소프트웨어 공학을 전공하고 있습니다. 이번 학기엔 ‘빅데이터 분석’ 과 ‘대용량데이터베이스관리론’ 과목을 수강하면서 생애 처음으로 R Studio 프로그램을 설치해봤는데요. 머신 러닝을 다뤄본 적도, 자연언어처리 분야를 개발한 적도 없지만 어느 날 텍스트 마이닝 관련 강의에서 불현듯 이런 생각이 떠올랐습니다. “내가 좋아하는 가수로 텍스트 마이닝을 하면 어떤 결과가 나올까?”머릿속으로 생각하는 것과 내가 직접 구현을 해보는 것은 절대 다른 법! 일단 도전해보기로 했습니다. 개발 3년과 덕질 10년의 실력을 쏟아 부을 겁니다.지금까지 예쁜 디자인이라고만 알고 있었던 WordCloudStep1. 트위터 Developer 에서 인증키 받기트위터 Developer (Twitter Developer Platform — Twitter Developers) 에 접속해서 개인 계정으로 로그인하고, 오른쪽 위의 Apply를 클릭합니다.Twitter standard APIs > Get started with standard access를 클릭합니다.등록된 개발자 앱이 없으면 Create an app의 apps.twitter.com을 클릭합니다.Create New App을 클릭합니다.각 항목을 입력합니다. 저는 Website 가 없기 때문에 로컬 호스트를 기재했습니다.약관에 동의한 후 Create your Twitter application을 클릭합니다.만약 어플리케이션 이름이 중복된다면 위와 같은 에러 메세지가 나올 겁니다. 정상적으로 어플리케이션이 등록되면 위의 화면과 함께 API Key를 발급받을 수 있습니다. Consumer Key (API Key) 옆의 내용 (캡쳐화면에는 비공개)을 클릭하면 API Key 뿐만 아니라 API Secret, Access Token 등 세부 내용을 관리할 수도 있습니다.Step2. R Studio 설치하기 (Mac OS 기준)구글에서 R for macOS를 검색을 하면 맨 위에 설치 페이지가 보입니다. 1)먼저 R 패키지를 설치해야, 나중에 R Studio를 설치했을 때 실행이 가능합니다.R Studio 홈페이지에서 R Studio를 다운받습니다. 다운로드 링크는 여기를 클릭하세요.RStudio가 정상적으로 실행이 된다면, 이제 준비는 끝났습니다! Step 3. 필요한 패키지를 먼저 설치하기따로 설치가 필요한 패키지는 RStudio에서 명령어로 설치할 수 있습니다.—한 개씩 설치하는 법install.packages(“packageName”)—여러 개의 패키지를 한 번에 설치하고 싶을 땐 위와 같이 설치할 수 있습니다.—여러 개를 한꺼번에 설치하는 법install.packages(c(“package1”, “package2”,”package3”))—설치를 했다고 해서 바로 사용할 수는 없습니다. 이 패키지를 사용하겠다는 명령어를 다시 입력해야 합니다.—설치한 패키지를 사용하기library(“packageName”)—이번 글에서는 아래와 같은 패키지들이 필요합니다.twitteRROAuthbase64enchttpuvtmSnowballCwordcloudRColorBrewerStep 4. 트위터 api와 연동하여 WordCloud 생성하기먼저 각자 API 관련 Key 들로 객체를 생성해주고, setup_twitter_oauth() 메소드를 사용하여 Twitter API에 접근합니다.searchTwitter 4) 라는 함수를 사용하면, 트위터 API 를 통해 관련 트윗 내용을 추출할 수 있는데요. 좋아하는 일본 아이돌 가수인 “아라시”를 키워드로 추출하려고 첫 번째 파라미터에 “Arashi”를 넣었습니다. 그 뒤의 내용은 영문으로 작성된 최근(Recent) 트윗을 최대 1500개까지 리턴 받겠다는 의미입니다. resultType에는 popular를 넣으면 가장 인기있는 트윗을 받을 수도 있습니다.데이터를 가져오면, 위와 같이 데이터가 추출된 것을 확인할 수 있습니다.이제 matchTweets에 있는 내용으로 분석가가 되어 마음대로 데이터를 가공할 수 있습니다. class 등으로 구조와 클래스를 확인할 수 있을 뿐만 아니라, nchar() 를 이용해 트윗당 문자 수를 계산할 수도 있습니다. 이번 글에서는 위와 같이 트윗을 20개 추출했습니다.각각의 트윗을 보면, 이상한 코드나 슬래시 등 필요 없는 데이터들이 포함되어 내려온 것을 확인할 수 있습니다. 이 부분들을 제거해 깔끔한 데이터로 가공해보겠습니다. 그리고 텍스트 집합이라고 볼 수 있는 Corpus를 생성한 후, WordCloud 까지 생성해볼게요.데이터를 Corpus 로 만들 때는 Corpus() 를 사용하면 됩니다. 저는 VectorSource 라는 명령어를 사용해 단어들을 Vector로 바꿔주었고, 데이터가 잘 들어갔는지 확인하기 위해 inspect() 를 사용했습니다.사람이 읽기 불편한 단어들을 제거하는 건 tm_map 함수 하나면 충분합니다.위의 이미지를 보면, 각 행마다 특정 특수문자들을 제거하기 위한 명령어가 있습니다. 중간 부분엔 stopwords 라는 단어가 있는데, 영어 문장에 들어가는 i.e 나 etc 같은 표현들을 제거할 수 있는 겁니다. 그 외에도 대문자를 소문자로 바꾸거나 번호를 제거하는 등의 옵션들이 이미 R에서는 제공되고 있기 때문에, 우리는 입맛에 맞게 가져다 쓰기만 하면 됩니다.이제 대망의 WordCloud를 만들 차례입니다.max.words는 최대 N개의 단어를 고르는 옵션이며, min.freq는 최소 N번 이상 나온 단어, random.order = FALSE는 제일 많이 나온 단어가 먼저 나오도록 지정하는 옵션입니다. colors는 지정하지 않으면 검정색으로만 나오지만, 알록달록 예쁘게 표현하고 싶다면 여러 옵션을 지정해서 Frequency 에 따라 다른 색이 나오도록 할 수도 있습니다. 5) 첫 번째 이미지가 이번 글의 예제로 얻은 결과인데요. 추출 언어를 영어로만 한정했더니 일본어 발음을 영문으로 표현한 데이터가 많았습니다. 기타 설정을 변경하여 다시 추출한 게 바로 두 번째 이미지입니다. 큼직큼직하게 나온 단어들을 보면 DVD 나 블루레이 출시와 관련된 트윗이 대다수인 것을 볼 수 있는데요, 검색 결과 최근 2017-2018 라이브 투어 ‘Untitled’가 출시된 것을 확인할 수 있었습니다. 기타 작게 표현된 단어들을 보면 아라시의 노래 제목들도 확인 가능한데, 이 노래들이 인기있다는 것도 예측할 수 있습니다.Conclusion지금까지 R을 이용해 트위터 API 와 연동한 텍스트 마이닝을 했습니다. 데이터를 WordCloud로 생성하는 것도 해봤고요. 이번 글에서는 기본적인 예제를 다뤘지만 텍스트 마이닝의 세계는 아주 깊고 넓습니다. 만약 이 글로 텍스트 마이닝에 조금이라도 흥미가 생겼다면 일단 도전해보세요! 좋아하는 것과 연관 지어서 따라 하다 보면 꽤 즐거운 시간이 될 겁니다.참고1) 18년 6월 6일 기준이다.2) Twitter Sentiment Analysis Tutorial3) Text mining: Twitter extraction and stepwise guide to generate a word cloud4) R 함수 관련 설명은 R Documentation 사이트에서 확인할 수 있다. 5) 색상 옵션이 궁금하다면 여기에서 참고할 수 있다. 6) 머신러닝 언어처리 - R로 WordCloud 만들어보기 - 데이터 사이언스 랩글김우경 대리 | R&D 개발1팀[email protected]브랜디, 오직 예쁜 옷만#브랜디 #개발자 #개발팀 #인사이트 #경험공유 #R #텍스트마이닝
조회수 422

매장 수익 극대화하기

매장/식당을 운영할 때 우리가 가장 많이 신경 쓰는 영역은 매출과 수익일 것입니다. 비즈니스가 앞으로 나아가려면 고객이 필요하고 이는 매출/수익으로 이어집니다. 매출은 비즈니스 라이프 스트림의 시작이며 사업을 유지하고 수익 내기 위해 필요합니다. 우리는 서로 다른 비즈니스 환경에 맞는 구체적인 매출 전략이 필요합니다. 고객을 유치하여 음식, 서비스 및 브랜드에 충실하게 만들거나 더 많은 고객을 수용하기 위해 식당을 확장 할 수도 있습니다. 레스토랑 비즈니스가 수익을 창출하고 고객을 다시 방문하게 만드는 요인에 대해 살펴 보겠습니다.저는 여기서 매출 증대 활동을 주요 활동과 지원 활동으로 나누겠습니다.매출 증대를 위한 주요 활동레스토랑 비즈니스의 핵심 비즈니스 모델은 제공되는 음식입니다. 그걸 잊지 맙시다. 저는 이 것이 많은 독자들에게 상기 될 필요가 없기를 바랍니다.1. 품질 및 고객 경험을 타협하지 마십시오.요식업에서 음식과 서비스의 질을 낮추는 것은 일으키고자 하는 변화에 대한 마지막 옵션 혹은 아예 고려하지 말아야 할 사항입니다. 사람들이 식당을 반복적으로 방문하는 유일한 이유는 음식과 경험입니다. 고객을 다시 오게 만든는 것은 광고가 아니며 충성도 높은 고객을 만드는 것은 눈에 띄는 거창한 광고 문구가 아닙니다. 우리는 레스토랑의 본질인 제품과 서비스에 집중해야 합니다.음식과 서비스의 질을 유지하기 위한 활동들:직원 회전율 평가요리사와 서버가 너무 많이 입퇴사하는 경우 음식과 서비스에 문제가 될 것입니다. 해당 현상을 발견했다면 문제를 해결하십시오!원재료/제품 소싱모든 제품 품질의 기본은 제조자 혹은 질에 달려있습니다. 식당 운영에서 재료의 신선도는 타협할 수는 없습니다 (소매점의 경우 제품의 품질). 어떠한 방법으로든 좋은 품질의 재료/제품을 찾으십시오 (합리적인 차원에서). 너무 비싸면 다른 식당과 공동구매하여 단가를 낮추십시오. 열심히 한 만큼 돌아옵니다.트레이닝 매뉴얼트레이닝 매뉴얼을 만들고 항상 음식 준비, 요리 지침 및 매장 운영에 대한 규칙을 세운 후 그에 따르도록 합니다. 제대로된 교육을 받지 않은 직원은 비즈니스에 있어 평생 고객을 잃는 손해를 안겨다 줄 수 있습니다. 그 동안 트레이닝의 효과를 무시했다면, 이제 사업의 트레이닝 과정을 다시 평가해 볼 때입니다. 따라야 할 일련의 규칙을 가지고 있으면 음식과 서비스의 일관성이 유지됩니다.2. 피드백 루프이는 일부 IT 스타트업의 문제처럼 들릴지 모르지만 건강한 피드백 루프는 고객의 참여를 이끌어 내고 그들의 목소리를 들어주는 좋은 방법입니다. 모든 사업은 스타트업처럼 성장할 수 있습니다. 양적 데이터와 정성적인 피드백에 모든 결정을 기반하세요. 성공한 스타트업 중 가장 성공적인 기업은 고객과의 건강한 피드백 루프를 가지고 있습니다. 이 것이 제품에 대한 시장의 반응을 파악하고 비즈니스의 방향을 재검증하는 방법입니다. 사업은 당신의 마스터 플랜에 달려 있지 않습니다. 비즈니스는 고객들에 달려있고 그들과 함께합니다. 오늘 고객에게 경험이 어땠는지 묻기 시작해 보세요. 그들이 무엇을 좋아하거나 싫어하는 것을 알게 되면 놀랄 것입니다. 당신은 그 결과에 따라 행동하기만 하면 됩니다.매출 증대를 위한 지원 활동주요 활동 이외에도 많은 지원 활동을 통해 매출이나 수익을 높일 수 있습니다. 이러한 활동에는 비용 절감, 효율성 증대, 고객 유치, 반복 방문 증가 등이 포함될 수 있습니다.1. 기프트 카드 프로그램기프트 카드 사용이 증가하고 있습니다. 소비자는 물리적 카드 또는 온라인 기프트 카드와 상관없이 기프트 카드를 계속 주고 받습니다. 고객에게 기프트 카드를 구입할 수있는 옵션을 제공하면 매출을 앞당길 수 있을 뿐만 아니라 충성 고객이 친구 및 가족에게 전달하여 잠재 신규 고객을 더 많이 확보 할 수 있습니다. 많은 소매 및 F&B 기업이 선불 형태로 수익을 늘리고 잠재 고객에게 제품/서비스를 이용해 볼 수 있는 기회를 제공하기 위해 기프트 카드 전략을 사용합니다. 기프트 카드의 장점은 고객에게 부여되는 구매의 자유입니다. 기프트 카드를 받으면 원하는 음식이나 서비스를 언제 구매할 지 자유롭게 선택할 수 있습니다.또 다른 매출 전략을 세우고 있다면 기프트 카드 및 프로모션 방법에 대해 생각해보세요.2. 전략적 구매 시점 프로모션우리가 계획보다 얼마씩 더 소비하게 만드는 요인은 충동적인 마지막 순간의 결정일 때가 많습니다. 저는 많은 독자들이 이를 경험했을 것이라고 생각합니다. 이는 상향 판매에 좋은 전략이며 때때로 일일 매출의 상당 부분을 차지할 수도 있습니다.많은 고객의 구매 결정은 상점내에서 이루어집니다. 그 결정은 곧 매출로 이어질 수 있습니다. 소형 보드나 아이패드를 계산대 옆에 설치하고 베스트셀러 물품이나 오늘의 할인 품목을 홍보해 보세요. 고객이 매장에서 알아채지 못했던 베스트셀러나 할인품목을 구매 시점에 발견하여 구매할 확률이 높습니다.3. 작업 효율 향상작업의 효율성에 영향을 미치는 많은 요소가 있습니다. 그것은 매장 구조 같은 작은 영역에서 발생할 수 있습니다. 고객에게 제품을 전달하기 위한 한 가지의 추가적인 단계는 고객의 만족도를 저하시킬 수 있습니다.식당/매장 평면도매 번 부엌이나 계산대가 항상 혼잡하다면 귀하의 레스토랑 평면도에 문제가 있을 수 있습니다. 식당/상점 운영은 부동산 비즈니스와 유사합니다. 바쁜 시간에 고객이 집중되는 통로와 전체 고객 트래픽을 처리할 방법을 잘 계획해야합니다. 레스토랑의 평면도를 재평가하고 bottle neck 현상이 어디에 있는지 확인하고 고쳐보세요. 전에 하루 100 명의 고객을 앉힐 수 있었다면 평면도를 개선하고 20 명의 추가적인 고객이 당신의 음식을 먹어 볼 수 있지 않을까요?스토리지(창고) 구조직원이 고객에게 맞는 신발을 찾는데 걸리는 시간이 오래 걸리나요? 창고에서 고객이 요구한 제품을 찾는 것이 어려운 일인가요? 귀하의 재고 관리 소프트웨어는 그 품목이 창고에 있다고 말해 주지만 도통 찾을 수가 없나요? 스토리지 재배치, 선반 재정렬, 올바른 레이블링 등으로 재구성해 보세요.주방 구조주방은 식당이나 스토리지보다 복잡한 영역입니다. 요리사가 음식의 품질을 통제하는 중요한 곳입니다. 복잡하게 설계 된 주방은 식당 운영의 효율성을 떨어뜨립니다. 직원/요리사들과 주방에 대한 피드백을 듣고 개선 할 수있는 방법에 대해 토론해 보세요. 당신이 그들이 하는 말을 듣은다면 놀랄 수 있습니다. 대화의 창을 열어보세요.상점 매출과 수익을 높이기 위한 몇 가지 방법을 제안했습니다. 일부는 귀하의 비즈니스에 적용 가능할 수도 있고 그렇지 않을 수도 있습니다. 비즈니스의 사장 또는 관리자로서 귀하의 중책은 직원 관리, 재고 주문 및 광고, 홍보만이 아닙니다. IT 스타트업의 핵심은 제품 그 자체이며 고객이 잘 만든 제품/서비스를 구매하듯 레스토랑이나 리테일 사업도 그 핵심은 음식과 제품, 그리고 서비스에 있습니다.#시프티 #고객가치 #핵심가치 #기업소개 #서비스소개
조회수 6088

MOIN 대표를 소개합니다

오늘은 저희 MOIN을 이끌고 계신 서일석 대표님에 대해 소개해볼까합니다.#이선균 뺨 치는 멋진 목소리를 가지신 대표님은 핀테크 스타트업에 어울리는 이력을 자랑하십니다.일문일답을 통해 대표님에 대해 알아가보겠습니다.이선균 목소리를 가진 MOIN 서일석 대표-Professional Experience-2015.07 - 2016. 03 옐로금융그룹 CSO2014.06 - 2015.07 퓨처플레이 투자총괄2011.07 - 2014.05 소프트뱅크벤처스 책임심사2007.08 - 2011.07 삼성전자 선임연구원-Education-Carnegie Mellon Univ. Software Engineering 석사KAIST 전산과 학사서울과학고등학교 ▶     여태까지 밟아 오신 커리어에 대해 간략하게 소개해주시겠어요?저는 과학고-공대-공학석사를 거친 전형적인 공돌이었습니다. 제 첫 커리어 역시 삼성전자 소프트웨어 연구 및 개발에서 시작했지요. 제가 스타트업 세계에 발을 내밀게 된 건 ‘소프트뱅크벤처스코리아(Softbank Ventures Korea)’에서 벤처캐피탈리스트(이하 VC)로 일할 때부터입니다. 이후로는 퓨처플레이와 옐로금융그룹 초기 창업진에 참여하면서 스타트업 세계에 본격적 뛰어 들게 됐죠. ▶     금융공학을 공부 하셨던건가요? 어떻게 컴퓨터 공학에서 VC로 커리어를 전향하신 건가요?금융공학을 공부한 건 아닙니다. 삼성전자에서 4년을 보내고 박사 과정을 밟을지, 원했던 창업을 할지 고민이 많았습니다. 하지만 아무리 생각해도 엔지니어로서의 커리어만으로 창업을 하는 게 위험하다는 생각이 들었습니다. 경영을 위한 재무나 관리 등에 대한 경험이 없었기 때문입니다. 이를 직간접적으로 겪어볼 수 있겠다 싶었던 것이 바로 VC라는 길이었습니다. 투자를 할 가치가 있는 벤처를 선별해내는 과정에서 스타트업 세계를 직•간접적으로 체험할 수 있었습니다.▶     창업을 하고 싶으셨던 건 꽤 오래 전부터였던가 보네요?먼저, 고등학교 시절부터 접해온 소프트웨어 개발과 이를 기반한 창업 모델에 익숙했습니다. 또 학사와 석사 모두 컴퓨터 공학을 전공하다 보니, 선후배나 동료 중에 엔지니어로서 창업을 하거나 스타트업 초기 멤버로 합류한 케이스가 많았습니다. 이런 모습을 지켜보면서 “나도 내 스스로 만든 서비스나 상품으로 창업을 하고 싶다”는 목표가 생겼습니다.  하지만 창업을 결심하고 하게 되기까지는 시간이 많이 걸렸습니다. 실패에 대한 두려움도 있었지만, 무엇보다도 부담감이 컸습니다. 창업이란 게 혼자만 실패하면 그만인 것이 아니라, 함께 일하게 될 동료들을 책임져야 하는 일이기 때문이죠. 결코 만만하게 볼 수 없는 부분이었습니다. MOIN을 소개하고 있는 서일석 대표▶     그러면 MOIN이란 스타트업은 어떻게 시작하셨나요?2014년 퓨처플레이에서 투자총괄로 근무하고 있을 때 창업 아이템을 4개 정도 가지고 있었습니다. MOIN 서비스 역시 그 중 하나였죠. 그 중 사용자들의 니즈가 가장 큰 부분이 해외송금 서비스라고 생각했습니다. 해외송금은 전통적으로 은행 영역인데, “비싼 수수료 + 느린 송금 속도 + 복잡한 절차와 수수료 구조”로 사용자들이 크게 불편함을 느끼고 있었습니다. 저 역시 카네기 멜론 대학원에서 석사를 지내면서 해외송금 불편함을 직접 경험해보기도 했구요. 하지만 결코 경험에서 나오는 ‘감’으로만 창업에 뛰어든 건 아닙니다. 소프트뱅크벤처스코리아에서 VC로 지내면서 깨달은 점이 있었습니다. ‘경험만으로는 창업을 할 수 없다’는 점과 ‘사업에는 시장이 있어야하고, 그 시장의 성장성도 있어야 한다’는 것이었죠. 이 깨달음을 바탕으로 철저한 시장 조사를 진행했습니다. 블록체인을 기반으로 한 해외송금 시장은 이미 유럽과 북미 등지에서 크게 성장하는 검증된 사업 모델이었습니다. 특히 아시아의 금융 시장은 유럽과 북미에 비해 국가별로 법과 규제가 비교적 많아, 성장을 하지 못하고 있었죠. 하지만 최근 몇 년 사이 아시아에서도 ‘핀테크 바람’이 불며 규제들이 완화되는 추세입니다. 해외송금 서비스를 실행하기에 가장 적기라고 판단했습니다. 뿐만 아니라 옐로금융그룹에서 근무할 때, 개인자산관리, 모바일 결제, 금융 큐레이션 등 기존 금융 서비스가 진보된 기술과 만나 새로운 ‘핀테크 서비스’로 업그레이드 되는 걸 지켜보면서 해외송금 역시 기존 방식에서 탈피하여 더 나은 서비스로 선보일 수 있겠다는 자신감이 생겼습니다."회사는 결국 사람이 하는 것이라 생각합니다"▶     아이템을 고안해내고 창업하기까지 꽤 걸린 셈이네요. 함께 창업하신 분들은 어땠나요?회사는 결국 ‘사람’이 하는 것이라 생각합니다. 그런 의미에서 창업하는 과정에서 정말 중요한 부분 중 하나는 역시 ‘사람’입니다. 아무리 좋은 아이템이더라도 사업비전을 함께 공유할 수 있는 창업 멤버들이 있어야 하는 법이라고 생각합니다. MOIN은 저뿐만 아니라 서홍석 개발자와 김보람 디자이너가 함께 하고 있는 핀테크 스타트업입니다. 특히, 두 분은 각각 다른 스타트업에서 공동창업을 해보고, 운영해 본 경험이 있습니다. 각자가 지닌 전문성(개발, 디자인)은 물론이고, 스타트업 생태계에 대한 이해도 역시 높아 앞으로 험난한 여정을 같이 동료로서 창업을 결심하는 데 큰 힘이 됐습니다. 서일석 대표에게 '함께 일하고 싶은 사람'이란?#열정 #책임감 #전문성▶     첫 커리어를 시작했을 때 자신의 모습과 지금 모습을 비교해본다면 무엇이 달라졌나요?삼성전자에서 엔지니어로 일할 때는 내가 맡은 업무만 잘하면 됐습니다. 하지만 스타트업을 운영하는 대표는 신경써야 하는 부분들이 굉장히 많습니다. ‘멀티플레이어’가 돼야 하죠. 기획, 개발, 디자인, 투자유치, 재무, 법무 등 많은 영역에 있어 결정을 하고 책임을 져야 합니다. 상당한 내공이 필요한 위치인 것 같습니다. 엔지니어에서 VC로 커리어를 전환한 게 큰 도움이 되고 있습니다. 투자심사역으로 어떤 스타트업이 전도유망한지 판단해보고, 퓨처플레이와 옐로금융그룹에서 스타트업 운영진으로서 경험해본 일이 무엇보다도 소중한 자산이 됐습니다.▶     앞으로 어떤 경영인이 되고자 하시나요?함께 성장하는 경영인이 되고 싶습니다. 특히 지금 MOIN은 소수정예로 이루어진 초기 스타트업 회사입니다. 이런 곳에선 개개인의 성장이 곧 회사의 성장이지요. 직원 하나하나가 그 능력과 역량을 키우는 데 있어 도움이 되고 싶습니다. 그러기 위해선 저부터도 배우고 성장해야 되지 않을까요? - 서일석 대표가 꼽은 인생 명언 -知之者不如好之者, 好之者不如樂之者어떤 사실을 아는 사람은 그것을 좋아하는 사람만 못하고,좋아하는 사람은 즐기는 사람만 못하다by. 공자 대표님이 창업을 결심하는 데 큰 기여를 하셨다는 두 분!다음 편에서는 창업진(개발자와 디자이너 순)을 소개해보겠습니다.기대해보셔도 좋습니다! #모인 #MOIN #대표소개 #팀원소개 #인터뷰 #팀원인터뷰 #팀원 #대표
조회수 933

앱 데이터 분석 시 사용자 세그먼트의 필요성

사용자 세그먼트(USER SEGMENTATION)란? 모바일 분석 툴을 사용하면 앱 사용자에 대한 많은 정보를 얻을 수 있습니다. 하지만 방대한 데이터는 오히려 의사결정에 혼란을 일으킬 수 있어 비즈니스에 의미가 있는 데이터를 선별해서 보는 것이 중요합니다.‘사용자 세그먼트’란 데이터의 필터 기능으로, 1차 데이터를 하위 기준으로 분류해서 보는 것을 의미합니다. 예를 들어 앱 사용자 전체의 데이터를 성별, 연령, 국가, 플랫폼 별로 나누어서 보는 것도 세그먼트에 해당합니다. 이 기능을 이용하면 ‘우리 사용자는 누구인가?’ 에서 더 나아가, 앱 서비스의 충성고객, 구매고객, 이탈고객 각각의 특성을 파악하고 이에 맞는 비즈니스 전략을 만들 수 있습니다.아래 내용을 통해 앱분석 시 사용자 세그먼트의 방법과 필요성을 알아보겠습니다.사용자 세그먼트 적용하기사용자 세그먼트가 무엇인지 실제 데이터 분석 툴의 예시를 보며 자세히 알아보도록 하겠습니다. 모바일 분석 서비스 와이즈트래커는 기본 세그먼트와 사용자 정의 세그먼트 기능을 제공하고 있습니다.기본 세그먼트기본세그먼트 기능을 통해 플랫폼, 성별, 연령대에 따라 데이터를 분류할 수 있습니다. 비즈니스에 따라 사용자 구분 시 중요한 지표가 있다면, 그것을 기본세그먼트 항목으로 추가하는 것도 가능합니다. 광고채널, 회원여부, 회원등급 등이 이에 해당합니다.[ 와이즈트래커 세그먼트 설정화면 – 필요한 세그먼트를 더블 클릭하거나, 오른쪽 상단의 ‘Drag Here’ 로 세그먼트 항목을 Drop하면 세그먼트가 적용됩니다. 여러가지 세그먼트를 동시에 적용할 수 있습니다 ]아래 데이터는 기본 세그먼트 중 연령대(20대, 30대, 40대) 세그먼트를 이용해 [신규방문 vs 재방문] 리포트 데이터를 하위 분석한 결과입니다.이를 통해 단순히 신규방문/재방문의 수치/비율 뿐 아니라, 각 방문 유형별 연령대 구성을 파악할 수 있습니다. 이 데이터를 통해 처음방문자의 경우, 20대와 30대의 수치가 비슷하게 나타나지만 반복방문자의 경우 30대의 비율이 20대보다 훨씬 높게 나타나, 앱 서비스가 20대보다 30대에게 지속적으로 어필되고 있다는 것을 확인할 수 있습니다.사용자 정의 세그먼트사용자 정의 세그먼트를 통해 기본적으로 제공되는 세그먼트를 조합해 비즈니스에 필요한 맞춤 세그먼트를 설정할 수 있습니다. 예를 들어, 앱 서비스의 주요 고객이 iOS를 사용하는 20~30대 여성이라면 아래와 같이 해당 속성값을 가지는 사용자 정의 세그먼트 ‘iOS_2030_여성’을 생성합니다.위에서 생성한 세그먼트를 위의 [신규방문 vs 재방문] 리포트에 적용하면 아래와 같은 데이터가 나타납니다.이처럼 사용자 정의 세그먼트를 이용하면 앱 사용자를 비즈니스에서 정의한 타겟 고객군과 잠재 고객군으로 분류하여 유의미한 사용자 그룹의 숫자를 파악할 수 있습니다.사용자 세그먼트의 필요성데이터 분석은 분석 자체가 목적이 아니라, 비즈니스의 성장과 목표 달성에 도움이 될 때 의미가 있습니다. 그럼 사용자 세그먼트는 비즈니스의 성장에 어떤 도움을 줄 수 있을까요?1. 의사결정에 필요한 데이터를 선별해 추출할 수 있다. 신규 고객을 위한 이벤트 기획 시, 신규 고객들의 성별, 나이, 플랫폼 등을 세그먼트 기능을 통해 파악할 수 있습니다. 만약, 아래 테이블처럼 신규 고객의 대다수가 20,30대 여성이라면, 이들의 흥미를 끌만한 이벤트를 기획해 이벤트 참여율을 높일 수 있습니다.[ 와이즈트래커 내 처음방문자 방문수 데이터에 연령_성별 사용자정의 세그먼트를 적용한 화면 ]2. 어떤 유저가 우리 비즈니스에 가장 유의미한지 파악할 수 있다. 앱 서비스의 핵심적인 유저는 앱을 주기적으로 방문하고, 구매 빈도/금액이 높은 사용자입니다. 이들의 특성을 세그먼트를 통해 파악하고, 이러한 데이터를 기반으로 해당 사용자들의 충성도와 구매율을 높이기 위한 프로모션을 진행할 수 있습니다.[ 와이즈트래커 내 1회 구매자 방문수 데이터에 여성들의 연령_플랫폼 사용자정의 세그먼트를 적용한 화면 ]3. 오디언스 타겟팅(AUDIENCE TARGETING)에 이용할 수 있다.세그먼트 기능을 통해 파악한 특정 사용자 그룹의 특성을 바탕으로 오디언스 타겟팅을 진행할 수 있습니다. 앱에서 한번도 상품을 구매하지 않은 비구매자 그룹의 특징을 파악했다면, 이를 기반으로 해당 그룹의 ADID/IDFA를 추출해 구매를 유도하는 푸시메시지 또는 광고를 노출할 수 있습니다.[ 와이즈트래커 오디언스 타겟팅 설정화면. 비구매자 그룹의 주요 특징이 회원인 40대 국내 남성이라면 이들의 ADID/IDFA를 추출해 구매를 유도하는 푸시메시지/광고 프로모션을 진행할 수 있다.]비즈니스 성장의 지름길 고객에 대한 이해도가 높을수록 비즈니스는 빠르게 성장합니다. 이 때문에 모바일 비즈니스에서 사용자 세그먼트를 통해 비즈니스 고객군 별 특성을 정확하게 파악하는 것은 선택이 아닌 필수입니다. 모바일 데이터 분석을 이제 시작했다면, 사용자 세그먼트 기능을 통해 데이터에 깊이를 더하고 비즈니스 성장에 핵심적인 데이터를 확인해보세요!
조회수 2853

iOS 개발을 위한 11가지 노하우

Overview기고 제안을 받자마자 iOS 개발을 시작했을 때가 떠올랐습니다. 신대륙을 마주한 것 같았던 그때의 기분을 아직도 잊지 못하기 때문입니다. 당시까지만 해도 Android 개발만 했기 때문에 iOS는 그야말로 미지의 영역이었습니다. 게다가 개발을 시작하려고 조심스럽게 첫 발을 내딛은 순간, 입이 떡 벌어질 수밖에 없었죠.“이렇게 느린 IDE가 있다니…““개발자 프로그램이 뭐 이렇게 비싸?”XCodeXCode는 그동안 접했던 IDE 중에서도 가장 최악이었고, 개발자 프로그램 등록은 13만 원 상당의 비용을 지불해야 했습니다. 가장 중요한 건 맥 컴퓨터(Macintosh)를 보유해야만 했죠. 처음 개발을 시작하려니 넘어야 할 산이 매우 많았습니다. 맞습니다. 팜므파탈의 대명사 마타하리(Mata Hari)처럼 iOS 개발은 밀당과도 같습니다. 분명 매력적인 일이지만 XCode와 개발자 프로그램 등록은 빙산의 일각이기 때문입니다. iOS는 곳곳에 구덩이를 파고 초보 개발자들을 집어삼킬 준비를 하고있습니다. (예를 들면 리소스를 묶어놓은 R.java 파일 같은 레퍼런스가 없습니다. 흑.)그래서 준비했습니다. 수많은 초보 개발자들이 iOS의 구덩이를 피해갈 수 있는 팁을 말이죠.iOS의 구덩이를 피하는 11가지 방법1.비싼 맥(Macintosh)을 사세요.iOS 개발자에게 MacOS는 필수입니다. XCode가 MacOS만 지원하기 때문입니다. 오픈 소스로 공개된 Swift에는 제약이 없지만 XCode는 MacOS에서만 동작하는 제약이 있습니다. 따라서 맥은 iOS 개발자에게 가장 필요한 준비물입니다. 게다가 하드웨어 리소스를 많이 사용하는 XCode 탓에 더 크고, 더 비싸고, 더 아름다운 맥을 구매하셔야 합니다. Macbook이나 Macbook Air 모두 추천하지 않습니다. 15형 Macbook Pro 모델을 비롯해, Mac Pro나 iMac Pro 등의 고급 모델을 사용하면.. 개발이 잘 됩니다.2.돈을 내세요.iOS를 개발하려면 가장 먼저 Apple Developer Portal에서 연 129,000원의 개발자 프로그램에 등록해야 합니다. XCode를 사용해서 코드만 볼 것이라면 문제가 되지 않지만, 디바이스에 앱을 설치하고, 테스트하며, AppStore에 배포할 거라면 반드시 구매해야 합니다. 이 계정은 앞서 말한 것처럼 1년이 지나면 다시 구매해야 합니다. 만약 기업 개발자로 등록하려면 Enterprise Program이 따로 준비되어 있습니다. 기업을 위해 특화된 In-House 배포 등의 이점이 있습니다. 구매해야할 것이 꽤 많죠? 이제 익숙해져야 합니다.3.XCode를 설치하세요.XCode는 Mac App Store에서 설치할 수 있습니다. 용량이 크기 때문에 설치하기 전에 하드디스크 저장공간부터 확인하는 것이 좋습니다. 처음 실행하면 추가 컴포넌트를 다운로드하는 과정이 실행되고, 그 이후에 XCode를 사용할 수 있습니다. XCode와 관련된 자세한 내용은 아래에서 자세하게 다루겠습니다.4.어려운 것에 대비하세요.1)인증서‘들’XCode 설치 이후에도 몇 가지를 발급 받고, 셋업해야 합니다. 방 탈출 게임처럼 한 단계 한 단계 거치는 과정이 필요합니다. 첫 번째로 인증서‘들’을 발급받아야 합니다. 애플을 대신해 앱을 설치하고, 배포할 수 있는 권한을 위임 받는 과정입니다. 이 인증서들은 Apple Developer Portal의 ‘Certificates, IDS & Profiles’ 항목에서 발급 받을 수 있으며, MacOS의 키체인 앱을 이용해 개인 키를 생성하는 방식으로도 방식으로 발급 받을 수 있습니다. 2)디바이스 등록디바이스-iOS-에 개발한 앱을 설치하려면 애플 개발자 계정에 개발용 디바이스를 등록해야 합니다. 이 과정은 XCode에 신규 디바이스를 연결하고, 빌드 및 배포를 할 때 XCode가 알아서 합니다. 만약 디바이스를 보유하고 있지 않은 상황이라면 해당 디바이스의 UUID를 받아서 개발자 포털에 직접 등록할 수도 있습니다. 3)Bundle IDBundle ID는, 앱의 고유한 ID입니다. iOS가 앱을 식별할 때 사용하는 식별자이며, 보통 ‘com.companyname.appname’ 의 형식으로 회사나 개인의 도메인을 거꾸로 쓰는 것이 보편적입니다. 하지만 Bundle ID는 어디까지나 개발자가 결정하는 영역이므로 인스턴스 이름 지정하듯이 자신만의 고유한 방법을 사용해서 Bundle ID를 지정해도 문제가 없습니다. 4)Provisioning ProfileProvisioning Profile은 디바이스 정보와 앱 정보, 인증서 정보를 매핑해주는 Profile입니다. 최신 XCode에서는 이 Provisioning Profile을 자동으로 관리해주기 때문에 따로 신경쓰지 않아도 좋습니다.5.개발자 포럼에 질문하거나, StackOverflow에 질문하거나!질문하는 사람은 아름답습니다. 궁금하거나, 잘 안 풀리는 코드는 개발자 포럼에서 질문할 수 있습니다. 대신 영어 실력이 좋아야 합니다.크게 기대는 하지 않는 것이 좋습니다. 등록된 discussion에 대한 답글들이 ‘나도 같은 상황이다’, ‘나도 궁금한 점이다’ 등의 다른 개발자들의 답변 정도가 일반적이기 때문이죠.그들의 답변...저는 개발자 포럼보다 StackOverflow를 더 선호합니다. 참여하는 개발자 규모가 다르기 때문에 보다 양질의 정보를 빠르게 찾을 수 있습니다. (하지만 허위 정보도 존재합니다.) Vote 시스템으로 신뢰 높은 정보를 필터링할 수 있으나, 어떤 정보를 선택할지는 당신의 몫입니다.6. iTunesConnect와 친하게 지내세요.앱을 개발했다면, iTunesConnect를 통해 앱을 전 세계의 사용자들에게 배포할 수 있습니다. iTunesConnect는 iOS용으로 개발된 바이너리를 배포하는 등 앱 배포/테스트와 관련된 전반적인 사항들을 관리할 수 있는 포털입니다. AppStore에서 앱을 판매하려면 이 iTunesConnect를 통해 애플과 계약을 해야만 가능합니다. 출시할 앱을 등록하기도 하고, 앱의 사용자들이 어떤 경향을 보이는지 Trend Analysis를 확인할 수도 있습니다.iTunesConnectiTunesConnect에는 다양한 메뉴들이 있고, 앱을 배포하고 관리하는데 필요한 여러 툴이 있으므로 개발 중에 시선을 환기하고자 한다면 iTunesConnect를 한 바퀴 둘러보는 것도 좋습니다. 언젠가는 다 사용하게 될 테니까요.7.앱 개발을 마쳐도 XCode를 사용하세요.앱을 개발하고 iTunesConnect에 업로드하려면, XCode를 통해 간접적으로 바이너리를 업로드하게 됩니다. 서드파티 앱을 사용할 수도 있지만, 제가 주로 많이 사용하는 방식은 XCode입니다. 소스코드가 준비되었다면, XCode 메뉴의 Product > Archive 메뉴를 선택해 XCode가 배포용 앱을 빌드합니다. 빌드가 완료되면, 자동으로 Organizer 창이 열리면서 앱을 업로드할 수 있게 되죠. 이 때 미리 구매한 개발자 계정의 인증서가 준비되어 있어야 합니다. 모든 준비가 완료되고 아카이빙이 완료되면, Organizer의 Archives 탭에서 우측단의 ‘Upload to App Store…’ 버튼으로 바이너리 업로드를 진행할 수 있습니다.8.배포 전에 시험비행을 해봅시다.앱을 개발했다면, 테스트플라이트(TestFlight)를 통해 실제로 앱을 배포하기 전 ‘시험비행’을 할 수 있습니다. iTunesConnect에 관련 테스터들을 등록하고, 등록된 사용자들을 대상으로 미리 앱을 테스트할 수 있도록 요청하는 것이죠. 이 테스트플라이트에 배포된 바이너리를 그대로 AppStore에 배포하게 되므로, 테스트용으로 유용합니다.TestFlight테스트플라이트는 원래 iOS 배포 관리 솔루션을 제공하는 업체였지만 지금은 애플이 인수해 iTunesConnect에서 관리하도록 제공하고 있습니다.9.앱이 죽는다면 Organizer로 확인하세요.iOS는 충돌보고 Crash Report를 Organizer를 통해 오류를 확인합니다. 앱을 설치한 사용자가 동의하면 XCode는 iOS가 앱을 실행하면서 발생한 Crash Report를 애플에 자동으로 업로드합니다. 업로드된 Crash Report들은 XCode의 Organizer를 통해 다운로드하고, 확인할 수 있습니다. Organizer는 XCode > Window > Organizer 항목에서 실행하세요.Organizer와 Crash ReportCrash Report는 Organizer의 상단 Crashes 탭에서 확인이 가능합니다. 또 현재 보고 있는 Crash Report의 어느 부분에서 오류가 발생했는지 알고 싶다면 우측단의 ‘Open in Porject…’ 버튼을 눌러보면 됩니다.10.내 친구 XCode최근 XCode는 메이저 업데이트를 통해 사용성과 퍼포먼스를 향상시켰습니다. 하지만 이만큼 무겁고 느린 통합개발툴 IDE는 이클립스(Eclipse) 이후에 처음입니다. 안드로이드의 경우 IntelliJ 기반의 Android Studio로 쾌적한 개발환경을 제공하고 있는 반면, XCode의 업데이트는 퍼포먼스나 사용성 개선보다는 Swift의 메이저 버전 반영에 더 급급한 느낌입니다. (업데이트 때마다 속지만 ‘혹시 이번에는..’하고 또 속아 넘어갑니다.) XCode 사용을 위한 네 가지 팁을 소개합니다.1)XCode는 모노로그입니다.XCode는 로그를 따로 ‘예쁘게’ 볼 수 없습니다. 검은 화면에 흰 로그가 정리되지 않은 상태로 마구마구 출력됩니다. 개발자들에게는 쥐약같은 상황이죠. 이런 불편한 로그 출력 방식 때문에 저는 별도의 GlobalLogger 모듈을 작성해서 다음과 같은 스타일로 로그를 출력하도록 하고 있습니다.$$ BrandiLogger Error Log ##MESSAGE: Initial Parameter is not exist. ##LOCATION: BRLogPringer.swift @Line: 122 2)iOS개발자를 위한 휴식시간, 빌드 타임XCode의 빌드 타임은 개발자에겐 기나긴 휴식 시간입니다. 소스가 비대해질수록 퍼포먼스는 떨어지며, 담배 한 대를 태우고, 화장실에서 손을 씻고 들어와도 빌드가 절반도 안 된 상황을 마주할 겁니다. 빌드 타임을 줄이고자 구글링을 하면 몇 가지 팁을 발견할 수 있는데, 특히 빌드 타임을 가장 많이 단축할 수 있는 방법이 있습니다.짜잔! 공개합니다!먼저, 프로젝트 셋팅의 ‘Build Settings’ 항목에서 ‘Optimization Level’을 검색합니다. ‘Swift Compiler - Code Generation’ 항목을 찾을 수 있는데요. 여기서 Optimization Level의 Debug 항목을 ‘None’으로 설정하면, 빌드시간이 엄청나게 줄어든 것을 확인할 수 있습니다. Brandi iOS 버전의 소스코드는 원래 컴파일에 7분 이상이 소요되었지만, Optimization Level을 변경한 후 1분 내외로 단축되었습니다. Optimization Setting을 변경할 때는 꼭 Debug 항목만 변경하고, Release 버전은 기존 설정을 유지하는 것이 좋습니다. 그래야 빌드 과정에서의 버그를 막을 수 있기 때문이죠. 만약 이 설정으로 개발하던 도중 소스가 충돌되면 Command+Shift+K 단축키를 눌러 소스를 한 번 클린하고, 재빌드하세요. 충돌이 사라지는 경우가 많습니다. 빠른 빌드를 위해 종종 감수해야 하는 부분이기도 합니다. 3)Derived Data빌드가 자꾸 안되고 꼬일 때는 Derived Data 폴더를 삭제 해 보세요. Derived Data 폴더는 XCode > File > Project Settings(Workspace Settings) 항목에서 ‘Derived Data’ 항목 아래의 폴더 경로에서 접근할 수 있습니다. Derived Data 접근 경로Derived Data 폴더를 삭제하면 거짓말처럼 빌드 오류가 사라지는 기적을 만날 수 있습니다. 4)CocoaPods‘바퀴를 두 번 발명할 필요는 없다’는 격언이 있습니다. 이것을 개발에 적용하면 ‘잘 만들어진 라이브러리를 사용하라’ 정도가 되겠습니다. 개발자의 개발 시간을 현저하게 단축시키는 오픈소스 라이브러리. 이것들을 간편하게 사용하는 방식이 iOS에도 존재하는데, 바로 CocoaPods입니다. 프로젝트 Root 폴더에 Podfile을 생성하고, 원하는 오픈소스 라이브러리들을 명시한 후에 ‘pod install’ 명령어를 입력해주면….CocoaPods오픈소스 라이브러리가 설치되었습니다. 귀찮은 소스 다운로드와 임포트 과정을 거치지 않아도 됩니다. CocoaPods 설치와 사용에 관한 글은 구글링으로 쉽게 찾을 수 있습니다. 꼭 사용하길 권합니다.Mac App Store에서의 XCode 평점XCode는 느리고 불편합니다. 숨겨진 편의기능도 많지만 고질적인 빌드 문제와 사용성 문제를 마주하면 높은 평점을 줄 수가 없습니다. 그런데, 저만 그렇게 생각하진 않더라고요.(위 스크린샷 참조) XCode의 사용법은 기회가 되면 따로 정리하겠습니다.11.어떤 경우에도 대응할 수 있는 화면 구성을 원한다면, AutoLayoutiOS를 사용하면서, 금융권이나 쇼핑 앱들을 사용하다 보면 이런 상황이 발생합니다. 금융권 앱. 화면에 꽉 차지 않는 레이아웃 혹은 비정상적으로 커진 글씨본래 iOS는 단일 디바이스를 지향하는 플랫폼이었습니다. 아이폰 시리즈도 해상도가 변하지 않았기 때문에, 디바이스 종류가 많은 안드로이드처럼 다양한 스크린 사이즈를 지원할 필요가 없었습니다. 하지만 이제는 iPhone SE, iPhone 8, iPhone 8 Plus의 해상도에 iPhone X의 해상도까지 더해지면서 그야말로 ‘해상도 춘추전국시대’가 되었습니다.이런 다양한 해상도를 모두 지원하는 레이아웃을 구성하려면, iOS에서는 AutoLayout을 사용해야 합니다. AutoLayout은 Xib Editor에서 AutoLayout을 활성화하는 방식으로 사용할 수 있습니다. 거기에 한 가지 덧붙이면 Layout Constraints라는 개념도 있습니다. 레이아웃에 조건을 주는 방식입니다. 예를 들어 ‘어떤 해상도에서든 이 컴포넌트는 왼쪽 끝으로부터 10Point의 여백을 가지도록 한다’ 라는 식이죠. AutoLayout, Layout Constraint이 Layout Constraint를 이용하면 짧은 시간 안에 다양한 해상도를 지원하는 레이아웃을 쉽게 만들 수 있습니다. 가히 AutoLayout의 꽃입니다.ConclusionXCode/iOS 개발과 관련된 팁은 대부분 구글링으로 찾을 수 있습니다. 다룰 내용이 많지만 초보 iOS개발자들이 당황할 수 있는 내용을 중심으로 글을 썼습니다. 소소한 이야기지만, 분명 도움을 받을 수 있을 겁니다.글이정환 과장 | R&D 개발1팀[email protected]브랜디, 오직 예쁜 옷만#브랜디 #iOS #개발기 #업무환경 #인사이트 #경험공유 
조회수 1077

2016, 개발자의 Life.. 꿈...#1

주변 개발자들의 삶이 매우 행복을 추구하는 삶으로 변해가고 있다는 것을 느낀다. 주변의 개발자들의 모습을 몇 가지 정리해보자. 이를 '지속 개발을 위한 개발자 Life 스타일'이라고 정의하겠다.개발자#A10년 넘게 개발하던 패키지를 기반으로 필요 기능을 최소화하여 1인 개발기업에 성공하였고 제주도로 내려가서 지역에 속한 분들과 호흡하는 삶을 추구하면서도 소프트웨어 개발의 핵심을 잃지 않았다. 정말, MVP 기능에 최대한 집중하면서 필요한 시장 영역을 더 확대하지 않고, 소프트웨어를 개발하고 있는 개발자와 해당 소프트웨어를 사용하는 고객과 시장에 대해서 같이 합리적으로 지속할 수 있는 지속할 수 있는 소프트웨어 개발의 삶을 이루었다.그리고, 그러한 Life환경을 주변에 전파하면서 불과 얼마 전 또 한 명의 구 루급 개발자에게 비슷한 삶의 길을 가르쳐준다. 정말 부러운 개발자들...개발자#B복잡한 업무나 더 많은 보수를 위해서 더 좋은 회사를 찾기보다는 삶이 존재하는 근무시간을 위해서 재택근무를 찾고 있다. 비용도 최대한 낮추면서 생활을 위한 회사를 찾아다니고 있다. 아무래도, 외국계 개발회사를 선택할 것 같다.개발자#C오픈소스 진형에서 인정받는 개발자이다. 본인이 원하는 오픈소스 프로젝트를 추진하는 것을 보장받고 외국계 기업의 원격근무를 선택했다. 보수도 나쁘지 않고, 근무시간은 알아서 하는 것이지만, 원격으로 일하는 것이기 때문에 '능력'을 보여주기 위해 더 많은 시간을 소프트웨어 개발에 투자한다. 굳이, 서울 시내에 있을 필요가 없기 때문에 외각으로 집도 옮겼다.개발자#D일부러, 실리콘 벨리의 스타트업을 선택했다. 조만간 상장 예정인데 매우 큰 혜택을 받을 것 같다. 그 역시 지속 개발이 가능한 삶을 추구한다.2016년 올 초의 개발자 트렌드는 '지속 개발을 위한 Life'를 지향하는 개발자들이 늘어났다고 평가해본다.우리 모두 지속개발이 가능한 삶을 지향해 보는 것은 어떨까나...
조회수 1104

모르면 난리 나는 인스톨 이후 지표들

우리가 마케팅 임원이라고 생각해 보도록 하죠. 팀원들이 이번 캠페인의 성과를 보고하러 왔습니다. 팀원들에게 단 하나의 질문만 할 수 있다면 무엇을 물어 보시겠습니까? 저라면 이 글에서 소개할 다섯 가지 데이터 중 하나를 선택해 질문할 것입니다.앱 인스톨 이후(Post-Install)에 인게이지먼트로 인해 얼마나 긍적적인 성과가 나타나는지를 확인할 수 있는 다섯 가지 주요 지표를 소개합니다. 이 중에는 앱 서비스의 OMTM(One Metric That Matters)으로 관리해야 할 지표도 있을 것입니다. 1. N-day Retention특정 날짜까지의 리텐션을 의미합니다. 대부분의 분석 툴이 30 Day 리텐션까지 데이터를 제공하지만, 각 앱마다 유저에게 제공하는 서비스가 다르기 때문에 앱 고유의 N-day 리텐션을 정해놓고 관리해야 합니다.게임 앱은 주로 30D 외에도 1D, 7D 리텐션을 관리합니다. 1D 리텐션이 40%를 넘는다면 유저들의 반응이 상당히 좋은 것으로 생각해도 됩니다. 7D 리텐션은 보다 복합적입니다. 만약 7D 리텐션이 15% 이하라면, 게임의 난이도가 높다거나 흥미를 유발하는 요소가 부족한 것일 수 있습니다. 출석이나 레벨 업 보상을 늘려서 게임을 보다 쉽고 재미있게 진행할 수 있도록 하는 것도 좋습니다.이커머스는 앱의 성격이 오픈마켓인지 아닌지에 따라서 리텐션이 크게 달라집니다. 오픈마켓 성격이 강하다면 3D 이후의 리텐션이 크게 떨어집니다. 그렇지 않고 컨텐츠나 스타일링 제안이 성공적으로 추가된 서비스라면 30D 리텐션이 15~20%에 이르기도 합니다. 2. DAU앱의 방문수(세션)가 앱을 사용하는 ‘횟수’라면, DAU(Daily Active Users)는 하루에 앱을 사용하는 ‘사람 수’를 말합니다. 큰 의미가 없어 보이는 ‘싱거운 지표’라고 생각할 수도 있지만 결코 무시해서는 안되는 지표가 DAU입니다.예를 들어 하루에 앱이 100번 실행되었다고 가정해 보겠습니다. 1명이 100번 실행한 것과, 100명이 각각 1번씩 실행한 것 중 어떤 경우가 조금 더 바람직할까요? 당연히 후자입니다. 비용을 지불하는 것은 ‘횟수’가 아니라 ‘사람’이기 때문이죠! 유저를 더 모으기 위해 마케팅을 하는 것도 결국 같은 이야기일 것입니다.또한 DAU는 다양한 파생 지표의 모수가 되기도 합니다. 유저 한명이 하루에 몇 번 앱을 실행하는지는 ‘DAU당 방문수(세션)’로, 몇 개의 페이지를 조회하는지는 ‘DAU당 페이지뷰’로 확인할 수 있습니다. 그리고 나중에 소개할 ARPDAU도 그 중 하나입니다. 3. MAUMAU(Monthly Active Users)는 한 달 동안 앱을 사용한 순수(Unique) 유저수를 말합니다. 장기적인 관점에서 앱의 외형 성장과 밀접한 관계가 있는 지표입니다. 실제로 앱의 금전적인 가치를 평가할 때 MAU, 그리고 MAU당 매출액 등의 수치를 중요하게 참고하니까요.만약 4월 MAU가 1만명이라고 가정해 보겠습니다. 이 1만명은 한달 동안 우리 앱에 비용을 지불할 가능성이 있는 유저 풀이 됩니다. 특히 월 단위 구독(Subscription) 중심의 컨텐츠 서비스나 게임이라면, MAU 증가가 곧바로 매출 증가로 이어지므로 가장 중요하게 관리하게 되는 지표입니다. 이런 경우라면 UA(User Acquisition) 캠페인의 궁극적인 목적도 MAU 성장이 될 것입니다.MAU를 높이기 위해서 대규모 UA를 준비하고 있다면 UA 이전의 Stickiness(고착성) 수치를 UA 이후의 수치와 비교할 필요가 있습니다. Stickiness는 사용자들이 앱을 얼마만큼 자주 사용하는지를 확인할 수 있는 효율적인 지표입니다. [DAU / MAU * 100] 공식으로 계산하면 됩니다. 평균 이상의 게임이라면 20%를 상회하는 Stickiness가 나온다고 알려져 있습니다. UA를 통해 MAU가 늘었으나 Stickiness가 눈에 띄게 줄었다면 완벽하게 성공적인 캠페인은 아니었다고 판단할 수 있을 것입니다. 4. ARPDAU드디어 매출액 관련 지표가 나왔습니다. ARPDAU는 Average Revenue Per Daily Active Users의 약자로, 1일간 앱에서 발생한 매출액을 1일간 앱을 실행한 유저 숫자로 나눈 금액을 의미합니다. 공식으로 표현하면 [1일간 매출액 / DAU] 입니다. 오늘 앱에서 발생한 매출이 1백만원이고 DAU가 50명이라면, 공식에 따라 ARPDAU는 2만원이 됩니다.특히 게임 앱은 신규 유저가 많이 유입되면 ARPDAU가 요동치는 경향이 있는데, 유저의 유입이 크게 늘면 ARPDAU가 일시적으로 하락하는 경우가 많습니다. 그래서 유입된 유저 숫자에 따른 적정 ARPDAU 하락폭을 발견하는 것이 중요합니다. 유저의 유입에 비해 ARPDAU가 지나치게 하락하는 시점을 파악하고, 그 이후 ARPDAU가 정상 수준으로 회복되는지를 추적 관찰해야 하기 때문입니다.유저들의 대다수는 30일 안에 앱을 떠날 것이고, 경쟁 서비스가 있기 때문에 우리가 UA로 확보할 수 있는 유저의 숫자도 한계가 있습니다. 따라서 신규 유입이 정체된 상황에서 ARPDAU가 하락하고 있다면 위험한 신호로 받아들여야 합니다. 5. LTVLifetime Value를 줄여서 LTV로 부릅니다. 과거에는 주로 CLV(Customer Lifetime Value)라고 사용 했었지요. 경영학에서 말하는 ‘고객생애가치’가 바로 LTV입니다. 고객이 자신의 전 생애에 걸쳐 우리 서비스에 지출한(또는 지출할 것으로 예상되는) 총 비용이라고 할 수 있습니다. 그래서 LTV를 통해 우리는 매우 단순하고 당연한 결론에 이르게 됩니다. ‘비용보다 LTV가 크면 성공이다’라는 결론 말입니다.자연스럽게 앱 마케팅의 LTV가 궁금해 지는군요. LTV 계산을 위해서는 ‘고객의 생애’가 언제 끝나는지를 알아야 하는데, 유저가 앱을 완전히 떠나버린 – 다시 말해 앱으로 돌아올 가능성이 전혀 없는 – 시점을 알 수는 없다는 것이 문제가 됩니다. 그래서 보다 ‘현실적인’ 방법으로 LTV를 계산해야만 하지요.첫번째 ‘현실적인’ 방법은 평균사용일수와 ARPDAU를 곱해서 Actual LTV를 계산한 다음 적절한 예측모델을 적용해 미래의 LTV를 추정하는 것입니다. 특정 코호트의 30일 리텐션이 아래 표와 같다고 가정해 보겠습니다.코호트1D2D3D4D5D6D7D...30DA 매체 유입 유저50%40%30%20%20%15%10%...5%이 코호트의 1개월 평균 사용일수는 아래 수식으로 계산할 수 있습니다. 0 Day의 리텐션을 1(100%)로 놓고 다음날부터의 리텐션을 모두 더해 나가면 됩니다.(1 + 0.5 + 0.4 + 0.3 + 0.2 + 0.2 + 0.15 + 0.1 + … + 0.5) = 평균 사용일수이렇게 구한 30일 평균 사용일수에 30일 평균 ARPDAU를 곱하면 30일간의 Actual LTV가 됩니다. 30일 평균 ARPDAU는 아래 공식으로 계산하면 됩니다.30일간의 ARPDAU 합계 / 30 = 30일 평균 ARPDAU이렇게 계산된 Actual LTV를 적절한 예측모델에 입력해서 미래 특정 일자의 LTV를 예측해볼 수 있습니다. 앱의 특성에 따라 다양한 예측모델을 적용할 수 있겠지만, 중요한 것은 일반적인 리텐션 그래프는 아래 그림과 같이 감소하는 지수함수(Exponential Function, y = ax^b)의 형태를 가지므로 거듭제곱을 활용한 예측모델이 결정계수(R제곱)가 높을 것입니다.두번째 ‘현실적인’ 방법은 누적 ARPU에 예측모델을 적용하는 것입니다. 예측모델의 신뢰도를 높이려면 특정 코호트의 ARPU를 적어도 30일 이상 측정한 데이터가 있는 것이 좋습니다. 아래 그림은 누적 ARPU 차트의 일반적인 형태입니다. 여러분 앱의 누적 ARPU 역시 매우 높은 확률로 아래 그림과 유사한 곡선을 그리게 될 것입니다. 전형적인 로그함수(Logarithm) 그래프죠. 그래서 누적 ARPU에 적합한 예측모델은 로그함수를 기반으로 하는 것이 좋습니다.Source: https://gameanalytics.com/기본적으로는 예측된 LTV와 마케팅 예산을 비교해 봄으로써 비용의 적정성을 파악할 수 있습니다. 그리고 유저의 인구통계정보(성별, 연령, 회원등급 등)별 코호트를 비교해보면 타겟 고객이 누구인지도 알 수 있겠지요. 경우에 따라서는 지역별 코호트를 비교함으로써 잠재시장을 파악할 수도 있을 것입니다.

기업문화 엿볼 때, 더팀스

로그인

/