스토리 홈

인터뷰

피드

뉴스

조회수 1109

매쓰플랫 작은 설명회 현장 스케치 Go Go ♪

안녕하세요. 매쓰플랫입니다 :)얼마전 매쓰플랫 본사에서 소규모 선생님을 모시고,소규모 설명회를 진행했어요!적극적인 참여와 소통의 시간지금부터 현장 속으로 들어가 볼까요?본사에서 소규모의 선생님을 모시고 진행하는 설명회가 처음이라,설레이는 마음으로 스탠바이 중!설명회 시작 전,대기하는 동안 심심하지 않도록'실제 활용 선생님 인터뷰 영상'과 '간식'을 준비했어요!오전에 진행하기 때문에,빈 속으로 오시는 선생님을 위한간단한 간식은 센스!매쓰플랫에 대한 소개 발표로 설명회 START!주요 기능에 대한 간단한 설명부터실제 성공적인 학원 사례까지!전반적인 설명을 들을 수 있는 시간이었어요.또한, 설명회 준비 기간 내내우리 선생님들에 어떤 자료를 드리면 도움이 될까고민 또 고민하였어요.그 결과 많은 선생님들이 궁금해 하시는초등연산 학습지, 개념 추가 학습지 등등!하나의 파일로 묶어서 모든 선생님들께 제공해드렸어요.마지막으로는 매쓰플랫 가이드 영상 목소리의 주인공!CS팀 매니저님께서프로그램이 어떻게 구성되어 있는 지'대표 기능 시연'을 보여드렸어요.학습지 만들기, 시중교재 연동, 보고서 생성 등등현재 많은 선생님들께서 사용하는 기능을 직접 보여드렸어요.선생님들께서 설명을 들으면서직접 바로 체험을 해볼 수 있었기 때문에기능에 대해서 좀 더 친숙해지는 시간을 가졌어요~!매쓰플랫의 여러 기능들을 직접 체험해보면서,평소 궁금했던 내용을 바로 바로 질문 할 수 있었던 소중한 시간 ♥선생님들의 솔직담백한 중요한 자산인피드백을 적극적으로 들을 수 있었어요~!기능 체험 이후에는,좀 더 깊이 있는 이야기를 원하는 선생님을 위한1:1 상담 시간을 가지면서 설명회는 끝이 났어요.click! click!♥ 매쓰플랫 무료체험 알아보기 ♥http://bit.ly/2EtgSfs가장 빠르고 간편하게 문의하기
조회수 1164

멀린 선생님을 찾습니다.

(출처: 미드 마법사 멀린 중에서)필자는 멘토라던가 컨설턴트가 아니라그냥 수많은 창업자 중 한 명일 뿐이다.몇 번 창업 해보다가금방 그만두고그걸 경력 삼아서훈수놀이하는소수의 자질 없는 창업 컨설턴트라던가,누구에게나 공개 되어있는정부지원책이나 인프라, 지원스케쥴 같은 걸컨트롤 C+ 컨트롤 V해서두 세시간 읽어주고컨설팅 수수료 챙겨가는일부 비양심적인 멘토들때문에좋은 선생님들이 설 자리를 잃고,좋은 멘토들을 만날 기회가 더 줄어들고,많은 창업자들이 더 방황한다.어떤 분이 그런 사람들을 일컬어"좀비멘토"라고 부르던데...딱 그 표현이 맞는듯하다.좀비기업, 좀비멘토좀비가 넘쳐나는 세상이다.어쨋든...멘토에 대한 선입견이 생길까봐노파심에 글을 남긴다.기본적으로 멘토링은 창업자에게유익한 선택보조 Tool(도구)이다.무슨 결정이든 선택은오롯이 대표자의 몫이겠지만우리의 인사이트는 생각만큼 그리 넓지않다.특히 개발자/연구자 출신이거나제품/서비스 영역에 좀 문외한인 컨셉형 기획자의 경우,매우 빈약한 인사이트와 사업에 대한좁은 편견 덩어리를 가지고 있다.동료들 중 현명한 멀린(아더왕의 스승)이있다면 모를까보통은 동료들도 창업자와 비슷하게생각하고, 원하는대로 보는 경향이 있다.그러다보니외부의 전문적인 식견을 가진 멘토들이 필요하다.이해관계가 없으니쓴소리도 거침없이 해 주고창업자 그룹이 몰랐던가, 애써 외면중인핵심 문제를 들춰내 줄 수 있는 멘토는선생님으로 모셔야 한다.(출처: 뭉크의 절규, 혼란스럽다)종편 방송을 보다가참 웃긴 모습을 보았다.전문가 패널로 등장한 어떤 분이A 방송채널에서는 "심리전문가"로 나와서 주절거리다가B 방송채널에서는 "정치평론가"라는 타이틀로 주절거린다.이러다 스포츠 채널까지 나와서"축구해설가"로 나오는건 아닌지 모르겠다.스타트업 관련 글을 보고 공감가서좀 찾아보니 하는 일이 창업컨설턴트란다.뭐 그럴수도 있지.창업컨설턴트라는 분야를 스타트업하는거겠지.근데 더 찾아보니까...참 애매모호하게상업적인 홍보인 거 같기도하고,친절하게 블로그나 홈페이지를 찾아갈 수 있도록실마리를 남겨두었다.뭐 그럴수도 있지.글을 쓰다보면, 의도하지 않게 드러날 수도 있지.다 읽고 나니까창업자의 경험담이라던가노하우라던가 공감 스토리라기 보다는컨설팅을 받아야겠다는 생각이 불현듯 든다.뭐 그럴수도 있지.요즘 내가 예민한가보다.다시 본론으로 돌아와서,멘토를 만나는 것은 쉽다면 쉽고,어렵다면 어려운 일이다.1. 강연이나 모임에서 만날 수 있는 멘토일단 강연이나 네트워크데이, 창업자 파티 같은 모임에들락거리면 많은 유명한 멘토님들을 마주 할 기회가 있다.대부분 매우 바쁜 분들이라명함 주고 받고 돌아서면, 연락이 지속되지 않는다.정말 도움받고 싶어서 멘토로 모시고 싶다면,엄청나게 매달리고, 귀찮게 하고, 꾸준히 괴롭혀야 가능하다.그리고 강연이나 모임에서 만난 멘토라고다 뛰어난 멘토는 아니다.어떤 분들은인맥이나 지인 또는 한두번의 유명세 때문에그 자리에 올라온 분들도 있기 때문이다.2. 현업 멘토현업에서 종사한 경력자 또는 전직자, 현직자만큼강력한 멘토는 드물다.물론 전직자의 경우, 더 얻을 수 있는 게 많다.(완전 공포판으로, 무시무시한 현실을 깨닫게 해 줄 것이다.)때로는 멘토이면서, 파트너를 얻을 수도 있다.일거양득이겠지만,한편으로는 비용부담이라던가기존 멤버와의 교통정리로 머리가 아프겠지만이런 멘토를 멤버로 얻을 수 있다면,해볼만한 딜이 아닐까?하지만,반대로 조심할 것은패배주의가 전염될 수 있다는 점이라던가,기존에 실패한 원인을 그대로 답습하게 되는 경우를주의해야한다.또한,동료로 받아들였는데중간에 아이템을 가지고 나가서다시 창업하는 사례도 있더라.현업 경험이 있다보니,아이템 가로채서 더 업그레이드 된 버전으로더 빨리 출시하는 못 된 사람도 있다.뭐 하나하나 다 의심하면 한도 끝도 없지만,그렇기 때문에 여러번 만나보고,심사숙고하여 결정해야 한다.3. 인간이 아닌 멘토바로 인터넷과 책!필자가 가장 자주 찾는 멘토가바로 도서관이나 서점의 책이며, 인터넷이다.전문 기술에 대한 멘토링도,창업자가 갖추지 못한 능력에 대한 멘토링도뭐든 가능한 전지전능한 멘토랄까?그리고 일단 뒤통수치거나일일이 스케쥴 잡거나 모셔오는 수고로움이 없다.(출처: 구글, 외로움)4. 때로는 감성의 멘토창업자는 외롭다.꼭 사업에 관한 멘토가 아니라삭막해져가는 정신에,그냥 하루 정도만 내 편이 되어줄 멘토가 필요하다.필자는 토끼같은 아내와 더 토끼같은 아이가 있어가능하다고 말하고 싶지만....사실은 다른 영역, 다른 분야지만같은처지의 창업자끼리 서로 멘토가 되어주는게더 편하고, 힘이 되더라.(여보~! 미안해요. 하지만 이게 진실이예요)5. 업무 최고의 멘토는 동료(직원)회사가 굴러가는거에 가장 민감하고 센서티브한 사람은 직원이다.사실 대표자는 이리저리 불려가고, 돌아다니고 하다보니회사에서 보내는 시간보다 바깥활동이 더 많을 수 있다.그런데...회사의 위험신호가 숫자로 환산되어대표에게 도달했을때는 이미 늦은 타이밍이다.그 숫자만큼 비용과 시간과 인력을 투입해서수정해나가야 하기에 스타트업에게는 치명적이다.하지만 실시간으로 가장 빨리 알아낼 타이밍은직원들을 통해 알 수 있다.회사의 분위기, 업무 과정 상의 사소한 트러블 등에 대해자신도 모르게 Daily check하고 모니터링하는 사람들이바로 직원들이다.다른 건 몰라도,직원들을 대할 때, 좋은 멘토 선생님 모시듯이경청해야 한다6. 고객, 협력사, 전문가 멘토링약간 식상할 내용이겠지만,"고객이 최고의 멘토입니다."란 말은 굳이 설명 안해도 되겠지?협력사의 조언이나 불만도,법무사나 회계사, 변리사 등 외주의뢰를 통해연계되어진 전문가 집단의 코멘트들도 좋은 멘토라는당연한 이야기.7. 그 외의 멘토필자의 은사 중에 대학교수님이 계시다.내가 졸업한 학교 교수님은 아니지만,어째저째 이쪽 일을 하면서 가까워지고,나와는 전혀 다른 인사이트로 재해석 해 주는 분이다.업무상 많은 대학교수를 알고 있지만주로 기술적인 멘토링이었다.하지만, 요즘은 다양한 분야의 교수들과인프라를 통해 여지껏 생각치도 못한콜라보 아이디어 컨셉이 되어간다.사업을 하다보면,1년에도 수 십번씩 발표자의 위치에서심사를 받곤 한다.그때, 가능하면 심사하신 분들을 기억하라.그리고 향후에 만나 멘토링을 받는 것도 좋은 방법이다.정말 수수료를 줘가면서컨설팅을 받아야할 상황은 따로 있다.그 때는 정말 외부에서 악역을 맡아줘야할 상황이거나매우 민감한 법률적, 제도적 규제를 피하기 위해서라던가시장/고객조사 등의 전문적인 영역에서 필요하다.하지만 찾아보면,우리가 소소하게 또는 상시로멘토링 받을 수 있는 멘토들이 즐비하다.다만,매칭이 안되고 있을 뿐이고,우리는 매칭을 위한최소한의 노력조차 안하고 있는 것 뿐이다.내가 좋아하는 약간 판타지적인아더왕의 이야기를 억지로 끼워 맞춰보자면,아더는 유약하고 풋내나는 15세 꼬맹이에 불과했다.하지만 멀린이라는 스승의 도움으로 그는 왕이 되었다고 한다.아더왕의 전설에는 엑스칼리버라는 칼을 뽑아 왕이 되었다고 하지만...사실 그 칼은 상징일 뿐이다. 절대로 칼이 왕을 만들어주지 않는다.오히려 아더왕은멀린의 조언과 가르침,평등한 발언권을 가진 원탁의 기사들과,평화와 안전이라는 서비스에 신뢰로 지불하는 백성 고객들(?)로구성된 스타트업 이야기랄까?엑스칼리버란 아이템은 단지 거들뿐!나는 아직도 더 많은 멀린을 찾고 있다.#클린그린 #스타트업 #스타트업창업 #초기창업 #조언 #인사이트 #구루 #스승 #멀린
조회수 1649

GDG DevFest Seoul 2018, 크래커나인 부스 참가 후기

