스토리 홈

인터뷰

피드

뉴스

조회수 2243

인턴에서 지사장까지. 잔디 대만 총괄책임자 KM을 만나다.

맛있는 인터뷰 : 대만지사장 KM 편집자 주잔디와 함께 하는 멤버는 총 35명. 국적, 학력, 경험이 모두 다른 이들이 어떤 스토리를 갖고 잔디에 합류했는지, 무슨 일을 하고 있는지 궁금해하는 분들이 많습니다. 잔디 블로그에서는 이 궁금증을 해결해 드리고자 ‘맛있는 인터뷰’를 통해 ‘잔디’ 멤버들의 이야기를 다루고 있습니다. 이번 맛있는 인터뷰는 스페셜 에디션으로 대만의 멤버 KM(이하 : K)를 인터뷰해보았다. 인턴으로 시작해서 어떻게 대만 지사장이 되었는지, 그에 대해 조금 더 자세히 알아보자.KM을 모르는 한국 사용자를 위해 소개 부탁한다.K: 잔디 대만 지사를 총괄하고 있는 KM (Kaimin)이라고 한다. 대만에서 세일즈, 마케팅, CX(Customer Experience), 재무 업무를 모두 담당하고 있다. 엄청 바쁠 것 같다. 대만 비즈니스는 어떠한가? 바쁜 거 보니 잘 되는 것 같은데.K: 대만에서만 연 매출이 3배 증가했고 그래서 그런지 바빠도 기쁘게 일하고 있다. 3배라니! 대단하다. 어떻게 회사를 키워 나갔는지 궁금하다!K: 오늘 모든 걸 다 말해주겠다!! 시작하기 전에, 인터뷰 제목이 맛있는 인터뷰이다. 인터뷰이가 가장 좋아하는 맛집에서 인터뷰를 진행하지만, 물리적인 이슈가 있기에. KM이 소개하고 싶은 음식을 가지고 왔는데, 어떤 걸 가지고 왔는지? (featuring 대만 버블티)K: 가장 보편적으로 먹는 대만식 아침이다. 빵과, 부리또 같이 생긴 랩과 두유다. 랩 안에는 계란과 돼지고기, 밥이 들어있다. 나는 자주 먹어서 그런지 먹고 나면 마음이 편안해지고 생각보다 배가 부르다. 꼭 먹어보길 추천한다.  인턴으로 시작했다가 이제 대만의 비즈니스를 총괄하고 있는데. 엄청난 변화다. 어떤 일이 있었나?K: 처음에 비즈니스&재무 인턴으로 잔디와 함께하고 몇 개월 후 정식 멤버가 되었다. 그 당시에는 비즈니스 멤버들과, UI/UX 매니저, 그리고 BX 매니저 이렇게 총 8명의 멤버와 함께 일을 했었다. 첫 1년간은 멤버가 한 명씩 커리어를 바꿀 때마다 비즈니스 업무를 조금씩 더 담당하게 되었다. 그 이후 결국에는 약 1년간 혼자 일하게 되었다. 당시 책임감도 막중했을 것 같은데. 무섭진 않았나?K: 솔직히 뭘 해야 할지도 잘 몰랐다. 인수인계를 받으면서 ‘뭘 어떻게 해야 되겠다’라는 감은 있었지만, 이전에 한 번도 못 해본 일도 있었고 그 자리에서 바로 도움 받을 상황도 아니었기 때문에 막막했다. 하지만 재무와 비즈니스 등 여러 방면에 늘 관심있었고 한국 본사 멤버들이 꾸준히 응원해줬다. 오히려 절호의 기회로 생각했다. 항상 잔디에서 온라인 상태이던데 온종일 일하는 게 맞는지.K: 맞다. 특히 글을 쓰는 일은 주로 조용한 밤에 잘 되더라. 모든 비즈니스가 마찬가지지만 고객 관리가 생명이라고 생각한다. 고객은 일반적으로 기다리는 것을 싫어하기 때문에 응대는 최대한 즉각 하려고 한다. 그렇다 보니 거의 온종일 일에 집중하게 되는 것 같다. 혼자서 일하는 것과 다른 멤버와 함께 일하는 것의 가장 큰 차이는 뭔지? 선호하는 방식이 있는지?K: 각 방식에 장단점이 있지만, 아무래도 함께 일하는 것이 더 좋은 것 같다.혼자 일할 때는 모든 의사 결정을 내가 해야 하는 만큼 책임과 자율이 공존했다. 이런 자유를 선호하고 스스로 동기부여 하는 사람이라면 더할 나위 없는 환경인 것 같다. 하지만 가끔은 모든 책임에 조금 부담을 느끼기도 하고 무엇보다도. 외로워지게 된다. 그럴 때면 다시 동기 부여 모드로 돌아가기가 어려울 때가 있긴 하다.멤버들과 함께 일하게 되면서 각자 다른 방식으로 의사소통 한다는 부분을 가장 크게 느꼈다. 각 멤버의 의사소통 방식을 존중해줘야 하고 지금도 계속 찾아가는 중이다. 미팅을 할 때 서로에게 피드백을 많이 주려고 하는데 의사 결정에 있어 큰 도움이 되는 것 같다.사실 인턴들보다 내가 더 많이 배우고 있는 것 같다. ^^;  대만 팀 일하는 방식을 조금 더 자세히 알고 싶다.K: 모든 멤버가 원격으로 일을 하고 있기 때문에 대부분 잔디로 공유하고 있다.매주 월요일에는 미팅을 진행하고 1:1로 만나 한 주의 계획, 그 전 주 업무에 대한 피드백을 주고받는다. 미팅 내용을 토대로 자세한 업무 사항을 각 인턴에게 공유하고 중간중간 현황을 공유 받는다. 매주 금요일에는 편하게 점심을 먹으며 (약간의 업무 얘기와 함께) 서로 개인적인 일도 공유하고 수다를 떤다. ^^ 잔디와 함께한 지 꽤 되었는데, 어떤 게 가장 많이 달라졌는가?K: 잔디 서비스가 많이 성장한 것 같다. 처음 조인했을 때만 해도 메시지와 파일 영구 저장, 그리고 약간의 연동 기능만 제공되고 있었지만 지금은 할 일 관리, 조직도, 그리고 더 다양한 연동 서비스까지 생겨났다.이보다 더 많이 달라진 게 있다면 대만 고객들의 인식이다. 잔디를 사용해본 고객이라면 “꼭 필요한 서비스다!”라며 주변에 많이 소개해주고 있다. 대만은 아직 협업툴이 많이 알려지지 않았고 대체제가 많지 않아 ‘잔디’의 성장 가능성이 매우 높다. 스타트업을 넘어 최근에는 중소기업, 대기업 고객들도 협업툴에 관심을 갖기 시작했다. 그럼 변하지 않은 것도 있는지?K: 아시아 시장을 타겟한 글로벌 서비스라는 점은 변하지 않았고, 내가 잔디와 함께 하기로 결심한 또 다른 이유이다. 아시아권에는 수십개의 국가와 문화가 존재한다. 메신저라고 해도 현지 고객이 좋아하는 것, 원하는 것이 다르다. 쉽게 말해, 카톡, 라인이 동양권에서 현지화에 성공한 이유일 것이다.잔디가 꾸준히 아시아권 확장에 노력하고 있다는 것에는 변함이 없는 것 같다. 혹시 스타트업에서 꾸준함이 얼마나 중요하다고 생각하는지?K: 스타트업이 아니더라도 꾸준함은 모든 분야에서 제일 중요한 요소인 것 같다. 요즘엔 많은 사람이 똑똑하고 열정이 있다. 하지만 그 열정과 성과를 얼마나 오랫동안 유지하느냐에 따라 결과가 갈린다고 생각한다. 지금까지 수많은 사람을 만나오면서 의욕과 열정만 너무 앞서 뭔가 해보기도 전에 제풀에 꺾이는 경우를 많이 봤다. 또, 물론 긍정적인 태도도 중요하지만, 긍정적인 태도 자체는 아무것도 해주지 않는다. 그 긍정성과 비전이 빛을 발한다는 것을 증명하기 위한 행동이 반드시 따라야 한다. 잔디에서 가장 기억에 남은 경험이 있는지?K: 한국 출장 중 IT/스타트업 종사자를 위한 파티에 초대받은 적이 있다. 한국어를 잘 못 하니 굉장히 낯설었는데 지나가면서 사람들이 이것저것 물어보더라. 회사와 대만에 대해 말을 하게 되고, 나중에는 나도 모르는 사이에 내가 처음 본 사람과 막 수다를 떨고 있더라. 나에게는 문화 충격이었다. 대만에서 그런 파티를 가보지도 않았고 굉장히 수다스럽고? 오픈 마인드인 사람들과 얘기할 수 있는 신기한 경험이었다. 시간 날 땐 무엇을 하는지?K: 사실 시간이 잘 나지 않는다. 하하. 주로 밤에 짬이 나면 주로 조깅하거나 산책을 한다. 아, 산책하면서 포켓몬을 잡는다. 조깅을 하거나 걸으면서 할 수 있는 게임이라 포켓몬 고를 좋아하는 것 같다. 지금까지 641마리를 잡았고 앞으로 한 10마리만 더 잡으면 내 컬렉션을 완성 시킬 수 있다. 어디서 덕질의 향기가…. KM의 꾸준함이 여기서 보이는 것 같다.K: 나도 당연히 쉬면서 일을 한다. 다만, 내 목표를 달성하기 위해 일에 조금 더 몰두하게 되는 것 같다.  목표가 무엇인가?K: 단기적으로는 대만에서 잔디를 협업툴 1위로 만드는 것이다. 나아가서는 대만뿐만 아니라 아시아에서 1위로 만들고 싶다. 국가, 문화 상관없이 다른 아시안들도 잔디의 효용을 알게 되었으면 좋겠고, 충분히 할 수 있다고 본다. 이런 내 목표를 이루기 위해 다른 대만 기업들과 제휴하는 것으로 첫 발자국을 뗐다. 한국은 이미 구루미의 화상채팅, 그리고 사이냅소프트의 문서 바로 보기 기능을 제휴를 통해 이루어냈다. 그 제휴 결과로 꼭 연동 서비스가 추가되어야 하는 건 아니지만, 주변 기업들과 상생하면서 그 영역을 넓혀가고 싶다. 끝으로, 전 인터뷰이였던 Gary가 남긴 질문이다. 지금 먹고 있는 음식을 같이 먹고 싶은 멤버는 누구인가?K: 음…. Onion(어니언)과 함께 하고 싶다. 직접 만나보진 못했지만 뭔가 재미있고 스토리가 많은 사람 같다. 어니언과 수다 떨면서 하루를 시작하면 뭔가 엄청난 에너지를 받을 것 같다. 다음 인터뷰이에게 묻고 싶은 질문이 있다면?K: 처음 한국에 갔을 때 즐거운 추억들이 많다. 외국에 가본 경험이 있다면 가장 기억에 남는 경험이 뭐였는지 궁금하다. 마지막으로 하고 싶은 말이 있는지?K: 작년에 개인적으로 힘든 일을 겪었는데, 그때 업무에 다시 집중할 수 있을 때까지 충분한 시간을 주었고, 멤버들이 응원해주었다. 멀리 떨어져 있지만, 그 거리가 느껴지지 않을 정도로 큰 위로를 받았고 너무 감사했다는 말을 전하고 싶다.#토스랩 #잔디 #JANDI #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화 #원격근무 #리모트 #디지털노마드 #재택근무
조회수 2059

시작하는 기업의 임직원이 절대 해서는 안 될 말

