스토리 홈

인터뷰

피드

뉴스

조회수 1185

PM, 대충하면 큰일납니다 (1/2)

PM, 대충하면 큰일납니다.PM(Project Manager)으로 전향하게 된 이유는 순전히 주변의 걱정 때문이었다. 2000년대 초반, 개발자들 사이에선 이런 말이 밥 먹듯이 오고 갔다.“여자 개발자는 서른이 넘으면 설 자리가 없대. 그래서 다른 업무를 찾아야 한다더라. 그리고, 네 연차 정도면 무슨 개발이야, 관리를 해야지! 안 그래?”요즘 같은 시대엔 말도 안 되는 소리지만 그 당시엔 별다른 선택을 할 수가 없었다. 나 역시 선배들의 조언에 따라 PM으로 전향했고, PM으로 일한지 7년이 흘렀다.그동안 ‘PM의 역할이 무엇이냐’는 질문도 많이 받았다. 누군가는 “PM은 꿀보직같아. 개발자한테 다 요청하면 되잖아. 나중엔 다 했는지 체크 정도만 하면 되고”와 같은 말도 했었다. (만약 지금 그런 말을 듣는다면 정성껏 나선환을 날릴지도.) 게다가 의외로 많은 직원들이 PM에 대해서 제대로 알지 못하는 경우도 많았다. 그런 의미에서 ‘프로젝트 관리’를 주제로 글을 쓰고자 한다. 프로젝트 관리자는 뭘 하지?국제 프로젝트 관리 협회(PMI, Project Management Institute)의 ‘프로젝트 관리에 대한 지식 체계 - PMBOK(Project Management Body Of Knowledge)’에서는 프로젝트를 다음과 같이 분류한다. 통합관리 (Project Integration Management)범위관리 (Project Scope Management)일정관리 (Project Time Management)원가관리 (Project Cost Management)품질관리 (Project Quality Management)인적자원관리 (Project Human Resource Management)의사소통관리 (Project Communications Management)위험관리 (Project Risk Management)조달관리 (Project Procurement Management) 1.통합관리 프로젝트를 시작하기 전, 프로젝트 계획서 작성은 필수다. 프로젝트 실행을 위한 가이드 문서이기도 하다. 하지만 계획은 계획일 뿐! 문서대로 진행되는 프로젝트는 하나도 없다. 변경되는 계획은 변경 관리를 통해 통합된 변경 통제의 결과로 프로젝트 계획서가 수정된다. 이 일련의 과정이 통합관리다.통합관리를 잘할 수 있는 TIP 프로젝트 계획서에서 변경되는 부분을 놓치지 말자. 계획과 실행은 항상 일치해야 한다. 또 완료 보고 시에 해당 문서의 내용 중 얼마나 실제로 적용되었는지가 성과 판단의 기준이 된다. 그렇기 때문에 언제, 누구에 의해 요건이 변경되었는지, 또 어떤 내용으로 변경되었는지 명확하게 관리해야 한다. (그렇지 않으면 독박은 자네 몫)2.범위관리 프로젝트의 범위를 정의하는 업무다. 그러나 앞서 말했듯이 프로젝트의 요건은 수시로 변경된다. 요건이 바뀌면 결국 범위도 바뀌기 마련인데 우리의 클라이언트들은 신경을 쓰지 않는다. 이때 PM이 YES MAN이면 개발자들은 책상 옆에 라꾸라꾸를 펼치고 집과 멀어진다. 그렇다고 무작정 “NO”를 외칠 수도 없는 노릇이다. 자칫 잘못하면 클라이언트와 불편한 사이가 될 수도 있고, 프로젝트를 진행하는데 어려움이 생길 수도 있기 때문이다.범위 조율을 잘할 수 있는 TIPPM이 요건을 모르고 클라이언트와 조율을 하는 건 있을 수 없는 일! 최소한 클라이언트보다 많은 것을 알아야 한다. 이것은 신뢰와도 연결된다. 요건을 주는 사람보다 프로젝트를 진행하는 사람이 범위를 더 모른다면 그 누구도 일을 맡기고 싶어하지 않을 것이다. 아무 근거 없이 ‘날 믿어 달라’는 구구절절한 부탁이 아닌, 전문성을 갖춘 모습을 보여준다면 신뢰가 쌓이는 건 당연한 일이다. 그러므로 프로젝트를 진행하기 전, 해당 산업 분야를 숙지하면 회의가 더욱 수월해질 것이다. 3.일정관리범위관리에서 정의한 요건을 토대로 일정을 산출한다. 하지만 빡빡한 일정은 시간에 쫓기다 중요한 업무를 놓칠 수도 있다. 반면 널널한 일정은 비용 문제가 추가적으로 발생한다. 그러므로 예외 변수들을 고려하면서 적당한 일정을 산정하는 건 PM의 큰 숙제이기도 하다.일정관리를 잘할 수 있는 TIP프로젝트를 진행하는 팀원들과 유대관계를 잘 쌓자. 프로젝트는 혼자 하는 일이 아니기 때문에 일정 역시 함께 산정하고, 신뢰를 바탕으로 진행해야 위험(Risk)을 줄일 수 있다.4.원가관리인력, 장비, 도구 등 자원에 대한 기획부터 비용에 대한 통제까지 많은 부분을 관리해야 한다. 원가관리는 프로젝트 전반에 걸쳐 있다.원가관리를 잘할 수 있는 TIP사스케의 사륜안처럼 프로젝트 전체를 볼 수 있는 눈이 필요하다. 인력에 따라, 일정에 따라 자원을 어떻게 사용할지 등 프로젝트의 내용을 파악하지 못하면 당연히 자원 기획을 할 수 없다. 그러므로 자원 기획은 마지막에 진행하는 것이 좋다.5.품질관리QA(Quality Assurance)는 어떤 제품의 기획부터 배포까지 전 과정의 품질을 관리한다. 단순 Test보다 상위의 개념이지만 QA 직무를 두고 단순 Test하는 업종이라 생각하는 경우도 종종 있다. 하지만 QA는 사용자에게 서비스를 선보이기 전, 마지막으로 점검하는 단계이기 때문에 높은 판단력이 필요한 직종이다.품질관리를 잘할 수 있는 TIP반복, 반복, 또 반복! 진행하는 프로젝트의 기획부터 배포까지 모두 알고 있는 동시에 하나의 프로세스를 여러 번 반복해서 품질 검증을 진행한다.프로젝트는 혼자 하는 게 아니다프로젝트는 원활한 커뮤니케이션이 이루어져야 완성된다. 여태까지의 경험으로 말하자면 상대방을 업무적으로만 대하지 않고, 사람 대 사람으로 대했을 때 서로를 존중하면서 프로젝트를 진행할 수 있었다. (물론 성공 확률도 높아졌다.) 결국 PM은 프로젝트의 구성원 모두가 하나의 목표를 가질 수 있도록 가이드를 제공할 수 있어야 한다고 생각한다.2화에 계속.글문경민 팀장 | R&D PM팀moonkm@brandi.co.kr브랜디, 오직 예쁜 옷만#브랜디 #기업문화 #조직문화 #업무환경 #인사이트 #경험공유
조회수 3401

손정의가 창업가들에게 당부하는 41가지의 말.