2018년 11월 10일 토요일, 세종대학교 광개토관 컨벤션홀에서 GDG DevFest Seoul 2018이 열렸습니다. 세종대학교 광개토관 컨벤션홀 세션장과 세션 소개지GDG 행사 중 가장 큰 개발자의 축제에 크래커나인이 빠질 수 없겠지요?GDG DevFest는 GDG 커뮤니티에 의해 매년 개최되는 개발자 행사 중 하나로, 올해는 'Digital Wellbeing' 이라는 키워드 아래 진행되었습니다.이번 행사는 구글 기술과 관련된 세션, 해커톤, 코드랩 등의 형태로 구성이 되어 짜임새 있고 더 유익했습니다.⬆️ 위의 시간표 출처: 티켓구입처(https://festa.io/events/88)여기서 코드 랩은 무엇인지 궁금 하시지요?* Codelab은 미리 작성된 가이드를 따라 빠르게 해당 기술의 튜토리얼을 해볼 수 있는 프로그램이였어요. Codelab 튜터가 상주하고자유롭게 출입해 시작할 수 있다는 큰 매력으로 많은 개발자님들이 참여해주셨습니다.이미지 출처: https://devfest-seoul18.gdg.kr/timetableTrack E에 후반에 진행하는 마인드폴니스는 이번 'Digital Wellbeing' 키워드에 가장 걸맞았어요.* Mindfulness는 경직된 자세로 오랜 시간 작업을 하기 쉬운 개발자들을 위해 명상을 하는 시간을 가지는 프로그램입니다.저희 크래커나인 팀원들도 마인드폴니스에 참여하여 힐링하였다고 하네요 :)이미지 출처: https://devfest-seoul18.gdg.kr/timetable그 밖의 세션들은 Android, Firebase, Google Cloud Platform, Machine Learning, Web Technologies, Chrome 등의 Google 개발자  기술  콘텐츠 뿐만  아니라  더  나아가  트렌드에  부합하는  많은  주제를  폭  넓게  다루는  다양한  시간이었습니다.이미지 출처: https://devfest-seoul18.gdg.kr/timetable단 5분만에 디자인을 코드로 만들어주는 크래커나인은 행사의 꽃, 부스 참가하였습니다.구글 코리아, 레이니스트, 카카오페이, 알지피코리아 등과 나란히 부스 참가하여 많은 개발자님들을 만날 수 있었습니다.이미지 출처: https://devfest-seoul18.gdg.kr크래커나인은 10월 1일 부터 GDG DevFest Seoul 2018을 준비하기 시작했습니다.더 많은 개발자님들에게 편리하고 효율적인 크래커나인을 소개하여 작업 속도와 능률을 올리고자 했습니다.대략 40일간 준비하면서 진짜 디자이너와 개발자가 원하는 바가 무엇인지도 생각해보는 뜻깊은 시간들 이었습니다.먼저, 개발자님들의 애정한다는 스티커를 팀 명함과 함께 제작하였습니다.또한 많은 분들에게 크래커나인 무료 베타 서비스와 더불어 선물을 선사해드리고 싶어 경품 이벤트도 진행했답니다 :)  국내에서 다수가 사용하는 GUI 가이드 프로그램 제플린의 아성에 도전하는 크래커나인!실제 크래커나인을 사용하면 GUI 정보는 물론, 안드로이드 코드까지 생성해주어 매우 효율적입니다. 실제 블로터에 메인 게재될 만큼 혁신적이고 획기적인 크래커나인을 많은 분들께 소개하려니 너무 설레였습니다 :)“디자인만 하면 코드 자동 생성”…‘크래커나인’ 베타 출시코드를 '클릭'으로 해결해준다.www.bloter.net이 날, 제플린 vs 크래커나인 속도 테스트 영상을 공개하여 큰 이슈를 받았는데요~ 많은 개발자님들의 환호와 관심에 더욱 더 좋은 기능과 서비스로 보답해야 겠다는 마음이 커졌습니다.   제플린과 크래커나인 속도 테스트 영상 궁금하시지요?Cracker9 VS Zeplin (19sec)똑같은 앱 화면 디자인을 크래커나인과 제플린을 사용하여 GUI정보를 받아 안드로이드 스튜디오를 이용하여 화면을 구성하기 까지의 작업 속도를 비교한 영상입니다. 안드로이드 코드까지 생성해주는 크래커나인은 5분대에 화면 완성! GUI가이드문서를 만들지 않아도 빠르고 간편하게 GUI가이...youtu.be코드 생성 프로그램은 기존에도 존재한 적 있지만, GUI 정보와 안드로이드 레이아웃 코드까지 클릭만으로 뽑아주는 크래커나인은 그야말로 +_+ 최고!실제 사용해보고 시연할 수 있는 곳을 만들어 많은 개발자님들의 검증도 받았답니다.  믿음이 가는 코드에 만족하셨나요?스피드하게 짜는 손코딩 장인 "시니어 개발자"도~알아가는 단계지만 꼼꼼하게 체크하며 한땀한땀 작성해가는 "주니어 개발자"에게도~시연, 체험했던 크래커나인!개발자님들에게 편의성 뿐만 아니라 신뢰성 마저 안겨주었던 좋은 기회였습니다. :)그 밖에도 카카오인형 경품으로 많은 인원을 모은 카카오페이는 "요즘개발자, 카카오페이" 라는 카피와 QR 코드로 부스를 장식했습니다. 명함 이벤트를 진행한 요기요 배달통 부스는 경품 당첨때만 인산인해를 이루었답니다. 갑자기 많은 개발자님들이 당첨 여부 확인하러 오셨다가 저희 부스에 와주셔서 또 다른 기회로 크래커나인을 소개할 수 있었답니다 :) 세션에 참가하여 각자의 생각과 견해를 적어주신 개발자님들께도 감사의 인사를 드립니다.세션의 상세내용은 아래의 포스트에서 좀 더 자세히 보실 수 있습니다.※ 디테일한 강연내용과 후기를 남겨주신: http://eclipse-owl.tistory.com/18?category=1022165※ 자신의 견해와 행사의 세션 정리를 잘 해주신: https://brunch.co.kr/@oemilk/196#에이치나인 #디자이너 #개발자 #협업툴 #크래커나인 #솔루션기업 #이벤트참여 #이벤트후기
조회수 1613

한국의 스타트업이 어려운 이유

벤틀리라는 고급차가 있다. 가장 비싼 차라고 불리며, 가격은 기본 깡통 형태로만 봐도 2억 5천이 넘는다. 실제 사용자의 취향을 맞추고, 실제 운행할 수 있는 형태가 되면 그 가격은 정말 고가이다.다음에서 검색해본 벤틀리의 가격이다.벤틀리가 매우 흥미로운 서비스를 시작했다. 아직은 '시험'서비스이지만, 미국 캘리포니아에서 벤틀리 오너들을 대상으로 서비스를 개시한 것은 바로 '이동 주유 서비스'이다.벤틀리 오너가 스마트폰 앱을 사용해서 서비스를 호출하면 직접 주유차가 방문하여 기름을 넣어준다. 비용은 가장 가까이 있는 주유소 3곳 중의 가장 저렴한 곳의 기름값에 추가적인 배달 비용이 일부 추가된다고 한다.이름하여 '필드 포 벤틀리(Filld for Bentley)'라는 서비스가 현재 시범 서비스 진행 중이라고 한다.고급 자동차의 이미지에게 추가적으로 주유 문제의 번거로움을 해소시키기 위해서 이 서비스를 시작했다고 한다. 또한, 벤틀리의 이야기가 굳이 아니라고 하더라도 자동차의 기름량을 체크하여 기름 넣을 시기를 예측하고 적절한 장소를 예측해서 알아서 이동형 주유 서비스를 가동한다면 벤틀리 사용자들은 '주유소'에 가서 기다릴 필요 없이 편안하게 벤틀리를 몰고 다니면 된다.매우 당연하게, 꼭... 벤틀리만 그럴 필요가 있을까?실제, 벤틀리의 서비스 이외에도 앱을 통해서 주문하면 고객이 있는 곳을 찾아가서 휘발유를 주유하는 방문 주유 서비스가 실제 인기를 끌고 있다. 부스터 퓨얼즈(Booster Fuels)라는 이름의 이 업체는 로스 페로 주니어(Ross Pero Jr.)나 마이크로 소프트의 공동 설립자 폴 앨런 등의 자금 지원을 통해서 텍사스에서 사업을 시작했으며, 현재는 미국 10개 도시 이상으로 사업을 확장했다.재미있는 것은 이 서비스는 개인 서비스를 위한 환경으로 시작했지만, 차량 공유 서비스 업체들과 콜라보 하면서 그 서비스를 더더욱 확대하고 있다. 찾아가는 주유 서비스는 이미 흥미롭게 시장에 진입하였으며, 이 서비스를 사용하는 사용자들은 '주유소'를 방문할 필요가 없으므로, 시간 절약을 하는 매우 효과적인 차량 운행이 가능하다.자신의 비어있는 시간이나 행동 패턴을 고려한 '신청'과 '유지보수'체계만으로도 충분하게 서비스를 받고 있다.이 서비스들은 더욱더 발전 가능성을 가지고 있다.일반적인 완성차 서비스로 이동형 주유 서비스를 하거나, 자동차의 상태 값을 체크하고, 위치를 예측하며, 사용자의 행동 패턴을 체크하여 적절하게 주유를 계속 진행하면서 사용자는 '기름의 잔류량'체크 없이 차량을 운행할 수 있는 방법을 제공할 수 있다.전기차의 경우에도 분명하게 '배터리 교환'방식이 가능하고, 허가된 서비스 업체에서 자연스럽게 충전 및 배터리 교체를 해주는 숨겨진 서비스를 제공한다면 이는 분명 효과적이고 의미 있는 서비스가 될 것이다.그런데.. 슬프지만...한국에서는 '이동형 주유 서비스'는 불법이다.슬프지만, 한국에서 이동식 주유는 대부분이 탱크로리를 불법 개조해서 가짜 휘발유를 팔거나 하는 방법으로 이용되는 독특한 기름 체계를 가지고 있기 때문에, '이동형 주유 서비스'는 불법이다. 사실, 가짜 휘발유가 싼 것도 세금 체계 때문인 것이 거의 대부분이고, 이동형 서비스를 여러 가지 관행과 형태 때문에 '불법'으로 취급받는다.또한, 동네 주유소들이 엄청나게 반발할 것이다. 이 문제를 현재 상태에서는 어떻게 할 수 없을 것이다.소비자들에게 더 저렴한 가격이거나 더 서비스를 가능하게 하는 형태의 서비스는 만들 수 있지만, 한국에서는 안된다. 이름하여, 현재 한국의 '창조경제'스타일이며, 기존의 관습과 악습, 관행을 모두 그대로 두고, 새로운 아이디어를 통해서 기존의 생태계가 살아날 방법을 구성하라는 것이 '창조경제'의 핵심이다.슬프지만. 그런 방법은 없다. 절대 불가능하다.왜? 기존의 주유소와 기존 생태계를 위해서 의미 있는 서비스가 왜 사용되지 못할까?마치, 근대시대에 자동차가 만들어지면서 영국에서 자동차가 보급되면서, 마차를 몰고 다니는 마부들이 일자리를 잃을 처지가 되었고, 궁여지책으로 이들 마부들에게 시내를 달리는 자동차의 앞에서 길을 터주는 임무를 주었다는 환경은 왜 이리도 반복되는 것일까?슬프지만, 이런 현상은 대한민국 사회의 전체를 뒤덮고 있다. 동네약국을 보호하기 위해서 의약품 배송은 안되지만, 원격의료는 하자는 의료환경도 황망하고, 차량 공유 우버 서비스는 영업용 택시의 환경을 보호하기 위해서 선택될 수 없다.분명한 것은 정치적으로 변화되는 생태계를 받아들이고, 이를 재교육하는 환경으로 빠르게 전환되어야 한다. 엄청나게 빠른 속도로 초고령 사회로 돌입하고 있고, 최저 생계비를 보전하는 사회제도의 변화 등이 요구되는 것도 이런 4차 혁명이라고 불리는 사회변화를 받아들여야 하기 때문이다.엄청나게 빠르게 진화되고 있는 비즈니스 모델들을 언제까지 버틸 수 있을까? 결국. '경쟁력'자체가 고속화되는 미국이나 일본 등의 해외 선진국의 움직임을 주목해야 한다고 생각한다.당연하지만, 이미 가시화된 4차 혁명을 버티기 위한 사회보장체계도 동시에 진행되어야 하며, 진취적인 업체들의 움직임 들고 흥미롭게 발전하며, 기존 업체들과 경쟁하게 해야 한다.대기업의 동네 빵집은 가능하고, 스타트업이 기존의 업체와 경쟁하지 못한다는 것은 무슨 '힘싸움'문제 정도 평가해야 할까?정치도 선진화되고, 사회복지나 제도도 발전적이어야 한다. 기존 생태계에 종사했던 사람들에 대한 예의도 있어야 하지만, 이미 글로벌 경쟁은 너무도 당연한 시대가 되었기 때문에 경쟁력도 가져야 한다. 사회적인 합의를 위한 어른들도 계셔야 하고...하지만, 그 어느 것도 답답한 현재의 환경에서... 생계형 군대 비리를 허구한 날 보는 현재 상황이 정말 답답할 뿐이다. 절대다수의 사람들의 변화도 없는 모습... 하지만, 포기하지 않는 대한민국의 젊은 사람들의 스타트업은 계속된다는 것이 그나마 희망 아닌 희망일까 한다.연매출 100억대 정도의 적정한 캐시카우를 만들 수 있는 사업모델을 기반하면서도 한국적 관습적 생태계를 파괴하는 스타트업의 탄생을 기대한다.
조회수 1613

잘 팔다가 갑자기 Hazmat Review가 걸렸다?

안녕하세요 대한민국 셀러들의 성공적인 아마존 진출을 도와주는 컨설팅 회사이자 대행사인 주식회사 컨택틱의 이이삭 대표입니다.아마존 판매를 하시다가 봉변을 당하는 사례들이 굉장히 많습니다. 그 중에 요즘 자주 발생하는 문제가 바로 hazmat review로 인해 리스팅이 일시적으로 판매 중지 걸리는 사례입니다. Hazmat Review는 예고 없이 들어옵니다. 그리고 걸리면 해결되기 전까지 리스팅이 판매 정지가 되기 때문에 상당히 골치 아픈 상황이 아닐 수 없습니다. 멀쩡히 판매하던 제품이 Hazmat Review에 걸렸다고요? 안심하십시오. 이럴 땐 2가지만 기억하시면 됩니다.Photo by Louis Reed on Unsplash일단 배경부터 알아볼까요? 도대체 hazmat review가 무엇인지, 그리고 심지어 해당 상품에 대해 FBA 재고를 처음으로 보낼 때 hazmat review를 거쳐서 승인 받았음에도 불구하고 갑자기 이제 와서 ‘다시’ hazmat review를 받으라고 안내가 나오는 이유가 무엇일까요?우선 hazmat review란, haz(ardous) 즉 위험이라는 단어와 mat(erials) 재료/성분/소재 라는 두 단어의 합쳐진 단어에다가 review 검토/승인이 필요하다는 제도입니다. 즉, 아마존 측에서는 해당 상품이 위험 상품 또는 위험 물질을 함유하고 있는 상품일 수도 있다는 판단을 하여, 검토를 요청하게 된 것입니다. 대표적으로 식음료, 신체에 바르거나 접촉되는 제품, 또는 배터리가 있는 제품들이 hazmat review에 걸리게 됩니다.그럼 위험 물질이라고 여겨질 수 있는 모든 제품들이 무조건적으로 hazmat review가 걸리는걸까요? 그건 또 아닙니다. FBM으로 판매하는 경우에는 hazmat review 대상이 아니며, FBA로 판매했을 경우에만 hazmat review 대상이 될 수 있습니다. 그 이유는, 아마존에서는 FBA로 판매할 경우 FBA 직원들이 포장 및 배송을 할 때 상품과 닿을 수 있으니 FBA 직원들의 안전을 책임지는 차원에서 hazmat review를 하게 된 것입니다.그럼 본론으로 들어가기 앞서 마지막으로, 특정 제품을 FBA에 입고하기 전에 분명히 hazmat review를 거쳤고, 심지어 통과까지 해서 멀쩡히 잘 판매하고 있었는데, 예를 들어 1년 뒤에 갑자기 아마존에서 리스팅을 정지시키고 다시 hazmat review를 진행하겠다고 하는 어이없는 경우는 도대체 뭘까요? 여기에 대해 컨택틱에서 알아본 결과, 다음과 같은 안내문을 확인할 수 있었습니다.아마존으로부터 온 이메일 예시핵심적인 내용만 요약하자면, 아마존은 FBA 창고에 있는 제품들을 정기적으로 확인해서 hazmat 여부를 확인한다는 내용입니다. 따라서 이미 hazmat review를 받고 승인 받은 제품이라고 하더라도, 이렇게 정기적으로 확인하는 과정 중에 또 review를 요청할 수 있다는 얘기입니다. 위 이메일에서 보이듯이, 저희는 이런 조치를 받았음에도 불구하고 결국 해결을 했죠? Notes 부분에 보시면 ‘Dangerous goods review for this product is completed’ 로 되어있으며, Current Status가 ‘Non-DG’로 변경되었습니다. 그리고 이메일 본문을 읽어보시면 이제 판매를 재개할 수 있다고 나와있습니다. 컨택틱은 어떻게 이걸 해결했을까요? 이제 본론으로 들어가겠습니다. 딱 2가지만 기억하시면 해결할 수 있습니다.이 사태를 해결하기 위해 여러분들께서 알아야하는 첫 번째는 바로! Exemption Sheet입니다. 아마존 help 메뉴에 들어가서 hazmat review라고 검색한 후 아래 스크린샷에 나온 순서대로 링크를 타고 들어가시면 PDF 양식을 다운로드 받을 수 있게 됩니다. 첫 번째 양식은 배터리가 있는 제품 전용의 exemption sheet이며, 두 번째 양식은 그 외 모든 종류에 해당하는 양식입니다.1) 아마존 셀러센트럴에서 Hazmat Review라고 검색2) Exemption Sheet을 찾는법다운로드 받은 양식을 보시면 성분을 작성하는 부분이 있습니다. 여기에 해당 제품의 성분을 있는 그대로 쭉 기재하시면 됩니다. 이 양식명 자체가 exemption sheet인 만큼 ‘우리 제품은 위험 제품이 아닙니다!’라고 주장해서 ‘면제’를 받도록 요구하는 것입니다. 다른 말로, 우리 상품은 non-hazmat 이라고 주장하시는 겁니다. 그렇게 양식을 작성한 뒤 위 화면에 업로드하고 제출하면 영업일 기준 3~4일 (길면 1주일 이상) 아마존 측에서 검토한 뒤 심사 통과 여부를 알려줍니다. 만약 기다려도 이메일이 안온다면 help에 들어가서 hazmat이라고 검색한 뒤에 ASIN lookup을 통해서 hazmat 상태를 조회해볼 수 있습니다.두 번째 방법은, 만약 exemption sheet를 작성하고 제출했는데도 정보 부족으로 심사 통과가 안됐다고 했을 경우, MSDS 혹은 SDS를 제출하는 방법입니다. MSDS는 material safety data sheet라고 해서 제조업체에 의뢰하면 받을 수 있는 문서입니다. 이 자료에는 해당 제품의 성분, 위험 항목 여부 등등이 16가지 조항으로 나열되어있습니다. 이 문서를 구비하기가 까다로울 수 있기 때문에 첫 번째 방법인 exemption sheet를 알려드린 것인데요, 첫 번째 방법으로 안된다면 어쩔 수 없이 제조사에게 연락해서 MSDS를 받고 제출하면 되는데, MSDS상에 나와있는 정보가 아마존 상품 정보와 일치해야하기 때문에, 제출하기 전에 한 번 검토한 뒤 제출해야하는 점 잊지 말아주세요!MSDS의 예시솔직히 말씀드려서, hazmat review 걸리면 일단 판매 정지부터 걸리기 때문에 여간 골치아픈게 아닙니다. 정지된 그 사이에 매출이 뚝 떨어지는 것이니, 베스트셀링 상품이 hazmat review 걸렸다면 눈앞이 캄캄할 것입니다. 위에 해결방법을 최대한 상세하게 알려드리긴 했으나, 막상 해보면 헷갈릴 수 있습니다. 특히 exemption sheet를 처음 작성하시는 분들은 어떤 란에 무슨 내용을 기재해야하는지 헷갈리실텐데요, 도움이 필요하신 분들은 컨택틱에 문의해주시기 바랍니다 (02-538-3939).컨택틱의 모든 교육은 파트너인 글로벌셀러창업연구소와 접수하고 진행합니다. 교육 신청은 아래 링크나 글로벌셀러창업연구소의 홈페이지를 통해 가능합니다.오프라인 아마존 입문 과정오프라인 아마존 기초/심화 과정온라인 아마존 입문 과정그럼 오늘도 즐거운 글로벌 셀링 되세요!감사합니다.컨택틱서울특별시 서초구 서초대로 356, 606호(서초동, 서초지웰타워)대표 전화: 02-538-3939이메일: support@kontactic.com홈페이지: https://www.kontactic.com네이버 블로그: https://blog.naver.com/kontactic카카오 브런치: https://brunch.co.kr/@allaboutamazon유튜브 채널: https://www.youtube.com/c/kontactic
조회수 2439