제품 정식 출시 전후로 여러 사람과 만나고 대화를 나누다 '스타트업 임직원이라면 저런 말을 하면 안 될 건데'하며 느낀 것이 있습니다. 그중 두 가지 사례를 소개하고, 이에 대한 삼분의일만의 해결책(약속)을 소개합니다.지난여름 첫 제품을 출시했다.눈 깜짝할 사이에 여름의 열기는 식었고 따뜻한 침대 속이 그리운 계절이 찾아왔다. 사무실 인원이 2배로 늘어나서야 그간 있었던 일들을 정리할 약간의 여유가 생겼다. 하나씩 되짚어보면 가장 고마운 것은 역시나 고객이다. 이어서 주변 지인들에게 참 고맙다. 좋은 제품이라고 항상 자신감 넘치게 알렸기 때문일까. 축하와 응원 만으로도 고마운데, 구매까지 해 준 지인들이 있다. 저렴하지 않은 가격에도 불구하고 나를 믿고 선뜻 지갑을 열어준 그들을 보며 행복감이 밀려왔다.'나 지금까지 잘 살았구나'반면 이런 일도 있었다. 어찌 알았는지 평소 연락 안 하던 지인이 연락 와 '너는 어차피 매트리스를 공짜로 쓸 수 있으니, 나 하나만 줘'하고 나를 당황하게 만들었다. 참 놀라운 발상이다. 몇 십만 원 가치의 회사 자산을 그냥 달라고 할 수 있다니. 더 놀라운 것은 '내가 매트리스를 공짜로 사용한다'라고 인식한 것이다. 물론 '회사에서 복지 차원으로 제품을 줄 수도 있지 않냐'하며 생각할 수 있다. 하지만 이는 그렇게 대수롭지 않게 넘어갈 일이 아니다. 나는 그에게 왜 그런 생각을 했는지 물었고, 다시 한번 깜짝 놀랐다.절대 하지 말아야 할 말 (외부)그의 대답은 '주변 아는 스타트업 모두 그러던데?'였다. 직접 만든 제품을 임직원들이 공짜로 사용하면서 이를 주변에 서슴없이 말한다는 것이다. 그 스타트업 임직원들이 정말 한치의 망설임 없이 그런 말을 했는지, 아니면 그가 강요 아닌 강요로 캐물어 대답을 들었는지는 알 수 없다. 사정이 어찌 됐던 그 스타트업 구성원들은 평소 이렇게 말하고 다녔을 거다.정말 열심히 만든 제품입니다.믿고 돈 내고 써보세요.나도 그렇다. 정말 열심히 만들었다. 세계 최고의 제품이라 말하기에는 부족한 면들이 있지만, 세상에 자신 있게 내놓을 정도로 잘 만들었다. 그래서 믿고 구매해 달라고 말한다. 나뿐만 아니다. 스타트업에 몸담고 있는 임직원 대부분 비슷하게 말할 것이다. 그리고 고객은 이들의 노력과 열정, 그리고 광고든 블로그 글이든 어떤 설득 과정을 거쳐 구매를 결정한다. 이제 위 문장에서 한 문장을 덧붙여보자. 믿고 돈 내고 써보세요.그런데 나는 공짜로 사용합니다제품을 구매하고 싶은 욕구가 사라진다. 그들이 스스로 돈 내고 사고 싶을 정도의 제품을 만들었는지 의문이 들기 때문이다. 해당 회사의 임직원과 어느 정도 친분이 있다 해도 '지인인데 하나 사줘야지'보다는 '나도 하나만 줘'라는 욕구가 절로 든다.비약이 심하다고 볼 수 있다. 하지만 분명한 것은 회사 성장에 도움되는 말이 아니라는 것이다. 이런 말들을 서슴없이 하는 스타트업 임직원들이 있다는 것이 놀라울 따름이다.스타트업은 하나의 제품에 의해 회사의 존폐 여부가 결정되기 때문에 구매 욕구를 떨어뜨릴 수 있는 발언은 함부로 하면 안 된다. 혹여나 실수로, 외부에서 이와 같은 발언을 하지 않도록 임직원 모두 조심하고 또 조심하는 것이 좋다. (나는 그렇게 생각한다.)절대 하지 말아야 할 말(내부)앞의 이야기를 정리하면 회사 밖에서 만나는 모든 사람들은 잠재 고객일 수 있기 때문에 구매 욕구를 떨어뜨리는 발언은 함부로 하면 안 된다는 것이다. 반대로 회사 안에서 하면 안 되는 말도 있다. TV CF도 했을 정도로 한때 잘 나갔지만 지금은 존폐 위기에 처한 한 스타트업이 있다. 그곳에 오랜 시간 몸 담았던 지인이 다른 회사로 이직한다는 소식을 들었다. 잠깐 짬을 내 그를 만나, 이직 이유를 물었다. 곰곰이 들어보니 성장세 하락 등 여러 이유가 있지만 가장 인상 깊은 것은 '대표의 발언'이었다. 회사 성장이 꺾이자 대표는 직원들을 불러 모아 이런 말을 했다고 한다.그러니깐 내가OO(해당 회사의 제품)을 안 쓰지대표가 어떤 의도로 위 발언을 했는지 모른다. 강한 질책으로 동기부여를 이끌려고 했을 수도 있다. 의도가 좋든 나쁘든, 나는 위 말을 듣는 순간 해당 제품을 사용하지 않기로 결심했다. 대표 본인이 사용하지 않는 제품을 왜 고객이 사용해야 하는지 납득이 안 되기 때문이다.임원 이상(특히 대표 및 공동창업자)은 혹여나 본인이 자신들의 제품을 사용하지 않더라도, 그 사실을 내부에 알리면 안 된다. 직원들의 제품 개발 욕구와 사기를 떨어뜨리는 것은 물론, 혹여나 그 발언이 외부에 알려지면 회사 성장에 악영향을 미치기 때문이다. 해야 하는 행동. 좋은 제품을 만들기 위한 하나의 약속이런 일을 겪고 공동창업자인 나를 비롯해 삼분의일 대표는 회사의 성장 여부와 상관없이 한 가지는 꼭 지켜 나가기로 약속했다.회사 제품은 무조건 내 돈 주고 산다.약속 후, 그동안 집에서 개인적으로 사용했고 사용한 모든 시제품을 회사 돈이 아닌 (고객의 입장이라 생각하며) 개인 돈으로 지불해 구매했다. 어찌 보면 별거 아니고 괜히 돈 낭비한 것으로 보일 수 있다. 하지만 몇 가지 이점이 있었다.제품을 객관적으로 평가-개선하고새로 합류한 구성원에게 우리가 함께 만들 브랜드 미션을 당당하게 설명하고 진심을 담아 제품을 믿고 사달라 말하고망설임 없이 고객에게 다가갈 수 있었다. 여러 이점을 말했지만, 분명한 것은 약속을 전후로 조금씩 더 나은 제품을 만들고 있다는 것이다. 아직 삼분의일은 큰 예산을 동원해 광고 홍보 등을 한 적이 없다. 지난 분기에 사용한 광고 예산은 수십만 원에 불과하다. 그럼에도 불구하고 저렴하지 않은 제품을 500여 명이나 구매하고  '만족도 99%'라고 평가 남겨준 것을 보면, 우리의 약속이 긍정적인 영향을 미친 것이 아닐까 생각해본다. #삼분의일 #매트리스 #인사이트 #스타트업 #마인드셋 #조언
조회수 1052

창업자의 일기장(9)-예비창업자

예비창업자라는 신분은취준생(취업준비생)과 같다.꼭 모두가 그런 것은 아니지만,창업은 준비하는데 아직 소속이 없다.취준생이나 예비창업자나 백수라는 다른 명칭이 있다.(물론 직장 다니면서, 학교 다니면서 준비하는 분들도 있지만 나의 경우는 백수였다) 너무나 몰랐기에창업을 너무 쉽게 봤다.그냥 빨리 제품 만들고,잘 홍보해서,내다 팔 면 되는 거 아닌가 했는데...정말 무식했다.마치, 야구 경기에서 이기는 법은잘 치고, 잘 막고, 잘 뛰면 이긴다라는 식의본질은 맞는 말이지만,말만 쉽지 당사자가 되어보면 선수 로테이션, 컨디션, 통계, 성향, 경기일정,타이밍, 작전, 연습량, 장비 심지어 그날의 날씨까지고려해야 할 변수, 요인들이 많다.나에게 선생은 도서관의 책이었다.창업을 책으로 배웠다.이론적인 지식은 늘어가지만실제로 현실 적용 하기에는 무리가 있었다.성공한 창업자의 스토리들,실패한 창업자의 스토리들,회사 관리의 노하우,재무와 세무에 관련한 참고서들,사업자등록부터 인재영입까지수많은 지침서들이 있었고,한 권 한 권 돌파해 나갈 때마다,문제가 뻥하고 뚫린 듯 맑아지는 게 아니라오히려, 더 겁나고, 망설여지더라.(결과론 적으로 이런 지식들이 지금은 큰 도움이 되고 있지만그걸 깨닫기까지는 사실 더 시간이 흐른 후였다. 그리고 이 때는 너무 책 속에서 창업을 상상하며,몰입되어 있었다. 과할 정도로...;;;)막연했다.잘할 수 있을까라는 의문이 머릿속을 계속 울렸고,알아갈수록 혼란스러웠다.일단 저지르자!그리고 수습하자!원체 학생 때도, 직딩일때도 나는 그런 방식으로 살아왔으니까.그래서 이렇게 창업한답시고 회사 나온 거잖아.그런데 이런저런 생활고와애당초 계획된 바대로 진행되지 않는 업무들,마음이 흔들리는 동료들을 보면서,내가 참 무식하게, 저돌적이었구나란  깨우침은밤마다 한 숨이 늘어가게 만들었다.답답했다.길이 안 보였다.정말 칠흑 같은 공간에 떨어져서 어디가 위아래고,어디로 가야 하는지알 수 없는 막막함이왜 사람을 정신병이 들게 하는지이해할 수 있을 것 같았다.불러도, 아무 대답 없는 공허함.외쳐도 들어주는 사람이 없는 듯한 느낌.마치 어떤 구렁텅이에 떨어져서"여기 사람 있어요~! 누가 나 좀 꺼내 주세요~!"라고 아무리 외쳐도 정적만 돌아오는 상황이랄까?누가 그러더라.창업은 즐겁다고,즐기는 일이라서 한다고...나도 처음에는 열정이 넘쳤고,자신 있는 분야였고,즐겁게 할 수 있다고 믿었는데...시간이 지날수록 성과도, 진행도, 계획도엉망진창일 때가 반복되면즐기는 게 아니라 절실해야 한다는 걸 현실로 체감하게 된다.몰랐을 때는 행복뇌피셜을 가동하며,꿈꾸고, 웃으면서 내일을 기대했지만,알면 알아갈수록,두렵고, 겁나고, 무섭더라.(아마 이 글을 읽고 있는 몇몇 동지들도나와 동일한 상황에서 고군분투하고 있을지도...나와 공감되는 현실에서 떨고 있을지도...)아내와 병원에 갔는데,"축복(태명)"이가 꼬물꼬물 움직이는 초음파 영상에기쁘고 신기했지만,한편으로 부끄러운 아빠라는 생각에미안한 마음이 가득했다.예비창업자라고 불리지만아빠는 사실 백수란다. 예비창업자라는 말은 나를 너무나 힘들게 했다.그렇다고 지금 당장 사업자등록을 내고회사를 만든다는 것은 더 무모하다.세금과 건강보험료와 같은 자잘한 것도 걱정이지만,어쨌든 사업자등록을 낸다고 해서 당장 수익이 발생하는 것도 아니고,아니, 팔 것도 없는데 무슨 깡으로 사업자를 낸단 말인가.처음에 무식했기에 막 달렸는데달리다가 하나씩 알게 되니까내가 뛰던 곳이 지뢰밭이고, 곳곳에 함정이 있는 정글이라는 걸 알게 된 순간...그래도 뛸 수 있을까?그리고 2014년 3월!이런 나의 상황을 알지 못하는 아이가 세상에 축복을 받으며 태어났다.그리고 기쁨과 환희의 전체 분량만큼나의 어깨는 더 무거워졌다.이제는 "무식하게"가 아니라 "전략적"이어야 했고이전에는 "몰랐다"라는 이유가 통했겠지만,이제는 "몰랐다"는 건 무능한 거라는 뜻이기도 했다."체면", "존심", "여유" 같은 건 사치고물러서지 말고,양보하지 말고, 쟁취해야 하는 강한 동기가 나를 지배했다."어중간하게 할 거면 아예 시작도 말았어야지."근데 어쩌지? 이미 시작을 어정쩡하게 해서....결국은 그걸 만회하기 위해서는바로 지금 롸잇나우!처절하게,제대로 마음먹고,미치도록,확실하게 움직이고,냉철하게,지능적으로 효과적이어야 한다.무식할 때 기다려졌던 내일이 아니라알기 때문에 기다려지는 내일을 만들기 위해서...그래서, 도서관 밖을 뛰쳐나갔다.책상 앞 책 속의 창업 세계가 아니라책상 밖 세상 속의 창업 현실 속으로사람들을 만나러,고객들을 만나러...그러다가 오랜만에그녀와 연락이 닿았다.오늘은 여기까지~~!!다음 회에 이어서 글 남기겠습니다.오래전 다이어리에 작성했던 메모들을 재구성하여이렇게 다시 기록하다 보니 마음이 저려옵니다.여전히 두렵고, 겁나고, 걱정이 많지만때로는 즐겁고, 신나고, 여유도 있습니다.끝나가는 오늘은 항상 아쉽고,다가올 내일은 기대합니다.첫 아이가 태어난 그 날부터,저도 새롭게 태어났습니다.그냥 그런 예비창업자에서...뭔가가 바뀌어버린 좀 다른 예비창업자로... 
조회수 1397

Android Wear 개발하기 - VCNC Engineering Blog

