300년 전 항해사들에게 ‘컴퓨터’가 필요했던 이유

여행을 하다가 길을 잃었을 땐 헤매지 않기 위해 몇가지 정보가 필요하다. 우선 가고자 하는 목적지가 어디 있는지 알고 있어야 하고, 동서남북 방위도 알아야 한다. 하지만 둘 다 알고 있더라도 자신이 있는 현재위치를 파악하지 못한다면 목적지로 갈 방향을 잡을 수 없다.

바로 300년 전 유럽의 항해사들이 겪었던 문제다. 그 당시 유럽인들에게 세계지도와 나침반, 그리고 북극성은 있었지만 넓은 대서양 위에 떠있는 배 위에서 현재위치를 알 수 있는 방법이 없었다. 한창 활발히 유럽과 아메리카 식민지를 오갔던 함선들은 바다를 지금까지 얼마나 건너왔는지, 얼마나 더 가야 반대편에 도달하는지 정확히 알지도 못하는 상태로 몇 달 동안 무작정 서쪽 또는 동쪽으로만 가는 무모한 항해를 계속하고 있었다. 수백명의 실종자가 나오는 조난사고도 적지 않게 일어났다.

17세기 항해용 세계지도
17세기 항해용 세계지도.

정확히 어떤 것이 문제였을까? 바다 위 배의 위치는 지도상의 좌표로 표시할 수 있고, 좌표는 위도와 경도로 나눌 수 있다. 남북으로 움직일 때마다 바뀌는 위도는 달라질 때마다 태양이 뜨는 높이가 달라지기 때문에 움직이는 배 위에서도 태양이나 별의 고도만 잘 측정할 수만 있으면 현재 날짜와 비교해서 계산할 수가 있었다. 하지만 경도를 잴 수 있는 방법이 없는 것이 문제였다. 이것을 해결하기 위해 1714년 영국 정부는 경도법(Longitude Act)을 발표하여 이 문제에 현상금을 걸었다. 바다 위에서 경도를 정확하게 측정할 수 있는 방법을 보여줄 수 있는 사람에게 10,000파운드 (2016년 기준 약 22억원) 이상의 상금을 지급하기로 한 것이다.

이윽고 경도를 찾기 위한 경쟁이 시작됐지만 쉽지 않았다. 경도가 바뀌면 해 뜨는 시각이 달라져 출발지와 시차가 생기므로, 출발지 시각으로 맞춰놓은 정확한 시계만 있다면 그 시계상의 시각을 현재위치에서 태양이 뜨고지는 시각과 비교해서 경도를 측정할 수 있다. 하지만 당시 기술로는 흔들리는 배 위에서 정확히 움직이는 시계를 만들 수 없었던 것이다. 결국 50여년이 지난 1765년에서야 존 해리슨(John Harrison, 1693-1776)이 항해용 정밀시계를 제작해 영국 정부로부터 상금을 받을 수 있었다. 하지만 이것도 행복한 결말은 아니었다. 해리슨의 시계는 제작하기 어렵고 비싸서 일반적인 선박에 보급할 수 없었고, 상금을 받을 정도의 정확도는 만족했지만 장거리 항해에 쓰기에는 여전히 미흡했다. 적어도 정밀시계를 양산할 수 있을 때까지는 다른 수단이 필요했다.

해리슨의 H1 시계
해리슨의 H1 시계. 이후 3번 개량을 거쳐 만든 H4가 검증에 성공한다. ©National Maritme Museum, London

만약 달의 궤도를 정확히 예측할 수 있다면 그것을 시계처럼 쓸 수 있다. 천구상의 별을 고정시켜서 봤을 때 달은 태양이나 다른 행성에 비해 상대적으로 빨리 움직인다. 런던 시각으로 몇월 몇일 몇시에 달이 어느 위치에 있을지를 전부 계산해놓는다면, 지구 어디에서라도 달만 보인다면 실제 관측한 달의 위치와 계산된 위치를 비교해서 런던의 현재시각을 알 수 있다. 독일의 천문학자 토비아스 마이어(Tobias Mayer, 1723-1762)는 달의 위치를 상당히 높은 정확도로 계산하는 방법을 고안했고, 이 연구를 바탕으로 그리니치 왕립 천문대는 하루하루 달의 위치를 예측한 자료를 만들어 매년 항해연감(The Nautical Almanac)을 출판했다.

