스토리 홈

인터뷰

피드

뉴스

조회수 926

올바른 상품 선정과 시장 조사가 필요한 이유

안녕하세요 대한민국 셀러들의 성공적인 아마존 진출을 도와주는 컨설팅 회사이자 대행사인 컨택틱의 이이삭 대표입니다.오늘의 핵심인 상품 선정과 시장 조사 방법을 논하기 앞서, 한 가지 말씀드리고 싶은 게 있습니다. “온라인 쇼핑과 오프라인 쇼핑은 다를 게 없다"라는 것입니다. 아래 이미지를 꼭 기억해주세요.이번 글은 <어떤 상품을 선정하고 어떻게 시장조사를 제대로 분석할 것인가>를 주제로 다뤄보도록 할 것입니다. 이번 주제 정말 중요합니다. 저희 컨택틱 홈페이지를 방문해보신 분들은 아시겠지만, 저희의 업무 첫 프로세스가 바로 시장조사 보고서 제공 및 컨설팅 업무입니다. 왜 그럴까요? 그 이유는 제대로 된 시장조사가 아마존 셀러로서의 성공 가능성을 진단하는 가장 기초이자 핵심이며 필수적인 과정이기 때문입니다.이런 의문 가지시는 글로벌 셀러 님들 계실 겁니다. ‘우리의 제품은 뛰어난데 왜 굳이 시장조사를 해야 하는 거지?’와 같은 물음들. 하지만 단언컨대, 아마존 시장은 제품력만으로는 승부할 수 없는 시장입니다. 지금 진출을 고민하시는 분들은 당장 아마존 US에 접속하셔서, 자신의 상품을 고객이 어떤 단어로 검색할지 생각해보시고, 제품을 검색해보시길 바랍니다. 수많은 상품이 등록된 모습을 확인하실 수 있습니다. 그 수많은 상품 리스팅 중, 본인의 제품이 뛰어나다는 것을 보여주려면, 당연하게도 경쟁자가 적어야 합니다. 가령, lip balm을 검색하면, Burt’s bee라는 저렴한 가격, 브랜드 인지도가 높은 상품이 첫 페이지에 노출됩니다. 설령, 제품력이 뛰어난 고퀄리티의  립밤을 찾는다고 할지라도, 고객이 자주 쓰는 검색 단어 즉, C.S.T(Customer Search Term)에 인덱싱되지 않는 이상, 그 뛰어난 제품력을 드러낼 기회조차 얻기 힘들게 될 수 있습니다.서두부터 다소 비관적인(?) 내용을 말씀드리는 이유는 생각보다 많은 고객사께서, 아마존에 진출하기만 하면 성공할 것이라는 막연한 기대를 하고 계셨기 때문입니다. 실제, 시장조사 컨설팅을 진행하며 한국의 글로벌 셀러들이 흔히 갖는 오해를 먼저 소개한 후에, ‘어떻게 제대로 된 시장조사를 할 것인가’를 소개하겠습니다.가장 흔한 오해: 미국 시장의 규모와 아마존 시장 규모를 착각하는 경우현재 미국의 전자상거래 중 아마존이 절반 이상의 점유율을 차지하고 있습니다. 하지만 이때의 점유율이 미국 전체 시장을 의미하지 않습니다. 미국 전역 리테일 소비에서 5%만 차지할 뿐입니다. 다시 말해서, 법인이든 개인사업자든 해외 진출을 결정하면 상품 가격, 월별 판매량과 매출의 예측치를 산정하고, 마진 조정에 따른 가격 인하 가능 범위를 설정하시게 될 텐데, 시장 규모를 착각하셔서 당황하시는 일이 없도록, 컨택틱에서는 시장조사 컨설팅 진행 시, 서두에 명확하게 이러한 오해를 풀어드립니다.올바른 시장조사를 가능케 하는 두 가지 기둥은 ‘연관성’과 ‘정확성’이라고 할 수 있습니다. 연관성은 시장조사 과정에서 사용된 자료가 ‘내가 진입하는 시장’을 제대로 반영한 것인지를 의미하고, 정확성은 해당 자료가 객관성과 신뢰성을 담보하고 있는지를 검증하기 위한 기준입니다. 시장조사를 제대로 하기 위해서 가장 선행되어야 하는 것은 핵심 키워드를 찾는 일입니다. 컨택틱에서는 Seed Keyword라고 부르는데요. 만약, 여러분이 로션(현지에서는 Moisturizer가 자연스러운 표현)을 판다고 했을 때, 아마존에 Moisturizer라고 등록된 리스팅 데이터를 모두 모아서 전체 시장 규모를 예측한다고 가정해봅시다.가령, Moisturizer로 검색했을 때, 정말 이 제품이 나오면 좋겠지만, Moisturizer stick이라든지, 아니면, 어떤 셀러가 상품 인덱싱이 잘 되게 하도록 facial mask에 ‘Moisturizer function’을 삽입한 것은 아닌지 일일이 따져보셔야 합니다. 그렇지 않다면, 내 상품과 직접 경쟁할 시장의 규모조차 제대로 파악하지 못한 채, 아마존에 진출하게 되는 것입니다.다음으로, 시장조사 자료가 연관성과 정확성을 보유했다고 가정한다면, 시장을 어떻게 ‘분류’할 것인가의 문제가 남습니다. 저희 컨택틱에서는 아마존 시장의 성숙도를 가격 변동, 리뷰 개수, 리스팅 대비 매출의 비율을 가지고 성숙, 틈새, 슬럼프 시장으로 구분합니다. 기준에 정해진 답은 없습니다. 하지만 2014년부터 현재까지 수백 개의 업체를 컨설팅 하면서 컨택틱 만의 고유 기준을 정립할 수 있었습니다. 그뿐만 아니라, Product Based Market, Brand Based Market 개념을 도입하여, 성공 가능성이 가장 높은 시장인 ‘황금 틈새시장’에 진입하기 위한 시장 데이터를 수집, 분석, 가공하는 것이 진정한 시장조사라고 할 수 있습니다.컨택틱은 수많은 업무를 대행해오고 있지만, 고객들에게 필수적으로 권유하는 서비스가 바로 시장조사입니다. 일부 고객사는 시장조사 컨설팅을 받다가 이런 말씀을 하시기도 합니다. “그래서 저희가 어떤 전략을 취해야 합니까?” 사실, 시장조사 만으로는 완벽한 전략을 구성할 수 없습니다. 전략을 ‘한정된 자원을 극대화하는 능력’이라고 정의한다면, 시장조사로 할 수 있는 것은 ‘적기’에 어떤 상품을 어느 시장에 진입시켜야 하는지에 대한 결정을 도울 수 있습니다. 전략은 곧 올바른 의사결정이기 때문입니다.제대로 하지 않으면, 안 하느니만 못하다는 말이 있습니다. 시작의 방향이 미래를 결정합니다. 올바른 지식이 미래(未來)를 미래(美來)로 만들어 줄 수 있다는 말로 이번 글을 마무리하고자 합니다.컨택틱의 모든 교육은 파트너인 글로벌셀러 창업연구소와 접수하고 진행합니다. 교육 신청은 아래 링크나 글로벌셀러창업연구소의 홈페이지를 통해 접수 가능합니다.오프라인 아마존 입문 과정오프라인 아마존 기초/심화 과정온라인 아마존 입문 과정그럼 오늘도 즐거운 글로벌 셀링 되세요!컨택틱  서울특별시 강남구 강남대로 62길 11, 8층 (역삼동, 유타워)대표 전화: 02-538-3939    이메일: support@kontactic.com    홈페이지: https://www.kontactic.com  네이버블로그: https://blog.naver.com/kontactic   카카오브런치: https://brunch.co.kr/@allaboutamazon
조회수 644

당신의 마케팅에는 고객경험을 고려한 시나리오가 있는가