비트윈 팀은 지난달 비트윈에 Android Wear 앱 기능을 릴리즈했습니다. 즐거운 개발 경험이었지만, 힘들었던 점도 많았습니다. 어떤 과정을 통해서 개발하게 되었고, 내부 구조는 어떻게 되어 있는지, 신경 쓰거나 조심해야 할 점은 어떤 것들이 있는지 저희의 경험을 공유해보려고 합니다. 이 글을 통해 Android Wear 앱 제작을 고민하는 개발자나 팀이 더 나은 선택을 하는 데 도움이 되고자 합니다.Android Wear에 대해Android Wear는 최근 발표된 구글의 새 웨어러블 플랫폼입니다. 공개된 지 얼마 되지 않았음에도 불구하고 완성도 있는 디바이스들이 출시된 상태이며, 기존의 웨어러블 기기보다 기능과 가격이 매력 있다는 평가를 받고 있습니다. 또한, 2014 Google I/O에서 크게 소개되고 시계를 참가자들에게 나눠주는 등, 구글에서 강하게 밀어주고 있기 때문에 상당히 기대되는 플랫폼입니다.Android Wear의 알림 기능은 연결된 mobile1 기기와 연동됩니다. 예를 들어 메시지를 받았을 때 mobile과 wear에서 모두 알림을 받아볼 수 있고, Google Now와 연동하여 교통, 날씨 등 상황에 맞는 알림을 제공합니다.또, 여러 가지 앱들의 다양한 기능을 음성으로 제어하도록 하여 사용자에게 기존의 시계와는 완전히 다른 경험을 주고 있습니다.한국에서는 Google Play Store의 기기 섹션에서 구매가 가능합니다.Android Wear 개발하기Android Wear는 Android 플랫폼을 거의 그대로 사용하기 때문에, Android 개발 경험이 있는 개발자라면 아주 쉽게 개발을 시작할 수 있습니다. 비트윈에서는 구글의 80:20 프로젝트를 패러디한 100+20 프로젝트를 통해 개발을 진행하게 되었습니다. (하던 일을 다 해내면서 시간을 내어 진행한다는 의미로 100+20 프로젝트입니다. 하지만 가끔은 '20' 부분에 너무 몰입하여 0+20이 되기도 한다는 게 함정입니다...)Activity, Service 등 Android의 기본 component들을 모두 그대로 사용 가능하며, 손목에 찰 수 있는 크기의 화면에서 유용하게 사용할 수 있는 WearableListView, GridViewPager 같은 새 widget들이 추가되었습니다. 구글 개발자 사이트의 wearable training 섹션에서 자세한 안내를 볼 수 있습니다.비트윈의 아이디어비트윈 Android Wear 기능의 컨셉은, 항상 몸에 착용하는 Wear의 특징을 살려, '커플이 떨어져 있더라도, 항상 함께 있는 느낌을 주기' 였습니다. 그래서 아래와 같은 기능들이 기획되었습니다.Feel His/Her Heart (그대의 심장박동 느끼기): 상대방의 심장박동을 진동으로 재현해주기Where He/She Is (그/그녀는 어느 방향에 있을까?): 상대방의 위치를 나침반과 같은 형태로 보여주기 (안심하세요. 여러분. 방향만 알려주고 정확한 위치는 알려주지 않습니다!)Feel Memories (메모리박스): 언제든 추억을 떠올릴 수 있도록 비트윈의 기존 기능인 메모리박스(추억상자)를 Android Wear에서 구현하지만 이 아이디어들은 하루 만에 망하게 됩니다.메인 아이디어였던 심장박동 느끼기는 사용자가 요청하면 상대방의 시계에서 심장박동이 측정되어 사용자에게 상대방의 심장박동을 진동으로 재현해주는 멋진 기능이었습니다. 하지만 이 아이디어를 낼 때 심박센서가 탑재된 Android Wear 기기가 없었던 게 함정이었습니다.다음날 Android Wear Bootcamp에 참가하여 심박센서가 작동하는 삼성 Gear Live 기기를 사용해 볼 수 있었습니다. 결과는 충격이었습니다. 생각과는 달리 심박박동 측정 결과가 나오는데 10~20초가 걸리고, 그나마도 측정되는 동안은 올바른 위치에 시계를 차고 가만히 있어야 했습니다. 결국, 이러한 제약 때문에 사용자들이 실제로 유용하게 사용할 수 있는 기능이 될 수 없었습니다.그래서 계획을 수정하여 현실적으로 구현 가능한 기능들을 먼저 만들어 보기로 했습니다.목소리로 답변하기: 상대방에게 온 메시지에 Android Wear Framework에서 제공하는 음성인식을 이용하여 목소리를 텍스트로 바꾸어서 답장하기이모티콘 답변하기: 이모티콘을 사용자가 선택하여 이모티콘으로 답장하기비트윈 메모리박스: 비트윈의 기존 기능인 메모리박스(추억상자)를 Android Wear에서 구현처음의 원대한 계획에서 뭔가 많이 변경된 것 같지만, 기분 탓일 겁니다.내부 구현비트윈 Android Wear 앱은 크게 두 가지 기능을 가지고 있습니다. 하나는 상대방에게 메시지를 받았을 때, 메시지 내용을 확인하고 여러 가지 형태로 답장할 수 있는 Notification 기능이고, 다른 하나는 Wear에서 원래 Application의 일부 기능을 시작 메뉴를 통하거나 목소리로 실행시킬 수 있게 해주는 Micro App입니다. 해당 기능들의 스크린샷과 함께 내부 구조를 설명하겠습니다.우선 Notification 부분입니다. 앱 개발사에서 아무 작업도 하지 않더라도, 기본적으로 Android Wear Framework이 스크린샷 윗줄 첫 번째, 네 번째 화면과 같이 예쁜 알림화면과 Open on phone 버튼을 만들어 줍니다. 여기에 추가적인 기능을 붙이기 위하여 WearableExtender를 이용하여 목소리로 답장하기, 이모티콘 보내기 버튼을 덧붙였습니다.비트윈 Android Wear 스크린샷 - Notification둘째로는 Micro App 부분입니다. 여기에는 이모티콘 전송과 메모리박스를 넣었습니다. 이 부분은 일반적인 Android 앱을 만들듯이 작업할 수 있습니다비트윈 Android Wear 스크린샷 - Micro App화면을 보면 무척 단순해 보이지만 내부 구조는 간단하지가 않습니다. 연결된 화면들을 만들어내는 코드가 한곳에 모여있지 않고, 각기 다른 곳에 있는 코드들을 연결하여야 하기 때문입니다. Notification 하나를 만들 때에 Framework에서 만들어주는 1, 4번째 화면, Notification에 WearableExtender를 이용하여 덧붙이는 2, 3번째 화면, 그리고 다시 Framework에서 만들어주는 목소리로 답장하기 화면, 그리고 Wear 쪽의 Micro App을 통해 구동되는 이모티콘 선택 화면과 같이 여러 군데에 나누어 존재하는 코드가 연결됩니다.하나의 앱처럼 느껴지는 화면이지만 각각 다른 곳에 코드가 쓰여있습니다.그러면 이번에는 각 화면이 어떻게 연결되는지 알아보겠습니다.사용자가 상대방으로부터 받은 메시지를 Android Wear의 Notification으로 확인하고, 답장으로 이모티콘을 보내고자 하는 상황을 가정해 봅시다. 사용자가 Send Emoticon 버튼을 눌렀을 때 이모티콘 선택화면을 보여주고 싶은데, 이 행동에 대한 pending intent를 wear 쪽의 micro app이 아닌, mobile 쪽에서 받게 되어 있습니다. 이 때문에 아래의 표와 같이 mobile 쪽에서 pending intent를 받은 뒤 다시 wear 쪽으로 이모티콘 선택 화면을 보여주라는 메시지를 전송해줘야 합니다.이모티콘 전송 과정이번에는 메모리박스를 보겠습니다. 메모리박스도 단순한 화면이지만 mobile 쪽과 통신하여 내용을 불러와야 하므로 생각보다 해야 하는 일이 많습니다. Android Wear Message API와 Data API를 이용하여 데이터를 주고받아 사진을 화면에 보여줍니다.메모리박스를 보여주는 과정개발 시 신경 써야 하는 점개발하면서 주의 깊게 신경 써야 하는 점들이 있습니다.첫 번째로 코드 퀄리티입니다.Android Wear는 아직 성숙하지 않은 플랫폼이기 때문에 많은 사람이 받아들인 정형화된 패턴이 없습니다. 앞서 살펴보았듯이, 간단한 기능을 구현하려고 해도 상당히 복잡한 구조를 가진 앱을 만들게 되기에, 코드 퀄리티를 높게 유지하기 어려웠습니다비트윈 팀에서는 EventBus를 활용하여 코드를 깔끔하게 유지하려고 노력하였습니다. 이러한 문제를 해결할 수 있는 Guava의 Concurrent 패키지나, RxJava 등의 도구들이 있으니 익숙한 도구를 선택하여 진행하는 것을 추천합니다. 또한, 구글의 Android Wear 코드랩 튜토리얼의 내용이 매우 좋으니, 한번 처음부터 수행해 보면 좋은 코드를 만들 수 있는 아이디어가 많이 나올 것입니다.두 번째로는 원형 디바이스 지원 및 에러 처리입니다.처음부터 원형 디바이스를 신경 쓰지 않으면 마무리 작업 시 상당한 고통을 받게 됩니다. 원형 디바이스에 대한 대응법은 Android 개발자 트레이닝 사이트의 wearable layout 섹션에 자세히 나와 있습니다. 현재는 원형 디바이스를 처리하는 프레임웍에 약간 버그가 있지만, 곧 수정될 것으로 생각합니다.사용자 입력이 있을 때, 그리고 에러가 났을 때 적절하게 처리해주는 것은 제품의 완성도에 있어 중요한 부분입니다. Android Wear Framework에서 제공하는 ConfirmationActivity등을 활용하여 처리하면 됩니다.마지막으로 패키징입니다.자동 설치 패키징은 비트윈 팀에서도 가장 고생했던 부분입니다. Android Wear는 본체 앱을 설치하면 자동으로 함께 설치되는데, 앱이 정상작동하기 위해서는 몇 가지 까다로운 조건이 있습니다.build.gradle 의 applicationId 를 wear와 mobile 양쪽 모두 똑같이 맞춰야 합니다.Wear app의 AndroidManifest에 새롭게 선언한 permission이 있다면 mobile 쪽에도 포함해 주어야 합니다.기본적으로, 똑같은 key로 서명합니다. 다른 key로 sign 하는 경우는 문서를 참고해서 신경 써서 합니다.위 항목들은 아주 중요한 내용이지만 아직 문서화가 완벽하지 않으니 주의 깊게 진행해야 합니다.후기개발 과정에서 여러 가지 어려움이 있었지만, 무척 즐거웠던 프로젝트였습니다!우선 새로운 플랫폼에서 새로운 제품의 아이디어를 내고 만들어내는 과정이 많은 영감과 즐거움을 주었습니다.두 번째로는 Android Wear를 포함한 버전 출시 이후 구글플레이의 Android Wear 섹션 및 추천 앱 섹션에 올라가게 되어 홍보 효과도 얻을 수 있었습니다. 또한, 구글의 신기술을 적극적으로 사용하고자 하는 팀에게는 구글 쪽에서도 많은 지원을 해주기 때문에 도움도 많이 받았습니다.세 번째로는 기존의 Android 개발과 비슷하여 접근하기 쉬우면서도, 원하는 것을 구현하려면 상당히 도전적이어서 재미있었습니다.다만 조심해야 할 점은, 구글에서 적극적으로 밀고 있는 프로젝트라고 해서 다 성공하는 것은 아니라는 점입니다. 얼마만큼의 시간과 자원을 투자할지는 신중하게 생각하면 좋겠습니다.정리Android Wear는 새로운 기술과 플랫폼에 관심이 많은 개발자, 혹은 팀이라면 시간을 투자해서 해볼 만한 재미있는 프로젝트입니다. 하지만 완성도 있는 좋은 제품을 만들기 위해서는 생각보다 할 일이 많으니 이를 신중하게 고려하여 결정해야 합니다.끝으로 2014 GDG Korea Android Conference에서 같은 주제로 발표하였던 슬라이드를 첨부합니다.<iframe class="speakerdeck-iframe" frameborder="0" src="//speakerdeck.com/player/a1415af04644013234cf7a3f7c519e69?" 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;">구글의 튜토리얼 등에서 지칭하는 것과 마찬가지로, 이 글에서도 Android Wear와 연결된 휴대폰을 mobile이라 하겠습니다.↩
조회수 1034

반응폭발! 매쓰플랫 첫 사용 설명회 현장 속으로 go

