스토리 홈

인터뷰

피드

뉴스

조회수 6860

BPM, RPA 그리고 Process Mining(프로세스마이닝)

새로운 IT 기술의 등장과 기업 환경의 변화로 새로운 과학 경영 기법들이 비즈니스 유행어처럼 등장하고 사라지지만 그 가운데서도 변하지 않는 것이 있다면 프로세스 개선과 관련된 대한 끊임없는 노력과 관심일 것입니다.프로세스 마이닝은 이벤트 로그를 기반으로 비즈니스 프로세스를 분석할 수 있는 프로세스 관리 기술입니다. 정보 시스템에서 기록한 이벤트 로그에 포함된 패턴 및 세부 정보를 식별하기 위해 별도의 분석 알고리즘이 이벤트 로그 데이터에 적용됩니다. 프로세스 마이닝은 프로세스의 효율성과 이해를 향상시키는 것을 목표로 하며, “자동화된 비즈니스 프로세스 발견” ABPD (Automated Business Process Discovery)이라는 좀 더 일반화된 명칭으로 불리기도 합니다.이러한 프로세스 마이닝은 어디서 갑자기 나온 개념은 아니고 기존 비즈니스 프로세스 관리 기법에 대한 연구와 데이터 분석 기술이 합쳐져서 나온 산물이기에 “비즈니스 프로세스”와 관련된 기술들을 살펴보고 프로세스 마이닝과의 연관성을 찾아보고자 합니다.BPM (Business Process Management)프로세스 마이닝은 일반적으로 BPM과 데이터 마이닝이 겹치는 중간 영역에 위치합니다.BPM은 비즈니스 프로세스를 발견, 모델링, 분석, 측정, 개선, 최적화 및 자동화하기 위해 다양한 방법을 사용하는 운영 관리 기법을 의미하며, 프로세스를 관리하여 기업 성과를 향상시키는 데 중점을 둡니다. 좁은 의미에서 BPM은 업무 프로세스를 사전에 모델링하고, 설계된 프로세스 대로 업무 결제, 승인, 구매 등의 업무 등이 자동화되어 흘러갈 수 있도록 도와주는 IT 시스템을 지칭하기도 합니다..BPM은 Top-Down 방식으로 프로세스 모델을 그려서, 해당 프로세스 모델 대로 업무를 수행하도록 강제하는 방식이라면 프로세스 마이닝은 이미 수행된 업무로부터 프로세스 모델을 도출하는 Bottom-up 방식을 따릅니다.  하지만 점점 복잡해져 가는 기업 업무 활동을 BPM처럼 중앙 집권적 방식으로 모든 것을 통제하기에는 한계가 있습니다.  BPM의 통제를 벗어난 다양한 여러 시스템을 업무 관점에서 통합적으로 관리하고 모니터링하기 위해서는 개별 시스템은 그대로 두고 이로부터 쏟아져 나오는 로그를 통해 프로세스를 관리하는 분권적 방식이 BPM의 한계를 보완하는 역할을 합니다. RPA (Robot Process Automation)로봇 프로세스 자동화 (RPA)는 소프트웨어 로봇 또는 AI (인공 지능) 작업자의 개념을 기반으로 하는 사무 자동화 기술의 새로운 형태입니다.소프트웨어 '로봇'은 컴퓨터 시스템의 사용자 인터페이스와 상호 작용하는 인간의 행동을 복제하는 소프트웨어 응용 프로그램입니다. 예를 들어, ERP 시스템에 데이터 입력을 실행하거나 실제로 비즈니스 프로세스를 수행하는 것이 소프트웨어 로봇의 일반적인 활동이 될 것입니다. 소프트웨어 로봇은 사람과 동일한 방식으로 사용자 인터페이스(UI)에서 작동합니다. 이것은 기존에 애플리케이션 프로그래밍 인터페이스(API)에 기반한 전통적 형태의 IT 통합과 크게 다릅니다. 즉, 사용자 인터페이스의 데이터 아키텍처 계층을 기반으로 한 기계 간(machine-to-machine) 통신 형태를 취합니다.앞서 언급한 BPM이 프로세스 개선을 위해 프로세스 자체를 재설계하고 변경하려는 방식이라면 RPA는 사람이 하던 현재 방식을 그대로 모방하여 소프트웨어로 대체하여 자동화하는 방식입니다. 이러한 RPA가 업무에 더 많이 적용될 수록 더 많은 시스템 로그가 나올 것이고 이에 대한 성과 분석과 모니터링이 필요해질 것입니다. 프로세스 마이닝은 RPA 도입 전 초기 단계에 전체 프로세스를 분석하여 RPA가 적용될 만한 구간을 식별하여 타당성을 검증하고, RPA 도입 이후의 전후 비교를 통해 지속적으로 업무 효율성을 측정할 수 있는 방법을 제공합니다.앞서 살펴본 것처럼 BPM, RPA, Process Mining 이 세 가지는 서로의 영역을 다투는 것이 아니라 상호 보완적인 존재로 볼 수 있습니다.프로세스 마이닝은 “프로세스”와 관련된 다양한 시스템과 활동들에 대해서 데이터에 근거한 현재 프로세스의 모델링 및 성과 측정 방법을 제공합니다. 이를 통해 과거 혹은 신규 프로세스 혁신 기법들과 맞물려 해당 시스템 및 방법론이 성공적으로 수행될 수 있도록 자동화된 “업무 조언자” 역할을 수행하게 됩니다. [참고 자료]https://en.wikipedia.org/wiki/Business_process_managementhttps://en.wikipedia.org/wiki/Robotic_process_automationhttps://www.minit.io/blog/robotic-process-automation-and-process-mininghttps://medium.com/towards-data-science/unleash-the-value-of-process-mining-4e3b5af4e9d8http://www.cdevworkflow.com/bpm-life-cycle/https://www.uipath.com/blog/the-robotic-process-automation-infographic#퍼즐데이터 #개발팀 #개발자 #개발후기 #인사이트
조회수 1174

레진 기술 블로그 - 모두를 위한 설계. 레진 웹 접근성 가이드라인.

레진엔터테인먼트는 글로벌(한국, 일본, 미국) 서비스를 운영하고 있기에 다양한 사람들의 재능과 욕구에 관심이 있습니다. 우리는 웹 접근성에 관심을 기울여 조금 특별한 욕구를 가진 사람들의 문제를 해결하려고 합니다. 소수의 특별한 욕구는 모두의 욕구와 연결되어 있다고 생각하기 때문입니다.조금 특별한 욕구를 가진 사람WHO는 세계 인구의 15%에 해당하는 사람들이 장애가 있는 것으로 파악하고 있습니다. 그리고 보건복지부 장애인 실태조사에 따르면 후천적 장애 발생률은 90% 수준입니다. 이런 통계에 따르면 한 개인이 일생을 살면서 장애인이 되거나 일시적으로 장애를 체험하게 될 확률은 무려 13.5%나 됩니다.저는 적록 색약입니다. 약한 수준의 장애로 분류할 수 있죠. 채도가 낮은 상태의 적색과 녹색을 쉽게 구별하지 못합니다. 충전 중 적색이었다가 완충이 되면 초록색으로 변하는 LED가 박혀있는 전자제품은 전부 망했으면 개선하면 좋겠어요. 전 세계 남성의 8%가 색약이고, 여성은 0.5%가 색약입니다. 대부분 적록 색약이고 마크 저커버그도 적록 색약입니다. 만화가 이현세 선생님도 적록 색약이고요. 한편 색약인 사람은 빛의 밝고 어두움을 구별하는 능력이 뛰어난 것으로 밝혀져 있어 저격과 관측에 탁월한 능력을 발휘합니다. 숨어있는 저격수 빨리 찾기 게임을 해 보세요. 위장 사진 1, 위장 사진 2, 위장 사진 3. 색약인 사람이 이길 것입니다.전맹 시각장애인은 마우스 포인터와 초점을 볼 수 없으므로 키보드만을 사용해서 웹을 탐색합니다. 키보드와 음성 낭독에 의존하지만, 키보드 기능을 정말 잘 다루죠. 그래서 키보드 접근성 문제를 해결하면 시각장애인뿐만 아니라 키보드를 능숙하게 사용하는 사람들의 사용성이 높아집니다. 소수의 특별한 요구사항을 해결하는 것이 모두를 위한 설계와 연결되어 있습니다.결국, 누구에게나 특별히 다른 측면이 있고 그것을 고려할 때 "모두를 즐겁게 하라!"라는 우리의 좌우명에 한 걸음 더 가까워질 수 있다고 믿습니다.도저히 풀 수 없을 것 같은 숙제웹 접근성을 소개할 때 많이 듣는 질문이 있습니다.장애인이 우리 서비스를 이용해요?매출에 도움이 돼요?시간과 비용이 많이 필요하지 않아요?이 질문에 대한 제 대답은 다음과 같습니다.이용한다면 기쁠 것 같아요.큰 도움은 안 될 거예요.조금은 그렇죠. 하지만 반환이 있어요.레진코믹스와 같이 이미지 기반의 콘텐츠를 서비스하는데 웹 접근성을 준수하려고 노력한다는 것은 무모한 도전에 가깝습니다. 왜냐하면, 현재로서는 전맹 시각장애인 고려가 없고 논의조차 쉽지 않기 때문입니다.하지만 달에 갈 수 없다고 해서 일찌감치 체념할 필요는 없겠지요. 쉬운 문제부터 하나씩 풀어 나아가길 기대합니다. 로켓에 올라탔으니까 금방 갈 수 있지 않을까요?W3C 표준을 우리 언어로W3C에서는 WCAG 2.1이라는 웹 콘텐츠 접근성 지침을 제시하고 있고요. 국내 표준 KWCAG 2.1 또한 있습니다. 국내 표준은 W3C 표준에서 중요도가 높은 항목을 우리 언어로 정리한 것이기 때문에 결국 어떤 지침을 선택해서 따르더라도 괜찮습니다.하지만 표준 문서는 너무 장황하고 전문 용어가 많아 다양한 분야 전문성을 가진 직원들과 함께 보기에는 한계가 있다고 생각했습니다. W3C 표준을 근간으로 하되 비전문가도 15분 정도면 읽고 이해할 수 있을 만큼 정리된 문서가 필요했고 레진 웹 접근성 가이드라인 사내 표준을 제안하고 공개하게 됐습니다.의미를 전달하고 있는 이미지에 대체 텍스트를 제공한다.전경 콘텐츠와 배경은 4.5:1 이상의 명도 대비를 유지한다.화면을 400%까지 확대할 수 있다.키보드만으로 조작할 수 있다.사용할 수 있는 충분한 시간을 제공한다.발작을 유발하는 콘텐츠를 제공하지 않는다.반복되는 콘텐츠 블록을 건너뛸 수 있다.모든 문서의 제목은 고유하고 식별할 수 있다.링크와 버튼 텍스트는 콘텐츠의 목적을 알 수 있다.섹션에는 의미있는 마크업과 헤딩이 있다.문서의 휴먼 랭귀지 속성을 제공한다.문맥 변경은 예측할 수 있다.폼 콘트롤 요소에 설명을 제공한다.실수를 예방하고 정정하는 것을 돕는다.HTML 문법을 준수한다.WCAG 2.1 지침의 1.1.1 항목 예를 들어 볼게요.All non-text content that is presented to the user has a text alternative that serves the equivalent purpose, except for the situations listed below. 사용자에게 제공되는 모든 텍스트 아닌 콘텐츠는 아래 나열된 상황을 제외하고 같은 목적을 수행하는 대체 텍스트를 제공한다.원문 표현보다 아래와 같이 다듬은 표현이 좋다고 보는 것이죠.의미를 전달하고 있는 이미지에 대체 텍스트를 제공한다.물론 사내 지침은 너무 단순하게 표현했기 때문에 지침마다 ‘부연 설명, 관련 예시, 기대 효과, 관련 표준, 평가 도구’ 텍스트와 링크를 간략하게 제공하고 있습니다. 사실상 W3C 표준에 대한 링크 페이지라고 생각해도 괜찮습니다. 사실이 그런걸요.맺음말레진 웹 접근성 가이드라인은 사내 유관 부서 담당자분들께 공유하고 동의를 얻어 사내 지침으로 결정하고 공개할 수 있게 됐습니다. 긍정적으로 검토해 주신 사우님들 감사합니다.레진 웹 접근성 가이드라인은 W3C 표준을 요약한 버전에 불과하므로 누구라도 복제(Fork), 개선 요청(Pull Requests), 문제 제기(Issues)할 수 있습니다."Design for all, amuse everyone!"
조회수 4880