이것은 결코 작은 사업이 아니었다. 달의 위치를 높은 정확도로 계산하는 것만 해도 어려운 일이었지만, 달이 출현할 날짜와 시간만 바꿔서 똑같은 계산을 되풀이하는 것은 상당한 시간이 들어가는 일이었기 때문이다. 당시에는 계산을 손으로 할 수밖에 없었으므로 이런 방대한 작업을 위해 오로지 계산만을 담당하는 사람들이 필요했는데, 그들을 컴퓨터(computer), 즉 계산수(計算手)라고 불렀다. 현재와 같은 전자식 컴퓨터가 생기기 전까지 ‘컴퓨터’는 사람의 직업을 부르는 말이었던 것이다. 산업혁명을 겪으며 근대에 접어든 영국과 유럽에서는 점점 정확한 계산이 요구되는 일이 많아지고 있었으므로 이처럼 계산수가 필요한 일도 덩달아 늘어나고 있었다.

항해연감을 만드는 계산수들은 재택근무를 했다. 혹시나 계산 실수가 없는지 서로 다른 계산수들의 결과를 이중삼중으로 비교하는 절차가 있었기 때문에 누구나 그들의 실적을 신뢰할 수 있었다. 계산량이 아무리 많더라도 종이 몇 장에 다 들어갔기 때문에 업무전달은 우편으로 했다. 하지만 우편마차의 배송이 며칠씩 걸리는 것이 큰 문제가 안 될 정도로 손으로 하는 계산작업은 오래 걸리고 번거로운 일이었다. 그렇게 50년이 넘는 세월동안 항해연감은 오로지 사람의 계산으로만 작성됐다.

19세기 초는 인간이 하던 많은 일들을 한창 증기기관으로 대체하던 시절이었으므로, 사람이 하는 계산도 기계에게 맡길 수 있을 것이라는 발상이 나온 것도 무리는 아니었다. 찰스 배비지(Charles Babbage, 1791-1871)는 해석기관이라는 것을 설계했다. 이것은 오늘날 우리가 쓰고 있는 컴퓨터의 조상 격으로, 전기를 쓰지 않는다는 점만 다를 뿐 CPU와 메모리를 갖추고 소프트웨어로 움직이도록 설계되어 있었다. 배비지의 아이디어는 시대를 너무 앞서나간 것이었기 때문에 정부의 충분한 지원을 받지 못했고 그는 해석기관이 실제로 완성되는 것을 보지 못했다. 하지만 배비지에게 영향을 받은 사람들이 이를 간소화한 기계식 계산기를 만들기 시작했다. 초기의 계산기는 사칙연산밖에 할 수 없었고 다이얼을 조심스럽게 하나씩 돌려가면서 써야 하는 섬세한 기계였지만 그것만으로도 많은 사람들의 시간을 크게 절약할 수 있었다.

해석기관
배비지의 해석기관. 20자리 숫자 두 개를 곱하는 데에 3분이 걸린다고 한다. ©Science Museum, London

역사를 돌이켜 보면 산업과 과학기술의 발전 사이의 맞물림이 흥미롭다. 18세기 초 유럽의 해운업은 민간, 정부, 그리고 해군의 관심이 모인 거대 산업이었다. 막대한 자금이 흘렀던 이 산업의 발전을 위해 당시 영국 정부는 관련 산업에 투자를 했고, 그 덕분에 언뜻 해운업과 관련이 없어 보일 수도 있는 수학 · 물리학 · 천문학 등 기초과학의 연구와 시계 같은 정밀기계의 기술에도 지원이 갈 수 있었다. 또한 해운업을 안정화시키기 위해 시작한 항해연감 계산사업을 꾸준히 유지시켜준 덕분에 컴퓨터라는 새로운 개념까지 나올 수 있었던 것이다. 배비지 이후 약 150년이 지난 지금은 컴퓨터가 그 자체로 거대 산업이자 첨단기술의 중심이 되었다. 앞으로 어떤 새로운 과학기술이 등장할지 기대해 본다.

글쓴이 : 정경훈 (Software Engineer @로켓펀치)

사무실 없는 로켓펀치에서 인턴이 일하는 방법