안녕하세요. 매쓰플랫입니다.7/20(금) 매쓰플랫의 첫 사용설명회가뜨거운 반응속에서 잘 진행되었어요.지금부터 그 현장으로 함께 가보실까요?설명회 준비 기간 내내우리 선생님들에 어떤 자료를 드리면 도움이 될까고민 고민 하였어요.그 결과 많은 선생님들이 궁금해 하시는초등연산 학습지, 모의고사 학습지,앞으로 곧 공개 예정인 개념 추가 학습지 등등!하나의 파일로 묶어서 모든 선생님들께 제공해드렸어요.설명회 장소도 젊은 구성원들로 이루어진 매쓰플랫 답게모던하고 깔끔한 장소로 선정!오전 10시부터 설명회가 진행되기 때문에,식사를 하고 오시지 못한 선생님을 위한간단한 스낵도 준비해놓았어요~!자리마다 놓여있는 매쓰플랫에서 준비한 학습지 자료들~!그리고 모든 선생님들이 직접 테블릿PC로매쓰플랫을 체험 할 수 있도록,넉넉하게 셋팅 완료!매쓰플랫이 만들어진 계기 (은근 감동 스토리 ^_^) 부터,지난 2년 동안 매쓰플랫 히스토리,그리고 앞으로 계획까지 들어 볼 수 있는 시간이었어요.이후에는 선생님들이 매우 궁금해 하셨을매쓰플랫 기능 소개 및실제 활용 사례들을 알려드렸어요~!이 부분은 평소 매쓰플랫에 관심이 있는 선생님들이나실제로 정식 가입하여 사용하시는 선생님들과가장 가까이서 많은 대화를 하는효민 매니저님께서 진행해주셨어요♥항상 많은 분들이 매쓰플랫 상담 너무 친절하시다~모르는 부분 차근 차근 설명해 주신다 등등정말 많은 칭찬을 해주시는데!바로 그 주인공이 효민매니저님이세요 ㅎㅎ그 다음으로는이번 설명회에서 가장 반응이 좋았던그룹별 기능 시연 및 Q&A 시간!실제로 선생님들이 매쓰플랫을 체험해보고,궁금한 점은 바로바로 물어 볼 수 있었어요.게다가 평소 시중교재 연동이라든지,2015 개정 교육 과정 문제 은행 등...컨텐츠 쪽으로 궁금해하시는 분들 참 많죠?그래서 우리 컨텐츠팀 매니저님들도이번 설명회에 함께 참여하셔서 선생님들과많은 대화를 나누었어요~!실제로 이 날 많은 선생님들이체험하신 테블릿 PC를 가지고 가셔서좀 더 사용해보시기를 원하셨어요 ㅎㅎ이번 설명회의 경우,모든 선생님을 모시지 못하고,선착순으로 모시게 되어서 너무 아쉬웠어요 ㅠㅠ선생님께서 주신 소중한 피드백을반영하여 좀 더 나아진 매쓰플랫 설명회로 또 찾아 올게요.우리, 빠른 시일 내에 또 만나요 :)항상 감사합니다.click! click! 학습지 만들기에서 보고서 출력까지♥ 매쓰플랫 0원으로 체험하기 ♥http://bit.ly/2mEnjkK가장 빠르고 간편하게 문의하는 방법 요기!
조회수 2398

비트윈의 멀티티어 아키텍처를 위한 프레젠터 이야기 - VCNC Engineering Blog

블로그 첫 글에서 비트윈의 시스템 아키텍처에 대해 다룬 적이 있습니다. 시스템 구성의 미래에 대한 계획으로 멀티티어 아키텍처에 대해 언급했었는데, 이는 프로토콜을 단순화시키고 배포 자동화를 가능하게 하기 위해서 클라이언트와 비즈니스 로직을 담당하는 서버 사이에 일종의 게이트웨이를 두는 것이었습니다. 그 외에도 여러 가지 필요성이 생겨 해당 역할을 담당하는 프레젠터라는 것을 만들게 되었고 비트윈의 채팅 시스템에 적용하게 되었습니다. 만드는 과정 중에 여러 기술적인 문제들이 있었고 이를 해결하기 위한 노력을 하였습니다. 이 글에서는 비트윈 시스템에서의 프레젠터에 대해 이야기 하고자 합니다.프레젠터프레젠터는 일종의 게이트웨이 입니다. 기존의 시스템에서는 클라이언트들이 ELB를 통해 채팅 서버에 직접 TCP 연결을 하였습니다. 하지만 비트윈 PC버전과 자체 푸시 서버를 만들면서 ELB로는 해결할 수 없는 부족한 점들이 생겼고, ELB의 부족한 점을 채워줄 수 있는 시스템이 필요하게 되었습니다. ELB를 대체하는 역할 외에도 다른 여러 필요했던 기능들을 제공하는 프레젠터를 만들기로 하였습니다.프레젠터는 ELB의 역할을 할 뿐만 아니라 여러 다른 기능들도 제공합니다.프레젠터의 기능패킷을 적절한 샤드로 중계비트윈에서는 커플 단위로 샤딩하여 같은 커플의 채팅 요청에 대해서는 같은 채팅 서버에서 처리하고 있습니다. Consistent Hash를 통해 커플을 여러 채팅 서버로 샤딩하고 ZooKeeper를 이용하여 이 정보를 여러 채팅 서버 간 공유합니다. 프레젠터 또한 ZooKeeper와 연결을 하여 어떤 채팅 서버가 어떤 커플을 담당하는지에 대한 정보를 알고 있도록 설계되어 있습니다. 따라서 프레젠터는 첫 연결 시 보내는 인증 패킷을 보고 해당 채팅 연결에서 오는 요청들을 어떤 채팅 서버로 보내야 할지 판단할 수 있습니다. 어떤 채팅 서버로 보낼지 판단하는 과정은 처음 한 번만 일어나며, 이후 패킷부터는 자동으로 해당 채팅 서버로 중계합니다.프레젠터의 이런 기능 덕분에 클라이언트는 더 이상 어떤 채팅 서버로 붙어야 하는지 알아내는 과정 없이 아무 프레젠터와 연결만 맺으면 채팅을 할 수 있게 되었습니다. 기존에는 클라이언트들이 여러 채팅 서버 중 어떤 서버에 붙어야 하는지 확인하는 작업을 한 후에 할당된 채팅 서버로 연결 맺어야 했습니다. 그래서 클라이언트가 채팅 서버와 연결을 맺기 위해 다소 복잡한 과정을 거쳐야 했지만, 이제는 클라이언트가 프레젠터의 주소로 연결 요청만 하면 DNS Round Robin 통해 아무 프레젠터와 연결하는 방식으로 프로토콜을 단순화할 수 있었습니다. 덕분에 새로운 채팅 서버를 띄울 때마다 ELB를 Warm-Up 시켜야 했던 기존 시스템의 문제가 없어졌습니다. 그래서 비트윈 개발팀의 오랜 염원이었던 채팅 서버 오토스케일의 가능성도 열렸습니다.많은 수의 연결을 안정적으로 유지PC버전과 푸시 서버를 만들면서 기존의 채팅 연결과 다르게 많은 수의 연결이 장시간 동안 유지 되는 경우를 처리할 수 있어야 했습니다. 기존에는 TCP 릴레이를 하도록 설정된 ELB가 연결들을 받아주었습니다. 한 머신당 6만 개 정도의 Outbound TCP 연결을 맺을 수 있는데, ELB도 트래픽에 따라 여러 대의 머신에서 돌아가는 일종의 프로그램이므로 이 제한에 걸린다고 생각할 수 있습니다. 따라서 많은 수의 연결을 맺어놓고 있어야 하는 경우 ELB에 문제가 생길 수 있다고 판단했습니다. (과거 ELB가 연결 개수가 많아지는 경우 스케일아웃이 안되는 버그 때문에 문제가 된 적이 있기도 했습니다) 또한 클라이어트 연결당 내부 연결도 하나씩 생겨야 하면 클라이언트가 연결을 끊거나 맺을 때마다 서버 내부 연결도 매번 끊거나 연결해야 하는 오버헤드가 발생합니다.이를 해결하기 위해 프레젠터에서는 TCP 연결을 Multiplexing하는 프로토콜을 구현하여 적은 수의 내부 연결로 많은 수의 클라이언트 연결을 처리할 수 있도록 하였습니다. 서버 내부에서는 고정된 개수의 몇 개의 연결만 맺어 놓고 이 연결들만으로 수많은 클라이언트 연결을 처리할 수 있습니다. 이처럼 TCP Multiplexing을 하는 것은 Finagle과 같은 다른 RPC 프로젝트에서도 지원하는 기능입니다.TCP Multiplexing 프로토콜을 통해 많은 수의 클라이언트 연결을 소수의 서버 내부 연결로 처리합니다.또한, 프레젠터는 많은 수의 SSL 연결을 처리해야 하므로 암복호화 로직을 실행하는데 퍼포먼스가 매우 중요하게 됩니다. 채팅 서버 한 대를 제거하거나 하는 경우 많은 연결이 한꺼번에 끊어지고 연이어 한꺼번에 연결을 시도하게 되는 경우가 있을 수 있는데, 이 때 대량의 SSL Handshaking을 하게 됩니다. 기존 서버들로 대량의 SSL Handshaking을 빠른 시간안에 처리하기 위해서는 높은 퍼포먼스가 필요합니다. Java로 작성된 프로그램만으로 이런 퍼포먼스 요구사항을 달성하기 어려우므로, 클라이언트와의 연결을 담당하는 부분은 OpenSSL, libevent를 이용한 C++로 코드로 작성하였습니다. 인증 패킷을 파싱하거나 패킷들을 릴레이 하는 등의 로직을 담당하는 부분은 Alfred라는 Netty를 이용하여 만든 인하우스 RPC 라이브러리를 이용해 작성되었습니다. 연결을 담당하는 부분은 TCP 연결을 유지하는 역할과 들어온 패킷들을 Netty로 작성된 모듈로 릴레이 하는 역할만 담당하므로 매우 간단한 형태의 프로그램입니다. 짧은 시간 안에 어럽지 않게 구현할 수 있었습니다.클라이언트의 연결을 받아주는 역할을 하는 부분은 C++, 실제 로직이 필요한 부분은 Java로 작성하였습니다.여러 네트워크 최적화 기술의 지원ELB에는 여러 네트워크 최적화 기술들을 아직 제공하지 않는 경우가 있습니다. 대표적으로 HTTP/2 혹은 SPDY, QUIC, TCP Fast Open 등이 있습니다. 특히 모바일 환경에서는 SSL Handshaking 등 부가적인 RTT로 인한 지연을 무시할 수 없으므로 이런 기술들을 이용한 초기 연결 시간 최적화는 서비스 퀄리티에 중요한 부분 중 하나입니다. ELB는 AWS에서 관리하는 서비스이므로 AWS에서 이런 기능들을 ELB에 적용하기 전에는 이용할 수 없지만, 프레젠터는 직접 운영하는 서버이므로 필요한 기능을 바로바로 적용하여 서비스 품질을 높일 수 있습니다. ELB에서 이미 제공하는 최적화 기술인 SSL Session Ticket이나 다른 몇몇 기술은 이미 적용되어 있고 아직 적용하지 않은 기술들도 필요에 따라 차차 적용할 예정입니다.프레젠터의 구현C++ 연결 유지 모듈프레젠터는 퍼포먼스를 위해 C++로 작성되었습니다. 이는 Pure Java를 이용한 암복호화는 프레젠터에서 원하는 정도의 퍼포먼스를 낼 수 없기 때문입니다. 처음에는 OpenSSL과 libevent를 이용해 작성된 코드를 JNI를 통해 Netty 인터페이스에 붙인 event4j라는 인하우스 라이브러리를 이용하려고 했으나, 코드가 복잡하고 유지보수가 어렵다는 점 때문에 포기하였습니다. 그 후에는 netty-tcnative를 이용해보고자 했으나 테스트 결과 연결당 메모리 사용량이 큰 문제가 있었고, 이를 수정하기에는 시간이 오래 걸릴 것 같아 포기하였습니다. 결국, 페이스북에서 오픈소스로 공개한 C++ 라이브러리인 folly를 활용하여 프레젠터를 작성하게 되었습니다. folly의 네트워크 API들이 OpenSSL과 libevent를 이용해 구현되어 있습니다.릴레이 로직프레젠터는 첫 인증 패킷을 파싱하여 릴레이할 채팅 서버를 판단하며, 이후의 패킷부터는 실제 패킷을 까보지 않고 단순 릴레이 하도록 설계하였습니다. 처음의 Netty 파이프라인에는 Alfred 프로토콜을 처리할 수 있는 핸들러들이 설정되어 있어 인증 패킷을 파싱 할 수 있으며 인증 패킷에 있는 정보를 바탕으로 어떤 채팅 서버로 패킷을 릴레이 할지 결정합니다. 그 이후 파이프라인에 있던 핸들러를 모두 제거 한 후, 읽은 byte 스트림을 Multiplexing Protocol 프레임으로 감싸서 그대로 릴레이 하는 매우 간단한 로직을 담당하는 핸들러 하나를 추가합니다. 덕분에 로직 부분의 구현도 매우 간단해질 수 있었으며, 채팅 서버에 API가 추가되거나 변경되어도 프레젠터는 업데이트할 필요가 없다는 운영상 이점도 있었습니다.Multiplexing Protocol프레젠터의 Multiplexing Protocol은 Thrift를 이용하여 직접 정의 하였으며, 비트윈 개발팀 내부적으로 사용 중인 RPC 라이브러리인 Alfred에 이 프로토콜을 구현하였습니다. Thrift를 통해 C++과 Java로 컴파일된 소스코드를 각각 프레젠터의 연결 처리 부분과 로직 처리 부분에서 이용하여 통신합니다. 프레젠터에서는 Multiplexing된 TCP 연결들을 Stream이라고 명명하였으며 이는 SPDY나 HTTP/2에서의 호칭 방법과 유사합니다. SPDY나 HTTP/2도 일종의 Multiplexing 기능을 제공하고 있으며, 프레젠터의 Multiplexing Protocol도 SPDY 프레임을 많이 참고하여 작성되었습니다.수 많은 클라이언트와의 TCP연결을 Stream으로 만들어 하나의 내부 TCP연결을 통해 처리합니다.Alfred에서는 Multiplexing 된 TCP 연결을 Netty의 Channel 인터페이스로 추상화하였습니다. Netty에서 TCP 연결 하나는 Channel 하나로 만들어지는데, 실제 Stream도 Channel 인터페이스로 데이터를 읽거나 쓸 수 있도록 하였습니다. 이 추상화 덕분에 비트윈 비즈니스 로직을 담당하는 코드에서는 Stream으로 Multiplexing 된 TCP 연결을 마치 기존의 TCP 연결과 똑같이 Channel을 이용해 사용할 수 있었습니다. 그래서 실제 비즈니스 로직 코드는 전혀 건드리지 않고 프레젠터를 쉽게 붙일 수 있었습니다.로드 밸런싱클라이언트는 Route53에서 제공하는 DNS Round Robin 기능을 이용하여 아무 프레젠터에 연결하여 채팅 요청을 날리게 됩니다. 하지만 무조건 동등하게 Round Robin 하게 되면 새로 켜지거나 하여 연결을 거의 맺지 않고 놀고 있는 프레젠터가 있는데도 연결을 많이 맺고 있는 기존 프레젠터에에 연결이 할당되는 문제가 생길 수 있습니다. 충분한 시간이 흐르면 결국에는 연결 개수는 동등하게 되겠지만, 처음부터 놀고 있는 프레젠터에 새로운 연결을 가중치를 주어 할당하면 로드를 분산되는 데 큰 도움이 될 것입니다. 그래서 Route53의 Weighted Routing Policy 기능을 이용하기로 하였습니다. 현재 연결 개수와 CPU 사용량 등을 종합적으로 고려하여 Weight를 결정하고 이를 주기적으로 Route53의 레코드에 업데이트합니다. 이런 방법으로 현재 로드가 많이 걸리는 서버로는 적은 수의 새로운 연결을 맺게 하고 자원이 많이 남는 프레젠터로 더 많은 새로운 연결이 맺어지도록 하고 있습니다.스케일 인/아웃AWS에서는 트래픽에 따라 서버 개수를 늘리기도 하고 줄이기도 하는 AutoScaling 이라는 기능이 있습니다. 프레젠터가 스케일 아웃될때에는 프레젠터가 스스로 Route53에 레코드를 추가하는 식으로 새로운 연결을 맺도록 할 수 있습니다. 하지만 스케일 인으로 프레젠터가 제거될 때에는 Route53에서 레코드를 삭제하더라도 함부로 프레젠터 서버를 종료시킬 수 없습니다. 종종 클라이언트의 DNS 캐싱 로직에 문제가 있어, Route53에서 레코드를 삭제되었는데도 불구하고 이를 업데이트하지 못해 기존 프레젠터로 연결을 시도하는 경우가 있을 수 있기 때문입니다. 따라서 프레젠터 클러스터가 스케일 인 될 때에는 기존의 모든 연결이 끊어지고 충분한 시간 동안 새로운 연결이 생기지 않은 경우에만 서버를 종료시켜야 합니다. AutoScaling Group의 LifeCycleHook을 이용하여 위와 같은 조건을 만족 시켰을 때에만 프레젠터 서버를 완전히 종료시키도록 하였습니다.못다 한 이야기프레젠터라는 이름이 이상하다고 생각하시는 분들이 있을 것으로 생각합니다. 멀티티어 아키텍처를 이야기할 때 프레젠테이션 티어, 어플리케이션 티어, 데이터베이스 티어로 구분하곤 하는데 이 프레젠테이션 티어에서 나온 이름입니다. 지금은 실제 프레젠터가 하는 역할과 프레젠테이션 티어가 보통 맡게 되는 역할에는 많은 차이가 있지만, 어쩌다 보니 이름은 그대로 가져가게 되었습니다.프레젠터에서 AutoScaling을 하기 위해 LifeCycleHook을 이용합니다. 이때 프레젠터를 위해 LifeCycleHook 이벤트를 처리하는 프로그램을 직접 짠 것이 아니라 비트윈 개발팀이 내부적으로 만든 Kharon이라는 프로그램을 이용하였습니다. Kharon은 인스턴스가 시작되거나 종료될 때 실행할 스크립트를 작성하고 인스턴스의 특정 위치에 놓는 것만으로 LifeCycleHook을 쉽게 이용할 수 있게 하는 프로그램입니다. Kharon 덕분에 비트윈 내 다양한 시스템에서 별다른 추가 개발 없이 LifeCycleHook을 쉽게 활용하고 있습니다. 후에 Kharon에 대해 자세히 다뤄보도록 하겠습니다.정리비트윈 개발팀에서는 오랫동안 유지되는 수많은 채팅 서버 연결들을 처리하고 클라이언트와 서버 간 프로토콜을 단순화시키는 등 여러 이점을 얻고자 ELB의 역할을 대신하는 프레젠터를 만들었습니다. 프레젠터를 만드는 과정에서 여러 기술적 문제가 있었습니다. 이를 해결하기 위해 C++로 연결 유지 모듈을 따로 작성하였고 Multiplexing Protocol을 따로 정의하였으며 그 외 여러 가지 기술적인 결정들을 하였습니다. 이런 과정에서 시행착오들이 있었지만 이를 발판 삼아 더 좋은 기술적 결정을 내리기 위해 고민하여 결국 기존 시스템에 쉽게 적용할 수 있고 쉽게 동작하는 프레젠터를 만들어 이용하고 있습니다.
조회수 2629