트렐로와 슬랙 함께 쓰기

8퍼센트 컨플루언스에 올렸던 내용을 외부용으로 정리해서 다시 올린다.8퍼센트에서는 슬랙과 트렐로를 함께 사용하고 있다. 슬랙은 이제 쓰지 않는 스타트업을 찾기 힘들 정도로 대중적인 커뮤니케이션 도구가 되었다. 트렐로도 소규모 팀의 프로젝트 관리에 항상 손꼽히는 도구 중 하나이다.슬랙은 좋은 커뮤니케이션 도구지만 프로젝트 관리라는 목적에는 당연하게도 적합하지 않다. 해야 할 일들을 정리해두고, 우선순위를 할당하고 프로젝트의 상황을 시각화 하기에 "대화창"은 부족하다. 그래서 우리는 트렐로를 사용한다. 하지만 도구가 늘어나게 되면 항상 그 도구 사이의 역할 구분과 인터페이스를 고민해야 한다.도구간의 인터페이스는 최대한 간단해야 한다. 슬랙을 통해서 누군가가 프로덕트팀에 일을 요청한다고 해보자. 이 일감은 요청자 혹은 담당자가 프로젝트 관리 도구에 등록해야 한다. (지라의 경우 이슈, 트렐로라면 카드) 그리고 일감을 등록할 때 지난 대화들을 정리해서 기록해 주어야 한다. 노력이 많이 들어가는 일이다. 내가 하고 싶지는 않고 누군가가 해주었으면 하는 바람이 생긴다. 특정일을 위한 노력이 많이 들수록 실제로 그 일이 일어나기는 힘들어진다. 다시 말해 일감을 등록하기 위해 많은 노력이 필요할수록 일감은 관리되지 못한다.회사에서 트렐로를 사용하기로 결정 했을 때에도 간단한 인터페이스를 찾아보았지만 찾지 못했다. 그래서 Slash commands를 사용해서 직접 만들어서 사용했다. 기능은 간단하게/trello add 통계 페이지의 투자 금액을 원단 위가 아닌 백만 원 단위로 보여주고 싶어요.명령을 슬랙에 입력하면 프로덕트팀의 트렐로 보드에 카드를 등록해 주는 것이다. 슬랙을 떠나지 않고 해야 할일을 등록할 수 있는 것만으로 편했다. 하지만 프로덕트팀뿐만 아니라 다른 팀들도 슬랙을 통해 카드를 등록하기를 원했고, 또한 프로덕트팀 내에서도 보다 적절한 보드에 카드를 등록하기를 원했다. 조금은 불편하지만 일단 한쪽에 등록하고 주기적으로 카드를 정리하는 방식으로 사용했다.그러다가 얼마 전 슬랙 App Directory 에서 Trello Integration 을 찾았다. (나는 주기적으로 재미있는 슬랙 앱들을 찾아본다) 예전에 검색했을 때에는 트렐로의 변경사항을 슬랙으로 알려주는 것만 있었던 것 같은데 이 새로운 녀석에는 내가 원하던 기능들이 구현되어 있었다. 예전부터 있었는데 내가 못 찾았었던 건지 (그런 것이라면 억울하다!) 아니면 최근에 새로 생긴 것인지는 모르겠다. 설명을 읽어보면 다음과 같은 기능을 제공한다.슬랙에서 "/trello add" 명령을 통해 보드에 카드를 등록할 수 있다.트렐로 카드와 보드에 참가할 수 있고, 듀데이트 변경, 대화 등록등 여러가지를 할 수 있다.채널에 @trello 를 초대하면 URL을 복붙 했을 때 카드와 보드에 대한 프리뷰를 볼 수 있다.슬랙 팀 멤버를 트렐로 팀과 보드에 원클릭으로 초대할 수 있다.야호! 이거다!당장 사용해보기로 했다. 최초로 "/trello" 명령을 사용하면 슬랙과 트렐로의 계정을 연결하게 된다.계정을 연결한 후 "/trello help" 명령을 입력해 보면 다음과 같은 기능들을 볼 수 있다.항상 시작은 우리의 친구 "help" 다위 명령들이 실제로 어떻게 사용되는지 감을 잡기 위해 가상의 시나리오를 만들어서 하나씩 끼워 맞춰 보자.8퍼센트에서 Open API를 만들기로 결정했다. (개인적으로 내가 하고 싶은 일이다)1. 새로운 프로젝트가 시작된다. 프로젝트 리더는 새롭게 트렐로 보드를 하나 생성한다. 이 보드의 이름을 "오예"라고 하자. ('오'픈 '에'이피아이라서 그렇다) 그리고 적절하게 리스트를 만들어 둔다. 보통 할일, 하고 있는 일, 완료된 일의 구분을 사용한다.2. 이 프로젝트에 대한 내용을 논의할 슬랙 채널도 하나 판다. 이 슬랙 채널을 "#openapi"라고 하자.3. "#openapi"에서 카드를 등록하면 "오예" 보드로 등록되기를 원한다. 그렇다면/trello link 오예를 입력해서 슬랙 채널과 트렐로 보드를 연결한다.4. #openapi"에서 등록된 카드는 "오예" 보드의 "할 일" 리스트로 가기를 원한다. 그렇다면/trello set-list를 입력해서 "할 일" 리스트를 선택해 준다. 여기까지 하면 프로젝트를 시작하기 위한 준비가 완료된다.이제 프로젝트가 시작되었다.5.  사람들이 슬랙 채널에서 할 일에 대한 이야기를 나눈다. "채권 리스트를 API를 통해 제공하면 좋겠다"라는 주제로 이야기가 진행되어 개발하기로 결정했다./trello add 채권 리스트를 API를 통해 제공하기명령을 통해 카드를 등록한다.할일이 등록되었다. 신난다.6. 그리고 언젠가 일을 진행할 때 지금의 대화를 기록해 두는 것이 좋을 것 같으니 "Attatch Conversation"을 눌러 둔다. 카드의 설명에서 지금의 대화로 가는 링크가 저장된다.이 일을 누가 시킨것인지 왜 시킨것인지는 대화를 읽어본다.7. 누가 하는 것이 좋을까? 이야기를 나누다가 역시 만만한 내가 하는 것이 좋겠다고 한다./trello assign @hosung을 통해 담당자를 지정한다.8. 담당자까지 지정했으니 언제까지 이 일을 끝낼 것이지를 정해야 한다./trello set-due next Friday at 5pm으로 다음 금요일 5시까지 한다고 정해 둔다.이런 식으로 일감 등록이 완료된다. 실제 개발을 진행 한다.9. 중간중간 대표님이 업무의 진행 상황이 궁금하실 수 있다. 슬랙 채널에 카드의 내용을 보여주기 위해서는 카드의 URL을 복사한 후/trello https://trello.com/c/w7hrzCUa/1-api명령을 사용한다. 그리고  "어떻게 되어가고 있나요?"라고 물어본다. 물론 좀 더 간단하게/invite @trello를 해서 트렐로 봇을 "#openapi" 채널에 초대해 두면 트렐로 커멘드 없이 "https://trello.com/c/w7hrzCUa/1-api"와 같은 URL을 입력하는 것만으로 카드에 대한 프리뷰를 볼 수 있다.10. "어떻게 되어 가고 있나요?"라는 대표님의 질문에 내가 "문제없이 잘 진행되고 있어요."라고 답하면 대표님은"/trello comment 잘 진행되고 있다고 했음(두고 보겠음)"명령을 사용해 트렐로 카드에 코멘트를 등록해 둘 수도 있다.위 시나리오를 살펴보면 슬랙을 떠나지 않고 트렐로에 카드를 등록하고 필요한 정보를 업데이트했다. 물론 이 일 모두는 트렐로에서 크게 불편하지 않게 할 수 있다. 하지만 대화의 콘텍스트를 잃지 않고 일감 관리를 즉시, 적은 노력을 할 수 있다는 것, 그리고 트렐로에 대한 작업들이 슬랙에서 공유가 된다는 것은 생각보다 큰 장점이다.슬랙에서 논의된 내용을 나중에 정리해서 트렐로 보드에 등록해야지 라고 생각했는가? 이제는 그러지 말자. 일단 Trello Integration을 설치해보자.아마 우리 팀 보다 트렐로와 슬랙을 더 잘 쓰는 팀들이 있을 것이다. 이 글을 읽고 조금이라도 도움이 되신 분들은 우리 팀을 위해 하나의 팁을 남겨주면 좋겠다. 그리고 특히 트렐로 비즈니스를 쓰시는 분들은 슬랙과의 추가 기능들을 더 쓸 수가 있는데 후기를 들려주시면 좋겠다.#8퍼센트 #에잇퍼센트 #스킬스택 #트렐로 #Trello #슬랙 #Slack #협업 #협업툴 #팀워크 #협동 #팀플레이
조회수 734