2016년 여름방학을 얼마 남겨 두지 않았을 때, 학과 선배로부터 스타트업의 인턴 포지션에 지원해보지 않겠냐는 연락이 왔다. 평소 스타트업에 관심이 있었기 때문에 곧바로 지원서를 냈고, 면접을 봤다. 6개월 동안의 로켓펀치와의 인연은 이렇게 시작됐다.

로켓펀치는 사무실이 없다. 오전 11시마다 스카이프를 통해 화상회의가 진행됐고, 중요한 전달사항이 있을 때만 상사이자 멘토였던 이상범 이사님을 오프라인으로 만났다. 처음엔 원격근무라는 것이 어색했지만 점차 원격근무의 장점을 하나씩 알아가게 되었다.

로켓펀치는 정말로 자유롭게 본인의 의사를 표현할 수 있는 회사였다. 대표부터 인턴에 이르기까지 서로 이름 끝에 ‘님’자를 붙였고, 존댓말을 쓰고 있었다. 새로운 작업을 시작할 때면 온라인 회의를 통해 작업에 대해 충분히 이해할 수 있도록 처음부터 끝까지 설명해 주셨다. 내 생각을 이야기할 기회도 많았다. 처음에는 의견을 말하는게 익숙하지 않았지만, 점차 생각을 공유하고 모르면 즉시 물어 보는 것에 익숙해 지기 시작했다.

로켓펀치는 다양한 IT기술과 소프트웨어 도구들을 활용해 업무를 수행하고 있었다. 때문에 업무를 진행하기 앞서 익숙해 져야하는 도구들이 있었고, 인턴 초기에는 Slack과 Trello와 같은 도구에 익숙해 지는 시간을 가졌다.

그 후 처음으로 맡은 일은 로켓펀치 사이트의 투자소식 및 기업 페이지를 관리하는 일이었다. 그날 그날의 투자소식을 확인하여 사용자들이 업로드하지 않은 내용들을 홈페이지에 보완하고, 중복 등록된 기업 등을  정리하는 작업이었다. 매월 12만명 이상의 사람들이 방문하며 빠르게 성장하고 있는 웹서비스에 직접 정보를 업데이트 하는 것은 매우 떨리고 설레는 일이었다.

사이트 관리 업무에 익숙해질 즈음 첫 프로젝트를 전달 받았다. 스타트업 관련 투자데이터를 수집하는 일이었다. 처음에는 쉽게 모을 수 있을 거라 생각했다. 관련 정부기관에 요청만 하면 데이터를 쉽게 받을 수 있을 것 같았다. 하지만 현실은 달랐다. 수차례 메일을 보내고 연락을 하였지만 중소기업청을 비롯한 정부기관들로부터 돌아온 대답은 ‘법률상 데이터제공이 불가능하다.’는 답변뿐이었다. 갑자기 앞이 캄캄해졌다. 인턴을 시작한지 한달 가까이 지났지만 정작 하나의 프로젝트도 제대로 수행하지 못하고 있었다. 재택근무의 특성상 과정보다는 결과가 보여질 수밖에 없었다. 가만히 앉아 있을 수만은 없었기에 구글링도 해보고 관련서적들을 찾아보기도 했다. 이것 저것 찾다보니 웹 상의 정보를 모으는 기술인 크롤링에 대해서 알아보기도 했다. 하지만 작업에 크게 진전은 없었다. 간신히 50개 가량의 데이터를 모았을 때쯤 문득 네이버 뉴스가 떠올랐다. 상세검색을 활용해 불필요한 데이터를 제거하니 총 18,000개의 투자관련 뉴스가 있었다. 과장을 조금 보태서 온 몸에 소름이 돋았다. 그 때부터 뉴스들을 일일이 확인하면서 유효한 투자정보들을 엑셀에 정리하기 시작했다. 1주일이 지난 뒤 총 500개 정도의 투자데이터를 모을 수 있었다. 해당 투자데이터들은 로켓펀치 데이터베이스에 입력가능한 형태로 수정작업을 거친 뒤 개발팀에서 작성한 스크립트를 활용해 로켓펀치 사이트에 업로드 되었다. 정중한 이메일이나 웹 크롤링과 같은 기술을 이용해 데이터를 수집한 것은 아니었다. 누구나 할 수 있는 방법을 활용했고 어찌 보면 매우 비효율적인 방법이었지만 결국 원하는 목표를 달성할 수 있었다. 무식하게 보일 수 있는 방법이 때로는 효율만 추구하는 방법보다 효과적일 수 있음을 깨달은 순간이었다.