작은 부탁의 힘가끔 마트의 장난감 진열대 앞에서 아이와 곤란한 줄다리기를 하고 있는 젊은 부부들을 볼 때가 있다. 평소 사고 싶던 장난감 앞에서 한 꼬마는 엄마에게 이렇게 물어본다.  “엄마, 저게 뭐예요?” (가끔, 저렇게 놀랍도록 뻔뻔한 질문을 하는 아이들을 보면 역시, 아이들에게 배울 것이 많다는 생각을 한다. )  그럼, 엄마는 이렇게 이야기 한다.  “아빠가 빨리 오래”  상황 파악이 된 아이는 그 자리에 풀썩 주저 앉더니 보채기 시작한다. 그리고 마법의 주문을 외우기 시작한다.  “엄마! 이번 한 번 만요!” 늘 이런 패턴을 알고 있는 부모지만 이 ‘한번만’이라는 마법같은 단어에 못 이긴 듯 결국, 장난감을 사주고 만다.  그런데 이런 대화는 비단, 아이와 부모 사이에서만 일어나는 것이 아니다. 영업이나 설득의 기술에 탁월한 이들을 보면, 애초에 부탁하고자 하는 것보다 더 어렵거나 들어주기 힘든 부탁을 전략적으로 건네곤 한다. 그리고 상대가 거절하게 되면 기다렸다는 듯이 부탁의 수준을 낮춰 작은 부탁을 제안한다. 그럼, 절반 이상은 거절할 수 없게 되는 것이다. 사실, 그 부탁이 원래 목적의 부탁인지도 모른 채 말이다.  그런데 더 놀라운 것은 이렇게 작은 부탁을 들어준 친구는 어느샌가 처음에 제시했던 큰 부탁도 크게 어렵지 않게 들어 줄 가능성이 크다는 것이다.  맥락에서 오는 실행력과 설득력마치 저것이 거절의 미안함을 스스로 없애기 위한 자기만족의 선택이라고 느껴지는가? 그렇지 않다. 고전에서도 많이 다뤄지고 있는 설득 법칙 중의 하나다. 바로, 자신이 한 행동의 방향성을 그대로 유지 시키고 싶은 관성의 법칙이기도 하다.  즉, 원인과 결과, 그리고 그 결과는 다른 행동의 원인이라는 이 맥락의 흐름을 파악하게 되면 어떻게 우리가 얻고자 하는 결과의 앞 단에 어떤 원인이 있어야 하는 지 알게 될 것이다. 더 나아가 원하는 결과를 얻기 위해 필요한 원인을 디자인하고 적절한 곳에 배치 시킬 수도 있을 것이다.  이런 모든 흐름들을 원인과 결과라는 맥락의 단위로 쪼개다 보면, 각 단계로의 진전에 자연스럽게 실행력과 설득력이 생기게 된다. 정말 쉬운 예를 들어보면 어떨까? 일찍 일어나고 싶다. > 일찍 잔다. 운동을 하고 싶다. > 운동을 하러 간다.  혹시 피식 웃는 이가 있을 지 모르겠다. 누가 이것을 모르나라고 할 수 있을 것이다. 혹시 알면서도 못 하는 것이라고 이야기 한다면, 한 번 더 원인을 만들어 보자. 그럼, 자연스럽게 ‘실행력’까지 생기게 될 것이다.  일찍 일어나고 싶다. > 일찍 잔다. > 무조건 7시 전에는 업무를 마치고 8시까지는 식사와 샤워를 마치고 9시 전에는 침대에 눕는다.  운동을 하고 싶다. > 운동을 하러 간다. > 정해진 시간에 친구와 헬스장에서 만나기로 한다.  물론, 원하는 결과를 얻을 수 없을 때도 있다. 운동을 하기로 한 친구의 연락을 차단하면 모든 것은 수포로 돌아간다. 다만, 저 원인들이 있다면, 운동을 할 가능성은 커진다.  고객이 행동을 맥락으로 바라보는 관점이런 맥락의 흐름을 마케팅의 관점으로 바라보면 어떨까? 쇼핑몰의 한 예를 들어보자. 구매를 하기 직전, 원하는 제품에 찜을 해두거나 장바구니에 담아두는 행동을 유도해보는 것은 어떨까. 그런 이전의 행동들을 해 본 유저는 구매까지 가는 과정이 어렵게 느껴지지 않을 것이다.  어느 오프라인 교육프로그램을 예를 들어보자. 오프라인 마케팅 과정이 있다면, 그 전에 pre-seminar를 진행하기도 하고 프로그램을 안내하는 웹사이트 페이지에 교육의 일부를 촬영하여 미리 보여줄 수도 있을 것이다. 해당 프로그램에 흥미를 느끼는 이들은 pre-semina에 참여하거나 영상을 보게 되며, 이런 행동은 본 프로그램 참여까지 관성 작용을 일으키게 될 가능성이 커진다.  이렇게 관성을 이용한 설득의 법칙을 페이스북과 같이 full-funnel 마케팅이 가능한 매체를 활용하면 그 효과가 더욱 커질 수 있다. 10초 정도의 짧은 영상으로 관심을 유발하고, 이에 반응했던 유저를 대상으로 캠페인의 full 영상을 보여준다. 긴 영상에도 일정 시간 시청하며 반응한 유저에게는 세일즈 전환 메시지를 다시 보여줌으로써 전환을 유도하게 된다. 아마 당신도 이런 full-funnel 마케팅에 반응한 경험이 꽤 많을 것이다.  고객은 어떠한 경험을 하는가 이런 맥락을 더 잘 활용하려면 어떻게 해야 할까? 당신의 고객이 특정 니즈를 가진 순간부터 최종 구매 완료를 하는 순간까지 어떤 경험을 하게 되는 지를 모두 관찰 할 필요가 있다. 그리고 그 과정을 작은 단위로 쪼개어 정의 할 필요가 있다. 작은 단위로 고객의 경험을 쪼개어 보면 어느 부분의 고객 경험을 향상 시켜야 할 지, 그 솔루션이 보이게 된다. 즉, 이런 과정의 연속이 마케팅 실행력을 성장 시키게 된다.  가령, 쇼핑몰의 메인 페이지에서 제품의 상세 페이지를 경험하는 과정에 고객이 있다고 하자. 마케터 입장으로는 메인 페이지에만 고객이 머물다가 사이트를 나가면 무의미하다. 단 한명이라도 더 제품, 서비스의 상세 페이지를 보게 만들어야 한다. 이 때, 상세페이지 확인이 가능한 썸네일 이미지 클릭이나, 배너 클릭이 이루어져야만 다음 단계로 갈 수 있다. 이 때, 해당 이미지나 배너는 고객이 클릭할 수 있는 요소들을 갖추고 있어야 한다. 단순 제품 이미지를 싣는 방법도 있을 테고, 직접 해당 제품을 사용하는 모습의 이미지가 들어갈 수도 있다. 사실, 어떤 이미지가 고객의 클릭율을 높일 수 있을지는 모른다. 다만, 해당 이미지나 배너는 클릭하고 싶게끔 만들어야 상세 페이지뷰가 많아진다는 것은 누구나 안다.  이런 생각의 흐름으로 쪼개진 고객 경험의 모든 구간에서 전환율 상승에 도움되는 모든 전략을 구성해 볼 수 있다.  고객의 경험에 따라 우린 어떤 메시지를 적절하게 줄 수 있는가 만약, 제품의 상세페이지에 유입된 고객이 후기 텝을 눌러 후기를 3가지 정도 읽어보고 구매 없이 나간 데이터가 많다고 생각해보자. 이들은 구매에 대한 의사결정으로 무엇을 주로 본다고 할 수 있는가. 두말 할 나위 없이 바로 후기다. 구매를 실패한 유저 외에 구매를 한 유저도 사전에 후기 콘텐츠 소비가 많다고 판단되면 고객에게 구매 전, 후기 확인이 매우 중요한 구매결정우선순위라고 이야기 할 수 있다.  그럼, 이 데이터를 기반으로 무엇을 해야만 하는가. 바로 구매는 실패했지만 유의미한 행동(후기 소비)을 했던 유저를 다시 사이트에 불러 올 필요가 있다. 바로, 리타겟팅이다. 바로, 이때 우린 어떤 메시지로 이들을 데려와야 할까? 바로, 후기다. 그들의 구매결정우선순위에 맞는 후기 콘텐츠를 통해 그들의 흥미를 다시 끌어야 하는 것이다.  고객을 다시 데리고 올 때, 혹은 신규 고객을 더 많이 유입 시키고자 할 때, 적절한 메시지는 바로 웹사이트에서 목표 전환 전, 유저가 가장 많이 해본 행동이나 소비한 콘텐츠의 내용이 된다. 흥미를 유발하는 콘텐츠는 이미 사이트 유입 전, 한 참 전에 사용되었어야 한다.  우리가 처음에 이야기했던 작은 행동으로부터의 힘은 바로 이렇게 연결된다. 작은 부탁이라도, 작은 행동이라도 그것을 실행하게 되면 관성의 법칙이 생긴다. 즉, 그 다음 요구되는 액션을 할 가능성이 높아지는 것이다. 마트의 시식코너나 화장품의 테스터는 이런 전략의 아주 기초적인 사례라 할 수 있다. 웹사이트에서 찜 버튼을 누른 이는 장바구니 버튼의 클릭을 더 잘 할 것이며, 장바구니 버튼 클릭 유저는 구매를 더 잘 할 것이다. 그래서, 더 작은 것부터 우린 제안해야 한다. 그리고 그 제안을 받아 들인 유저가 물 흐르 듯 흘러 갈 수 있게 그 다음 단계가 잘 준비되어 있어야 한다.  즉, 구매고객들의 구매결정우선순위에 맞춰, 작은 행동부터 요구하라. 이 작은 행동이나 부탁을 들어 줄 가능성은 당신의 본 제품이나 서비스를 구매 할 가능성보다 크다. 이렇게 처음부터 끝까지 고객 행동경험을 디자인하고 이 경험을 웹사이트 내부, 외부에서 모두 디자인하는 것을 시나리오 마케팅이라고 부른다. 자, 당신의 마케팅에는 시나리오가 있는가. 지금부터 한 번 고객의 경험을 A to Z, 모두 설계 해 볼 수 있길 바란다.  
조회수 683

나는 왜 창업을 선택했는가

