스토리 홈

인터뷰

피드

뉴스

조회수 4933

실패한 프로젝트, 더 자세히 리뷰하라.

대부분의 프로젝트는 실패한다. 처음 세웠던 계획대로 진행되는 경우는 거의 본적 없다.원숭이도 나무에서 떨어지고, 아키텍트도 당연하게 실패를 자주 만나게 된다. 그리고, 프로젝트는 언제나 성공하지 않는다. 성공과 실패를 거듭할 뿐이다. 여기서, 실패를 어떻게 다루느냐에 따라서 아마추어와 프로의 차이는 극명하게 구분된다.아마추어는 실패를 변명하기에 급급하지만, 프로는 실패를 냉정하게 인정하고, 실패를 하게 된 이유를 찾고, 똑같은 실패를 반복하지 않기 위해서 실패의 원인에 대해서 분석하고 리뷰한다.많은 실패를 거듭할수록 전문가가 된다. 전문가는 실패를 반복하지 않기 위해서 언제나 실패에 대해서 필요한 리뷰 스킬을 높이게 된다. 이번 이야기에서는 필자가 지켜보았던 미니 프로젝트의 하나를 기준으로 실패에 대한 이야기를 해보도록 하겠다.여기서 이야기하는 프로젝트는 처음부터 실패가 될 것으로 예견되었다. 그리고, 그 예견된 결과대로 실패했다. 결론적으로 해당 팀이 해체되었고, 관련된 개발자들은 흥미를 잃고 해당 업체를 떠나게 되는 상황까지 진행되었다.문제가 더욱 심각한 것은 이러한 실패의 이유에 대해서 예견되었고, 그 문제를 지적하고, 향후 그 처리방안을 경영진에게 제시하였지만, 결론적으로 회사의 리더의 생각이 변화하지 않았기 때문에 ‘실패에서 주는 경험’이 제대로 전파되지 못했다. 하지만, 아키텍트는 이러한 실패에 대해서 분명하게 기록해두고, 다시 그러한 실패를 하지 않도록 준비를 하는 것이 전문가로 성장하는 가장 중요한 버릇 중의 하나라고 이야기하겠다. 아키텍트가 아니라고 해도 개발자는 자신만의 노트로 '실패'를 기록해야 한다."어떤 실패한 프로젝트에 대한 리뷰"실패에 대해서 정의할 수 있는가? 이 기준에 대해서 느슨하게 적용하게 되면 대부분의 프로젝트는 실패할 이유가 없어지며, 매우 엄격하게 적용하게 되면 대부분의 프로젝트는 실패라고 기록될 것이다.필자는 프로젝트의 성공과 실패의 요소에 있어 가장 중요한 것은 ‘비용’이 계획보다 많이 투자되었다면 그 프로젝트는 ‘실패’라고 평가를 한다. 가능하다면, 아키텍트를 목표로 하고 있는 개발자라면 모든 프로젝트의 기준과 투입인력, 시간과 하드웨어 리소스들을 모두 ‘비용’으로 환산하는 방법을 터득하는 것이 좋다.가능하다면, 필자는 이 기준으로 프로젝트를 평가한다.이 기준에 따라서 필자가 지켜본 미니 프로젝트를 평가해보자. 소프트웨어 개발자의 실제 일하는 것들이 모두 비용이고, 그들이 투입되고 생각하고, 무언가를 하는 행위들은 대부분 ‘비용’으로 모두 환산할 수 있다. 이러한 비용을 기준으로 프로젝트에 투입되게 되면 초기에 필자가 프로젝트의 기준을 세우는 원칙은 다음과 같다.소프트웨어 디자인과 기획에 30%, 실제 개발에 50%, 테스트에 20%를 투여하는 법칙이다. 다만, 이 수치에서의 약간의 차이는 투입되는 팀원이나 회사의 사정에 따라서 조금씩 달라지기는 하지만, 필자는 가능하면 저 수치를 지키려 한다.그동안의 필자의 경험으로 느껴지는 저 수치는 약간의 조정이 있을 수 있으나, 대부분의 국내의 프로젝트에서는 대부분 일치하거나 근사치로 정의될 것이다. 이번 이야기에서 언급하려는 프로젝트는 2013년도에 필자가 실패한 프로젝트의 사례에 해당한다.이 규칙에서 기획에 30%의 투자가 있었어야 했는데, 실제 초기 기획에 2%도 안 되는 투자 후에 실제 개발이 진행되면서, 프로젝트가 제대로 진행되지 않는 케이스가 발생하였다.물론, 이번의 케이스는 작은 스타트업에서 매우 작은 외주 프로젝트를 진행하는 일이었는데, 실제 프로젝트에 참여할 팀원의 구성이나 팀워크, 주된 목표치에 대한 설정 등이 제대로 서술되지 못하면서 기획이 제대로 진행되지 못한 케이스가 되었다.작은 모바일 프로젝트였고, 필자가 판단하기에 4주면 넉넉하게 해결될 프로젝트가, 필자의 계산착오로 4개월간 뒤틀린 프로젝트가 벌어지게 된 것이다. 필자는 왜 이런 실수를 하게 된 것일까?기본적은 린 개발 방법이나 에자일 방법과 같은 방법론의 문제가 아니라. ‘초기 기획’이 부정확한 상태에서, 팀워크도 갖추어지지 않고, 소통이 안 되는 팀원들이 보고체계가 붕괴된 상태에서 프로젝트가 지속되면서, 팀 자체가 와해되어 버린 아주 엉터리같이 진행된 프로젝트가 되어버렸다.필자도, 이러한 대대적인 실패에 대한 경험을 정말 오래간만에 한 셈이 되었는데, 결론적으로는 프로젝트를 수행할 제대로 된 팀원을 제대로 세팅하지 못한 ‘인사’에서 그 문제는 시작되었다고 프로젝트의 실패 원인 중에 가장 큰 원인을 지적하고 싶다.목표도 불확실한 상태에서 기획이 제대로 진행이 안되었고, 서버 개발자의 능력 부족에 아이폰과 안드로이드 앱 개발자의 자기 멋대로의 전횡과 서버 개발자가 이중으로 서버 인터페이스를 구현하면서 보고체계까지 제멋대로 진행된 아주 최악의 프로젝트가 진행되었다는 것을 거의 프로젝트 후반부에 가서야 알 수 있었다. 말 그대로 전형적닌 실패사례가 된 것이다.결론적으로 이야기하자면, 가장 먼저 이야기한 ‘기획’이란 팀 빌딩과 목표 수립과 같은 부분에 대해서 제대로 된 접근을 수행했어야 했는데, 이 부분에 대한 고려와 협의 없이 진행되면서 프로젝트가 일정에 떠밀려서 진행되면서 프로젝트가 상당히 누더기가 되어버렸다.어떻게든 중간에 올바른 방향으로 유도하려고 하였으나, 언제나 입버릇처럼 말하듯이 ‘한번 기본이 뒤틀린 경우에는 다시 바로 잡을 수 없다’가 정답이고, 그 여파로 인하여, 많은 비용과 시간적인 소모, 정력적인 소비까지 매우 불유쾌하게 진행된 프로젝트였다.결론적으로 이 프로젝트는 마무리는 되었지만, 이 프로젝트를 참여하게 된 팀원들은 모두 해산되고, 서버 개발자만 빼고는 모두 팀에서 해체가 되게 되었다. 물론, 이 프로젝트 이후에 해당 문제들을 보완한 상태에서 다시 프로젝트는 본래의 궤도로 올려놓기는 했지만, 이렇게 진행된 부분에 대해서는 명세 화가 절실하게 필요하고, 이를 리뷰해야 한다.이 프로젝트의 가장 큰 원인은 개발에 참여한 개발자나 디자이나, 기획자나 PM의 문제가 아니라, 전체적인 개발의 틀을 만들어 주어야 하는 ‘개발회사의 경영진’이 가장 큰 문제였다. 말 그대로 ‘인사’ 문제였다. 그중에 몇 가지의 문제들에 대해서 언급해보자."개발자의 의사소통의 문제"후반부에 개발과 관련된 보고체계의 문제점은 서버 개발자와 클라이언트 개발자 간의 의사소통과 의사결정에 대해서 개발자들 간에 ‘숨겨왔던 문제’가 드러났다. 가장 큰 원인은 ‘보고’를 제대로 하지 않았다는 것이다.안드로이드와 iOS의 앱 개발을 동시에 진행하였는데, PM이 인터페이스를 ‘동일’하게 추상화해서 구현하라는 방향성에 대해서 클라이언트 개발자들과 서버 개발자들이 서로 협의한 것이 아니라, 서버 개발자가 클라이언트 개발자들의 요구조건을 모두 받아들여, 인터페이스가 두배로 늘어나고, 테스트와 관련된 처리 방안들이 모두 증가하게 된 것이다.실제, 클라이언트에서 구현해야 하는 상당 부분의 기능들을 서버에서 구현하게 한 것은 향후 Web개발을 일부 처리하기 위한 방안이었는데, 이 부분들이 모두 무시된 채로, 클라이언트 개발자들 간에 자신이 하고 싶은 개발을 추진하면서, 서버 개발자가 의지 없이 끌려다닌 결과물이었다.당연하지만, 개발 일정이 늘어나고, 테스트도 진행되지 못하면서, 품질이 저하되는 것뿐만 아니라, 전체적인 프로젝트가 모두 붕괴되었다. 참으로 애통스러운 상황을 지켜보아야 하는 마음은 참으로 아픈 경험이다.그래도, 최악의 프로젝트였지만 ‘테스트’가 좀 더 명쾌했다면, 이 프로젝트는 초기에 문제를 잡을 수 있을 가능성이 있었다. 그래서, ‘테스트’에 대해서 몇 가지 더 정리해봤다."테스트, 그 계획과 실행의 전부"과연, ‘테스트의 적정선은 어느 정도 인가?’. 소프트웨어 개발에 있어서 테스트에 투입되는 비용이나 기간에 대해서 근접한 수치를 보여주거나 적절한 경험성을 부여하는 경우가 매우 드물다. 다만, 경험자의 직관에 의존하는 경우가 많거나, 각 개발사의 프로세스에 따라서 정형화되어 있는 경우가 많다.실제 자기 자신에게 다음의 화두들을 던져보자.정말로 테스트 커버리지 100%의 테스트란 존재하는가제품 개발 시간과 테스트 코드의 비율은 어느 정도가 적정한가?개발에 착수하기 전에 테스트를 얼마나 준비해야 하는가?통합 테스트는 매번 해야 하는가?테스트 전담자는 있어야 하는가?TDD는 비용 합리적인가?과도한 테스트란 어떤 것을 의미하는가?실제 개발환경에서 테스트란 무엇인가?현장 품질 커버리지란 무엇인가?테스트에 대해서 위의 질문에 대해서 독자들은 얼마나 명쾌하게 답변을 할 수 있을까? 아마도, 다음번 칼럼에는 테스트에 대해서 좀 더 자세한 이야기를 할 것으로 계획을 잡고 있다.테스트에 대한 유명한 Kent Beck의 말을 인용해보자.I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence (I suspect this level of confidence is high compared to industry standards, but that could just be hubris). If I don’t typically make a kind of mistake (like setting the wrong variables in a constructor), I don’t test for it.나는 코드가 작동하는지에 대해 보수를 받지, 테스트를 위해서는 보수를 받지는 않는다. 그래서 나의 철학은 신뢰할 수 있는 수준에 도달하기 위해 가능한 한 테스트를 적게 한다는 것이다.(신뢰할 수 있는 수준이라는 것은 업계 표준에 비해 높다. 조금 거만한 들릴지 모르지만). 만약 전형적인 실수(생성자에서 다른 변수를 설정하는 것 같은)를 하지 않는다면, 나는 테스트하지 않는다.-Kent Beck의 말소프트웨어 개발자들에게 테스트 환경과 테스트 조직, 테스트 문화에 대해서 강요하는 것이 바람직한가?라는 물음에 필자는 이렇게 이야기하고 싶다. ‘개발자’에게 ‘테스트’를 강요하지 말고, ‘테스트한 경과’를 제시하고 ‘수정’과 ‘제대로 된 결과’를 강조하라.일반적인 소프트웨어 개발에 대해서 무지한 사람들의 반복적인 질문은 ‘소프트웨어 개발자들은 왜 테스트를 소홀하게 하는 가?’라는 질문을 버그가 발생할 때마다 이야기를 한다. 대부분의 소프트웨어 개발은 ‘목표’가 불명확하기 때문에 ‘버그’가 발생한다고 생각한다.아마도, ‘개발자’에게 사용자의 ‘제약사항’과 ‘하지 말아야 할 행위’에 대한 언급이 없었다면, 개발자는 문제 해결을 위하여 상당 부분 위험요소를 건너뛰거나 넘어서게 된다. 물론, 적절한 여유시간과 품부 한 리소스를 제공한다면, 당연하겠지만. 튼튼한 소프트웨어를 만들기 위해서 노력한다. 하지만, 일정이 정해지고, 목표가 명확한 SI성의 프로젝트의 경우에는 ‘목표’를 향해서 가장 빠른 코드를 만들기를 강요하기 때문에, 이때에 만들어지는 ‘버그’의 대부분은 개발자의 실수이기보다는, ‘요구사항’에 대한 부정확한 전달 때문이다.별 요구사항이 없는 것 같은 DataGrid를 만들어 달라고 이야기를 했지만, 사실, 고객은 Excel정도의 기능을 원하고 있다. 하지만, 일정과 비용상의 문제 때문에 단순 데이터의 표현을 위한 DataGrid인 것처럼 요구를 하는 경우가 대부분이다.이때에 개발자는 당연한 것처럼 최소한의 제약사항과 요구사항을 통해서, ‘숫자’만을 처리할 수 있는 DataGrid를 만들지만, 고객은 개발에 착수함과 동시에 다양한 요구사항들을 요구한다. 문자열을 처리해달라, 날짜, 함수 등등… 그리고, 종이 출력도 자연스럽게 되게 해달라고 한다.개발자는 중간에 발생한 요구사항과 제약사항에 최대한 맞추려고 기능들을 구현하다 보면, 당연한 것처럼 특정 이슈만 처리하는 기능으로 구현되고, 다른 프로세스에서는 당연한 듯이 버그와 같은 현상을 발생시킨다.그럴 때에 고객은 이야기하고, 개발회사의 사장도 이야기한다. ‘개발자가 테스트도 없이 소프트웨어를 만들고 있다’고. 이것이 현실이다.대부분 소프트웨어 개발에 대해서 무지하기 때문에, 이런 일이 반복된다. 필자도, 이러한 경험을 최소한으로 하려고 하였지만, 역시. 회사의 대표가 되어서 프로젝트의 계약부터 관여하기 전에는 이러한 문제들을 모두 해결할 수 없다는 것이 정답일 것이다.필자는 단언한다. ‘소프트웨어 개발자에게 넉넉한 일정과 풍부한 리소스를 제공하지 못한다면, 소프트웨어 개발자가 모든 것을 해결할 것으로 기대하지 말아라’. 다만, ‘소프트웨어 개발자들이 보다 원활하게 개발에 전념할 수 있도록 다음과 같은 필수조직이 따라붙어야 한다.하나. 요구사항에 대해서 고객과 꾸준하게 소통할 수 있는 담당자나 조직둘. 정해진 일정에 맞추어 기능이 동작할 수 있게 하는 테스트 담당자나 조직하지만, 보통의 스타트업이나 작은 SI를 전담하고 있는 기업의 경우에는 위의 가장 중요한 두 조직이나 담당자들이 대부분 부재중이거나 기능이 모호한 경우가 많으며, 위의 두 가지 기능을 모두 담당 개발자의 책임으로 귀속시킨다.만일 이러한 기능이나 리소스를 모두 담당 개발자에게 귀속시키고 있는 회사나 조직에 있다면, 조직을 다시 만들거나, 해당 기업을 빠른 시일에 빠져나가는 것이 가장 현명한 방법일 것이다. 대부분 소프트웨어 개발에 무지한 경우에 이 두 기능을 너무 소홀하게 하고, 개발자들이 대부분 야근과 휴일근무를 밥먹듯이 하게 되는 경우가 이에 해당된다.실제 필자 또한 경험이 풍부했지만, 실제 기업의 인사권과 경영권이 없었기 때문에 이에 대해서 해결할 수 없는 경우를 또 만났기 때문이다. 그래서, 또 실패했다. 아무리 경험 많은 사람이라고 하더라도, 이미 알고 있는 내용이라고 하더라도. 그것을 실제 바꾸지 못한다면, 필패한다는 것이 소프트웨어 개발의 현장이다.그래서, 필자도 크게 실패한 경험을 또 하나 기록에 남기게 되었다."체계적인 품질관리 지표"개발과정에서 발생되는 요구사항의 지표에 대해서 NIPA의 SW Visualization을 참조하면 요구사항 추적성, 요구사항 달성률, 요구사항 커버리지의 3가지 지표에 대해서 서술하고 있다. 여기서, 달성률과 커버리지는 100% 처리가 되는 것을 목표로 움직이는 정략적인 지표로 보면 되고, 실제 개발현장에서 주목할 부분은 요구사항 추적성을 주목해야 한다.개발 공정별로 요구사항의 일관성이 어떻게 유지되고 있는지 확인하면서, 형상관리가 등록된 내용의 변경률과 비교하면서 요구사항의 변화된 추이를 꾸준하게 주목해야 한다. 대부분, 이 부분 때문에 개발이 뒤틀리는 진입점을 제공하게 된다.품질검증에서 사용되는 정적인 테스트는 ‘코딩 표준 준수율’과 ‘메트릭 만족률’, ‘정적 분석 이행률’을 기반으로 진행된다. 대부분 이 정적인 테스트는 ‘자동화 도구’를 사용하여 코드의 룰과 만족 여부를 확인하기 때문에 결국은 ‘개발 비용’을 얼마나 투자하느냐에 달려있는 부분이라고 할 수 있다. 특히, ‘정적 분석 이행률’과 같은 SW 실행 전에 잠재적인 결함을 분석하는 것은 이러한 투자 없이는 대부분 이룰 수 없는 수치이다. 그래서, 보통 ‘정적 테스트’는 제대로 갖추어진 개발 조직이 아니라면 성립하기 어려운 지표가 된다.보통, 이 ‘정적 테스트’ 지표를 얼마나 진행하고 있느냐에 따라서, 소프트웨어 개발 조직의 성숙도를 체크할 수 있으며, 소프트웨어 개발 조직에 얼마나 투자를 하고 있느냐에 대해서 알 수 있는 지표이기도 하다.보통은 품질검증에서 동적 테스트로써 요구사항 검증방법과 구조 검증방법이 진행되는데, 마찬가지로 구조 검증인 구조적 커버리지 또한 Basic path, Statement, Branch, MD/DC Coverage 등을 선택해야 하므로, 이 또한 개발 조직의 투자 없이는 이루어지기 힘들다. 그래서, 대부분의 개발 조직 현장에 가보면 기능 검증, 비기능 검증, 정형 검증, 사용자 검증 중에 기능 검증과 사용자 검증만을 취해서 품질검증을 하는 경우가 대부분이다.소프트웨어 개발자에게 ‘품질검증’을 제대로 요구하기를 원하는 조직이라면, ‘정적 테스트’를 수행할 수 있는 투자나 일정, 준비 또는 품질 관련 조직이 세팅되어 있어야 한다. 이러한 단계 없이, 개발자에게 ‘테스트’를 제대로 하지 않는다고 강요하는 개발회 사는 정말 크게 잘못된 케이스라고 보면 된다. 그런 회사는 배울 것도 없으니 피하는 것이 최선이다.또한, 기능 검증이나 비기능 검증 또한 테스트 케이스에 대한 자동화된 방법들을 사용하지 않는 다면, 이 또한 개발자에게는 상당히 모호한 테스트들만이 존재하게 된다."좌우지간, 소프트웨어 개발의 시각화"소프트웨어 개발의 경험자라고 하더라도, 소프트웨어 개발 현장에서 일어나는 일들을 모두 파악할 수 있는 방법은 ‘지감’밖에 없을 것이다. 그래서, 소프트웨어 개발에 있어서 적정한 범위까지 개발의 과정을 ‘시각화’하는 기준이 필요하다.하지만, 이 ‘시각화’는 말 그대로 ‘과비용’으로 책정되거나, 소프트웨어 개발을 하기도 어려운 일정과 시간에 촉박한 경우에는 이 시각화의 최소 영역에 대해서 고민하고 결정해야 한다. 완전한 시각화를 이룰 경우에는 소프트웨어 개발 관리조직과 품질조직, 테스트 조직 등의 PM관리체계가 완비되어 있는 경우에만 이러한 과정을 수행하는 것이 최선이다.그리고, 중요한 케이스나 문서 등에 대해서 품질관리 조직과 PM조직이 해당 문서를 작성하는 것이 되어야지, 각 개발자에게 이러한 업무를 전가하는 방식으로 진행되어서는 문제가 해결되지 않는다. 언제나, 품질조직은 옥상옥이 되어서는 안된다.2/2페이지결론적으로 '능력 부족한 개발자'소리를 듣는 것이 대부분이다.대부분 급하다고 일을 의뢰하거나 서비스 론칭을 위해서 급하게 요구하는 경우가 있다. 개발자의 선택은 매우 명쾌하다. 정해진 기간과 인원 숫자로 만들어야 하는 서비스가 특정한 시간 내에 동작하게 하는 방법은 동작시에 제약사항과 커버하지 못하는 품질 이슈를 만드는 것뿐이다.말 그대로 기술적 부채를 만들어 낼 수밖에 없으며, 이 기술적 부채는 결론적으로 반복적인 유지보수 업무와 처리하지 못하는 기능들에 대한 하소연을 만들어 낸다.슬프지만 그렇게 반복되는 과정에서 경영진은 해당 개발자를 신뢰하지 못하게 된다. 그리고, 그렇게 반복적인 유지보수 업무를 만든 것은 개발자의 능력 부족이라고 생각하게 되고, 이 관계는 보고서가 늘어나거나 주간회의시에 디테일하게 보고하라는 식의 결론으로 귀결된다.물론, 이런 상황을 만든 '착한 개발자의 결정'이 문제이기는 하다.대부분 경험이 풍부한 개발자들은 이런 과정들을 반복해 보았기 때문에 처음부터 거부하거나 거절하거나, 적정한 선에서 타협하는 방안들을 제시한다. 물론, 그 과정에서 무지한 경영진과 트러블이 발생하는 것도 다반사이다.이 경우 중간관리자가 개입해서 타협하는 경우가 분명 있다.단언컨대 해당 중간관리자는 둘 중 하나이다. 무지하거나 난파하려는 개발 조직을 재빠르게 떠날 사람이다.소프트웨어 개발에서 '급한 일'이란 없다.정해진 규칙과 기본에 충실하게 하고, 빠진 것 없는지 체크하고 디자인, 설계 후에 미래의 변화에 대해서 적절하게 해당 조직의 규모와 형태에 따라서 반영한 후에 '개발'하는 것이다.지금 이상황에도...'급한 일'이라면서 일을 가져다주는 경영진을 만나고 있을 슬픈 개발자들을 위해서...끄적끄적...#와탭랩스 #와탭 #프로젝트 #인사이트 #경험공유 #조언
조회수 7739