8퍼센트 Test case 작성 가이드

8퍼센트에서 Python Django 코드에 대한 Test case 작성시 사용하는 가이드를 공유해보려고 합니다.클래스명일반적으로 TestCase 를 상속 받는 클래스일 경우 class 명의 마지막에 TestCase 를 붙입니다.예제: SimpleTestCase(TestCase)함수명테스트 함수명의 경우 test_ 로만 시작하면 동작하는데 문제가 없고 테스트 코드에까지 주석을 다는 것은 번거로우므로 함수명의 test_ 뒷부분을 한글로 하여 설명을 대신하도록 합니다.class IUPaginationMethodTestCase(TestCase): @classmethod def setUpTestData(cls): cls.request = Mock() cls.request.GET = {'page': 1, 'items_per_page': 1} cls.pagination = IUPagination(cls.request) def test_page_url_기본(self): expected = '?{}=1'.format(self.pagination.page_key) self.assertEqual(self.pagination.page_url(), expected) def test_page_url_쿼리스트링_없는경우_물음표_붙인다(self): expected = '/?{}=1'.format(self.pagination.page_key) self.pagination.url_prefix = '/' self.assertEqual(self.pagination.page_url(), expected) def test_page_url_쿼리스트링_있는경우_엠퍼센드로_붙인다(self): expected = '{}&{}=1'.format( self.pagination.url_prefix, self.pagination.page_key )) self.pagination.url_prefix = '?utm=source' self.assertEqual(self.pagination.page_url(), expected) factory_boyfixture 를 대신해서 가급적 factory_boy 를 사용합니다.signals 끄기factory boy로 모델 객체 생성시 signal 이 호출되는데 signal에 대한 테스트가 아니라면 대부분 실행할 필요가 없습니다.이 때 factory.django.mute_signals를 사용해서 끄면 됩니다.decorator, context manager 둘 다 사용 가능합니다.decorator@mute_signals(signals.post_save) def test_some_code(self): some = SomeFactory() context managerwith mute_signals(signals.post_save): some = SomeFactory() 참고 링크factory_boyDisabling signalssetUpTestData vs setUpfixture를 사용하면 fixture로 정의한 모델 객체가 모든 테스트 시작 전에 생성이 되는데 유사하게 setUp 에서 factory 생성을 하게 되면 매번 객체 생성을 하게 되므로 느립니다.테스트에서 read only 로만 사용하는 객체의 경우 class method인 setUpTestData 에서 생성하면 1번만 생성이 되므로 빨라집니다.가급적 setUp 에서 매번 객체를 생성하는 것을 지양하고 테스트 함수 내에서 필요한 객체만 생성하는 것이 효율적이고 빠릅니다.method mock메소드를 mock 하는 경우 unittest.mock.patch() 를 사용합니다.decorator보통 테스트 메소드에 대한 decorator 로 사용합니다.직접 호출class 내의 여러 테스트 메소드 혹은 모든 테스트 메소드에서 동일한 함수를 mock 하는 경우에는 start, stop 을 활용하면 편합니다.예제 코드from unittest import mock class MyTest(TestCase): def setUp(self): self.mock_method1 = mock.patch('package.module.method1').start() self.mock_method1 = mock.patch('package.module.method2').start() def tearDown(self): mock.patch.stopall() def test_something(self): something() self.assertTrue(self.mock_method1.called) 참고 링크: patch methods start and stoptimezonedatetime.datetime.now() datetime.datetime.strptime() 등을 사용해서 naive datetime 객체를 django 모델의 DateTimeField 에 할당할 필요가 있는 경우 반드시 django.utils.timezone.make_aware() 를 사용해서 time-zone-aware datetime 객체로 변환한 후에 합니다.참고 링크: Django timezone 문제 파헤치기freezegun특정 시점에서의 테스트가 필요한 경우 freezegun 을 사용해서 현재 시간값을 고정합니다.가급적 decorator 나 context manager 를 사용해서 특정 클래스나 메소드, 혹은 코드 블럭에만 적용하도록 하는 것이 좋습니다.decorator 예제from freezegun import freeze_time import datetime import unittest @freeze_time("2012-01-14") def test(): assert datetime.datetime.now() == datetime.datetime(2012, 1, 14) context manager 예제from freezegun import freeze_time def test(): assert datetime.datetime.now() != datetime.datetime(2012, 1, 14) with freeze_time("2012-01-14"): assert datetime.datetime.now() == datetime.datetime(2012, 1, 14) assert datetime.datetime.now() != datetime.datetime(2012, 1, 14) 특정 테스트 케이스 전체에 적용을 하기 위해 start(), stop() 메소드를 사용하기도 하는데 이 경우 반드시 stop() 을 해주어야 다른 테스트 케이스의 시간 값에 영향을 주지 않습니다.예제from django.test import TestCase from freezegun import freeze_time class SomeTestCase(TestCase): def setUp(self): self.freezer = freeze_time("2016-01-05 00:00:00") self.freezer.start() def tearDown(self): self.freezer.stop() 참고 링크: freezegun맺음말Python Django 개발시 Test case 작성을 잘 하기 위한 8퍼센트 개발팀의 가이드를 공유해 보았습니다. Python Django 개발자들이 Test case 작성을 효율적으로 잘 해서 서비스의 안정성을 높이는데 도움이 되기를 기대해 봅니다.#8퍼센트 #에잇퍼센트 #Django #Python #장고 #파이썬 #개발 #개발자 #가이드 #꿀팁 #인사이트
조회수 6754