“나의 존재로 인해, 이 세상은 어떻게 달라졌는가?” 이것이 내 인생의 질문이다.  우리는 살면서 많은 사람들의 도움을 받게 된다. 특히 현대의 분업화된 자본주의 사회에서는 더욱 그렇다. 우리가 입고 있는 옷과 차, 음식 모든 것이 다른 사람에 의해 만들어진 것이다. 그렇다면 나는 이 사회에서 무엇을 해주는 사람인 것인가? 세상에 독립적으로 존재할 수 있는 사람은 없다. 입고 먹을 수 있는 소비재 뿐만 아니라 우리가 나고 자란 도시의 모든 시설과 자연환경, 교육을 받을 수 있었던 학교, 낳고 길러준 부모님까지. 사람은 다른 사람들과의 관계 속에서만 존재한다. ‘받은만큼 돌려줘야 한다.’ 운이 좋게도 좋은 부모님들 덕분에, 상대적으로 좋은 교육과 좋은 환경을 누리며 자라왔다.하지만 그런 환경이 당연하다고 생각하진 않았기에, 다른사람들도 좋은 환경을 누렸으면 좋겠다고 생각했다, 그래서 언젠가 그런 환경을 만들고 싶다는, 다른사람들도 좋은 환경을 누리게 만들어주어야한다는 의무감이 있었던 것 같다. 대학을 졸업하고 회사를 다녀도 마찬가지였다. 좋은 직장이었지만 그것으로 나의 ‘업’을 정의하기에는 한계가 있었다. 여전히 내가 세상에 기여할 수 있는 부분은 부족하게 느껴졌다.인생을 바쳐야하는 일이라면 더 가치 있는 일,  그런걸 할 수 있는 일을 하고 싶었다. 내가 세상의 어떤 방면에 기여할 수 있을까. 내가 정말 제가 풀고 싶은 문제가 무엇인지에 대한 고민이 깊어졌다. 1. 풀고 싶은 문제   “스스로가 원하는 방향으로 살 수 있는 인생” 한국에 살면서 답답했던 부분이 있었다. 예전과 비교하면 다양성과 개성이라는 가치가 많이 존중받고 있지만, 획일적인 삶을 강요 받아온 흔적들이 생활속 여기저기에 자리잡고 있다. '공항패션'이라는 단어가 있다. 원래는 장시간 비행을 위한 편안한 옷을 의미하는 말이었지만, 파파라치를 의식한 연예인들의 화려한 옷차림이 유행처럼 전파되면서 최근에는 화려한 패션을 지칭하는 말이 되었다. 다른 나라 사람들이 모두 공항에 편안한 옷을 입고 간다고 해서 우리나라도 꼭 그렇게 해야하는 것은 아니다. 오히려 그것은 독자적인 문화가 될 수 있다. 하지만 우리나라 사람들이 공항에 갈 때 화려한 패션을 고집하는 이유는 뻔하다. '남들이 보잖아' 내지는 '나만 빠지게 입을 수는 없지'  또래 많은 친구들이 취업을 하고 1-2년이 지났을 무렵, 몇몇 직장인 친구들은 이런 고민을 했다. "이건 내가 원하는 삶이 아닌 것 같아" 안정을 좇아 대기업에 들어왔지만, 본인이 그렸던 업무와 회사문화와는 거리가 있는 현실에 몇몇은 좌절했다. 그럴 수 있다. 현실은 늘 생각만큼 예쁘거나 아름답지 않으니까. 문제는 각자가 생각하는 인생의 길을 걷도록 지지해주는 환경이 주변에 흔치 않다는 것이다. 주변 사람들에게 이야기를 하면 '그냥 안정적으로 살자' 거나 '남들 사는 것처럼 평범하게 살자'는 대답을 듣기가 일수였다. 기업별 연봉순위그들의 마음속에는 원하는 일에 대한 갈망이 있지만, 주변의 시선과 포기해야 할 것들에 대한 부담감때문에 본인이 원하는 방향의 삶을 걸어갈 수 없었다. 그들에게는 자신만의 인생을 가꿔나갈 수 있는 힘을 북돋워줄 무언가가 필요했다. 사실 우리 모두에게 필요하다. 평범함을 강요하는 문화속에서도 용기 있는 누군가는 자신만의 길을 개척해가겠지만, 사회에는 지금보다 그런 사람들이 많아져야 한다고 생각했다. 누구나 하고 싶은 일들을 하면서 살 수 있어야한다.돈이 아닌 성과 기준으로 순위가 매겨져야 한다. 노력과 실력이 인정받아야 한다. 이것이 내가 믿는 생각이었고, 이런 생각으로부터 누구나 한발짝 나아갈 수 있다는 확신이 있었다. 내가 풀고 싶은 문제는 ‘모두가 자신이 원하는 모습으로 살 수 있는, 더 나은 세상을 만드는 방법’ 이었다.  2. 해결책: '환경'을 만드는 것 그러나 내가 원하는 선택을 자유롭게 할 수 있게 만드는 것은 개인의 문제가 아니다. 애초에 선택이 만들어지는 것은 개인의 의지 뿐만 아니라 소셜 프레셔, 사회 환경의 영향력이 훨씬 크기 때문이다. 우리가 학생 때 왜 공부를 할까? 생각해보면 스스로의 의지가 아닌 환경 때문이다. 매일 학교에서 수업을 받았고 정기적으로 시험을 쳤고, 어른들이 공부를 열심히 해야한다고 말씀하셨고,  옆의 친구들이 열심히 공부를 했기 때문이다. 환경에는 사람들이 어떤 일을 선택하게 할 뿐만 아니라, 그것을 행동하게 만드는 힘이 있다.   “목표달성을 위한 커뮤니티 Being & Doing 을 만들다” 목표관리를 위한 Being & Doing 앱처음에는 나를 위한 환경을 만드는 것으로 시작했다. 직장을 다니면서 나는 점점 내 생각대로 움직일 수 가 없었다. 회사라는 작은 집단 안에 속하면서 더 좁은 틀 안에서 내 행동을 평가받아야 했고, 회사 밖에서 나의 시간을 잘 쓰기에는 쉽게 게을러졌다. 내가 하고 싶은 일을 더 잘 할 수 있게 만드는, 그리고 그것이 무엇이든 지지받을 수 있는 환경이 필요했다. 사실은 내 의지나 목표로는 충분하지 않구나를 느낀 다음에는 목표가 생기면, 그 목표를 달성할만한 환경을 만드는 것이 가장 쉬운 방법이기 때문이기도 했다. 학교 때는 뭔가 배워보고 싶으면 동아리에 들어갔고, 관심 있는 주제를 함께 공부할만한 친구들과 항상 함께 해왔다. 그래서 친구와 함께 우리 둘의 시간을 잘 쓰기 위해서, 우리가 각자 가지고 있던 목표를 더 잘 달성하기 위한 모임을 만들었다. 이름하여 ‘Being & Doing’.'내가 원하는 내가 되어가는 과정을 함께하는 모임' 이라는 모토의 오프라인 커뮤니티를 만들게 되었고, 2명이서 시작한 모임은 7년에 걸쳐 500명이 넘는 사람들이 함께하게 되었다. 우리는 모두 어떻게 하면 스스로 세운 계획과 목표를 잘 달성할 수 있을까를 고민했고, 어떤 선택을 하든 아낌없이 응원하고 지지했다.  우리가 만든 ‘Being & Doing’ 이라는 작은 환경을 통해 500명의 사람들은 자신이 하고 싶은 일을 더 자유롭게, 더 잘 이뤄낼 수 있는 것을 확인했다. 3. 창업을 시작하기 전 : MBA 대신 500일간 세계일주창업을 해야겠다는 마음이 강해졌다. 그 전에 더 넓은 세계와 사람에 대한 더 많은 이해가 필요했다. 사실 창업을 마음 먹었다면 글로벌 기업을 향할 수 밖에 없었다. 세계의 흐름이 "글로벌 기업이냐 로컬 기업이냐"가 아니라, "글로벌 기업이냐 죽느냐"로 변하고 있기 때문이다. 구글, 유튜브, 페이스북, 인스타그램, 우버, 에어비앤비 등의 플랫폼 기업들이 네트워크 효과를 가지고, 전 세계적 독점하는 현상들이 강해지고 있기 때문이다. 앞으로의 시대에서 살아남기 위해서는 반드시 글로벌 무대를 우리의 무대로 만들어야 한다. “백문이 불여일견(百聞而不如一見)” 처음에는 미국 MBA 진학을 고민했었지만, 교실에서 수업을 듣기보다는, 내 눈으로 직접 보면서 스스로 세계를 이해하는게 더 나아 보였다. 집에 방문해보면 그 사람이 어떤 사람이 더 깊이 알 수 있는 것처럼, 세계를 깊이 이해하려면 각 나라의 사람들이 살고 있는 곳에 가서 어떤 환경 속에서 어떤 시간을 보내는 지를 직접 보는 것이 최고의 배움이라는 믿음 때문이었다.그래서 MBA 대신 500일간 나만의 경영수업을 계획했다. 세계의 대도시를 돌면서, 무엇이 사람들에게 영향을 미쳤고, 그 사람들이 어떻게 시간을 보내면서 살고 있고, 앞으로 어떻게 살게 될지를 알아보기로 했다. 한국인을 넘어서 인류의 한 사람이란 마음가짐으로, 총 70개국을 방문했다. 4. 우리의 첫 서비스 : 목표달성대회, 챌린저스Comming Soon많은 것을 보고 느끼게 한 세계 여행을 마치고 아이템을 확정 후 친구들과 바로 창업을 했다. 우리는 '리워드형 목표달성대회' 라는 모토로 목표예치금 제도를 기반으로 더 많은 사람들에게 목표를 달성할만한 환경을 제공하는 모바일 서비스를 준비중이다. 앞으로 브런치를 통해 500일간 떠난 세계일주에서 느꼈던 것들과  챌린저스 탄생에 이르기까지 우리의 스토리를 이야기해보려고 한다.더 많은 이야기를 나누고 싶거나 챌린저스에 대한 관심과 질문은 언제든지 환영한다. 챌린저스 - 확실한 목표달성 꾸준한 습관형성 앱www.chlngers.comsupport@chlngers.com
조회수 3948

회사 다니면서도 딴짓 잘하는 7가지 방법