스타트업 면접 후기와 꿀팁

 요즘에 공모전과 다음 회사를 준비한다고 바쁜 나머지 글 쓸 시간이 없다가 이제야 시간이 나서 끄적거려봅니다. 이전에 다니던 스타트업을 그만두고, 저는 이번에도 역시 스타트업 위주로 다음 회사를 보고 있는데요(정확하게는 스타트업 또는 신사업 개발 쪽을 알아보고 있습니다), 10여 개의 스타트업을 돌아다니며 면접을 보면서 느낀 점들을 정리해보려고 합니다. 이 글은 아마 스타트업 지원을 준비하고 계시거나 스타트업에 계신 인사담당자 또는 대표님께서 보시면 좋은 글이 될 거라고 생각합니다. 우선 저의 상황을 더욱 알기 쉽게 하기 위해서 저의 간략한 스펙들을 공개하도록 하겠습니다.개발자 Brad교육서울 4년제 대학교 전자전기컴퓨터공학 학사경력사항(약 4년)2013년 1월 ~ 2014년 4월(약 1년 4개월) : 웹/앱 서비스 스타트업 CTO2014년 5월 ~ 2016년 12월(약 2년 7개월) : IoT 하드웨어/소프트웨어 스타트업 개발팀장스킬웹 백엔드 개발데이터베이스 구축/관리팀 빌딩/매니지먼트 부끄럽지만 경력은 별로 없습니다. 흥미 분야는 IoT와 빅데이터를 활용한 솔루션 분야라서 주로 하드웨어와 소프트웨어를 둘 다 다루거나 빅데이터를 이용한 엔지니어링을 하는 주로 회사를 알아보았습니다.그럼 이제부터 바로 본론으로 들어가서 각 회사에 간략한 정보들과 좋았던 점 안 좋았던 점을 주르륵 적어보겠습니다.A사(최종합격)연봉 : 업계 평균업무 : 웹 백엔드 + 개발팀 업무 전반 + 기타 등등지원방법 : 스타트업 채용사이트에서 채용공고를 보고 인사담당자에게 커버레터 + 이력서 + 포트폴리오를 첨부하여 메일로 보냄특징 : 세계에서 내로라하는 고학력자들로 이루어진 이사진. 하드웨어와 소프트웨어, 제조까지 넓은 스펙트럼, 미국에 본사가 있고 한국에 지사 형태로 운영 중(개발팀은 대부분 한국에 있음)1차 면접 : CEO, CTO, 개발실무자 1명2차 면접 : CEO, CTO와 함께 점심식사 후 티타임좋았던 점- CEO와 CTO분이 굉장히 솔직한 스타일- 하드웨어와 소프트웨어(웹/앱) 둘 다 아우르면서 할 수 있는 기회- 개발팀 핵심 멤버로 활약 가능성- 입사 시기가 새로운 사무실로 이사하는 시점과 같았음(분위기 쇄신)- 통근시간 약 40분고민했던 점- 추후에 통지받은 연봉이 구두로 약속했던 연봉 수준보다 낮았음- 개발실무자가 아닌 경영진 위주로 이루어진 면접으로 실무진의 성향 파악 불가B사(최종합격)연봉 : 업계 평균 이상업무 : 데이터베이스 구축 + 웹 백엔드 + 개발팀 업무 전반 + 기타 등등지원방법 : 스타트업 채용사이트에서 채용공고를 보고 인사담당자에게 커버레터 + 이력서 + 포트폴리오를 첨부하여 메일로 보냄특징 : 요즘 핫한 기술을 다루고 있으며 해외에서는 최근에 매각 사례가 많은 기술을 연구하는 기업. 하드웨어보다는 소프트웨어에 중점을 두고 있으며 겉으로 드러나는 기술은 아니지만 앞으로 많은 분야에서 다양하게 응용될 기술을 보유함1차 면접 : CEO, CMO, 개발실무자 1명공동 사무실에 있는 회의실에서 1시간 30분가량 인터뷰를 봄. 인터뷰가 끝날 때쯤 같이 일하자는 제의를 받았고 대략적인 연봉협상을 함. 이후 두 차례 정도 통화로 근무조건 및 연봉협상을 함.좋았던 점- 1회의 면접 후 빠른 결정- 높은 연봉- 일이 재밌어 보임- 이제 막 성장하는 산업군의 주역- 개발팀원이 성격이 좋아 보임- 팀 규모가 비교적 작음(제가 규모가 작은 팀을 선호하는 편입니다)고민했던 점- 통근시간 약 1시간 10분C사(전화 인터뷰 탈락)연봉 : 모름업무 : 빅데이터 처리 알고리즘 코딩지원방법 : 채용사이트를 통한 이력서, 포트폴리오 업로드특징 : 소프트웨어 알고리즘에 강점을 두고 있는 회사1차 면접(전화/코딩인터뷰) : 개발실무자 1명지원서 접수 후 메일로 이메일 주소와 전화번호를 알려달라고 회신이 옴. 이력서에 이미 적혀있는 사항을 다시 알려달라고 회신이 온 관계로 인사담당자가 꼼꼼한 성격은 아니라고 생각함(회신 온 메일이 복붙한 티가 역력히 남) 개발팀 인사가 개발팀에게는 굉장히 중요하다고 생각해서 지원을 포기하기로 생각하고 답장하지 않았는데, 어느 날 뜬금없이 낮잠 자는데 전화가 와서 인터뷰를 시작하겠다고 함. 황급히 맥북을 열고 그 사람이 알려준 사이트에 들어가니 내가 짠 코드를 실시간으로 확인할 수 있도록 만든 코딩 인터뷰 전용 웹사이트가 있었음. 그곳에서 간단한 코딩을 30분여간 진행함굉장히 기분이 안 좋았던 점은 코딩 인터뷰를 진행하면서 모르는 거 있으면 질문하라고 담당자가 얘기했으면서도 인터뷰 내내 귀찮고 성의 없는 말투로 이야기함. 그리고 그 담당자를 어떻게 불러야 할지 몰라서 이름을 가르쳐달라고 했는데 "제 이름은 아실 필요가 없고요", "제가 담당자분을 어떻게 불러야 할지 모르겠어서요", "제 이름은 아실 필요가 없어요"라고 퉁명스럽게 대답하여 이 회사는 절대 가지 않겠다고 다짐하는 계기가 되었음.D사(연락두절)연봉 : 업계 평균업무 : 웹 프론트 + 백엔드 + 하이브리드 모바일 앱지원방법 : 스타트업 채용사이트에서 채용공고를 보고 인사담당자에게 커버레터 + 이력서 + 포트폴리오를 첨부하여 메일로 보냄특징 : 규모가 있는 웹 에이전시의 신사업 개발팀이 떨어져 나와 스타트업 형태로 새로 팀빌딩을 시작하는 팀.1차 면접 : 기획자 2명공동 사무실에 있는 회의실에서 약 1시간 동안 면접을 진행하였음. 웹에이전시 기획자 2명이라서 개발에 대해서는 지식이 없었음. 새로 시작하는 사업 전반에 대해서만 이야기함.좋았던 점- 새로 시작하는 팀- 개발팀 핵심 멤버로 활약 가능성- 통근시간 약 40분고민했던 점- 스타트업 마인드로 무장한 팀은 아니었음- 1차 면접 후 연락을 준다고 했는데 연락이 없어서 문자를 한통 보냈으나 너무 바빠서 까먹었다는 답변과 함께 이번 주까지 답변을 준다는 문자를 받음. 탈락했는지 그 이후로 연락이 없음.E사(최종합격)연봉 : 업계 평균 이하업무 : 웹 프론트 + 백엔드지원방법 : 채용사이트를 통한 이력서, 포트폴리오 업로드특징 : 규모가 있는 마케팅 대행사의 신사업 개발팀이 떨어져 나와 스타트업 형태로 스핀오프(자회사)한 팀.1차 면접 : 개발실무자 2명2차 면접 : CEO모회사인 마케팅 대행사의 풍족한 인프라와 함께 한켠의 독립된 사무실을 사용함. 회사 내에 있는 카페에서 면접을 진행하였고 1차 면접은 굉장히 분위기가 좋았음. 개발자들이 같이 일하고 싶다고 그 자리에 이야기함.CEO와의 면접 이후 별로 일하고 싶지 않아져서 입사 포기.좋았던 점- 개발팀 핵심 멤버로 활약 가능성- 통근시간 약 30분- 5시 퇴근- 풍족한 먹거리고민했던 점- 웹/앱 서비스를 위주로 하는 팀- 스타트업 마인드로 무장한 팀은 아니었음- CEO가 하고 싶은 일만 하게 되고 계속해서 일만 벌이는 스타일- CEO가 모든 업무지시를 개발자들에게 문서가 아닌 구두의 형태로 직접 전달- 팀원이 3명으로 굉장히 적은데도 각각의 독립된 다른 유형의 서비스를 4개나 진행 중(그중에 하나라도 제대로 되는 서비스가 없음)F사(최종합격)연봉 : 업계 평균업무 : 웹 백엔드 + 서버 개발 + 개발팀 매니지먼트지원방법 : 스타트업 채용사이트에서 채용공고를 보고 인사담당자에게 커버레터 + 이력서 + 포트폴리오를 첨부하여 메일로 보냄특징 : IoT와 빅데이터를 결합한 하드웨어 + 소프트웨어로 자체 기술력을 인정받고 꽤 많은 금액의 투자까지 유치한 실력 있는 팀. 새로 시작하는 신사업 분야의 개발팀을 뽑는 채용이었음.1차 면접 : CEO, 개발실무자 1명, PM 1명인터뷰 내내 스타트업 마인드로 무장한 팀이라는 생각이 들었음. 그 점이 굉장히 좋았고 그 자리에서 바로 같이 일했으면 좋겠다는 제안을 받음.좋았던 점- 개발팀 핵심 멤버로 활약 가능성- 통근시간 약 40분- 스타트업 마인드가 충만한 팀원들- 글로벌 스타트업(외국인과의 협업 기회)고민했던 점- 연봉이 업계 평균보다 약간 낮음- 직급체계가 굉장히 빡빡하게 짜여 있음. 관리자 직급부터는 KPI를 통한 성과급 및 승진 제도가 존재하는데, 담당자 말에 따르면 새로 들어온 팀원들은 대부분 KPI를 달성하기 힘들 정도로 높게 설정한다고 함. 그리고 낮은 연봉에 빡빡한 직급체계가 높은 friction으로 작용하였음. 이미 입사한 사람들에게는 좋은 제도일지 모르겠지만 처음 회사를 접하는 사람에게는 약간의 거부감이 있을 것으로 생각됨.G사(최종합격)연봉 : 업계 평균업무 : 웹 백엔드 + 서버 개발 + 개발팀 매니지먼트지원방법 : 스타트업 채용사이트에서 채용공고를 보고 인사담당자(CEO)에게 커버레터 + 이력서 + 포트폴리오를 첨부하여 메일로 보냄특징 : 요즘 핫한 스마트카와 관련된 솔루션을 개발하는 업체.1차 면접 : CEO2차 면접 : CEO, 고문이사면접 분위기는 매우 좋았음. 그 이후로 대표님과 개인적으로 여러 번 연락한 적이 있음.좋았던 점- 개발팀 핵심 멤버로 활약 가능성- 여러 가지 분야의 일을 경험할 기회- 통근시간 약 40분고민했던 점- 연봉이 업계 평균보다 약간 낮음- 정규 개발팀이 없고 개발팀 인턴으로 이루어져 있었음(회사의 거의 모든 업무를 CEO 혼자 처리하고 있었음)- 모든 부서의 심각한 인력난- 스마트카 산업과 다른 유형의 2개의 사업체를 동시에 운영 중(돈벌이를 위해)- 면접 이후 스타트업에서 경력이 있는 친구들과 함께 CEO를 찾아뵌 적이 있는데 친구들이 CEO와 회사의 비전에 대해 물은 적이 있었음. 근데 그 당시에 CEO가 대답하기 싫다고 대답함. 그 이후로 입사에 대해 심각하게 고민하게 됨. A사부터 G사까지 7개 회사의 면접을 비교 분석해보았습니다. 면접 시 제가 공통적으로 느꼈던 점과 피드백은 다음과 같습니다.- 커버레터와 함께 이력서와 포트폴리오를 보냈더니 "지원서가 굉장히 인상 깊었다"라는 피드백을 많이 받았음- 고용자와 피고용자, 갑과 을의 관계가 아닌 사람과 사람 간의 대화 형식의 인터뷰가 좋다. 그리고 스타트업 사람들은 그걸 더 선호함. 회사에 대해 미리 조사하고 궁금한 건 솔직하게 정확하게 이야기한다.- 팀의 구성원들이 스타트업을 경험한 사람들이 아니면 그 회사는 스타트업이 아닌 것 같은 느낌이 들었음. 결론적으로 회사나 아이템 자체보다는 그 팀을 구성하는 인원들의 마인드가 굉장히 중요하다는 생각이 들었음.- 서류전형, 면접전형에서 탈락하더라도 아무 말 없이 연락 두절되는 것보다는, 메일 또는 문자로 탈락되었다고 말해주는 것이 지원자 입장에서 좋았음. 왜냐하면 빠르게 마음을 접고 다음 계획을 실행할 수 있었기 때문.- 스타트업에서의 근무 경험을 좋게 보는 분들이 많았음. 이상으로 저의 스타트업 면접 후기를 마칩니다. 이제는 새로운 회사에서 열심히 일하고 싶습니다. 아무 걱정 없이요. 추가로 면접을 어떻게 봐야 하는가에 대한 꿀팁을 드리자면, 어디나 똑같겠지만, 솔직함이 가장 강력한 무기입니다. 너무 잘 보이려고 할 필요도 없고 너무 겸손할 필요도 없습니다. 자신이 할 수 있는 건 자신 있게 할 수 있다고 얘기하고, 자신이 할 수 없거나 모르는 건 못한다고 이야기할 때 좋은 모습을 비추게 되는 것 같습니다. 스타트업을 사랑하시는 여러분들과 항상 함께하고 싶습니다. 파이팅!#비주얼캠프 #인사이트 #경험공유 #조언 #스타트업면접 #꿀팁