아마존이 판매자인 당신에게 선사한 '황금같은 기회'

안녕하세요 대한민국 셀러들의 성공적인 아마존 진출을 도와주는 컨설팅 회사이자 대행사인 컨택틱의 이이삭 대표입니다.해외 진출을 꿈꾸는 이들은 아마존이라는 시장을 가장 먼저 떠올릴 것입니다. 이미 수년 전부터 기하급수적으로 성장을 하여 전 세계적으로 가장 큰 전자상거래 플랫폼이 된 아마존은 모든 글로벌셀러들이 입점하고 싶어 하는 플랫폼이 되었습니다. 이 글을 읽고 있는 여러분 또한 아마존에 입점할 의사가 있거나 이미 아마존에 입점하여 판매를 진행하고 있는 분들일 가능성이 높다고 생각합니다. 하지만 아마존의 진정한 의미와 가치를 알고 계십니까? 아마존이 있기 때문에, 달리 말해 아마존이 만약 없었다면 저희 글로벌 셀러들은 어떤 어렵고 험난한 방식으로 해외 진출을 해야 했을지 참 많은 분들이 간과하고 있는 것 같습니다. 이번 글은 아마존에 대한 실전 팁 또는 노하우가 아닌, 아마존이라는 시장이 글로벌 셀러인 우리에게 얼마나 귀한 ‘황금 같은 기회’를 제공한 것인지 하나씩 언급하며 설명드리고자 합니다.첫 번째로, 아마존이 없었다면 내 상품이 속한 시장이 과연 어떤 시장인지 조사하는 것이 매우 어려웠을 겁니다. 아마존은 이미 거의 전 세계에 존재하는 그 어떤 상품이라고 하더라도 판매 중입니다. 여러분들이 팔고자 하는 상품 또한 아마존에 이미 형성되어있을 가능성이 매우 높습니다. 아마존을 통해 이미 형성된 특정 세부 시장을 조사함으로써 여러분들은 ‘도박’이 아닌 ‘확신’을 가지고 해외 진출을 할 수 있게 된 것입니다. 아마존상에서 해당 특정 시장에 대한 조사를 통해 여러분들의 상품에 대한 ‘수요’와 ‘공급’을 알 수 있습니다. 아마존이 없었다면 어떻게 내 상품에 대한 시장성 및 경쟁력을 파악할 수 있었을까요? 통계? 오프라인 전시회? 페이스북? 오프라인으로는 제한과 제약이 너무 많습니다. 내 상품에 대한 소비자들의 관심도 (수요), 나와 직접적으로 경쟁하고 있는 브랜드 및 상품들 (공급), 그리고 그런 경쟁사들이 현재 공급하고 있는 현재 상황에서 고객들의 만족도 (틈새) 등을 전문 시장 조사 기업에게 의뢰하지 않는 이상 쉽게 얻을 수 있는 자료가 아닙니다. 그럼 오프라인이 아니라 온라인으로 조사를 한다고 해서 다르다고 생각하면 큰 오산입니다. 페이스북 구글 등을 통해서 시장 조사를 한다고 해서 과연 의미가 있을까요? 페이스북은 본래 SNS 플랫폼입니다. 시장 조사를 한다고 하면 어느 정도 할 수 있겠지만 애초에 만족할만한 조사 결과가 나오는 것 자체가 무리입니다. 구글도 구매 베이스의 검색 엔진이 아니라 순수 정보성 플랫폼입니다. 이런 수단을 통해 시장을 조사하는 것은 잘못된 추론을 할 수 있는 가능성을 가지고 있습니다. 그렇다면 아마존은 어떤가요? 아마존이야말로 사람들이 애초에 사이트에 접속한 순간부터 ‘구매’를 하겠다는 의지를 가지고 오는 사람들의 집합소입니다. 그런 사이트에서 내 상품 및 내 상품이 속한 시장에 대한 데이터를 수집할 수 있다면 그것보다 정확한 결과가 따로 없다는 것은 당연한 사실입니다.두 번째로, 아마존이 없었다면 내 상품에 관심 가질 만한 사람들을 직접 발 벗고 찾아야 했을 겁니다. 아마존은 모든 포커스를 전 세계 고객들을 아마존이라는 플랫폼으로 집중시켰습니다. 고객은 아마존이라는 사이트에 접속하면 본인이 원하는 상품을 손쉽게 구할 수 있고, FBA라는 수단을 통해 심지어 집 앞까지 수월하게 배송을 요청할 수 있습니다. 아마존의 시장 특성상 고객에게 ‘최저가’의 상품을 제공할 뿐만 아니라, 뛰어난 알고리즘과 카탈로그 정리 방식으로, 같은 상품은 1개의 리스팅만 존재하게끔 파격적이고 혁신적인 시스템을 만들었습니다. 이러한 특성을 고려하면 전 세계의 소비자들이 아마존으로 몰리는 것은 어찌 보면 당연한 것입니다. 이런 상황 속에서, 셀러는 단지 소정의 판매수수료를 지불함으로써 이렇게 지상 최고의 플랫폼에 판매할 권한이 생기게 됩니다. 불특정 다수에게 내 상품을 홍보하거나, 인터넷상으로 마케팅 비용을 막대하게 쏟아붓지 않아도, 아마존이라는 플랫폼 자체가 ‘고객을 모아놓았기’ 때문에 단순히 입점하는 것만으로도 판매자는 엄청난 판매 기회를 얻게 되는 것이나 다름없습니다.세 번째로, 아마존은 기업이 브랜딩 할 기회를 제공했습니다. 아마존은 단순히 상품을 판매하는 플랫폼을 넘어, ‘브랜드 자체가 성장할 수 있도록’ 기반을 마련했습니다. 다른 오픈마켓 사이트들과 달리, 아마존은 브랜드 오너들에게 큰 혜택을 제공합니다. 상세 설명을 부각시키게 해주기도 하며, 동영상을 첨부할 수 있게도 해주며, 아마존 안에 브랜드 스토어 (미니 홈페이지)를 만들 수 있게 하는 등, 단순히 많은 제품을 판매하는 것에만 포커스를 두는 게 아니라, 각 브랜드가 성장할 수 있게 하는 일에도 일조하고 있습니다. 실제로 완전히 신생 브랜드임에도 불구하고, 아마존에서 제품에 대한 반응이 좋아 대규모 브랜드로 성장한 사례들이 굉장히 많습니다. 아마존을 통한 브랜딩은 즉, ‘거품 없는, 정말 메리트 있는, 좋은 상품을 취급하는 브랜드들이 아마존 소비자들의 실질적인 구매 경험과 상품 사용 검증을 통해 성장하는 것’이라고 할 수 있습니다. 아마존 소비자들은 ‘좋은 상품’을 구매하고 싶어 합니다. 좋은 상품을 제공할 수 있다면, 그게 비록 신생 브랜드라고 하더라도 아마존은 그들에게 성장할 기회를 제공하는 플랫폼입니다.아마존이 판매자들에게 주는 황금 같은 기회는 위에 언급한 세 가지 외에도 셀 수도 없이 많습니다. 아마존은 완벽한 중개인으로서, 소비자들에게는 최고의 쇼핑 경험을, 판매자들에게는 최대의 판매 기회를 제공하는 플랫폼입니다. 이런 특성을 제대로 이해한 자들만이 아마존에 대한 감사함을 진심으로 느낄 것이며, 아마존이 제공하는 기회를 십분 활용하여 사업을 확장할 수 있을 것입니다. 컨택틱의 모든 교육은 파트너인 글로벌셀러창업연구소와 접수하고 진행합니다. 교육 신청은 아래 링크나 글로벌셀러창업연구소의 홈페이지를 통해 접수 가능합니다.컨택틱의 모든 교육은 파트너인 글로벌셀러창업연구소와 접수하고 진행합니다. 교육 신청은 아래 링크나 글로벌셀러창업연구소의 홈페이지를 통해 접수 가능합니다.오프라인 아마존 입문 과정오프라인 아마존 기초/심화 과정온라인 아마존 입문 과정그럼 오늘도 즐거운 글로벌 셀링 되세요!감사합니다.컨택틱서울특별시 서초구 서초대로 356, 606호(서초동, 서초지웰타워)대표 전화: 02-538-3939이메일: support@kontactic.com홈페이지: https://www.kontactic.com네이버 블로그: https://blog.naver.com/kontactic카카오 브런치: https://brunch.co.kr/@allaboutamazon유튜브 채널: https://www.youtube.com/c/kontactic
조회수 1610

Amazon SageMaker는 처음이지?