벌써 명함이 네 장이다. 이직을 자주 해서 그런 건 아니고 (...) 회사에서 쓰는 명함이 아닌 다른 명함이 3개 더 있다는 뜻이다. 매 달마다 딴짓을 기획하고 일 년에 한 개씩만 남겨보자고 다짐했는데, 그렇게 4년이 지나니 몇 개의 프로젝트가 남아 내 주위를 맴돌고 있었다.부업 같은 사이드 프로젝트는 모든 직장인들의 염원 같은 존재다. 내게도 그랬다. '아, 저 퇴근 후에는 다른 일로 돈을 벌어요 하핫' 이라든지, '퇴근 후에는 다른 사람으로 살아가죠 후후' 같은 말을 하는 것을 모두가 꿈꾸지 않던가. 그러나 사이드프로젝트란 놈은 사뭇 그렇게 만만하지만은 않다.  이쯤되면 사이드프로젝트 하는게 사이드프로젝트인 수준이래 저래 눈치 볼 상사도 많고, 퇴근하고 나면 피곤해 죽겠고, 막상 뭔가를 하자니 무섭고 두렵고 걱정되고 불안하고 망할 것 같고 가정이 무너지고 사회가 무너지고 ... 우리는 기어코 도전을 방해하는 요소들을 굳이 찾아내고 찾아내어 무기력한 주말을 보내고 제자리에 머무르곤 한다. 그래서일까, 사람들은 내게 '어떻게 사이드프로젝트를 여러 개나 할 수 있냐'는 질문을 많이 던지곤 한다. '집에 가면 자기 발 닦고 자기 바쁜데, 대체 너는 뭐야?' 라는 표정이 보인달까. 절반은 신기함으로, 절반은 의구심으로 묻는 수 많은 질문들에 대답하다보니 나름 노하우가 생기더라. 그래서 오늘은 퇴근 후, 캘리그라피 강사 - 콘텐츠 에디터 - 공간 운영 등을 하며 가열차게 딴 짓을 하고 있는 나만의 몇 가지 팁을 공유해보려 한다. 1. 본업과 딴짓을 연결시켜서 당당하게 공개하라다들 사이드 프로젝트를 한다고 하면 '어떻게 하면 회사에 숨길 수 있을지'를 고민한다. 그러나 우리의 사이드 프로젝트가 성공한다는 가정 아래(...) 당신의 딴짓은 반드시 회사에 알려질 수밖에 없다. 그때 가서 들키게 되면, 잘못한 것도 아닌데 괜히 죄지은 기분이 들면서 사이드 프로젝트를 중단해야 하는 사태가 벌어지기도 한다. 사이드 프로젝트를 시작하기가 두려운 직장인이라면, 본업과 관련이 있어 보이는 프로젝트를 시작하고 그걸 오히려 당당하게 밝히는 것이 좋다. 예를 들어, 마케터인 나는 디자인과 로고 등의 감각을 키우고 싶다는 이유로 '캘리그래피'를 배웠고, 실제로 캘리그래피를 배운 뒤로 꽤 많은 회사 예산을 줄이고 (야근은 늘리고) 업무에도 많은 도움을 받았다.본업과 부업의 퓨전으로 본업을 살리면 팀장님이 좋아한다(...)본업과 사이드 프로젝트가 시너지를 낼 수 있는 방향을 찾으면, 오히려 회사에 공개하기도 수월해진다. 만약 사이드 프로젝트로 본업에 도움을 주는 날이라도 온다면 그 뒤로는 팀원들과 상사들로부터도 눈치를 덜 볼 수 있다. 다만 꼭 지켜야 하는 원칙이 있다면 '회사에서는 절대로 사이드 프로젝트를 하지 않아야' 한다는 점이다. 근태나 업무 퍼포먼스가 떨어지면 모두가 사이드 프로젝트 탓을 하기 쉽다. 공격의 빌미는 주지 않되, 본업에 연결시키는 현명함을 발휘해야 한다. 2. 나를 숨기고 다른 페르소나를 활용해라그래도 딴짓하는걸 절대로 회사에 알리고 싶지 않다면 다른 페르소나를 활용해서 나를 숨기는 방법이 있다. 필자의 경우에는 '문과생존원정대'라는 페이지를 운영하면서 '문생원'이라는 필명을 이용해 3년 동안 정체를 숨기며 콘텐츠를 연재했었다. 처음으로 실명과 얼굴이 공개된 것은 모 신문사 기자가 나를 '문 씨는' 이라고 표현하는 것을 보고 난 뒤였다. 차마 부모님 성씨마저 바꿀 수는 없었어서... (필자는 '고' 씨다)게시자는 나지만, 사람들은 나를 고재형이 아닌 '문생원'으로 기억한다.페이스북 페이지나, 인스타그램 새로운 계정은 얼마든지 내 정체성을 숨기면서도 할 수 있다. 어쩌면 내 개인의 브랜드보다 새로운 페르소나가 더 좋을 수도 있다. 본인이 막강한 인플루언서가 아니라면 과감하게 나를 버리고 새로운 페르소나를 택하라. 얻는 것은 프로젝트의 자유일 것이다. 3. 작은 결과물이라도 만들고 자주 공유해라당연한 말이지만, 사이드 프로젝트를 처음부터 잘할 수는 없다. 시작하자마자 잘했으면 애초에 그건 사이드가 아니었을 테니 말이다.(눈물) 그래서 완벽주의자들은 절대 사이드 프로젝트를 시작하지 못한다. 본인이 만들어 낸 결과물이 완벽하지 않기 때문에 주변에 공개조차 하지 못하고, 완벽한 수준을 만들어내기 까지의 시간 소요를 알기에 애초에 시작하지 않고 무작정 미뤄버린다.작은 결과물이라도 자주 올려라. 의외로 사람들은 작은 결과물에도 놀란다. 그것은 직장을 다니면서도 무언가를 해내는 당신의 열정과 체력에 대한 경의이기도 하며, 애초에 당신에게 크게 기대하지 않았는데 그럴싸한 결과물이 눈에 보이는 그 순간이 놀랍기 때문이기도 하다. 친구들의 작은 반응은 이처럼 큰 동력이 된다타인의 사소한 놀라움은 내게 큰 동력이 된다. 아주 쓸모없는 짓을 하고 있던 것은 아니었구나 하는 안심과 함께, 내가 하고 있는 일이 잘 되고 있는지 간단하게 피드백을 받을 수 있는 좋은 기회이기도 하다. 인스타가 되었든, 페이지가 되었든, 술자리가 되었든 내가 만든 작은 결과물들을 어떻게든 공유하고 자랑하라. 의외의 뽕을 맞을 수 있을 것이다. 4. 돈을 벌지 못하면 실패라는 편견을 버려라우리가 하는 대부분의 프로젝트는 어차피 잘 되지 않는다(...) 필자는 하루가 멀다 하고 사이드 프로젝트를 기획하지만, 그중에 결국 옆에 남은 것은 서 너개 뿐이다. 4년간 매 달 기획했던 48개 중 45개는 망한 것이다. 그리고 그중에서 돈이 되는 것은 단 두 개뿐이었다.페북의 '내가 만든 페이지 목록'. 수도 없이 많은 페이지들이 소리없이 사라져갔지만 모두가 필요한 과정이었다.그러나 사람들은 사이드 프로젝트로 돈을 '소비' 하는 것이 실패하고 있는 과정이라고 여긴다. 명심해야 할 것은, 애초에 사이드 프로젝트로 돈을 벌기까지는 그만큼의 '투자'가 필요하다는 점이다. 돈을 벌 수 있을만한 사이드 프로젝트를 만나기 위해선 그만큼 소비하고 투자해야 한다. 다만 그 소비의 과정에서 즐거움을 찾고, 나에 대한 이해를 높이며, 더 나은 사이드 프로젝트를 찾아가는 여정에 익숙해져야 한다. 그 여정이 익숙해지는 어떤 순간에 소득은 선물처럼 발생한다. 5. '할 일'과 '일정'을 구분하고, 할 일을 위한 일정을 만들어라'진짜 부지런하신 것 같아요'라는 말을 정말 많이 듣는다. 마치 내겐 시간이 더 있는 것처럼, 당신의 회사는 야근을 하지 않느냐는 순진한 눈빛과 함께 이런 질문을 던질 때면 나도 당황한다. 애석하게도 나는 퇴근 시간이 7시인, 늦잠을 좋아하고 야근도 종종하며, 사회생활을 위한 소모적인 모임에도 나가야 하는 평범한 직장인이다. 다만 남들과 다르게 시간을 활용하는 노하우가 있었다면, 친구들을 만나는 모임과 같은 일정처럼 '할 일'을 위해서도 일정을 만들어줬다는 것이다. '오늘은 뭐 하세요?'라는 질문에 '오늘은 사이드 프로젝트를 위해서 시간을 내는 날이에요'라고 것처럼 말이다. 사람들은 주말에 모든 계획을 몰아 넣지만, 구체적으로 언제 어디서 일을 할 것인지는 정하지 않는다. 사람을 만날 때는 꼬박꼬박 시간과 장소를 잘 정하면서 말이다. 일정 속 숨어 있는 '할 일 일정'. 저건 누군가와의 약속과 동일한 무게를 지닌다.딴짓을 위한 시간은 마치 헬스장을 다니는 시간과도 비슷하다. (그래서 잘 안 되는 건가) 캘린더에 미리 딴짓을 위한 일정을 만들고, 다른 사람들이 그 날 만나자고 해도 딴짓과의 약속을 지켜줘라. 그러고 나면 의외로 주말에도 시간이 많이 나고, 쉴 것 다 쉬면서도 딴짓을 하는 나 자신을 발견할 수 있을 것이다. 6. '고민'과 '걱정'을 구분하고, 먼저 저질러라사이드 프로젝트가 45개나 망했지만, 그 과정에서 언제나 '걱정'은 없었다. 늘 어떻게 하면 더 재밌고 잘할 수 있을지 '고민'하는 시간은 있었지만 말이다. 고민과 걱정은 엄연히 다르다. 걱정은 애초에 '실패'를 염두에 두고 있다. '고민'은 더 나은 방향으로 나아가는 보다 구체적인 태도다. 일단 고민하지 말고 먼저 들이대본다. 걱정 후 포기보다 실행 뒤 후회가 낫다.'내가 사이드 프로젝트를 과연 잘할 수 있을까?'는 걱정이고 그 어떤 것도 진전을 이룩하지 못하지만, '유튜브를 하려고 카메라로 얼굴을 찍어봤더니 피부가 너무 안 좋고 생각보다 더 늙어 보이며 말을 버벅이네, 어떻게 하면 이걸 해결할 수 있을까?'는 (슬픈)고민이다. 일단 저지르고, 그 과정에서 걱정을 고민으로 바꿔라. 그러다 보면 어느새 뭐라도 하고 있을 것이다. 7. 함께 작당 모의할 동료를 구하거나 더 많은 사람들을 연결하라예전에 루트임팩트의 정경선 대표가 스타트업을 위한 주거공간을 만들며 했던 말 중에 '미친 짓을 하고 있는 사람들끼리 모아 놓으면, 나만 미친 짓을 하는 게 아니라는 걸 알면 뭔가 위로가 될것 같아서' 만들었다는 말을 기억한다.나는 그 말을 들은 뒤로, 뭔가 새로운 미친 짓을 할 때는 늘 동료(공범)를 만든다. 동료들은 언제나 나의 시도를 부추겨주며, 더 나아가서는 프로젝트를 돌이킬 수 없을 만큼 크게 만들어버리곤 한다. 내게는 공간 사업이 그랬다. 처음에는 방 1개만 운영하려 했는데, 공범을 영입하고 나서는 어느새 4개 층 건물의 2개 층을 운영하게 되었다. 재미는 두 배, 리스크는 절반이니 이 얼마나 합리적 선택인가. 공간 사업도 원래 이렇게 크게 하려던건 아니었는데 정신을 차려보니 커져있었다 (...)만약 동료를 만들기 어렵다면, 페친이라도 늘려라. 나와 비슷한 관심사에 있는 사람들을 무작정 추가하고, 팔로우하고, 자주 만나라. 내 결과물을 보고 무조건적인 좋아요를 눌러줄 수 있는 팬들을 만들면 내 사이드 프로젝트는 의외로 더 크고 그럴싸해 보인다. 무플이 악플보다 더 나쁘다고 하지 않던가. 애초에 반응이 없는 프로젝트를 진행하는 것은 짝사랑과 별반 다르지 않다. -개인의 시대라 하지만, 개인이 성공하기 위해서는 더욱 연결되어야 하는 아이러니한 세상에 살고 있다. 회사로부터 탈출하고, 더 나은 '내'가 되기 위해서는 이제 준거집단으로부터 탈출해 더 많은 사람들을 만나고 연결되어야 한다. 더 다양한 프로젝트 주제를 찾기 위해서라도, 내 프로젝트를 무작정 좋아해 줄 사람들을 만나기 위해서라도 우리는 더 큰 세상으로 나가야 한다. 그런 큰 세상을 향한 발걸음에 적당히 좋은 입문 기회가 있다. 이 글을 쓴 필자도 나온다. 그런데, 필자가 제일 쪼렙이다. 강남역에서 9월 14일에 열리는 '평생직장은 개뿔, 개인의 시대' 컨퍼런스에서 더 대단한 '개인주의자'들의 이야기를 들을 수 있다. 사이드 프로젝트를 잘 하는 방법부터, 회사가 아닌 곳에서 살아남는 '개인'들의 노하우를 공유한다. 얼리버드가 끝났다. 벌써 절반이 넘게 팔렸다고 한다. 이 글을 읽고 무언가가 꿈틀댔다면, 더는 망설일 이유가 없다. 사이드 프로젝트를 고민하고 있다면, 지금 '개뿔콘'에 와서 그 힌트를 얻어보도록 하자.https://festa.io/events/75평생직장 개뿔! 개인의 시대 컨퍼런스 | Festa!Festa에서 당신이 찾는 이벤트를 만나보세요.festa.io#어니스트펀드 #마케터 #마케팅팀 #인사이트 #경험공유
조회수 603

구글 애드워즈가 자연검색 트래픽 증가에 영향을 미칠까?