1. 일자리 찾는 것에 급급해하지 말고 인생 전반에 걸쳐 무엇을 추구할지 머리가 터질 정도로 깊이 생각해서 '오를 산'을 결정해보아라.2. 비전이라는 것은 각오를 단단히 다지고 많은 사람들을 끌어들여 일을 이룬다.3. 도망갈 길을 끊고서라도 열정을 바칠 용기를 가져라.4. 나는 죽을 각오를 하고 열심히 했다.5. 사람들이 고마워하는 일을 하고 싶다. 그렇게 해야만 한다.6. 후세에 이름이 남지 않는다고 하더라도 많은 사람들을 기쁘게 하는 것이 더 중요하다.7. 야후BB를 시작했을 때, 주말,휴일,명절,설 모두 반납했다.8. 젊은 시절밖에 할 수 없는 이 경험이 그 후의 내 직업 인생을 바꿔주었다.반드시 많은 사람들에게 도움이 되는 일이라고 생각되는 일을 만났을 때는 목숨을 걸고 돌진해야 한다. 젊으니까 덤비면서 할 수 있는 일이 있다.9. 한 가지 목표를 정했으면 다른 것은 신경쓰지 마라. 정말 중요한 것이 무엇인지 명확히해라.10. 옳다고 생각한 일은 반드시 지켜라.11. 먼 훗날의 일보다 눈 앞의 일을 말하는 사람은 평생 눈 앞의 문제에서 못 벗어난다.12. 젊은 시절에 꼭 해야할 일이 있다.젊을 때 해야할 일을 하지 않으면 순식간에 시간은 간다.13. 아무런 연관이 없을 것 같은 것들을 연결해라, 패턴화 시키고, 파고들어라.14. 지혜는 짜면 짤수록 나온다. 진정한 문제는 스스로 정의하는 것이다.15. 열정이 사람을 부른다. 학생 신분이었지만 그 분야의 전문가인 교수를 아르바이트로 고용하고 임금을 지불하겠다는 생각을 했다.16. 소프트뱅크를 만들었을 때도 일류 인재를 모으는 일에 고심했다.더더욱 자신의 꿈을 이야기하는 것이 중요하다. 사람의 마음을 움직이고 끌어들이기 위해서는 열정이 최대의 무기다. 자신의 꿈을 이야기 할 수 있는 힘을 길러라.17. 귤 상자에 올라가 2명의 아르바이트 사원 앞에서 말했다. 사업가를 목표로 하고 있는 이상 1,000억 5,000억은 대단한 것이 아닙니다. 1조,2조라는 수 단위로 일을 하는 규모의 회사가 될 것입니다. 그리고 그 둘은 나갔다.18. 30대때 주식상장, 그리고 미국 진출에 승부를 걸었다. 상장 뒤 시가총액 2조 4,000억이 되었다.19. 오기를 부리지마라. 철퇴의 중요함을 이해하고 있는지에 따라 생존이 갈린다.20. 싸움에서 가장 중요한 것은 시작하는 타이밍과 퇴각하는 타이밍이다.21. 철수할 때에는 승부에 임할 때보다 10배의 용기가 더 필요하다는 것이다.22.  맨 처음에는 비록 근거가 부족해도 좋으니 우선은 자신이 크게 성공하는 이미지를 그린다.23. 상상할 수 있는 것은 반드시 실현할 수 있다. 노력은 그 다음에 해도 된다.24. 료마처럼 온 몸이 갈기갈기 찢겨질 정도로 열심히 일해보고 싶다는 생각이 강렬하게 싹텄다. 금전욕 같은게 아니라 100만명, 1,000만명을 위해 공헌하고 싶었다. 25. 소프트뱅크의 경우에는 전파를 개선한다는 것이 꼭 해야할 일이였다. 98%에서 99% , 단 1%를 늘리기 위해 기지국을 배로 늘린 것이다. 고작 한 두명의 고객을 추가로 확보하기 위해 몇 백만엔을 썼다.변명하지 말고 굳은 결심으로 성의를 보이고 할 수 있는 일은 최선을 다해서 하는 것. 그것이 고객에게 할 수 있는 유일한 일이다.26. 아침에 일어나는 것도 즐거워서 견딜 수가 없는 그런 마음을 가져야한다. 단 한번 밖에 없는 인생을 낭비하지 말고 소중하게 여겼으면 좋겠다.27. 그날 하루에 얼마나 충실했냐는 목표를 어떻게 세웠느냐에 달려있다.28. 나의 사업 결정은 적어도 50년 간 질리지 않고 설레면서 일할 수 있는 것이다.29. 뜻을 먼저 세워야 된다. 그러면 50% 이상이 해결된 것이다. 뜻이란 개인적인 바람을 도모하는 것을 뛰어넘는 장대한 목표다.30. 생각이 통하는 동료가 있다는 것은 매우 중요하다. 뜻을 공유할 수 있는 동료를 몇 명 만들 수 있는가?31. 한시라도 빨리 리콜하고 철저하게 정보를 공개해야 한다. 무언가를 숨기고 있다고 생각하게 되면 끝이다.32. 위기에 빠졌을 때 일수록 믿어주는 사람을 저버리지말고 보답하겠다는 마음을 가지고 정면으로 부딪혀야 한다.32. 용기는 처음부터 가지고 있는 것이 아니라 무언가를 간절히 지키고 싶다는 책임감에서 나온다.33. 머리가 터질 정도로 생각해라.34. 내일을 읽고 오늘을 일하라.35. 의사결정의 속도가 중요하다.36. 병원에 입원해있는 동안 꽤 많은 책을 읽었다.약 4,000권 가량. 이름을 남기지 못하더라도 100년, 200년 후의 사람들에게 환영받는 일에 인생을 바치고 싶다는 생각을 했다.37. 꿈꾸지 않는 자, 행복을 바라지말라.38. 인간의 최대행복과 최대슬픔에 공감하라.39. 인생의 명제란 사람들에게 행복을 주는 것이다.40. 나 스스로 감동한 일이 아니면 다른 사람을 감동시킬 수 없다.41. 내가 살고 있는 곳을 미래를 위해 사람들에게 도움이 되고 싶은 일을 하고 싶다. 이런 열정적이고 가치 있는 생각으로 뜻을 높이 가졌으면 한다. 가장 중요한 것은 한 명이라도 더 많은 사람에게 고맙다는 인사를 받는 것이다. 한 명이라도 더 많은 사람에게 고맙다는 인사를 받을 수 있게 하라.참조)http://hellohyunil.tistory.com/m/601PPL. 페오펫에서는 위대한 마케터를(CMO) / 위대한 디자이너(CMO) / 위대한 개발자(CTO)를 모시고 있습니다. 커피 한잔 하실 분은 연락주세요.#페오펫 #peopet #아이디어기업 #기업문화 #목표 #비전 #각오 #손정의 #인사이트
조회수 931

똥바크 UX 디자인 이야기