투자데이터 수집 작업을 끝마치고 나니 9월 개강시즌이 다가왔다. 아직 학부 과정 중이었고, 취업준비를 병행할 예정이었기 때문에 방학때 만큼은 로켓펀치 업무에 많은 시간을 투자할 수가 없었다. 하지만 감사하게도 업무시간을 줄여 학기 중에도 인턴일을 계속 수행할 수 있는 기회가 주어졌다. 좀 더 많은 프로젝트를 해보고 싶었고, 로켓펀치로부터 배우고 싶은 것도 많았기에 일을 계속 하기로 결정했다. 그렇게 4개월이 흘러 어느덧 1월이 되었다.

총 6개월의 인턴 기간 동안 직군, 전공 태그 데이터 정리부터 잠재고객 통계분석에 이르기까지 10개 이상의 크고 작은 작업을 수행했다. 100개가 넘는 대학교 취업지원실에 일일이 전화를 걸어 보기도 했고, 정부 사이트에서 접속횟수 초과로 IP가 차단당하기도 했다. 요청한 것에 거절 당하며 위축되기도 했고, 로켓펀치를 알아보시는 분들 앞에서 괜히 어깨가 으쓱했던 적도 있었다. 인턴으로서 직접 프로젝트성 업무를 수행하는 것 외에도 가장 기본적인 서비스 운영에 참여하였고, 비즈니스팀과 개발팀이 회의를 거쳐 서비스 개선을 위한 기능을 추가해 가는 모습도 볼 수 있었다.

인턴 업무가 끝난 뒤 마지막으로 로켓펀치의 조민희 대표님, 이상범 이사님과 함께 식사를 했다. 식사 자리에서 요즘 스타트업 동향, 나의 앞으로의 계획 등 이런저런 이야기를 나누었다. 인턴이라는 기회로 만나게 된 분들이지만 형처럼 편하게 대해 주시고 좋은 말씀을 많이 해주셨다. 식사 후 마지막으로 두 분께 인사를 드렸는데, 조민희 대표님이 ‘요즘에는 영원한 안녕은 없는것 같고, 안녕이 안녕이 아닌 것 같다. 또 보자.’는 말을 남기고 골목 안으로 사라지셨다. 가슴 한 켠이 왠지 모르게 뜨거워지는 것을 느꼈다.

로켓펀치에서의 인턴경험은 스타트업은 막연하게 위험하다고 생각하다는 생각과 스타트업에 도전하는 것은 어렵다는 두려움을 없애 주었고, 할 수 있다는 용기를 심어 주었다. 열정 가득한 사람들이 모인 스타트업의 모습을 잠시나마 들여다 볼 수 있었다. 이제 이 소중한 경험을 가슴속 깊이 새기고 새로운 길을 향해 나아가고자 한다. 언젠가는 치열했던 스타트업의 세계로 돌아오겠다는 꿈을 간직한 채.

J커브 성장을 위한 나침반, ‘서비스 통계 대시보드’ 개발기

‘수억 명의 사용자’ 같은 거대한 목표는 ‘감’으로는 결코 달성할 수 없다

각자가 만들고 있는 제품의 특성에 맞는 올바른 지표(Metric)를 선택하고, 그 지표를 꾸준히 개선해 나가는 것은 J 커브 성장을 달성하기 위한 가장 핵심적인 활동이다. 문제를 모르면 개선할 수도 없기 때문이다. 그런데 이런 고유한 지표를 확인하는 것 자체가 어렵다면 실제 업무에 있어서 활용도가 크게 떨어지기 때문에, 클릭 한번에 확인할 수 있는 ‘대시보드’를 만드는 것이 좋다.

이 활동의 중요성을 알고 있는 로켓펀치는 많은 노력을 들여 로켓펀치만의 지표를 구성하고 쉽게 확인할 수 있는 대시보드를 구성했다. 이 글에서는 그 과정에서 얻었던 지식들을 나누고자 한다.

대시보드 구상 단계

대시보드의 실제 개발에 앞서 실무적으로 고려해야 크게 두 가지다. ‘어떤 데이터를 보여줄 것인지’와 ‘어떤 시간 단위를 사용할 것인지’에 대한 결정이다.

