스토리 홈

인터뷰

피드

뉴스

조회수 1331

좀비 멘토, 창업 놀음 경계하는 군자들의 세상

페이스북을 보다 보면, 좀비 멘토나 창업 놀음에 관련된 글만 나오면 제목만 보고 단숨에 공유하는 사람들이 많다. 이 글을 통해 그것이 왜 문제이며, 인류의 발전에 어떤 악영향을 미치는 지를 설명할 계획이다. 물론, 이 글은 인기가 없을 것이다. 이유는 간단하다. SNS가 갖고 있는 나르시시즘에 대한 내용인데, 내 글을 공유하는 사람들은 '이 글에 동의합니다'라는 단 한 가지 이유로 공유한다. 그러나, 좀비 멘토, 창업 놀음에 관련된 글을 공유하는 사람들은 두 가지 이유로 글을 공유한다.첫 째. '이 글에 동의합니다.' 사실 이런 경우의 경우 공유수 100을 넘기도 힘들다.둘째. '이런 사람들이 정말 많으니 조심하세요. 하지만 나는 아닙니다. 공유함으로써 내 진정성을 검증합니다'둘째와 같은 이유가 소셜 네트워크에서 아주 강한 파급효과를 갖게 되고, 페이스북에는 이와 관련된 글들이 범람해 보이는 것 같은 착시현상을 느끼게 된다. 공유하는 사람들의 패턴도 매우 정형화되어있다. 물론 댓글 또한 정형화되어있다. [공유] 스타트업도 결국 이런 사람들이.. 조심해요!댓글 : 좋은 정보 감사합니다.. 정말 사짜들이 넘치는 세상이에요. 본질에만 충실합시다.[공유] 아니! 이런 게 있었나? 동굴 속에서 밤새 개발만 하느라 몰랐는데 ㅎㅎ댓글 : ㅇ 대표 몸좀 사리면서 하라구! [공유] 정말 많이 반성하게 됩니다. 혹시 나도 이런 사람이 아니었을까요? 댓글 : 아닙니다! 당신은 진짜예요! 본질에 아주 가까운 사람이랍니다!특히 스타트업에서 본질이라는 말을 매우 남발하는데, 안타깝게도 요즘 세상은 본질이라 불리는 진리에 근접한 개념들이 해체되고 있는 세상이다. 뉴턴의 고전역학은 양자역학을 만났다. 사물이 부딪치면 충돌한다는 개념은 양자물리학으로 보면 어떤 사물도 실제로 만나지 않는다. 세상의 진리는 해체되고, 우리가 진리 또는 본질이라 여겼던 것이 무너지면서 인생과 아집의 덧없음이 느껴지는 세상에 살고 있는데, 아직도 우리는 고전적인 선악구도, 좋은 것과 나쁜 것. 옳은 것과 틀린 것을 찾는데 혈안이 되어있는 듯하다.진리의 해체. 정답이 없는 데 정답을 가르치고, 정답과 어긋나면 회초리를 맞는 세상.우리나라는 특히 공식과 절대적인 진리를 좋아한다. 누군가 강의를 한다고 하면 지식과 정보를 받아 적는데 집중한다. 스타트업 실패 공식 100! 이런 것들이 아주 큰 인기를 끈다. 성공한 스타트업은 이유가 다양하지만, 실패한 스타트업은 이유가 정해져 있다고 한다. 스타트업 대표는 대외적으로 나대면 안 되고 본질에만 집중해야 되고, 고객을 만나면 고객은 정답이기 때문에 그들의 말을 꼼꼼히 받아 적고 그대로 만들어줘서 돈을 받아내야만 한다. 그 돈을 받으면 ARPU를 측정해서 CLV를 어쩌고 저쩌고...그런데, 여기서 아주 중요한 명제적인 오류가 있다. 성공한 스타트업이 이유가 없다고 정의한 순간, 성공한 스타트업이 실패하는 스타트업의 99%의 요소를 갖고 있다고 해도 이상하지 않게 된다. 성공한 스타트업의 패턴이 있고, 실패한 스타트업의 패턴이 있어야만 그것을 진리로 가공해서 절대적인 교육요소로 활용할 수 있게 된다. 실패한 스타트업의 요소는 단순히 레퍼런스로서 학습할 필요는 있지만, 성공한 스타트업의 요소들과 100% 충돌하지 않는 이상 그것 또한 진리가 아니다. 결국, 정답이라는 것은 없는 셈이다. 그런데, 우리 주변을 보면 자신이 세워놓은 이 진리에 어긋나는 사람들의 진정성을 하대하고 회초리를 때리는 경우가 많다.누군가 글에 이렇게 쓰여있었다. '내가 가짜가 아님을 계속해서 증명해야 한다'이 무슨 터무니없는 소리인가? 누구에게, 어디에 증명을 해야 한다는 말인가? 나의 진정성과 나의 부족함은 온전히 내 안의 피상적인 경험 속에서 피어나고 발전하는 일련의 과정인데, 대체 누구를 위해 살아가고 그 삶을 검증받아야 한다는 것인가? 부모님이 퇴근하면 내가 공부를 열심히 했다는 것을 증명하고 싶다는 유아기적인 욕구가 살아나는 건가?점점, 사람들이 말하는 '본질'은 입을 다물고 아무것도 하지 않은 채 동굴 속에서 고객과 서비스 개발하는 것이라고 정의되는 것 같다. 넥슨의 김정주와 엔씨소프트의 김택진 창업주 등이 그들이 말하는 최고의 기업가라 볼 수 있겠다. 나는 창업을 3년을 넘게 하면서 그들로부터 뭔가 배운 적이 없기 때문이다. 책도 안 쓰고 강연도 안 나온다. 이 얼마나 본질에만 충실한 기업가들인가? 그들이 말하는 본질을 생각하면, 초등학교나 중학교 시절로 돌아가는 것 같다. 나는 어렸을 때부터 나서는 성격이었다. 반장선거도 항상 나갔고, 수업시간에 친구들 웃겨주는 즐거움으로 살았다. 그런데, 내성적인 아이들은 내 행동을 이해하지 못하고 나를 싫어하는 경우가 많았다. 외향적인 사람들은 내성적인 사람들을 싫어하고 미워하는 경우가 없는데, 내성적인 사람들은 외향적인 사람들을 나댄다고 싫어한다. 그때도 아이들은 똑같은 말을 했다. '너 숙제나 잘하고 반장선거를 나가던지. 너 알림장도 안 가지고 다니잖아!' 내가 알림장을 안 갖고 다니던 갖고 다니던 너랑은 노상관이라고 말하고 싶었다. 꼬우면 지가 반장 하던가.좀비 멘토라는 허상좀비 멘토도 이와 비슷하다. 내가 경험한 바에 따르면 2000년대 초반에 활동한 기업가들 사이에 무언가 파벌과 자격지심이 존재하는 듯했다. 그리고, 좀비 멘토는 창업자들이 만들어낸 개념이라기보다는 멘토들끼리 만들어놓은 개념 같다는 느낌이 매우 강하게 들었다. 평소 왕래하던 분인데, 사람들이 그분을 두고 좀비 멘토라고 부르는 경우도 들어봤다. 나는 이해가 가지 않았다. 멘토라는 것은 어차피 자신만의 경험을 잣대로 자신을 찾아온 사람들에게 조언을 해주는 존재고, 그것을 받아들이고 말고의 차이는 찾아간 사람의 책임이다. 그 가르침이 옳지 않다고 해서 좀비라고 부르면, 진리에 근접한 성인군자만이 멘토를 할 수 있나?가끔 경험 있으신 분들을 만날 때가 있는데, 그럴 때마다 그분들이 자꾸 '나는 좀비 멘토가 아니에요'라고 말하는 것도 피로가 쌓인다. 왜 세상으로부터 우리는 검증받아야 하는 존재인가? 경험의 다양성, 성격의 다양성을 우리가 강제로 받아들이는 것도 아니고, 내가 주체가 되어 선택하는 세상 속에 살고 있는데 왜 내 눈에 아니꼬우면 미워하고 시기하고 비판하는 걸까?물론, 내가 사람들의 말을 곧이 곧대로 듣고 믿고 따르는 성격이 아니라서 그럴 수도 있다. 사람들은 나를 보고 '말 정말 안 듣는 성격'이라고 한다. 인정한다. 실제로 사람들의 말을 잘 듣지 않고 흥미가 없으면 표정관리도 안되기 때문에 누구나 한눈에 알 수 있다. 하지만 그들이 말하는 것들은 내 머릿속에서 의식적으로든 무의식적으로든 매우 강한 영향을 미쳐왔고 앞으로도 그럴 것이다. 그 모든 선택의 주체에는 내가 있기 때문에 내가 누구를 만나서 무슨 이야기를 들었든 아무 상관없다. 지금의 잣대가 1년 뒤의 잣대와 동일하다는 보장이 없기 때문이다. 작년에 사람들이 내게 해줬던 많은 조언들이 올해의 사업에 얼마나 큰 도움이 되고 있는지 모른다. 그들은 같은 성격의 조언들이 아니라 저마다 다른 말들을 했다. 편식하지 않고 골고루 잘 들어뒀다. 내가 듣고 싶은 말만 들을 생각도 없고 듣기 싫은 말은 안들을 생각도 없었기 때문에 가능했던 것일지도 모른다. 내 기본선택은 '안 듣는다' 였기 때문에, 그에 대한 이익을 지금 보고 있는 것 같다. 그때 도와줬던 분들께는 지금 와서야 감사드리는 마음을 갖고 있다.짧은 인생 살면서도 이렇게 삶에 정답이 없다는 것을 느꼈는데,좀비 멘토 욕하는 분들은 얼마나 진리와 정답에 근접한가?그들의 진정성이 그저 '돈'과 '탐욕'에만 있다고 장담할 수 있나?인류가 전쟁을 멈춘 이유가 무엇이라고 생각하는가? 사람들은 핵이나 전쟁에 대한 공포라고 말하지만, 내 생각은 조금 다르다. 인류가 전쟁을 멈춘 이유는 절대적인 진리의 해체 과정을 겪고 있기 때문에 단순한 선악구도 명제를 통한 폭력성의 발현이 불가능하기 때문이다. 이제 우리는 '공산당은 빨갱이고 제거해야 한다'라는 단순한 명제에 도달할 수 없는 세상에 살고 있다. 이데올로기가 진리가 아니라는 것은 이제 중학생들도 안다. '우리나라'와 '다른 나라'의 경계, 인종의 경계, 언어의 경계 모든 것을 존중하고 받아들이고 있다. 나와 다른 남을 배척하는 세상이 종말을 향해가고 있기 때문에 전쟁이 일어나지 않는 것이다.하지만, 우리의 원시적인 심리적 근간에는 이런 선악구도를 만들고 끊임없이 투쟁하고자 하는 공격성이 담겨있다. 이 공격성은 SNS를 통해 여지없이 발휘되고 있다. 남을 까내리며 자신을 검증하고자 한다. 좀비 멘토에 대한 글을 쓴 사람은 '자신이 좀비 멘토가 아니라는 것', '자신은 뛰어난 멘토라는 것'을 말하는 것과 같다. 진리에 통달한 성인군자임을 계속해서 검증받는 것. 그것이 그들이 말하는'본질'에 조금 더 가깝게 느껴진다. '좀비 멘토', '창업 놀이', '사업 놀이' 모두 남을 까내리고 자신을 검증하고 올라서고 싶은 욕구 또는 남을 까내리고 가르침을 통해 내가 원하는 방향으로 시대를 끌어가고 싶어 하는 본능이 담겨있는 프로파간다라고 보인다. 단어 자체가 그러한 에너지를 담고 있다. 이런 나쁜 말은 쓰지 말아야겠다. 사람들이 착각하는 게, 이런 말들을 쓰는 것이 시대정신이고 용기 있는 행동이라 착각하는데 부정적이고 선악구도의 자극적인 이야기를 쓰고 공유하는 것은 결코 용기 있는 행동이 아니다. SNS에서 그러한 콘텐츠는 충분한 인기를 얻고 강하게 소비된다. 부정적인 이야기가 잘 먹히는 세상이다. 하지만, 우리 인류는 이미 이런 것을 필터링할 수 있는 능력을 배양해왔다. 이렇게 우리가 배양해온 지성의 힘을 본능보다 우위에 두고 진지하게 고민해볼 때다.인류는 이미 단순한 선악구도를 만들어 자신이 선임을 끝없이 인정받고 싶어 하는 원시적 욕구를 넘어설 수 있는 단계에 도달해있다. 인간사회에 정답이 없듯, 사업에도 정답이 없는 것 같다. 정답과 진리를 100% 안다고 생각하는 사람이 있다면 그냥 본인이 창업을 해서 큰돈을 벌어서 우리나라나 부자로 만들어줬으면 좋겠다.마지막으로, 내가 가장 존경하는 지두 크리슈나무르티의 말을 인용하며 글을 마친다.너 스스로를 인디언, 무슬림, 기독교인, 유럽인 등이라 무르는 순간 너는 폭력성을 갖게 된다. 이미, 너 스스로를 인류 그 자체와 분리시켜 생각하고 있기 때문이다. 네가 너 스스로를 믿음 또는 국가, 전통에 의해 인류와 분리하기 시작할 때 폭력성은 고개를 든다. 폭력을 이해하기 시작하는 순간, 너는 어떤 국가에도, 종교에도, 정치적인 이데올로기에도 속하지 않게 될 것이다.오직 인류 그 자체만을 위해 고민하기 시작할 때, 폭력은 완전히 이해되고 사라질 수 있다.ㅡ 지두 크리슈나무르티 
조회수 1547