협업을 위한 심볼 구조화, 플러그인으로똑똑하게 스케치 사용하기

Sketch App 도입은 Zeplin을 활용하여 효율적으로 개발자와 소통하기 위해 시작되었습니다. 도입하는 과정에서 안드로이드 UI를 담당하게 되었고, 심볼의 구조화와 적절한 플러그인의 사용을 통한 작업의 효율, 가지고 있던 문제점들을 해결하는 것에 중점을 뒀습니다.기존 작업방식과 문제점디자인 작업 패턴디자인 작업 패턴을 분석했을 때, 기존의 PSD 파일들에서 컴포넌트를 가져와 재조합하는 경우가 가장 많았습니다. 디자이너간 협업 시 최근 릴리즈된 디자인이 맞는지, 요소간 간격 같은 디테일한 부분에 대해 묻는 경우가 많았으며, 개발자와의 협업 시 지칭하는 용어가 달라서 생기는 커뮤니케이션 미스가 종종 발생했습니다. 구조화에 앞서, 분석하고 내린 작업의 키포인트는 다음과 같습니다.1. 최근 릴리즈된 디자인이 영향을 받는 모든 화면에 동기화되어야 합니다.2. 개발자와의 협업 시, 심볼의 네이밍을 기준으로 커뮤니케이션합니다.3. 디자이너가 사용 시, 시안 작업을 빠르고 편하게 할 수 있어야 합니다.4. 컴포넌트, 디자인 요소들이 서로 유기적으로 연결되어있어야 합니다.5. 시안 작업 시, 유저 데이터를 사용하기 편리해야 합니다.심볼 생성 기준심볼로 만들어야 하는 경우는 다음과 같이 정의했습니다.1. 다양한 상태값을 가진 요소2. 같은 크기의 영역 안에서 다양한 형태를 가진 요소3. GNB처럼 자주 쓰이는 컴포넌트4. 카드 형태의 디자인5. 아이콘Overrides 예시심볼 폴더 구조심볼 폴더 구조디자이너들이 사용하기 때문에 첫 번째 분류는 보이는 형태, 디자이너끼리 자주 사용하는 용어로 합니다. 두 번째 분류는 원활한 커뮤니케이션을 위해 목적 혹은 개발자분들이 사용하는 용어로 지정하며, 세 번째 분류까지 해야하는 경우 2 Column, 3 Column(스타일쉐어 내부에선 Grid라는 용어를 주로 사용합니다.)과 같은 다양한 변화에 대한 것이므로, 똑같이 커뮤니케이션에 용이하게 판단하여 결정합니다.Elements 폴더는 심볼을 구성하는 심볼들이 있는 폴더입니다. 직접 심볼 폴더트리를 타고 들어가 생성하는 경우는 없으므로, 분류에 더 목적을 두고 폴더 구조가 복잡해지는 것을 감수했습니다.그리고 Overrides를 대비하여 이해하기 쉬운 용어로 작성합니다.심볼의 활용자주 쓰는 컬러들을 심볼화하고 마스크 기능을 활용하면, 아이콘들의 색상을 더 편하게 변경할 수 있습니다. 추후에 브랜드 컬러, 그레이스케일이 변경되는 경우에도 컬러 심볼만 수정하면 큰 문제없이 바로 적용할 수 있습니다.플러그인의 활용작업에 주로 사용하는 플러그인은 Auto Layout, Button, Clipboard Fill입니다.Auto Layout의 Stacked Group 기능으로 심볼이나 요소들을 유기적으로 연결시킵니다. Button은 Tag, List item 등에 사용하며 짜잘한 수정작업을 줄여 시안작업에 더 집중할 수 있도록 합니다. Clipboard Fill은 스타일쉐어 특성때문에 활용 가치가 높은 플러그인입니다. 유저 이미지, 게시글의 사진을 스타일쉐어 웹에서 복사하여 시안을 작업할 때 활용합니다. 실 데이터를 사용하기 때문에 설득력이 높아지고, 조금 더 객관적으로 작업할 수 있다는 장점이 있습니다.플러그인 사용 Gif페이지 구성모든 화면이 모여있는 Master_Android.sketch 파일에서는 페이지로 분류합니다. 이 분류와 구글 드라이브 폴더 구조를 일치시켜 빠르게 파일을 찾을 수 있도록 하였으며, 탐색이 용이하기때문에 새로운 디자이너가 오더라도 쉽게 파악가능합니다.디자인 작업 프로세스시안 작업 시, 실제 데이터를 사용하여 설득력을 높이는 것을 가장 큰 목표로 합니다.1. 디자인 작업 전, 사용할 심볼들을 모두 Detatch합니다.2. 문제해결에 맞게 컴포넌트를 디자인합니다.3. 플러그인을 활용하여 웹에서 실제 데이터들을 가져와 채웁니다.4. 시안 작업이 끝난 후, 정리하여 Zeplin으로 내보냅니다.5. 심볼을 만들어야 한다면, Master파일 Symbols에 업데이트합니다.6. Master파일에 심볼을 사용하여 화면을 정리합니다.이 과정에서 생기는 큰 문제점은 모든 작업자가 심볼 구조화에 같은 기준을 가지고 있어야 한다는 점입니다. 생성 여부, 심볼 이름을 정하는 규칙 등에 대해 문서화하여 공유해도 익숙하지 않기때문에 실수가 생기기 마련입니다. 그래서 안정화되기까지 첫 구조를 잡았던 담당자가 정기적으로 확인하여, 다듬어나가는 것으로 결정했습니다. 비효율적인 방법일 수도 있지만, 동시에 구조화를 더 탄탄하게 하는 기회였습니다.잘가 포토샵.Sketch App의 업데이트에 따라 해결할 수 있는 방법이 달라지는 경우가 많았습니다. 그에 대비하여 의존성을 줄여나가는 고민을 계속하고 있으며 UI 뿐만 아니라, 작업툴 사용에 제약이 없다는 조건 하에 Overrides 기능과, Clipboard Fill, Auto Layout을 활용하여 다양한 템플릿 작업에도 사용할 수 있다고 생각합니다.#스타일쉐어 #개발팀 #개발자 #개발환경 #인사이트
조회수 998

Android 와 iOS에서 모바일 앱 삭제수 분석하기

앱 삭제수 분석이 중요한 이유모든 비즈니스에서 사용자 획득만큼 중요한 있다면, 기존의 고객들이 지속적으로 서비스/상품을 찾고 사용하도록 만드는 것입니다.특히, 모바일 앱 서비스의 경우 사용자가 손가락을 한번 움직이는 것만으로 스마트폰에서 앱을 삭제할 수 있기 때문에, 사용자 유지에 더욱 신경 써야 할 수 밖에 없습니다. 실제로 다수의 조사에서, 앱 설치 후 30일 내 90%가 넘는 사용자가 앱을 삭제하거나 사용하지 않는 것으로 나타났습니다. 만약 수백, 수천만원의 광고비를 들여 앱 설치수를 증가시켰는데, 대다수의 사용자가 한 달 뒤에 앱을 삭제한다면 앱 비즈니스 입장에서 큰 시간과 비용 낭비일 것입니다. (관련 포스팅: 앱재사용율(Retention)이 앱 설치수보다 중요한 이유)이 때문에 사용자가 지속적으로 앱을 사용하고 있는지 체크하고, 더 나아가 사용자가 우리 앱을 삭제하는 비율이 얼마나 되는지 파악해 해결방법을 찾는 것이 중요합니다.앱 삭제수를 분석하는 방법그렇다면 앱 삭제수는 어떻게 분석할 수 있을까요? 앱 삭제수 분석은 크게 Daily Ping Service 혹은 Silent Push Notification 방법으로 이루어집니다.와이즈트래커 분석 서비스의 경우, Android 는 Daily Ping Service 를 통해, iOS는 Silent Push Notification 방법으로 앱 삭제수 분석 데이터를 제공하고 있습니다. 아래 내용을 통해 와이즈트래커가 앱 삭제수를 분석하는 방법에 대해 자세하게 알아보도록 하겠습니다.ANDROID 앱 삭제수 분석 – DAILY PING SERVICEDaily Ping Service는 하루에 한번 앱에서 서버로 신호를 보내, 앱이 설치 되어있는지 삭제되었는지 분석하는 방법입니다. 각각의 사용자 앱은 고유의 식별코드를 가지고 있기 때문에, 특정 앱에서 신호가 오지 않는다면 해당 사용자는 앱을 삭제한 것으로 판단합니다.이러한 방법으로 앱 내 설치된 와이즈트래커 SDK는 하루에 한번 특정 시간에 서버로 알림을 보내고 서버에서는 알림이 오지 않은 사용자 앱들을 파악해, 앱 삭제수 데이터를 웹 대시보드로 보여줍니다. IOS 앱 삭제수 분석 – SILENT PUSH NOTIFICATIONSilent Push Notification이란 각 플랫폼의 푸시 메시지 전송 서버에 앱 사용자들에게 내용이 없는 (Silent) 푸시 메시지 전송을 요청해, 해당 서버로부터 앱을 삭제한 사용자에 대한 피드백을 받는 방식입니다.구체적으로, 와이즈트래커는 하루에 한번 Apple의 푸시메시지 전송 서버인 APNs (Apple Push Notification Service) 에게 앱 사용자들에게 Silent 푸시메시지를 전송하도록 요청합니다. 이 메시지는 내용이 없기 때문에 실제 사용자들에게는 팝업으로 나타나거나 보여지지 않습니다. Apple은 해당 메시지 전송 시, 앱을 삭제해 푸시 메시지를 받지 못한 디바이스들의 식별코드를 모아 와이즈트래커에 전달해줍니다. 이러한 정보를 바탕으로 와이즈트래커는 앱 삭제수 데이터를 파악해 보여줍니다. 앱 삭제수 분석의 정확성앱 삭제수 분석의 경우, 분석 방식의 특수성으로 인해 사용자가 앱을 삭제하지 않아도, 앱을 삭제한 것으로 처리되는 경우가 있습니다. 예를 들어, 와이즈트래커 SDK가 서버로 신호를 보내거나 APNs에 푸시메시지 전송을 요청한 시간에 해당 앱 사용자의 디바이스가 꺼져있거나, 네트워크 연결이 안되어 있다면 해당 사용자는 앱 삭제수에 포함됩니다.와이즈트래커는 앱 삭제수 분석의 정확성을 높이기 위해, 앱을 삭제한 것으로 간주된 사용자가 추후 지속적으로 사용하고 있는 것으로 파악될 경우, 기존 삭제수 데이터에 소급 적용해 업데이트 하고 있습니다.와이즈트래커 대시보드에서 앱 삭제수 파악하기실제 와이즈트래커 서비스에서 앱 삭제수는 다음과 같이 Retention 리포트에서 확인 가능합니다.각 날짜별로 앱을 설치한 사용자 그룹을 대상으로, 1일, 7일, 15일, 30일 뒤 앱 재사용수와 앱 삭제수를 Retention 리포트를 통해 한 눈에 파악할 수 있습니다. 위 서비스의 경우 앱 설치 하루 뒤에는 평균 47%, 30일 후에는 평균 67%의 앱 삭제율을 기록하고 있습니다.더 나아가 세그먼트 기능을 이용해 플랫폼, 성별, 연령대, 광고 채널 별로 나누어 앱 삭제수를 볼 수 있기 때문에, 어떤 특성의 그룹이 앱 삭제율이 높은지 파악할 수 있습니다.(페이스북 채널을 통해 앱을 설치한 사용자들의 앱 재사용/삭제수 리포트)또한 와이즈트래커는 앱 삭제 데이터를 더욱 가치 있게 활용할 수 있도록, 앱을 삭제한 사용자들을 타겟팅해 Re-acquisition 을 가능하게 하는 기능을 출시할 예정입니다.와이즈트래커의 앱 삭제수 분석 방법이나 앱 삭제수 리포트에 대해 더 궁금하신 분들은 contact@wisetracker.co.kr로 언제든 연락주세요! 앞으로도 와이즈트래커는 단순한 분석 데이터 제공을 넘어, 고객사가 데이터를 통해 인사이트를 얻고 지속적으로 성장하는데 도움이 되도록 노력하겠습니다.
조회수 4592