조회수 59

바로고에만 있는 특별함, 바로고 '브런치데이'

barogo바로고의 사내 소식을 전해드립니다.바로고는 임직원과 함께 하는다양한 이벤트들이 마련되어 있습니다.이번에 진행한 이벤트는바로브런치데이정신없이 후다닥~ 출근해서약간의 배고픔을 참고 일하는 바로고의 직원들을 위해브런치데이를 마련하였답니다.모두들 다 같이 아침 인사도 나누고함께 브런치도 즐기는아주 즐거운 시간이것이 바로바로고의 직원 복지!그 현장을 지금 만나봅니다~^^바로고브런치데이오늘의 메뉴샌드위치파니니감자튀김아메리카노취향에 따라 골라 먹을 수 있는클럽샌드위치햄치즈파니니모짜렐라 토마토 파니니감자튀김그리고 아메리카노는뜨겁게! 혹은 차갑게!취향 따라입맛 따라골라 먹을 수 있는바로고의 브런치데이 입니다.배가 고팠던 우리 바로고의 직원들이하나둘씩 모이기 시작합니다.눈길을 뗄 수 없는샌드위치를 향한 시선!이렇게 함께 모여브런치를 즐기는바로고의 분위기 훈훈함 그 자체~함께 먹으면 더욱 맛있는브런치 타임!정신없는 업무시간에 할 수 없었던정겨운 대화들도 오고 가며즐거운 시간을 가집니다.지금부터는 본격 먹방 시작!재빠른 속도로테이블의 음식들이 사라져 가고 있어요!먹는 것 하나는어딜가도 빠지지 않는 바로고의 직원들이랍니다."먹는거 하나는 빠지지 않는다"브런치 타임이 끝나갑니다.아쉬운 마음을 뒤로하고다음 브런치데이를 기다려봅니다."이런 시간 자주자주 있었으면 좋겠습니다."대표님~^^ 하고 살짝쿵마음을 전해봅니다.바로고의 직원끼리 이렇게 소통하고 함께 하는 시간너무너무 좋은 것 같아요! 굿굿! goodgood!바로고브런치데이바로고는소통과 공감의 시간을 통해업무 효율을 높이고서로의 친목도 다지는의미 있는 사내 복지를 진행합니다.바로고의 사내소식앞으로도 기대해주세요!감사합니다.
조회수 1485