BLSTM Tutorial

Summary:이 포스팅은 Bidirectional LSTM에 대한 기본 개념을 소개하고, tensorflow와 MNIST 데이터를 이용하여 구현해 봅니다.Bidirectional LSTM1. 개념 설명앞에서 RNN 과 LSTM 모델에 대해 소개했습니다.기본적인 LSTM 모델은 이전 시간의 step들이 다음 step에 영향을 줄 것이라는 가정을 했습니다.하지만 이후의 step 또한 앞의 step 에 영향을 줄 수 있다면 이 모델을 어떻게 적용시킬 수 있을까요?이후의 step 의 영향도 반영한 모델이 Bidirectional LSTM 모델입니다.위의 그림과 같이 BLSTM 은 두 개의 LSTM 모델을 Concatenate 하여 사용합니다.Time step 이 1부터 t 까지 있다고 가정할 때 forward lstm model 에서는 input 을 Time step 이 1 일때부터 t 까지 순차적으로 주고 학습합니다.반대로 backward lstm model 에서 input 을 T = t 일때부터 1까지 거꾸로 input 주고 학습을 하게 됩니다.time step 마다 두 모델에서 나온 2개의hidden vector은 학습된 가중치를 통해 하나의 hidden vector로 만들어지게 됩니다.2. 구현전체 코드는 Github page 를 참고해주세요.MNIST image 를 input 으로 넣었을 때 이 image 가 0 에서 9 중에 어떤 숫자인지 맞추는 BLSTM 모델을 만들어 보고자 합니다.MNIST 는 0 - 9 의 숫자 image data 이며 각 데이터는 28 x 28 의 matrix (data 는 28 x 28 길이의 array) 로 이루어져 있습니다.앞에서 봤듯이 LSTM 은 sequence 형태를 요구합니다.그래서 데이터 하나를 한 번에 넣는 것이 아니라 각 데이터의 matrix 를 row 만큼, 즉 28번의 time step 으로 나누어 넣어주게 됩니다.그래서 input_sequence 를 28 길이로 설정합니다. learning_rate = 0.001 training_epochs = 10 # 전체 데이터를 몇번 반복하여 학습 시킬 것인가 batch_size = 256 # 한 번에 받을 데이터 개수 # model # 입력되는 이미지 사이즈 28*28 input_size = 28 # input size(=input dimension)는 셀에 입력되는 리스트 길이 input_steps = 28 # input step(=sequence length)은 입력되는 리스트를 몇개의 time-step에 나누어 담을 것인가? n_hidden = 128 n_classes = 10 # classification label 개수 X = tf.placeholder(tf.float32,[None, input_steps, input_size]) Y = tf.placeholder(tf.float32,[None, n_classes]) W = tf.Variable(tf.random_normal([n_hidden * 2, n_classes])) b = tf.Variable(tf.random_normal([n_classes])) X 는 28 x 28 의 matrix 로 이루어진 데이터를 받고 Y 는 실제 class (0 - 9) 를 의미하는 length 10 의 vector 를 받습니다.그리고 각 forward lstm 모델과 backward lstm 모델에서 들어오는 weight 값을 받을 변수를 설정합니다.DropoutWrapper 는 모델에서 input 으로 주어진 data 에 대한 Overfitting 이 발생하지 않도록 만들어주는 모델입니다.각 state 를 랜덤하게 비활성화시켜서 데이터를 더 random 하게 만들어줍니다. keep_prob 변수를 통해서 dropoutWrapper 의 확률값을 조정합니다.keep_prob = tf.placeholder(tf.float32) forward lstm 과 backward lstm 에서 사용할 cell을 생성합니다# lstm cell 생성 lstm_fw_cell = tf.nn.rnn_cell.LSTMCell(num_units = n_hidden, state_is_tuple = True) lstm_fw_cell = tf.nn.rnn_cell.DropoutWrapper(lstm_fw_cell, output_keep_prob=keep_prob) lstm_bw_cell = tf.nn.rnn_cell.LSTMCell(num_units = n_hidden, state_is_tuple = True) lstm_bw_cell = tf.nn.rnn_cell.DropoutWrapper(lstm_bw_cell, output_keep_prob=keep_prob) 학습할 모델을 생성합니다outputs,_ = tf.nn.bidirectional_dynamic_rnn(lstm_fw_cell,lstm_bw_cell, X, dtype = tf.float32) 기존의 lstm 과 달리 output 이 2개의 LSTMStateTuple 로 이루어져 있습니다.각 output 에 가중치를 더해서 하나의 output 으로 만들어주는 과정이 필요합니다.여기서 가장 헷갈리는 부분이 transpose 입니다. 왜 output 에 대해서 transpose를 하는 것인지 의문이 들 수 있습니다.tf.nn.bidirectional_dynamic_rnn 문서를 보시면 output 의 default 는 [batch_size,max_time,depth] 라고 나와있습니다.각각 mini batch 의 크기 그리고 time step, hidden state 의 depth 를 의미합니다.우리는 각 데이터마다 마지막 time step 의 결과값을 output 으로 선택해야 합니다.그래야지 전체 step 이 반영된 output 을 얻을 수 있습니다.outputs_fw = tf.transpose(outputs[0], [1,0,2]) outputs_bw = tf.transpose(outputs[1], [1,0,2]) pred = tf.matmul(outputs_fw[-1],w_fw) +tf.matmul(outputs_bw[-1],w_bw) + biases matmul operation 연산 속도를 위해서 다음과 같이 하나의 output 으로 먼저 합치고 전체에 대한 가중치를 주는 것이 더 좋은 방법입니다.outputs_concat = tf.concat([outputs_fw[-1], outputs_bw[-1]], axis=1) pred = tf.matmul(outputs_concat,W) + b 이하 코드는 이전의 tutorial 과 동일합니다.
조회수 1371

페이스북에 처음 투자한 사람은 얼마를 벌었을까?