Overview브랜디 랩스를 사랑해주시는 여러분, 안녕하세요. 개발자 오-연주입니다. 지난 4월, Brandi Back-end 개발자 분들과 코엑스에서 열렸던 AWS Summit(04.18 - 04.19)에 다녀왔습니다!여러 세션을 듣는 와중에 우연히 AI machine learning 를 쉽게 도와주는 Cloud Machine learning Flatform인 Amazon SageMaker에 대해 들었습니다. 듣던 중 머닝러닝에서 학습을 시켜 그 데이터로 ‘Brandi 서비스와 연관지으면 어떨까’ 라는 생각을 했는데요. 그래서 오늘은 많은 분들의 관심사인 머신러닝 학습관련 Amazon Amazon SageMaker에 대한 글을 쓰려고 합니다.sage는 마법사, 현자라는 의미입니다.sageMaker를 create하자!“자, 퐈이팅 넘치게 신나게 sagemaker를 create해볼까요!” 했는데…Seoul Region이 없다!현재 지원되는 리전은 아직 네 군데입니다. 저는 제일 있어 보이는 미국 동부의 버지니아를 선택하겠습니다.1] EU (Iceland) 2] US West (Oregon) 3] USEast (N. Virginia) 4] US East (Ohio)SageMaker를 create하기 전에는 학습할 데이터와 학습 모델을 저장할 S3 Bucket이 필요합니다.1. Default 값으로 S3를 만드세요.중요한 점은, bucket 이름이 “sagemaker-” 로 시작되어야 한다는 것입니다. 그래야 나중에 notebook instance가 어느 곳에 데이터를 저장할지 알 수 있습니다.Next, Create bucket 버튼을 누르다 보니, S3 Bucket이 생성되었습니다.2. Create notebook instance 버튼을 눌러 SageMaker를 만들어 봅시다!원하는 이름을 지어줍니다. 저는 machineLearningTest 라고 지었어요. IAM role 선택하는 부분에서 None을 눌러 Default 값으로 sageMaker를 만듭니다.인고의 Pending 시간3. Pending이 끝나고 “open” action을 선택하면 Jupyter가 열립니다.Jupyter(Jupyter Notebook)는 오픈 소스로 라이브 코드, 등식, 코드에 대한 시각화를 위해 사용됩니다. 또한 description을 위한 텍스트 문서(마크다운 등)를 지원하는 웹 어플리케이션입니다. 이렇게 하면 코드에 대한 문서화가 가능합니다. 이 글에서는 Jupyter Notebook을 통해 데이터를 학습하고, 그 데이터를 테스트하겠습니다. 제가 진행한 전체 코드 스크립트(entire script)는 이 글의 마지막 부분에 기술있으니 참고해 주세요.자, 이제 드디어 머신러닝 학습을 시킬 차례입니다. 머신러닝 학습에 꼭 필요한 키워드 두 가지를 뽑아봤는데요. - Dataset: 정제된 데이터와 그 데이터에 대한 label을 정리해 놓은 데이터 모음      - Machine learning Algorithm: 기계학습 알고리즘 우리는 MNIST 데이터셋을 k-means 알고리즘으로 학습시킬 겁니다.1)MNIST Dataset기계학습 알고리즘을 사용할 때 가장 기본적으로 테스트하는 데이터셋으로 MNIST 데이터셋이 있습니다. 이것은 사람이 0부터 9까지 숫자 중 하나를 손글씨로 쓴 이미지 데이터와, 해당 이미지에 대한 레이블(0 - 9)이 6만 개 들어있는 학습 데이터셋입니다. 각 이미지는 가로와 세로가 각각 28 픽셀로서, 각 픽셀은 0부터 255 사이의 숫자가 있습니다. 다시 말해, 하나의 이미지는 28 x 28 = 784개의 숫자로 이루어진 데이터입니다. 하나의 이미지를 나타내는 데이터의 array > length가 784라고 표현할 수 있겠네요.MNIST dataset2)k-means지금 만든 SageMaker 학습 알고리즘은 AWS 튜토리얼에서 제시한 K-means를 사용할 예정입니다. k-means는 label 없이, 즉 정답을 모르는 상태로 학습을 하는 비지도 학습 (unsupervised learning) 알고리즘 중 가장 쉽고 많이 쓰입니다. 정답을 모르니, ‘비슷한 애들끼리 뭉쳐봐’ 라고 하고, 알고리즘은 비슷한 친구들끼리 뭉쳐 놓습니다. k-means에서 k는 ‘k개 덩어리로 뭉쳐주세요’라고 제시하는 숫자입니다. 우리는 0부터 9까지 비슷한 친구들끼리 모이게 하고 싶으니 k=10을 쓸 겁니다.지금부터 해야 할 TO DO!1. MNIST 데이터셋을 다운로드받고, 우리가 학습시키기 좋도록 정제하기(preprocessing)2. Amazon SageMaker를 통하여 데이터 학습시키기(training job)3. Amazon SageMaker를 통하여 학습된 데이터를 배포하기(Deploy the model)4. 배포된 모델에 요청을 보내 테스트 데이터에 대한 예측값을 받아오기(inference)4. Jupyter 노트북 인스턴스 생성하기Jupyter에 New Notebook(conda_python3)을 선택해 새로운 노트북을 생성합니다.5. 학습시키기 위한 기본 셋팅드디어 코딩 시작입니다! (의욕활활) 초기 설정해두었던 IAM role, S3 Bucket, MNIST 다운로드, 다운받은 데이터 등을 확인하세요. 글보다 코드로 주석을 보는 게 가독성이 더 좋습니다. 아래 노트북을 통해 마크다운, 주석처리를 통해 description을 해두었으니 참고 바랍니다.외부에서 MNIST 다운로드가 쉽도록 한 url로 MNIST를 다운받는데 성공했습니다. MNIST 데이터셋 내용물 중 하나를 jupyter notebook에 그려서 제대로 다운 받았는지 show_digit() 함수를 작성해 확인하겠습니다.서른 번째 데이터는 누군가 3을 손글씨로 쓴 이미지입니다.6. 머신러닝 학습하기이 세션에서는 기계학습 알고리즘 설정, 학습할 데이터 경로를 지정하겠습니다. 그 후 MNIST 학습 데이터를 S3 버킷에 옮겨 저장합니다.kmeans.fit() 함수를 호출해 직접 학습을 시켜볼까요? 학습 과정은 상당히 오래 걸린다고 했는데 다행히 4분 만에 학습이 끝났습니다.여기서 잠깐! 여기서 k = 10에 대해서 조금 더 알아보도록 할게요. cluster란 한 지점에 점을 찍고 데이터 분석을 한 뒤, 비슷한 데이터들의 군집을 만들어 주는 것입니다. k-means가 진행되면서 각 cluster의 중심이 서로가 잘 뭉치는 방향으로 이동합니다. 직접 그려봤어요(부끄).7. 학습된 모델을 배포하기학습을 시키면 테스트를 하거나 사용할 수 있어야겠죠? 학습된 모델을 배포해 주세요.8. 배포된 모델 테스트 진행하기배포된 모델에 valid_set 데이터로 검증 데이터를 진행합니다..predict() 함수를 호출하면 새로운 이미지가 어떤 cluster에 속했는지 예측 결과를 알려줍니다. 가장 가까운 cluster가 0번이라고 예측 결과를 반환했네요. 또한 cluster 중심과의 거리는 5.85라고 알려줍니다. 여기서 중요한 점은 cluster 번호와 실제 숫자는 일치하지 않는다는 겁니다. 알고리즘은 임의로 cluster 중심에 번호를 매기는데, 꼭 0번 클러스터가 숫자 ’0’을 뭉쳐놓은 건 아니에요!9. 데이터 예측해보기더 많은 데이터를 예측해볼까요? valid set에 있는 100개 데이터를 예측해봅시다! 각 cluster에 가까운 데이터들이 쭉 선정되었습니다. 정확하지는 않지만 비슷한 숫자 모양들이 서로 군집되어 나타납니다. 0과 2같은 숫자들은 잘 표현되지만, 알고리즘이 9랑 4를 헷갈리거나 5와 3을 헷갈리는 듯 하네요.FASHION MNIST로 SageMaker 머신러닝 학습 및 예측해보기자, 이제 몸도 풀었으니 제가 하고 싶었던 패션 관련 머신러닝 학습 및 예측을 진행해볼게요. 마침 옷 그림으로 MNIST와 매우 비슷한 데이터를 만들어 놓은 fashion-MNIST라는 데이터셋을 발견했어요!1. 패션 관련 MNIST 다운로드 받기패션 MNIST 데이터셋을 우선 다운받아 볼게요! 다운로드는 여기에서 받을 수 있습니다. 총 네 개의 파일을 다운로드 받으세요.- train-images-idx3-ubyte.gz : train set 이미지  - train-labels-idx1-ubyte.gz : train set 레이블  - t10k-images-idx3-ubyte.gz : test set 이미지  - t10k-labels-idx1-ubyte.gz : test set 레이블  다운로드 받은 패션 Mnist의 label은 아래와 같이 되어 있습니다. 숫자 0부터 9 대신에 각 이미지가 어떤 이미지인지 텍스트로 표현되어 있어요.LabelDescription0T-shirt/top1Trouser2Pullover3Dress4Coat5Sandal6Shirt7Sneaker8Bag9Ankle boot2. Fashion-MNIST 데이터셋을 이전에 사용했던 mnist.pkl.gz 와 같은 형태로 변환해주는 스크립트 작성해주기위에서 연습할 때는 mnist.pkl.gz 한 개 파일만 사용했는데요!?! 그래서 다운로드 받은 네 개의 파일을 똑같은 형식의 파일 하나로 만들어주는 파이썬 스크립트를 작성해 fashion-mnist.pkl.gz 파일로 만들었어요.import gzip import pickle import numpy as np # MNIST 데이터셋은 train, test 셋이 각각 image, label로 나누어 저장되어있는 4개의 파일로 구성 test_image_path = 't10k-images-idx3-ubyte.gz' test_label_path = 't10k-labels-idx1-ubyte.gz' train_label_path = 'train-labels-idx1-ubyte.gz' train_image_path = 'train-images-idx3-ubyte.gz' out_file_name = 'fashion-mnist.pkl.gz' # train label / images 추출 with gzip.open(train_label_path, 'rb') as train_label_f:     train_label = np.frombuffer(             train_label_f.read(), dtype=np.uint8, offset=8).astype(np.int64)   with gzip.open(train_image_path, 'rb') as train_image_f:     train_imgs = np.frombuffer(             train_image_f.read(), dtype=np.uint8, offset=16).reshape(-1, 784).astype(np.float32)   # test label / images 추출 with gzip.open(test_label_path, 'rb') as test_label_f:     test_label = np.frombuffer(test_label_f.read(), dtype=np.uint8, offset=8).astype(np.int64)   with gzip.open(test_image_path, 'rb') as test_image_f:     test_imgs = np.frombuffer(             test_image_f.read(), dtype=np.uint8, offset=16).reshape(-1, 784).astype(np.float32)   # 기존 60000개 training set에서 50000개는 train set으로 사용하고, 10000개는 valid set으로 활용 train_label, valid_label = train_label[:50000], train_label[50000:]  train_imgs, valid_imgs = train_imgs[:50000], train_imgs[50000:]   # train set, validati on set, test set을 튜플 자료형으로 저장 out_data = ((train_imgs, train_label),             (valid_imgs, valid_label),             (test_imgs, test_label))   # pickle file로 dataset 데이터 포맷 맞춰주기 with gzip.open(out_file_name, 'wb') as out_f:     pickle.dump(out_data, out_f) 이 과정을 통해 나온 결과물, fashion-mnist.pkl.gz 를 Jupyter Notebook이 있는 경로에 업로드합니다.fashion-mnist.pkl.gz가 업로드 되었습니다!3. 머신러닝 학습하기아까 사용했던 활용했던 숫자 MNIST 스크립트를 그대로 사용하겠습니다. show_digit()을 이름만 바꾼 show_fashion()으로 데이터를 살펴보니 드레스가 보입니다.조금 전에 했던 숫자 MNIST와 똑같은 과정을 SageMaker를 이용해, 학습 → 테스트 → 예측해보니 아래와 같은 예측 결과를 얻을 수 있었습니다. 신발은 신발끼리, 바지는 바지끼리, 가방은 가방끼리 분류된 게 너무나 신기합니다. (아까 진행한 숫자보다 더 학습이 잘 된 것 같은건 기분 탓일까요…?)머신러닝이라고 겁내지 않아도 됩니다! 유저들에게 더 좋은 서비스 제공할 수 있으니까요. 지금까지 브랜디 개발2팀의 단아한 개발자 오연ㅈ….참사를 막아주세요.앗, 잠시만요!! 중요한 것을 놓칠 뻔 했네요.저처럼 테스트를 하면 그냥 지나치지 마세요. 자동 결제로 출금되는 뼈 아픈 경험을 할 수도 있습니다. 반드시 이용했던 서비스들을 stop 하거나 terminate 해주세요. (Clean-up단계) 자세한 내용은 여기를 클릭하세요.지금까지 Brandi 개발 2팀, 단아한 개발자 오연주였습니다!# entire script (숫자 Mnist) # 오호 드디어 coding start! # 이제부터 Brandi의 단아한 개발자, 저를 따라오시면 됩니다 :) # 노트북 Block을 실행하는 방법은 Shift + Enter 입니다 from sagemaker import get_execution_role role = get_execution_role()  # 초기에 설정해 뒀던 IAM role 가져오기 bucket = 'sagemaker-julie-test' # 초기 단계에 만들었던 S3 Bucket 이름 적기 %%time import pickle, gzip, numpy, urllib.request, json   # 여기서 잠깐, 생소한 라이브러리 설명을 드릴게요! # pickle: python식 데이터 압축 포맷 # numpy: 수치 계산을 하기 위한 python package # Load the dataset urllib.request.urlretrieve("http://deeplearning.net/data/mnist/mnist.pkl.gz", "mnist.pkl.gz") with gzip.open('mnist.pkl.gz', 'rb') as f:     train_set, valid_set, test_set = pickle.load(f, encoding="latin1")     # matplotlib로 그리는 그림이 jupyter 노트북에 바로 보여줄 수 있도록 설정 %matplotlib inline import matplotlib.pyplot as plt # 도표나 그림을 그릴 수 있게 해주는 라이브러리 plt.rcParams["figure.figsize"] = (2, 10) # 그림의 크기 지정 def show_digit(img, caption='', subplot=None):     if subplot is None:         _,(subplot) = plt.subplots(1,1)         imgr = img.reshape((28, 28))     subplot.axis('off')     subplot.imshow(imgr, cmap='gray')     plt.title(caption)   # train_set의 그림과[0] 데이터 이름[1]을 예시로 보여준다 show_digit(train_set[0][30], 'This is a {}'.format(train_set[1][30]))   # 학습을 하기 위해 학습 알고리즘 및 데이터 경로 설정! from sagemaker import KMeans data_location = 's3://{}/kmeans_highlevel_example/data'.format(bucket) output_location = 's3://{}/kmeans_example/output'.format(bucket)   print('training data will be uploaded to: {}'.format(data_location)) print('training artifacts will be uploaded to: {}'.format(output_location))   kmeans = KMeans(role=role,                 train_instance_count=2,  # 장비 2대를 사용하여 학습하겠어요!                 train_instance_type='ml.c4.8xlarge',                 output_path=output_location,                 k=10,  # 아래 그림을 참고해 주세요!                 data_location=data_location) %%time   # 학습 시작! kmeans.fit(kmeans.record_set(train_set[0]))   %%time # 모델을 만든 후 사용하기 위하여 배포하기 kmeans_predictor = kmeans.deploy(initial_instance_count=1,                                 instance_type='ml.m4.xlarge')                                  # valid_set에 30번째 sample을 테스트 해보기 result = kmeans_predictor.predict(valid_set[0][30:31])  print(result)   %%time   # vaild_set에 있는 0번부터 99번까지의 데이터로 cluster를 예측 해보자 result = kmeans_predictor.predict(valid_set[0][0:100])   # 예측 결과에 대한 cluster 정보를 수집 clusters = [r.label['closest_cluster'].float32_tensor.values[0] for r in result]   # 각 cluster별 예측된 이미지 출력 for cluster in range(10):     print('\n\n\nCluster {}:'.format(int(cluster)))     digits = [ img for l, img in zip(clusters, valid_set[0]) if int(l) == cluster ]     height = ((len(digits)-1)//5)+1     width = 5     plt.rcParams["figure.figsize"] = (width,height)     _, subplots = plt.subplots(height, width)     subplots = numpy.ndarray.flatten(subplots)     for subplot, image in zip(subplots, digits):         show_digit(image, subplot=subplot)     for subplot in subplots[len(digits):]:         subplot.axis('off')     plt.show() 출처Getting Started - Amazon SageMaker CodeOnWeb - 머신러닝 초보를 위한 MNIST fashion-mnist 글오연주 사원 | R&D 개발2팀ohyj@brandi.co.kr브랜디, 오직 예쁜 옷만#브랜디 #개발문화 #개발팀 #업무환경 #인사이트 #경험공유
조회수 2073