스타트업, 사람 구하기!

재미있는 일을 하기 위해 스타트업을 창업했다. 재미있게 소프트웨어를 개발하고 회사와 팀을 운영하면서 무언가를 이루어내기 위해서 가장 중요한 것은 무엇일까?그것의 첫 번째는 바로, ‘사람 구인’이고, 두 번째는 '인력관리'이고, 세 번째는 '부적절한 사람 내보내기'이다.넘치는 아이디어를 실현해야 하고, 멋진 목표를 만들어 내기 위해서는 정말 멋진 동료가 필요하고, 즐겁게 같이 일할 직원이 필요하다.재미있는 일과 직장을 구하는 사람의 입장에서도 같이 일할 동료와 선배, 리더에 대해서 생각해봐야 하고, 그 사람에 대한 모델에 대해서 고민해봐야 한다. 다른 분야도 비슷하겠지만, 소프트웨어 개발을 주로 하고 있는 IT기업에 있어서는 정말 사람이 중요하다. 그 어떤 사람과 같이 일할 수 있는 것인가? 그것이 핵심중의 핵심에 해당한다고 이야기할 수 있을 것이다. 그래서, IT기업의 가장 중요한 성공요인은 사람이고, 스타트업 기업들의 가장 중요한 것은 어떤 사람과 같이 일하냐는 것이다.그렇다, 가장 중요한 것은 인재를 뽑는 것이다. 많은 사람들은 인재 중에 인재인 천재를 원하고, 그들을 통해서, 그들이 더 많은 이익을 가져다 주기를 원한다. 하지만, 냉정하게 그런 천재들이 당신의 회사에서 같이 일할 수 있을까? 더 정확하게 이야기하자면, 수재나 천재를 뽑는 것이 아니라, 정확한 롤에 적합한 사람을 어떻게 찾아내고, 자리에 배치시키느냐가 관건이 된다고 할 수 있겠다.( 천재는 절대 누구 밑에서 일하지 않는다. 그런 사람 찾는다면 포기하기 바란다. )다만, 정말 더 큰 문제는 언제나 이러한 쓸만한 ‘개발자’는 부족하다는 점이다. 현업에서 20년을 활동했지만, 매년 듣는 이야기는 언제나 ‘소프트웨어 개발자’가 부족하다는 것이었다.꼭, 스타트업이 아니라고 하더라도, 가장 중요한 것은 사람과 같이 일하는 것이고, 사람과 같이 호흡하는 것이 되겠다. 내가 속한 조직에서 원하는 사람은 어떤 사람일까? 그리고, 내가 동료가 되기를 원하는 사람은 어떤 사람들일까? 그리고, 내가 사장이라면 어떠한 사람을 뽑아야 하는가? 내가 중간 관리자 이거나 팀장이라면 어떤 사람을 선택해야 하고, 어떤 사람을 뽑아야 하는 것일까? 이번 칼럼에서는 IT기업, 소프트웨어 개발자와 어울리는 사람에 대해서 한 번 생각해보자.천재를 뽑는가?냉정하게 기업에서 ‘천재’는 그다지 유용하지 못하다. 그런 능력을 가진 사람은 ‘창업자’이거나 ‘임원’, ‘이사’급으로 충분할 것이다. 그래서, 많이 필요한 것 같지만, 그다지 많이 필요도 없고, 실제, 그다지 존재하지 않는 사람들이다. 이런 사람들은 그냥 Pop 한 사람들이므로, 이런 칼럼에서 논하지 말자. 나중에, 이런 천재들을 구분하는 방법에 대해서 한 번 써볼 기회가 있으면 한 번 써보겠다. 이번 칼럼에서 이야기하는 사람은 ‘잘 하는 사람’들, ‘수재’라고 불리는 사람들이다. 특히, IT기업과 소프트웨어 개발 기업에서. 더 냉정하 게이 야기한다면, 기업에서 원하는 인력은 ‘수재’이면서, ‘성실한 사람’ 일 뿐이라는 점을 잊지 말자.다만, 가끔 직원에게 ‘천재적인 혁신성’을 강요하는 경우를 가끔 보게 된다. 하지만, 그런 경우는 절대적으로 ‘말’뿐이라는 것을 잊지 말자. 보스나 리더가 그런 사람들이 모이게 하려면 그 조직과 구조, 하는 일과 대우는 매우 혁신적인 기업이 될 테니, 그런 인재들은 자생적으로 찾아들어간다. 대부분의 기업은 이런 ‘혁신’을 받아줄 능력도, 제도도, 구성도 안되어 있으면서, 혁신을 강요하는 경우가 더 많다고 보면 된다.다만, 어설픈 리더들이 이야기하는 ‘혁신’이나 ‘창의’는 쉽게 이야기하면, ‘돈 벌 아이템’을 보기 좋게 포장한 단어의 의미로 그런 ‘아이템’을 손쉬운 투자로 벌 수 있게 하는 것을 의미한다고 보면 되겠다. 그래서, 그 단어에 큰 의미를 부여할 필요는 없다고 생각한다.더 일반적으로 이야기하자면, ‘혁신적이고 창조적인 인재’란 적게 주는 비용에 대해서 별말 없이 잔업을 반복하면서 무책임한 리더에 반대 없이 일하는 사람을 의미한다고 생각하면 된다. 대부분의 대한민국 기업들을 대부분 이러했다. 요즘 들어 만나본 스타트업 기업들의 분위기도 비슷했다는 것을 보면, 어쩔 수 없는 악순환의 반복인가 보다.과연 내 조직과 내가 속한 사회에서 혁신이란 무엇인가?혁신은 어떻게 일어나는가? 혁신에 대한 재미있는 사례가 하나 있다. 얼마 전, 15세의 천재소년의 이야기를 인터넷에서 보게 되었다. 1997년생의 잭 안드라카(Jack Andraka)라는 미국 동부 메릴랜드 주의 크라운스빌에 사는 고등학교 2학년 학생이 췌장암의 바이오마커(Biomaker)인 메소 텔린(Mesothelin) 검출 방법을 발명하였고, 작년( 2012년 )에 인텔 ISEF(The Intel International Science and Enginerring Fair)에서 상금 75,000달러와 함께 최고상인 고든 무어상(Gordon E.Moore Award)을 수상을 매우 독특한 사례이다.( 물론 이 사례에 대해서 주변의 의료에 대해서 알고 계시는 분들의 의견으로는 재미있는 콘셉트와 재미있는 아이디어이지만, 완전한 체커 방법은 아니라고 한다. 그렇다고 하지만, 저렴하고 빠르게 검사하는 방법으로는 의미가 있다고 판단해주셨다. )잭 안드라카에게는 어떤 이유로 이러한 발명을 가능하게 하였을까? 가장 큰 동기는 삼촌처럼 여기던 아버지의 친구가 췌장암으로 세상을 떠나면서 빠르게 검진하는 방법에 대해서 고민을 하였고, 이러한 방법에 관심을 가지게 된 것이 가장 큰 동기라고 하였다.이 학생은 췌장암을 빠르게 찾아내는 방법에 대해서 연구를 시작하였고, 가장 기본적인 정보를 습득한 것은 고등학교 생물 수업시간에 들은 항체에 대한 설명을 기반으로, 인터넷을 이용하여, 필요한 카본 나노튜브의 논문을 습득하고, 자신의 아이디어를 실현할 수 있는 연구실을 찾기 위해 200여 통의 이메일을 연구실을 운영하는 교수님들에게 전송하였다.다행하게도, 존스홉킨스대학교의 이 니 르만 마이트라(Anirban Maitra) 교수가 그의 연구실에 그를 초대하였고, 그 연구실에서 7개월 만에 혁신적으로 췌장암을 판별해낼 수 있는 방법을 고안하게 된다. 그가 개발한 검사지는 약 3센트로 50달러짜리 전기계측기를 사용하여 검사를 수행하는 방법을 고안해 내고, 시제품을 만들어 내었다. 기존의 검사에 비하여 26,000배 저렴하고, 검사시간도 5분으로 기존의 방법보다 168배나 빠르다.이 이야기를 보면서 정말 부러웠던 점은 그러한 멋진 결과를 만들어낸 그들의 문화권이 가장 부러웠다. 어떤 혁신이건 주변의 문화와 배경, 그들을 어떻게 받아들일 것인가에 대해서 기성 계층이 어떻게 받아들이냐에 따라서 혁신은 일어날 수 있기도 하고, 별로 의미 없는 아우성이 될 수도 있는 것이다.이 사례에서 어떤 어린 소년이 보낸 이메일에 관심을 가지고 이야기에 귀기울 여준 노교수님과 그것을 할 수 있도록 양해해준 대학 당국. 물론, 200여 명의 연구를 하는 교수들에게 이메일을 보낸 이 학생의 도전도 놀라웠다고 해야 하지만, 어린 소년의 아이디어에 반응을 한 단 한 사람. 물론, 그 모든 정보와 소통이 가능하게 한 인터넷도 중요한 것이겠지만. 결코, 그 소년과 노교수가 최신의 소셜 기법이나 서비스를 사용한 것이 아니라, 아주 전통적인 인터넷의 의사소통을 사용했다는 점이다.인터넷에 존재하는 무수한 정보와 그다지 대단할 것도 없는 이메일이라는 소통수단을 사용하여 만들어낸 혁신이다. 혁신은 아주 폼난 대단한 소셜미디어나 앱으로 만들어지는 것이 아니라, 인간과 인간이 만들어 내는 것이다. 그렇기 때문에 ‘이메일’로도 충분하게 혁신이 가능한 것이다.언제나 혁신은 기본적인 수단이 필요하지만, 수단 자체가 아주 혁신적이 될 필요는 없는 것이다. 충분하게 인터넷은 불가능한 것이 없고, 이론은 공유되고, 아이디어를 가치 있게 만들기 위해서는 현재의 협업으로도 충분하다는 것을 보여주었다.과연 우리의 사회는 우리의 조직은 인터넷을 어떻게 활용하고 있는가? 내가 속한 기업과 조직이 얼마나 오픈된 환경에서 의사소통과 정보를 교환하고 있는 것일까? 과연, 혁신을 불러일으킬 만큼 자유로운 의사교환이 가능한 환경일까?‘문화는 새로운 가치를 만들어 내고, 혁신은 그런 문화 속에서 만들어진다’내가 속한 기업이나 사회의 문화가 소통되는 환경으로 변화해야만, 새로운 혁신은 일어난다. 기존의 고압적이고, 외부와 소통이 어려운 환경에서는 변화는 일어나지 않는다. 이런 변화를 일으키지 못하는 것은 나 자신과 내가 속한 조직에서 만들어지 못하는 것을 자각해야만 한다.하지만, 대부분의 기업은 내부에서 만들어진 정보만을 중요시 여기는 방법을 사용한다. 그러한 기업은 혁신을 일으키기 매우 어렵다. 내가 속한 기업에 문제가 있고, 변화가 필요하다면, 그 바람은 나부터 일으켜야 한다. 내가 변하지 않고, 내가 이야기하지 않는다면, 그 기업과 조직은 변화하지 못할 것이다.기업의 핵심은 인재, 하지만. 그것은 기업의 문화에서 만들어진다. 인재를 외부에서 도입하는 것이 아니라, 인재는 내부에서 만들어져야 한다. 그러한 기업이 ‘인재’들이 찾는 기업이 된다. 가장 혁신적이고 창조적인 기업은 내부에서부터, 작은 것이라도 ‘변화’를 일으키려 하는 것이다.그런 공간과 조직에는 언제나 뛰어나고 일을 할 줄 아는 사람들이 모여들게 되어있다. 자 그렇다면, 조금 시야를 좁혀서 IT의 세계에서, 소프트웨어의 개발의 세계만 조금 더 집중해서 이야기해보자.왜? 우리는 쓸만한 개발자가 부족하다 하는가?개인적으로 20년이 넘게 소프트웨어 개발일을 하다 보니, 언제나 듣는 이야기가 있다. 그것은 ‘개발자가 없다’라는 이야기이다. 더더군다나 요즘 같은 스타트업이 활성화되어진 시대이다 보니, 스타트업에서 개발자를 구하지 못해서 애태우거나, 최근에 구한 개발자들을 붙잡아두지를 못해서 전전긍긍하는 현상들을 자주 찾아볼 수 있다. 그리고, 매번 인사담당자나 팀장들은 푸념을 늘어놓는다,가장 크게 이런 이야기하는 기업의 경우 ‘비전’이나 ‘목표’를 제대로 수립하지 못했기 때문에 이런 사람들을 구하지 못해서 전전긍긍하는 경우가 있다. 아니, 제대로 된 무언가를 자신들이 만들지 못하고, 사람들에게 설명도 제대로 못하면서 어떤 사람이 필요한지도 모르는데 그들은 사람이 부족하다거나, 못 찾겠다고 푸념한다.이런 경우에는 ‘사람’이 부족한 것이 아니라, 당신들이 모여서 무엇을 할 것인지 정리를 못하고 있어서, 사람을 구하지 못하고 있는 것이라고 충고해주겠다. 대부분 기업이나 조직에서 사람을 구하지 못하는 경우에는 이와 같은 경우가 태반 차지한다고 볼 수 있겠다.또 다른 경우에는 내가 원하는 사람이나 내 동료가 어떤 일을 해야 하는지 잘 정리가 안 되는 경우다. 내가 할 일, 우리 팀이 할 일에 대한 정리가 잘되지 못하기 때문에 새로 들어오는 사람이 그러한 것들을 명쾌하게 해주기를 바라는 경우도 상당하다.새로운 사람이 들어와서 일 정리가 명쾌해진다면, 기존에 존재하는 사람들부터 어떻게 정리해야 한다는 결론이 난다는 것을 기존 조직에 있는 사람들이 잘 모르는 경우도 간혹 있다. 이런 식으로 대부분의 케이스를 정리해보면, 할 일이 명확하고, 비전도 명확하고, 기업의 색깔도 명확한데도 정말 쓸만한 사람이 없다고. 그런 사람을 구하지 못한다고 한다면, 그 기업의 인사정책에 대해서 의심해봐야 한다.하지만, 여기서 이야기하는 기업의 인사정책은 단지, 기업의 ‘봉급’이나 ‘보수’만을 이야기하는 것은 아니다. 인사정책이란 필요한 리소스의 발전모델이나 로드맵을 제시하고, 기업과 같이 성장하는 모델을 같이 제공하는 것을 의미한다. 하지만, 먼저 전제 조건을 하나 정리하자. 그것은, 기업이 ‘투자’에 인색하다는 것이다. 기업은 ‘이익’을 내는 집단이지, ‘인재 양성소’는 아니기 때문이다. 하지만, 인사정책이나 인사 모델은 ‘투자’가 아니라, 사람에게 발전이 가능한 상위의 레벨업을 제시하고, 그것을 통해서 성장할 수 있게 해준다. 대부분의 대기업은 이러한 시스템은 잘 갖추고 있는 편이다.스타트업의 경우에는 분명, 보수나 처우가 떨어지는 부분들이 있을 것이기 때문에, 이러한 모델을 제대로 제시하는 경우가 중요한데, 이 부분을 제대로 제시하지 못하고 있다. 물론, 스타트업 기업의 경우에 리더나 출중한 롤모델이 있는 경우에는 자연스럽게 이러한 조직이 해주어야 할 모델을 특정한 사람이 대신하고 있는 경우가 있다. 하지만, 이러한 경우에 해당 롤모델이 되는 사람이 회사를 떠나게 되면, 회사의 롤모델이 붕괴된다는 것을 잊지 말자. 그래서, 리더나 보스, 인사정책을 모델링하는 사람들은 정말 심미적으로 이 부분을 잘 고려해야 한다. 하지만, 이런 개발자들이 모자라다는 것은 정말 그들만의 착각일 수 있다. 자신의 조직을 잘 관리하고 살펴보면, 이러한 롤모델이 가능한 선배 개발자나 선배들을 충분하게 만들 수 있다.그것이 기업의 리더와 보스, 인사담당자들이 고려해야 할 몫이다. 특히나, 스타트업의 경우 이러한 롤에 대해서 충분하게 고려하여야 한다. 그렇게 되면, 이러한 조건들. 냉정하게 몇 가지의 조건들만 갖춘다면 실력자들과 같이 일할 수 있는 방법들은 많이 만들 수 있게 된다.스타트업 기업의 재미있는 예를 들어보자어떤 회사 A를 생각해보자, 이 기업은 돈이 좀 있는 기업이다. 회사가 투자를 받았건, 매출을 올리건, 하여간. 개발자들에게 줄 급여도 나름 넉넉한 편이다. 그래서, 개발자들을 나름 넉넉하게 뽑았다. 하지만, 이렇게 많은 개발자들이 있는데도, 다양한 부서에서 만들어내는 요구와 목소리는 한결같다.‘개발팀이 받쳐주지 못해서 아무것도 못해요!’라고 말한다. 개발팀도 볼멘소리를 하는 것은 똑같다. 매일매일 바쁘게 일하지만, 밀려드는 일을 감당하지 못하고, 해결하는 일보다, 쌓이는 일들이 더 많아지는데다가, 일의 속도도 느려지고, 다른 부서장들이 맹비난하는 개발팀이 되는 것이 현실로 되어가는 때에, 당신이 CEO라면 어떻게 할 것인가?(여러 가지 방법이 있고, 그 해결책도 많다. 다만, 이 칼럼에서는 특정 문제에만 집중하자. )과연 이러한 문제는 해결이 가능한 것일까? 물론, 이 문제는 해결이 당연하게도 가능하다. 인류는 이러한 문제를 2천 년 넘게 발생되었으며, 언제나 지성으로서 이 일들을 해결하여 왔다. 다만, 이 문제의 정답이나 해법은 매우 쉽고 단순하지만, 정말로 이를 실행할 수 있는 조직은 정말 극소수이고, 이 문제를 해결한 기업과 조직만이 성공적으로 시장에 안착하는 것 또한 사실이다.냉정하게 이러한 문제는 조직의 리더, CEO의 문제이고, CEO의 결단과 결심이 이 문제를 해결하기 위한 첫 번째 키워드이다. 그것은, ‘문제 인식’과 ‘해결해야 할 비전’과 ‘도달해야 할 목표’를 명쾌하게 하는 것이다.‘목표’가 불분명하고, 불명확하면, 위에서 설명한 A회사와 똑같은 상황이 벌어진다. 대부분의 문제는 ‘자원관리’에서 벌어지는데, 이 자원관리는 결국, 돈과 비용, 사람과의 상관관계이다.냉정하게 ‘병목구간’은 분명하게 발생하고, 이 ‘병목’ 구간을 어떻게 해결하느냐가 관건이다. 이러한 병목 자원을 중심으로 프로세스를 재편하고 다시 구성해야 한다. 냉정하게, 희귀한 자원은 다시 구하기도 어려우니까, 최대한 잘 활용하는 방법으로 디자인하는 것이다.낭비만 제거하더라도, 아주 효율적으로 운용이 가능하다. 물론, 이런 식의 디자인을 하게 될 때에 다른 공정이나 프로세스에서 낭비가 발생할 수 있다. 하지만, 그 가치를 비교하자면, 병목 자원을 중심으로 재편하는 것이 맞다.중요한 자원과 프로세스가 대기하거나 반복적인 작업이 발생하지 않도록 하는 것이다. 그리고, 불필요한 작업을 제거하도록 하는 것이다. 이러한 ‘대기 시간’과 ‘불필요한 일’을 제거하는 작업을 하지 않고, 다른 방법이나 생산성을 높이는 방법을 고민하는 것은 결코, 문제 해결의 정답이 아니다.모든 부서와 부서원들이 ‘개발팀’이 받쳐주지 못하다는 이야기를 한다면, 그 개발팀이나 그 개발자가 현시점에서 가장 중요한 ‘병목구간’에 해당한다. 그 구간이나 그 사람에 대한 프로세스에 대해서 검토하고 점검하는 것이 맞다.스타트업 기업에 어울리는 인재와 사람은?스타트업에서 사람을 구할 때에는 무언가를 완성한 사람보다는 무언가를 찾으려 애쓰는 사람을 찾는 것이 좋다. 가능하면. 소통을 중요시 여기고, 자신의 현재 능력보다는 협업을 통해서 문제를 해결하거나 업무를 소화하려는 사람이 더욱더 효과적이라 하겠다.특히나, 스타트업 기업의 경우에는 만들어야 할 목표와 비전이 계속 변화할 것이고, 팀원과 필요한 모델들을 만들고 새롭게 디자인하는 경우가 대부분 일 것이라고 예측되어진다. 하지만, 각자의 역할이나 롤, 해야 할 일에 대해서 인원이 적건 많건 명확하게 구분해야 한다고 생각한다. 특히나, 전체 조직의 구성을 신경 써야 하는 리더의 경우에는 그 역할을 정말 명확하게 구분지어야 한다. 너무 과도하게 역할을 주어서도 안되고, 너무 적게 주어서도 안된다. 스타트업 기업에 어울리는 사람의 가장 중요한 점은 ‘리더’와 의사소통이 원활하고, ‘리더’가 꿈꾸는 목표와 어느 정도 일치해야 하는 것은 매우 당연할 것이다.스타트업 기업의 리더는 자신이 어떤 목표와 어떤 비전을 가지고 있는지를 명쾌하게 보여준다면, 필요한 인재와 사람을 구하는데 아주 효과적일 것이다. 필자가 20대의 경험을 통해서 이야기하는 딱 한 가지는... 당장에 필요한 ‘기술’을 가지고 있는 사람은 일단, 비용이 그만큼 들어간다는 것을 인지하라는 것이다. 2013년의 현재는 필자의 1996년도의 시대와는 정말 다른 시대이고, 오픈소스와 관련 개발 능력이 상당히 평준화되어진 시대라는 것을 잊어버리지 말기를 바란다.능동적으로 변화하는 사람들과 같이 호흡하는 것을 즐겨하는 스타트업에 속한 동료들과 멋진 꿈을 꾸기를 기원한다.물론, 기획과 개발이 둘 다 잘되는 기적과도 같은 능력을 가진 사람을 알고 있다면, 그 사람을 어떻게든 유혹하기 바란다. 결국, 기업이든 서비스이든 '뛰어난 사람'이 만들어 낼 수 있다. 그리고, 그렇게 뛰어난 사람이라면 '전권'을 양보하자.'사장'은 사장스러워야지, 대리급 사장이거나, 부장급 사장이 되지 않기를 바란다. 물론, 대리급 사장이나 부장급 사장이 적합한 기업도 있다. '시장'의 구성 형태가 그러한 경우이다. 하지만, 대부분의 스타트업은 글로벌 시장을 지향하거나, 서비스 하나의 축을 담당하는 경우가 많기 때문에 '사장'은 사장스럽기 바란다.
조회수 2215