그투그 #8 페이스북에 처음 투자한 사람은 얼마를 벌었을까? 이제는 너무나 유명한 성공 신화죠. 하버드생 마크 저커버그는 2004년 하버드 학생들을 대상으로 ‘더페이스북’이라는 서비스를 론칭합니다. 그로부터 15년이 지난 지금 페이스북의 기업가치는 5,000억 달러를 훌쩍 넘었습니다. (최근에 주가가 폭락했음에도 불구하고요. 5,000억 달러는 한국 돈으로 566조가 넘습니다.) 마크 저커버그가 세계에서 손꼽는 부자가 된 건 말할 것도 없죠.저커버그야 그렇다 쳐도, 페이스북에 처음 투자한 사람은 얼마나 벌었을까요? 페이스북에 처음 투자한 사람은 페이팔의 공동 창업자 피터 틸입니다. 피터 틸은 2004년, 이제 막 서비스를 시작한 페이스북에 6억 원을 투자하고 지분의 10%를 샀습니다. 60억 원이었던 기업가치는 만 배 가까이 뛰어 566조가 되었죠. 그가 지금까지 페이스북 주식을 얼마나 가지고 있는지는 알 수 없습니다. 만약 지금까지 페이스북 주식을 하나도 팔지 않았다면? 6억은 56조가 되었을 겁니다.하버드생에, 페이팔 창업자라니! 게다가 숫자가 너무 크니 너무 먼 이야기처럼 느껴집니다. 억도 아니고 조 단위라니요……(먼 산) 2004년의 피터 틸까지 갈 것도 없습니다. 2012년 페이스북이 나스닥에 상장한 날, 페이스북의 기업가치는 121조 원이었습니다. 그 날 제가 페이스북 주식을 100만 원어치라도 샀다면, 제 100만 원은 지금 500만 원이 되었겠죠. 이렇게 미래에 성장할 기업을 남들보다 조금만 더 일찍 알아보고 투자한다면 큰 투자수익을 기대할 수 있습니다. 그럼 내 눈앞에 있는 스타트업이 (페이스북만큼은 아니더라도) 성장할 회사인지 아닌지 어떻게 알 수 있을까요?스타트업 투자에는 MAP 말고 MEP이 필요해제가 지금 제 미래도 모르는데 이렇게 많은 기업이 새로 생기고 문을 닫는 시대에 기업의 미래를 어찌 알겠습니까. 그것도 대기업도 아니고 이제 막 생긴 작은 회사들의 미래를요! 정해진 길도, 정답도 없죠. 하지만 MEP을 보면 이 기업이 나아갈 길을 희미하게나마 예측해볼 수 있어요.1) Market: “이 회사의 물건을 팔 시장이 있나요? 있다면 얼마나 큰 가요?”회사는 일반적으로 일정한 가격에 재화나 서비스를 제공하고 그에 따른 수익을 창출합니다. 그래서 가장 중요한 것은 이 회사가 제공하는 제품이나 서비스를 돈을 주고 ‘살’ 고객이 있느냐이죠. 고객이 얼마나 있고, 고객 수는 얼마나 빠르게 늘어나고 있느냐가 바로 여기서 이야기하는 Market(시장)입니다.가장 중요한 것은 시장이 존재하느냐입니다. 애초에 시장이 존재하지 않는다면 사업을 성장시키기는커녕 유지하기도 쉽지 않겠죠. 시장이 존재한다고 해도 성장의 속도는 얼마나 빠른지, 이 시장이 얼마나 커질지 살펴봐야 해요. 시장이 빠르게 커진다는 건 고객이 빠르게 늘어난다는 뜻이므로, 사업도 빠르게 성장할 것을 알 수 있습니다. 반대로 시장의 성장이 더디면, 사업의 성장 속도도 정체되겠죠. 성숙한 산업에 속한 기업이라면 정부기관이나 금융기관에서 발행하는 각종 시장 보고서, 현재의 시장점유율, 매출의 증가 추이, 경쟁사 분석 등을 통해 시장이 얼마나 빠르게 성장할지 전망을 예측해볼 수 있어요. 하지만 새로운 시장을 개척하는 초기 단계의 스타트업은 이러한 방식으로 시장을 예측하기 쉽지 않습니다. 이때 국외 시장을 살펴보는 게 도움이 됩니다. 요즘 세상이 워낙 좋아져서 구글링 몇 번이면 해외 시장 트렌드를 쉽게 찾아볼 수 있습니다. 미국처럼 스타트업 생태계가 활성화된 해외 시장에서 커지고 있는 시장이라면? 우리나라에서도 성장할 가능성이 큽니다. 하지만 이미 해외시장에서 사장된 사업이라면 조심해야 해요. 우리나라에서도 비슷한 어려움을 겪을 수 있으니까요. 2) Player: “이 회사, 시장에서 몇 등인 가요? 대표이사는 누구인가요?”시장의 가능성을 보았다면 이제 그 시장에서 누가 가장 잘하고 있는지 살펴볼 때에요. 시장이 빠르게 성장하고 있는데 내가 투자하려는 회사가 시장 점유율 1위라면? 투자의 긍정적인 신호로 볼 수 있습니다. 하지만 시장이 아무리 빠르게 성장하고 있더라도 이미 시장 점유율이 압도적으로 높은 1, 2위 업체가 있다면 성장에 한계가 있을 수밖에 없지요.아직 시장이 초기 단계라 압도적인 선두 기업이 없다면, 기업을 이끄는 대표이사의 역할이 무엇보다 중요합니다. 투자자는 자체적으로 조사한 자료와 가설을 바탕으로 제시하는 시장의 크기가 논리적으로 얼마나 타당한지 확인해보아야 합니다. 시장의 규모가 큰 것도 중요하지만, 창업가가 왜 그렇게 생각했고 이를 공략할 전략을 어떻게 세웠는지도 굉장히 중요하죠. 결국, 사업은 사람의 일이니까요. 축구에서도 감독의 적절한 전술과 뛰어난 선수들의 실력이 만나야 좋은 결과가 나올 수 있듯, 사업에서도 아무리 분석을 잘하고 전략을 잘 짜도 실행력이 뒷받침되지 않으면 이길 수 없습니다. 대표이사와 주요 임원진이 얼마나 똑똑한지와 더불어 생각을 현실로 옮길 수 있는 실행력이 있는지 살펴봐야 합니다. 그간의 이력과 업계 평판을 통해 그들이 어떻게 살아왔고 어떻게 일하는지 유추해볼 수 있습니다. 이전 사업의 성공 경험이 있다면 더 믿음이 가겠죠?와디즈를 통해 투자를 유치하려는 기업은 반드시 투자설명서에 시장과 경쟁사를 분석한 내용을 기재해야 합니다. 대표이사를 포함한 주요 임원진의 이력과 레퍼런스 체크를 위한 추천사도 필수로 작성해야 하죠. 투자 전에 와디즈 플랫폼에서 이 회사가 시장에서 어떤 위치에 있는지, 대표이사와 주요 임원진은 믿을만한 사람인지 살펴보면 투자 위험을 낮출 수 있습니다. 3) Exit: “이 주식, 언제 돈으로 바꿀 수 있나요?”흔히 싸게 사서, 비싸게 파는 것이 주식투자의 기본이라고 말합니다. 하지만 아직 상장되지 않은 회사의 주식을 살 때는 고려해야 할 점이 하나 더 있습니다. 투자자가 주식을 팔아 투자금을 회수하는 것을 Exit이라고 합니다. 초기기업의 주식은 싸게 살 수 있지만, 회사가 시장에 상장하지 못하고 문을 닫게 되면 아예 팔지 못할 수도 있습니다. Exit을 할 수 없다면 이 기업이 성장해서 기업가치가 올라도 아무 소용이 없겠죠. 그래서 Market, Player와 함께 Exit 계획도 잘 살펴보아야 합니다. 스타트업은 크게 IPO(기업공개)와 M&A(인수합병) 두 가지 방법으로 Exit 할 수 있습니다. 기업공개 (IPO, Initial public offering)는 기업이 처음으로 불특정 다수의 투자자에게 재무내용을 공시하고 회사의 주식을 시장에 등록해 파는 것을 말합니다. 우리가 흔히 알고 있는 상장을 의미하죠. 와디즈에서는 대체로 초기 단계의 회사가 기업가치 10억~50억 사이에 투자를 받습니다. 내가 투자한 회사가 코스닥에 상장한다면? 보통 기업가치가 1,000억 원이 넘어야 코스닥에 상장할 수 있으므로 20~100배의 투자 이익을 얻을 수 있습니다. IPO가 어렵더라도 내가 투자한 회사가 국내외 기업에 인수합병(M&A)되면 투자금을 회수할 수 있습니다. 최근에는 아직 상장하지 못한 회사라도 KSM(한국거래소 스타트업 마켓)에 등록만 되어 있다면 거래할 수 있어졌습니다. 기업이 일정 기간 뒤에 투자자로부터 주식을 사서 현금으로 돌려주는 상환권이 있거나 배당정책을 시행하는 우선주에 투자하면 IPO나 M&A가 아니더라도 현금화할 수 있습니다.Exit 계획이 아무리 거창하더라도 이미 비슷한 제품이나 서비스를 판매하는 회사 중 시장 점유율이 압도적인 기업이 있거나, 판매하려는 제품이나 서비스의 차별점이 명확하지 않다면 한 번 더 생각해보셔야 해요.이 밖에도 흔히 스타트업의 데스밸리라고 불리는 초기의 적자 구간을 버텨낼 자본이 있는지, 자본이 없다면 대표이사가 투자를 받아낼 능력이 있는지, 회사의 매출액은 증가하고 있는지, 증가하고 있다면 증가 폭이 얼마나 큰지 생각해보면 조금 더 피터 틸에 가까워질 수 있습니다. 채권에 투자할 때만큼은 아니더라도 재무제표도 들여다보면 도움이 됩니다.남들이 아직 관심을 두지 않는 회사에 미래를 보고 투자하는 게 이렇게나 복잡해요. 오랜 시간 살펴보고 투자 성공과 실패를 통해 나름의 통찰력이 생겨야겠죠. 지금부터라도 MEP을 펼쳐 두고, 하나하나 살펴보면 그날이 오기를 기다리며 새롭게 커지는 시장에 관심을 가지고, 누가 잘하는지, 어떻게 투자수익을 실현하는지 살펴보세요. 언젠가는 제2의 페이스북을 찾을 수 있을지도 모릅니다.글 김영아와디즈의 막내 투자 콘텐츠 디렉터(CD)입니다. 우리의 작은 돈이 필요한 곳에 모여 세상을 바꾸는 꿈을 꾸고 있어요. 아 물론 돈도 벌면서요. 더 많은 ‘우리’에게 크라우드 펀딩을 알리기 위해 어렵고 복잡한 투자 이야기를 쉽고 재미있게 풀어내는 일을 합니다. 이 글을 읽고 더 궁금한 점이 생겼다면?▶그림 이윤경와디즈의 브랜드 디자이너입니다. 좋은 '사람' 와디즈가 좋은 '브랜드'로 무럭무럭 자라나도록 물을 주고 있어요. 더 많은 사람들의 시작을 돕기를, 그리고 더 재미있는 세상을 만들어 가기를 기대하고 있습니다.#와디즈 #마케터 #마케팅 #브랜드 #브랜딩 #서비스소개 #크라우드펀딩
조회수 1014