미생과 스타트업

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

컴공생의 AI 스쿨 필기 노트 ⑤ 베이즈 결정이론

이번 5회차 수업에서는 베이즈 결정이론(Bayes Decision Theory)과 가우시안 혼합모형(Gaussian Mixture model)에 대해 배웠어요.1980년대 이후 세계 금융시장에서 위험관리를 계량화한 것은 확률이론, 그중에서도 ‘베이즈 정리’가 있었기에 가능했어요. 이전의 경험과 현재의 증거를 토대로 사건의 확률을 추론하는 알고리즘 덕분에 온갖 파생상품이 탄생했어요. 그런데 베이즈 정리는 오랫동안 금기시됐는데요. 주관적인 믿음을 측정하기 때문에 합리적이지 않다는 이유에서였다고 해요. 하지만 베이즈 정리의 활용도는 갈수록 커지고 있어요. 암호 해독부터 전쟁 중 의사결정, 실종된 사람이나 선박의 위치 추정, 암 발병률 예측, 스팸메일 걸러내기 등 무한대에 가깝다고 해요. 이번  필기노트에서는 베이즈 결정이론에 대해 알아볼게요.Bayes Decision Theory베이즈 결정이론은 패턴 인식을 위한 통계적 접근 방법이에요. 베이즈가 제시한 통계적 방법을 통해 의사 결정을 하는 방법이죠. 전통적 통계 방식은 통계적 추리를 할 때 표집으로 얻은 정보만 사용해요. 베이지안 확률이 전통적 통계 방식과 다른 점은 학습자가 기존에 가지고 있는 사전 정보를 활용한다는 것인데요. 불확실한 상황에서 통계적으로 얻은 정보를 가지고 의사 결정을 해야 하는 경제학, 경영학 등 여러 분야에서 많이 사용되고 있어요.베이즈 결정이론에 사용되는 베이즈 정리(Bayes rule)에 대해 간단한 예시를 들어볼게요.우리가 은행 지점장이라고 가정해봐요. 고객에게 돈을 빌려줄 수는 있지만 아무에게나 막 빌려줄 수는 없겠죠?그래서 은행 고객을 high-risk, 즉 돈을 빌려줘도 안 갚을 확률이 높은 고객과 low-risk, 즉 돈을 빌려주면 갚을 확률이 높은 고객으로 나눌 거예요.그런데 은행 고객이 돈을 갚을지 안 갚을지를 판단하는 기준이 있어야겠죠? 그래서 고객의 연봉(yearly income)과 현재 은행 계좌 보유금액(savings)을 가지고 판단할 거예요. 이렇듯 변수가 두 개만 있을 때 우리는 이항분포를 사용해서 의사를 결정해요. 위에서는 두 가지 고객이 존재하므로 이항분포를 사용해서 고객에게 돈을 빌려줄지 여부를 결정하죠. 결정을 내릴 때는 확률이 큰 쪽을 선택할 거예요. 확률이 큰 쪽을 선택하는 것은 이성적인 판단이기 때문이에요. 그래서 고객 x가 high risk일 확률(P(C=1|x)이 x가 low-risk일 확률(P(C=0|x)보다 크다면 1이라는 결정을 내리고, 작다면 0이라는 결정을 내려요.하지만 우리가 내리는 결정에도 error(=risk)가 존재하겠죠?확률의 합은 항상 1이고 결정은 항상 P(C=1|x)나 P(C=0|x) 중 확률이 큰 쪽이기 때문에 1에서 그 확률을 빼면 그 결정의 error가 돼요. 베이즈 결정이론은 이처럼 분류하고자 하는 물체들에 대해서 사전 정보가 주어지는 경우에 사용이 될 수 있는 이론이에요.Bayes’ rule베이즈 결정이론에는 베이즈 정리(Bayes’ rule)가 사용되는데요. 자세히 살펴볼게요.- P(C) : prior probability(선행 확률, 특정 사건이 일어날 것에 대한 추가 정보를 획득하지 못한 확률)로 여기서는 x가 어떤 값을 가지든 C가 1일 확률을 말해요.- p(x|C) : likelihood(우도, C가 주어졌을 때 조건부 확률) C가 주어졌을 때 x를 가지고 있을  확률을 말해요. 따라서 x값에 따라 확률이 달라져요. 예를 들어 p(x|C = 1) 은 C가 1인 즉 high risk인 고객이 x를 가지고 있을 확률을 나타내요.- p(x) : evidence(증거)는 C와 상관없이  x가 나타날 확률이에요.- p(C|x) : posterior probability(사후 확률)로 우리는 사후 확률을 기반으로 아래와 같이 decision을 내려요.위의 예시처럼 두 가지 고객만 있는 상황(이항분포)이 아니라 K명의 고객이 있는 경우(다항분포)는 어떻게 계산할까요? 이 경우에도 베이즈 정리가 적용되는데 식이 조금 달라져요.p(x) 구하는 식만 달라지고 나머지는 위에서 봤던 예시와 같아요. 그리고 이항분포의 error는 1에서 둘 중에 큰 확률을 뺐듯이 다항분포의 error도 아래와 같이 구해요.Loss and Risk위의 이항분포에서는 고객에게 돈을 빌려줌으로써 돈을 못 받는 손실(Loss)이 존재하고 돈을 못 받을 것 같은 고객에게 빌려주지 않음으로써 생기는 손실이 존재해요. 이 중 어떤 것이 더 손실이 적을지 생각해봐야겠죠?의사 결정을 하는 행동(action)을 αi라고 했을 때 αi에 대한 손실을 λik라고 정의할게요.위의 식은 예상되는 손실값이에요. 이 손실값은 실제로는 k인 상황이지만 행동 αi를 취해서 생기는 손실이에요.손실을 줄여야 하기 때문에 가장 작은 손실이 생기는 행동을 취해야 해요. 따라서 위의 식을 보면 argmin함수를 이용해서 k개의 행동 중 가장 작은 손실을 취해요.Reject 의사 결정이 어려운 경우에는 의사 결정을 피하는 것이 더 적절한 경우도 있어요. 이때는 어떠한 행동도 하지 않는 행동 αK+1을 추가해요.action αK+1을 추가하면 αK+1에 따른 손실 λik 또한 하나가 더 늘어요.위의 수식은 reject 행동을 포함했을 때 결정을 내리는 식인데 간단하게 참고하시면 될 것 같아요.이번에는 베이즈 결정이론에 대해 자세하게 다뤘는데요. 이번 수업은 교수님께서 많은 것을 가르쳐주셔서 저 같은 초보자가 듣기에 조금 힘든 점이 있었어요. 벌써 8주차 이론수업의 절반 이상이 지났는데요. 5주 동안 배운 많은 이론들을 코드로 능숙하게 표현하는 데에는 많은 노력이 필요하겠지만, 이만큼 왔다는 것만으로도 뿌듯한 기분이 들어요. 8주차부터 시작하게 될 팀 프로젝트에서 실력 발휘를 하기 위해서 더 열심히 수업에 임해야겠어요!* 이 글은 AI스쿨 - 인공지능 R&D 실무자 양성과정 5주차 수업에 대하여 수강생 최유진님이 작성하신 수업 후기입니다.
조회수 1541

Humans of TODAIT : 안드로이드 천재 개발자 김범준을 만나다

‘Humans of TODAIT’의 네번째 주인공, 투데잇 안드로이드 개발자 김범준씨를 만나보았습니다. 투데잇의 천재 개발자로 불리는 그의 이야기를 함께 들어볼까요?(2017.08)Q. 자기소개 부탁드려요.안녕하세요! 투데잇에서 까칠남을 맡고 있는 안드로이드 개발자 김범준입니다. 퇴사자 인터뷰를 하게 되니, 정들었던 팀원분들과 헤어질 생각에 아쉽고 싱숭생숭하네요. (웃음) 작년 초 쯤 ‘SW 마에스트로’ 프로그램에서 만난 멘토님께서 제게 투데잇 안드로이드 개발자 자리를 추천해주신 덕분에 이렇게 투데잇과 인연이 닿게 되었어요. 사실 처음에는 큰 생각이 없었는데, 대표님과 팀장님을 만나보니 저와 코드도 잘 맞고 개발 쪽으로도 많이 배워볼 수 있을 것 같아서 그 날 바로 입사 결정을 내렸고, 지금은 퇴사를 앞두고 있네요.Q. 그렇게 좋은 투데잇을 떠나는 이유는 무엇인가요?원래 병특을 가야 했어요. 제가 군대를 아직 안 갔기 때문에, 군대 문제를 해결 해야 더 많은 기회도 생기고 지금 가지고 있는 마음의 짐 같은 것도 덜 수 있거든요. 아쉽게도 투데잇이 병특 산업기능요원지정업체가 아니어서 군대 문제를 해결하기 위해서는 퇴사할 수 밖에 없는 상황이에요. 사실 원래부터 군대 문제 때문에 잠시 동안만 일하기로 했던건데, 회사생활이 너무 만족스럽고 일이 즐거워서 계속 미루다가 이제서야 결정을 내렸네요. 지금도 많이 아쉬워요. 투데잇만한 회사 없거든요.Q. 팀 내에서 평소 자기계발을 많이 하는 것으로 유명한데, 혹시 자기계발 노하우가 있나요?사실 공부는 진짜 하는 것보다 시작하는 것이 어렵잖아요. 그래서 저는 일부러 저한테 강제성을 주는 편이에요. 매주 하는 동아리 활동이라든지 발표 기회를 만든다든지 관련 세미나를 참여한다든지 그런 일정이 생기면 자연스럽게 하게 되더라고요. 하면 또 잘하고 싶은 게 사람 마음이니까 자꾸 강제적으로 그런 기회를 만들죠.그리고 저는 일상에서 배울 수 있는 기회를 얻으려고 해요. 일하다가 힘들거나 머리가 잘 안 돌아갈 때 저장해둔 아티클을 보곤 하죠. 또 술마실 때도 같은 직업군의 친구들을 만나면 그런 얘기를 많이 하잖아요. 너 이거 시도해봤냐 어땠냐 이건 어떻게 하는거냐 같은 이야기요. 제가 주위 사람들에게 자극을 많이 받거든요. 책상 앞에 앉아서 하는 공부보다는 일상적 시간을 활용하고 뭔가를 준비하기 위한 공부의 자기계발을 하는 것 같아요.Q. 지난 1년을 돌아보는 의미에서, 개발자로서의 좌우명이나 철학이 있을까요?저는 어떤 일을 하든 명확한 근거가 있어야 한다고 생각해요. 커뮤니케이션에서도 그렇고 개발에 있어도 마찬가지예요. 내가 하는 일에 대한 충분한 이유가 있어야 하고 그게 코드에 녹아 있어야 해요.예를 들면, 같은 풍경을 보고 글을 쓸 때도 여러 방법이 있잖아요. 사람마다 글 쓰는 방법이 다르고. 그 방법을 선택한 데엔 저마다 이유가 있어요. 코드도 마찬가지예요. 어떤 기능을 개발할 때 그 기능을 구현할 수 있는 여러 방법이 있는데, 개발자라면 내가 만든 코드에 대해 내가 왜 이렇게 짰는지 다른 사람에게 자신 있게 말할 수 있는 개발자가 되어야 한다고 생각해요.저는 힙한 개발자가 되고 싶어요. 그러니까 최신 트렌드에 민감하고, 새로운 것에 도전하고 두려워 하지 않는 그런 개발자요. (웃음)Q. 힙한 개발자 멋지네요. 그렇다면 10년 후에는 무엇을 하고 싶은지 궁금한데요?제 꿈은 그냥 행복하게 사는거예요. (하하) 추상적인 이야기 같겠지만, 행복하게 살기 위해선 많은 것들이 필요하잖아요? 우리가 말하는 이상적인 행복이란 것은 돈, 인간관계, 사회적 직위, 건강과 같은 모든 박자가 잘 맞아 떨어졌을 때 이루어지는 행복이거든요. 그래서 저는 행복하기 위해서는 끊임없이 노력해야 한다고 생각해요. 장차 10년 후에 제가 뭘 하고 있을지는 모르지만, 지금 현재의 상황에서 제가 할 수 있는 최선의 선택을 하면서 열심히 단계적으로 이루어나가면, 10년 후에도 충분히 행복할 것 같아요. 저는 지금 행복하거든요. (웃음)Q. 일하다 보면 해결하기 힘든 난제를 만날 때가 있을 것 같은데, 그럴 땐 어떻게 극복하나요?내가 스트레스를 많이 받고 있다는 걸 깨달으면, 그냥 최대한 스트레스 받지 않으려고 해요. 그냥 뭐 하면 되지 라는 생각이죠. 하면 되지 하면서 하다보면 결국 되는 것 같아요. 어차피 해야 될 일인데, 스트레스 받으면서 하기 보다는 그냥 아무 생각 없이 열심히 하는 게 나으니까요. 만약에 제가 몰라서 못하고 있는 일이면 여러 사람들에게 물어보려고 하면서 어떻게든 해결하려고 하고요.Q. 그렇다면 투데잇에서 가장 만족스러운 결과물은 무엇인가요? 개인적으로 뿌듯하다거나 실제 반응이 좋았다거나 그런 것들이요!‘스탑워치’ 기능이 두 개 다 포함돼요. 이전 개발자가 스파게티 코드(엉망진창의 코드)로 만들어 놓았던 것이 있는데 그 코드를 제가 깔끔하게 다 수정했고, 계속 유저분들이 요청해주셨던 시간 잠금, 극강의 잠금 모드 같은 기능들을 추가해서 코드를 예쁘게 잘 만들어놓았거든요. 일단 제가 기발한 기능과 함께 코드를 예쁘게 잘 만들어냈다는 점에서 스스로도 만족을 했었고, 유저분들도 팀원분들도 좋은 피드백을 해주셔서 굉장히 좋았습니다.Q. 지금 이 글을 보고 계시는 스탑워치 기능 애용 유저분들께 한마디 해주세요!우선 잘 사용해주셔서 감사해요! 제가 만든 기능을 이용해 공부하시는 걸 보면, 저도 정말 큰 자부심을 느끼거든요. :) 다만, 아직 스탑워치 기능에 문제가 조금 있는 거로 알고 있어요. 약간 불편하더라도 이왕이면 둥글게 좋게 별 5점으로 리뷰 주시면! 저희와 의사소통하면서 함께 좋은 서비스 만들어 나갈 수 있을 것 같아요. 안 보는 것 같지만 투데잇 개발자 전체가 매일 열심히 읽고 있거든요. 정말 리뷰 하나에 울고 리뷰 하나에 웃습니다. 저희 투데잇 지금까지 사랑해주셨지만, 앞으로도 계속 사랑해주시면 감사하겠습니다. :)Q. 반대로 투데잇 안드로이드 개발에 있어 아쉬운 부분도 있을 것 같아요. 나 이거 진짜 욕심났다! 혹시 있을까요?음.. 저는 옛날에 있던 아키텍처를 일단 전부 바꾸고 싶어요. 최근에 꽂힌 아키텍쳐가 있는데, 그 아키텍쳐에 맞게 코드를 다 변경해보고 싶다는 욕심이 있거든요. 근데 그 아키텍쳐 특성상 현재 코드에서는 완전히 대대적인 수정이 들어가야되는데, 제가 남은 시간이 얼마 없어서 많이 수정을 못했죠. 우리가 좀 더 많은 시간이 있고 여유가 있었더라면 더 바꿔볼 수 있었을텐데 그런 부분들을 못한 게 조금 아쉬워요.“투데잇의 힘은 서로에 대한 믿음인 것 같아요”Q. 범준님에게 투데잇이란? 투데잇 팀의 힘이 무엇이라고 생각하시나요?무엇보다 투데잇의 힘은 서로에 대한 믿음인 것 같아요. 커뮤니케이션이 잘 되려면 그 사람에 대한 믿음이 있어야 되잖아요. 근데 저흰 그게 되게 잘 되고 있다고 생각되거든요. 업무적으로 제 이야기를 자신있게 할 수 있었던 이유도 이 사람들은 전부 다 각자 일을 열심히 하고 책임을 지려는 사람, 멋있는 사람이라는 걸 알고 있었기 때문에 가능했거든요. 다들 맡은 바에 있어서 최선을 다하고 정말 열심히해요. 그 분위기가 서로에 대한 믿음을 만들고 우리의 원동력을 만들죠. 확실히 저희 팀은 일단은 진짜 서로에 대한 믿음이 강하다? 업무적 믿음이 강하다? 그런 게 있는 것 같아요.Q. 투데잇에서 가장 고마웠던 사람은 누구였나요?솔직히 다 고마운데, 저는 대표님께 가장 감사했어요. 이번에도 혼자 고민하다가 힘들게 퇴사 의사를 밝혔는데, 대표님께서 그건 당연한 거라고 이야기해주시더라고요. 저는 투데잇 팀이 참 좋은 게 어떤 이야기를 했을 때 명확한 근거가 있다면 그 후에 뒤끝이 하나도 없어요. 이번 일도 그렇고 일적으로 이야기 할 때도 그렇고, 이유가 확실하면 OK하고 쿨하게 가곤 하셨거든요. 다 업무적 믿음이 있기 때문이라고 생각해요 저는. 여러모로 저를 많이 믿어주신 대표님한테 제일 감사하죠. 대표님 에너지도 너무 좋고 카리스마도 본받고 싶고 제가 되게 좋아하는 분이에요.Q. 범준님의 다음 타자가 될! 투데잇에 입사하고 싶은, 입사할 분들에게 한 마디 부탁드려요!“팀원 하나하나가 굉장히 중요한 역할을 하고 있는 사람들이어서 그만큼 책임감이 있지만, 그만큼의 자율성도 있는 회사에요”굉장히 좋은 팀이에요. 일적에서는 절대 스트레스 주는 일이 없고요. 뭔가 일이 밀리거나 못하는 거에 있어서는 스트레스가 있을 수도 있어요. 팀원 하나하나가 굉장히 중요한 역할을 하고 있는 사람들이어서 그만큼 책임감이 있지만, 그만큼의 자율성도 있는 회사에요. 노력하는 그대로의 모습을 사람들에게 보여줄 수 있고 인정 받을 수 있기 때문에 흔히 말하는 꼰대 문화가 싫으신 분들은 투데잇에서 행복하게 일할 수 있을 거예요. 업무적으로나 환경적으로나 대우도 근무 환경도 굉장히 좋으니까 관심 있으신 분이면, 특히 안드로이드 개발자 분이면 지금 바로 들어오실 수 있을 것 같아요. 유저한테 피드백도 받을 수 있고 개인적으로 리스펙하는 멋진 CTO분도 계시고, 개발자로서 특히 굉장히 좋은 곳입니다. 주저 마세요!#투데잇 #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화
조회수 6553