미생과 스타트업

미생이라는 웹툰을 아는가.웹툰을 모르더라도 드라마로 한번쯤은 들어봤을 듯하다.미생을 처음 접한 것은 한창 직장생활에 지쳐있을 때였다.웹툰으로 퇴근길에 버스 안에서 직장인의 지침서라고 여길 정도로 푹 빠져있었다.신입으로 입사한 후임에게 권할 정도로회사 생활하는데 많은 사색과 물음을 던져 주는 작품이다.창업을 하고 한 동안 잊고 지냈다.TV를 안 보는 내 생활 속에서미생을 원작으로 한 드라마의 존재는 사실 끝나기 전까지도 모르고 있었다.뷰티 트렌드를 파악하기 위해 유튜브를 검색하다가우연히 철 지난 미생 드라마의 짤막한 편집 영상을 발견하였다.(출처: tvN "미생 "중에서, 영업3팀과 안영이)그렇게 하룻밤을 새워서 미생 영상을 찾아보며,다시금 나를 향한 물음을 되뇌게 되었다.창업을 결심하게 된 것은 대학생 시절부터였고,여러 가지 복합적인 이유가 지금의 길을 걷게 하고 있다.단 한 가지 이유로 창업하게 된 것은 아니다.주된 목적과 동기가 있지만 오직 그것 때문만 결정하지는 않았다.우리가 살아가면서 중요한 선택의 기로에 있을 때,단 한 가지 이유, 근거로 결정하는 일은 없다.다각적으로 고찰하고,다양한 이야기를 듣고,현재 상황에 대한 충분한 고려를 하고 난 후에야결정이라는 해답을 찾는다.마찬가지로창업을 결심한 것은 대학생 때였다지만,그 시기를 저울질할 때는 직장생활에서 느낀 좌절감, 부조리, 실망, 가능성, 확신 등의여러 요인들이 작용하였다.바둑을 조금 둘 줄 아는 나에게 있어미생이라는 단어가 특별하게 와 닿지는 않았었다.오히려직장 생활하는 중에 접한 미생 웹툰을 통해 특별한 단어로 느껴지기 시작했지.미생이라는 단어를 우리는 어떻게 볼 것인가완전히 살아있지 않은 상태를 어떤 시각으로 볼 것인가.1. 미생은 불합리하지만 현실이다.미생에 등장하는 인물들은 다들 능력이 있다.주인공 장그래를 비롯해서 오상식 차장, 안영이, 한석율부터악역처럼 인식되는 최 전무, 박 과장까지...드라마와 웹툰에서는 스토리 라인에 따라극적인 갈등을 그리기에악역이 존재하지만...이런 구분을 배제하고 오직 능력으로 보았을 때,이들은 모두가 능력이 출중한 인물들이다.마 부장의 꼰대 같은 모습이 싫겠지만(물론 나도 싫다),그가 대기업의 부장 자리까지 고만고만하게 올라온 사람이라고 볼 수 있을까?(출처: 윤태호 작가님의 웹툰 "미생" 중에서 박과장의 에피소드 중에서) 박 과장처럼 비리를 저지르는 인물에 대하여비난하는 것은 당연하겠지만그의 시작점에는 직장생활을 하면서큰 성과도 내고, 인정받는 능력자였다는 점을잊지 말아야 한다.그럼에도 완전하게 살지는 못하는 존재들!다른 시각에서 보면우리는 내심 장그래를 응원하고,오 차장과 영업 3팀에 몰입되어정의가 승리하길 고대했다.드라마 속 현실은 참 현실적이더라.인턴/비정규직이라는 한계!회사의 라인을 따라 흐르는 힘의 구도!시스템에 묻히는 개인의 개성들!우리는노력하고, 열정을 쏟은 만큼보상받길 원한다.그러나 삶은 꼭 그렇지가 않다는 것을 여실히 보여 준다.그리고 특히나 직장인 입장에서는 회사 다닐 맛을 잃어가게 된다.미생 시즌 1의 결말처럼 결국은 주요 인물들의 회사 밖으로 나가새로운 창업의 길을 걷게 되는 스토리를공감할 수밖에 없더라.2. 미생은 또한 가능성이다.미생은 살아있지는 않으나 죽지도 않은 상태를 뜻한다.아직은 완결 난 것이 아니라 다소 불리하게 보일지라도살아날 희망, 가능성이 있다는 점을 시사한다.직장에서 아등바등 하루하루 버티는 것은 신용카드 결제를 위함이라는 씁쓸한 농담이 있다.하지만 내가 직장을 다닐 적에는비록 적은 숫자가 통장에 찍혀도,회사 복지나 환경이 불만족스럽더라도가능성을 바라보고 출근했고,집을 향하면서 보람이라는 친구와 동행했다.물론 그 친구 옆에는 항상 피곤이라는 단짝도 있었지만 말이다.또 누군가에게는 승진이라는 희망을 가지고 이 꽉 물고 회사에 출근하기도 한다.지금의 위치보다 더 높은 곳을 바라고열정을 쏟는 직장인들도 존재한다.나와 같이 회사 밖 현실과 싸우는 부류가 있는 반면에나와 달리 회사 안 현실과 싸우는 부류가 있다.무엇이 옳고 그르냐는 넌센스다.내 입장에서는회사라는 시스템과 배경과 자원에본인의 능력을 발휘하여 임원이 되겠다는 꿈이더 승산이 높다고 생각한다."회사 생활이 전쟁터라고? 회사 밖은 지옥이야"뭐가 다르냐고?후방지원과 전우들이 있는 상태로 전쟁터에 나가는 것과혈혈단신으로 전쟁터로 나가는 것의 차이랄까?그 순간 전쟁터가 아닌 여기가 이래서 지옥이구나하고 파악했을 때, 직장을 그리워하게 된다.다니던 직장에서나의 능력은 십분 발휘되었다고 믿었다.실제로 큼직한 계약 건들과 기획한 사업들이 수익화 되는 모습에서자신감이 넘쳤었고,승승장구하면서 잠시 동안 내가 한가닥 하는 줄 알았다.마치 초창기의 박 과장처럼 말이다.이미 검증된 비즈니스 모델을 가지고,어느 정도 구체화된 아이디어와 계획들을 가지고동일한 패턴으로 창업을 수행한 초창기에....나는 무참히 깨지고, 실패하고, 좌절하고뒤늦게 회사 밖에서 깨닫게 되었다."내 능력이 아니라 회사의 능력이었구나"회사가 가진 레퍼런스들, 업력, 인프라, 영업망 등이 모든 것이 기본적으로 배경이 되어 주기에가능했던 일들이었다는 걸 간과하였다.나는 거기에 탑재된 부분적인 기능을 가진작은 소프트웨어에 불과했다.그러한 것들을 다시 무에서 유로 바꾸는 작업이상당한 시간과 비용이 수반된다는 점을부딪히고 아파보니까 알겠더라.회사생활이 합리적이지 않다고 생각했는데밖에 나오니까 합리적이라는 것이 보인다고 할까.그럼에도스타트업으로 출사표를 던진 나에게 있어서그때와는 또 다른 가능성과 희망을 품고 있다.오히려 이 부분에서 웹툰, 드라마 미생보다는살벌했던 "신의 한 수"란 영화가 더 피부에 와 닿는다.(출처: 영화 "신의 한수" 중에서, 안성기 님이 열연한 장님 바둑 고수)극 중 배우 안성기 님이 연기한장님인데 바둑을 두는 모습처럼....우리는 앞을 못 보면서 바둑을 두는모습이 더 가까울 것이다.안성기 님은 안 보여도 기억력이 좋아 바둑은 고수지만...우리는 안 보이면서 기억력도...안 좋은데... 우짜지?가능성이 희박하긴 한대...앞이 안 보이면, 다른 감각이라도극대화하여 고수가 되는 길을 선택했다.미생이라는 단어처럼 살았다고 할 수는 없지만, 죽지도 않아서완생이 될 기회를 노리며 준비하고 있다.3. 미생은 변화이다.불완전하다는 것은 또한 변화가 필요하다는 뜻이다.그대로 정체되어 있는 것이 아니라 활로를 찾아야 한다.완전하게 살아남기 위하여 한점, 한점 사활을 걸고 고민하며 묘수를 찾아야 한다.그리고 국면과 실리 사이에서 우리는 무리수와 승부수를 판단해야 한다.이 모든 활동은 지금 상황을 타개하기 위한,정체된 판세를 흔들기 위한,변화를 주어 성장을 도모하기 위함이다.이대로라면 이도 저도 아닌 게 아니라필패하게 된다.미생에 등장하는 인턴들을 보면,초반부에 모습과 후반부의 모습은 확연하게 차이가 난다.그들의 성장하는 과정을 우리는 엿볼 수 있다.정직원이라는 것이 최종 목표였다면,결과론적으로는 성장했으나 실패였다고 보겠지만삶이라는 판으로 보면, 미완에서 조금은 더 완성에 가까워졌다.발전하고, 더 성장하고, 더 기회를 만들 여지가 생겼다.스타트업도 마찬가지다.형세를 유지하려고 하는 것이 아니라형세를 바꾸려고 해야 한다.어느 정도까지 도달해야 완성이라고 부를 수 있을지는 나 역시 의문이다.하지만 미생이기 때문에 채워지지 않은 부분이 남아있다.그냥 흘러가는 대로, 판세에 따라 유유히 가다 보면,결착의 시점에서상대방이 준비해둔 포석에 놀아났다는 것을깨달았을 때는 이미 대국이 끝난 상태이다.우리가 준비한 포석대로,우리가 계획한 판세대로,흘러가게 하려면 변화를 주어야 하고,그 변화는 차별성, 기술, 인프라, 팀 빌딩 등 여러 가지 형태가 될 것이다.4. 대국이 끝났다고 다 끝난 것은 아니다.(출처: 이세돌과 알파고의  바둑대국, http://anngabriel.egloos.com/5978422)알파고와 이세돌 기사의 대국 장면은 전 세계가 주목하고, 많은 사회적 이슈를 생산해냈다.그중 가장 인상 깊었던 모습은대국이 끝나고 복기를 하는 이세돌 기사의 장면이다.알파고에게 패하고 나서 어디서부터 어느 부분에서놓친 부분이 있었는지복기하는 모습!다음 판에서 승리를 얻기 위해판을 되짚어 보는 것이다.다들 알파고가 승리한 것과이세돌 9단의 패배가 세상에 어떠한 영향을 줄 것인지에 대한이야기로 떠들썩할 때,묵묵하게 다음을 준비하는 모습이나는 오히려 더 멋지게 보이더라.그리고 그렇게 비록 한 판이지만이세돌 기사는 알파고를 상대로승리를 얻었다.작게는 하나의 판 안에서 미생이 존재하지만좀 더 범위를 넓히면,다음 판을 위한 미생이 존재하기도 한다.복기가 없이는 다음에 바뀌는 것이 없다.동일한 실수를 반복하는 것은실수가 뭔지 모르기 때문이거나실수를 알아도 대응하는 방법을 못 찾았기 때문이다.틀린 문제를 파악하지 못하면 다음에 비슷한 유형의 문제에서또 틀리게 되는 것이다.그래서 우리가 학창 시절,그렇게 많은 오답노트를 작성하지 않았던가.태생적으로 스타트업은 실수가 많지만,같은 실수를 반복할 만큼 여유롭지 못하다는 사실에우리는 복기의 능력을 최대한 살려야 한다.미완의 아름다움에 대한 수필을 읽은 적이 있다.완성된 것은 종결을 뜻하지만,미완은 아직도 변화와 더 채울 수 있음이 있어아름답다는 말이 참 멋들어진 표현이다.꼭 스타트업이 아니더라도,우리의 인생이 끝없는 미완의 연속일진대어느 순간이 되면,마치 다 알아버린냥,다 경험한 듯이 아는 채, 잘 난 채 하지는 않던가.우리가 늘 미완의 존재라는 사실을 인지하자.그러나...우리는 "미생"이라는 이름하에 제한을 걸어 놓으면 안 된다.미완이 아름다운 이유는 완성을 향하기 때문이기도 하다."나는 어차피 목표를 못 이룰 거야""내가 할 수 있는 것은 여기까지니까""흙수저 치고는 선방했어."이런 것은 미생이 아니라 대국을 포기한 것이다.완생을 바라고 성장해야 하는 미생과완생을 버리고 정체하는 미생은완전히 다르다.그래서 웹툰 미생의 시즌 2에서장그래와 영업 3팀이 주축이 된"온길"이라는 중소기업의다음 대국이 기대된다.열심히 시간을 쪼개서 글을 올리고 있습니다.비록 어줍지 않은 글이고,깊이가 얕은 글이지만...그래도 구독해주시고,심심할 때 한 번씩 들러주시는 분들께공해가 되지 않는 글이 되길 원합니다.그럼에도 말단에 조금은 회사 제품과 회사소개를 알리고자링크를 걸어 놓습니다.이제 막 제품을 첫 출시하다보니...한 분이라도 더 우리를 기억해 주십사,우리 제품을 돌아보길 바라며....추천과 지지서명 부탁드립니다.#클린그린 #스타트업 #창업가 #창업자 #마인드셋 #조언
조회수 1272

잔디 세일즈 인턴(A.K.A 라크로스 국가대표) Minjae를 만나다

* 2015년에 작성된 글입니다편집자 주: 잔디에는 현재 40명 가까운 구성원들이 일본, 대만, 한국 오피스에서 일하고 있습니다. 국적, 학력, 경험이 모두 다른 멤버들. 이들이 어떤 스토리를 갖고 잔디에 합류했는지, 잔디에서 무슨 일을 하고 있는지 궁금해 하시는 분들이 많았습니다. 이에 잔디 블로그에서는 매 주 1회 ‘맛있는 인터뷰’라는 인터뷰 시리즈로 기업용 사내 메신저 ‘잔디’를 만드는 사람들의 이야기를 다루고자 합니다. 인터뷰는 매 주 선정된 인터뷰어와 인터뷰이가 1시간 동안 점심을 함께 하며 다양한 이야기를 나누며 진행됩니다. 인터뷰이에 대해 궁금한 점은 댓글 혹은 이메일([email protected])을 통해 문의 부탁 드립니다.세일즈 팀의 귀염둥이 인턴, Min Jae가 사라졌다. 보통 인턴쉽 종료로 떠날 거라 생각할 수도 있겠지만, Min Jae가 떠난 이유는 다름 아닌 국가대표 착출. 응? 국가대표? 궁금증을 안고 Min Jae를 섭외해 맛있는 인터뷰를 진행해 보았다.반갑다. 잔디 멤버들은 잘 알고 있지만 ‘맛있는 인터뷰’ 독자를 위해 짧고 굵은 자기소개 부탁한다.안녕하세요? 비즈니스팀 인턴 Minjae라고 합니다. 영업팀 일을 비롯해 비즈니스 전략팀 업무도 참여하고 있습니다. 인턴으로서 여러 팀의 업무를 다양하게 하고 있습니다.역삼동으로 출근할 날이 얼마 안 남았는데.. 특별히 가고 싶은 음식점이 있다면?이전 ‘맛있는 인터뷰’를 보니 다들 맛있는 음식점을 잘 알고 계시던데.. 제가 길치라 어디에 뭐가 맛있는지 찾을 수가 없어 보통 많이들 가보신 세인트 어거스틴으로 정했습니다.맛있는 인터뷰에 빠질 수 없는 음식. 오늘의 메뉴는 팟타이, 나시고랭군 제대와 동시에 잔디에 합류했다. 예비역이라면 공감하겠지만 보통 전역하면 일정 기간 이상은 쉬고 싶어 할 것이다. 어떤 이유로 잔디에 바로 조인하게 되었는가?군대를 제대하면 무엇을 해야겠다고 생각한 적은 없었는데요. 4월에 제대 후, 복학까지 남은 기간이 4개월이라 뭔가 애매했었습니다. 그때 함께 인턴쉽을 하고 있는 Jisub을 통해 Jinho 형을 알게 되었고, 그 계기로 잔디 멤버로 합류하게 되었어요.Jinho를 알게 된 시점이 불과 몇 개월 전이라는 소리인데.. 엄청 친해 보여서 놀랐다.사실 학교에 있을 때부터 Jisub을 통해 Jinho형에 대한 이야기를 많이 들었어요. 한번은 제대하기 전 즈음에 Jisub이 Jinho형을 소개해 준다고 하는 거예요. 만나 보니 배울 점이 많은 형이었습니다. 지금은 같은 팀 선배이기도 하고요.회사 밖의 Jinho와 회사 안의 Jinho는 다른 편인가?음.. 많이 달라요. 하하, 농담이고요. Jinho는 주변 사람을 잘 챙겨주시는 것 같아요. 너무 잘 챙겨주셔서 Jinho님이 싫어하는 사람이 세상에 있을까 싶을 정도입니다. 함께 일할 수 있어서 영광입니다. (이 질문에 대해 답변할 때 Minjae는 유독 잔웃음이 많았다. – 편집자 주)세일즈 팀의 필수 설정 샷, 전화 받기.원래 스타트업에 관심이 있는 편인가?‘언젠가 나만의 사업을 하고 싶다’라는 생각은 하고 있었지만, 구체적인 계획은 없었어요. Jinho형을 만난 후, 잔디에 있는 다른 분들을 뵈었는데 배울 점이 정말 많을 것 같다는 생각이 들었어요. 사실 Jinho님이 처음부터 잘 챙겨주시고 해서 반하게 된 것도 없지 않은 것 같아요.‘나만의 사업을 하고 싶다’는 생각은 변함이 없는지?잔디에서 업무 경험을 하고 나니 내 사업을 하기에 앞서 ‘조금 경험을 쌓고 시작하는 게 좋지 않을까?’ 라는 생각을 하게 되었어요. 잔디 구성원들이 대부분  경력을 쌓고 오신 분들이잖아요? 그런 분들과 함께 일하면서 저는 아직 한참 더 배워야 한다는 걸 깨달았습니다.비즈니스 전략, 마케팅, 세일즈 같은 용어를 떠나서 생각하는 방식부터 다듬어야겠다는 생각을 했어요. 예를 들어 멤버들과 미팅을 할 때, 제가 2가지를 생각하고 있으면 다른 멤버들은 4가지 이상을 생각하고 계시더라구요. 생각의 너비와 깊이는 그 사람의 경험에서 우러나온 것이라 생각해요. 이런 점을 꼭 배우고 싶습니다. 그래서 사업에 앞서 어느 정도 경험을 익혀 생각의 폭을 넓히고 싶어요.잔디에서 그걸 하면 좋을 텐데 떠난다니 아쉽다. 떠나는 이유가 라크로스 국가대표 착출이라 들었다. 라크로스는 어떤 스포츠인가?쉽게 말하면 필드하키인데요. 잠자리채 같은 스틱을 갖고 경기를 해요. 그 채를 가지고 공중에서 공을 주고받는 경기죠. 처음 시작한 건 고등학교 때였어요. 그렇게 연이 닿아 한국에서도 제대로 하고 싶어 라크로스 관련 팀을 알아보다 보니 국가대표까지 하게 되었네요.국가대표 헬맷에 선명히 보이는 JANDI라크로스를 시작하게 된 계기가 있다면?한국에 있을 땐 운동을 그다지 좋아하는 편은 아니었는데요. 그러다 수업의 하나로 체육 관련 수업을 들었는데 나쁘지 않았어요. 그때부터 조금씩 체육 수업을 듣다 보니 재미가 붙었고, 축구, 레슬링, 라크로스까지 여러 운동을 하게 되었습니다.이번에 국가대표로 출전하는 경기에 대해 소개해 달라라크로스 아시안컵 경기에 출전하게 되었습니다. 월드컵처럼 4년에 한 번 열리는 경기인데 아시아권에 있는 국가들이 참가합니다. 우리나라에서는 라크로스가 비인기 종목에 선수층도 얇다보니 하위권에 머물렀었는데요. 올해는 동메달까지 노려보려고 합니다. 메달과 함께 돌아올게요!라크로스 관련 재미있는 일화가 있다면?사실 제 동생도 라크로스를 하고 있습니다. 고등학교 때 학교 대표로 함께 뛰었던 경험이 있는데요. 같은 팀, 같은 포지션으로 뛰었는데 알게 모르게 동료 의식이 생겨 우애가 깊어졌어요.이번 대회에 동생도 함께 출전하나?아쉽지만 동생은 군 입대 때문에 이번 아시안컵은 저 혼자 참가합니다.대학 졸업 후의 계획은?구체적인 계획은 없어요. 여행을 좋아해서, 졸업하면 우선 해외에서 일하고 싶어요. 경험이 어느 정도 쌓이면 한국과 외국을 오가며 할 수 있는 일을 직업으로 삼고 싶습니다.가장 가고 싶은 여행 장소가 있다면?욕심 같아서는 그냥 다 가보고 싶어요. 아프리카는 다녀왔으니 제외하고 아직 가본 적이 없는 남미는 꼭 여행해보고 싶네요.아프리카?군 시절 남수단으로 파견을 다녀왔어요. 제가 파견 갈 당시, 남수단이 한참 내전 중이었는데요. 아마 한국 뉴스를 통해 보신 분이 계시지 않을까 생각해 봅니다.이것이 바로 파병한 자에게만 주어진다는 메달들!부모님이 많이 걱정하셨을 것 같다많이 걱정하셨어요. 파견 지원할 때, 그리고 남수단으로 떠날 때 설득하느라 힘들었어요. 그래도 열심히 말씀드렸더니 어쩔 수 없이 보내주시더라고요. 통역병으로 파견되었기 때문에 남수단 곳곳을 돌아볼 수 있었어요. 개인적으로 좋은 경험이었다고 생각합니다.남수단에서 어떤 점이 가장 기억에 남았나?처음 남수단에 도착했을 당시 반란군 폭격이 있었어요. 도착하자마자 터진 폭격을 보며, 전쟁이란 무엇인지 느꼈던 기억이 가장 기억에 남네요.맛있는 인터뷰의 공식 코너 ‘어서 말을 해’ 질문에 대한 답을 하는 시간이 왔다. 이번 질문은 ‘30일간의 여유가 생긴다면 무엇을 하고 싶은가?’이다제게 30일간의 방학이 주어진다면 에베레스트나 킬리만자로 등반을 가보고 싶어요. 생각해보니 하고 싶은 게 너무 많은 것 같아요.운동과 관련된 답변이 나올 거라 예상했는데 역시.. 다음 인터뷰이를 위한 질문을 부탁한다‘잔디’에서 일하며 가장 웃겼던 에피소드가 있다면?바쁜데도 불구하고 이렇게 시간을 내줘서 감사하다. 아시안컵 목표 꼭 이뤘으면 좋겠다. 멀리서나마 응원하겠다.감사합니다! 종종 찾아와 인사드릴게요. (끝)#토스랩 #잔디 #JANDI #인턴 #세일즈인턴 #인턴소개 #팀원소개 #인터뷰 #기업문화 #사내문화 #조직문화
조회수 1122

비트윈의 HBase 스키마 해부

비트윈에서는 HBase를 메인 데이터베이스로 이용하고 있습니다. 유저 및 커플에 대한 정보와 커플들이 주고받은 메시지, 업로드한 사진 정보, 메모, 기념일, 캘린더 등 서비스에서 만들어지는 다양한 데이터를 HBase에 저장합니다. HBase는 일반적인 NoSQL과 마찬가지로 스키마를 미리 정의하지 않습니다. 대신 주어진 API를 이용해 데이터를 넣기만 하면 그대로 저장되는 성질을 가지고 있습니다. 이런 점은 데이터의 구조가 바뀔 때 별다른 스키마 변경이 필요 없다는 등의 장점으로 설명되곤 하지만, 개발을 쉽게 하기 위해서는 데이터를 저장하는데 어느 정도의 규칙이 필요합니다. 이 글에서는 비트윈이 데이터를 어떤 구조로 HBase에 저장하고 있는지에 대해서 이야기해 보고자 합니다.비트윈에서 HBase에 데이터를 저장하는 방법¶Thrift를 이용해 데이터 저장: Apache Thrift는 자체적으로 정의된 문법을 통해 데이터 구조를 정의하고 이를 직렬화/역직렬화 시킬 수 있는 기능을 제공합니다. 비트윈에서는 서버와 클라이언트가 통신하기 위해 Thrift를 이용할 뿐만 아니라 HBase에 저장할 데이터를 정의하고 데이터 저장 시 직렬화를 위해 Thrift를 이용합니다.하나의 Row에 여러 Column을 트리 형태로 저장: HBase는 Column-Oriented NoSQL로 분류되며 하나의 Row에 많은 수의 Column을 저장할 수 있습니다. 비트윈에서는 Column Qualifier를 잘 정의하여 한 Row에 여러 Column을 논리적으로 트리 형태로 저장하고 있습니다.추상화된 라이브러리를 통해 데이터에 접근: 비트윈에서는 HBase 클라이언트 라이브러리를 직접 사용하는 것이 아니라 이를 래핑한 Datastore라는 라이브러리를 구현하여 이를 이용해 HBase의 데이터에 접근합니다. GAE의 Datastore와 인터페이스가 유사하며 실제 저장된 데이터들을 부모-자식 관계로 접근할 수 있게 해줍니다.트랜잭션을 걸고 데이터에 접근: HBase는 일반적인 NoSQL과 마찬가지로 트랜잭션을 제공하지 않지만 비트윈에서는 자체적으로 제작한 트랜잭션 라이브러리인 Haeinsa를 이용하여 Multi-Row ACID 트랜잭션을 걸고 있습니다. Haeinsa 덕분에 성능 하락 없이도 데이터 무결성을 유지하고 있습니다.Secondary Index를 직접 구현: HBase에서는 데이터를 Row Key와 Column Qualifier를 사전식 순서(lexicographical order)로 정렬하여 저장하며 정렬 순서대로 Scan을 하거나 바로 임의 접근할 수 있습니다. 하지만 비트윈의 어떤 데이터들은 하나의 Key로 정렬되는 것으로는 충분하지 않고 Secondary Index가 필요한 경우가 있는데, HBase는 이런 기능을 제공하지 않고 있습니다. 비트윈에서는 Datastore 라이브러리에 구현한 Trigger을 이용하여 매우 간단한 형태의 Secondary Index를 만들었습니다.비트윈 HBase 데이터 구조 해부¶페이스북의 메시징 시스템에 관해 소개된 글이나, GAE의 Datastore에 저장되는 구조를 설명한 글을 통해 HBase에 어떤 구조로 데이터를 저장할지 아이디어를 얻을 수 있습니다. 비트윈에서는 이 글과는 약간 다른 방법으로 HBase에 데이터를 저장합니다. 이에 대해 자세히 알아보겠습니다.전반적인 구조¶비트윈에서는 데이터를 종류별로 테이블에 나누어 저장하고 있습니다. 커플과 관련된 정보는 커플 테이블에, 유저에 대한 정보는 유저 테이블에 나누어 저장합니다.각 객체와 관련된 정보는 각각의 HBase 테이블에 저장됩니다.또한, 관련된 데이터를 하나의 Row에 모아 저장합니다. 특정 커플과 관련된 사진, 메모, 사진과 메모에 달린 댓글, 기념일 등의 데이터는 해당 커플과 관련된 하나의 Row에 저장됩니다. Haeinsa를 위한 Lock Column Family를 제외하면, 데이터를 저장하기 위한 용도로는 단 하나의 Column Family만 만들어 사용하고 있습니다.각 객체의 정보와 자식 객체들은 같은 Row에 저장됩니다.또한, 데이터는 기본적으로 하나의 Column Family에 저장됩니다.이렇게 한 테이블에 같은 종류의 데이터를 모아 저장하게 되면 Region Split하는 것이 쉬워집니다. HBase는 특정 테이블을 연속된 Row들의 집합인 Region으로 나누고 이 Region들을 여러 Region 서버에 할당하는 방식으로 부하를 분산합니다. 테이블을 Region으로 나눌 때 각 Region이 받는 부하를 고려해야 하므로 각 Row가 받는 부하가 전체적으로 공평해야 Region Split 정책을 세우기가 쉽습니다. 비트윈의 경우 커플과 관련된 데이터인 사진이나 메모를 올리는 것보다는 유저와 관련된 데이터인 메시지를 추가하는 트래픽이 훨씬 많은데, 한 테이블에 커플 Row와 유저 Row가 섞여 있다면 각 Row가 받는 부하가 천차만별이 되어 Region Split 정책을 세우기가 복잡해집니다. RegionSplitPolicy를 구현하여 Region Split 정책을 잘 정의한다면 가능은 하지만 좀 더 쉬운 방법을 택했습니다.또한, 한 Row에 관련된 정보를 모아서 저장하면 성능상 이점이 있습니다. 기본적으로 한 커플에 대한 데이터들은 하나의 클라이언트 요청을 처리하는 동안 함께 접근되는 경우가 많습니다. HBase는 같은 Row에 대한 연산을 묶어 한 번에 실행시킬 수 있으므로 이 점을 잘 이용하면 성능상 이득을 얻을 수 있습니다. 비트윈의 데이터 구조처럼 특정 Row에 수많은 Column이 저장되고 같은 Row의 Column들에 함께 접근하는 경우가 많도록 설계되어 있다면 성능 향상을 기대할 수 있습니다. 특히 Haeinsa는 한 트랜잭션에 같은 Row에 대한 연산은 커밋시 한 번의 RPC로 묶어 처리하므로 RPC에 드는 비용을 최소화합니다. 실제 비트윈에서 가장 많이 일어나는 연산인 메시지 추가 연산은 그냥 HBase API를 이용하여 구현하는 것보다 Haeinsa Transaction API를 이용해 구현하는 것이 오히려 성능이 좋습니다.Column Qualifier의 구조¶비트윈은 커플들이 올린 사진 정보들을 저장하며, 또 사진들에 달리는 댓글 정보들도 저장합니다. 한 커플을 Root라고 생각하고 커플 밑에 달린 사진들을 커플의 자식 데이터, 또 사진 밑에 달린 댓글들을 사진의 자식 데이터라고 생각한다면, 비트윈의 데이터들을 논리적으로 트리 형태로 생각할 수 있습니다. 비트윈 개발팀은 Column Qualifier를 잘 정의하여 실제로 HBase에 저장할 때에도 데이터가 트리 형태로 저장되도록 설계하였습니다. 이렇게 트리 형태로 저장하기 위한 Key구조에 대해 자세히 알아보겠습니다.Column Qualifier를 설계할 때 성능을 위해 몇 가지 사항들을 고려해야 합니다. HBase에서는 한 Row에 여러 Column이 들어갈 수 있으며 Column들은 Column Qualifier로 정렬되어 저장됩니다. ColumnRangeFilter를 이용하면 Column에 대해 정렬 순서로 Scan연산이 가능합니다. 이 때 원하는 데이터를 순서대로 읽어야 하는 경우가 있는데 이를 위해 Scan시, 최대한 Sequential Read를 할 수 있도록 설계해야 합니다. 또한, HBase에서 데이터를 읽어올 때, 실제로 데이터를 읽어오는 단위인 Block에 대해 캐시를 하는데 이를 Block Cache라고 합니다. 실제로 같이 접근하는 경우가 빈번한 데이터들이 최대한 근접한 곳에 저장되도록 설계해야 Block Cache의 도움을 받을 수 있습니다.비트윈에서는 특정 커플의 사진이나 이벤트를 가져오는 등의 특정 타입으로 자식 데이터를 Scan해야하는 경우가 많습니다. 따라서 특정 타입의 데이터를 연속하게 저장하여 최대한 Sequential Read가 일어나도록 해야 합니다. 이 때문에 Column Qualifier가 가리키는 데이터의 타입을 맨 앞에 배치하여 같은 타입의 자식 데이터들끼리 연속하여 저장되도록 하였습니다. 만약 가리키는 데이터의 타입과 아이디가 Parent 정보 이후에 붙게 되면 사진 사이사이에 각 사진의 댓글 데이터가 끼어 저장됩니다. 이렇게 되면 사진들에 대한 데이터를 Scan시, 중간중간 저장된 댓글 데이터들 때문에 완벽한 Sequential Read가 일어나지 않게 되어 비효율적입니다.이렇게 특정 타입의 자식들을 연속하게 모아 저장하는 묶음을 컬렉션이라고 합니다. 컬렉션에는 컬렉션에 저장된 자식들의 개수나 새로운 자식을 추가할 때 발급할 아이디 등을 저장하는 Metadata가 있습니다. 이 Metadata도 특정 Column에 저장되므로 Metadata를 위한 Column Qualifier가 존재합니다. 이를 위해 Column Qualifier에는 Column Qualifier가 자칭하는 데이터가 Metadata인지 표현하는 필드가 있는데, 특이하게도 메타데이터임을 나타내는 값이 1이 아니라 0입니다. 이는 Metadata가 컬렉션의 맨 앞쪽에 위치하도록 하기 위함입니다. 컬렉션을 읽을 때 보통 맨 앞에서부터 읽는 경우가 많고, 동시에 Metadata에도 접근하는 경우가 많은데, 이 데이터가 인접하게 저장되어 있도록 하여 Block Cache 적중이 최대한 일어나도록 한 것입니다.Datastore 인터페이스¶비트윈에서는 이와 같은 데이터 구조에 접근하기 위해 Datastore라는 라이브러리를 구현하여 이를 이용하고 있습니다. HBase API를 그대로 이용하는 것보다 좀 더 쉽게 데이터에 접근할 수 있습니다. GAE의 Datastore와 같은 이름인데, 실제 인터페이스도 매우 유사합니다. 이 라이브러리의 인터페이스에 대해 간단히 알아보겠습니다.Key는 Datastore에서 HBase에 저장된 특정 데이터를 지칭하기 위한 클래스입니다. 논리적으로 트리 형태로 저장된 데이터 구조를 위해 부모 자식 관계를 이용하여 만들어 집니다.Key parentKey = new Key(MType.T_RELATIONSHIP, relId);Key photoKey = new Key(parentKey, MType.T_PHOTO, photoId); // 특정 커플 밑에 달린 사진에 대한 키Datastore는 Key를 이용해 Row Key와 Column Qualifier를 만들어 낼 수 있습니다. Datastore는 이 정보를 바탕으로 HBase에 새로운 데이터를 저장하거나 저장된 데이터에 접근할 수 있는 메서드를 제공합니다. 아래 코드에서 MUser 클래스는 Thrift로 정의하여 자동 생성된 클래스이며, Datastore에서는 이 객체를 직렬화 하여 HBase에 저장합니다.MUser user = new MUser();user.setNickname("Alice");user.setGender(Gender.FEMALE);user.setStatus("Hello World!"); Key userKey = new Key(MType.T_USER, userId);getDatastore().put(userKey, user);user = getDatastore().get(userKey);getDatastore().delete(userKey);또한, Datastore는 Key를 범위로 하여 Scan연산이 할 수 있도록 인터페이스를 제공합니다. Java에서 제공하는 Try-with-resource문을 이용하여 ResultScanner를 반드시 닫을 수 있도록 하고 있습니다. 내부적으로 일단 특정 크기만큼 배치로 가져오고 더 필요한 경우 더 가져오는 식으로 구현되어 있습니다.try (CloseableIterable> entries = getDatastore().subSibling(fromKey, fromInclusive, toKey, toInclusive)) { for (KeyValue entry : entries) { // do something }}Secondary Index 구현 방법¶HBase는 데이터를 Row Key나 Column Qualifier로 정렬하여 저장합니다. 이 순서로만 Sequential Read를 할 수 있으며 Key값을 통해 특정 데이터를 바로 임의 접근할 수 있습니다. 비트윈에서는 특정 달에 해당하는 이벤트들을 읽어오거나 특정 날짜의 사진들의 리스트를 조회하는 등 id 순서가 아니라 특정 값을 가지는 데이터를 순서대로 접근해야 하는 경우가 있습니다. 이럴 때에도 효율적으로 데이터에 접근하기 위해서는 id로 정렬된 것 외에 특정 값으로 데이터를 정렬할 수 있어야 합니다. 하지만 HBase에서는 이와 같은 Secondary Index 같은 기능을 제공하지 않습니다. 비트윈 개발팀은 이에 굴하지 않고 Secondary Index를 간단한 방법으로 구현하여 사용하고 있습니다.구현을 간단히 하기 위해 Secondary Index를 다른 데이터들과 마찬가지로 특정 타입의 데이터로 취급하여 구현하였습니다. 따라서 Index에 대해서도 Column Qualifier가 발급되며, 이때, Index에 해당하는 id를 잘 정의하여 원하는 순서의 Index를 만듭니다. 이런 식으로 원하는 순서로 데이터를 정렬하여 저장할 수 있으며 이 인덱스를 통해 특정 필드의 값의 순서대로 데이터를 조회하거나 특정 값을 가지는 데이터에 바로 임의 접근할 수 있습니다. 또한, Index에 실제 데이터를 그대로 복사하여 저장하여 Clustered Index처럼 동작하도록 하거나, Reference만 저장하여 Non-Clustered Index와 같이 동작하게 할 수도 있습니다. Datastore 라이브러리에는 특정 데이터가 추가, 삭제, 수정할 때 특정 코드를 실행할 수 있도록 Trigger 기능이 구현되어 있는데, 이를 통해 Index를 업데이트합니다. 데이터의 변경하는 연산과 Index를 업데이트하는 연산이 하나의 Haeinsa 트랜잭션을 통해 원자적으로 일어나므로 데이터의 무결성이 보장됩니다.못다 한 이야기¶각 테이블의 특정 Row의 Column들에 대한 Column Qualifier외에도 Row에 대한 Row Key를 정의 해야 합니다. 비트윈에서는 각 Row가 표현하는 Root객체에 대한 아이디를 그대로 Row Key로 이용합니다. 새로운 Root객체가 추가될 때 발급되는 아이디는 랜덤하게 생성하여 객체가 여러 Region 서버에 잘 분산될 수 있도록 하였습니다. 만약 Row Key를 연속하게 발급한다면 특정 Region 서버로 연산이 몰리게 되어 성능 확장에 어려움이 생길 수 있습니다.데이터를 저장할 때 Thrift를 이용하고 있는데, Thrift 때문에 생기는 문제가 있습니다. 비트윈에서 서버를 업데이트할 때 서비스 중지 시간을 최소화하기 위해 롤링 업데이트를 합니다. Thrift 객체에 새로운 필드가 생기는 경우, 롤링 업데이트 중간에는 일부 서버에만 새로운 Thift가 적용되어 있을 수 있습니다. 업데이트된 서버가 새로운 필드에 값을 넣어 저장했는데, 아직 업데이트가 안 된 서버가 이 데이터를 읽은 후 데이터를 다시 저장한다면 새로운 필드에 저장된 값이 사라지게 됩니다. Google Protocol Buffer의 경우, 다시 직렬화 할 때 정의되지 않은 필드도 처리해주기 때문에 문제가 없지만, Thrift의 경우에는 그렇지 않습니다. 비트윈에서는 새로운 Thrift를 적용한 과거 버전의 서버를 먼저 배포한 후, 업데이트된 서버를 다시 롤링 업데이트를 하는 식으로 이 문제를 해결하고 있습니다.저희는 언제나 타다 및 비트윈 서비스를 함께 만들며 기술적인 문제를 함께 풀어나갈 능력있는 개발자를 모시고 있습니다. 언제든 부담없이 [email protected]로 이메일을 주시기 바랍니다!
조회수 196

화가 날 땐 참지 말고 태워버리세요.

당신은 화가 날 때어떻게 하시나요?1. 화를 낸다. 2. 참는다. 1번을 선택한 당신은?그럼요. 화가 나면 바로바로 화를 내야죠. 어떻게 화를 참나요? 그렇게 화를 내야 상대방도 내가 화가 났다는 사실을 알고 조심하지 않겠어요? 그런데 화를 내고 나면, 당시에는 후련하지만 조금 지나고 나서 후회가 되기도 해요. 조금만 참았으면 괜찮았을까 싶어서요. 한번 화가 나면 조절이 안 될 때가 있거든요. 저도 그러고 싶어서 그러는 게 아닌데, 사람들이 저를 화만 내는 사람인 줄 아는 것 같아서 더 화가 나요. 화가 난다. 화가 난다                                                 2번을 선택한 당신은?어떻게 화가 난다고 내 감정을 다 표현할 수가 있겠어요. 화가 나긴 하지만, 꾹 참고 넘어가는 거죠. 나만 잠깐 참고 넘어가면 모두가 다 편안해지는 걸요. 그런데 그렇게 참다 보니 내 속에 화가 가득 차 버렸나 봐요. 가슴이 막 답답해서 숨이 가빠올 때가 있어요. 이러다 정말 내가 정말 화병으로 죽을지도 모른다는 생각이 들지만, 내가 화를 내면 나를 떠날까 봐 두려워요. 이젠 화를 내는 방법조차 잊어버렸어요. 어떻게 화를 내야 하는 건가요. 화를 참자. 화를 참자                                                           그래요. 당신 말이 다 맞아요. 이 글을 읽고 있는 바로 당신. 화가 날 땐 화를 내기도 하고, 내고 나서 괜히 화냈나 후회하기도 하는, 화가 나지만 모두의 평화를 위해 참기도 하는 바로 당신 말이에요. 그런 당신을 위해 태어났습니다.화를 낼 수도 없고, 안 낼 수도 없다면대신 분노해드리겠습니다.주인님. 화라는 것은 눈에 보이지 않아서 얼마나 쌓였는지도 모르기 때문에, 누군가에게 던져서 상처를 주거나 내 몸에 쌓아서 결국 내 몸에 병이 나게 하죠. 그래서 생각했습니다. 눈에 보이지 않는 화를보이게 만들면 어떨까?화를 보이게 만들고 그것을 태워서 나의 화가 사라질 수 있다면? 그렇게 나를 힘들게 하는 감정들을 녹여서 없앨 수 있다면, 사람들이(그리고 나도) 좀 편안해질 수 있지 않을까?  그렇게 태어난 스트레스 컴퍼니의 첫 번째 상품인 분노 캔들은 "분노는 마음에 담아두는 것이 아닙니다"라는 콘셉트로 제작되었습니다. 눈 부분이 심지로 되어있어, 쌍심지를 켜고 대신 화를 내준답니다. 분노캔들과 분노캔들 DIY 키트처음에는 화가 날 때 씹어먹거나 천천히 녹여 먹을 수 있는 사탕이나 초콜릿을 생각했습니다. 그래서 초콜릿을 만들어보겠다고 방산시장을 들락거렸지만, 먹는 걸 만드는 것은 꽤 까다롭더군요. 폭망하여 상심하고 있을 때 친구가 캔들은 어떠냐며 추천해주더군요. 그래 바로 이거야. 신난다. 분노를 태우자! 그때부터 시중에 있는 모든 양초 재료들을 리서치했습니다. 소이 왁스와 파라핀, 만지락, 밀랍 왁스를 가지고 부어서도 만들고 붙여서도 만들고 말아서도 만들어본 후에야 밀랍 시트를 말아서 만드는 형태로 만들어야겠다고 결정하게 됐지요.다채로운 분노캔들의 변천사                                     그 모습을 본 친구들이 그렇게 일일이 손으로 만들어서 어떻게 돈을 벌겠냐며 공장에서 대량 생산할 수 있는 형태로 만들어야 한다고 말렸지만, 저는 그냥 그렇게 손으로 말아서 만드는 게 좋았습니다. 그래서 회사를 만든 지 4년이 지난 지금도 주문이 들어오면 손으로 만들고 있습니다. 하하 만드는 사람이 행복해야 쓰는 사람도 행복할 수 있다고 믿었기 때문입니다. 그리고 그래야만 그 사업이 지속될 수 있다고 지금도 여전히 믿고 있습니다. 그랬기에 밀랍 시트를 자르고 나무 심지를 자르고 또 심지에 시트를 덧입히고 그 재료들을 정성껏 말아서 만드는 분노 캔들을 탄생시키고야 만 것입니다. 분노캔들 첫 번째 버전. 누가 만들었는지 참 귀엽네요.                           끝인 줄 알았죠?그런데 처음부터 분노 캔들이 쌍심지였던 것은 아니었습니다. 그리고 지금처럼 나무 심지도 아니었어요. 그런데 면 심지보다 나무 심지가 더 불꽃이 크고 타닥타닥 소리가 나니까 타는 소리로도 힐링이 될 수 있겠다는 생각이 들더라고요. 코, 눈, 볼 심지의 위치 테스트                                     분노캔들의 사이즈 테스트                                     그리고 처음부터 지금의 사이즈도 아니었어요. 과연 어떤 사이즈가 적당할 것인가 한참을 고민하다가 분노 캔들을 켜고 마음을 다스릴 수 있는 가장 적당한 시간이 30분 정도라고 느꼈고, 그 시간 동안 화난 얼굴을 다 녹여버릴 수 있는 사이즈로 결정하게 되었습니다. 그렇지만 분노 캔들은 얼굴이 다 녹은 후에도 대략 2시간 정도 액체상태로 끝까지 탑니다. 그렇게 제작한 분노 캔들은 인체에 유해성이 없다는 인증절차를 거쳐서 KC 마크도 받았습니다. 분노캔들의 첫번째 버전. 분노캔들을 켜고 마음을 식힐 수 있도록 메뉴얼이 같이 들어있습니다. 분노캔들 두 번째 버전. 책을 빼고 크기를 더 키웠습니다. 더 귀여워졌네요!           혼자서 꼬물꼬물 만들면서 그런 생각을 했습니다. 지금은 내가 혼자 만들고 있지만, 분노 캔들이 많이 팔리면 동네의 손재주 좋은 아줌마들, 할머니들과 함께 만들고 그들에게 일자리를 주는 사회적 기업으로 발전시키고 싶다는 야무진 꿈을 꿨었지만, 아직까지 그렇게 많이 팔리지는 않아서 혼자서 만들고 있습니다. 그렇지만 언젠가는 제 꿈을 현실화시킬 수 있는 날이 오겠지요? 그때까지 지치지 않고 차근차근히 만들어나가겠습니다.  분노 단계에 따라서 색상을 선택할 수 있어요.분노캔들은 스트레스컴퍼니샵에서 구매 가능합니다.*이 글은 2016년 다음 스토리 펀딩에 연재했던 글을 수정하여 올린 글입니다. ⓒ스트레스컴퍼니 - 무단 전재-재배포 금지 #스트레스컴퍼니 #심리스타트업 #스트레스관리 #서비스소개
조회수 1478

Color와 향기의 콜라보

Color와 향기의 콜라보!!파펨이 다른 브랜드와의 콜라보를 고민할 때 가장 중요시하게 생각하는 부분은 서로의 브랜드를 어떻게 더 돋보이게 할 수 있는가입니다. Fennec에서 처음 연락을 받고 만나 뵌 후 느낀 점은..서로 다른 영역에서 제품을 만들고 서비스를 하고 있지만 참 많이 닮아 있다... 였습니다. 파펨이 후각의 영역에서 다양한 스토리들을 만들고 풀어내고 있다면, 페넥은 color와 가죽을 통해 시각과 촉각의 영역에서 멋진 작품들을 만들어내고 있었습니다. 서로가 추구하고 있는 감각은 다르지만 그 감각의 영역에서 나름의 표준이 되고자 하는 목표를 가지고 있는 브랜드입니다. 처음에 페넥의 실장님과 미팅을 하면서 서로 이런 생각을 가지고 있다는 점에 살짝 소름이 끼치기도 하였네요.. =) 심지어 Fennec은 영국의 글로벌 라이프 스타일 매거진 모노클의 Seoul 에도 소개되는 등, 브랜드로써의 가치를 차곡차곡 꾸준히 쌓아가고 계셨습니다. 멋지죠? https://www.instagram.com/fennecseoul/이번 콜라보는 파펨과 페넥이 함께 하는 시작점입니다. 성년의 날에 받고 싶은 선물로써 1위로 꼽힌 향수를 파펨의 향기로 고객들에게 선물하고 싶은 마음에서 시작된 이번 콜라보는, 페넥의 실장님과 디자이너 분들이 꼼꼼하게 선정한 파펨의 3가지 향수 trial kit로 제작되어 페넥의 고객분들에게 전달되고 있습니다. 파펨은 페넥의 Color Studio 콘셉트에 맞춰 Summer 시즌에 맞춘 새로운 컬러를 향기로써 페넥과 함께 표현할 계획을 가지고 있습니다. 멋진 페넥의 컬러와 가죽제품과 그리고 파펨의 향기가 만나가는 과정들을 응원해주세요.. 감사합니다. =) #파펨 #제품기업 #운영 #기획전략 #마케팅 #콜라보레이션
조회수 1117

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

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