보여줄 데이터에 대한 결정

로켓펀치는 사용자가 생성한 데이터를 재가공하여 또 다른 사용자들과 연결해 주는 ‘사용자 참여형 콘텐츠 플랫폼’이다. 이런 특성을 가지는 서비스의 성장에 가장 중요한 것은 사용자들을 점점 더 서비스에 많이 참여하도록 하는 것이다.

예를 들어 우리가 게시판 기반의 커뮤니티 서비스를 만들고 있다면, 회원 가입 없이 글만 읽던 사용자를 회원 가입을 하게 하고, 글을 쓰게 만드는 것이 참여 수준을 높이는 것이다. 작성되는 글(=콘텐츠)이 많아질 수록 더 많은 사람들이 그 글을 보기 위해 우리 서비스에 방문할 것이기 때문이다.

로켓펀치에는 회원가입 없이 다른 사용자들의 프로필이나 기업 정보, 채용 정보를 보는 ‘방문자’들이 있고, 본인의 프로필을 상세히 업데이트하고 기업 정보와 채용 정보도 기재하는 ‘회원’들이 있다. 로켓펀치가 올바른 방향으로 나아가고 있는지는 방문자들이 회원으로 전환되는 비율을 통해서 알 수 있으므로, 대시보드는 한눈에 사용자들의 ‘참여 수준’을 볼 수 있는 항목들로 구성이 되어야 한다.

예를 들면 아래와 같은 항목들을 한눈에 확인할 수 있는 funnel 분석 그래프를 대시보드에 표시하는 것이다.

– 전체 방문자 수

– 전체 방문자 수 대비 재방문자의 비율

– 전체 방문자 수 대비 회원 가입을 한 비율

– 회원 가입자 중에서 프로필을 상세히 업데이트 한 비율

데이터 처리 시간 단위에 대한 결정

데이터를 대시보드에 표시함에 있어서 ‘시간 단위’는 아주 중요한 요소다.

예를 들어 우리가 ‘메시징 플랫폼’을 만들고 있다고 가정해 보자. 메시징 플랫폼이 사람들에게 제대로 가치를 주고 있다면, 당연하게도 사람들이 하루에도 여러 번 사용해야 한다. 그런데 어떤 외적인 문제가 발생하여 사람들이 하루에 수회 이상 사용하던 경향이 1주에 수회 사용하는 것으로 바뀌어 가고 있다고 생각해보자. 이는 분명 커다란 문제이며 반드시 대응을 해야 한다. 그런데 통계 데이터를 주 단위로 설정해서 보고 있다면, 이런 변화를 인지하기는 어렵다. ‘주’를 단위를 잡았을 때는 그 주에 그 제품을 한 번이라도 사용했다면 ‘활성 사용자’로 표시가 되므로 일 수회 쓰 던 경향이, 주 수회 쓰는 경향으로 바뀌더라도 데이터 상으로는 변화가 없는 것이다. 매일 쓰는 것이 중요한 서비스라면 시간 단위는 ‘주’가 아니라 ‘일’이어야 한다.

다른 예로 ‘여행 상품 제공 플랫폼’을 생각해보자. 우리가 만들고 있는 서비스가 제대로 동작하고 있다면, 사용자가는 얼마 간 여행 상품 구매 활동을 한 후 우리 서비스를 잠시 떠나야 한다. 여행 과정이 완료되었기 때문이다. 일반적인 경제 활동 인구들은 휴가에 맞춰서 일년에 여행을 2~3번 정도 떠나기 때문에, 우리가 만드는 서비스를 통해 여행 상품 구매 활동에 일주일 정도를 쓰고 여행을 다녀온 후, 몇개월이 지나 다시 접속해서 여행 상품을 구매 하는 패턴은 지극히 자연스러운 경향이다. 그런데 이런 서비스를 ‘주’ 단위로 분석한다면 어떻게 될까? 아주 단순화시킨다면, 1주차의 활성 사용자가 2주차부터 24주차(=6개월)까지는 모두 0으로 표시될 것이다. 서비스는 제대로 동작하고 있음에도 불구하고 말이다. 따라서 사용자가 1년에 한두 번 사용해도 충분한 가치를 느낄 수 있는 서비스라면 데이터 분석의 시간 단위는 최소한 월 단위 이상, ‘월, 분기, 반기’ 등이 되어야 할 것이다.