MySQL의 Transaction Isolation Level (Lock에 관하여)

편집자 주문맥에 따라 ‘Transaction’과 ‘트랜잭션’으로 영어와 한글을 혼용함.문맥에 따라 ‘LOCK’과 ‘lock’으로 대문자와 소문자를 혼용함.OverviewMySQL DB는 일반적인 운영환경에서 뛰어난 성능을 제공합니다. 특히 적은 양의 자료가 빈번하게 교류되는 환경에서는 더욱 빛을 발하죠. 국내에서는 주로 작은 규모의 웹사이트를 구축할 때 MySQL을 사용합니다. 그런데 문제는 사이트의 규모가 커지면서부터 생긴다는 것이죠. 조금씩 느려지는 Query가 생기면 원인도 파악하고, Query를 튜닝하고, 설계도 변경하지만 MySQL의 특징적인 문제를 곧 만나게 됩니다.테이블을 복제(CREATE SELECT)하거나 다른 테이블로 옮기면(INSERT SELECT) 작업을 하는 동안 SELECT 절에 있는 테이블들이 Lock이 걸립니다. 게다가 다른 Session에서 해당 테이블을 수정(UPDATE / DELETE)하면 복제와 이동을 마칠 때까지 대기 상태로 있어야 한다는 것입니다. 이러한 문제는 시스템을 구축하고 자료가 일정량 쌓이기 전까지는 알 수 없습니다. 또한 Oracle과 같은 DB를 사용하던 사용자가, MySQL을 사용하면 이와 같은 문제가 있을 것이라고 생각하기도 어렵습니다.이러한 특징을 가진 MySQL의 Transaction Isolation Level을 알아보고자 합니다. Transaction Isolation Level 은 Transaction의 경리 수준을 말합니다. 트랜잭션 처리 시 다른 트랜잭션에서 접근해 자료를 수정하거나 볼 수 있도록 하는 수준입니다.Transaction Isolation Level의 종류와 특성Transaction Isolation Level에는 READ UNCOMMITTED, READ COMMIITED, REPEATABLE READ, SERIALIZE 네 가지 종류가 있습니다. 1)READ UNCOMMITTED1) COMMIT 되지 않은 데이터에 다른 트랜잭션에서 접근할수 있다.2) INSERT, UPDATE, DELETE 후 COMMIT 이나 ROLLBACK에 상관없이 현재의 데이터를 읽어온다.3) ROLLBACK이 될 데이터도 읽어올 수 있으므로 주의가 필요하다.4) LOCK이 발생하지 않는다.READ COMMIITED1) COMMIT 된 데이터에 다른 트랜잭션에서 접근할 수 있다.2) 구현 방식이 차이 때문에 Query를 수행한 시점의 데이터와 정확하게 일치하지 않을 수 있다.3) LOCK이 발생하지 않는다.4) MySQL에서 많은 양의 데이터를 복제하거나 이동할 때 이 LEVEL을 추천한다.REPEATABLE READ1) Default LEVEL이다.2) SELECT시 현재 시점의 스냅샷을 만들고 스냅샷을 조회한다.3) 동일 트랜잭션 내에서 일관성을 보장한다.4) record lock과 gap lock이 발생한다.5) CREATE SELECT, INSERT SELECT시 lock이 발생한다.SERIALIZE1) 가장 강력한 LEVEL이다.2) SELECT 문에 사용하는 모든 테이블에 shared lock이 발생한다.LOCK과 테이블, 어떻게 해결할 수 있을까?지금부터는 관련된 내용을 확인해보겠습니다. 우선 현재의 경리 수준부터 알아보겠습니다.mysql> SHOW VARIABLES WHERE VARIABLE_NAME='tx_isolation'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | tx_isolation | REPEATABLE-READ | +---------------+-----------------+ 1 row in set (0.00 sec) 다음으로 TEST 테이블을 만듭니다. 이때 SELECT절의 테이블을 UPDATE할 경우, 대기 상태로 빠지는 것을 확인해보겠습니다. 테이블을 만들고 상태를 확인합니다.CREATE TABLE test.TB_PROD_BAS_TEST ( PRIMARY KEY (PROD_ID) ) SELECT T101.PROD_ID ,T101.PROD_NM ,T101.PROD_EN_NM ,T101.PROD_MEMO FROM test.TB_PROD_BAS T101 ; -- 생성시 INFORMATION_SCHEMA.PROCESSLIST 로 상태를 확인합니다. mysql> SELECT -> * -> FROM INFORMATION_SCHEMA.PROCESSLIST -> WHERE USER = 'hansj' -> AND COMMAND <> 'Sleep' -> \G *************************** 1. row *************************** ID: 11004 USER: hansj HOST: 192.168.1.150:50711 DB: test COMMAND: Query TIME: 5 STATE: Sending data INFO: CREATE TABLE test.TB_PROD_BAS_TEST ( PRIMARY KEY (PROD_ID) ) SELECT T101.PROD_ID ,T101.PROD_NM ,T101.PROD_EN_NM ,T101.PROD_MEMO FROM test.TB_PROD_BAS T101 1 row in set (0.00 sec) 다음으로 테이블 생성 시 UPDATE를 해 대기 상태로 빠지는지 확인해보겠습니다.UPDATE test.TB_PROD_BAS SET PROD_MEMO = 'TEST' WHERE PROD_ID = 1 ; mysql> SELECT -> * -> FROM INFORMATION_SCHEMA.PROCESSLIST -> WHERE USER = 'hansj' -> AND COMMAND <> 'Sleep' -> \G *************************** 1. row *************************** ID: 11004 USER: hansj HOST: 192.168.1.150:50711 DB: test COMMAND: Query TIME: 24 STATE: Sending data INFO: CREATE TABLE test.TB_PROD_BAS_TEST ( PRIMARY KEY (PROD_ID) ) SELECT T101.PROD_ID ,T101.PROD_NM ,T101.PROD_EN_NM ,T101.PROD_MEMO FROM test.TB_PROD_BAS T101 *************************** 2. row *************************** ID: 11006 USER: hansj HOST: 192.168.1.150:50719 DB: test COMMAND: Query TIME: 22 *****이부분 중요합니다.****** STATE: updating *****이부분 중요합니다.****** INFO: UPDATE test.TB_PROD_BAS SET PROD_MEMO = 'TEST' WHERE PROD_ID = 1 2 rows in set (0.00 sec) 위의 TIME을 보면 테이블이 생성될 때까지 대기하고, UPDATE 문의 상태가 updating 으로 표시됩니다. 하지만 이렇게 나올 경우 건수가 많으면 실제 UPDATE 중인지 대기상태인지 확인하기가 어렵습니다. LOCK이 걸린 테이블을 확인하려면 INNODB LOCK 테이블로 정확하게 알 수 있습니다. 아래 세 가지 테이블로 확인해보겠습니다. 보다 자세한 설명은 MySQL 홈페이지를 확인합니다.information_schema.INNODB_TRXLOCK을 걸고 있는 프로세스 정보information_schema.INNODB_LOCK_WAITS현재 LOCK이 걸려 대기중인 정보information_schema.INNODB_LOCKSLOCK을 건 정보위의 각 항목마다 테이블 생성 및 UPDATE 시 정보가 어떻게 나타나는지 확인해보겠습니다.1.information_schema.INNODB_TRXmysql> SELECT -> T101.TRX_ID -> ,T101.TRX_STATE -> ,T101.TRX_STARTED -> ,T101.TRX_REQUESTED_LOCK_ID -> ,T101.TRX_WAIT_STARTED -> ,T101.TRX_WEIGHT -> ,T101.TRX_MYSQL_THREAD_ID -> ,T101.TRX_ISOLATION_LEVEL -> ,SUBSTR(T101.TRX_QUERY,1,10)AS TRX_QUERY -> FROM information_schema.INNODB_TRX T101 -> ; +---------+-----------+---------------------+-----------------------+---------------------+------------+---------------------+---------------------+------------+ | TRX_ID | TRX_STATE | TRX_STARTED | TRX_REQUESTED_LOCK_ID | TRX_WAIT_STARTED | TRX_WEIGHT | TRX_MYSQL_THREAD_ID | TRX_ISOLATION_LEVEL | TRX_QUERY | +---------+-----------+---------------------+-----------------------+---------------------+------------+---------------------+---------------------+------------+ | 8771591 | LOCK WAIT | 2019-05-27 16:15:53 | 8771591:70031:4:306 | 2019-05-27 16:15:53 | 2 | 11006 | REPEATABLE READ | UPDATE tes | | 8771586 | RUNNING | 2019-05-27 16:15:51 | NULL | NULL | 1538969 | 11004 | REPEATABLE READ | CREATE TAB | +---------+-----------+---------------------+-----------------------+---------------------+------------+---------------------+---------------------+------------+ 2 rows in set (0.00 sec) TRX_ID_STATE트랜잭션의 상태를 나타냅니다. 실행 중인지 LOCK WAIT 상태인지 알 수 있습니다.TRX_MYSQL_THREAD_IDPROCESSLIST 의 ID를 나타냅니다.TRX_ISOLATION_LEVELISOLATION LEVEL을 나타냅니다.따라서 위의 내용을 보면 CREATE TABLE이 실행 중인 것과, UPDATE가 LOCK WAIT인 것, 그리고 관련된 PROCESSLIST의 ID까지도 알 수 있습니다2.information_schema.INNODB_LOCK_WAITSmysql> SELECT -> * -> FROM information_schema.INNODB_LOCK_WAITS T101 -> ; +-------------------+---------------------+-----------------+---------------------+ | requesting_trx_id | requested_lock_id | blocking_trx_id | blocking_lock_id | +-------------------+---------------------+-----------------+---------------------+ | 8771591 | 8771591:70031:4:306 | 8771586 | 8771586:70031:4:306 | +-------------------+---------------------+-----------------+---------------------+ 1 row in set (0.01 sec) requesting_trx_idLOCK WAIT 인 TRX_IDblocking_trx_idLOCK 을 건 TRX_ID현재 LOCK이 걸린 TRX_ID와 LOCK을 걸어둔 TRX_ID를 알 수 있습니다.3.information_schema.INNODB_LOCKSmysql> SELECT -> * -> FROM information_schema.INNODB_LOCKS -> ; +---------------------+-------------+-----------+-----------+----------------------+------------+------------+-----------+----------+-----------+ | lock_id | lock_trx_id | lock_mode | lock_type | lock_table | lock_index | lock_space | lock_page | lock_rec | lock_data | +---------------------+-------------+-----------+-----------+----------------------+------------+------------+-----------+----------+-----------+ | 8771591:70031:4:306 | 8771591 | X | RECORD | `test`.`TB_PROD_BAS` | PRIMARY | 70031 | 4 | 306 | 1 | | 8771586:70031:4:306 | 8771586 | S | RECORD | `test`.`TB_PROD_BAS` | PRIMARY | 70031 | 4 | 306 | 1 | +---------------------+-------------+-----------+-----------+----------------------+------------+------------+-----------+----------+-----------+ 2 rows in set (0.01 sec) lock_trx_idLOCK 과 관련된 TRX_IDlock_modeX 쓰기, S 읽기 2)어떤 테이블이 LOCK을 걸고 있는지 알 수 있습니다.위의 내용들을 통해 REPEATABLE READ에서 CREATE SELECT시 SELECT 테이블에 LOCK이 걸려 UPDATE가 대기하게 되는 것을 알 수 있습니다. 이번에는 Transaction Isolation Level 을 READ COMMIITED로 변경하고 CREATE SELECT 및 UPDATE를 진행해보겠습니다.SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SHOW VARIABLES WHERE VARIABLE_NAME='tx_isolation'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | tx_isolation | READ-COMMITTED | +---------------+-----------------+ 1 row in set (0.00 sec) UPDATE 문은 다음과 같이 수행됩니다. mysql> UPDATE test.TB_PROD_BAS -> SET PROD_MEMO = 'TEST' -> WHERE PROD_ID = 1 -> ; Query OK, 0 rows affected (0.04 sec) Rows matched: 1 Changed: 0 Warnings: 0 기존에 대기했던 것과 다르게 0.04초가 걸렸습니다.mysql> SELECT -> * -> FROM INFORMATION_SCHEMA.PROCESSLIST -> WHERE USER = 'hansj' -> AND COMMAND <> 'Sleep' -> \G *************************** 1. row *************************** ID: 11004 USER: hansj HOST: 192.168.1.150:50711 DB: test COMMAND: Query TIME: 9 STATE: Sending data INFO: CREATE TABLE test.TB_PROD_BAS_TEST ( PRIMARY KEY (PROD_ID) ) SELECT T101.PROD_ID ,T101.PROD_NM ,T101.PROD_EN_NM ,T101.PROD_MEMO FROM test.TB_PROD_BAS T101 1 row in set (0.00 sec) -- 프로세스 정보도 CREATE TABLE 만 진행중임을 알수 있습니다. mysql> SELECT -> T101.TRX_ID -> ,T101.TRX_STATE -> ,T101.TRX_STARTED -> ,T101.TRX_REQUESTED_LOCK_ID -> ,T101.TRX_WAIT_STARTED -> ,T101.TRX_WEIGHT -> ,T101.TRX_MYSQL_THREAD_ID -> ,T101.TRX_ISOLATION_LEVEL -> ,T101.TRX_QUERY -> FROM information_schema.INNODB_TRX T101 -> ; +---------+-----------+---------------------+-----------------------+------------------+------------+---------------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TRX_ID | TRX_STATE | TRX_STARTED | TRX_REQUESTED_LOCK_ID | TRX_WAIT_STARTED | TRX_WEIGHT | TRX_MYSQL_THREAD_ID | TRX_ISOLATION_LEVEL | TRX_QUERY | +---------+-----------+---------------------+-----------------------+------------------+------------+---------------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 8771856 | RUNNING | 2019-05-27 17:17:45 | NULL | NULL | 4594347 | 11004 | READ COMMITTED | CREATE TABLE test.TB_PROD_BAS_TEST ( PRIMARY KEY (PROD_ID) ) SELECT T101.PROD_ID ,T101.PROD_NM ,T101.PROD_EN_NM ,T101.PROD_MEMO FROM test.TB_PROD_BAS T101 | +---------+-----------+---------------------+-----------------------+------------------+------------+---------------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) READ COMMITTED LEVEL로 CREATE만 수행 중인 것을 알 수 있습니다.mysql> SELECT -> * -> FROM information_schema.INNODB_LOCK_WAITS T101 -> ; Empty set (0.00 sec) mysql> SELECT -> * -> FROM information_schema.INNODB_LOCKS -> ; Empty set (0.00 sec) LOCK을 걸고 걸린 것이 없어 내용도 없습니다.Conclusion지금까지 Transaction Isolation Level 을 기준으로 CREATE SELECT 시 SELECT 에 사용되는 테이블도 LOCK이 걸릴 수 있는 것을 확인했고, 그에 따른 해결 방법까지 알아봤습니다.INSERT INTO SELECT에서도 같은 현상이 나타납니다. 그렇기 때문에 운영 중인 테이블을 복제(CREATE SELECT)하거나 다른 테이블로 옮길 경우(INSERT SELECT) Transaction Isolation Level을 READ COMMITTED 변경하고 작업하기를 권장합니다.그렇지 않으면 관련된 TABLE은 LOCK이 걸리고, 관련 Query들이 대기 상태로 빠지면서 시스템 장애가 발생할지도 모릅니다.참고1)MySQL :: MySQL 5.6 Reference Manual :: 14.7.2.1 Transaction Isolation Levels2)MySQL :: MySQL 5.6 Reference Manual :: 14.7.1 InnoDB Locking글한석종 부장 | R&D 데이터팀hansj@brandi.co.kr브랜디, 오직 예쁜 옷만
조회수 1438