HBase상 트랜잭션 라이브러리 Haeinsa를 소개합니다 - VCNC Engineering Blog

비트윈에서는 서비스 초기부터 HBase를 주요 데이터베이스로 사용하였습니다. HBase에서도 일반적인 다른 NoSQL처럼 트랜잭션을 제공하지 않습니다. HBase, Cassandra와 MongoDB는 하나의 행 혹은 하나의 Document에 대한 원자적 연산만 제공합니다. 하지만 여러 행에 대한 연산들을 원자적으로 실행할 수 있게 해주는 추상화된 트랜잭션 기능이 없다면 보통의 서비스 개발에 어려움을 겪게 됩니다. 비트윈 개발팀은 이런 문제를 해결하기 위해 노력했으며, 결국 HBase에서 트랜잭션을 제공해주는 라이브러리인 Haeinsa를 구현하여 실제 서비스에 적용하여 성공적으로 운영하고 있습니다. VCNC에서는 Haeinsa를 오픈소스로 공개하고 이번 글에서 이를 소개하고자 합니다.Haeinsa란 무엇인가?Haeinsa는 Percolator에서 영감을 받아 만들어진 트랜잭션 라이브러리입니다. HAcid, HBaseSI 등 HBase상에서 구현된 트랜잭션 프로젝트는 몇 개 있었지만, 성능상 큰 문제가 있었습니다. 실제로 서비스에 적용할 수 없었기 때문에 Haeinsa를 구현하게 되었습니다. Haeinsa를 이용하면 다음과 같은 코드를 통해 여러 행에 대한 트랜잭션을 쉽게 사용할 수 있습니다. 아래 예시에는 Put연산만 나와 있지만, 해인사는 Put외에도 Get, Delete, Scan 등 HBase에서 제공하는 일반적인 연산들을 모두 제공합니다.HaeinsaTransaction tx = tm.begin(); HaeinsaPut put1 = new HaeinsaPut(rowKey1); put1.add(family, qualifier, value1); table.put(tx, put1); HaeinsaPut put2 = new HaeinsaPut(rowKey2); put2.add(family, qualifier, value2); table.put(tx, put2); tx.commit(); Haeinsa의 특징Haeinsa의 특징을 간략하게 정리하면 다음과 같습니다. 좀 더 자세한 사항들은 Haeinsa 위키를 참고해 주시기 바랍니다.ACID: Multi-Row, Multi-Table에 대해 ACID 속성을 모두 만족하는 트랜잭션을 제공합니다.Linear Scalability: 트래픽이 늘어나더라도 HBase 노드들만 늘려주면 처리량을 늘릴 수 있습니다.Serializability: Snapshot Isolation보다 강력한 Isolation Level인 Serializability를 제공합니다.Low Overhead: NoSQL상에서의 트랜잭션을 위한 다른 프로젝트에 비해 오버헤드가 적습니다.Fault Tolerant: 서버나 클라이언트가 갑자기 죽더라도 트렌젝션의 무결성에는 아무 영향을 미치지 않습니다.Easy Migration: Haeinsa는 HBase를 전혀 건드리지 않고 클라이언트 라이브러리만 이용하여 트랜잭션을 구현합니다. 각 테이블에 Haeinsa 내부적으로 사용하는 Lock Column Family만 추가해주면 기존에 사용하던 HBase 클러스터에도 Haeinsa를 쉽게 적용할 수 있습니다.Used in practice: 비트윈에서는 Haeinsa를 이용하여 하루에 3억 건 이상의 트랜잭션을 처리하고 있습니다.Haeinsa는 오픈소스입니다. 고칠 점이 있다면 언제든지 GitHub에 리포지터리에서 개선에 참여하실 수 있습니다.Haeinsa의 성능Haeinsa는 같은 수의 연산을 처리하는 트랜잭션이라도 소수의 Row에 연산이 여러 번 일어나는 경우가 성능상 유리합니다. 다음 몇 가지 성능 테스트 그래프를 통해 Haeinsa의 성능에 대해 알아보겠습니다.아래 그래프는 3개의 Row에 총 6개의 Write, 3개의 Read연산을 수행한 트랜잭션의 테스트 결과입니다. 두 개의 Row에 3Write, 1Read 연산을 하고, 한 개의 Row에 1Read 연산을 한 것으로, 비트윈에서 가장 많이 일어나는 요청인 메시지 전송에 대해 시뮬레이션한 것입니다. 실제 서비스에서 가장 많이 일어나는 종류의 트랜잭션이라고 생각할 수 있습니다. 그런데 그냥 HBase를 사용하는 것보다 Haeinsa를 이용하는 것이 더 오히려 좋은 성능을 내는 것을 알 수 있습니다. 이는 Haeinsa에서는 커밋 시에만 모든 변경사항을 묶어서 한 번에 반영하기 때문에, 매번 RPC가 일어나는 일반 HBase보다 더 좋은 성능을 내는 것입니다.HBase 클러스터가 커질수록 트랜잭션 처리량이 늘어납니다. HBase와 마찬가지입니다.HBase 클러스터의 크기에 따른 응답시간 입니다. HBase와 다르지 않습니다..아래 그래프는 2개의 Row에 각각 한 개의 Write, 나머지 한 개의 Row에는 한 개의 Read 연산을 하는 트랜잭션에 대해 테스트한 것입니다. 각 Row에 하나의 연산만이 일어나기 때문에 최악의 경우라고 할 수 있습니다. 처리량과 응답시간 모두 그냥 HBase를 사용하는 것보다 2배에서 3배 정도 좋지 않은 것을 알 수 있습니다. 하지만 이 수치는 DynamoDB 상의 트랜잭션과 같은 다른 트랜잭션 라이브러리와 비교한다면 상당히 좋은 수준입니다.HBase보다 처리량이 떨어지긴 하지만, 클러스터가 커질수록 처리량이 늘어납니다.HBase보다 응답시간이 크긴 하지만 클러스터 크기에 따른 변화가 HBase와 크게 다르지 않습니다.프리젠테이션Haeinsa에 대한 전반적인 동작 원리와 성능을 소개하는 프리젠테이션입니다. 좀 더 자세히 알고 싶으시다면 아래 프리젠테이션이나 Haeinsa 위키를 참고해주세요.<iframe class="speakerdeck-iframe" frameborder="0" src="//speakerdeck.com/player/2d4b2bd00fc201314ae312fe4cd13937?" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" style="border: 0px; background: padding-box rgba(0, 0, 0, 0.1); margin: 0px; padding: 0px; border-radius: 6px; box-shadow: rgba(0, 0, 0, 0.2) 0px 5px 40px; width: 750px; height: 563px;">
조회수 1276