프로세스 마이닝과 AI를 통한 프로세스 혁신

지난해 이세돌과 알파고의 대결 이후에 인공 지능 (AI)과 기계 학습은 국내에서 많은 대중들의 관심을 얻어 중요한 추진력을 얻었으며, 모든 산업 분야의 기업들이 해당 기술을 빠른 속도로 계속 적용하여 사용하는 비중이 더욱 높아졌습니다. 실제로 Gartner는 2022년까지 스마트 머신과 로봇이 고학년 전문직 분야를 대체할 수 있을 것으로 내다봤으며, 심지어는 인공지능이 경영자 CEO도 대체 가능할 것인지에 대한 논의도 일어나고 있습니다. 이것은 사람이 과거 경험에 의해서 의사 결정을 내리 듯이 인공 지능도 확보한 데이터를 기반으로 의사 결정 모델을 만들 수 있다는 유사성에 기반합니다.  인공 지능에 의한 의사 결정은 사람한테 종종 있을 수 있는 감정이나 개인적 이해관계 및 관례에 의해 불합리한 판단에서 벗어나 데이터의 의한 객관적 판단을 할 수 있다는 장점이 있습니다.여기서 중요한 것은 인공지능이 학습하기 위한 “데이터”입니다.  지금까지 머신러닝이 막대한 이미지, 음성, 영상 데이터를 축적한 후 해당 데이터의 특징을 추출하여 패턴을 학습하여 자연어 처리 등을 통해 사람처럼 인식하여 분류하거나 상황을 판단하였듯이 기업 내 여러 가지 업무 활동에 머신 러닝을 적용하기 위해서는 이와 마찬가지로 관련 데이터가 필요합니다.제조 분야의 공정 관리, 공공 서비스, 물류 공급망 관리 등 전통적인 기업 내 업무 프로세스는 인공 지능에 의한 자동화과 효율화를 통해 혁신이 필요한 분야입니다. 기존에 외부 협력 업체로부터의 납기 예측, 소요되는 자재 인력 등 리소스 산정, 생산 스케줄, 장비 파라미터 입력값 등은 사람에 의해 수작업으로 진행 시 몇 주에서 수개월 소요되었지만, 인공 지능과 기계 학습 기반의 솔루션 도움으로 정확하게 지속적인 추세를 인식하고 인간의 개입 없이 데이터 중심의 결정이 가능해집니다.지금까지 기업 내 축적된 엄청난 양의 데이터를 활용하여 여러 산업 분야에서 숨겨진 패턴과 상관관계, 이상 징후 및 불량 탐지, 고객 수요 예측 등이 시도되었습니다. 하지만 이러한 시도들은 기업 내 문제 요인을 파악하여 우선적으로 어떤 부분에 초점을 맞추어 개선을 해야 하는지 알아야 하므로, 기업 경영 활동 전반에 걸쳐 돌아가는 판세를 읽는 노력이 필요합니다. 하지만, 기업 내에서 이뤄지고 있는 프로세스는 충분히 복잡하여, 개별 단위 작업의 전문가들은 존재하겠지만, 각 개별 부서, 구성원, 시스템 간에서 발생하는 다양한 상호작용과 이에 따른 예외 상황이 존재하여 이를 파악하기가 쉽지 않습니다.프로세스 마이닝은 데이터 기반의 프로세스 분석을 통해 문제 부분을 파악하여, 실제 인공 지능이나 머신 러닝을 적용하여 개선할 부분을 찾을 수 있도록 도와줍니다. 그리고, 프로세스 개선을 위해 머신러닝을 적용하기 위해서는 앞서 말한 것처럼 “데이터”가 학습될 수 있는 형태의 기반을 제공합니다.아래 그림과 같이 이벤트 로그를 기반으로 프로세스 모델을 생성하고, 수집된 패턴들과 각 분기 단계에서의 주요 성과 지표들을 디지털화하여 인공지능이 이해할 수 있는 형태로 축적합니다 이렇게 축적된 프로세스 패턴 데이터를 가지고 알파고가 최적화된 다음의 한 수를 예측하듯이 프로세스 마이닝은 인공 지능 기술과 결합하여 과거 프로세스에 대한 이해뿐만 아니라, 현재 시점에서 앞으로의 프로세스를 예측하여 합리적인 의사 결정을 도와줄 것입니다.#퍼즐데이터 #개발팀 #개발자 #개발후기 #인사이트
조회수 3105

하늘 아래 같은 레드는 없다