Android 의 Sqlite Tip

Android 와 SqliteAndroid 에서 Sqlite 는 오랫동안 사용되어 왔습니다. 지금은 Realm 과 그외의 데이터베이스들이 그 위치를 넘보고 있지만 여전히 사용되고 있음은 틀림없습니다.현재 Jandi 는 서버의 대다수 정보를 앱의 Sqlite-Database 에 Cache 를 하고 있습니다. 따라서 Sqlite 를 얼마나 잘 분리하고 제어하느냐가 앱 자체의 라이프사이클에 큰 영향을 미칩니다.오늘은 Android 팀이 Sqlite 를 어떻게 사용하는지 공유해드리고자 합니다.1. ORM안드로이드만 하신 분들에게는 다소 생소한 개념일 수 있지만 다른 분야에서는 널리 사용되고 있습니다.Android 에서 Sqlite 는 Database 용 Access 객체를 통해서 column/row 단위로 정보를 가져와서 객체를 완성합니다. 하지만 Access 객체에 일일이 Query 를 작성하는 것은 실수가 많을 뿐더러 column/row 단위 정보 매핑 작업은 매우 불편하고 지루하며 잠재적 버그를 내포한 작업니다.그러기 때문에 Object-Query-Databse 를 각각에 맞게 매핑해주는 라이브러리들 통해 단순하고 반복적인 작업을 간단하게 회피할 수 있습니다.아래의 블로그들이 Sqlite-Orm 라이브러리를 사용하는 좋은 정보들이 될 것입니다. 현재 Jandi-Android 의 주요 Orm 라이브러리는 OrmLite 입니다.Sqlite-Orm : 네이버 기술블로그GreenDao BenchmarkRealm Database2. Database-Access유사 관심사 Domain 끼리 묶음수많은 데이터를 테이블로 관리하다보면 많은 Database-Access-Object(DAO) 가 필요합니다. 하지만 자세히 들여다보면 관계된 것끼리의 묶음이 생기게 되며 이를 묶어서 하나의 Access 객체를 만들 수 있습니다.Jandi 의 메시지는 크게 Text, File, Sticker 로 구분되어 있으며 이에 대한 상위로 Message 라는 개념이 있습니다. Text, File, Sticker 는 하위에 각각 2~3개의 Table 로 구성되어 있습니다. 이 전체를 각각 분리해서 관리하면 그에 따른 부수적인 제어 코드들이 불가피 하기 때문에 Jandi 에서는 최상위 Message 도메인에 맞춰서 하나의 묶음으로 관리하였습니다.코드는 다음과 같은 형태를 띄고 있습니다.public class MessageRepository { public List getMessages(/*args...*/) { /*코드 생략*/}; public Message save(/*args...*/) { /*코드 생략*/}; public Message update(/*args...*/) { /*코드 생략*/}; public Text getText(/*args...*/) { /*코드 생략*/}; /*이하 생략*/ } 이러한 형태로 독립성을 가질 수 있는 최상위 Domain 을 기준으로 Repository 클래스를 가지고 있습니다.3. Repository 요청 관리하기위의 모습처럼 관심사별로 Domain 을 분리한 이유 중 가장 큰 이유는 Domain 단위로 요청을 관리하기 위함입니다.Android-Sqlite 는 내부적으로 Read-Write lock 을 가지고 있지만 신뢰도가 높다 할 수 없으며 다양한 테이블에 동시 접근하는 경우 오류가 나지 않을 것이라 보장할 수 없습니다.따라서 보장이 안될바에 1번에 1개의 요청만 처리 할 수 있도록 Domain 단위로 요청을 제한해버리자는 결론을 냈습니다.그러기 위해 2가지 코드를 사용하였습니다.Lock 객체 사용요청을 래핑할 template interface 사용하기멀티 쓰레드로 요청을 처리할 때 Lock 객체를 통해 1번의 1개씩의 동작만 할 수 있도록 하였으며 이를 좀 더 쉽게 쓸 수 있도록 하기 위해 Template Interface 를 만들었습니다.public class LockTemplate { private Lock executorLock; LockTemplate() { executorLock = new ReentranceLock(); } protected T execute(Executable e) { executorLock.lock(); try { return e.execute(); } finally { executorLock.unlock(); } } interface Executable { T execute(); } } 위와 같은 클래스를 만들고 앞서 만든 Repository 클래스에 상속받도록 하였습니다.코드는 다음과 같습니다.public class MessageRepository extends LockTemplate { /*싱글톤으로 동작하도록 합니다. 코드 생략*/ public List getMessages(long roomId) { return execute(() -> { return dao.query(roomId); }); } public int save(List messages) { return execute(() -> { return dao.save(messages); }); } } 위와 같이 함으로써 최종적으로 같은 Repository 에 멀티쓰레드에서 요청을 하여도 1개의 처리만 할 수 있도록 원천적으로 작업하였습니다.정리Android 에서 Sqlite 는 Mysql 이나 PostSQL 과 유사한 RDBMS 를 제공하는 DB 툴입니다. 하지만 기본적인 사용이 매우 번거러울 뿐만 아니라 메모리릭과 오류에 매우 쉽게 노출됩니다. 그래서 다음과 같은 방법을 통해 최소한의 안전망을 구현했습니다.ORM 을 사용하라.반복적이고 DB 접근 과정에서 오류를 최소화 시켜줍니다.Lock 을 의도적으로 사용하라.멀티쓰레드 접근에 의한 오류를 최소화 합니다.synchroized 보다는 concurrent 패키지에서 제공해주는 Lock 을 사용해주세요.#토스랩 #잔디 #JANDI #개발 #앱개발 #인사이트
조회수 893