​[인스팅터스] 이브의 설계구현팀을 소개합니다(with 연구원 L) 

 안녕하세요 :) EVE의 설계구현팀(Design and Realization) 연구원 L입니다. EVE의 제품들을 고안하고 설계하며 실제 생산까지 구현해내는 일을 맡아 진행중입니다.Q. 설계구현팀이란 ? 설계구현팀은 말 그대로 EVE의 제품들을 직접 설계하고 안전하고 건강하게 구현하는 데 팀의 목적이 있습니다. 진득하게 탐구하고 검증하는 업무죠. 그런 만큼 업무중에 팀원들과 서로 질문하고 확인하는 것이 생활화 되어 있습니다. 하루에 채팅창에 올라오는 질문이 100개가 넘을 때도 많아요. 그만큼 서로의 업무영역을 존중하고 또 믿어주는 분위기입니다.  이렇게 치열한 논의를 통해 얻은 새로운 인사이트나 연구결과를 어떤식으로 제품에 구현할지, 소비자에게 어떤 언어로 전달해야 할지 또한 설계구현팀의 일이랍니다. 약자와 소수자들의 건강과 안전이라는 사회적 가치 또한 제품에 녹여내기 위해 많은 고민을 하죠.Q. 설계구현팀에서 어떤 업무를 하나요 ? 프로젝트에 관련된 각종 문헌들을 검토하고 시험 프로토콜을 설계하는 등 연구 계획을 검증하고 수립하는 일은 모든 연구원들이 기본적으로 하고 있습니다. 더불어 시제품 제조, 시험 진행 등의 실제적 연구 수행과 기술 허가 관련 업무 또한 동시에 진행중이죠. 팀원 개개인이 주도적으로 프로젝트의 AtoZ를 책임지고 진행하기 때문에 개인의 권한이 상대적으로 많이 부여된다는 특징이 있죠. 연구에 있어 책임감과 자유도를 동시에 느낄 수 있답니다. 그러나 타 팀원들과의 교류가 전혀 없는 것은 아니에요. 맡고 있는 프로젝트가 다르더라도 업무적으로는 유기적인 관계이기 때문에, 또한 서로의 전문분야에 대한 조언이나 협력 또한 필요한 부분이 있기 때문에 설계구현팀은 항상 활발한 소통 아래 업무가 진행되고 있어요.Q. EVE에 지원하게 된 계기는 무엇인가요 ? 이전 직장과 대학원 생활을 하면서 많은 부조리를 겪어서 심적으로 많이 지쳐 있었습니다. 회식을 강요하는 경우도 많았고 업무 외적으로도 신경이 곤두서게끔 하는 조직문화 속에서 일했었죠. 또한 면접이나 업무 중에도 성별에 의한 차별을 겪은 바 있어 많은 실망을 했었습니다.  반면 EVE는 채용공고에서부터 '차별없는 사람'을 신규 채용자의 핵심역량 중 하나로 강조하고 있었습니다. 그런 기업의 철학에 매우 큰 호감을 느꼈고 더불어 업무적인 내용도 후의 커리어에 도움이 될 부분이 있다고 판단해 지원하게 되었습니다. 지금은 큰 만족을 느끼며 회사생활을 하고 있어요.Q. 지원자에게 면접에 도움이 될 만한 TIP을 알려주세요 ! 압박면접은 전혀 없어요. 되게 편한 분위기에요. 다만 설계구현팀을 지원하실 분들이 대부분 이공계열 전공일거라 예상하는데, 관심이 많이 갔었거나 본인이 잘 하는 전공분야와 연구분야에 대해 잘 설명할 수 있게끔 준비해오시면 좋을 것 같아요. 어려운 전문용어를 쓰는 것 보다는 본인의 전공과 연구행적이 얼마나 EVE의 제품개발에 도움이 될 수 있을지 쉬운 언어로 표현하는 것이 중요할 듯 합니다. 또한 EVE는 연구개발에 있어 사회적 가치를 지키고 또 구현하는 것이 매우 중요한 브랜드입니다. 본인이 중요하다고 생각하는 사회적 가치를 항상 염두에 두고 면접에 임하시면 좋을 결과가 있을거라 예상합니다.Q. 평소 취미나 업무 외 일상은 ? 퇴근 후 시간이 아주 많아요. EVE는 6시 칼퇴, 저녁있는 삶을 매우 중요하게 생각하거든요. 그래서 집 혹은 영화관에서 시간을 보낼 때도 있고 다이어리를 쓰기 위해 근처 점찍어둔 카페를 방문하기도 합니다. 요새는 개인적인 공부를 하거나 아주 가벼운 정도지만 운동을 시작했어요. Q. 내가 꿈꾸는 Career Path는 ?저는 제가 하는 연구가 EVE의 성장과 정확히 같은 위치로 성장했으면 좋겠어요. 그래서 훗날 제가 하는 연구결과나 프로젝트명을 들었을 때 제 이름이 떠오르는 것은 물론 EVE가 동시에 떠올랐으면 좋겠어요. 지금은 그게 제가 꿈꾸는 커리어의 방향입니다. Q. (정말 솔직하게) 회사의 장단점에 대해 말해주세요 ! 워라밸이 보장된다는 것이 제일 큰 장점인 듯 해요. 또한 업무 역량 강화나 임직원이 성장할 수 있게끔 회사에서 많은 신경을 쓰고 있는 점도 좋아요. 자율적인 업무 분위기를 보장해주고 개인의 선택과 결과에 많은 믿음을 주죠. 또한 역량 강화를 위한 다양한 스터디를 건의할 수도 있고 필요시 다른 직원들과의 협업이나 도움 요청도 매우 합리적이고 민주적인 선에서 이뤄지는 편이에요. 실제로 직원들과 어학, 과학기술동향, 화학공학, 동물권과 관련한 다양한 스터디를 진행중에 있습니다. 학구적이고 성장에 대한 열망이 큰 공동체에서 일할 수 있다는 것이 제게 큰 장점인듯해요. 단점은 자율성이 부여된 만큼 책임감이 크다는 것을 꼽을 수 있겠네요. 양날의 검이라고 할 수 있죠. 그만큼 본인 스스로가 부담감이나 압박을 느낄 때도 많아요. 그렇기 때문에 본인이 일을 찾아서 하지 않는다면 성장도 일처리도 더디게 되고 이것이 눈에 확 띄어요. 그렇게 된다면 자연스레 성취도도 떨어지고 재미를 붙이기 어렵겠죠. 스스로 일을 찾아나서고 본인의 성장을 위해 열망을 갖는 것, 두번째로 자유에 따른 책임을 견디거나 혹은 즐길 수 있다면 EVE는 매우 좋은 회사라고 생각해요.evecondoms.com☘️생식 건강을 가장 먼저 생각하기에, 자연을 닮은 제품을 지향하기에, 소비자의 권리와 기업의 양심을 잃지 않기에 - 그래서 EVE는 성인용품이 아닌섹슈얼 헬스케어(Sexual healthcare) 브랜드입니다. 이브에 대해 더 알아보고 싶으시다면 지금 이브의 홈페이지에 방문해보세요:)Click me!
조회수 703

자신만 모르는 자신의 비밀

녹음된 자신의 목소리를 들어본 사람이라면 알 것이다. 얼마나 어색하고 때론 거북하기까지 한지 말이다.다른 사람의 목소리는 직접 듣는 것과 녹음된 목소리 사이에 큰 차이를 느끼지 못하는 걸 보면 내가 알고 있는 나와 다른이가 인식하는 나와의 간극이 있다는 것을 미루어 짐작 할 수 있다.당연히 목소리 뿐만이 아닐 것이다.심지어 취미로 운동을 배우더라도 내가 의도하며 취하는 나의 자세와 실제 나의 모습 사이에는 꽤 큰 차이가 존재하는 걸 경험한다. 이 차이를 받아들이지 않는다면 일정 수준 이상의 실력이 늘지 않는다. 그 차이를 인식하고 간격을 조정하는 과정이 실력을 늘리는 방법이다.다시 목소리로 가보자.아니 소리가 아니라 언어로 가보자.내가 얘기하는 말들이 남들에게도 그대로 들릴까?소리가 아니라 '의미' 말이다.자신이 말하는 의도가 남들에게도 동일한 의도로 읽혀질까?언어는 우리가 사회생활을 영위하기 위한 가장 기초 도구이기도 하지만, 가장 전문적이고 강력한 무기이기도 하다.업무로 다양한 사람을 만나면서 느끼는 점은 상대방의 전문성은 특정 기술이나 행위를 통해서가 아니라 그 영역을 어떻게 표현하고 묘사하느냐의 차이에서 느껴진다는 것이다. 누구든 10분 정도 이야기해보면 상대방의 내공과 실력을 가늠할 수 있다.거꾸로 이야기하면 자신이 던지는 말 한마디 한마디가 나를 판단하는 중요한 단서라는 것이고, 자신이 전달하려는 의도와 상대방이 인식하는 내용이 일치하지 않다면 이건 매우 곤란한 상황을 야기할 수 있다. 아주 미묘한 차이이지만 그 차이가 누적될 경우에는 인생 자체가 잘 풀리지 않게 된다.주변에 이런 동료가 있었다. 사람이 워낙 좋고 업무에서도 경험도 많은 친구였는데, 직급이 올라갈 수록 조직에서 인정을 받지 못하는 것이었다. 일을 직접 같이 하지 않았던 타 부서 동료였는데, 실제로 같이 일할 기회가 생겨서 업무로  엮이게 되면서 문제가 무엇인지 알 수 있었다.아는 것은 많은데 이걸 명료하게 표현하지 못하는 것이다. 말이 길어지고 꼬리에 꼬리를 물며 부연설명이 계속 되는 것이다. 본인은 친절하게 자세히 얘기하고 있다고 느끼겠지만 듣는 사람은 도무지 무슨 이야기인지 이해가 안되는 것이다.세상 일은 항상 복잡하고 얽혀있게 마련이다. 문제를 해결한다는 것은 복잡한 현상을 명료하게 구분하고 이걸 일 단위로 나누어서 처리하는 과정이다. 말이 꼬인다는 것은 생각이 복잡하다는 것이고, 문제를 정확히 정의하지 못하기 때문에 해결책도 효과적으로 찾아내기 어렵다. 이런 리더와 함께 일하면 삽질의 연속일 가능성이 높아진다.이런 경우 특히 어려운 점은 보고의 순간이다. 요점 정리가 안되고 핵심을 집어내지 못하기 때문에 의사결정자에게 올바른 리포팅이 어렵다.더 심각한 문제는 자신의 문제를 잘 인식하지 못한다는 것이다. 자신은 최선을 다하는데, 상대방이 알아주지 못한다고 생각한다. 나는 충분히 얘기하는데 상대가 이해하지 못한다고 치부한다. 자신의 꾀꼬리같은 목소리가 상대에게 두꺼비같이 들린다는 것을 받아들이지 않는 것이다.사실 남의 얘기가 아닐 것이다.여전히 말은 어려운 영역이다.왜 국어시간이 중요한지 요즘 다시 깨닫게 된다.말은 평생 공부해야 하는 분야인 것 같다.나도 깊이 반성해 본다.
조회수 2604

사운들리 코드 품질 관리 이야기