구글 애드워즈 배너 광고나 검색 광고가 자연 검색 트래픽에 영향을 미칠 수 있다는 것은 일반적인 디지털 마케팅 업계의 지식이 되어 왔습니다. 그러나 그 효과는 정확히 무엇이며, 어떤 과정을 거쳐 작동될까요? 오늘 오피노에서는 유료 광고가 유기적 결과에 영향을 주는 방식과 그렇지 않은 방식 중 하나를 다룰 것입니다 :) 많은 사람들이 의심해보았을 것입니다. "아, 우리는 Goolge AdWords에 많은 돈을 투자하기 시작했어! 그러니까 자연검색 트래픽이 올라갔어." 또는 "이봐, 우리는 Google에 많은 돈을 지출하고 있지만 경쟁 업체는 더 많은 돈을 지출하고 있어!. 그래서 쟤네들의 자연 검색 트래픽 증가율이 더 높은 거야!" 검색 광고에 대한 디스플레이 광고의 영향을 측정하고자 한 여러 연구가 있었지만 터키의 하버드 (Harvard)와 오지 겡 (Ozyegin) 대학의 연구자는 이 연구를 제대로 조사하려 했습니다. 그들의 연구 결과는 하버드 비즈니스 스쿨 (Harvard Business School)의 "Display Ads Influence Search? 온라인 광고의 간접 기여와 역동성"이라는 제목으로 게재되었으나, 이 문서는 학문적 전문 용어, 사회 과학 모델링 토론 및 다른 연구에 대한 언급과 같은 학술적 글쓰기 규칙에 따라 어려움을 겪기 때문에 지루하고 읽기가 어렵습니다.그래서 제가 간단히 정리를 해드리려고 합니다.결론 및 통찰력은 유의미하지만, 다음과 같이 요약할 수 있습니다.- 디스플레이 광고는 더 많은 검색양, 클릭, 전환에 기여한다.- 검색 광고는 디스플레이 광고의 상호작용을 증가시키는 것에는 딱히 기여하지 않는다.- 하지만, 디스플레이 노출 광고의 효과는 즉각적이진 않으나 평균적으로 2주 정도 이후에 발생하기 시작한다.- 마케터들은 단순한 계산이나 측정 항목으로는 디스플레이 광고의 ROI나 CPA를 결정하기에는 한계가 있다.이러한 인사이트는 온라인 광고를 사용하여 새로운 당좌 계정 고객을 확보하는 검색 및 디스플레이 광고 지출 및 전환 데이터 ( "미국의 대형 은행에서")로 깊이 파고들었습니다. 이 데이터는 2010 년에 나온 것입니다. 올해 온라인 은행의 온라인 광고 예산은 약 1 백만 달러였으며 검색과 디스플레이 간에 거의 균등하게 분배되었습니다.이 학술 논문에서 몇 가지를 발췌한 내용들이 있습니다."디스플레이 광고는 클릭뿐만 아니라 검색 트래픽 증가에도 중요한 영향을 미치는 것으로 나타났습니다. 이 파급 효과의 대다수는 순식간에 발생하지 않았지만 평균적으로 2주 후에 적용되었습니다...""우리의 연구 결과에 따르면 업계에서 일반적으로 사용되는 단순 정적 통계는 온라인 광고의 효과를 정확하게 측정하지 못할 수 있습니다. 그래서 우리는 측정항목을 동적으로 가져와 광고의 효율성을 측정했습니다. 그 결과, 검색 CPA가 단순 정적 CPA보다 48% 낮아졌고, 반면에 ROI는 38% 증가하였습니다. 디스플레이 광고에서도 비슷한 패턴이 나타나는데 여기에는 또한 기여도가 포함됩니다. 이로 인해 디스플레이 CPA가 표준 CPA보다 14 % 낮아졌으며 투자 수익 (ROI)이 10 % 증가했습니다...""광고 효과에 대한 이러한 수정된 성과 파악 방법론은 [은행]이 현재 사용하는 것보다 매우 다른 예산 배분을 초래합니다. 특히 우리는 제안된 할당이 검색 응용 프로그램에 미치는 영향으로 인해 디스플레이에 대한 기여도가 높았음에도 불구하고, 검색 광고 예산은 강력한 동적 효과로 인해 현재 수준에서 36 % 증가해야 하며 디스플레이 광고 예산은 31 % 감소해야 합니다."결과적으로, 디스플레이 광고가 검색률 증가에 지대한 영향을 미친 다는 것은 위에 프레임 워크에서 알 수 있습니다. 그런데도 우리가 Google Display Network에 회의감을 갖고, 성과 파악이 어려운 것은 모든 데이터 분석 툴이 "Last Click"에 기여 모델을 중점으로 두고 있다는 것입니다.논문 원본 : https://www.slideshare.net/gesterling/do-display-ads-influence-search?from_action=save다음에는 광고 성과를 제대로 분석하기 위한 "기여 모델(Attribution Model)"과 "교차 기기 트래킹" 대하여 심도 있게 얘기해보도록 하겠습니다.퍼포먼스 마케팅 에이전시, 오피노 바로가기
조회수 1279

경험 부족한 스타트업의 devops 도입기 2편

출처 : 구글 이미지 검색그 동안 테스트코드작성, 코드리뷰를 집중적으로 수행했는데요. 아직은 엔지니어 모두가 걸음마 단계여서 실무리듬에 코드리뷰와 TDD를 끼워넣진 않았습니다. 대신 각자 리서치를 수행하고 매주 수요일 SW 세미나에서 lesson&learn 공유하는 식으로 devops를 공부했습니다.회고2주를 되돌아보고 느낌점을 한 문장으로 요약하면 다음과 같습니다.기술부채의 이자율은 고정 값이 아니다. 시간이 흐를수록 점점 더 높아진다.코드리뷰부터 말씀드리겠습니다. android와 iOS의 경우 앱 개발기간 3개월 동안 커밋한 어떠한 코드도 리뷰하지 않은 상황이었습니다. devops를 계기로 두 프로젝트 간의 코드리뷰를 드디어 시작했는데요. 방대한 코드를 빠르게 이해하기 위해 코드리뷰에 앞서 시각화된 자료를 준비해 아키텍쳐리뷰부터 수행하였습니다. 아니나 다를까 두 클라이언트의 유저스토리가 완벽하게 똑같음에도 불구하고 클래스 설계며 구현상의 코드며 개발 상의 내용이 완전히 갈라져 있음을 목도했습니다.출처 : 구글 이미지 검색iOS, android 환경적 차이로인해 어쩔 수 없이 코드의 다름이 나타나는 경우도 있었지만 대다수의 차이는 코드리뷰를 하지 않아서였습니다. 코드리뷰를 진행하면서 조금 신기했던 사실은 아주 간단한 요구사항(기능)도 개발자 개성에따라 구현법이 각양각생이라는 점입니다. 한 가지 문제에도 다양한 해결법이 존재하는만큼 각 구현법 마다 강점과 약점이 존재하기 때문에 코드리뷰의 필요성이 생각보다 더 크다는 점을 깨달았습니다. 앞으로 클라이언트에는 고도화된 유저스토리가 계속 추가될 예정인데 두 클라이언트간 갈라진 구현상의 설계는 분명히 피처 딜리버리에 병목지점으로 작용될 것입니다. 두 갈래로 나뉜 클라이언트를 어떻게 설계적으로 통합시켜 나갈지 지속적으로 고민해봐야 겠습니다. 또한 더 이상 차이가 벌어지지 않도록 지금부터 추가되는 피쳐들이라도 코드리뷰를 수행하는 환경에서 개발되도록 해야할 의무감도 느꼈습니다.테스트 코드도 마찬가지로 기술부채가 생각보다 많이 쌓였음을 깨달았습니다. 스위처의 클라이언트의 기술적 난이도는 낮은 편입니다. 그런데 그럼에도 불구하고 기존 코드에 테스트코드를 입혀 SUT로 만드는 일은 여간 까다로운 일이 아니었습니다. 기존 코드는 비즈니스로직과 I/O(DB,Network, BLE), UI 코드간의 커플링이 높아서 막상 어느것 하나 테스트코드를 입히기 쉽지 않았습니다. 테스트코드를 작성하기 위해서는 논리단위의 클래스들을 떼어내는 리팩토링이 병행되어야만 했습니다. 테스트코드 없이 작성한 코드는 시간이 지날 수록 테스트코드가 비집고 들어갈 틈 또한 점점 없애는듯 합니다. 그래도 이러한 현상들은 몸소 체험하면서 확신을 갖게된 사실도 있었습니다.테스트코드가 존재함으로서 SUT의 설계는 옳은방향으로 향한다.기존 코드에 테스트코드를 입히려고 이리저리 애쓰다보면 무관한 기능들이 뭉쳐있는 비대한 클래스는 발견하게 됩니다. 테스트코드를 입히기 까다로운 이 거대한 클래스를 쪼개야할 필요성을 느끼게 되는데요. 이 시점에서 개발자는 테스트코드가 있기 전에 절대 하지 않던 리팩토링 고민을 하게 됩니다. 치열하게 고민하는 과정에서 리팩토링에 실패하면 제대로된 테스트코드를 작성하기가 불가능해집니다. 즉, 테스트코드를 작성 했다면 분명히 설계상의 리팩토링이 일어 났을 확률이 높습니다.스위처 어플리케이션의 내 주변의 스위처 목록 페이지를 예를 들어보겠습니다. 해당 스크린에서는 유저가 여러개의 스위처를 확인하기 때문에 몇 가지 비즈니스 룰에 의해 스위처들의 정렬 순서가 결정됩니다. 그래서 유저는 여러개의 스위처가 검색되어도 내가 가장 사용할 확률이 높은 스위처를 최상단에서 만나는데요. 그 정렬 역할을 맡은 클래스가 switcher sorting(이름이 잘 기억안나네요..) 입니다.저희 안드로이드 개발자는 이 클래스를 첫 SUT로 만들기로 결정했고 일 주일간 테스트코드를 작성하려고 노력했습니다. 그러나, 생각보다 쉽지 않았습니다. SW세미나때 코드를 리뷰하면서 발견한 사실인데 swithcer sorting는 단순히 비즈니스룰에 사용되는 정보 뿐만 아니라 꽤나 무거운 무거운 switcher 클래스도 의존하고 있었습니다. 정작 sorting 우선순위를 결정하는데 필요한 정보는 switcher 클래스가 갖고있는 정보들 중 극히 일부분이었는데 말이죠. 이렇게 큰 클래스 때문에 테스트 코드를 짜려면 안드로이드 라이브러리인 BluetoothDevice와 Context 인스턴스를 공급하는 목업 클래스가 필요한 상황이 벌어질 수도 있었습니다. 더 큰 문제는 비대한 클래스로 인해서 test의 fixture를 구성하는데 수십 줄의 코드가 필요 했다는 사실입니다. 자연스럽게 테스크코드를 작성하면서 리팩토링의 필요성을 느끼게 되었습니다. 가까운 미래에 스위처 개발자가 성공적으로 switcher sorting 클래스를 SUT로 만들었다면 이 클래스의 설계 또한 분명 리팩토링을 거쳐 더 좋은 방향으로 거듭 났을 것 입니다.앞으로 2주간 할 일어떠한 일이든 균형이 중요하다고 생각합니다. 마냥 기술부채를 털어낸답시고 리서치와 공부만 하고 있을 수는 없습니다. 동아리가 아닌 회사이기 때문에 시장의 니즈에 맞춰서 분명히 다시 피쳐를 개발하는 속도를 높이는 가속 패달을 밟아야 할 시점이 올 것입니다.출처 : 구글 이미지 검색너무 이르지도 않게 그렇다고 너무 느리지도 않게 적절한 시점에 고객이 불만을 터뜨리지 않을 정도의 SW 안정성을 보장하는 최소한의 devops 수준을 달성해야합니다. 어느정도까지가 devops를 도입해야 오버엔지니어링이 아닌 기술부채를 탕감하면서 동시에 I/O 초중기 목표를 달성할 수 있는지 치열하게 고민하고 부딪혀보며 기민하게 대응해야 겠습니다.앞으로의 2주간 할 일은 다음 질문 두 가지에 대한 대답을 하면서 자연스럽게 도출될 것 같습니다.테스트코드 작성을 위한 TDD를 어떻게하면 엔지니어가 효과적으로 학습할 수 있을 것인가?코드리뷰를 스프린트 일과에 어떻게 자연스럽게 안착시킬 것인가?#스위쳐 #Switcher #개발 #개발팀 #문제해결 #인사이트 #DevOPS #데브옵스
조회수 960

비발디파크 스노위랜드 직원 인터뷰, '김경민' 파트장을 만나다