Team Profile: Meet Yonghyun

Read In KoreanAs a yet minuscule startup, each member holds a significant power over the overall atmosphere of the team. And in our ultimate quest to make big waves in the data world, we need to make sure that the people at the helm are at least kind of cool. We think we’ve done a pretty good job so far in assembling a society of unique but equally driven members.So we bring you this seven-part series, one of each devoted to interviewing each of our members in detail, to give you an in-depth glimpse into the people responsible for bringing you the future of machine learning with Daria. Plus, we peppered the interviews with questions from Dr. Aron’s “The 36 Questions that Lead to Love”*, cherry picked to make work appropriate and concise, but interesting.(*actually falling in love with our members highly discouraged)Yonghyun joined the XBrain team in August as a software engineer, and has worked closely with other members in constructing the software that Daria runs on. But his interests run beyond just making sure that Daria become the future star of machine learning and data science — Yonghyun is also an avid soccer player, and an enthusiastic dabbler of virtual and artificial reality. Learn more about him here!Yonghyun saves a few minutes of his day for some introspection/staring broodily out the windowHi Yonghyun! Start by telling us about your role.YH: I work with JM as a software engineer at XBrain, developing and testing our software infrastructure.How do you usually spend a work day?YH: I usually come to work around lunchtime, and devote my time to whatever needs to be done for the day. Today we worked on tests involving transferring data from MS SQL. I enjoy afternoon walks sometimes, and usually head home after working a little post-dinner.Tell us about the parts of your job that you most enjoy.YH: I enjoy transforming machine learning modules into Spark to fit with the cloud system, and looking at the code Suzin’s written in order to understand the process.What about the aspects that you least enjoy or find challenging?YH: Setting up the environment to test our systems is something I least enjoy. It’s frustrating, because you can follow all the steps and still go the wrong way.Pick one item on your desk that tells us something about you.YH: I don’t have a whole lot on my desk…so I would probably have to say my laptop. The very very big laptop provided to me by the company.Laptop in photo is larger than it appearsWhat made you want to become a software engineer?YH: I was originally majoring in History in college, but I was struck by how computer science could help you create something tangible. Programming helps turn your ideas into reality on the screen, which is something I was really drawn to.So why XBrain?YH: As an incoming programmer, you don’t really come across the opportunity to participate in the making of a product that’s still under development. It’s a good learning experience for me to watch Daria’s progress. Furthermore, because I started programming at a relatively later stage, I still need help with my mathematical background, which working here allows me to do.As the one of the newest additions to the team, tell us about your vision for XBrain.YH: I think my vision is one of becoming a household name for a machine learning tool that a lot of people use on the daily — Daria doing useful things in every facet of the world, big or small.What is your go-to work playlist?YH: When I’m coding, I usually prefer EDM, so stations like Hardwell On Air, and hip-hop as well.Recommend a movie for our next Cinema Society, please.YH: Watchmen (2009). Its protagonist Rorschach is an anti-hero, and the plot line is complex and interesting to follow.Where do you see yourself 10 years from now?YH: Career-wise, honestly I wouldn’t mind what I have right now — working a job that I love without getting too swamped with deadlines, with plenty of time for exercise and socializing, playing soccer with my friends.Given the choice of anyone in the world, whom would you want as a dinner guest?YH: Mark Zuckerberg, maybe? I’d like to hear about his ideas for the future.If you had to have dinner with one XBrain member, who would it be and why?YH: JP, our new machine learning engineer. I’d like to get to know him better, and he seems like an interesting person.Would you like to be famous? In what way?Nope.What would constitute a “perfect” day for you?YH: A day productive enough that I could go to bed without worrying about the next day.If you were able to live to the age of 90 and retain either the mind or body of a 30-year-old for the last 60 years of your life, which would you want?YH: The body of a 30 year old… I don’t think that youth isn’t everything when it comes to minds.For what in your life do you feel most grateful?YH: The privilege to have been able to learn and achieve everything I’ve wanted is something I’ll always be thankful for, and also the flexibility to be able to change directions I’m headed in.If you could wake up tomorrow having gained any one quality or ability, what would it be?YH: I’ve always wanted more drive to carry out the projects I’ve devised in my head, the ability to see things through no matter what.Is there something that you’ve dreamed of doing for a long time? Why haven’t you done it?YH: I’ve always wanted to learn how to cook. I lived in a dorm in college so I didn’t have the opportunity then, but now would be a good time as any.What is the greatest accomplishment of your life?YH: I would say my greatest accomplishment is putting my best efforts into learning and improving my mind, inside and outside of school.What is your most memorable XBrain moment?YH: My fondest memories are usually of events we held outside — the hike we went on in September, or the soccer game we had. I like that we got to bond as a team and get some exercise.If you knew that in one year you would die suddenly, would you change anything about the way you are now living? Why?YH: I haven’t been able to get decent sleep recently, so I’d probably give myself some time to rest.If you were going to become close friends with someone, please share what would be important for him or her to know.YH: I don’t have very strong likes or dislikes, so I usually get along with most people.What, if anything, should never be joked about?YH: You should never joke about the disadvantaged, or others’ insecurities.If you could sum up XBrain in three words or less?YH: Freedom. Consideration. Learning…. Is that too serious?#엑스브레인 #팀원소개 #팀원인터뷰 #기업문화 #조직문화 #팀원자랑

기업문화 엿볼 때, 더팀스

로그인

/