로켓펀치는 스타트업 채용 정보 제공 플랫폼에서 개인과 기업이 비즈니스의 성장에 필요한 다양한 정보를 얻을 수 있는 네트워킹 플랫폼으로 진화하고 있다. 우리는 로켓펀치가 사용자들이 적어도 일주일에 한번씩은 접속하는 서비스가 되어야 한다고 생각하기 때문에, 데이터를 처리하는 기본 시간 단위를 ‘주’로 잡았다.

대시보드 구현 단계

구현 목표와 로켓펀치의 현황, 그리고 방향

필자(=정희동)가 로켓펀치에 합류하는 과정에서 접했던 로켓펀치의 큰 목표 중 하나는 ‘이용자 분석을 제대로 해 보고 싶다’는 것이었다. 매우 흥미로운 과제라고 생각했다. 이용자 분석을 바닥부터 할 수 있는 기회는 그리 흔치 않고, 많은 것을 할 수 있을 것이라 생각했기 때문이다. 구체적으로 이용자들이 얼마나 들어와서 어떤 행동을 하는지 funnel 형태로 보고 싶고, 각각의 행동에 어떤 이유가 있는지 알고 싶었다.

합류 후 곧바로 시스템에 대한 파악을 시작했다. 로켓펀치 웹 서비스의 로그는 Elasticsearch의 제품군들을 비롯한 몇 개의 도구들을 이용해서 저장되고 있었다 (상세 내용은 아래에 설명).

이용자 식별과 이용자들의 행동에 대한 정의를 마친 후 간단한 결과를 빠르게 내는 방향으로 작업을 시작했고, 앞으로의 분석에 걸림돌이 될 부분들을 빠뜨리고 넘어가지 않도록 주의를 기울였다.

기간의 정의

앞서 언급된 이유에 따라 데이터의 기본 지표는 일주일 단위로 생성하기로 했다. 또 로켓펀치 팀에서는 보통 일주일 단위로 새로 추가되거나 개선된 기능을 릴리즈 하기 때문에 일주일이라는 단위는 기본 단위로 적절하다고 생각되었다. 그리고 매주 지표를 생성해서 최근 12주를 비교하기로 했다.

이용자의 행동

정의한 행동은 크게 보았을 때 아래와 같다.

1. 회원 가입

2. 개인정보 입력

3. 사진 등록

4. 학력 및 경력 추가

5. 자기 소개 수정

6. 친구 추가 및 친구 수락

로켓펀치 웹 서비스를 이용할 때 이루어지는 위 행동들은 서로 다른 API 요청 경로(path of request for API)를 가진다. 그리고 해당 로그는 인코딩된 유저 식별자와 함께 저장되므로 로그인 후 어떤 행동을 했는지는 저장된 로그를 이용자별로 모아서 request path를 보는 것만으로 알 수 있었다.

로그가 저장되는 방식

현재 로켓펀치의 로그는 몇 가지 툴을 사용해 아래와 같은 방식으로 저장되고 있다.

1. 웹 서버 디스크에 로그가 저장됨

2. filebeat가 디스크의 로그를 읽어 별도 서버의 redis로 보냄(이 때 redis는 queue처럼 동작함)

3. redis와 같은 서버의 logstash가 redis에 저장된 로그를 읽어 별도 파일로 저장하고, elasticsearch의 인덱스에도 저장함

4. kibana에서 elasticsearch에 저장된 로그를 살펴볼 수 있음

아래는 elasticsearch에 저장된 로그의 모습이다(일부 항목만 표시).

{
“_index” : “rocketpunch”,
“_type” : “logs”,
“_id” : “AVlfyGjraKOw-4GiFG_H”,
“_source” : {
“offset” : 42279229,
“content_length” : “105455”,
“latency” : “0.303436994553”,
“user_id” : “—-“,
“timestamp” : “2017-01-02T15:24:43.584033Z”,
“ip” : “—–“,
“response_code” : “200”,
“referer” : “https://www.rocketpunch.com/,
“user_agent” : “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36”,
“request_id” : “—–“,
“path” : “/api/users/network_request”,
“method” : “GET”,
}
}

이용자별 로그 모아보기