왜 창업을 할까

왜 창업을 하는지는 창업자들에게 상당히 자주 던져지는 질문이다. 내가 오늘 하루 가장 마지막으로 들은 질문이기도 하다."무슨 마음으로 창업을 하세요?"사람은 회사에 취직을 해서도 일을 하고,공무원이 되어 국가의 녹을 먹기도 하고,예술이나 운동과 같은 길을 가기도 하고,점포를 열어 장사를 하기도 하는데이 중에서도 창업만이 왜 하는지에 대한 질문이 이만큼이나 많다는 것은 창업이 아직 우리 사회에서 그만큼 일반적인 길이 아니라는 반증일 것이다.성공할 확률이 낮기 때문만은 아니다.그렇게 치자면 예술이나 운동도 성공하는 사람은 일부이고, 평균적으로 안정적인 삶을 살거나 부를 축적할 확률은 낮다. 그래도 예술이나 운동은 하지 말라는 사람은 있지만 왜 하냐고 묻는 사람은 없다.그렇다면 차이는 무엇일까?아마도 창업은 기존에 존재하는 옵션이 아니기 때문인 것 같다.이미 존재하는 업 안에서 나의 자아실현이 충분히 가능하고, 새로운 옵션을 만들어야 할 필요가 없다면 그 중에서 나의 길을 택할 것이고, 이미 존재하는 업 안에서 만족하지 못하고 다른 옵션이 필요한 사람이라면, 새로운 업을 만드는 길을 택할 것이다.즉, 나는 아래 경우에 해당하여 창업을 하게 되었다.만들고 싶은 것이 세상에 없고, (혹은 지금 있는 것들보다 더 잘 할 방법이 있고)만들어볼 수 있을 것 같고, (내가 생각하는 전략과 내가 구성한 팀으로)거기에 따르는 리스크를 감당할 정도로 해보고 싶은 마음이 큼.무엇보다 이제는 창업을 왜 하는지에 대해 너무 고민하기보다는 라이비오를 왜 하는지, 라이비오에서 무엇을 만들고 싶은지를 고민하고 싶다.창업은 내가 되고 싶은 나와, 내가 세상에 끼치고 싶은 영향들을 만들어가기 위해 내가 선택한 수단이지, 창업 자체가 모두에게 좋은 선택이거나 목표여야 할 이유는 없다고 믿기 때문이다.취업가가 꿈이 될 수 없듯이, 창업도 창업가 자체가 꿈이 될 수는 없다.+최근 책에서 발견한 글귀가 하나 떠오른다."삶은 자신을 발견하는 과정이 아니라 자신을 창조하는 과정이다."모든 것은 과정이다.우리는 우리가 살고 싶은 인생을 채워가고 있을 뿐이다.#라이비오 #스타트업 #스타트업창업 #창업가 #창업자 #마인드셋 #인사이트 #경험공유
조회수 6361