초록색 = 스타벅스주황색 = 나이키노란색 = 이마트다들 한 번쯤은 특정 컬러를 보았을 때 자연스럽게 그 컬러를 사용하는 브랜드가 떠오르는 경험을 해보셨을 거예요. 이처럼 컬러가 브랜드에 미치는 영향은 대단합니다. 브랜드 컬러는 브랜드 아이덴티티를 확실하게 전달함은 물론 구매에 까지 영향을 미치기 때문이죠.데일리의 서비스 앱 '데일리호텔(DAILYHOTEL)'은 브랜드 컬러로 '버건디'를 사용하는데요. 브랜드 가이드를 제작하던 중 이 '버건디'컬러의 Align 필요성을 느끼게 되었습니다. 브랜드 컬러의 영향이 막중한 만큼 그 컬러의 일관성 또한 매우 중요하기 때문이죠. 더군다나 데일리처럼 온(RGB)/오프라인(CMYK)으로 컬러를 사용하고, 넓은 영역과 앱 내의 좁은 영역에서 쓰이는 컬러 값을 다르게 설정하는 경우 각 플랫폼의 컬러 통일화 작업은 매우 중요합니다.(*면적에 따라 달리 적용되는 컬러 값 관련 참조 글 : https://brunch.co.kr/@suyoung/8)AS-IS 파악본 프로젝트를 진행할 당시 데일리의 브랜드 컬러는 #900034 였습니다. 하지만 앞서 말했듯이 넓게 보이는 영역과 작게 보이는 영역에서 컬러 값을 다르게 가져가야 하는 이슈로 진작 앱 내에서는 #b70038이 사용되고 있었죠. 또한 오프라인으로 출력 시에 인쇄용 CMYK값이 아닌 웹용 RGB Hex인 #900034를 그대로 출력하여 버건디가 아닌 어두운 갈색으로 출력이 되고 있었습니다.앱 내의 컬러 재정의(In-App Color)1. 앱 내에 버건디 컬러가 사용되는 부분버건디 컬러는 자체가 강한 컬러이기 때문에 앱 내에서는 CTA 버튼으로 가장 많이 사용되고 있습니다. 모든 화면에 강조색을 과하게 사용할 경우에 눈에 피로도를 주어 콘텐츠에 집중할 수 없는 이슈가 있기 때문이죠. 현재 앱의 내비게이션 바 색상을 흰색으로 처리한 이유도 그 때문입니다.2. 이전 이슈사항아이폰과 안드로이드의 환경이 다르기 때문에 같은 색상일지라도 두 디바이스를 함께 두고 같은 화면을 보았을 경우 색상 차이가 발생합니다. 특히 안드로이드의 경우 기존에 사용하던 #900034 컬러를 적용할 시 어두운 갈색으로 보이는 경우가 있어, CTA 버튼 컬러로 사용 시에 버튼에 대한 명확도가 떨어져 역할에 부족함이 있었습니다.3. 대응사항각기 다른 안드로이드 단말마다 모두 다른 색상을 가져갈 수 없는 문제이기에 어떠한 디바이스던 버건디 색상이 명확하게 보일 수 있도록 다양한 디바이스를 모아 테스트를 거쳐 명도를 밝게 뺀 최적의 버건디 컬러를 뽑았습니다. 앱 적용시 화면프로덕트 자체가 모바일 기반 서비스인 페이스북, 구글의 CI도 모바일이나 웹 환경에서 더욱 가독성이 있어 보이도록 계속해서 CI 컬러를 리뉴얼하고 있습니다. 아래처럼요.(*관련 기사 링크 : http://m.zdnet.co.kr/news_view.asp?article_id=20150702091741#imadnewshttp://m.businesspost.co.kr/news/articleView.html?idxno=16798&daum_check=&naver_check=#cb)모바일 기반 타사 브랜드 컬러 리뉴얼 예시4. 결론기존 안드로이드 디바이스에서 #900034 버건디 컬러가 팥색으로 보이던 이슈로 인해 안드로이드, 아이폰 모든 디바이스에 사용하기 좋은 컬러로 재정의하여 #b70038로 새로운 컬러 값을 지정하였습니다.(짝짝)앱 아이콘 컬러 재정의(App Icon Color)물론 예외적인 부분도 존재합니다. 바로 앱 아이콘 컬러의 경우인데요. 현재, 다른 앱 아이콘들과 함께 쓰이는 홈 스크린 화면에서는 다른 앱 아이콘과 함께 데일리호텔 앱에 돋보일 수 있도록 #70038보다 더 밝은 #d1004 c를 사용합니다.이유는 제일 왼쪽의 이미지처럼 기존 컬러 #900034를 사용할 경우, 다른 아이콘들과 비교했을 때 주목성이 약해지게 되므로 아이콘으로써의 역할을 잃기 때문입니다. 많은 서비스들이 앱 내에서 사용하는 지정 컬러가 있지만, 다른 아이콘과 함께 사용되는 홈 스크린 아이콘은 더 밝고 튀는 색상으로 가져가고 있습니다.타사 예시출력용 CMYK 컬러 재정의(Offline Color)모니터에서 사용되는 RGB 컬러를 CMYK로 변환 과정을 거치지 않고 그대로 출력할 경우 색상은 매우 다르게 표현됩니다. 때문에 RGB 값에 맞추어 출력 시에 동일할 수 있도록 CMYK값과 PANTONE값을 따로 추출해야 하죠. 하지만 출력 기계와 인쇄소의 여건에 따라 동일한 CMYK값을 지정한다고 해도 미세하게 다른 컬러로 출력된 것을 받아보기 마련인데요. 이런 이유로 어느 환경에서도 동일한 컬러로 출력할 수 있도록 제작된 컬러칩 PANTONE이 있습니다. 아래는 팬톤 컬러로 테스트를 한 경우입니다.PANTONE컬러를 맞추기 전과 후출력물로 컬러 테스트 결과 PANTONE 1945 c가 새롭게 정의된 브랜드 컬러인 #b70038와 가장 흡사함을 확인할 수 있었습니다. 해서 데일리호텔의 브랜드 컬러는 아래와 같이 재정의 되었습니다.버건디의 친구(Secondary Color)데일리의 브랜드 컬러인 '버건디'가 재정의 되었습니다. 그리고 그 '버건디'는 친구가 필요했어요. 혼자 쓰이기에는 너무 임팩트가 약하고 전달하고자 하는 메시지가 잘 공유되지 않았기 때문이죠.1. Product하지만 앱 내에서 사용되는 컬러는 실질적으로 Main(버건디), Second(골드) 두 가지가 주로 사용됩니다. 또한 홈 화면에 호텔/레스토랑의 등급을 알려주는 뱃지에 사용되는 컬러는 여러 가지로 베리에이션이 되어야 하기 때문에 제한적인 컬러를 사용할 수 없는 이슈가 있었습니다.다양한 컬러로 사용되는 앱내 뱃지 예시2. Brand / Marketing기업 굿즈와 옥외광고 등 데일리호텔의 브랜딩이 노출되는 곳에는 응용을 위해 Second 컬러를 제외한 Accent 컬러가 필요했습니다. 하지만 앱 내에 보이는 이벤트 페이지는 기획전 성격과 이미지에 따라 컬러가 자유롭게 사용되기 때문에 지정된 컬러를 사용하기에는 어려운 이슈가 있었죠.Accent 컬러 적용 예시Second/Accent 컬러 적용이 다소 어려워 보이는 마케팅 컨텐츠의 예시3. 결론- 예외적으로 Brand / Marketing에 사용되는 Accent Color를 따로 선정- Main(버건디), Second(골드)를 공통적으로 사용하되 프로덕트와 브랜드(온/오프라인)에 사용되는 컬러 값은 다르게 적용(*넓은 영역과 좁은 영역에서 다르게 사용되는 컬러 값 이슈)확립된 데일리의 브랜드 컬러!이런 과정으로 지금의 데일리 컬러 '버건디'가 탄생했습니다. 어찌 보면 단순해 보이지만 많은 테스트를 거쳐 유저들에게 최적의 상태로 표현되기 위해 노력하고 있답니다.(!)앞으로 이런 데일리의 노력 많이 지켜봐주세요 :)진행In-App Color/App Icon Color : Product팀Offline Color/Secondary Color : Creative팀#데일리 #데일리호텔 #디자인 #디자이너 #UI #디자인철학 #인사이트
조회수 75

운명의 매치 바로고 체육대회 <흑팀vs백팀> 그 승리의 결과는?

운명의 매치바로고 체육대회바로고 흑팀 vs 백팀신관과 별관으로 나누어흑팀과 백팀으로 구성하여바로고 체육대회가 개최되었습니다. 이번 체육대회는협동심과 팀워크를 증진하며바로고 동료들 간소통과 화합을 도모하는 자리입니다.팀별 운영비가 걸려있는 만큼치열한 전투가 예상됩니다!신관 : 별관흑팀 vs 백팀흑팀사업총괄본부전략기획본부백팀인프라 관리 본부재경본부O2O 연구소-자,지금부터 흑팀과 백팀의운명의 매치가 시작됩니다.am09:00바로고 임직원이 모두 참여하여더욱 의미가 있는 체육대회가벼운 스트레칭으로체육대회를 시작합니다.아침에 하는 운동은건강을 위해서도 아주 좋다고 하죠~스트레칭 중 아직잠에서 깨어나지 못한 모습 포착!이제 본격적으로 대회가 시작되는 만큼잠에서 깨어나 봅시다!-배점: 10점워밍업으로 시작한첫 번째 대결은단판으로 결정짓는가위바위보가위바위보이것이 뭐라고모든 직원이 초 집중하여가위바위보를 외칩니다!매일 아침바쁜 출근길정신없는 하루의 시작대신오늘만큼은가위바위보여기에 나의 아침 집중력을 모두 발휘해봅니다..단판승으로흥미진진한가위바위보 게임은백팀의 승리!첫 승리를 가져갔어요~축하합니다!아침부터 푹푹 찌는 무더위에지치면 안 돼요!본격적인 대결은 지금부터 시작입니다.백팀! 파이팅팅!첫 번째 가위바위보 대결은아쉽게 패했지만다음에는 승리를 기원하며파이팅하는 흑팀!힘내보아요~^.^-배점: 10점두 번째 대결은제기차기였습니다.한때 제기 좀 차 본 사람들모두 모두 모여랏!흑팀은 벌써 파이팅을 외치고 있어요.1차전을 가볍게 승리로 장식한백팀은여유 있는 미소로 파이팅!제기차기의 멤버는상대편 여직원들이 선택한멤버로 구성되었습니다.본격적인 제기차기지금 시작합니다. 흑팀의 제기차기뒤로차기앞으로 차기옆으로 차기다양한 모습으로 제기 차는 모습을감상하고 계십니다.백팀의 제기차기백팀의 제기는발에 붙어서 떨어지지 않았어요.제기차기의 신으로 등극!제2차전으로 치러진제기차기 역시백팀의 승리!"축하드립니다!"-배점: 10점세 번째 대결로전투 피구가 시작되었습니다.일명"여왕을 지켜라!"여자 한 명을 보호하는피구 게임!여왕이 아웃되면팀이 지게 되는여왕을 지키는 피구 게임 입니다.흑팀과 백팀의 여왕어떤 팀이 끝까지 여왕을 지킬 수 있을까요?결과는백팀의 승리!연속 세 게임을 모두백팀이 승리로 가져갔습니다.-배점: 20점전투 농구는15분씩 2쿼터로 진행됩니다.한 팀은 5명으로 구성되어기존의 농구 규칙과 동일하게 시합이 치러집니다.이번 농구게임의 승리4연승으로 백팀이 가져가게 될까요?흑팀이 첫 승을 거두게 될까요?절대적 우세인 백팀절대적 약세인 흑팀하지만 왠지 손에 땀을 쥐게 하는경기 결과가 넘나도 궁금합니다.압도적인 점프력으로농구공을 처음부터 후려치던백팀의 승리 소식을전해드립니다.흑팀 : 백팀0: 50농구까지 승리하면서4연승을 달리고 있는 백팀배점 스코어한 번에 뒤집을 수 있는 기회가 있다~그것은 바로 다음 경기축구입니다.축구는 이 모든 경기 결과를 뒤집을 수 있는35점의 배점을 가지고 있습니다.한 팀의 구성은14명의 남자 선수 +1명의 여자 선수여자 선수는 손을 이용하여 플레이 가능한 규칙 적용본격적인 전투 축구를 시작합니다.게임을 시작하면서양 팀의 선수들이 서로 악수를 나누고 있습니다.웃고 있지만절대 양보할 수 없는한 판 승부!축구 게임은20분씩2쿼터로 나누어 진행됩니다.50점이 걸려있는아주 중요한 게임인 만큼치열한 접전이 예상됩니다.여기서 흑팀이 이기게 되면50:50 운명의 매치바로고 체육대회는 무승부로 끝나지만백팀이 이기게 되면5연승으로0:100완승을 하게 됩니다.그래도 빠질 수 없는포토타임!경영지원본부에 계신 멋진 유영수 이사님베스트 포토제닉으로 임명합니다~시작하자마자빠른 발놀림을 자랑하는선수들~바로고 직원들이이렇게 축구를 잘하는 줄미처 몰랐어요~화려한 드리블로숨겨두었던축구 재능을 맘껏 발휘합니닷!전승을 위해 달리는백팀의 선수들!공중에 떠오른 볼을 장악하기 위해백팀의 선수가 뛰어오릅니다.하지만 이대로 경기를 끝낼 수 없는흑팀의 반격이 시작되었습니다.드디어 골대 앞까지!슈우웃!~~~~~~~"골인"흑팀이 선취점을 가져갑니다.의기소침했던흑팀의 응원이 살아납니다.-이대로 경기는 끝!축구 경기의 승리를 흑팀이 가져가면서최종 스코어50:50무승부로 운명의 매치바로고 체육대회를 마칩니다.BEST 커플샷부러워하지 말아요.부러우면 지는 거예요~바로고체육대회마무리는 훈훈한단체샷으로 장식했습니다.흑팀과 백팀이 모두 하나 되어즐거운 체육대회 시간을 가졌답니다.다 함께 파이팅을 외쳐봅니다.지금까지보다앞으로가 더욱 기대되는바로고우리 모두 가슴에 '바로고'의 열정을 가지고파이팅을 외칩니다!대한민국배달 배송배달대행을 책임지는바로고"우리가 바로고 입니다."이상 바로고 체육대회 소식을 마칩니다.바로고에서만 볼 수 있는바로고의 사내소식앞으로도 기대해주세요~감사합니다.
조회수 886

HyperCut으로 인물사진 필터를 만들었습니다

얼마전 하이퍼커넥트의 아이디어 제안 채널에서 나온 이야기입니다.mel 은 사업그룹의 터키지역 담당 팀에 있는 친구인데, 꾸준히 좋은 제안과 아이디어를 주는 훌륭한 동료입니다. 이번에는 최근 여러 스마트폰이나 사진 앱들에서 나타나기 시작한 인물사진 모드 를 아자르에서도 지원하는게 좋겠다는 제안이었습니다.스마트폰이 자체 기능으로 인물사진 필터를 제공하는 경우는 보통 듀얼 카메라를 사용해 인물 외의 배경을 흐릿하게 만들어 심도를 표현합니다. 하지만 모두가 듀얼 카메라를 탑재한 스마트폰을 쓰는 것은 아니기 때문에, 이런 인물사진 모드를 소프트웨어적으로 구현하는 앱들도 존재합니다. mel 이 보여준 링크의 인스타그램도 그렇게 구현했네요.인물사진 모드를 소프트웨어적으로 구현하려면, 영상에서 얼굴을 포함한 사람을 배경으로부터 정확히 분리해 내는 기술이 필요합니다. 그리고 사진을 찍을 때에 실시간으로 프리뷰를 보아야 할테니까 이것을 실시간으로 처리할 수 있을 정도의 성능도 필요하구요.하이퍼커넥트에서는 머신러닝, 특히 영상과 이미지를 다루는 분야에 대해 지속적으로 투자와 연구를 해 왔습니다. 영상에서 인물을 분리해내는 문제는 크게 Image Segmentation 의 범주에 속합니다. 좀 더 직접적으로 Portrait segmentation 이라고 부를 수도 있습니다. 이를 잘 하기 위해서 하이퍼커넥트에서는 자체적인 학습 데이터를 만드는 것부터 시작하여 기술 개발을 지속적으로 추진해 왔고, 그 결과 Machine Learning 팀에서 이미 실시간으로 얼굴과 배경을 분리해내는 - HyperCut - 이라는 기술을 확보한 상태입니다. 아직 실제 서비스에 탑재되진 않았지만 이미 하이퍼커넥트의 주요 서비스인 아자르의 개발 버전에서는 HyperCut을 응용한 여러가지 이펙트를 사용할 수가 있습니다. 그리고, 그 중에 인물사진 모드 필터도 이미 있습니다.mel 의 제안이 있던 날 오후 아이디어 제안 채널에 이런 답이 달렸습니다.모델이 되어 주신 분은 하이퍼커넥트의 CTO 인 ken 이네요. 아자르 개발 버전에서 HyperCut 을 응용한 인물사진모드 필터를 사용하고 찍은 사진입니다. 아자르의 저장하기 기능을 사용했더니 UI 없이 오른쪽 아래에 아자르 로고만 남게 되었네요. 아직 실서비스에는 포함되지 않았지만, 최적화와 튜닝 과정을 거쳐 조만간 많은 사용자들이 HyperCut 을 사용한 이펙트를 쓸 수 있게 될 예정입니다.#하이퍼커넥트 #개발 #개발자 #아이디어 #아이디에이션 #구체화 #협업 #팀워크 #팀플레이
조회수 1164

사람 때문에, 사람 덕분에...스타트업

(출처: Discovery, man vs wild)많은 스타트업들이 오늘 하루도 치열한 하루를 버텨냈다.그리고많은 스타트업들이 오늘 하루 사라지고,다시 만들어지고 있다.어느덧(주)클린그린이탄생한지 벌써 1년 8개월!알음알음 동지와 같은 창업가들이벌써 사업을 접고, 업종을 바꾸고,취직자리를 알아보는 처지에 놓여있다.참 안타깝고,나 역시 두렵다."우리는...잘 가고 있는거지?"동료들에게 진지하게 물었다."왜? 쫄았어?""솔직히 요즘 겁나.""겁 먹지마! 너 혼자 가는 길이 아니니까."정신없이 달려온 시간들,많이 떨리고, 환호하고, 실망하고,지치고 힘들 때마다돌이켜보면함께 하는 동료들이 항상 있었다.지금도그들의 변함없는 지지가두려움을 기대로 바꾸는 힘이 되어준다.사람에 대한 이야기는수백번 강조해도 모자름이 없다.그 만큼 중요하다는 뜻이다.스타트업이 돈이 없어 망하는걸까?원초적인 답은 "그렇다"자금이 충분하면,애초에 발생하지 않을 리스크들이 있다.활동 범위도,진행 과정도,인재영입에도 더 수월하다.하지만,현실적으로 자금이 넉넉한 스타트업은매우 드문 경우고한정된 자금이라는 조건 속에서이를 타개할 방법은 무엇일까?정확한 답은 모르겠고,내가 찾은 적절한 답은바로 "사람"이다관찰자의 시각으로보면,자금이 동나서 망하는 스타트업보다사람이 동나서 망하는 스타트업이 더 많다.스타트업의 HR 관점에서 특징은 다음과 같다.1. 신규직원 또는 스카웃 인재 확보의 어려움2. 창업멤버와 신규 멤버와의 갈등 소지3. 회사 성장속도와 직원 성장속도의 차이4. 잦은 퇴사와 잦은 인력 보충먼저, 사람 구하기가 어렵다.그냥 단순한 직원을 뽑는게 아니라스타트업은 열악한 환경에서 같이 미칠 사람을 원한다.하지만 많은 구직자들은스타트업을 꺼려한다.박봉에,엄청난 업무강도,언제 사라질 지 모르는 불안정한 직장이라는조건들만으로도 고개를 절레절레 흔든다.그 간격을 줄이기란 쉽지 않은 일이다.신규채용을 진행하면서,사람 구하기도 쉽지 않았지만,꼭 채용하고 픈 인재를 얻지 못해아쉬운 상황도 발생하더라.비전을 제시하는 것?이제 한 두번 만나보고어떻게 공감시킬 수 있을까?어떻게 신뢰를 줄 수 있을까?운명처럼 첫 만남에서서로 사랑에 빠지는 이야기는아직 경험이 없어서 모르겠고내 인생에서 소중한 사람들은 모두오래두고 함께 살아오면서신뢰가 쌓여 지금까지 인연을 만들어가고 있다.회사도 구직자를 못 믿고,구직자도 회사를 못 믿는데어떻게 매칭이 쉽게 될 수 있겠는가.(출처:천원돌파 그렌라간)회사는 먼저 진심을 보여야 한다.구직자 위에 서려고 하지 말자.스타트업에게 채용이라는 프로세스는누가 갑이고, 누가 을이냐 정하는게 아니다.이력서와 면접으로구직자를 평가하려는 식의채용에 반대한다.고객을 만나듯이 상대해야한다.우리 회사와 제품을 설명하며,무엇이 강점이고, 어떻게 성장할지,구직자에게 영업을 하는 것이라고 생각한다.진심이 통할런지는 모르겠지만,적어도 진심을 보이려고 노력은 해야하지 않을까?그리고채용 후에는 행동으로 진심을 보여야 한다.채용 전과 채용 후가 다른 회사를누가 신뢰하겠는가.스타트업은 경력자를 원한다.바로 전선에 투입되어 싸워줄 전사를 원한다.그러다보니기존에 생사고락을 함께 한 전우들과새로 합류한 지원군과의 간격이 존재한다.스타트업이 성장하는 과정에서 뛰어난 능력자를모셔오는 것은 필수 코스이며,어느 정도 성장통을 감수해야 한다.근데...여기서 창업자의 스타일은 나누어진다.스카웃 또는 신규 경력자에게힘을 실어 줄 것인가.오래 함께한 동료들에게 손을 들어 줄 것인가.(출처:www.visionlaw.co.kr)가장 이상적인 것은다 같이 읏샤읏샤하는 거지만...참 사람 관계를 조정하는 일은 쉽지가 않다.어떤 스타일이되었든 간에대표자와 창업멤버 그리고 신규 영입된 능력자의삼자구도에서 같은 목표를 향해 가는 방법은정답이 없다.개인적으로나는 보수적으로 생사고락을 함께 한 전우의손을 더 들어주는 편이다.장단점이 있지만...별다른 큰 문제가 없다면,난 앞으로도 이 부분은 고수해 나갈 생각이다.회사는 미친듯이 성장한다.스타트업으로써 매우 고무적인 일이지만,역으로 구성원들이 그 성장에 따라가지 못하면오히려 위험하다.개개인의 성장과 회사의 성장이균형을 이루어야하는데...불균형은 회사와 구성원 사이에 불만이 싹튼다.회사가 투자를 받든, 수익이 늘어나든,인력이 늘어나고, 공간이 늘어나는데 비해개인은 그 성장의 열매가생각보다 적을 때, 불만이 생긴다.또한, 회사 성장에 비해 점차 따라가지 못하는자신을 바라보면서 자괴감에 빠질 수 있다.(출처: 슬램덩크 중에서)역으로 회사는 정체된 듯 보일 때,혼자 일을 다 하는 것 같다거나자신의 능력에 비해 회사가 좁게 느껴지면서다른 회사, 다른 영역을 바라보게 된다.그리고 딴 생각이 들기 시작한다.바라보는 방향이 달라지기 시작한다.이전에 보이지 않았던회사의 단점들이 보이기 시작한다.그리고 거리감을 두기 시작한다.퇴사의 이유는 여러가지다.회사가 분해되는 경우도 있고,회사에서 팽(?)당하는 경우도 있다.개인적인 사유로 퇴사하는 경우도 있다.회사가 축복을 해 주며 떠나는 퇴사도 있다.하지만 아무리 좋은 끝맺음으로 떠나는 퇴사더라도횟수가 잦아지고, 연달아 발생하면남아있는 구성원들은 늘어나는 업무와 뒤숭숭한 분위기에빠질 가능성이 높다.그리고 신규직원이 많이 들어오는 경우,당장은 좋을지는 몰라도, 그 직원들에 대한 교육과갑자기 늘어난 신규직원으로 인해회사가 우왕좌왕하기도 한다.미리 계획된 채용과 인력관리,체계적인 교육이 자리잡지 않은 상태에서외형적으로 급하게 늘어난 신규인력은오히려 독이 될 수 있다.따라서, 인력채용과 퇴사관리에신경을 써야한다.간격과 타이밍, 대안에 대한 충분한계획이 필요하다.스타트업의 구성요소 중 유독 "사람(인재)"의를 강조하는 이유는 결국 일은 사람이 하고,일을 망치는 것도 사람이기 때문이다.투자 관련 컨설팅을 받다가...이런 질문을 받았다."대표님! 기존 창업멤버와 이별은 생각 해 보신 적있으세요?""뭐...그런 일은 생길 수도 있지만 가급적 피하고 싶네요""만약 투자자가 일부 멤버들을 정리하는 조건으로 투자한다고 하면요?""그럼 제 쪽에서 거절하겠습니다.""그 이유가 뭔가요?""지금까지 달려온 우리 회사의 가장 큰 가치인사람을 정리하는 조건으로 투자를 제안한다면,그 투자자가 사람 볼 줄 모르고,우리 회사의 진정한 가치를볼 줄 모르는 사람이라고 생각되니까요.그런 분을 파트너로 함께 일을 한다면,그 때부터 전 불행한 창업가가 될거니까요."올드스타일이라고 할지는 모르겠지만,굳이 그런 길을 걷고 싶지는 않다.스타트업의 강점은 "빠른 성장"이라고들 말하는데...내가 생각하는 스타트업의 강점은 "행복한 성장"이다.더디게 돌아가는 길일지라도,함께 오래 롱런할 수 있는 회사가 좋다.애당초 스타트업에게 텍스트 북은 없다.목적, 스타일, 문화, 가치가 이끄는대로각양각색의 스타트업들은자기만의 정답을 찾아 가고 있다.누가 이래라저래라 한다고 휘둘려 가는 회사보다올바르다고 믿는 길을 걷는 회사가 더 낫다.스티브 잡스의 방식은 애플에서야 통하는거고,빌 게이츠의 신화는 마이크로소프트에서 통한 방법이다.베조프라던가 마윈이라던가 저커버그 등은 그들의 방식이 통한거다.우리 회사의 방식은우리가 더 해답에 가깝다.제3자의 시각에서 조언 해 주고,조정을 위한 충고를 해 줄 수 있지만일반론적이고 평균적인 프로세스가모든 상황에 적용되지 않는다.어차피 스타트업 창업자들이평균적인 회사를 꿈꾸고이 길을 걷고 있는 것은 아니지않은가.뭔가 유니크하고,뭔가 특이하고,뭔가 다른,꿈꾸던 회사를 만들어가는 사람들이다.그 꿈에 공명하여 모인 사람들이 멤버다.그 꿈에 올라탄 사람들이 동료다.그런 사람들이 모인 회사를 만들어간다.그게 스타트업이다.그리고 나는 그런 스타트업의 대표이다.우리 회사 (주)클린그린은 그런 회사다.#클린그린 #창업 #스타트업창업 #스타트업 #초기멤버 #팀빌딩 #경험공유 #조언
조회수 1514

스마트 컨트랙트 개발과정에서의 실수 — TransferFrom

Hexlant는 Blockchain 전문 개발 팀으로, 다양한 기관들의 스마트 컨트랙트 코드를 검수하는 업무도 진행하고 있습니다.지금까지 다양한 컨트랙트 코드들을 리뷰하면서 나왔던 문제점들을 공유하고, 더 나은 방법으로 개발 할 수 있는 방법들에 대해 이야기 해보고자 합니다.transferFrom에 대한 이해ERC-20 표준에 보면, transferFrom 이라는 함수가 있습니다. 일반적으로 많이 쓰이는 기능이 아니다 보니 잘 모르고 넘어가는 경우가 많습니다.function transferFrom(address _from, address _to, uint256 _value) public returns(bool)transferFrom은 남이 가지고 있는 토큰을 누군가에게 보내는 기능입니다.그 누군가는 내가 될 수도 있습니다.이 설명만 보면, 아래와 같은 의문이 생기실 겁니다.어? 남의 토큰을 내 마음대로 옮길 수 있다고??당연히 마음대로 옮기면 안되겠죠.그래서 approve 함수를 통해, 내 토큰을 사용할 수 있는 사람을 지정할 수 있습니다function approve(address spender, uint256 _value) public returns(bool)토큰의 holder는 approve함수를 호출하여 spender에게 일정량 만큼을 사용할 수 있게 허용을 해 줍니다. 그럼 spender는 허용된 범위 안에서 토큰을 마음대로 옮길 수 있습니다.허가되지 않은 토큰의 이동많이 쓰지 않는 기능이다 보니, 이 부분에 대해 고려하지 않고 개발 하는 경우가 있을 수 있습니다.아래는 저희가 리뷰했던 코드 중 일부입니다function approve(address _spender, uint256 _value) public returns (bool success) { require(_spender > address(0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; }function transferFrom(address _from, address _to, uint256 _value) public { require(_from > address(0)); require(_to > address(0)); require(balances[_from] >= _value); require(balances[_to] + _value > balances[_to]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(_from, _to, _value); }approve 함수를 우선적으로 보면, allowed 테이블에, msg.sender가 _spender에게 얼마만큼 토큰사용을 허용해 주었는지 저장하는것 말고는 특별한 기능은 없습니다.allowed[msg.sender][_spender] = _value;이제 transferFrom 함수를 확인해 보겠습니다.transferFrom은 실제 토큰이 전송되는 부분이니 예가 필요할 것같습니다.Alice에게 10000개의 토큰이 있을 때, Bob이 transferFrom을 다음과 같이 호출했다고 합시다.transferFrom(Alice, Bob, 10000)자 이제 transferFrom코드를 따라가며 토큰이 어떻게 전송이 되는지 확인해 봅시다.require는 안에 들어간 조건이 만족해야만 다음 라인을 실행 할 수 있다는 명령어 입니다. require를 만족하지 못하면, 해당 트랙잭션은 수행되지 않고 실패로 처리됩니다.require(_from > address(0)); require(_to > address(0));위의 두 줄의 조건은 입력된 주소_from, _to는 각각 Alice와 Bob의 지갑 주소이기 때문에 0x*****형태로 0x0000…0000이 아니기에 해당 조건들을 모두 만족합니다.require(balances[_from] >= _value); require(balances[_to] + _value > balances[_to]);Alice의 지갑에는 10000개의 토큰이 있고 _value는 10000개이니까 저 require를 실제 숫자로 대입하면require(10000 >= 100000); require(0+10000 > 0);조건을 충분히 만족합니다.그 다음부분들을 실제로 Alice의 주소에서 Bob의주소로 10000개의 토큰을 옮기는 작업입니다.balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(_from, _to, _value);Alice의 잔액에서 10000개만큼이 빠지고,Bob의 잔액에 10000개가 추가됩니다.balances[Alice] = balances[Alice].sub(10000); balances[Bob] = balances[Bob].add(10000); Transfer(Alice, Bob, 10000);이로서 Bob은 Alice의 토큰 10000개를 자신의 지갑으로 이동시켰습니다.일련의 과정을 요약하면1. 주소 오류 검증 2. 보내려는 토큰이 Alice가 가진 잔액보다 작은지 검증 3. 받았을때 Overflow가 발생하는지 체크 4. Alice의 잔액에서 보내는 만큼의 토큰 수량을 뺀다 5. Bob의 잔액에 보내는 만큼의 토큰 수량을 더한다과정을 보면 Bob이 Alice로 부터 토큰 사용을 허락받았는지 체크하는 부분이 없습니다.따라서 누군가가 보유한 토큰을 다른 사람이 제멋대로 쓸수 있게됩니다.오류수정transferFrom이 정상적으로 동작하려면 어떻게 수정되어야 할까요?function transferFrom(address _from, address _to, uint256 _value) public { require(_from > address(0)); require(_to > address(0)); require(balances[_from] >= _value); require(balances[_to] + _value > balances[_to]); require(allowed[_from][msg.sender] >= _value); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value) Transfer(_from, _to, _value); }첫 번째로는 당연히 transferFrom을 호출한 사람이 권한이 있는지 확인해야 합니다.require(allowed[_from][msg.sender] >= _value);이 조건을 통해 허용된 수량안에서만 토큰을 옮길 수 있게 만들 수 있습니다.두번째는, 토큰을 옮긴 후 허용량을 줄여주어야 합니다.allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value)만일 Alice가 Bob에게 10000개의 토큰을 허용해 주고, Bob이 그중 100개를 사용했다면, 그 다음번에 Bob은 9900개 안에서만 사용할 수 있어야 합니다.#헥슬란트 #HEXLANT #블록체인 #개발자 #개발팀 #기술기업 #기술중심 #실수담

기업문화 엿볼 때, 더팀스

로그인

/