`git push —force` 이야기

안녕하세요. 스타일쉐어 개발팀의 김현준입니다. 훌륭한 엔지니어링 경험을 공유하고 싶어 만든 블로그이지만, 아직까지는 그런 일이 없었던지라, 창피한 장애 경험을 공유하고자 합니다.배경:웹 서비스 디플로이는 프로덕션 웹 서버에서 업스트림 master를 풀 받아 리로드하는 방식으로 진행하고 있습니다.CSS, JS 등의 파일들은 CDN을 위해 매 빌드마다 디플로이 이전에 S3에 업로드합니다. Git 커밋의 SHA1 해시를 키로 사용합니다.장애:어제 새벽 서비스에 긴급한 패치가 있었습니다. 하지만 이 커밋은 8분 후 다시 롤백되는데…오늘 오후 디플로이 이후에 갑자기 웹 사이트의 스타일이 전부 깨져보이기 시작했습니다.심지어 아무리 커밋 로그를 살펴봐도 존재하지도 않는 커밋 해시로 파일을 요청하고 있었습니다.원인:롤백을 git revert 명령으로 하는 대신에, 이전 커밋으로 HEAD를 돌리고 git push --force로 업스트림을 덮어썼습니다.해당 커밋은 이미 디플로이가 되어있었지만, 되돌린 이후에 다시 디플로이를 하지 않았습니다.다음 디플로이할 때 해당 웹 서버 로컬에서 업스트림 master를 풀 받자, (개발자의 로컬이나, GitHub에서 보이는 커밋 트리와 달랐기 때문에) 서로 다른 커밋 해시를 가지게 되었습니다.404교훈:force-push를 (창피한 실수라던지, 지저분한 여러개의 커밋이라던지) 이력을 남기고 싶지 않을 때 사용하는 경우가 있는데요. 이는 위의 사례처럼 해당 커밋을 이미 풀 받은 다른 개발자의 로컬을 꼬이게 하거나, 장애를 유발할 수가 있습니다. 롤백을 하고 싶은 경우엔 revert 명령을, 커밋을 정리하고 싶은 경우엔 각자의 브랜치에서 충분히 rebase를 한 뒤에 올리는 습관을 꼭 가져야겠습니다.#스타일쉐어 #개발 #개발자 #개발팀 #인사이트 #후기 #일지
조회수 638

개입전략 - 판매보다 흥미 먼저