나는 바크 (Bark)라는 이름의 개의 대화법을 적용하여 주변의 서로 모르는 사람들과 소소한 소통이 가능하게 만들어주는 위치기반 채팅 서비스를 운영하고 있다. 이에대한 디자인 이야기는 예전에 쓴 '대화의 장벽을 허무는 UX' 글을 참고하시길 바란다. 오늘 글에서는 이번에 새롭게 런칭한 신기능 이면에 고민했었던 UX 기획 이야기를 좀 풀어보고자 한다.소셜미디어 메인 인터페이스의 양대산맥: 타임라인 VS 카드스와이프개인적인 의견이지만, 세상의 수백가지의 소셜미디어 서비스들의 메인인터페이스는 사실 페이스북으로 대표되는 타임라인 방식과 틴터로 대표되는 카드스와이프 방식으로 양분된다고 생각한다. 타임라인 방식이란, 유저의 메인화면에 사람들이 포스팅한 컨텐츠를 순차적으로 (Chronological Order) 아래로 스크롤 하며 보여주는 방식을 말하고, 카드스와이프 방식이란 컨텐츠를 하나씩 메인화면에 띄워주고, 유저는 제안된 컨텐츠를 왼쪽/오른쪽으로 스와이프 하는 방식으로 컨텐츠를 소비하는 인터페이스를 말한다.유저 입장에서 위 인터페이스가 어떤 의미가 있는지 우선 생각해 보자. 우선 타임라인 방식의 경우 유저의 컨텐츠 소비 편의성에 초점이 맞춰져 있다. 유저가 수 많은 소셜미디어 계정에서 올라오는 컨텐츠를 직접 찾아다닐 필요 없이 그냥 메인 피드에서 순차적으로 보여지는 컨텐츠를 스크롤 쭉쭉 내려가며 소비하는, 마치 잘 차려진 밥상에서 내가 먹을 음식만 젓가락으로 콕콕 찝어가며 소비하는 방식이다. 옛날 원조 소셜미디어인 싸이월드나 마이스페이스와 비교해보면 이 타임라인 방식이 얼마나 편리한지 이해할 수 있다.싸이월드는 유저가 일일이 게정을 들어가서 컨텐츠를 소비하는 방식이였다. (사진 출처 - http://zodiacsword.tistory.com/211)반면, 틴더로 대표되는 카드 스와이프 방식은 타임라인 방식과 싸이월드같이 계정에 일일이 들어가서 컨텐츠를 소비하던 방식의 장점을 적절하게 섞은 방식이다. 타임라인 방식의 경우 발생하는 가장 큰 문제는 크게 1) 차려진 밥상에 음식이 너무 많을 경우 모든 음식을 맛보기가 힘들다는 것과 2) 계정보다는 컨텐츠가 부각되어 사람들을 '소셜라이징'하게 만들기 보다는 '수동적 소비'만 하게 만든다는 단점이 있다. (실제로 페이스북 계정의 45% 이상이 Lurkers, 즉 컨텐츠 업로드 없이 수동적으로 남의 컨텐츠만 쳐다보고 있는 사람들이라는 통계도 있다.)페이스북의 45%는 컨텐츠 공유 없이 타인의 컨텐츠만 소비하는 사람들이라고 한다.카드 스와이프 방식은 위에 언급된 단점을 절묘하게 개선하면서도 여전히 유저 편의성을 유지시키는 방식이라고 할 수 있다. 즉, 유저는 여전히 타임라인 방식 처럼 다른 사람 계정을 일일이 들여다 볼 필요 없이 잘 차려진 밥상을 수동적으로 소비만 하면 된다. 하지만 밥상에 있는 음식을 하나씩 내 앞에 들이밀어줌으로써 내가 직접 맛보면서 음식을 계속 먹을지, 버릴지를 결정할 수 있게 해 주고, 더 나아가 그 음식이 맘에 들었을 때 음식을 만든 사람과 추가적인 교류를 유도하는 방식인 것이다.위치기반+즉시성에 맞는 인터페이스란바크 앱이 유저에게 전달하고자 하는 핵심 경험은 '언제 어디서나 지금 바로 내 주변과의 교류'라고 할 수 있다. 즉, 바크에서 컨텐츠가 소비되는 방식의 핵심 성공요인은 (Key Success Factors) '지금 내 주변'이라는 위치기반의 맥락 조성, 그리고 '즉시 주변 사람들과 감정을 교류'한다는 컨텐츠 공유-소비의 즉시성 담보 이 두개에 모든게 달려있다고 해도 과언이 아니다. '개처럼 서로 짖다'의 UX 이면에는 사실 저 두가지 KSF를 달성하기 위한 중요한 목적이 있는 것이다. 이 목적을 달성하기 위한 새로운 컨텐츠 공유 인터페이스로 위에서 언급했던 타임라인 방식과 카드 스와이프 방식은 모두 다음과 같은 이유로 부적합하다.1) 즉시성이란 몇시간만 지나면 이미 즉시성의 가치를 잃고 만다.타임라인 방식은 스크롤을 아래로 조금만 내려가도 (카드스와입 방식은 스와입을 옆으로 10번만 해도) 이미 반나절 전, 어제, 심지어 몇일 전 컨텐츠 까지 쭉쭉 읽어 내려가기 마련이다. 이미 몇 시간 전의 일도 가물가물 해질 정도로 바쁜 세상에서 살아가는 현대인들에게 타임라인 방식으로는 즉시성이 담보된 컨텐츠를 교환한다는 목표를 달성시키기 어렵다. Short-term memory 연구로 유명한 Atkinson and Shiffrin의 논문에도 인간의 단기 기억 용량은 최대 30초를 넘기지 않는다고 나와있다. 즉, 이미 30초만 지나가도 해당 기억은 working-memory에서 long-term memory영역으로 넘어가거나 사라진다는 뜻이다. 물론 타인의 컨텐츠가 몇시간 전에 형성된거랑 본인의 단기기억과는 아무런 관련이 없는 얘기지만, 얘기하고자 하는 바는 인간의 '즉시성'이란 그만큼 하루, 이틀의 단위가 아닌 한시간, 두시간의 아주 짧은 term에 해당하는 영역이라는 걸 강조하기 위함이다.2) 밥상을 차려주는 순간 이미 위치기반의 맥락을 잃고 만다.타임라인이던 카드스와입 방식이던간에 대부분의 소셜미디어 메인화면은 자체 알고리즘에 의해 유저에게 컨텐츠 밥상을 차려주기 마련이다. 아무리 내 근처에 있는 컨텐츠를 위치순으로 정렬해 준다 하더라도 이미 밥상을 차려줘서 보여주는 순간 위치기반의 맥락을 형성시키기 매우 어렵다고 생각한다. 이유는 두가지가 있는데, 첫째, 위치 기반이란 '나'라는 객체와 '주변'이라는 객체들이 한 공간영역에서 구분 가능해야 형성되는 개념인데 타임라인, 카드스와입 방식 모두 '나'라는 객체는 생략해 버리기 마련이다. 또한 '주변'을 느끼게 만드는 인터페이스는 그저 필터에 '가까운 순'이라는 버튼 하나가 다이다. 유저가 그 '가까운 순'이라는 필터를 지속적으로 기억해주고 있지 않는 한 스크롤을 조금만 내려가도 이게 '위치기반 이구나' 하는 맥락 형성은 실패하게 된다.이런 이유로 바크에는 타임라인이나 카드스와입과는 다른 새로운 방식의 컨텐츠 소비 인터페이스 고안이 필요하게 되었다.Locale Mapping과 개의 대화법과의 결합위치기반 맥락을 가장 잘 살려줄 수 있는 인터페이스는 사실 우리에게 이미 너무나도 친숙한 인터페이스가 존재한다. 바로 지도기반 (Locale Mapping) 인터페이스 이다. 유저에게 유저 객체와 주변객체를 공간영역에 뿌려주는 지도기반만큼 위치기반 맥락을 잘 전달할 수 있는 인터페이스는 존재하지 않는다. 문제는, 이 로케일맵핑 방식을 소셜미디어의 컨텐츠 공유 방식과 적절히 결합시키는 것인데, 이게 쉬운 과제는 아니다. 이미 Periscope라는 라이브스트리밍 앱에서 지도기반의 스트리밍 인터페이스를 구현한 이력이 있지만, 유저 편의성 부분에서 단점이 많아 지금은 타임라인 방식과 지도기반을 병행해서 보여주고 있고, 타임라인 방식이 메인 인터페이스로 변화되가고 있다.유저가 직접 포인팅 된 컨텐츠를 클릭해서 들어갔다 나갔다를 반복해야 하는 로케일 맵핑은 소셜미디어 컨텐츠 공유 인터페이스로서 유저에게 절대로 편리한 방식이 아니고, 이를 아무리 변형한다 해도 기본 골격상 유저 편의성을 담보하기 쉬운 방식이 아니기 때문에, 우리는 아예 방향성을 바꿔서 유저로 하여금 이런 불편함을 감안해서라도 로케일 맵핑방식이 당연하다고 여기게끔 하는 스토리를 부여하고, 이를 컨벤션화 하는 방법을 선택했다. 바로, '개의 대화법'과의 결합이다.바크에서는 이미 모든 유저가 '개의 대화법'으로 소통한다는게 메인 컨벤션이 되어 있다. 개가 아무 맥락없이 서로 짖어대고 단타성 짙은 커뮤니케이션을 하듯이 바크에서도 모두가 뜬금없이 서로 짖어대고 아무 맥락없는 소소한 대화들을 (속된말로) 지껄여 대는 그런 공간이 형성되어 있는 것이다. 여기에서 더 나아가 우리는 '개가 메시지를 남기는 방법'에 대한 고민을 해 보기 시작했다. 즉, 서로 짖는게 사람의 경우 서로 실시간 대화를 나누는 행위라면, 사람들이 뭔가 쪽지를 남기거나 메시지를 전달하기 위해 하는 행위가 개의 경우 뭐가 있을까를 고민하다가 영감을 얻은 행위가 바로 개의 '똥을 누는' 배변행위이다.알다시피, 개는 똥/오줌과 같은 배변행위를 통해 본인의 메시지를 해당 장소에 남겨놓고, 다른 개들은 그 냄새를 통해 '이건 내 영역이다,' '나 오늘 참 행복하오' 등등의 메시지를 읽는다. (물론 생물학적으로 정확한 표현은 아니다. 그저 인간의 레벨에서 해석하기에 저런 행위를 할 것이라는 추측 정도이다.)이 행위를 인터페이스화 하기 위해 구현하게 된 것이 바로 '드랍 바크'라는 신기능이다. 유저는 마치 개가 현재 위치에 똥을 누듯이, 본인의 현재 감정이나 자랑하고 싶은 내용을 현재 위치에 떨어뜨려 놓는다. 이렇게 떨어뜨려진 '똥'들이 로케일 맵핑방식으로 내 주변에 형성되고, 메인화면에서 저렇게 '똥'으로 개체화된 컨텐츠로 보여준다. 이 '똥'을 열면 유저가 남긴 이미지+텍스트가 조합된 메시지가 보여지고, 유저들은 이 메시지에 대해 나도 같이 신난다는 의미의 'Happy,' 본 메시지가 별로거나 불쾌하다는 의미의 'Angry'를 사정없이 눌러댐으로써 본인의 감정을 표현할 수 있다.또한, 앞서 언급한 '즉시성'을 강조하기 위해 모든 메시지는 기본 4시간이 지나면 사라지는 휘발성 메시지로 디자인 했다. 위의 오른쪽 화면 중간에 있는 바가 현재 그 포스트의 남은 수명을 나타내는 바 이고, 4시간이 지나면 그 메시지는 맵에서 사라지게 된다. 마치 똥이 식어서 냄새가 사라지는 것 (또는 냄새가 약해져서 메시지로서 가치가 떨어지는 것)과 같은 것이다. 여기에 재미요소를 주기 위해 다른 유저들이 'happy'보트를 한번 할때 마다 포스트의 수명이 1분씩, 'angry'보트를 할때마다 1분씩 감소하도록 설계했다. 본 인터페이스의 더 자세한 내용은 다음 동영상을 참고해 주시길 바란다.https://www.youtube.com/watch?v=jAFZ5Upu_7k<iframe width="700.000000" height="394.000000" src="//www.youtube.com/embed/jAFZ5Upu_7k" frameborder="0" allowfullscreen="">드랍바크 소개영상안드로이드까지 정식 오픈한지 약 일주일이 안된 지금 하루 약 30% 이상의 활성유저들이 열심히 똥바크를 싸고 있다. 물론 모든 유저가 사용중인 기능도, 모든 사용자가 만족하고 있는 기능은 아니지만 현재까지 반응은 매우 긍정적인 편이고, 앱 내에서 뭔가 소비할 컨텐츠가 생겼다는 점, 그리고 '개의 대화법'이라는 앱의 컨셉을 더욱 공고히 하는 인터페이스라는 점에서 향후 앱의 체류시간 및 리텐션율을 높이는데 긍정적인 역할을 할 것으로 예상하고 있다.글쓴이는 스팀헌트 (Steemhunt) 라는 스팀 블록체인 기반 제품 큐레이션 플랫폼의 Co-founder 및 디자이너 입니다. 비즈니스를 전공하고 대기업에서 기획자로 일하다가 스타트업을 창업하고 본업을 디자이너로 전향하게 되는 과정에서 경험한 다양한 고군분투기를 연재하고 있습니다.현재 운영중인 스팀헌트 (Steemhunt)는 전 세계 2,500개가 넘는 블록체인 기반 앱들 중에서 Top 10에 들어갈 정도로 전 세계 150개국 이상의 많은 유저들을 보유한 글로벌 디앱 (DApp - Decentralised Application) 입니다 (출처 - https://www.stateofthedapps.com/rankings).스팀헌트 웹사이트 바로가기
조회수 1044

테이블을 내 마음대로! 컬럼 추가와 삭제, 테이블 분리

Overview이전까지는 단일 테이블에서 INDEX를 적용하는 효과적인 방법들을 살펴봤습니다. 아직 못 본 개발자를 위해 친절히 링크도 준비했습니다. 이 글을 보기 전에 아래의 글들을 먼저 보는 것이 좋습니다.단일 TABLE을 SELECT하자!: 올바른 SELECT문 작성하기순서대로 척척, ORDER BY: ORDER BY 조건 처리 알아보기원하는 대로 뭉치는 GROUP BY: GROUP BY 조건 처리 알아보기이번 글에서는 테이블에서 컬럼을 추가 또는 삭제하고, 테이블을 분리하는 방법까지 알아보겠습니다.Let’s do it먼저 아래의 컬럼을 추가해봅시다.ALTER TABLE test.TB_MBR_BAS ADD COLUMN AREA_NM    VARCHAR(10)    COMMENT '지역 명'; 그리고 테스트 자료를 넣습니다.UPDATE test.TB_MBR_BAS SET     AREA_NM =         CASE FLOOR(RAND()*15)             WHEN 0    THEN '서울특별시'             WHEN 1    THEN '부산광역시'             WHEN 2    THEN '인천광역시'             WHEN 3    THEN '대전광역시'             WHEN 4    THEN '대구광역시'             WHEN 5    THEN '광주광역시'             WHEN 6    THEN '울산광역시'             WHEN 7    THEN '경기도'             WHEN 8    THEN '강원도'             WHEN 9    THEN '충청남도'             WHEN 10    THEN '충청북도'             WHEN 11    THEN '전라남도'             WHEN 12    THEN '전라북도'             WHEN 13    THEN '경상남도'             WHEN 14    THEN '경상북도'             WHEN 15    THEN '제주도'         END WHERE AREA_NM IS NULL ; 자료를 확인하면 아래와 같이 나옵니다.SELECT     * FROM test.TB_MBR_BAS ; AREA_NM 컬럼을 추가해 지역이 나오도록 했습니다. AREA_NM을 보면 중복되는 지역명이 있습니다. 이럴 때 보통 AREA_NM을 별도의 테이블을 만들어 ID OR 코드를 부여해 처리합니다. 위의 UPDATE 문을 참조하여 ID를 만들면 아래와 같이 만들 수 있습니다.0    : ‘서울특별시’1    : ‘부산광역시’2    : ‘인천광역시’3    : ‘대전광역시’4    : ‘대구광역시’5    : ‘광주광역시’6    : ‘울산광역시’7    : ‘경기도’8    : ‘강원도’9    : ‘충청남도’10    : ‘충청북도’11    : ‘전라남도’12    : ‘전라북도’13    : ‘경상남도’14    : ‘경상북도’15    : ‘제주도’먼저 AREA_NM과 ID를 다룰 테이블을 만들겠습니다.CREATE TABLE test.TB_AREA_BAS  (     AREA_ID        TINYINT UNSIGNED NOT NULL    COMMENT '지역 아이디 '     ,AREA_NM     VARCHAR(10)             NOT NULL    COMMENT '지역 명'     ,PRIMARY KEY (AREA_ID)  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='TB 지역 기본' ; 테이블을 만들었으면 자료를 넣어줍니다. INSERT INTO test.TB_AREA_BAS  (     AREA_ID      ,AREA_NM  ) VALUES (0,'서울특별시')  ,(1,'부산광역시')  ,(2,'인천광역시')  ,(3,'대전광역시')  ,(4,'대구광역시')  ,(5,'광주광역시')  ,(6,'울산광역시')  ,(7,'경기도')  ,(8,'강원도')  ,(9,'충청남도')  ,(10,'충청북도')  ,(11,'전라남도')  ,(12,'전라북도')  ,(13,'경상남도')  ,(14,'경상북도')  ,(15,'제주도')  ; 자료를 확인하면 아래와 같이 나옵니다.SELECT     * FROM test.TB_AREA_BAS ; 테이블을 만들었다면 test.TB_MBR_BAS 테이블에 AREA_ID 를 추가하여 자료를 넣은 후 AREA_NM 컬럼을 삭제하면 됩니다.이제 AREA_ID를 추가합니다.ALTER TABLE test.TB_MBR_BAS ADD COLUMN AREA_ID TINYINT UNSIGNED NOT NULL COMMENT '지역 아이디'; AREA_NM을 참조하여 AREA_ID를 넣습니다.UPDATE test.TB_MBR_BAS SET     AREA_ID =         CASE AREA_NM             WHEN '서울특별시'    THEN 0             WHEN '부산광역시'    THEN 1             WHEN '인천광역시'    THEN 2             WHEN '대전광역시'    THEN 3             WHEN '대구광역시'    THEN 4             WHEN '광주광역시'    THEN 5             WHEN '울산광역시'    THEN 6             WHEN '경기도'    THEN 7             WHEN '강원도'    THEN 8             WHEN '충청남도'    THEN 9             WHEN '충청북도'    THEN 10             WHEN '전라남도'    THEN 11             WHEN '전라북도'    THEN 12             WHEN '경상남도'    THEN 13             WHEN '경상북도'    THEN 14             WHEN '제주도'    THEN 15         END ; 자료를 확인하면 아래와 같이 나오는데요.SELECT     * FROM test.TB_MBR_BAS ; 최종적으로 AREA_NM 컬럼을 삭제합시다.ALTER TABLE test.TB_MBR_BAS DROP COLUMN AREA_NM; 삭제했다면 자료를 확인해봅시다.SELECT     * FROM test.TB_MBR_BAS ; 이제 두 개의 테이블을 연결해서 조회해보겠습니다. JOIN을 사용하면 되고, Quey 문은 아래와 같습니다.SELECT     T101.MBR_ID      ,T101.MBR_INDFY_NO      ,T101.MBR_NM      ,T101.AGE      ,T101.AREA_ID      ,T102.AREA_NM FROM test.TB_MBR_BAS T101      INNER JOIN test.TB_AREA_BAS T102          ON T102.AREA_ID = T101.AREA_ID  ; 정리하며위에서 보여드린 예시는 두 가지 다른 점이 있습니다. 첫째는 TABLE 뒤에 T101, T101 과 같은 얼라이스를 준 것, 둘째는 INNER JOIN 문장이 들어간 것입니다.만약 테이블이 2개 이상이라면 사용할 테이블 컬럼을 써야 하는데 테이블명을 그대로 쓴다면 너무 길어집니다. 그래서 얼라이스로 테이블을 간단하게 표시하는 것이죠.INNER JOIN은 JOIN 중 가장 기본이 되는 문장입니다. 플랜을 보면 T101 즉 test.TB_MBR_BAS를 차례대로 전부 읽는데, 그때마다 T102인 test.TB_AREA_BAS 를 AREA_ID 를 기준으로 값을 읽습니다. T101에 해당하는 내용과 T102에 해당하는 내용을 보여주는 것이죠. 저는 Database를 쓰는 이유가 바로 JOIN 때문이라고 생각하는데요. 여러분의 생각은 어떤가요. 조금 헷갈린다면 다음에는 JOIN에 대해서 알아보도록 하겠습니다. (자연스러운 결말..!)글한석종 부장 | R&D 데이터팀hansj@brandi.co.kr브랜디, 오직 예쁜 옷만#브랜디 #개발문화 #개발팀 #업무환경 #인사이트 #경험공유
조회수 2191

이메일 뉴스레터, 목적이 다르면 디자인도 다르다?

이메일 뉴스레터를 보낼 때 가장 먼저 생각해야 하는 것은 보내는 목적입니다. 왜 보내는지, 받는 사람에게 기대하는 것은 무엇인지 등에 대해 생각해봐야 하죠.스티비 뉴스레터의 첫 번째 목적은 이메일 마케팅이 대한 팁을 공유하는 것이고 두 번째 목적은 스티비를 알리는 것입니다.이메일 뉴스레터를 왜 보내시나요?이 질문이 중요한 이유는 목적에 따라 이메일 본문의 디자인이 달라지기 때문이에요. 목적에 따라 길이가 달라지고 강조해야 하는 부분도 달라집니다.이메일 뉴스레터를 보내는 목적에 따라 크게 행동 유도하기, 소식 전하기, 소개하기의 3개 유형로 나눌 수 있습니다. 훨씬 다양하지만 디자인이 어떻게 달라지는지 알아보기 위해 단순하게 나눠봤습니다.행동 요청하기하나의 메시지에 집중하여 후원이나 구매와 같은 행동을 요청합니다. 행동 요청의 꽃은 CTA(Call-To-Action) 버튼입니다. 버튼을 클릭해야 후원이나 구매를 하게 할 수 있죠. 그래서 행동을 요청하는 이메일은 버튼을 크고 선명하게 만들어 강조합니다.소식 전하기여러 콘텐츠를 엮어 회사나 단체의 소식을 주기적으로 전달합니다. 콘텐츠의 내용을 간략하게 전달하는 대표 이미지와 3–4줄의 요약 텍스트를 반복하죠. 관심있는 콘텐츠에 대한 상세한 내용을 볼 수 있는 ‘더 읽기’, ‘자세히 보기’ 등의 버튼을 넣어도 좋습니다.소개하기새로운 제품이나 기능 등 알리고 싶은 정보를 전달합니다. 제품이나 기능에 대한 헤드라인, 대표 이미지를 가장 먼저 강조하여 전달하고 세부적인 내용은 그 아래에 이미지와 텍스트를 적절히 조합하여 전달하죠. 제품 구매나 앱 다운로드를 유도하는 CTA 버튼을 넣어도 좋습니다.모든 이메일 뉴스레터를 이 3개 유형으로 설명할 수 있는 건 아닙니다. 스티비 뉴스레터도 소개하기에 가깝긴 하지만 딱 들어맞진 않아요. 이메일 마케팅이라는 제한된 주제를 자세히 다루다 보니, 위에서 소개한 이메일들과 달리 텍스트나 이미지의 양이 많아지곤 합니다.보내고 계신 이메일 뉴스레터가 어떤 유형에 해당하는지, 목적에 맞게 디자인 된 템플릿을 사용하고 있는지 한 번 확인해보세요.참고: Really Good Emails#슬로워크 #스티비 #마케팅 #마케터 #인사이트 #꿀팁
조회수 1026

옐로모바일의 첫 인상 담당자, ‘올리비아’

안녕하세요, Y의 옐로피플 인터뷰가 돌아왔습니다:D 오늘은 아주 특별한 옐로피플과 인터뷰를 진행했답니다. 바로 아름다운 미소로 옐로모바일의 얼굴! 옐로모바일의 첫 인상을 책임지고 있는 리셉셔니스트! 올리비아입니다 :)다양한 레저스포츠를 취미로 즐기며 필라테스 자격증까지 준비 중이라는 올리비아! 오다 가다 마주쳤던 그녀의 이야기가 궁금하다면 퐐로퐐로 미! Y: 안녕하세요! 옐블 독자들을 위해 간단히 자기소개 부탁 드립니다 :)올: 안녕하세요 여러분 :) 클럽옐로 프론트 지킴이 올리비아라고 합니다. 반갑습니다! Y: 많은 분들이 왔다 갔다 하면서 올리비아에 대해 궁금해 하신다고 해요! 옐로에서 근무한지 얼마나 되었나요? 올: 저는 올해 2월에 입사했습니다. 그 동안 옐로에서 정말 많은 분들을 만나고 좋은 인연도 많이 만든 것 같네요 :)Y: 오래 계셨던 것 같은데, 아직 1년이 안됐군요! 기억나는 에피소드가 있나요?올: 아, 사실 출근 첫날이 아직도 생생합니다. 출근 첫날, 옐로 카페 분들께서 그 주말에 스키장에 가는 일정이 있는데 같이 조인하면 어떻겠냐고 물어봐 주시더라고요! (설렘+당황) Y: ㅋㅋㅋㅋㅋㅋ 만나자마자 스키장 제안이라니! 엄청난 친화력이네요올: 네! 그러니까요. 막 들이대주신(?) 덕분에 금방 친해졌죠 :)Y: 그 동안 느꼈던 옐로모바일의 분위기는 어떤가요? 올: 클럽옐로를 둘러보면 정말 진취적이고 자유로운 분위기가 느껴져요. 직원들은 늘 열정이 넘쳐 보이고요. Y: 특별한 취미가 있다고 들었어요! 올: 레저스포츠를 정말 좋아해요. 봄, 가을에는 MTB 싸이클을 즐기고 등산도 자주 하는 편입니다. 여름에는 웨이크보드, 겨울에는 스노우보드를 타러 가고요. 압구정한강에서 여의도나 하남시까지 왕복코스로 다녀오곤 하는데, 보통 두 시간 반 정도 걸립니다. Y: 와… 두 시간 반이요? 제 허벅지가 다 아픈 느낌이네요ㅋㅋㅋ 등산도 자주 하세요?올: 네. 그렇지 않아도, 다 다음주에 옐로모바일 경영지원팀과 같이 등반 예정이라 엄청 기대 중이에요! 얼마 전에도 다 함께 청계산 매봉까지 찍고 왔고요 :)Y: 프론트에 있다 보면, 거의 모든 옐로인들을 만날 것 같아요! 가장 고마운 옐로인은 어떤 옐로인인가요? 올: 최근에 바뀐 클럽옐로 회의실 운영 시스템을 적극적으로 활용해 주시는 옐로인들이요. 그리고 반갑게 인사해주시는 분들도 참 고마워요. 반대로 눈이 마주쳐서 인사했는데도 무시하면 많이 민망해요 :(Y: 인사 하고 삽시다!ㅋㅋㅋ 클럽옐로에서 가장 좋아하는 메뉴가 있나요? 올: 너의 사랑, 나의 사랑, 우리 모두의 사랑 카페인, 아메리카노가 최고죠! 사회생활 시작하고 나서는 생존을 위한 음료인 것 같아요ㅋㅋY: ㅋㅋㅋ생존을 위한 음료…아 뭔가 웃프네요Y: 옐로모바일 서비스 중 가장 많이 이용하는 서비스는 무엇인가요? 올: 쿠차요! 입사 초, 블루투스 이어폰을 구입할 일이 있었어요. 옐로에서 친하게 지내는 분과 함께 좀 더 저렴한 가격으로 알아보고자 네이X 검색을 하고 있는데, 그 분이 “아 뭐해? 쿠차로 찾아! 최저가로 한번에 다 비교돼” 라고 귀뜸을.. 해주셨죠. 그 이후로 꾸준히 잘 활용하고 있답니다.Y: 뜬금없지만, 피부가 완전 꿀 피부세요+_+ 비결이나 본인만의 인생템이 있나요?올: 타고난 피부가 아니라… 나름대로 노력합니다!!! (흐규) 1일 1팩에 도전하고 있는데, 확실히 피부가 좋아지는 느낌입니다:D 인생템은 최근에 찾았는데요, 피부과에서 시술 후 실제로 사용되는 재생 비비크림이에요. 전 피부가 예민한 편인데, 이 비비크림은 순한데다가 피부재생과 보호까지 한번에 돼서 데일리로 꾸준히 활용하고 있어요.Y: 여기서는 홍보하면 안되니까.. 궁금하신 분들이 있다면 클럽옐로 올리비아에게 문의를!ㅋㅋㅋㅋㅋㅋY: 자, 사실 많은 (남자)사람들이 궁금해 할 것 같은데요. 올리비아의 이상형은?!올: 스포츠를 즐겨 하는 사람이 이상형입니다:) 운동을 하시는 분들은 대체적으로 매사에 밝고 긍정적인 걸 느껴요. 건강을 위해 음주를 즐겨 하는 편이 아니라, 내외적으로 건강한 사람이죠. 그리고 이건 모든 여자들의 심쿵 포인트인데, 요즘 들어 셔츠 소매를 걷었을 때 보이는 팔뚝 힘줄이 그렇게 매력적이더라고요ㅋㅋㅋY: ㅋㅋㅋㅋ나이 먹을수록 그런 데서 매력을 느낀다던데.. 아..아닙니다. Y: 아, 너무 솔직하셔서 좋네요. 올해가 가기 전에 꼭 이루고 싶은 일이 있나요?올: 자격증을 따는 게 목표인데요, 현재 필라테스 교육자격증을 따려고 준비 중입니다! 내년 여름시즌에는 스킨스쿠버 자격증도 따려고 하고 있어요. Y: 마지막으로 한마디 부탁 드립니다!올: 늘 밝은 옐로모바일 여러분을 보면서 저도 덩달아 기분 좋게 일하고 있습니다:D 앞으로도 오다가다 인사 나눠요! 옐로 화이팅!! 
조회수 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브랜디, 오직 예쁜 옷만
조회수 1357