elasticsearch에 저장된 로그는 kibana에서 찾아보기 아주 편하지만, 검색 결과를 원하는 모양으로 만들고 싶다면 결국 query를 사용해야만 했다. elasticsearch에서 공식적으로 지원하는 언어별 client가 몇 가지 있는데, 익숙한 python을 쓰기로 했다. 사실 이 결정을 내리기 전에 bulk api를 써봤는데, 속도가 꽤 느린데다 대용량 처리 중 오류가 나기도 했다.

1주일 동안의 로그를 읽어 아래와 같은 모양으로 만든다.

이용자 식별자, 시간, 행동, … (나머지 정보들)

이용자 식별자와 시간으로 정렬하면 하나씩 읽어 유저가 어떤 행동을 했는지 알 수 있다. 아래는 그 예시이다.

user_1 2017-01-02T18:58:57.356091Z REG
user_1 2017-01-02T18:59:11.388345Z DET
user_1 2017-01-02T19:04:08.287961Z CAR
user_1 2017-01-02T19:05:10.746819Z CAR
user_1 2017-01-02T19:06:28.057567Z CAR
user_1 2017-01-02T19:08:47.662613Z CAR
user_1 2017-01-02T19:12:04.052667Z EDU
user_1 2017-01-02T19:12:26.961197Z EDU

user_1은 회원 가입(REG) 직후 개인 정보를 입력했고(DET), 몇 가지 경력사항(CAR)과 학력사항(EDU)를 입력했다. 이처럼 간단하게 유저의 행동을 살펴볼 수 있고 원한다면 행동 패턴을 더 정의하고 다른 정보를 결합해 더 상세한 행동을 관찰할 수도 있을 것이다.

로그인하지 않은 유저들 다루기

지금까지 위에서 다룬 내용은 로그인한 유저의 행동을 로그로부터 알아내는 방법이었다. 하지만 로그인하지 않은 많은 유저들의 방문은 어떻게 살펴볼 수 있을까? 웹 서버에서 세션 key를 발급하고는 있지만 발급된 key의 정보를 오랜 기간 유지해야 하며 사람이 아닌 봇에 대한 처리 또한 간단하지만은 않은 일이다. Google Analytics와 비슷한 기능을 하는 piwik을 사용해보려 했지만 필요한 기능에 비해서 유지 및 관리 비용이 부담스러운 수준이었다. 그래서 예전부터 이용하던 Google Analytics에서 전체 이용자 수와 신규 이용자 수를 가져오기로 했다.

실제 대시보드 만들기

지표를 살펴보기 쉽도록 대시보드의 형태로 funnel 정보를 나타내야 했다. 간단한 표와 그래프를 보여주기 위한 도구로는 jupyter notebook을 골랐고, pandasmatplotlib를 활용했다.

지금까지 위에서 만든 데이터를 읽어 DataFrame으로 만들고 각각의 이용자 수와 비율을 동시에 표로 나타냈다. 이는 공휴일이나 연말연시같은 이벤트에 이용자 수가 영향을 받기에 반드시 비율을 같이 볼 필요가 있다고 생각했기 때문이다. 그리고 그래프를 그릴 때 전체 이용자 수와 신규 이용자(대부분 비로그인 이용자들)를 같이 나타내면 로그인 이용자들의 수가 비로그인 이용자 수에 비해 매우 적어 로그인한 이용자들의 행동은 그래프에서 아주 작게 나타난다. 그렇기 때문에 로그인 이용자들의 행동만 따로 그래프로 그려야 눈으로 비율의 변화 정도를 확인할 수 있었다. 아래는 그렇게 그린 funnel 분석 그래프이다.

 

 

남은 과제들

대시보드의 표와 그래프로 funnel 지표는 살펴보았다. 하지만 다음 과정인 ‘각 단계의 행동을 행하거나 행하지 않은 이유’를 알아내는 것은 아직 수행하지 못했다. 이를 위해서는 로그를 더 자세히 여러 가지 방식으로 살펴봄으로써 funnel의 단계별 행동 이외에도 이용자가 어떤 방식으로 서비스를 이용하는지 알아내는 작업이 필요하다.