[SQL 데이터분석] 증감율 구하는 간단한 방법

sql에서는 = 등호가 비교연산자로 사용됩니다.대신 := 이렇게 콜론(:)과 등호(=)를 같이 쓰면 대입연산자로 쓸 수 있어요.select @prev := users.id // @prev 라는 임시변수에 users.id 값을 넣어라. from users가입일자로 사용자수를 구해보면, 아래처럼 가입일로 group_by 를 해서 구하죠.select date(created_at) as '가입일' , count(1) as '가입자수' from users group by 1 order by 1 desc;// 가입일 | 가입자수 // --------------------------- // 2017-08-02 100 // 2017-08-01 50그럼 전일 대비 증감율을 구하려면 어떻게 할까요?select date(created_at) as '가입일' , @prev as '전일 가입자수' , (count(1) - @prev) / @prev as '증감율' , @prev := count(1) as '가입자수' from users group by 1 order by 1 desc;// 가입일 | 전일 가입자수 | 증감율 | 가입자수 // -------------------------------------------------------- // 2017-08-02 50 1.0 100 // 2017-08-01 50 0 50증감율을 계산하는 count(1) / @prev까지는 @prev 에 전일 가입자수가 저장되어 있구요.@prev := count(1) 에서 당일 가입자수로 할당이 됩니다.저는 := 이 연산자를 알기 전엔 self-join 형태로 증감율을 구했는데데이터를 가오는 속도는 := 이 연산자가 훨씬 빠른것 같습니다.다음엔 self-join 으로 증감율을 구하는 법도 한 번 올려볼께요.#티엘엑스 #TLX #개발 #개발팀 #개발자 #꿀팁 #인사이트 #조언
조회수 1717