비전문가를 위한 유전자 정보 기반 산업에 대한 이해

비전문가를 위한 유전자 정보 기반 산업에 대한 이해 "유전자 해독( Genome sequencing)'을 아웃소싱하면 핵심기술은 그 회사에 있는 것 아닌가요? 3billion은 그럼 뭘 하는 건가요?"3billion 시작하고, 기자나 VC 분들에게 아주 빈번하게 받는 질문인데, 아마도 전문가 분들이 아니라면 모든 유전 정보 사업에 대해 가질 수 있는 의문일 수 있겠다 싶어 비전문가 분들이면서 유전자 정보 산업에 대해 궁금해 하시는 분들의 시각에서 답변을 정리해 본다.유전자 분석 과정에 대한 이해 사실 위 질문은 유전자 분석 이라 통칭되는 두리 뭉술한 용어에 대한 오해에서 근원하고 있는 것 같다. 보통 '유전자 분석( Genome analysis)' 이라는 용어를 사용할 때는,  여러 단계의 과정을 포괄해 이야기하는 경우가 많은 것 같다.보통 유전자 분석이라는 용어를 쓸 때  크게 '유전자 해독( Genome sequencing or genome decoding)'과 해독된 Data를 분석해 원하는 목적의 정보를 얻어내는 '유전자 정보 해석( interpretation )' 두 가지를 모두 포괄해 사용하는 경우가 많다.'유전자 해독'은 우리 몸 세포 안의 게놈에 있는 30억 쌍의 DNA 염기 서열을 읽어내는 과정을 의미 한다. DNA는 A,G,T,C 4개의 염기로 구성되어 있다. 따라서 유전자 해독은 이 4개의 염기 A,G,T,C 로 구성된 30억개의 DNA 염기 서열을 읽어내어, 30억개로 이루어진 문자 서열을 얻어내는 과정을 의미한다.2003년 완성된 인간게놈프로젝트가 바로 '유전자 해독'을 목적으로 한 연구 프로젝트 였고, 이를 통해 인류 최초로 30억 쌍의 염기 서열을 처음 부터 끝까지 읽어 낼 수 있었다. 당시 이 한벌의 염기 서열을 해독해 내는데 27억 달러 우리 돈 3조원 가까운 비용이 들었다. 최초의 인간 게놈이 완성된 이래로 유전자 해독 기술은 매 1.8년 마다 2배씩 성능이 개선된다는 반도체 무어의 법칙을 가볍게 능가하는 속도로 매우 빠르게 발전되어, 2014년 말 기준 한 사람의 전체 게놈을 해독하는데 $1000, 우리돈 100만원 수준으로 낮아졌다.유전자 해독 기술이 이렇게 빠르게 발전해, 이제 유전자 정보가 필요한 사람이라면 누구든 유전자 해독을 통해 자신의 유전자 정보를 획득할 수 있는 시대가 펼쳐진 것이다.유전자 해독이 가능해졌으니, 이제 게임 끝! 인가? 아니다.유전자 해독은 30억 쌍의 DNA 염기 서열을 해독한 text 정보일 뿐, 이 정보를 활용해 필요로 하는 다양한 용도로 활용하기 위해서는  '유전자 정보 해석' 기술이 필요하다.백만원 유전자 해독, 십억원 유전자 해석 시대게놈 해독 비용이 낮아져 많은 게놈이 생산되면서, 이를 해석하기 위한비용이 그에 비례해 막대하게 증가하고 있는 상황을 보여주는 그래프( 이미지 출처: https://epilepsygenetics.net/2014/06/27/when-will-we-have-the-1000-epilepsy-genome/ )$1000 게놈 시대가 가시화 되면서, '백만원 게놈 해독, 십억원 게놈 해석( $1000 genome, $1,000,000 genome interpretation)' 시대라는 캐치프레이즈가 등장했다. 유전자 해독 기술이 빠르게 발전해 대중화 될 수 있을 정도로 가격이 낮아져 많은 게놈이 생산되면서,  이들 게놈 정보를 활용해 질병 진단 등에 활용하기 위한 '유전자 해석'에 막대한 비용이 필요한 시대가 펼쳐진 것이다.'유전자 해석( Genome interpretation)'은 앞서 설명한 유전자 해독과정을 통해 생산된 DNA 염기서열 문자 정보로 구성된 Raw data를 필요한 용도로 가공하고 해석해 원하는 목적의 정보를 생산해 내는 과정을 포괄한다.이 과정은 컴퓨터를 통한 대규모 연산 과정을 통해 진행된다. 왜 꼭 그래야만 할까?유전자 해독기를 통해 생산된 raw data는 대규모의 이미지 파일들로, 한 사람의 게놈을 읽어내는데 1Tb(테라바이트)의 정보를 생산해 낸다. 이 이미지 파일을 처리해 생산된 한 사람의 DNA 문자는 30억 쌍에 달한다. Text 파일로 이 문자열을 저장하는데만 3Gb ( 기가 바이트)가 필요하다. 현재 유전자 해독 기술의 특성상 같은 부위를 평균 30배로 읽어내는데 이렇게만 해도 90G 여기에 각 DNA 염기를 읽어내는데 필요한 Quality score 등의 정보를 포함하면 270G로 불어난다. 270Gb 의 정보를 컴퓨터의 도움 없이 처리해 낼 수는 없다. 그래서 해독된 유전자 정보를 활용하기 위해서는 컴퓨터를 통한 정보 처리를 통하지 않을 수 없게 되는 것이다.유전자 해석 과정은 여기에서 부터 시작한다. 여기서 부터는 필요한 목적에 따라 다양한 알고리즘과 분석 방법론을 기반으로 각각의 기술들이 발산한다. 암환자의 유전자 정보로 정밀진단을 하기 위해서는 체세포 변이를 찾아내는 알고리즘을 사용하고, 산전유전진단을 위해서는 산모의 유전자에서 태아의 유전자를 구분해 내는 알고리즘을 사용하고, 최근 이슈가 되고 있는 액체생검을 통한 암조기진단을 위해서는 암세포에서 근원한 변이를 찾아내는 알고리즘을 사용한다.우리 3billion은 유전적 원인에 기반한 희귀질환을 검사할 수 있도록 생식세포 변이( Germ-line mutation)을 판별하고, 다양한 질병들의 유전 특성에 기반해 변이들이 질병을 유발할 것인지, 유발한다면 어느 정도 확률로 이런 가능성이 존재하는지 등을 정밀하게 계산해 낼 수 있는 알고리즘을 개발하고, 여기에는 딥러닝을 포함한 다양한 AI 기술들이 폭넓게 활용된다.즉, 목적에 따라 유전자 해석에 필요한 기술들은 서로 다르다. 그래서, 어떤 목적을 가진 제품을 만드느냐에 따라서, 유전자 정보 기반 회사들은 서로 다른 기술을 고도화 시켜나가는 각자의 길을 걷게 된다.3billion은 희귀 질환을 검사하는데 필요한 다양한 data analysis algorithms/methods, UI/UX 들을 개발하는데 역량을 집중하는데, 여기 활용되는 해석 기법들은 Grail 등의 암 조기 진단을 위한 회사나 Natera 등의 산전유전검사 제품을 만들어내는 회사들이 활용하는 해석 기법과 완전히 다르다.이는 마치, '컴퓨터와 프로그래밍 랭귀지'라는 동일한 자원을 활용해 각 software 회사들이 서로 다른 software를 만든 것과 같다고 할 수 있다. Microsoft 는 운영체제 소프트웨어를, 구글은 검색 엔진 소프트웨어를, 오라클이 DB 소프트웨어를 만든 것 처럼.유전자 산업의 '핵심 기술'자, 그러면 유전자 산업의 핵심 기술은 무엇일까?  유전자를 읽어내는 유전자 해독 기술인가? 아니면 읽어낸 유전자 정보를 해석하는 기술인가? 둘 다 핵심 기술이다. 유전자 해독의 핵심 기술은 유전자 해독기를 만들어 내는 회사에 핵심 기술이 있다. 현재 지구상의 유전자 해독기 시장을 독점하고 있는 illumina 가 가장 경쟁력 있는 유전자 해독 핵심 기술을 가진 곳이라 할 수 있겠다. 그 외에 게놈 해독기를 개발, 사업화 하고 있는 Pacific biosciences,  Oxford nanopore 등이 게놈 해독 핵심 기술을 가지고 있는 회사들이라 할 수 있다.유전자 정보 해석의 핵심 기술은 IT 회사들이 그랬듯, 각 목적에 맞는 software를 만드는 곳들에 핵심 기술이 분산되어 있고, 앞으로 이 분산이 가속화될 것으로 예상된다.  구글이 검색에선 야후, 라이코스, AOL 등 초기 경쟁자들을 물리치고 가장 독보적인 경쟁 우위를 점했고, 마이크로소프트가 윈도우를 기반으로 운영체제 소프트웨어를 독점했듯,  유전자 정보를 기반으로 다양한 문제를 해결하는 산업 분야들이 파생이 될 것이고, 각 영역에서 경쟁 우위를 가지는 회사들이 등장할 것이다.여기서 한가지 강조하고 싶은 것은, 어느 한 도메인의 해석 기술이 좋다고 다른 영역의 문제를 푸는데 필요한 해석 기술이 좋다고 할 수 없다는 점이다. 구글의 검색 엔진은 검색에서 의미가 있지, 운영체제를 만드는데 큰 도움이 안 되듯, 유전자 해석 기술도 마찬가지. Myriad 의 유방암 위험도 검사를 위한 소프트웨어가 산전태아유전 검사를 하는데는 큰 의미가 없다. 마찬가지로 Natera의 산전태아유전 검사를 위한 소프트웨어는 Counsyl의 임신전 태아 유전병 위험도 검사에는 큰 도움이 안 된다.물론, 구글이 Facebook처럼 SNS 를 만들고, Microsoft 가 구글처럼 검색엔진 Bing 을 만들 듯, 다른 회사의 제품들을 만들어 낼 수 있다. 소프트웨어라는 영역이 의례 그러하듯. 하지만, 이미 역사를 통해 우리는 잘 알고 있다. 그런 식으로 타회사의 소프트웨어를 따라 만들어 성공한 전례는 손에 꼽는다는 것을.  구글은 수많은 인재들을 영입해 수많은 소프트웨어 서비스를  출시했지만, 본업인 검색과 이메일 외에는 크롬을 제외하고 성공한 서비스라고 할 만한 것이 없다.  마이크로소프트 역시 수많은 소프트웨어를 만들어 냈지만, 운영체제와 오피스 제품군 이외엔 성공한 제품이 없다.구글은 직접 만든 제품이 아니라, Youtube나 안드로이드 등 좋은 소프트웨어를 만든 회사들을 인수해 막대한 매출을 내는 회사로 키운 경우가 더 많은 듯 하다( 물론 talent acquisition 에 그친 경우가 훨씬 더 많긴 하다만). 마이크로소프트는 그 마저도 신통치 않았지만.기본적으로 '인간 게놈 정보'를 바탕으로, 목적에 맞는 '유전자 해석' 소프트웨어를 주력으로 하는 유전자 정보 산업군의 회사들도 IT 기업들과 같은 전례를 따르며 시장이 성장해 나갈 것이라 생각한다.다만 한가지 변수가 더 있는데, 그게 바로 Data.또하나의 핵심 기술, Data 인간 최고수 바둑 기사들을 무참히 짓밟으며 큰 이슈가 된 AI 기술이 엄청난 주목을 받고 있다. 딥러닝 기술의 발전을 등에 엎은 구글 딥마인드의 알파고가 엄청난  '바둑 실력'을 쌓아, 인간 최고수들을 압도했기 때문이다. 헌데 알파고는 어떻게 '바둑 실력'을 습득한 것일까?알파고는 어떻게 인간 최고수 이세돌을 능가하는 바둑 실력을 학습할 수 있었을까?바로, 인간 최고수들의 바둑 대결을 통해 얻어진 '바둑 대결 기보 Data' 를 통해 바둑 기술의 습득이 가능했던 것이다.  딥마인드 팀이 가진 바둑 대결 기보 Data 에 인간 최고수들 간의 대결 Data는 빠져 있었다면 어땠을까? 절대 인간 최고수들을 능가하는 수준의 실력을 쌓지 못했을 것이다.딥러닝을 포함한 AI 에서 알고리즘도 핵심 기술이지만, 그 보다 더 중요한, 경쟁력을 가르는 핵심은 Data라고 할 수 있다.  특정 문제를 풀기위한 양질의 Data를 누가 더 많이 가지고 있느냐에 따라 AI 성능이 결정된다. 'Garbage in, Garbage out' , 아무리 좋은 성능의 AI 알고리즘을 개발했더라도, AI가 학습할 Data의 질과 양이 받쳐주지 못하면, 그 AI의 수준은 절대 경쟁력을 가질 만한 성능을 내지 못한다.'유전 정보 해석 소프트웨어' 기술에서도 같은 상황이 펼쳐지고 있다. 유전 정보 해석 소프트웨어들 자체가 빅데이터에 기반한 다양한 방법론 , AI 알고리즘 기반으로 하고 있기에, 자연히 양질의 Data 를 기반으로한 소프트웨어가 경쟁력 있는 성능을 확보할 수 있다.액체 생검 기반 '암 조기 진단 키트' 개발을 목표로 하는 Grail, Guardant health, Freenome 등의 회사가 왜 수천억~조단위 투자를 받을까? 투자금을 기반으로 회사를 성장시킬 Plan 이 있어야 하는데, 그 돈을 어디에 쓸 목적으로 막대한 투자를 받았을까?바로 Data 확보다. 암 조기 진단 kit를 개발하기 위해 수십만~수백만명의 게놈 Data를 확보해 암 조기 진단 소프트웨어의 성능을 압도적으로 높이기 위해 엄청난 투자를 받은 것이다.  압도적인 숫자의 양질의 데이터를 확보하고 나면, Data가 진입장벽이 되어 시장을 선도할 수 있게 된다.그런데, 돈만 있으면 양질의 데이터를 확보할 수 있을까? 반은 맞고 반은 틀리다고 본다. 결국, 의미 있는 제품을 만들어, 자연스럽게 고객숫자를 늘려갈 수 있는 곳이 가장 의미 있는 속도로 의미 있는 숫자의 Data를 확보할 수 있을거라고 본다.이를 위해서는 결국 고객의 선택을 받아야 하는데, 여기에는 제품의 품질 외에도, 회사가 추구하는 목적과 가치 등 제품 이외의 요소들도 매우 중요하게 작용하지 않을까 예상한다. 돈벌기 위해 어떤 형태의 Data 사용이든 불사하려고 하는 곳은 아무리 많은 자금을 바탕으로 하더라도 결국 유전자 정보 산업의 Data 경쟁에서 패퇴할 것이라 예상한다.  좋은 제품을 합리적인 가격에 제공하면서, 궁극적으로 질병 치료 등 선한 목적을 추구하는 회사가 유전자 정보 산업의 궁극적으로 가장 큰 경쟁력인 Data 확보 경쟁의 승자가 되지 않을까 예상해 본다.요약 많은 이야기를 했는데, 간단히 요약하면, 유전자 정보 산업에는 '유전자 해독'을 핵심 기술로 하는 회사도 있고, '유전자 해석'을 핵심 기술로 하는 회사도 있다. 유전자 해석을 하는 회사들은 각기 목적하는 바에 해당하는 소프트웨어를 고도화해 나가면서 기술이 차별화 되어 나간다. 유전자 해석을 핵심 기술로 하면서 같은 목적( 예, 액체 생검을 통한 암 조기진단)을 가진 회사들은 어느 곳이 양질의 데이터를 더 많이 가지고 있는가로 궁극적으로는 제품의 차별화, 경쟁력의 차별화가 이루어질 것이다.#3billion #운영 #인사이트 #스타트업 #마인드셋 #시장분석
조회수 927

[우리는 비투링커 #7] 대만에서 한국으로 온 비투링크 '슈퍼맨' 양제가님을 소개합니다.

안녕하세요, 미나 입니다 :)비투링크에서는 매 달 1명의 '이달의 비투링커' 를 선정합니다!6월의 비투링커는 누규? 그 누구보다도 한국을 사랑하고,그 누구보다도 성실하고,그 누구보다도 긍정적인 6월의 비투링커는 바로!!▼▼ 먼저, 아리따운 4명의 비투링커들의 추천영상을 보시죠! ▼▼갈수록 발전하는 추천영상의 퀄리티 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 엄지척!!! b b b6월의 비투링커는 바로,참 좋은 인상을 가진 양제가 님입니다 ♥제가님은 대만에서 오셨어요:)한국어가 아직은 서툴지만,한국을 너무 사랑하고, 또 항상 '노력' 하는 제가님!! !*~*그런 제가님을 제가 직접 만나봤습니다*~*! 안녕하세요, 저는 Brand Sales Division 내 중국 온라인채널팀에서'VIP.com' 이라는 채널을 담당하는 양제가 입니다!제가 하는 업무는 채널 내 재고와 매출모니터링, 분석 및 상품측정과 제안, 채널이벤트 기획과 협의, 매출결산 등 전반적인 채널 매니지먼트 업무를 하고 있습니다 ^_^소감... 기분 정말로 좋습니다!!!!영상을 봤을 때, 첫느낌은 '마징가 Z' 만화가 생각났어요 ㅋㅋ근데 제 얼굴이 딱 보이길래 깜짝 놀랬어요. 왜냐면, 진짜로 1도 상상을 못했거든요!팀원들이 없었으면, 제가 이런 상을 받을 수도 없었을거에요. 그리고 제가 한국말이 서툴어서, 미리 알았다면 ㅋㅋ 앞에나가서 소감멘트를 준비했을텐데..너무 놀래서 제대로 말을 못한거 같아서 아쉬워요 :(제가님이 속해있는 BSD ♥인터뷰 전에도 미리 질문을 전달해주면, 어떻게 말할지 준비하겠다고 하셨던 제가님!! 인터뷰 당일 날, 프린트까지 해서 오셨다죠 :)팀원들은 제가님을 '부지런한 새' 로 표현해요! 비투링커들 중에 가장 먼저 출근하고, 가장 늦게 퇴근하고, 또 매일 점심시간을 쪼개 업무를 하시느라 김밥을 드시는 제가님 ㅠㅠ 여기에 대한 제가님의 생각은 어떠신지 궁금했어요!저는 원래 아주 일찍 일어나는 아침형 인간이에요 :)심지어 출근을 안하는 주말에도 늦잠을 자는 일이 별로 없어요!우선은 일어나면 일찍 회사에 와서 하루를 시작하기전에 오늘 해야할 일을 정리하고,또 제 자신에게 조용히 저만의 시간을 주는 걸 즐겨요!그리고, 제가 점심 때 김밥을 먹는 건 다 이유가 있어요~~시간이 없지만, 그 틈을 타 '건강' 을 챙기기 위해서인데요. 김밥은 여러가지 야채를 선택해서한번에 먹을 수 있잖아요. 참치, 야채, 우엉이 같이 들어간 걸 젤 좋아해요 :) 저 같은경우에는 매일 커뮤니케이션 해야하는 유관부서가 정말로 많아요.중국 채널, 온라인, BM, 물류 등 실시간 소통이 필요하고,또 그걸 빠르게 대처해야하기 때문에 시간이 여유롭지 않아요.그래서 점심시간을 틈타 생각을 정리하는 시간을 가져요.밥을 먹고나면 '소화' 할 시간이 필요한 거 처럼,저에게는 '한국어' 를 사용할 때, 충분히 '소화' 할 수 있는 시간이 필요한거죠. 제가 한국에 온지 아직 1년이 안됬어요!그래서 지금은 주말에 한국에 대한 공부를 합니다 :)'한국어 능력시험' 공부 뿐만 아니라, 글쓰기연습을 합니다!또, 한국에 대한 '외국인을 위한' 책을 읽기도해요.(한국의 지리, 간단한 현대사 등)제가님이 공부하는 책들 :)와! 그런책이 있는지 전혀 몰랐는데요. 제가님이 저보다 더 잘 아시는거 아닌가요? ㅋㅋㅋ그 외에는 저 농구하는 거 좋아요 !!제가 캐나다에서 대학을 나왔는데, 그때 만났던 한국친구랑일주일에 한번 씩 한강공원에서 농구합니다 :) 매주 같이 농구하는 친구와 제가님 :)제 컵별명은 "곧! 한국인" 입니다 :)이거만 보면, "이 사람은 외국인이구나." 라고 알 수 있겠죠? ㅎㅎ예전에 캐나다에서 유학을 했는데, 학교와 기숙사에서 한국친구들의 도움을 정말 많이 받았어요! 그리고 한국인들의 애국심과 단결심이 인상적이었다고 할까요?그때부터였던거 같아요. 대학을 졸업하고, 꼭 한국에서 취업해야지를 느꼈어요 :)지금은 한국에 취직해서, 한국문화를 즐기면서 열심히 살고 있습니다 :)저는 작년 8월 16일에 입사했어요!제가 정확하게 이 날을 기억하고 있는 이유는, 제 인생의 마일스톤 (milestone) 이기 때문이에요.처음으로 혼자 외국으로 와서 취직도하고, 제가 꾸는 꿈의 첫번째 단계로 들어온 날이니그 날은 정말로 잊을 수가 없네요 :)제가 제일 좋아하는 브랜드는 '파파레서피'예요 :)신기하게 대만에 있을 때부터 파파레서피를 정말 좋아했어요!근데 비투링크에 입사하고, 또 제가 'VIP' 라는 채널을 담당하면서브랜드에 대한 애정이 더욱 더 커졌습니다. *~*~!![이미지출처: 네이버 블로그] 파파레서피 봄비 꿀보습 클렌저봄비 꿀 보습 클렌저가 좋은 이유 3가지!(1) 풍성하고 쫀쫀한 거품! (거품이 많아서 젤 좋아요)(2) 세수하고나서고 당기지않고 촉촉!(3) 저 같은 지성피부에 딱 좋은 딥클렌징 + 노폐물제거 가능!이전에 파파레서피 행사에 갔을 때 찍은 사진!제가 올해 10월에 한국어 능력시험을 봐요 :) 한국어 능력시험은 가장낮은 1급부터 6급까지 있어요!작년에 5급을 땄는데, 올해는 가장 높은 6급을 따는 게 목표입니다 !!!더해서, 계속해서 '한국' 이라는 나라에 대해 공부할거에요! ♥제 꿈은 '한국으로 귀화' 하는 것입니다 :)저는 남들보다 대학을 좀 늦게 졸업했어요.대학을 다니면서 졸업 후에 꼭 '한국' 으로 가서 일하는 꿈을 가지고 열심히 노력했어요!그리고, 지금 현재 저는 그 꿈을 이뤘고, 더 나아가기위해서 매일 노력하고 있어요 :)그래서 전 요즘 매일매일이 행복하고 감사하다는 생각을 가져요.아참. 기쁘다는 말보다 더 기쁘다는 표현이 뭐가있죠?"기쁘다" 그 이상의 기분이에요! :) 꿈을 이루기 위해서 하루하루 열심히 노력하는 제가님의 이야기를 들으면서, 제 자신에 대해서도 큰 동기부여가 되는 시간이었습니다 :) 제가님 감사해요 ♥#비투링크 #팀소개 #팀원소개 #팀원인터뷰 #인터뷰 #즐거운분위기 #사내문화 #조직문화 #기업문화
조회수 2585