대명레저산업 직원 인터뷰 <대명인사이트>의 여섯 번째 주인공, 비발디파크 스노위랜드에서 현장 관리에 힘쏟고 있는 김경민 파트장을 만났습니다. 지난 12월 그랜드 오픈한 눈놀이 테마파크 스노위랜드를 찾아 눈, 썰매, 빛이 가득한 공간에서 김경민 파트장과 함께 다양한 이야기를 나누었습니다.Q1. 간단한 자기소개 부탁드려요안녕하십니까. 비발디파크에서 근무하고 있는 스노위랜드 김경민 파트장이라고 합니다.저는 여기서 모든 고객들이 안전하고 즐겁게 스노위랜드를 이용하도록 하기 위해 현장에서 전천후로 확인 및 관리를 하고 있습니다.Q2. 스노위랜드의 자랑거리를 소개해주세요스노위랜드의 가장 첫번째 자랑할 점은 남녀노소 모두가 즐길 수 있는 공간이라는 점입니다. 스노위랜드에서는 스키나 보드를 타지 못해도 즐길 수 있는 놀이거리가 가득합니다. 특히 튜브썰매, 레프팅썰매와 함께 옛추억을 즐길 수 있는 얼음썰매, 전통썰매까지 다양한 썰매가 준비되어 있습니다.그리고 비발디파크의 가장 큰 자랑거리인 무료 셔틀버스도 빠질 수 없습니다. 서울, 경기 셔틀버스를 확대 운영하면서 수도권 어디에서든 셔틀버스를 무료로 이용하실 수가 있습니다.Q3. 꼭 타야할 어트랙션 추천해주세요두말 할 것 없겟죠! 뒤에 보시는 튜브썰매, 레프팅 썰매입니다. (튜브썰매는) 아이들에게 가장 인기 있는 눈썰매입니다. 타기가 편할 뿐만 아니라 눈 위에서 파도를 타는 기분을 맛볼 수가 있으셔서 추천해드리고 싶습니다. 물론 다른 어트랙션도 각각의 매력이 있습니다. 여럿이 다함께 탑승할 수 있는 레프팅 썰매는 가족, 친구, 연인 고객분들에게 추천해드리고 싶습니다.Q4. 마지막으로 한 마디 말씀해주세요.올 해에 첫 선을 보인 눈놀이 테마파크 스노위랜드를 찾아주신 모든 분들께 감사의 인사를 드리고 싶습니다. 스노위랜드 테마파크 공간에서는 최상의 컨디션을 유지하고자 노력하고 있으니 모두 즐겁게 즐겨주셨으면 좋겠습니다. 모든 분들이 즐길 수 있는 그런 놀이공간을 만들 수 있도록 노력하고 열심히 하겠습니다. 정말 감사합니다.인터뷰 내내 온화한 미소로 대화를 이어나가 준 김경민 파트장. 비발디파크 스노위랜드를 고객들이 안전하고 신나게 즐길 수 있는 이유는 직원들의 땀과 열정이 숨어있기 때문이라고 생각됩니다. 대명인사이트는 다음 주인공과 함께 다시 찾아오도록 하겠습니다.스노위랜드 요금 안내  주간 자유 이용권은 대/소인 구분 없이 40,000원에 전용 곤돌라 이용과 눈썰매, 다양한 체험존 이용이 가능하며 야간이용권도 대/소인 구분 없이 22,000원으로 전용 곤돌라 이용과 함께 아름다운 촛불 거리를 감상할 수 있습니다. 36개월 미만은 증빙서류 지참 시 무료입장이 가능하며 키즈이용권은 36개월 이상 110cm 미만 기준으로 이용 가능합니다.  스노위랜드 할인 정보 안내리조트 기명 회원은 50% 할인 무기명 회원일 시 40% 할인 적용 되며 장애인/경로 우대, 국가유공자시라면 40% 할인 혜택이 제공됩니다. 지역주민, 회원동반, 외국인, [BC, 신한, NH, KB, 하나, 롯데] 제휴카드 이용 시에는 30%, 투숙객에게도 20%의 할인이 적용됩니다. 또, 제휴카드사, 회원동반, 지역주민, 투숙객에게는 D멤버스 추가 5% 할인이 적용 가능하며 키즈이용권은 할인 제외 대상이니 이용에 참고 바랍니다.#대명 #대명리조트 #비발디파크 #스노위랜드 #구성원인터뷰 #기업문화 #조직문화 #나들이정보
조회수 1548

잉끼 CTO 데이블 김성민이 알려주는 직장에서 인기남, 인기녀 되는 법

"탈덕!! 호떡 사 줄게요!"해맑고 장난스러운 목소리가 사무실에 울려 퍼진다.주인공은 데이블의 잉끼 CTO 김성민. (그의 팬이 지어준 별명)데이블의 인기남답게 그의 모든 말은 고유명사가 된다."잉끼 CTO 패밀리"는 데이블 김성민의 팬클럽 이름이다.퇴근시간만 되면 그와 함께 퇴근하려는 팬들로 입구가 마비될 지경이다.어떻게 하여 그는 이렇게 열성적인 팬들을 모을 수 있었을까?그의 일상을 관찰하며 인기 비결을 분석해 보았다.| 그는 다가가기 쉬운 사람외모를 말하는 것이 아니다. 그를 만나면 안다.가만히 있어도 풍기는 아빠같은 편안함(귀여움)은 어쩔 수가 없다. (실제로 한 가정의 아버지)보통 그의 연세가 되면 나이 운운하며 꼰대질(?)하거나 어른인 척 하기 마련인데 그렇지 않다.그래서 다가가기 쉽다!어떤 질문이나 발언에도 친절하고 자세한, 질문자가 원하던 답변을 해준다.한 데이블러는 퇴근시간마다 질문을 하기 위해 성민님을 기다린다.그런 데이블러들을 위해 몰래 간식을 사주시기도 한다 ㅠㅠ(심쿵)그를 따라다니면 떡밥이 떨어진다는 소문이...성민님은 뇌섹남by 소희님| 그는 능력과 상반되는 겸손함을 지녔다그는 가히 데이블의 가정선생님이라 할 만하다.개발 인턴 창수님 자리에 찾아와 몇시간이 걸리든 최대한으로 설명을 해 주신다. (내가 매일 보고있음)개발자들 보고있나? 부러우면 개발자 지원 클릭.개발뿐만이 아니다. 회사와 관련된 모든 것이 그를 툭치면 툭 나온다.이쯤되면 거만하실 법도 한데, 말투와 행동에서 겸손함이 묻어나오는게 놀랍다!| 그는 유머러스하다업무적인 말만 하면 절대 친해질 수 없었겠지. 연륜에 어울리는 다양한 이야깃거리를 가지고있다.그리고 침묵이 오는 순간 풀어놓는다. 전혀 지루하지 않다는 게 신기할 정도.적절한 타임에 꺼내는 흥미로운 이야기는 사람들을 자석처럼 끄는 것 같다.거기다 유머감각까지 있다. 빵빵 터지는 것은 아니지만, 더 갖기 어렵다는 잔잔한 유머가...편하고 능력 있고 겸손하고 유머러스까지!이렇게 완벽한 성민님을 만나고 싶다면 데이블의 문을 두드려보라.인기남, 인기녀의 조건 정리- 편하고 친절해서 다가가기 쉽다- 일 잘하고 겸손하다- 유머감각이 있다#데이블 #CTO #팀워크 #팀문화 #스타트업 #스타트업문화 #스타트업CTO
조회수 4127

Flask로 만들어 보는 WSGI 어플리케이션