개입전략 - 고객이 당신의 서비스에 흥미를 느낄 수 있는 경험 만들기 우리는 왜 마지막 목표만 생각할까?오늘 아침, 트래픽잼을 뚫고 사무실에 출근한 당신에게 상사는 갑자기 미션을 내린다. “매출상승” 다짜고짜 매출상승이란다. 지난 기간 매출이 하락하여 기대 매출을 맞추지 못했다는 것. 그래서 팀 전체가 이 목표를 반드시 달성해야 한다는 것이다. 자, 이제 당신은 어떻게 할 것인가. 매출을 늘리기 위해 무엇을 먼저, 어떻게 해야 할 것인가. 앞이 막막하고 캄캄하다. 보통 우리가 이런 막무가내의 목표를 듣게 되면 무엇부터 해야 할지 알기 어렵다. 이럴 땐, 아주 간단한 방법이 있다. 최종적인 목표달성이 무엇인지 정의한 후, 고객이 이 목표를 달성하기 위해 어떤 과정들을 거치는 지 시뮬레이션 해보는 것이다. 쇼핑몰이라고 생각해보자. 매출을 달성한다는 것은 마케터 입장의 사고이고 고객의 입장에서는 ‘구매완료’라고 정의할 수 있다. 그럼, 고객이 구매완료를 하기 전에 반드시 거쳐야 하는 곳이 어떤 페이지일까? 바로, ‘결제페이지’다. 그럼, 마케터는 두 가지 방법으로 접근해 볼 수 있다. 첫째, 결제페이지에서 구매완료 페이지로의 이동되는 고객수를 늘린다. 둘째, 결제페이지로 도착하는 고객수를 늘린다. 두 개의 아이디어가 비슷한 듯, 비슷하지 않다. 하나는 트래픽을 늘리는 전략이고, 나머지 하나는 전환률을 늘리는 전략이다. 둘 중 어느 것이 제대로 작동한다고 하더라도 ‘매출상승’이라는 목표는 달성할 수 있다. 위 두가지에서 ‘매출상승’은 직접적으로 언급되지는 않았다. 다만, 직접적으로 연관되어 있는 행동을 유도하면서 최종적인 목표를 달성하게 하는 것이다. 이런 생각을 해보자. 당신은 커피를 맛있게 만들 수 있는 바리스타다. 그리고 그 커피를 판매할 예정이다. 그럼, 가장 쉽게 커피를 판매하는 방법이 무엇일까? 바로, 시음신청을 받는 것이다. 다짜고짜 사람들에게 커피가 맛있으니, 사 먹으라고 한다면 먹지 않을 것이다. 그런데, 한 번 시도해보라고 한다면, 부담감 없이 시도해볼 것이다. 그리고 커피가 정말 맛있다면, 그들은 이후 돈을 내고서라도 당신의 커피를 사먹을 것이다. 이 프로세스가 새로운가? 사실, 전혀 그렇지 않다. 전혀 새롭지 않다. 전혀 특별하지 않다. 다만, 당신이 조금 덜 조급하면, 이런 효율적인 세일즈 프로세스를 개발 할 수 있다는 것이다. 맥락적 사고의 필요성: 단게 별 전략의 유무 모든 결과에는 원인이 있다. 바로 앞뒤 맥락이 있다는 것이다. 하지만 가끔 어떤 브랜드나 서비스에는 그 기본적인 맥락이 없다. 무조건 좋고 효과적일 것이라고 이야기 한다. 그것에 대한 검증, 테스트, 소비자인 나에 대한 관심여부는 중요하지 않다. 무조건 당장 구매하라고 한다. 마침 프로모션 할인기획까지 있다고 한다. 내가 그것을 사야 할 유일한 명분은 가격 할인 뿐이다. 당신은 이 비맥락적 캠페인에 여러 번 노출 된 경험이 있을 것이다. 너무도 당연한 이야기지만 실재 마케팅 환경에서는 이런 맥락이 간과되는 경우가 많다. 왜 그런 것일까?마음이 급한 것이다. 팔아야 한다는 생각이 앞선다. 결국 일을 그르 칠 수 밖에 없다. 무슨 일이든 순서라는 것이 있는데, 그 순서를 그르치고 일을 진행 시킬 순 없다. 쇼핑몰을 생각해보자. 고객의 구매를 유도해 사용자가 ‘결제완료페이지’에 많이 도착할 수 있게 만들어 본다고 생각한다. 그럼, 그 전에 고객은 결제페이지에 많이 도착해야 한다. 그럼 그 전에는? 그렇다. 바로 장바구니 페이지에 많이 도착해야 한다. 마지막 전 단계의 목표들에 집중 할 때 얻을 수 있는 것많은 마케터가 직면하는 미션은 옛날이나 지금이나 매출 상승이다. 어떻게 매출을 늘릴 수 있을까? 생각만해도 잠이 오지 않는다. 오로지 한 목표, 매출상승만을 바라보고 전략을 수립한다면 이처럼 숨이 턱하고 막히게 될 것이다. 하지만 다행이다. 우리에겐 맥락적 사고가 있다. 고객이 매출에 기여를 하기 이전에 어떤 경험들을 하는 지 살펴보면 생각보다 일이 수월하게 해결 될 수 있다. 쇼핑몰에서 대부분의 고객은 상세페이지의 내용을 보고 구매 의사결정을 하게 된다. 그리고 해당 제품을 장바구니에 담게 되며, 이후 결제 절차를 밟게 된다. 만약, 장바구니에서 결제페이지까지 이동되는 전환률이 10%라고 가정하자. 그럼, 장바구니에 물건을 담는 유저의 수가 늘거나 장바구니에 담기는 물건의 수가 많으면 많을수록 매출이 늘어날 수 있을까?결론은 ‘그렇다’이다. 10%의 전환률은 바뀌진 않지만 그 전 단계의 모수가 많아지면 많아질수록 그 다음 단계의 결과는 많아지게 될 것이다. 너무 상식적인가? 실제 이 질문을 강의에서 해보면 의외로 이 상식적인 맥락을 이해하는데 약간의 시간이 필요하다. 자, 그럼 우리는 이런 간단한 맥락을 가지고 무엇을 해볼 수 있을까? 다시 쇼핑몰 이야기로 돌아가보자. 장바구니에 물건을 담게 유도하여 그 수를 늘린다면, 매출이 늘어난다. 그럼, 당신은 매출을 어떻게 늘릴까를 궁리하지말고, 고객이 장바구니 버튼을 어떻게 하면 더 많이 누르게 만들지를 고민하라. 장담하건대, 그게 훨씬 더 쉽다. 그리고 매출도 늘어날 것이다. 고민하지 말라. 항상 마지막에 집중하되, 실행 게획은 그 모든 과정을 쪼개고 바로 앞 순서에 집중해야 한다. 퍼포먼스 마케팅 에이전시, 오피노 바로가기 
조회수 3830

크몽 개발팀 문화와 구조 이야기