개발자 직군 파헤치기 2 | 게임 개발자

게임 개발자국내 게임 산업에서 모바일 게임의 매출액은 2011년 4235억원에서 2013년 2조3276억원으로 2년 만에 6배 가까이로 늘어났습니다.(출처:한국콘텐츠진흥원) 한국 모바일 게임은 해외에서도 인기를 끌고 있는 추세입니다. 뿐만 아니라 최근 엄청난 인기를 끌고있는 배틀그라운드는 한국 게임 산업의 가능성을 증명합니다. 배틀그라운드는 작년 한 해 7621억원의 수익을 거두면서 2017년 가장 큰 수익을 거둔 PC 게임 패키지 1위를 차지했습니다.배틀그라운드의 일러스트게임을 좋아하는 사람이라면 한번쯤은 게임 개발에 관심을 가져보았을 것입니다. 특히 프로그래밍을 하는 사람이라면 자신의 게임을 만들어보고 싶다는 생각을 해보거나, 게임 회사에서 일 하는 것을 고려해보았을 것입니다. 그러나 한편으로는 압도적인 근무 시간에 대한 부담으로 게임 개발자가 되겠다는 생각을 접게 되신 분들도 많습니다.이번 포스팅은 게임 개발자에게 필요한 역량이 무엇인지 알아보고, 게임 개발자의 두 가지 커리어 종류에 대해 설명하려고 합니다. 또한 지금 당장, 코딩을 전혀 할 줄 모르는 상태에서 게임 개발에 도전해볼 수 있는 방법 또한 소개해드리겠습니다.게임 개발자에게 필요한 역량게임을 만들기 위해서는 그래픽을 다루는 능력, 스토리와 레벨을 기획하는 능력, 3D 모델링, 그래픽 엔진을 다루는 능력 등 많은 영역들에서 전문성을 필요로 합니다. 물론 이 모든 것을 전문적으로 다루는 사람이 되기란 불가능에 가깝습니다. 그렇기 때문에 스토리라인과 컨셉 구성은 기획자가 담당하고, 기획자의 아이디어는 개발자와 그래픽 디자이너의 손을 거쳐 게임의 모습을 갖춥니다. 그래픽 디자이너가 시각적 구현을 맡는다면, 개발자는 PC나 모바일에서 게임이 실행될 수 있도록 만드는 작업을 하게되는 것입니다. 게임 개발자도 결국 개발자 직군의 일환이기 때문에 일반적으로 개발자들이 많이 다루는 언어에 대한 숙련도나 프로그래밍 능력이 필요합니다. 그러나 게임 개발자의 경우 다른 직군의 개발자에게는 필수적이지 않은 지식을 필요로 할 때가 있습니다. 아래에는 특히 게임 개발자들에게 중요한 세 가지 요소입니다. 1. 프로그래밍 언어대부분의 대규모 게임 회사들은 C++을 가장 많이 사용합니다. 모바일 게임이 대세로 더오르면서 C#을사용하는 경우가 많아진 것은 사실입니다. 그러나 PC, 모바일, 비행기 제어 프로그램까지 폭넓게 지원하는 고성능의 3D 게임을 개발하기 위해서는 여전히 C++이 최적이라는 평가를 받습니다. 주의할 점은 C/C++은 계속해서 발전하고 있는 언어라는 점입니다. 언어를 배우기 위한 서적, 인터넷 강의 등은 무궁무진하지만 중요한 것은 최신의 것을 배워야 한다는 점입니다.2. 게임 엔진게임 엔진은 간단하게 말해 게임을 개발하는 과정을 쉽게 만드는 ‘도구’입니다. 중력 같은 기본적인 물리 효과나 오브젝트 사이의 충돌 여부를 판정하는 ‘컬라이더’ 등, 개발에 필요한 기본적인 기능이 탑재되어있기 때문에 게임 엔진은 개발 과정을 획기적으로 단축시켜줍니다. 가장 많이 쓰이는 게임 엔진은 유니티와 언리얼입니다.이 글을 읽고 있을 대부분의 분들이 개발을 배우는 과정에 있다는 가정하에 학습의 용이함을 기준으로 비교해보면, 유니티의 경우 공식적으로 지원하는 교육 프로젝트의 수는 9개입니다. 그러나 공식적인 자료 외에도 한글 서적이나 온라인 강좌들은 매우 풍부합니다. 반면에 언리얼이 제공하는 공식 교육 프로젝트는 수십개입니다. 대부분이 한글 자막을 지원해줄 뿐만 아니라 다양한 주제를 경험할 수 있습니다. 언리얼의 한계라면 공식 채널 외에서 학습할 수 있는 자료나 커뮤니티가 아직까지는 많지 않다는 점입니다. 3. 수학게임 개발자에게 수학은 매우 중요하고도 기본적인 것입니다. 특히 3D 게임을 다루고 싶다면 수학적 지식과 역량은 매우 중요한 부분을 차지할 것입니다. 물론 위에서 말한 게임 엔진이 수학적인 계산이나 물리와 관련된 문제들을 해결해 줄 수는 있습니다. 그러나 게임 엔진을 활용한다 하더라도 기본적으로 그것이 어떻게 작동하는지는 이해해야 합니다. 그렇기 때문에 이산 수학, 즉 벡터, 행렬, 집합, 논리 연산 등에는 능숙할 필요가 있습니다. 게임 개발자의 커리어게임 개발자가 되기 위한 길이 게임 회사에 취직하는 것만 있는 것은 아닙니다. 최근에는 크게 성공하는 인디 게임, 즉 대규모 회사가 아닌 저예산의 1인기업 혹은 작은 팀단위로 만들어 내는 게임들의 사례가 늘어나고 있습니다. 게임 회사에 취직하는 것만큼 확실한 방법이 없다는 생각을 갖고 계신 분들, 혹은 자신만의 게임을 만드는 것에 강한 매력을 느끼시는 분들을 위해 두 가지 커리어 옵션을 비교해 보았습니다.1. 대규모 게임 회사대부분의 게임 개발자가 특정 회사에 소속되어 일을 합니다. 회사에 소속되어 있기에 안정적인 수입이 보장된다는 것이 첫번째 장점이라면, 두번째 장점은 혼자서는 절대 만들 수 없는 규모의 게임을 개발하는 데에 기여할 수 있다는 점입니다. 한 마디로 말해 완성도 있고 유명한 게임에 일조 했다는 자부심을 가질 수 있게 되는 것입니다. 또한 주니어 개발자로서 풍부한 경험을 가진 시니어 개발자를 포함해 배울 점이 많은 사람들로 구성된 팀에 소속될 수 있다는 것 또한 큰 장점입니다.한편 회사의 크기가 큰 경우에는 각 사람이 맡는 개발의 영역이 매우 세분화 되어있기 마련입니다. 자신이 느끼기에는 조금 지루하고 단순한 일이라고 생각되는 일을 맡게 될 수도 있습니다. 그러나 반대로 말하면 디자인, 기획, 마케팅 등 개발 외의 업무 등에 신경을 쓰지 않고 오직 자신의 일에 집중할 수 있는 환경이 제공되는 것이기도 합니다.2. 인디게임 개발규모가 있는 회사에 취직하는 것이 아니더라도 게임을 만들 수 있는 방법은 많습니다. 또한 안정적인 수입이 보장된 것은 아니지만, 성공하는 경우 생각는 것보다 그 수익이 큽니다. 예를 들어 트리오브라이프를 개발한 오드윈게임즈는 1년 간 20억의 매출에 도달했습니다. 단지 한 사람이 2주 동안 만든 게임, 숨바꼭질은 한 달만에 5000만원의 수익을 냈습니다. 물론, 이를 성공 신화에 불과하다고 말할 수도 있기 때문에 분명히 감수해야 하는 위험이 있는 커리어인 것이 사실입니다. 인디 게임 간에도 경쟁이 매우 치열하기 때문입니다.그럼에도 불구하고 소규모로, 혹은 혼자서 게임을 개발하는 사람들은 게임에 대한 애착을 가지고 개발 과정 전체를 아우르며 작업할 수 있다는 점에서 만족감을 느낍니다. 특히 투자 규모나 시기에 구애를 받지 않고 개성적인 게임, 만들고 싶은 게임을 만들 수 있다는 것이 장점이라고 할 수 있습니다. 지금 시작하기게임 개발을 하고 싶은데 어디서 시작해야 하는지를 막막해하고 있다면, 무조건 일단 만들어보기 시작하는 것이 중요합니다. 자신의 아이디어, 혹은 이미 있는 게임들을 가지고 점점 난이도를 높여가며 여러 프로젝트를 실행해 보는 것이 좋습니다. 이는 실력을 쌓는 데에도 도움이 되지만, 이후에 훌륭한 포트폴리오가 되기도 합니다.일단 만들어보라는 조언도 막막하신 분들을 위해 준비한 것은 무료로 사용할 수 있는 게임 개발 프로그램들입니다. 코딩을 전혀 할 줄 모르는 사람부터 완성도 있는 게임을 만들고 싶어하는 사람들까지 다양한 수준에서 접근할 수 있는 도구들을 소개해드리겠습니다.1.Flow CreatorFlow Creator는 코딩을 해본 적이 없어도 간단한 드래그앤드롭으로 게임을 만들 수 있는 웹사이트입니다. 시각적으로 논리적 구조를 짤 수 있기 때문에 어떤 언어도 배워본 적이 없어도 됩니다. 무료 버전의 경우 5개의 레벨, 50개의 개체로 제한이 되어있지만 유료 버전의 경우 앱으로 만들어 스토어에 올릴 수도 있습니다.2. StencylStencyl도 Flow Creator와 마찬가지로 프로그래밍 언어가 아니라 Stencyl의 사용법만 잘 익히면 훌륭한 게임을 만들 수 있습니다. 사용법이 Flow Creator에 비해 좀더 까다로운 것은 사실이지만 결과물의 완성도가 더 높습니다. 또한 이미 만들어져있는 코드블록 외에도 직접 코드를 작성하고 라이브러리를 불러오는 등 확장할 수 있는 가능성도 있습니다.3. Game Maker StudioGame Maker는 위의 두 가지 프로그램처럼 드랙 앤 드롭으로 만들 수 있지만, Game Maker Language(GML)이라는 자체 언어를 활용하여 만들 수도 있습니다. GML을 사용해서 게임을 만드는 것은 프로그래밍을 학습하는 데에도 도움이 될 것입니다.게임 개발자의 종류는 정말 많다.오늘 포스팅에서 언급한 게임 개발자는 일부입니다. 게임 개발자의 종류에는 온라인 게임, 모바일 게임, 콘솔 게임 등 정말 다양하고 무궁무진합니다. 여러분들이 어떤 게임 개발자가 되고 싶든 중요한 것은 게임에 대한 열정인 것 같습니다. 자신이 정말 하고 싶고 좋아하는 게임을 만든다는 것은 세상에 의미있는 프로그램을 만드는 개발자만큼이나 행복한 개발자겠지요. 다음 편에는 더 재밌는 개발자 직군으로 찾아오겠습니다.
조회수 704