안녕하세요. 스포카 크리에이터팀 문성원입니다. 오늘은 WSGI(Web Server Gateway Interface)어플리케이션을 직접 작성해보고, 또 이런 작성을 보다 쉽게 도와주는 프레임워크 중 하나인 Flask에 대해서 알아보겠습니다.WSGIWSGI에 대해 기억이 가물하신 분들을 위해 지난 글의 일부를 잠깐 다시 살펴보죠.이 경우 uwsgi는 일종의 어플리케이션 컨테이너(Application Container)로 동작하게 됩니다. 적재한 어플리케이션을 실행만 시켜주는 역할이죠. 이러한 uwsgi에 적재할 어플리케이션(스포카 서버)에는 일종의 규격이 존재하는데, 이걸 WSGI라고 합니다.(정확히는 WSGI에 의해 정의된 어플리케이션을 돌릴 수 있게 설계된 컨테이너가 uwsgi라고 봐야겠지만요.) WSGI는 Python 표준(PEP-333)으로 HTTP를 통해 요청을 받아 응답하는 어플리케이션에 대한 명세로 이러한 명세를 만족시키는 클래스나 함수, (__call__을 통해 부를 수 있는)객체를 WSGI 어플리케이션이라고 합니다.글로는 감이 잘 안오신다구요? 그럼 코드를 보면서 같이 살펴봅시다. (모든 코드는 Python 2.7에서 테스트 되었습니다.)Hello World!def app(environ, start_response):    response_body = 'Hello World!'    status = '200 OK'    response_headers = [('Content-Type', 'text/plain'),                         ('Content-Length', str(len(response_body)))]    start_response(status, response_headers)        return [response_body]view rawgistfile1.py hosted with ❤ by GitHubapp은 일반적인 Python 함수지만, 동시에 WSGI 어플리케이션이기도 합니다. environ과 start_response를 받는 함수기 때문이죠.(PEP-333) 사실은 꼭 함수일 필요도 없습니다. 다음은 위의 app과 동일한 동작을 하는 WSGI 어플리케이션입니다.class App(object):    def __init__(self, environ, start_response):        self.environ = environ        self.start_response = start_response    def __iter__(self):        status = '200 OK'        response_body = "Hello World!"        response_headers = [('Content-Type', 'text/plain'),                            ('Content-Length', str(len(response_body)))]        self.start_response(status, response_headers)        yield response_bodyview rawgistfile1.py hosted with ❤ by GitHubApp는 Python 클래스(Class)로 environ과 start_response를 멤버 변수로 가지는데, 여기에는 약간의 트릭이 있습니다. 생성자(Constructor)인 App를 함수처럼 사용하게 하여 리턴되는 결과(실제로는 생성자를 통해 생성된 객체겠죠.)가 \_\_iter\_\_를 구현한 순회 가능한(Iterable) 값이 되게 하는 것이죠. (덤으로 이 객체는 발생자(Generator)를 돌려주게 됩니다.)그럼 이제 이 코드들을 실행하려면 어떻게 해야할까요? 그러려면 먼저 WSGI 규격에 맞게 어플리케이션을 실행시켜 줄 서버를 작성해야합니다. 하지만 다행히도 Python 2.5부터 제공되는 wsgiref.simple_server를 이용하면 간단히 테스트 해 볼 수 있습니다.(서버를 직접 작성하는 부분에 대해선 나중에 다루도록 하겠습니다.)from wsgiref.simple_server import make_serverhttpd = make_server('', 8000, app)httpd.serve_forever()view rawgistfile1.py hosted with ❤ by GitHub위 코드를 실행시킨 후에(당연히 app이나 App도 만들어져 있어야겠죠?) 웹 브라우져를 통해 localhost:8000으로 접속하면 작성한 어플리케이션의 동작을 확인할 수 있습니다.environ과 start_response테스트도 해봤으니 코드를 조금만 더 자세히 살펴봅시다. 함수 버젼의 app이나 클래스 버젼의 App모두 공통적으로 environ과 start\_response를 인자로 받아 요청을 처리하는 것을 확인할 수 있습니다. (당연한 이야기겠지만, 반드시 이름이 environ이나 start\_response일 필요는 없습니다만 편의상 이후 계속 environ과 start_response로 표기하겠습니다.)하나씩 살펴보자면, environ은 Python 딕셔너리(dictionary)로 HTTP 요청을 처리하는데 필요한 정보가 저장되어있습니다. HTTP 요청에 대한 정보는 물론, 운영체제(OS)나 WSGI 서버의 설정 등도 정의되어있지요. 다음 코드는 이러한 environ의 내용을 응답으로 주게끔 수정한 WSGI어플리케이션입니다.def dump_environ_app(environ, start_response):    response_body = "\n".join(["{0}: {1}".format(k, environ[k]) for k in environ.keys()])    status = '200 OK'    response_headers = [('Content-Type', 'text/plain'),                         ('Content-Length', str(len(response_body)))]    start_response(status, response_headers)        return [response_body]view rawgistfile1.py hosted with ❤ by GitHublocalhost:8000에 각종 쿼리 스트링(Query String)을 붙이거나, 브라우져를 바꿔가면서 확인해보면 출력되는 값이 바뀌는 것을 확인하실 수 있습니다.그럼 이제 start\_response를 한번 볼까요. start\_response는 일종의 콜백(Callback)으로 인터페이스는 다음과 같습니다. start_response(status, response_headers, exc_info=None) 실제 서버에서 어플리케이션으로부터 응답(Response)의 상태(Status)와 헤더(Header), 그리고 예외(Exception)의 유무를 확인받아 실행하게 되는데, status와 response_headers는 HTTP 응답 명세에 근거하여 작성하게 됩니다.Middleware지금까지 우리는 어떻게 WSGI 어플리케이션을 작성하는지에 대해 살펴봤습니다. 요청을 받아 처리하는 HTTP의 기본 기능에 충실한 어플리케이션이었죠. 그런데 일반적으로 우리가 작성하는 웹 어플리케이션에서 주로 다루게 되는 쿠키(Cookie), 세션(Session)에 대해서는 어떻게 처리해야 좋을까요? WSGI 명세에는 이러한 내용을 직접적으로 다루고 있지 않습니다. WSGI 자체는 서버나 프레임워크 자체가 아니라 서버가 어플리케이션과 통신하는 명세를 다루고 있기 때문이죠. 따라서 이러한 기능은 작성자가 직접 이를 구현해야 합니다. 그런데 이런 구현을 어플리케이션을 작성할때마다 하는건 너무 번거로운 일입니다. 그것보다는 이미 작성한 어플리케이션을 확장하는 것이 간단하겠지요. 이러한 확장을 위해 필요한 것이 WSGI 미들웨어(Middleware)입니다.미들웨어는 어플리케이션을 처리하기 전후의 처리나 environ의 추가등을 통해 작성된 어플리케이션을 확장할 수 있습니다. 다음은 쿼리 스트링의 \_\_method\_\_에 따라 HTTP 메소드(Method)를 임의로 변경하는 처리를 도와주는 간단한 미들웨어입니다.from werkzeug import url_decodeclass MethodRewriteMiddleware(object):    """        app = MethodRewriteMiddleware(app)    """    def __init__(self, app, input_name = '__method__'):        self.app = app        self.input_name = input_name    def __call__(self, environ, start_response):        if self.input_name in environ.get('QUERY_STRING', ''):            args = url_decode(environ['QUERY_STRING'])            method = args.get(self.input_name)            if method:                method = method.encode('ascii', 'replace')                environ['REQUEST_METHOD'] = method        return self.app(environ, start_response)view rawgistfile1.py hosted with ❤ by GitHubMethodRewriteMiddleware는 \_\_call\_\_를 통해 app을 대체하게 됩니다. (데코레이터(Decorator)가 생각나셨다면 정확한 이해십니다.)Flask미들웨어를 통해 어플리케이션을 확장하는 방법까지 알아봤습니다. 그러나 이것만 가지고 웹 어플리케이션을 만들기에는 아직 귀찮은 부분이 많이 남아있습니다. 각종 파라미터를 처리하기 위해서는 environ를 일일히 뒤져야하며, 요청에 대한 응답으로 전달할 HTML도 일일히 문자열로 적어야하죠. 이런 여러가지 불편함을 해결하기 위해 알아볼 것이 WSGI 마이크로프레임워크를 자처하는 Flask입니다. Flask는 WSGI 라이브러리인 Werkzeug를 만들기도 한 Armin Ronacher가 만든 프레임워크로 “마이크로”라는 수식어에 어울리게 아주 핵심적인 부분만을 구현하고 있지만, 유연하게 확장이 가능하게 설계된 것이 특징입니다.다시 한번 Hello World!우선 Flask를 시스템에 설치해야하는데, pip가 설치되어있다면 pip install flask로 설치 가능합니다.(환경에 따라 루트(root)권한이 필요할 수도 있습니다.) easy_install의 경우도 마찬가지로 easy\_install flask로 설치 가능합니다.설치가 완료되었으면 다음과 같이 아주 간단한 어플리케이션을 작성해봅시다.from flask import Flaskapp = Flask(__name__)@app.route("/")def hello():    return "Hello World!"if __name__ == "__main__":    app.run()view rawgistfile1.py hosted with ❤ by GitHubFlask(정확히는 Werkzeug)는 테스트를 위해 간단한 WSGI 서버를 자체 내장하고 있기 때문에 app.run을 통해 어플리케이션을 직접 실행할 수 있습니다.Route이번에 작성한 Flask 어플리케이션에는 이전까지 보지 못하던 개념이 들어 있습니다. app.route가 바로 그것인데요. 이 메서드는 URL 규칙을 받아 해당하는 규칙의 URL로 요청이 들어온 경우 등록한 함수를 실행하게끔 설정합니다. 위의 Hello World! 예제 같은 경우엔 “/”가 해당되겠지요. 또한 이런 규칙을 URL로 부터 변수도 넘겨 받을 수 있습니다.# http://flask.pocoo.org/docs/api/#url-route-registrations@app.route('/')def index():    pass@app.route('/')def show_user(username):    pass@app.route('/post/')def show_post(post_id):    passview rawgistfile1.py hosted with ❤ by GitHub이렇게 URL을 통해 처리할 핸들러를 찾는 것을 일반적으로 URL 라우팅(Routing)이라고 합니다. 이런 URL 라우팅에서 중요한 기능 중 하나가 핸들러에서 해당하는 URL을 생성하는 기능인데, Flask는 이를 url_for 메서드를 통해 지원합니다.@app.route('/')def index():    return ""@app.route('/')def show_user(username):    return username@app.route('/post/')def show_post(post_id):    return str(post_id)from flask import url_for@app.route("/routes")def routes():    return "".join([            url_for("index"),            url_for("show_user", username="longfin"),            url_for("show_post", post_id=3)            ])view rawgistfile1.py hosted with ❤ by GitHub보다 자세한 사항은 API 문서를 참고하실 수 있습니다.Template여태까지 우리는 요청에 대한 응답으로 단순한 문자열을 사용했습니다. 하지만 일반적인 웹 어플리케이션의 응답은 대부분이 그것보다 훨씬 복잡하지요. 이를 보다 쉽게 작성할 수 있게끔 도와주는 것이 바로 Flask의 템플릿(Template)입니다. Flask는 기본 템플릿 엔진으로 (역시 Armin Ronacher가 작성한)Jinja2를 사용합니다.기본적으로 템플릿엔진은 별도의 규칙(여기서는 Jinja2)에 맞게 작성된 템플릿 파일을 읽어 환경(Context)에 맞게 적용한 결과물을 돌려주는데 이 과정을 Flask에서는 render_template()가 담당하고 있습니다. 다음 코드는 hello.html이라는 템플릿 파일을 읽어서 이름을 적용한 뒤에 돌려주는 코드입니다.# from http://flask.pocoo.org/docs/quickstart/#rendering-templatesfrom flask import render_template@app.route('/hello/')@app.route('/hello/')def hello(name=None):    return render_template('hello.html', name=name)view rawgistfile1.py hosted with ❤ by GitHub쉽게 작성할 수 있게 도와준다고 해도, 템플릿 역시 나름의 학습을 필요로 합니다. 자세한 사항은 Jinja2의 API 문서를 참고하시기 바랍니다.RequestHTTP 요청을 다루기 위해서 때로는 environ의 내용은 너무 원시적일때가 있습니다. HTML 폼(Form)으로부터 입력받는 값이 좋은 예인데요. Flask에서는 request라는 객체(역시 Werkzeug에서 가져다가쓰는 거지만요)를 통해 이를 보다 다루기 쉽게 해줍니다. 다음은 HTML 폼으로부터 입력받은 message라는 값을 뒤집어서 출력하는 코드입니다.from flask import request@app.route("/reverse")def reverse():    message = request.values["message"]    return "".join(reversed(message))view rawgistfile1.py hosted with ❤ by GitHubSession로그인등으로 대표되는 요청간의 상태를 유지해야하는 처리에 흔히 세션(Session)을 사용하실 겁니다. Flask에서는 session객체를 지원합니다.# from http://flask.pocoo.org/docs/quickstart/#sessionsfrom flask import Flask, session, redirect, url_for, escape, requestapp = Flask(__name__)@app.route('/')def index():    if 'username' in session:        return 'Logged in as %s' % escape(session['username'])    return 'You are not logged in'@app.route('/login', methods=['GET', 'POST'])def login():    if request.method == 'POST':        session['username'] = request.form['username']        return redirect(url_for('index'))    return '''        <form action="" method="post">           <input type=text name=username>           <input type=submit value=Login>        </form>    '''@app.route('/logout')def logout():    # remove the username from the session if its there    session.pop('username', None)    return redirect(url_for('index'))# set the secret key.  keep this really secret:app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'view rawgistfile1.py hosted with ❤ by GitHubFlask는 기본적으로 시큐어 쿠키(Secure Cookie)를 통해 세션을 구현하므로 길이에 제한이 있습니다. 때문에 파일이나 DB기반의 세션을 구현하려면 Beaker와 같은 프레임워크를 통한 확장이 필요합니다.(하지만 이 또한 매우 쉽습니다.)#스포카 #개발 #개발자 #개발팀 #인사이트 #기술스택 #꿀팁 #Flask
조회수 1019

아띠 #19. 자칭타칭 아띠 비주얼, 마린!