[Tech Blog] Compare Software Architectures: Monoliths, SOA and Microservices

요즘 Software architecture 라는 단어를 들으면 아마도 Client engineer 분들은 MVC, MVP, MVVM 이 먼저 떠오를 것이고, Server engineer 분들은 Microservice architecture 를 먼저 떠오를 것 같네요. Clean architecture 나 Event-driven architecture 등을 떠올리는 분들도 계실 것 같구요. Software architecture 를 어떻게 정의할 수 있을지에 대해서는 Software architecture: The important stuff 에 적어 봤으니 여기에선 넘어가도록 하죠. https://mherman.org/blog/developing-microservices-node-react-docker/ Microservice architecture 는 대세라고 말할 수 있습니다. Netflix, Amazon 등 굴지의 기업들이 성공적으로 적용해서 운영하고 있고, 국내 기술적으로 뛰어난 많은 기업들 역시 이미 적용했거나 시도하고 있습니다. “남들 다 하는데 이러다 도태 되는거 아냐?” 라는 생각이 들 정도로 말이죠. 그러나 이전 글에서 얘기했듯이 정답은 없으며, Microservice architecture 역시 예외는 아닙니다. 모든 선택에는 Tradeoff 가 있고, Microservices 는 다른 architecture 에 비해 어떤 장점이 있는지 살펴봐야 합니다. 이와 관련하여 정말 많은 좋은 글들이 이미 있으니, 이 글에서는 몇 가지 Software architecture 들을 가볍게 정리 및 비교해 보도록 하겠습니다. Monolithic Architecture Monolithic architecture 는 Microservice architecture 의 장점을 얘기할 때 반드시 언급될 정도로 대척점에 있는 architecture 입니다. Monolithic architecture 는 하나의 큰 덩어리로 구성되어 있고, 모든 기능이 하나의 프로젝트에 집중되어 있습니다. 쉽게 구성이 가능하고 초기에 기능을 빠르게 추가하기에 용이하나, 복잡도가 늘어날수록 기능 추가 속도가 느려지고 문제가 발생할 가능성이 높습니다. PoC(Proof of Concept)를 위한 가벼운 프로젝트나 아주 초기 프로젝트에 적용 가능합니다. Semi-Monolithic Architecture Monolithic architecture 보다는 작지만, 여전히 기능들이 몇 개의 프로젝트에 집중되어 있는 architecture 입니다. 예를 들어 frontend 와 backend 프로젝트를 나누었지만 각 프로젝트가 monoliths 인 경우 semi-monolithic architecture 라고 볼 수 있습니다. 다만 Semi-monoliths 의 경우 몇 군데에서 언급한 것을 볼 수 있지만, 일반적으로 사용되는 architecture 용어는 아닌 듯하고, Semi-monoliths 로 구분될 수 있는 경우 Monolithic architecture 라고 분류할 수 있을 듯합니다. 단순 frontend / backend 보다 좀 더 많은 수의 service 로 분할된 architecture 를 구성하더라도 각 service 가 monoliths 로 구분될 수 있다면 여전히 monolithic architecture 를 구성하고 있다고 할 수 있습니다. Service-Oriented Architecture 여러 조직이 다수의 application 사이에서 로직과 데이터를 공유하기 위해 제안된 architecture 입니다. Monolithic architecture 와 달리 기능을 나눠서 여러 개의 서비스로 구성하고, 서비스 사이는 API 를 통해서 통신합니다. Microservice architecture 와 Service-oriented architecture (SOA) 를 비교하기 위해 Enterprise Service Bus (ESB)가 많이 언급됩니다. ESB는 Enterprise Application Interface (EAI) 와 대조적으로 가볍고 흔한 통신을 위해 제안되었으나, 통제와 관리를 위해 점점 무거운 방향으로 진행되면서 최초의 의도와 달라졌습니다. SOA 가 무거워짐에 따라 최초의 의도였던 빠른 적용, 민첩한 개발 및 적은 통합 비용과 멀어지게 되면서 자연스럽게 도태되었습니다. 서비스 사이에 데이터베이스를 공유할 수 있느냐 아니냐로 Microservice 와 구분을 짓는 의견도 있습니다만, SOA의 정의가 넓어서 이 부분에 대해서는 이견들이 있습니다.   https://dzone.com/articles/microservices-vs-soa-2 SOA가 넓은 범위에서 정의됐기 때문에 ESB 나 DB 공유 여부로 SOA 를 규정 짓기는 어렵습니다. 정의 상으로 보면 Microservice architecture 역시 SOA 의 일종이라고도 볼 수 있습니다. Microservice 의 예시로 자주 등장하는 Netflix 와 Amazon 역시 Microservice 라는 단어가 사용되기 전에는 스스로의 시스템을 SOA 라고 지칭했습니다. Microservice Architecture: The O’Reilly Book 의 공동 저자 Matt McLarty 는 Learn from SOA: 5 lessons for the microservices era 라는 글에서 SOA 와 Microservice architecture 가 같은가 다른가는 그다지 중요한 것이 아니며, 우리가 SOA 로부터 어떤 것들을 배웠는가가 중요하다고 강조합니다. Microservice Architecture Microservice architecture는 규모가 빠르게 커져도 제품 생산 속도를 빠르게 유지하고 안정성을 가질 수 있는 architecture 입니다. 충분히 작은 서비스들이 서로 통신하면서 기능을 수행합니다. Microservice architecture 를 SOA의 잘 구현된 형태라고 보는 시각도 있지만, micro 라는 단어가 SOA 에서 정의하는 서비스보다 작은 크기의 서비스임을 명시적으로 표현하기 때문에 매우 다르다는 의견 역시 있습니다. Microservice architecture 는 각 서비스의 크기를 작고 가볍게 유지함으로써 더 깔끔하고 명확하게 서비스를 유지할 수 있습니다. 잘 구성될 경우 특정 서비스에 장애가 생겨도 다른 서비스에 영향을 적게 미치거나 유연하게 대응할 수 있기 때문에 전체 시스템 오류(e.g Single Point of Failure)를 방지할 수 있습니다. 각 서비스는 독립적으로 배포 및 확장 가능하기 때문에 기능 배포가 빠르고 많은 트래픽에 유연하게 대처할 수 있습니다. 한편 Microsoft architecture 는 구조적인 면에서 복잡도가 증가하며, 많아진 서비스 및 서비스 간 통신에 대한 유지 보수 비용이 추가됩니다. 이를 대응하기 위해서 충분히 자동화되고 잘 구성된 시스템이 필수적으로 필요합니다. Conclusion 판단과 결정은 근거를 필요로 합니다. 가끔 감을 믿고 밀어붙여야 할 때(e.g 오늘 점심은 해장국을 먹어야 한다던가)도 있다는 점은 인정합니다. 하지만 그 역시 설득력을 가지지 못하면 하나의 목표를 향해 모두가 미친듯이 달려가기는 어렵겠죠. Software architecture 를 결정하기 위해서는 추구하는 비전과 비지니스를 이해하고 그에 맞는 근거 하에 모든 팀원을 판단하고 설득해야 합니다. 버즈빌 에서는 더 빠르고 큰 성장을 위해 Architecture Task Force 팀을 구성하였습니다. ATF 팀은 버즈빌에 최적인 Software architecture 를 판단하고, 구성하고, 실행하기 위해 바쁘게 움직이고 있습니다. Buzzvil Services Characteristic:  제품이 다양하고 제품별로 제공해야 할 기능이 많다. 각 제품이 공통적으로 필요로 하는 기능이 많다. 서비스 혹은 기능별로 대응해야 하는 트래픽이 다르다. 전체 서비스 장애 발생 시 많은 후속 문제가 발생한다. 트래픽 변동이 특정 이벤트에 의해 크게 일어날 수 있다.  Buzzvil 의 제품과 비지니스는 위와 같은 성격을 가지고 있습니다. 이를 바탕으로 우리는 Microservice architecture 가 가장 적절하다고 판단하였고, 현재 microservices 의 장점을 살리면서 안정적이고 빠르게 우리가 원하는 목표에 도달할 수 있도록 다양한 방면에서 변화를 가져가고 있습니다. References  Learn from SOA: 5 lessons for the microservices era Microservices vs. SOA On monoliths, service-oriented architectures and microservices Microservices.io Microservices Resource Guide Design Microservice Architectures the Right Way Developing Microservices – Node, React, and Docker    *버즈빌에서 개발자를 채용 중입니다. (전문연구요원 포함)작가소개 Whale, Chief Architect “Keep calm and dream on.”

기업문화 엿볼 때, 더팀스

로그인

/