IP/Design Seminar 참가

안녕하세요 동연 디자인입니다!! :D가족들과 유난히 추억이 많았던 5월이 지나가고 있습니다!어린이날어버이날석가탄신일..날씨까지 화창했던 징검다리 휴일로 나들이 다녀오신 분들이 많이 계시고,운동도 하면서 휴식도 충분히 가졌던 것 같아요^o^동연 디자인에서는 지난주, 여의도 마린 아일랜드에서 열린 디자인 세미나에 운 좋게 참가하여세계 시장의 트렌드를 파악할 수 있는 좋은 기회를 가지게 되었습니다!INTERPRINT-인터 프린트(Interprint)는 독일에 본사를 둔 글로벌 데코페이퍼 프린팅 기업으로, 전 세계 8개의 생산 플랜트를 거점으로 전 세계 모양지 시장의 트렌드를 선도하고2013년부터 전 세계 시장의 Trend를 선도할 만한 6가지의 디자인들을 선정하여 제안하고 있습니다.(SIXPACK)입장하자마자 보이는 표면재 Display입니다 :)안으로 들어가니 인테리어 및 가구 업계에 있는 분들이 많이 참석하셨던 것 같아요!세미나를 시작하기 30분 전에 도착했는데도, PT 준비와 많은 사람들이 이미 자리를 채우고 계셨어요^^ (기대기대)자유롭게 사진을 찍으면서 전시되어 있는 것을 몇 가지 찍어봤어요!트렌드와 조화를 보여주는 표면재 Display 및 LPM을 사용한 디자인 가구입니다.세미나가 시작되고,2018년 인터 프린트(삼보에 스티)에서 제안하는 여섯 가지 데코페이퍼 트렌드에 대한 디자인 SIXPACK을 소개해드리겠습니다.-LarchEicheCherry TreeApfelbaumStahlStein2018년 여섯 가지의 컬러와 디자인으로 간단하게 소개를 했습니다!*컬러 사용에는 화이트톤을 배제하면서 채도가 낮고 옅은 컬러와부드러운 소재의 조화를 강조하였는데요,다양한 컬러와 소재의 MIX & MATCH를 통한트렌드를 제안을 해주었습니다.세미나가 끝나고 홀 뒤에서는 식사를 할 수 있도록 뷔페가 차려졌는데요!음식도 맛있게 먹고 배가 부른 상태로 밖을 나서는데...뚜둔!...INTERPRINT 로고가 새겨진 부농부농 한 예쁜 무선 키보드와 마우스를뙇!!!2019년 트렌드도 너무 궁금합니다 ^3^♥내년을 기약하며...5월도 기분 좋게 마무리하면서아직 비가 오면 쌀쌀한 5월,밤 낮 일교차 유의해주시고얇은 재킷 하나 챙겨서우리 모두 다가오는 무더운 여름,반갑게 맞이해주자고요!!!#동연디자인 #동연몰 #인터프린트 #디자인 #세미나 #가구 #사무용가구 #트렌드 #컬러 #패턴

기업문화 엿볼 때, 더팀스

로그인

/