안녕하세요. 크몽 개발자들과 함께하고 있는 크레이그(a.k.a. 크알)입니다.크몽 개발자 그룹은 1년 내 그 규모가 3배로 커지고, Data Science, Growth Hacking 조직이 만들어지는 등 질적, 양적으로 급성장하고 있는 팀입니다.크몽 개발 부서에 계신 분들은 크몽에 대해 이렇게 이야기 합니다.(참고 : 크몽 개발팀원 더팀스 인터뷰 - '신뢰할 수 있는 동료와 함께 초고속 성장을 만들어가는 크몽 팀' )"제가 크몽에서 전반적으로 느낀 인상은 능동적인 분들이 많다는 거예요. 수동적인 업무를 책임감 있게 하는 것도 중요하지만 문제를 스스로 찾고, 동료들에게 제기하고, 문제를 해결했을 때 진심으로 기뻐하면서 행복감을 느끼시는 분들이 많아요. 그게 큰 조직에 있다가 온 저에게는 정말 많은 자극이 되었어요. "- 데이터분석 KM님"크몽이 저의 개발자 커리어에서 마지막 회사였으면 좋겠다고 생각해요. 실은 진심이고요. 그동안 회사의 성장을 지켜봤고 개발적으로도 많은 변화를 경험했어요"- BackEnd Sean님이렇게 개발자들이 행복하게 개발할 수 있는 환경을 우선시하고 있습니다. 그리고 크몽의 오픈 커뮤니케이션 문화를 지향함과 동시에 ‘Work Happy’와 'Freedom with Responsibility’ 란 가치 아래 최대한 자율성을 보장된 실무자 중심의 개발 문화를 추구합니다.크몽 개발 조직 구조위 핵심 가치 아래 크몽 개발 조직 구조는 크게 ‘Go’와 ‘Chapter’로 구성되어 있습니다.Go  ; 고우선 ‘Go’는 프로젝트 개발 팀 단위로 크몽 서비스를 개선하기 위한 목표 중심의 조직입니다. 다른 회사에서는 ‘Silo’, ‘Team'로 명칭 하기도 합니다. 물리적으로 한 공간에서 스크럼을 이루어 일할 수 있도록 자원을 갖추고 있습니다. Go 안에는 Go Leader(GL) 가 있어 팀 업무 관리 및 우선순위를 정합니다.현재 크몽 개발 파트의 Go는 아래와 같이 구성되어 있습니다.UX-Go크몽 서비스 UX를 개선하기 위한 목표로 데이터를 기반으로한 UX Iteration & Growth Mission 을 수행하는 팀Data-Go데이터 파이프라인을 구축, 활용하여 조직 내 필요한 데이터 자료를 공급하고, 크몽 서비스안에 머신러닝/딥러닝 등의 인공지능 기술 영역을 담당하는 팀Dasi-Go서비스 안정적인 운영 및 릴리즈,  CRM 기술 지원을 담당하는 팀Mobile-Go검색 서비스, 서비스 카테고리 개선 등 크몽 서비스 향상을 위한 모듈 개발팀크몽 라운지Chapter  ; 챕터'Chapter'는 직군별 조직 단위로 주 1회 정도의 커뮤니케이션 타임을 통해 업무 및 기술 동향을 교환합니다. 더불어 챕터 안에서 필요한 스터디, 외부 교육 등의 직군별 자기 능력 향상을 도모하고, 회사에선 이를 적극 지원합니다. 그리고 챕터 내 프로젝트를 통해 서비스 개선에 기여하기도 합니다.크몽 개발 파트는 아래와 같은 챕터가 있습니다.(참고 : 웹 프로트엔드 챕터의 'gulp 개선기' -  https://brunch.co.kr/@kmongdev/5 )**챕터 프로젝트는 챕터 내에서 개발자분들이 스스로 필요하다는 판단 하에 빌딩 된 프로젝트입니다. 챕터 내에는 CL(Chapter Leader)가 존재하며, Chapter 구성원 관리 및 의견을 모아 조직에 전파하는 역할을 담당합니다.Guild  ; 길드개발 파트 안에서의 'Guild'는 토이 프로젝트 같은 성격의 공통 관심 분야를 지닌 프로젝트 팀이라고 볼 수 있습니다. 길드 기획 단계에서 회사 전사적으로 적용되면서, 동호회 성격으로 피보팅(Pivoting) 되어 있지만, 기본적으로 공통의 관심 분야를 같이 학습하고 프로젝트에 적용하는 팀입니다. 매주 수요일 오후 2~3시 사이의 시간은 챕터(Chapter), 고(Go)를 떠나 본인이 원하는 길드에 들어가서 새로운 영역을 탐색하고 연구하는 시간입니다.크몽 개발 파트는 아래와 같은 길드가 있습니다.(참고 : 코틀린 길드의 코틀린 리서치 이야기  https://brunch.co.kr/@kmongdev/9 )정리모든 개발 조직은 '성과 중심' 또는 '성장 중심'의 문화를 가지고 있습니다. 균형을 꾀하는 게 이상적이긴 하지만 스타트업에선 쉽지 않은 일입니다.하지만 크몽 개발 부서에선 인적 성장 중심 문화를 고민하고, 끊임없이 시도하고 있습니다. 이를 위해 여러 전문 교육 기관과 협약을 맺고 교육 지원을 하고 있으며, 국내 정상급 권위자 분들로 구성된 외부 컨설턴트 그룹을 구성해 개발자 분들께 배움과 성장의 기회를 부여하려고 노력하고 있습니다. 1년의 기간 동안 이직률3%의 수치를 기록하고 있는 크몽 개발 파트에선 신규 인력 채용 시 제 1의 인사 기준은 '높은 학력'도, '화려한 커리어'도 아닌우리와 '오랫동안' 함께 '성장'할 수 있는가?입니다. 이를 위해선 개발자 성장을 돕기 위한 환경 구축 및 관리가 필수이고,  그것이 궁극적으로는 회사 및 팀원에게도 장기적인 발전을 가져올 꺼란 굳은 믿음이 있습니다.크몽 개발 그룹CTO#크몽 #개발팀 #개발자 #사내복지 #기업문화 #조직문화 #사내스터디 #CTO
조회수 1151

네거티브 타겟팅을 위한데이터 포스트백

네거티브 타겟팅(NEGATIVE TARGETING)이란? ‘타겟팅’이란 단어에 ‘네거티브’가 더해지니 생소하게 느껴지기도 합니다. 하지만 네거티브 타겟팅(Negative Targeting)은 이미 빈번하게 활용되고 있기 때문에 설명을 들으시면 충분히 익숙하게 느끼실 것이라 생각합니다.네거티브 타겟팅이란 제외(Exclude)를 통해 더 나은 타겟을 확보하는 모든 방법을 의미합니다. 예를 들어 중국어 학원을 페이스북에 광고를 한다면, 타겟에서 중국인을 제외하는 것이 네거티브 타겟팅이 됩니다.네거티브 타겟팅의 수준이 정교할수록 타겟의 순도는 높아지고, 그렇게 타겟이 확실해지는 만큼 광고의 성과 역시 향상됩니다. 타겟팅의 정교함을 높이기 위해서는 타겟 오디언스에 관한 더 많은 데이터가 필요하며, 결국 사용자와 그 행동에 대한 분석이 뒷받침 되어야 합니다.포스트백(POSTBACK)이란?포스트백(Postback)의 정의는 업계마다 차이가 있습니다. 포스트백의 가장 근원적인 의미는 온라인 상에서의 거래 데이터(Sales Transaction Data)를 알려주는 프로토콜입니다. 예를 들어 설명하면 다음과 같습니다.온라인 쇼핑몰에서 상품을 구매하면 일반적으로 중간에 결제 모듈을 거치게 됩니다. 결제 모듈은 구매자가 대금 지불을 완료했다는 것을 쇼핑몰에 알려주는데, 이것이 쇼핑몰과 결제 모듈간의 포스트백입니다. 쇼핑몰은 대금 지불이 성공했다는 포스트백을 받았기 때문에 구매자를 다음 단계로 안내하며 결제 프로세스를 완료하게 됩니다.와이즈트래커가 속한 모바일 앱 어트리뷰션 업계에서는 광고 관련 데이터를 광고 매체에 알려주는 프로토콜을 포스트백이라고 부르고 있습니다. 앱 설치 숫자가 과금의 기준(CPI, Cost Per Install)이 되는 업계의 특성상 광고 매체는 정확한 앱 설치 숫자를 반드시 알아야 합니다. 그래서 매체가 직접 개발한 측정용 SDK나 3rd Party Tool로부터 광고를 통한 앱 설치 숫자를 포스트백 받습니다.포스트백과 타겟팅앞서 더욱 정교한 타겟팅을 위해서는 데이터가 필요하다고 말씀 드렸습니다. 이런 맥락에서 포스트백 데이터의 중요성은 매우 큽니다. 주로 포스트백되는 데이터는 아래와 같습니다기기 고유 식별자 (ADID, IDFA)앱 설치, 앱 실행상품 조회, 상품 구매기타 커스텀 액티비티위의 데이터를 포스트백 받은 매체는 새로운 타겟팅 옵션을 활용할 수 있게 됩니다. 앱이 설치된 기기에는 더 이상 광고가 노출되지 않도록 네거티브 타겟팅을 먼저 시작합니다. 이는 불필요한 광고노출을 억제하기 때문에 ROAS(Return on Ad Spending)의 하락을 방지하는 동시에, 이미 클릭한 광고를 다시 보는 경험을 사용자가 하지 않도록 예방하는 효과도 있습니다.앱 설치 후 상품을 조회했으나 구매하지 않은 기기는 리타겟팅 광고의 대상이 됩니다. 이미 앱이 설치되어 있기때문에, 다시 설치 광고를 노출하지 않고 조회한 상품 및 관련상품을 직접적으로 광고합니다. 상품의 존재를 인지하고 있는 사용자만을 대상으로 구매의사를 자극하는 광고를 노출함으로써 ROAS에 긍정적인 영향을 줍니다.광고의 목적이 설치나 구매가 아니라 회원가입 또는 앱 설치 후 첫 구매자 증가일 수 있습니다. 광고주가 이런 커스텀 액티비티 기준의 광고 최적화가 필요할 때 매체와 트래킹 툴이 이와 관련한 포스트백을 지원할 수 있어야 합니다. 커스텀 액티비티를 측정할 수 있는 기술력, 그리고 매체와의 포스트백을 위한 기술지원이 가능한 툴을 선택해야 하는 이유입니다. 포스트백 고도화: 리얼타임 포스트백포스트백을 이용한 최적화에도 맹점은 있습니다. 동시에 여러가지 매체를 운영할 때 포스트백의 장점이 일정 부분 무력화되는 경우가 생깁니다. 아래 그림을 보면서 설명 드리겠습니다.앱 설치 광고를 A, B, C 세개의 매체에 동시 집행하는 상황을 가정한 것입니다. 한 사용자가 A 매체의 광고를 보고 앱을 설치 했습니다. A 매체는 포스트백을 받았기 때문에 해당 사용자에게 더 이상 광고를 노출하지 않지만, 이 사실을 모르는 나머지 매체들은 이미 앱을 설치한 사용자에게 계속 광고를 내보내게 됩니다. 포스트백을 통한 네거티브 타겟팅이 기대만큼 동작하지 않는 것입니다.다양한 매체를 동시에 운영하는 일은 굉장히 흔합니다. 따라서 자기 매체에서 발생한 데이터만 포스트백 받는 현재 상황에서는 위와 같은 비효율이 지속적으로 발생할 가능성 역시 높습니다. 이런 문제를 해결하기 위해서 와이즈트래커는 포스트백 기능을 고도화 했습니다.앱 설치뿐만아니라 앱에서 발생하는 모든 사용자 이벤트들을 실시간으로 포스트백 하는 ‘리얼타임 포스트백’에 대한 설명입니다. 리얼타임 포스트백으로 연동된 매체는 앱에서 발생한 모든 이벤트 데이터를 전달받습니다. 따라서 이미 앱을 설치한 사용자, 자연유입된 사용자, 타 매체에서 유입된 사용자의 행동데이터를 실시간으로 알 수 있게됩니다.최근 주목받고 있는 다이나믹 리타겟팅은 광고 매체의 인벤토리에 진입한 사용자의 Status에 가장 적합한 광고를 자동으로 노출하는 것이 핵심입니다. 따라서 타겟팅이 잘 동작하려면, 광고의 대상이 되는 사용자가 앱을 설치했는지, 관심을 가지고 조회한 상품은 무엇인지, 장바구니에 담아놓고 구매하지 않은 상품은 있는지에 대한 분석 데이터를 실시간으로 알아야 합니다. 이런 점에서 매체와 트래킹 툴이 고도화된 포스트백으로 연동되는 것이 중요합니다.광고매체 운영에 필요한 타겟팅 옵션 중 하나인 네거티브 타겟팅, 그리고 타겟팅 고도화에 필요한 포스트백에 대해서 설명해 보았습니다. 광고 성과를 최적화하기 위해서는 데이터가 필요하고, 트래킹 툴은 그 데이터를 확보하기 위해 더욱 다양한 것을 보다 정확하게 측정하여 매체와 연동할 수 있어야 합니다. 툴을 선택하기 위한 기준으로 참고가 되었으면 합니다.
조회수 956

비트윈 시스템 아키텍처

VCNC는 커플을 위한 모바일 앱 비트윈을 서비스하고 있습니다. 비트윈은 사진, 메모, 채팅, 기념일 등 다양한 기능을 제공하며, 오픈 베타 테스트를 시작한 2011년 11월부터 현재까지 연인 간의 소통을 돕고 있습니다. 그동안 비트윈 시스템 아키텍처에는 많은 변화가 있었으며 다양한 결정을 하였습니다. 비트윈 아키텍처를 발전시키면서 배우게 된 여러 가지 노하우를 정리하여 공유해보고자 합니다. 그리고 저희가 앞으로 나아갈 방향을 소개하려 합니다.소프트웨어 스택Java: 비트윈 API서버는 Java로 작성되어 있습니다. 이는 처음 비트윈 서버를 만들기 시작할 때, 서버 개발자가 가장 빨리 개발해낼 수 있는 언어로 프로그래밍을 시작했기 때문입니다. 지금도 자바를 가장 잘 다루는 서버 개발자가 많으므로 여전히 유효한 선택입니다.Netty: 대부분의 API는 HTTP로 호출되며, 채팅은 모바일 네트워크상에서의 전송 속도를 위해 TCP상에서 프로토콜을 구현했습니다. 두 가지 모두 Netty를 통해 사용자 요청을 처리합니다. Netty를 선택한 것은 뛰어난 성능과 서비스 구현 시 Thrift 서비스를 통해 HTTP와 TCP 프로토콜을 한 번에 구현하기 쉽다는 점 때문이었습니다.Thrift: API서버의 모든 서비스는 Thrift 서비스로 구현됩니다. 따라서 TCP뿐만 아니라 HTTP 또한 Thrift 인터페이스를 사용합니다. HTTP를 굳이 Thrift서비스로 구현한 이유는, TCP로 메세징 전송 시 똑같은 서비스를 그대로 사용하기 위함이었습니다. 덕분에 빠른 채팅 구현 시, 이미 구현된 서비스들을 그대로 사용할 수 있었습니다. 또한, 채팅 패킷들은 패킷 경량화를 위해 snappy로 압축하여 송수신합니다. 모바일 네트워크상에서는 패킷이 작아질수록 속도 향상에 크게 도움이 됩니다.HBase: 비트윈의 대부분 트랜젝션은 채팅에서 일어납니다. 수많은 메시지 트랜젝션을 처리하기 위해 HBase를 선택했으며, 당시 서버 개발자가 가장 익숙한 데이터베이스가 HBase였습니다. 서비스 초기부터 확장성을 고려했어야 했는데, RDBMS에서 확장성에 대해 생각하는 것보다는 당장 익숙한 HBase를 선택하고 운영하면서 나오는 문제들은 차차 해결하였습니다.ZooKeeper: 커플들을 여러 서버에 밸런싱하고 이 정보를 여러 서버에서 공유하기 위해 ZooKeeper를 이용합니다. Netflix에서 공개한 오픈 소스인 Curator를 이용하여 접근합니다.AWS비트윈은 AWS의 Tokyo리전에서 운영되고 있습니다. 처음에는 네트워크 및 성능상의 이유로 국내 IDC를 고려하기도 했으나 개발자들이 IDC 운영 경험이 거의 없는 것과, IDC의 실질적인 TCO가 높다는 문제로 클라우드 서비스를 이용하기로 하였습니다. 당시 클라우드 서비스 중에 가장 안정적이라고 생각했던 AWS 를 사용하기로 결정했었고, 지금도 계속 사용하고 있습니다.EC2: 비트윈의 여러 부가적인 서비스를 위해 다양한 종류의 인스턴스를 사용 중이지만, 메인 서비스를 운용하기 위해서는 c1.xlarge와 m2.4xlarge 인스턴스를 여러 대 사용하고 있습니다.API 서버: HTTP 파싱이나 이미지 리시아징등의 연산이 이 서버에서 일어납니다. 이 연산들은 CPU 가 가장 중요한 리소스이기 때문에, c1.xlarge를 사용하기로 했습니다.Database 서버: HDFS 데이터 노드와 HBase 리전 서버들이 떠있습니다. 여러 번의 테스트를 통해 IO가 병목임을 확인하였고, 따라서 모든 데이터를 최대한 메모리에 올리는 것이 가장 저렴한 설정이라는 것을 확인하였습니다. 이런 이유 때문에 68.4GB의 메모리를 가진 m2.4xlarge를 Database 서버로 사용하고 있습니다.EBS: 처음에는 HBase상 데이터를 모두 EBS에 저장하였습니다. 하지만 일정 시간 동안 EBS의 Latency가 갑자기 증가하는 등의 불안정한 경우가 자주 발생하여 개선 방법이 필요했는데, 데이터를 ephemeral storage에만 저장하기에는 안정성이 확인되지 않은 상태였습니다. 위의 두 가지 문제를 동시에 해결하기 위해서 HDFS multiple-rack 설정을 통해서 두 개의 복제본은 ephemeral storage에 저장하고 다른 하나의 복제본은 PIOPS EBS에 저장되도록 구성하여 EBS의 문제점들로부터의 영향을 최소화하였습니다.S3: 사용자들이 올리는 사진들은 s3에 저장됩니다. 사진의 s3키는 추측이 불가능하도록 랜덤하게 만들어집니다. 어차피 하나의 사진은 두 명밖에 받아가지 않고 클라이언트 로컬에 캐싱되기 때문에 CloudFront를 사용하지는 않습니다.ELB: HTTP는 사용자 요청의 분산과 SSL적용을 위해 ELB를 사용합니다. TCP는 TLS를 위해 ELB를 사용합니다. SSL/TLS 부분은 모두 AWS의 ELB를 이용하는데, 이는 API서버의 SSL/TLS처리에 대한 부담을 덜어주기 위함입니다.CloudWatch: 각 통신사와 리전에서 비트윈 서버로의 네트워크 상태와 서버 내의 요청 처리 시간 등의 메트릭을 CloudWatch로 모니터링 하고 있습니다. 따라서 네트워크 상태나 서버에 문제가 생긴 경우, 이메일 등을 통해 즉각 알게 되어, 문제 상황에 바로 대응하고 있습니다. Netflix의 Servo를 이용하여 모니터링 됩니다.현재의 아키텍처처음 클로즈드 베타 테스트때에는 사용자 수가 정해져 있었기 때문에 하나의 인스턴스로 운영되었습니다. 하지만 처음부터 인스턴스 숫자를 늘리는 것만으로도 서비스 규모를 쉽게 확장할 수 있는 아키텍쳐를 만들기 위한 고민을 하였습니다. 오픈 베타 이후에는 발생하는 트래픽에 필요한 만큼 여러 대의 유연하게 서버를 운영하였고, 현재 채팅은 TCP 위에서 구현한 프로토콜을 이용하여 서비스하고 있습니다.HTTP 요청은 하나의 ELB를 통해 여러 서버로 분산됩니다. 일반적인 ELB+HTTP 아키텍처와 동일합니다.채팅은 TCP 연결을 맺게 되는데, 각 커플은 특정 API 서버로 샤딩되어 특정 커플에 대한 요청을 하나의 서버가 담당합니다. 비트윈에서는 커플이 샤딩의 단위가 됩니다.이를 통해, 채팅 대화 내용 입력 중인지 여부와 같이 굉장히 빈번하게 값이 바뀌는 정보를 인메모리 캐싱할 수 있게 됩니다. 이런 정보는 휘발성이고 매우 자주 바뀌는 정보이므로, HBase에 저장하는 것은 매우 비효율적입니다.Consistent Hashing을 이용하여 커플을 각 서버에 샤딩합니다. 이는 서버가 추가되거나 줄어들 때, 리밸런싱되면서 서버간 이동되는 커플들의 수를 최소화 하기 위함입니다.클라이언트는 샤딩 정보를 바탕으로 특정 서버로 TCP연결을 맺게 되는데, 이를 위해 각 서버에 ELB가 하나씩 붙습니다. 어떤 서버로 연결을 맺어야 할지는 HTTP 혹은 TCP 프로토콜을 통해 알게 됩니다.Consistent Hashing을 위한 정보는 ZooKeeper를 통해 여러 서버간 공유됩니다. 이를 통해 서버의 수가 늘어나거나 줄어들게 되는 경우, 각 서버는 자신이 담당해야 하는 샤딩에 대한 변경 정보에 대해 즉각 알게 됩니다.이런 아키텍처의 단점은 다음과 같습니다.클라이언트가 자신이 어떤 서버로 붙어야 하는지 알아야 하기 때문에 프로토콜 및 아키텍처 복잡성이 높습니다.서버가 늘어나는 경우, 순식간에 많은 사용자 연결이 맺어지게 됩니다. 따라서 새로 추가되는 ELB는 Warm-up이 필요로 하며 이 때문에 Auto-Scale이 쉽지 않습니다.HBase에 Write연산시, 여러 서버로 복제가 일어나기 때문에, HA을 위한 Multi-AZ 구성을 하기가 어렵습니다.한정된 자원으로 동작 가능한 서버를 빨리 만들어내기 위해 이처럼 디자인하였습니다.미래의 아키텍처현재 아키텍처에 단점을 보완하기 위한 해결 방법을 생각해보았습니다.Haeinsa는 HBase상에서 트렌젝션을 제공하기 위해 개발 중인 프로젝트입니다. 구현 완료 후, 기능 테스트를 통과하였고, 퍼포먼스 테스트를 진행하고 있습니다. HBase상에서 트렌젝션이 가능하게 되면, 좀 더 복잡한 기능들을 빠르게 개발할 수 있습니다. 서비스에 곧 적용될 예정입니다.Multitier Architecture를 통해 클라이언트와 서버 간에 프로토콜을 단순화시킬 수 있습니다. 이 부분은 개발 초기부터 생각하던 부분인데, 그동안 개발을 하지 못하고 있다가, 지금은 구현을 시작하고 있습니다. 커플은 특정 Application 서버에서 담당하게 되므로, 인메모리 캐싱이 가능하게 됩니다. 클라이언트는 무조건 하나의 ELB만 바라보고 요청을 보내게 되고, Presentation 서버가 사용자 요청을 올바른 Application 서버로 릴레이 하게 됩니다.Multitier Architecture를 도입하면, 더 이상 ELB Warm-up이 필요하지 않게 되므로, Auto-Scale이 가능하게 되며, 좀 더 쉬운 배포가 가능하게 됩니다.Rocky는 API 서버의 Auto-Failover와 커플에 대한 샤딩을 직접 처리하는 기능을 가진 프로젝트입니다. 현재 설계가 어느 정도 진행되어 개발 중에 있습니다. 알람이 왔을 때 서버 팀이 마음을 놓고 편히 잠을 잘 수 있는 역할을 합니다.기본적인 것은 위에서 언급한 구조와 동일하지만 몇 가지 기능이 설정을 추가하면 Multi-AZ 구성이 가능합니다.특정 커플에 대한 모든 정보는 하나의 HBase Row에 담기게 됩니다.HBase의 특정 리전에 문제가 생긴 경우, 일정 시간이 지나면 자동으로 복구되긴 하지만 잠시 동안 시스템 전체에 문제가 생기가 됩니다. 이에 대해 Pinterest에서 Clustering보다는 Sharding이 더 낫다는 글을 쓰기도 했습니다. 이에 대한 해결책은 다음과 같습니다.원래는 Consistent Hashing을 사용하여 커플들을 Application 서버에 샤딩하였습니다. 하지만 이제는 HBase에서 Row를 각 리전에 수동으로 할당하고, 같은 리전에 할당된 Row에 저장된 커플들은 같은 Application 서버에 할당하도록 합니다.이 경우에, 같은 커플들을 담당하는 Application 서버와 HBase 리전 서버는 물리적으로 같은 머신에 둡니다.이렇게 구성 하는 경우, 특정 HBase 리전이나 Application 서버에 대한 장애는 특정 샤드에 국한되게 됩니다. 이와 같이 하나의 머신에 APP과 DB를 같이 두는 구성은 구글에서도 사용하는 방법입니다.이와 같이 구성하는 경우, Multi-AZ 구성이 가능하게 됩니다.AWS에서 같은 리전에서 서로 다른 Zone간 통신은 대략 2~3ms 정도 걸린다고 합니다.Presentation의 경우, 비동기식으로 동작하기 때문에 다른 리전으로 요청을 보내도 부담이 되지 않습니다.HBase에서 Write가 일어나면 여러 복제본을 만들게 됩니다. 하나의 사용자 요청에 대해 Write가 여러번 일어나기 때문에 HBase연산의 경우에는 서로 다른 Zone간 Latency가 부담으로 작용됩니다. Haeinsa가 적용되면, 한 트렌젝션에 대해서 연산을 Batch로 전송하기 때문에 AZ간 Latency 부담이 적습니다.저희는 언제나 타다 및 비트윈 서비스를 함께 만들며 기술적인 문제를 함께 풀어나갈 능력있는 개발자를 모시고 있습니다. 언제든 부담없이 [email protected]로 이메일을 주시기 바랍니다!
조회수 1148

제니퍼소프트가 말하는 APM의 진짜 가치(2)

어떤 APM에 투자해야 하는가?APM 분야가 당초 기대를 뛰어넘는 수준의 효과를 발휘하고 있다는 사실에는 의심의 여지가 없다. 아울러 APM 솔루션을 이용하는 층이 더 넓어지고 있다는 점 역시 사실이다. 그러나 정작 어떤 APM 솔루션이 적합한지에 대해서는 오히려 혼란스러운 측면이 있다. 접근법, 방법론 등이 다양하고 이에 따라 정보가 넘쳐나고 있기 때문에 더욱 그렇다. 각각의 기업 환경에 적절한 APM을 선택하기 위해서는 먼저 그간 흐름을 살펴볼 필요가 있다.2010년 즈음에는 APM의 역할 범위에 대한 정의를 두고 논란이 있었다. 크게 WAS 성능 모니터링과 엔드투엔드(BTM, EUM) 모니터링으로 업계의 시각이 갈렸다. 그 이유는 애플리케이션 상태를 최적으로 유지하기 위해 ‘어떤’ 애플리케이션 대해, ‘어디’를, ‘어떻게’ 관리해야 하는지를 두고 벤더마다 관점이 달랐기 때문이었다.이러한 논란은 사실 아직 완전히 끝난 것은 아니다. 그러나 WAS APM 분야의 성장세가 더 두드러지고 있으며, 이를 APM으로 정의하는 분위기가 확산되고 있다. 모든 비즈니스 트랜잭션을 모니터링(BTM)하고 관리하는 솔루션의 경우 방대한 커스터마이제이션 및 유지보수 업무가 수반되며, 이에 따라 특정 업종에 한정적인 SI 분야의 특성을 보이고 있기 때문이다. WAS APM을 중심으로 어떤 APM을 선택해야 하는지를 정리하면 다음과 같다. - 안정성 높은 제품: 안정성은 APM의 가장 중요한 부분임에는 두말할 여지가 없다. APM 기술적인 특성상 웹 서비스의 중추를 담당하는 WAS와 함께 동작하기 때문이다. 이러한 이유로 WAS에 영향을 최소화하여 모니터링 하는 기술은 APM의 가장 중요하고 미션크리티컬한 사항이다. 다양한 고객의 환경에서 검증된 제품이 아닐 경우에는 도입 시 수많은 테스트를 거쳐야 하는 등, 추가적인 비용이 발생할 수 있다.- 실시간 모니터링이 가능한 제품: APM을 도입하는 주요 이유는 문제가 발생할 때 이를 빠르게 파악하고 이를 쉽게 해결할 수 있도록 하는 위해서다. 이를 위해서는 현재 수행되고 있는 서비스를 모니터링 하여 병목이 되는 원인을 빠르게 찾는 것과, 샘플링되지 않은 초 단위 성능데이터를 모니터링 하여 실제 문제가 발생하는 시점에 이를 인지하는 것이 중요하다.- 지속적인 업그레이드를 반영할 수 있는 패키지 제품: APM제품은 패키지 제품으로 지속적인 업그레이드를 통해 기능을 개선하고 발전해 나가야 한다. 고객의 환경에 따라 개발이 다르게 된다면, 지속적인 기술 개발을 통한 업그레이드를 하기 어렵다. 고객은 한번의 투자로 지속적으로 모니터링을 해야 하는데 SI가 필요하다면 지속적으로 투자가 되어야 하고 이는 ROI를 개선할 수 없다. SI가 필요한 제품의 경우 차세대나 새로운 서비스를 오픈 할 경우 추가 비용이 발생한다. 반면 패키지 제품의 경우는 별도의 비용 없이 오히려 추가로 업그레이드되는 기능을 지속적으로 제공 받아 더욱 활용도가 높아지게 된다.- 직관적인 UI/UX를 통해 즉각적인 장애 인지가 가능한 제품: APM의 중요성이 높아지면서 누구나 어렵다고 생각하는 APM을 쉽게 활용할 수 있도록 하는 것은 기업입장에서 많은 장점을 가진다. 특히 수많은 관제실에서 활용되고 있는 제니퍼 대시보드는 서비스의 현재 상황을 직관적이고, 다이나믹하게 표현함으로써, 문제 발생 시 이를 즉각적으로 인지하여 빠른 시간 안에 문제를 해결할 수 있도록 돕는다. 한편 이러한 UI/UX의 지속적인 강화를 위해 제니퍼는 'JUI'라는 오픈소스 프로젝트를 진행하고 있다.- 쉬운 관리 및 통합 모니터링이 가능한 제품: 기업/조직이 비즈니스에 이용하는 웹 애플리케이션이 폭증하고 있다. 제니퍼소프트의 고객사 중에도1,000개 이상의 인스턴스를 설치해 활용하는 곳이 많다. APM을 설치, 업그레이드, 설정, 로그 확인 등의 업무를 일일이 해야 한다면 무시할 수 없는 부하가 된다. 수백, 수천 대의 서버를 손쉽게 관리하고 통합해서 모니터링 할 수 있는 기능은 필수다.- 강력한 분석 기능을 가진 제품: APM 솔루션의 핵심 원리, 즉 모니터링 하고자 하는 데이터를 수집하는 기술은 10년 전과 지금이 그리 다르지 않다. 그러나 애플리케이션 환경이 지속적으로 변화하고, 복잡도 또한 증가하고 있어서, 이에 대한 성능분석은 전문성과 지속적인 연구개발이 필요한 분야이다. 애플리케이션 성능에 대한 깊은 통찰을 바탕으로 실질적인 문제해결을 할 수 있는 분석기능을 갖추고 있는 APM을 선택하는 것이 중요하다. 웹 서비스의 확산, 이제 시작일 뿐비즈니스가 나날이 디지털화 되어가고 있다. 모바일과 클라우드라는 파괴적 트렌드는 이제 시작일 뿐이며, IoT는 완전히 새로운 서비스를 창출할 것이 확실시된다. 웹 애플리케이션의 트랜잭션이 증가하고 복잡화되는 환경 속에서 기업은 필수 애플리케이션의 성능을 보장하면서도 확장성과 대응성을 확보할 방안을 고민해야 할 시점이다. 과거 ‘있으면 좋은 제품’에서 이제 모든 기업들의 ‘꼭 있어야 하는 제품(Must Have)으로 진화한 APM의 진짜 가치를 발견하길 바란다.

기업문화 엿볼 때, 더팀스

로그인

/