안녕하세요 "사운들리"입니다 :)오늘은 사운들리의 코드 품질 관리에 대해 이야기 해보려 합니다.몇몇 개발자에게는 지루하고 악몽같은 이야기일 수 있겠네요.제 경우에는 예전에는 이런 품질이라는 단어를 멀리했지만 결국 제가 작성한 코드에 발목을 많이 잡히다 보니, 자연스레 관심을 갖게 되었습니다.일단, 어떤 소프트웨어가 좋은 품질의 소프트웨어일까요?좋은 품질이란? 책에 나올법한 내용을 보면, 아래와 같은 항목을 토대로 소프트웨어 품질을 판단한다고 합니다.ISO/IEC 9126 : Software engineering - Product qualityFunctionality: 명시된 요구사항을 잘 충족했는지Reliability: 명시된 조건과 시간 아래에서 일정 성능을 유지 하는지Usability: 사용하기 위해 어느정도의 노력과 자원이 필요한지Efficiency: 소모 자원과 성능간의 효율Maintainability: 수정하기 위해 어느정도의 노력이 필요한지Portability: 다른 환경에서도 사용 할수 있는지출처: https://en.wikipedia.org/wiki/ISO/IEC_9126 뭔가 복잡해 보이지만, 결국 개발자라면 위의 항목은 누구나 추구하게 되는 가치라고 생각 합니다.그런데 말입니다. 이런 좋은 내용을 마음 속으로만 간직한 채 코드를 작성하면 정말 좋은 소프트웨어를 만들 수 있을까요? 저는 객관적인 방법으로 코드를 평가한다면 좋은 피드백이 될 것이라고 생각합니다. (물론 이 성적표를 남에게 보여주는 것과는 다른 문제에요 ㅎㅎ)어떻게 품질을 체크하는가 소프트웨어의 품질을 체크하는 데에 다양한 방법과 툴이 제시되고 있는데요, 저는 크게 두 가지로 분류 해보겠습니다.유저 입장의 품질: 유저의 요구사항에 맞는 소프트웨어인지 체크개발자 입장의 품질: 내가 지금 이 코드를 의도한 대로 잘 작성하고 있는지 체크 유저 입장의 품질은 언급하지 않아도 중요함을 누구나 알고 있습니다. 이 부분이 만족이 되지 않으면 제품이 아니죠! 그래서 저는 개발자 입장에서 스스로 챙길수 있는 품질을 사운들리는 어떻게 챙겨보고 있는 지 이야기 해보도록 하겠습니다. 실은 제가 개발자 입니다 ㅎㅎ사운들리 개발자의 코드는 아래와 같이 흘러갑니다.<그림1> 사운들리 코드 개발상의 품질 관리 순서도간단히 각 항목을 훑어 보겠습니다.Local Machine 각자 갖고 있는 맥북으로, 다양한 IDE를 사용해 코딩합니다. 그리고 git 을 이용해 commit 하고, github 에 push 하죠.Github push 된 수정사항은 pull request 를 통해 동료에게 알려집니다. 이후 코드리뷰를 통해 merge 하게 됩니다. 코드리뷰는 많은 사람들에 의해 그 중요성이 부각되고 있습니다. 사운들리는 같은 모듈을 만드는 개발자끼리, 그리고 다른 모듈에 영향을 주는 코드일 경우에는 해당 모듈의 개발자도 리뷰를 합니다. 코드리뷰를 통해 다른 사람이 어떤 기능을 작성했는지 보고, 오류도 찾고, 더 좋은 방법이 있으면 공유도 하고, 칭찬도 하고, 훈수도 두고 합니다. 참고로 사운들리는 git-flow 정책에 따라 git branch를 운영하고 있습니다.Jenkins  Github 에 commit 이 등록되면 Jenkins 는 자동으로 빌드를 시작 합니다. Jenkins 는 단순 빌드 성공 실패를 떠나서, 코드 품질에 대한 몇가지 report 를 발생 시킵니다. 아래에서 좀더 자세히 다뤄보겠습니다.SonarQube Jenkins 에서 빌드하면서 SonarQube 에 포함된 분석 기능을 사용하게 됩니다.그렇다면, 코드 품질의 지표는 무엇일까요?Jenkins가 발생시키는 레포트를 통해서 알 수 있는 내용은 아래와 같습니다.코딩 스타일 체크 결과: 작성된 코드가 미리 정의된 코딩 스타일에 맞게 작성되어 있는지?Unit Test 결과: 유닛 테스트 결과 (당연히 전부 pass 해야겠죠)Test code coverage 결과: 테스트 코드가 전체 코드의 몇 % 를 커버 하고 있는지 (우리의 최종목표는.. 60%.. 덜덜덜)정적 분석 결과: 코드를 실행하지는 않지만, 코드 그 자체에서 발생할 수 있는 결함을 찾아줍니다. 이 네 가지 레포트는 객관적 수치를 나타내주기 때문에 일종의 코드 품질 지표로 삼을 수 있습니다. 물론 이 지표만 잘 관리 했다고 해서 좋은 코드를 작성했다고 말할 수는 없습니다. 다만 좋은 코드를 작성하기 위한 기초 중의 기초라고 볼 수 있겠죠 :)품질 체크를 위한 툴(tool)은 개발 언어에 따라 다를 수 있습니다. 사운들리에서는 다양한 언어로 소프트웨어가 작성되어 있습니다. 따라서 언어마다 위의 결과를 얻기 위해서 서로 다른 툴을 사용하고 있습니다. AndroidJavaJavascriptC/C++코딩 스타일checkstylecheckstyle jshintcppcheckUnit testjunitjunitmochagoogletestCode coveragejacococoberturamocha-covgcov정적 분석sonarqubesonarqube sonarqubecppcheck 각 개발자는 위의 네 가지 결과를 얻기 위해서 빌드 시스템에 툴을 포함하여 개발하고 있습니다. 제가 주로 개발하고 있는 java 언어에 해당하는 툴들을 좀 더 자세히 살펴보겠습니다.checkstyle코딩 스타일을 체크 해줍니다. xml 파일로 미리 정의 되어있고요. 매번 빌드할때마다 스타일이 틀린것을 지적해 줍니다.코딩 스타일은 중요합니다. 같이 개발하는 개발자와 코딩 스타일이 같다면 마치 내가 작성한 코드처럼 쉽게 읽을 수 있죠.junitjunit 은 자바 유닛 테스트 프레임워크 입니다. 유닛 테스트 코드를 편하게 작성하게 해주고, 쉽게 테스트 결과를 볼 수 있습니다.유닛 테스트 코드를 작성하면 내가 작성한 모듈을 작은 단위로 테스트 해서, 작은 로직에서 발생하는 시시콜콜한 문제를 방지 할 수 있습니다. 테스트 코드를 작성해서 검증한 부분은 스스로도 신뢰가 갑니다.기능 수정간에 유닛 테스트에서 fail 이 나는 경우가 발생하는데, 모르는 사이에 다른 모듈에 영향을 준 것을 알게 됩니다. 다른 모듈에 모르고 영향을 주게 되면 뒷처리가 어려워지잖아요~coberturacode coverage 를 계산해 주는 툴입니다.유닛 테스트 코드가 실행되면, 작성된 코드의 각 부분을 실행하게 됩니다. cobertura 는 이때 각 코드의 어느부분이 실행되었는지 확인해서 통계를 내줍니다.주로 line coverage / branch coverage 두 지표를 보는데요, line coverage 는 해당 라인이 한번이라도 실행 되면 check 되고, branch coverage 는 각 라인에 있는 조건문을 다 따로 check 합니다. 당연히 branch coverage 를 달성하는게 어렵겠죠?sonarqube소나큐브는 다양한 plug-in 을 통해서 정적 분석을 하고, 시각화를 해주는 툴입니다.사운들리는 주로 정적 분석 용도로만 소나큐브를 사용하고 있습니다. (지원하는 plug-in 을 보면 젠킨스와 기능이 겹치는 부분이 있습니다.)정적분석으로 실제 문제가 되는 부분을 찾는 경우도 있고, minor 한 부분에 대한 지적을 하는 경우도 있습니다. 그러나 이런 minor 한 부분도 꼼꼼하게 잘 챙겨야 좋은 개발자가 된다고 믿고 있습니다.마치며 여기까지 사운들리의 코드 품질 관리에 대해 이야기 해보았습니다. 품질 관리를 해보신 분은 아시겠지만, 이런 툴을 쓰다보면 항상 행복하게 코드 품질을 관리할 수는 없습니다. 매달 세워놓은 목표를 달성하기 위해서 뼈를 깎는 노력으로 테스트 코드를 작성해야 되고, 당장 기능 수정해서 배포해야 되는데, 작성해 둔 테스트 케이스가 Fail 되어 말썽을 부릴 수도 있습니다. 그렇지만 객관적 기준으로 코드 품질을 관리하다보면 어느샌가 큰 노력없이 좋은 코드를 작성하는 개발자가 되지 않을까 생각해 봅니다. 코드 졸면서 막 짜도 style warning 0건/ 정적분석 오류없음 / 테스트 코드 기본 탑재 뭐 이런 개발자 말입니다 ㅎㅎ 다른 개발자분들은 어떻게 자신이 작성한 코드의 품질을 관리하고 있는지 궁금하네요.알고 계신 좋은 방법이 있다면 언제든지 공유 부탁드리겠습니다~!#사운들리 #개발자 #개발 #인사이트 #조언 #개발후기 #후기
조회수 163

사랑해라고 말하기는 너무 어려워

올 한 해 소중한 사람들에게사랑한다는 말을 얼마나 하셨나요?  며칠 전 엄마가 시집 간 언니에게서 문자가 왔는데, 뜬금없이 "엄마 사랑해"라고 적혀있었다고 하더라고요. 사실 저를 포함하여 우리 가족들이 그런 얘기를 스스럼없이 나눌 정도로 다정하고 살가운 성격은 아니거든요. 그래서 "뭐여? 웬일이래?"라고 반응했었는데요. 그리고 며칠 뒤 드라마를 재방송으로 보다가 그제야 언니가 보낸 문자의 이유를 알아냈습니다. 출처 :JTBC  http://vod.jtbc.joins.com/player/embed/VO10259432얼마 전 종영한 뷰티 인사이드라는 드라마의 한 장면인데요. 여주인공이 죽어가는 엄마에게 늦기 전에 말해야 한다며 매 순간마다 "엄마 사랑해"라고 말하는 장면들이 이어졌어요. 언니가 이걸 보고 문자를 보냈나 보다 싶더라고요. 엄마랑 둘이 같이 보고 있는데 어찌나 눈물이 나던지... 눈물을 폭풍같이 흘리면서 지켜봤답니다. 그런데 저는 그걸 보면서도 엄마한테 사랑한다고 그 말 한마디를 못했네요.. 바보같이.사. 랑. 해. 대체 그 말이 뭐라고. 왜 그 말만 하려고 하면 그렇게 간지럽고 어색하고 쑥스럽고 그런 걸까요. (저만 그런가요) 그냥 하면 되는데 싶지만, 사실 말이 쉽지 그냥 되는 것은 아무것도 없더라고요. 그래서 저는 고민 고민 끝에 말로 하기엔 쑥스러운 것들을 좀 더 부드럽게 시도할 수 있는 방법을 여러 가지로 연구를 해봤습니다.그럼 말로 하지 말고글로 써요!첫 번째 방법. 사랑해 고백카드 스트레스컴퍼니샵에서 절찬리 판매중 고백카드는 말로 하기 힘든 말들이 카드에 이미 적혀있기 때문에, 이유만 써서 마음을 전할 수 있게 만든 제품이에요. 사랑해 카드는 열자마자 사랑해!라고 크게 쓰여있고요. 미안해 카드는 미안해! 고마워 카드는 고마워!라고 쓰여있어요. 카드를 쫙 펼치면 내가 당신을 사랑할 수밖에 없는 이유, 미안해서 맘에 걸렸었던 일들, 항상 고맙다고 말하고 싶었던 이유들을 세 가지씩 적을 수 있게 되어있지요. 말로 할 수 없다면, 글로 표현해보라는 저의 의도를 담은 상품입니다. 얼마 전 IBK은행에서 직원들을 위해 고마워 카드와 다짐카드 총 14,400장을 구매해주셔서 납품 완료했는데요. 저의 의도가 기업에도 통한 것 같아서 정말 뿌듯했답니다. 감동의 눈물 쥬르륵.     그런데 나는말로 하는 것도글로 쓰는 것도 힘들다면?그럼 몸으로 해봐요!두 번째 방법. 사랑해 티셔츠  초상권은 소중합니다. 민망하니까 무단전재 불펌금지.  사랑해 티셔츠를 입고 가만히 서있으면 랑만 보이지만 머리 위로 하트 모양을 그리는 순간 사. 랑. 해. 가 모두 보이는 기적이 나타납니다!! 사랑해 티셔츠는 3년 전에 컨셉을 구상하고 프로토타입을 만들어서 영상과 사진으로만 남겨둔 상품입니다. 공식 명칭은 '공손한 티셔츠'로 미안해, 고마워, 사랑해에 맞는 자세를 취하면 그에 맞는 한글 단어가 보이는 제품인데요. 유아들에게는 한글과 자세를 함께 교육할 수 있으며, 외국인들에게는 한글의 의미를 위트 있게 소개할 수 있는 유머러스하고 기발한 한글 상품이지요. 하하(자화자찬!!)  이 상품에 대한 주위 반응은 역시 "정말 신선하다"와 "컨셉은 좋으나..."와 같은 극과 극의 반응을 보여서, 제작을 보류해두었지만, 여력이 생기면 꼭 만들어볼 생각입니다. 원하시는 분들이 있다면 주문제작받겠습니다~ 자매품으로 미안해, 고마워 티셔츠가 있습니다. 열연을 펼쳐준 친구 아들에게 고마움을 표합니다.그러나나는 말도 못 하겠고글도 못쓰겠고몸으로도 표현 못하겠다면딱하나 남은 방법이 있습니다.바로발로 하는 겁니다!!세 번째 방법. 사랑해 수면양말네, 그래요. 당신이 생각하는 그 발 맞습니다.겨울만 되면 발이 시려서 스트레스를 받는 나에게, 그리고 당신에게 보내는 선물. 너의 발바닥까지 사랑해 수면양말입니다. 저희 어머니께서는 작년에 암수술받으신 이후부터 계절에 상관없이 손발이 찌르는 것 같이 시리다고 하시거든요. 그래서 엄마와 함께 따뜻하게 신으려고 좋은 실로 국내 공장에서 꼼꼼하게 제작했습니다. 항상 발이 시린 저는 수면바지에 수면양말까지 장착을 해도 발목 부분이 비어서 항상 불편했던 점을 개선하기 위해 발목 위 길이를 더 길게 제작했고요. 발바닥에 미끄럼 방지 가공까지 넣어서 어르신들이 신어도 안전하게 만들었습니다.연말연시사랑하는 부모님친구들에게 선물하기에정말 안성맞춤이죠?   그래서 저는 상품을 나오자마자 가장 먼저 어머니께 선물했는데요. 둘이 함께 양말을 신고 인증샷을 찍었습니다. 이렇게라도 제 마음을 전할 수 있어서 다행이다 싶었어요. 헤헤 엄마와 함께 신고 찍은 인증샷!여러분은이 세 가지 방법 중에서어떤 방법이 제일 맘에 드시나요?  제가 만드는 상품들은 제가 스트레스를 받거나, 다른 사람들이 스트레스받는 모습을 보고 어떻게 하면 그 문제를 해결할 수 있을까 하는 고민에서부터 시작됩니다. 어떻게 하면 남들과 다르고, 또 재미있게 문제를 해결할 수 있을까 하는 고민들이 스트레스컴퍼니만의 상품을 만들 수 있게 도와주는 것 같습니다. :-)다른 더 기발한 방법이 있다면, 제게 꼭 귀띔해주시고요. 딱히 다른 방법이 떠오르지 않는다 하면, 올해가 가기 전에 당신의 발바닥까지 사랑한다고, 수면양말로 당신의 마음을 '툭' 고백해보시는 건 어떨까요? 선물 받는 분이 분명 좋아할 거예요. 제가 장담하겠습니다!(아니면 저를 찾아오세요. 허헣)  있잖아, 나는 너의 발바닥까지 사랑해!너의 발바닥까지 사랑해 수면양말은 현재 와디즈에서 펀딩 중에 있습니다. 아래 링크를 클릭하세요! https://www.wadiz.kr/web/campaign/detail/26682스트레스컴퍼니의 모든 상품은 스트레스컴퍼니샵에서 구매 가능합니다.매달 마음을 나누는 모임을 진행합니다. 함께해요~ 새소식은 페이스북과 인스타가 제일 빠릅니다. ⓒ스트레스컴퍼니 - 무단 전재-재배포 금지#스트레스컴퍼니 #심리스타트업 #스트레스관리 #서비스소개 #제품소개

기업문화 엿볼 때, 더팀스

로그인

/