그리고 로그인하지 않은 이용자의 행동과 가입 후 한 행동을 연결해야 한다. 로그인 후의 행동을 분석해서 이용자 경험을 개선하는 것도 중요하지만 가입 이전에 무슨 행동을 하다 가입에 이르게 되었는지를 제대로 수집할 수 있다면 신규 이용자들을 가입시키는 과정 또한 개선이 가능할 것이기 때문이다.

덧1) 로켓펀치의 데이터 분석, 성장 전략 노하우가 담긴 책 ‘그로스 해킹 – 성장의 시대를 위한 안내서’가 출간 되었습니다.

덧2) 로켓펀치의 다음 데이터 분석 프로젝트는 ‘스타트업 연봉 분석’입니다.

글쓴이 : 정희동 (Software Engineer @로켓펀치) & 조민희 (CEO @로켓펀치)

2016년 감사 인사

로켓펀치를 사랑해 주시는 모든 분들께.

안녕하세요! 2016년은 로켓펀치가 세상에 선 보인 후 가장 큰 변화가 있었던 한 해입니다.

과거 ‘Fast Follower’ 전략의 소품종 대량생산 산업이 성장을 주도했던 한국 사회가 필요로 했던 인재는 ‘주어진 일을 효율적으로 잘 수행할 수 있는 사람’이었습니다. 하지만 지금은 우리가 익히 알고 있는 변화들로, 주어진 틀에 인재를 끼워 맞출 수 없는 시대가 되어 가고 있습니다.

올해 로켓펀치는 이런 변화된 세상에 맞는 비즈니스 정보 플랫폼이 되기 위하여, 기업 정보 중심이었던 서비스를 개인 정보 중심으로 전면적으로 개편하였습니다. 쉽지 않은 변화였고 아직 저희 스스로 느끼는 부족한 점도 많지만, 재능 있는 사람들과 가능성 넘치는 일들의 연결하여 큰 사회적 가치를 만드는 일은, 저희의 사명이자 기쁨이기에 2017년도 이 목표를 향해 나아가려고 합니다.

다가올 새해에도 스타트업과 인재들의 성장을 도울 수 있는 로켓펀치 만들기 위한 노력 멈추지 않겠습니다.

올 한해 보내주신 지지와 도움 정말 감사합니다.

2016년 마지막 날,

로켓펀치 팀을 대표하여 조민희 드림.

+ 덧) 로켓펀치가 성장에 대한 고민을 나누고자 집필한 책 ‘그로스 해킹 – 성장의 시대를 위한 안내서’가 출간 되었습니다. 성장을 고민하는 모든 분들께 도움이 되기를 희망합니다.

유사한 프로필/기업/채용, 이력서 열람 알림 – 2016.09 로켓펀치 업데이트

안녕하세요! 로켓펀치가 준비한 새로운 기능들을 소개합니다.

1. 유사한 프로필/기업/채용 정보

로켓펀치 내 다양한 데이터를 분석하여 유사한 프로필/기업/채용 정보를 ‘사람들이 함께 본 정보’라는 기능을 통해 제공합니다. 내가 알지 못한 새로운 정보를 발견할 수 있고, 일일이 정보를 검색하는 수고를 줄일 수 있습니다.

– 사람들이 함께 본 기업 정보 (페이지 우측 하단) : https://www.rocketpunch.com/companies/channelbreeze

– 사람들이 함께 본 채용 정보 (페이지 하단) : https://www.rocketpunch.com/jobs/13150

– 사람들이 함께 본 프로필 (페이지 하단) : https://www.rocketpunch.com/@minhee

2. 이력서 열람 시 이메일 알림

많은 분들께서 요청하셨던 기능이 준비되었습니다. 구직자들이 제출한 이력서를 기업 담당자가 열람했을 때 자동으로 확인 이메일이 발송됩니다. 기업에서는 별도로 확인 메일을 보낼 필요가 없으므로 구직자분들과 기업간 커뮤니케이션이 훨씬 쉬워졌습니다. 로켓펀치 팀에서는 더 효율적인 채용 프로세스 구축을 위한 다양한 기능을 준비하고 있습니다. 기대해 주세요!

▶︎ 로켓펀치에 대한 개선 의견은 https://rocketpunch.uservoice.com/ 통해서 24시간, 365일 받고 있습니다.

▶︎ 앞으로도 귀 기울여 듣고 사용자들의 기대에 부응하는 로켓펀치 되겠습니다. 늘 감사합니다.

–  로켓펀치 팀 드림.