Story #19. 자칭타칭 아띠의 비주얼 담당하고 있는라이더 '마린'을 소개합니다 :)자기소개 부탁해전 마린이에요. 아띠의 비주얼을 담당하고 있죠!!(하하) 어떻게 아띠를 처음 들어오게 됐어?처음에 김난도 선생님의 <내 일>이라는 책을 보고 관심이 생겨서 인터넷에서 아띠를 찾아봤어. 아띠 블로그도 보고 페이스북 좋아요도 누르면서 찾아보는데, 신입 라이더 모집기간이 이미 끝났더라고. 그래서 엄청 아쉬워했었어!(웃음)  그때 내가 군인이어서 당장 어떻게 할 방법은 없어서 그냥 평상 생활을 하는데, 내가 어느새 맨날 아띠 이야기만 하고, 아띠만 찾아보고, 아띠에 대해서 애들한테 계속 설명을 하고 있더라고. 그래서 비록 내가 지금 군인이어서 함께 할 수는 없지만, 이런 마음을 IJ한테 전달하고 싶었어. 그래서 IJ의 용기에 대해서 존경심을 표하고, 나도 기회가 되면 하고 싶다는 내용으로 편지를 썼지. 한 달 동안 답장이 안오더라고!(웃음) IJ가 처음에 답장 안 하려고 했었는데, 권이 답장하라고 해서 한 달 만에 답장을 받았어. '편지 잘 받았고 전역하면 그때 보고, 건강하게 전역하라'고. 그리고 4월에 전역한다고 하니까 구글 지원서 주소를 보내줘서 작성하고, 합격 통지를 말년 휴가 때 받았어. 엄청 기뻤지. 그래서 나는 전역한다는 기쁨보다 아띠에서 일할 수 있다는 기쁨이 더 컸어. 그래서 전역하고 바로 서울로 올라 와서 첫 날 케빈이랑 면접 보고 찜질방에서 저녁 12시에 합격했다고 문자받고 너무 좋았지. 그러면서 점점 아띠에 미쳐갔지.(웃음) 어떤 점이 그렇게 좋았어?음, 좋아진 이유에 대해서는 생각해보지 않았는데 그냥 정말 자연스럽게 좋아하게 된 것 같아. 자연의 흐름이었어.(웃음) 내가 아띠인력거라는 게 있다는 소식을 접한 이후에는 이걸 무시할 수가 없었어. 무조건 하고 싶었어. 그냥 내 속에서 그렇게 시킨 것 같아. 이성적으로 생각하고 판단했던 일이 아니고, 가슴이 시키는 일이었어. 진짜 그랬어! 그때 IJ한테 편지 쓸 때가, 새벽에 잠을 자다가 인력거 타는 꿈을 꿔서 일어나서 편지를 쓴 거야!(웃음) 그 새벽에 일어나서 렌턴 키고, '지금 아띠 때문에 잠을 잘 수가 없다, 인력거가 머리에서 떠나질 않는다'고 그렇게 편지를 썼어.  그리고 내가 처음 들어갔을 때가 영상을 많이 찍는 시즌이어서 비디오도 많이 찍고 열심히 일을 할 수 있었지. 타이밍이 좋았어. 인력거를 타면 제일 좋은 점은?크게 보면 이 세상이고, 좁게 보면 북촌인 이 곳에서 지나가는 사람들이랑 이야기를 나눌 이유가 없잖아. 그런데 내가 인력거를 탔다는 이유만으로, 그 사람들이랑 이야기를 나누고 함께 인력거를 타고서 나중에 내릴 때는 서로 친구가 되는 게 너무 재미있어! 그리고 나중에는 영어 투어의 맛을 알았지. 한국에 처음 온 외국인들이 느끼는 설레는 감정도 느껴지고, 그 사람들한테 내가 도움을 줄 수 있다는 게 기분 좋더라고.  처음 들어왔을 때는 어땠어?사실 처음에 많이 놀랐어. 제일 처음엔 케빈의 압박 면접에 놀랐어. 면접 볼 때 다른 사람이랑 같이 봤는데, 왜 아띠를 하려고 하나라는 질문에 나는 '23년 살아오면서 처음으로 하고 싶은 일이다. 내가 이렇게 하고 싶으니 좀 뽑아달라'고 말했었거든. 그런데 옆이 있는 친구는 그냥 단순히 돈을 벌려는 개념으로 왔던 거야. 그래서 그 친구는 케빈한테 많이 깨졌었지. 그때 조금 충격을 받았어. 다른 한 번은 생각보다 소통이 잘 안됐다는 느낌을 받았던 적이 있어. 그때 내가 함께 하면서 아띠에 도움을 주고 싶었고, 안 좋은 점들은 고쳐나가고 싶다고 느꼈어. 그래서 주 5회로 고정하고 시작하게 됐지. 그래도 아띠만큼 좋은 사내 문화를 가지고 있는 곳은 없다고 생각해. 우리만의 규칙들이 있잖아. 그런 것들은 정말 좋고, 잘 가꿔나갈 필요성이 있는 것 같아. 그리고 아띠에는 경쟁이 없잖아. 어느 회사에 경쟁이 없겠어? 그런데 아띠는 누구 하나가 내가 매출을 적게 벌어왔다고 뭐라고 하는 사람도 없고, 남이 나보다 매출을 많이 벌어왔다고 해서 스스로가 못났다라고 생각할 필요도 전혀 없다고 생각해. 다른 라이더들도 그냥 쟤가 운이 좋았구나 라고 생각하고 넘기니까 그런 경쟁이 없는 문화가 좋은 것 같아. 제일 힘들었을 때는?정신적으로 가장 힘들었을 때는 이번에 추억 때 집에 내려가서 친척들이 모였을 때였어. 학교 잘 다니고 있냐는 질문에 휴학하고 아띠인력거 하고 있다고 대답하니까 다들 그냥 고개만 끄덕이는 분위기였어. 아무도 나를 이해해주지 않는 분위기였지.(웃음) 그때 정말 부모님한테 가장 미안하면서 힘들었어. 아띠 나오는 뉴스 보여드리니까 아버지가 그제서야 허락해주시고 응원해주셨었지만, 속으로는 많이 걱정하셨을 거야.  그리고 내가 추석 때 아띠에 예약이 너무 많아서 가족들이랑 끝까지 못 어울리고 일찍 올라왔거든. 아띠는 남들 쉴 때 일하는 서비스업이니까, 남들 쉴 때 못 쉬는 게 좀 힘들더라. 특히 추석 때 다른 가족들은 다같이 다니는 데, 우리 가족들은 부산에 다 있고 나는 부산에서 서울로 혼자 올라와서 있으니까 제일 힘들었지.  육체적으로 가장 힘들었을 때는 무릎이 안 좋을 때인데, 정말 좋은 손님을 태웠을 때는 내가 무릎이 아픈지도, 땀이 나는지도 몰라. 라이딩을 마치고 들어오면 그때 알지. 그런데 조금 무례한 손님을 만나거나 내가 하는 이야기에 관심도 없고 왜 인력거를 타는지 모르겠는 느낌을 주는 손님을 만나면 체력적으로 정말 힘들어. 인력거가 앞으로 안 나가는 기분이야. 시간도 안가고. 그런데 좋은 손님들 만나면 1시간, 2시간 정말 금방 가. 어떤 손님이 제일 기억에 남아?어떤 노부부가 있었어. 할아버지께서 오랜 투병생활을 하셨는데, 병원에서 큰 희망이 없으니 할아버지한테 무리하게 치료는 그만하고 집에서 잘 쉬시다가 편히 보내드리자는 결정이 아띠를 타러 오기 하루 전에 났었대. 할아버지는 말씀도 잘 못하시고 거동도 힘드신데, 따님들이 인력거 예약해서 타신 거야. 1시간 동안 투어를 하고나서 할머니는 반응을 보여주셨었는데 할아버지는 말씀도 없으시고 표정 변화도 없으셔서 '재미없으셨나'생각했었거든. 그런데 인력거 투어가 끝나고 할아버지를 내려드리는데, 내 손을 딱 잡으시면서 딸들이 가자고 하시는데 안 가시는 거야. 그러면서 할머니 가방을 손으로 툭툭 치면서 나한테 용돈을 주라고 그러시는 거야. 이미 투어 비용은 지불하셨었는데도 계속 내 손을 안 놓으시면서 안 가시더라고. 그래서 결국 감사하게도 용돈을 조금 받았었어. 그리고 한 일주일 뒤에 그 따님한테서 문자가 왔었어. 할아버지가 편안하게 돌아가셨다고. 그때 나 정말 울었어.  할아버지께서는 오랜 투병생활에 지치셨는데 마지막으로 세상 구경을 나랑 함께 하신 거야. 그때 느낀 게, 우리가 인력거 타면서 정말 많은 손님들을 만나는 만큼 대부분 같은 투어루트를 돌면서 조금 지칠 때가 있어. 그런데 손님에게는 일생에 한번 뿐일 수도 있는 인력거를 타는 기회이고, 누구에게는 생에 마지막으로 세상을 구경하는 기회이고, 어떤 어린 아이에게는 처음 북촌을 구경하는 기회인 거잖아. 그래서 '그런 한 순간, 한 순간을 그 사람한테 정말 헛되이 돌려주면 안되겠구나'라는 그런 생각이 들더라고. 그때 그 할아버지를 통해서 그리고 할아버지께서 너무 좋아하셨고 만족하셨고 고맙다고 하는 문자를 받으면서 많은 생각이 들었어. 정말 잊혀지지 않을 손님이야.  그래서 나는 아띠를 버릴 수가 없어!(웃음) 난 지금 내가 아띠에 많이 스며들었다고 생각해. 내 욕심인데, 내가 없으니까 아띠가 안 굴러갔으면 좋겠어! 내가 없는 아띠를 생각하기도 싫어.(웃음) 아띠가 즐거운 순간에 내가 항상 있었으면 좋겠어.  마지막으로 하고 싶은 말사실 지금 아일랜드로 6개월간 가는 건데 겁이 안나. 왜냐면 내가 지금 아띠를 6개월 했는데 6개월 전에 처음 서울 올라왔을 때 나한테 아무것도 없었어. 그런데 지금은 이렇게 같이 밥을 먹고, 같이 무언가를 하자고 얘기 해주고 이제 잠시 떠난다고 하니까 같이 이런 슬픔을 공유해주는 좋은 가족들이 생긴거야. 딱 6개월이었어.그래서 나는 아일랜드에 가서도 똑같을 거라고 생각해. 어딘가에 던져졌을 때도 버틸 수 있는 힘이 생긴 것 같아. 아무튼 지금 이렇게 처음부터 끝까지 함께 해주는게 아띠인 것처럼, 아띠는 나에게 너무 너무 소중해. 나 스스로도 자아가 성립되는 기간이었어. 나중에 되돌아보면 이렇게 즐겁게 많은 사람들을 만나고, 많은 에너지를 얻을 수 있었던 순간을 꼽으면 지금 요 근래 6개월일 거라고 생각해. 많이 생각날 꺼야, 아띠!자석에 이끌리는 것처럼, 상사병에 걸린 것처럼,아띠를 알게 된 순간부터 인력거와 사랑에 빠진 마린의 러브스토리였습니다!마린이 아띠를 많이 생각하듯, 아띠도 우리 간판 라이더 마린이 많이 생각나네요~ :)아일랜드에서도 마린답게 몸도 마음도 씩씩하게 잘 지내리라 믿습니다.건강히 돌아와 아띠와 다시 즐겁게 라이딩하길 바래봅니다!#아띠라이더스클럽 #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화 #사내문화

기업문화 엿볼 때, 더팀스

로그인

/