스토리 홈

인터뷰

피드

뉴스

조회수 5651

개발자가 되고픈 어린 친구들에게...

정말 즐겁고, 재미있어서 시작한 소프트웨어 개발. 하지만,  그렇게 재미있게 시작한 소프트웨어 개발과 관련된 활동이 일이 되는 순간. 가장 ‘지루하고 재미없는 일’이 될 수 있다는 것에 대해서 아는가?대부분의 소프트웨어 개발업(?)이라는 것이 정말 재미없고 지루할 수 있다는 것에 대해서 아는가?필자도 처음 컴퓨터를 국민학교(요즘 초등학교) 6학년 때부터 만지작거리면서 품었던 오래된 꿈은 ‘소프트웨어 개발’을 하면서도 생계를 유지할 수 있기를 바랐다. 이렇게 재미있는 세계에만 빠져서 살게 해 달라고 간절히 기도하면서, 프로의 세계에 들어왔다.물론, 재미있고 즐거운 일도 많았다. 밤을 새워가며 목표로 한 애플리케이션을 디자인하고 설계하고 구현하고 테스트하는 즐거운 삶이 이어졌다. 규모가 커지고, 프로젝트 리딩을 해보고, 정말 내가 만들고 싶은 소프트웨어를 만들기 위해서 사업이라는 것도 해봤다.사업을 홀라당 날려먹고, 막장이라고 불리는 SI현장에도 들어가 봤다. 역시, 대한민국의 SI현장은 녹녹한 곳이 아니었다. 그나마, 플랫폼을 만들고, 기술지원을 하는 팀에 들어갔음에도 불구하고, SI는 상상 이상의 모습들을 경험하게 했다.그때의 경험을 간접적으로 느껴보기 위해서는 다음의 3권의 책을 추천한다. 여유가 난다면 한 번쯤 읽어 보기 바란다. SI현장이나 기업의 소프트웨어가 망가지는 모습은 두 번째 책에 너덜하게 많이 묘사돼있다.소프트웨어 아키텍트가 알아야 할 97가지소프트웨어 누가 이렇게 개떡같이 만드는 거야?위대한 게임의 탄생재미있는 책이고, 재미있는 소프트웨어 개발 세상에 대해서 이야기를 하는 내용을 언급하고 있는 내용이다.‘소프트웨어 아키텍트가 알아야 할 97가지’는 40여 명의 경험이 풍부한 소프트웨어 아키텍트들이 소프트웨어를 개발하면서 느끼게 한 소프트웨어 아키텍처에 대한 자신의 생각과 충고에 대한 글들을 모아두었다. 재미있는 소프트웨어 개발과 자신의 기술적인 요소를 어떻게 적극적으로 활용하는 방법, 능력 있는 팀을 만드는 방법까지 능수능란하게 중요한 원칙들에 대해서 위트 있는 소재로 언급한 내용들이 서술되어 있다. 이 책은 소프트웨어 아키텍트에 도달한 달인들이 자신들의 생각과 경험을 통해서, 소프트웨어 개발의 밝은 측면을 보여준 것이라면.두 번째 ‘소프트웨어 누가 이렇게 개떡같이 만드는 거야?’라는 책은, 엄청난 비용과 시간을 투자하여 만든 보안시스템이 보안담당자에게 걸려온 전화 한 통에 의해서 무력화되는 어이없는 상황에 대해서 여과 없이 보여준다.세 번째 ‘위대한 게임의 탄생’이라는 책은, ‘유저를 행복하게 해줄 수 있는 게임은 불행한 개발자에게서 나오지 않는다’라는 말처럼, 1편과 2편의 매우 재미있고, 흥미로운 게임 개발의 세계에 대해서 보여주고 있다.1편은 주로 해외 게임들, 2편은 국내 게임 개발과 관련된 내용들로 재미있게 구성되어 있는데. 개인적으로 2편이 더 재미있고 흥미로웠다. 소프트웨어라는 것이 소프트웨어 개발자들 이외의 세계와 연결되어진 통로와 실제 생활들을 적나라하게 보여주는 아주 극과 극을 달리는 중요한 세 개의 서적이 되겠다. 전문가의 입장, 황당한 현실, 그리고. 멋진 개발의 모습.. 이 3권이면 소프트웨어 개발의 전체를 간단하게나마 소개할 수 있다고 본다.하지만, 실제, 현실의 소프트웨어 개발은 참으로 아주 지루하고 재미없고, 기계적인 반복 작업의 연속이다.재미있는 흥미요소들을 모두 제외하고, 무미건조한 프로세스로만 살펴보자. 그렇다면, 이런 재미없고, 반복적인 실제 소프트웨어 개발을 하는 방법과 절차만 남게 된다.소프트웨어 개발과정을  도식화하면 위의 그림과 같다. ‘정해진 명세’에 따라서, ‘지시된 설계’를 만들고, ‘구현’하고 ‘테스트’를 하는 과정을 무한 반복하는 것이 소프트웨어 개발을 포장 없이 표현한 것이다. 실제, 소프트웨어 개발의 환경은 이렇게 ‘무의미한 작업’의 계속된 반복 인지도 모른다.( 정말 재미요소를 빼면 그렇다. )필자도 ‘기업용 애플리케이션’을  만드는 데 있어서 이런 단순 반복적인 공정을 통하여 만들어진 산출물이 가장 효과적이라는 것에 대해서 부인하지 않는다. 대부분의 기업용 애플리케이션은 다양성과 창의성은 필요 없고, 구체적이고 확실한 결과물만을 원하는 경우가 많다.실제 그 도메인과 업무의 매력이 충분하게 느껴지지 않는다면, 소프트웨어 개발은 정말 지루하고 재미없는 일이 된다. 학생들이 소프트웨어 개발에 대해서 착각하는 여러 가지 이유 중의 하나가, 소프트웨어 개발은 정말 ‘창의적인’것을 요구하는 것이 많을 것 같다고 착각하는 것이다. ( 대부분의 국내 소프트웨어 개발은 ‘창의적인’것은 그다지 필요 없다. )물론, 사용자에 대한 고려, UX, 서비스의 풍부함을 연구하고 이를 구현하여 서비스를 자유롭게 발전시키는 식의 개발이 가능한 곳도 있으며, 이러한 환경에서 프로그래밍을 구사하고, 그것을 표현하는 일을 하는 사람들도 없는 것은 아니다. 하지만, 과연 그러한 일을 하는 사람이 얼마나 될 것인가? 특히, 대한민국에서?!!!새롭게 시작하는 후배들이여, 구로 디지털단지에서 오전에 출근하는 개발자들과 오후에 퇴근하는 개발자들을 전철역에 서서 바라보아라. 얼마나 척박한 개발자의 삶을 살고 있는지 생각해보라는 것이다.언제부턴가, 소프트웨어 개발자들의 전통적인 개발자 커뮤니티는 쇠퇴하기 시작했다. 과거에는 소프트웨어 개발자 커뮤니티를 보지 않고,  바라다보지 않고 있으면, 개발일을 못하던 시대가 있었다. 물론, 아직도 그러한 개발자 사회가 있기는 하다. 자바 개발자 커뮤니티는 여전히 튼실한 사용자 커뮤니티를 유지하고 있으나, 그밖에 커뮤니티들은 대부분 과거의 영광들을 모두 잊어버렸다.더 심각한 것은 ‘현재의 개발자들은 기술을 공유하고, 자신의 생각을 토론할 수 있을 만큼의 여유가 사라졌다는 점’이다. 지금, 구로디지털단지역에서 내리고 오르는 개발자들이 출퇴근 시간에 스마트폰을 가지고도 개발자 커뮤니티에 글을 올리거나 접속할 마음의 여유가 사라졌다는 것이 가장 슬픈지도 모르겠다. 물론, 이러한 개발자 커뮤니티에 의존하지 않더라도, 쉽게 정보를 찾을 수 있는 시대가 된 것도 또 하나의 원인인지 모르겠다. 하지만, 현재에도 매우 활성화된 개발자 커뮤니티들이 존재하고 있고, 왕성하게 활동한다. 그러한 왕성한 활동을 보이는 조직의 공통점이 몇 가지 있다.그것은 ‘신입/초보’에 대한 배려를 잊지 않고 있는 곳이다. 물론, 이러한 개념을 확대하면, 초보 사원들에 대한 ‘배려’를 잊지 않는 소프트웨어 개발자 기업이 최고의 기업이라 할 수 있겠다.잉여 개발과 독립 개발을 꿈꾸는 사람들이 스타트업을 시작하는 시대가 됐다.정말 개발일을 즐기고 싶다면, 차라리. 직업적인 프로그래머가 되지 않는 것이 방법이기도 하다. 아예, 독립 개발과 잉여 개발을 취미로 시작하면서, 자신의 독자적인 설루션을 찾거나 만드는 방법도 최고의 방법이다.굳이, 소프트웨어 개발을 회사에 입사해서 직업적인 관점에서 접근하는 것만이 최선의 시대가 되지 않았나 한다. 요 근래 뛰어난 개발자들을 보면, 전공을 소프트웨어 관련으로 공부하지 않고서도 전문가의 경지에 이른 사람들이 더 많아졌다.아이러니하게도 융합의 시대에 타 도매 임의 전문적인 지식을 가지고 소프트웨어 기술을 효과적으로 활용할 줄 아는 인재가 최고의 인재로 대우받는 시대가 된 것 아닌가 하다. ( 실제 필자의 주변에도 의사, 수의사 등 다른 전공을 했지만, 최고의 소프트웨어 엔지니어가 된 사람들이 부지기수이다. )이제, 각자 창업을 하거나, 개별적으로 자기가 하고 싶은 일이나 설루션, 서비스를 각자 알아서 개발하더라도, 이를 충분하게 홍보하고, 주변에서 활용할 수 있게 하는 다양한 서비스들이 매우 많이 생겨났다. 그래서, 소프트웨어 개발을 굳이 회사에 입사해서 할 필요가 없어진 것도 사실이다. 하지만, 소프트웨어 개발자가 되는 것과 창업을 하는 것은 완전 다른 영역이다.요리사가 요리만을 잘한다고 전문 레스토랑을 오픈하고 손님을 맞이할 수 있을까? 절대 그렇지 않다. 요리와 전문 레스토랑 경영은 사실상 다른 영역이고, 실제 산업계에 들어가 보더라도, 전문 경영인의 세계와 전문 요리의 세계는 완전하게 구분되어있다.물론, 드라마나 영화에서처럼 둘 다 잘하는 천재들이 실제 세계에도 가끔 존재하기는 하나, 말 그대로 그것은 소수의 타고난 천재들만 가능하다. ( 뭐, 실제 보면.. 정말 대단한 사람들을 볼 수 있다. )대부분의 요리사들처럼, 개발자들도 경영에는 빵점이거나 소질이 없는 경우가 많다. 창업의 세계는 완전하게 별개의 영역이므로, 나중에 다시 한번 소프트웨어 개발과 창업에 대해서 언급할 때에 따로 이야기를 하도록 해보자.소프트웨어 개발만 하고 싶어요. 학교 공부는 좀 적게 할 방법이 없나요?소프트웨어 개발을 하는 사람이, 글을 잘 쓰거나, 그림을 잘 보거나 이해하는 것들의 주변적인 지식이 필요 없을까? 아니다. 소프트웨어 개발을 제대로 멋지게 하려면 그러한 인문적인 지식이 오히려 남들과 다를 정도로 탁월하고 상식 또한 시야가 매우 넓어야 한다.필자가 아는 뛰어난 소프트웨어 개발자들 대부분이 특정 분야에서는 매니악을 넘어선 오타쿠 수준이고, 독서능력과 수학적인 능력, 거기에 어학적인 능력까지 탁월한 소프트웨어 개발자들이 더 멋지게 성장하는 모습을 많이 보아왔다. 오히려, 10대 때에 미치도록 다른 분야에서 탁월한 성과나 효과적인 지식들을 습득한 사람들이 더 뛰어난 개발자가 되는 것을 많이 보게 된 것이다. 그것은, 자신의 재능과 지식을 소프트웨어 개발이라는 매우 기능적인 것으로 통합한 것이기 때문이다. 소프트웨어 기술은 이렇게 ‘지식’과 ‘정보’를 자유롭게 다루는 기술이다. 그래서, ‘지식’과 ‘정보’가 없이는 아무리 뛰어난 소프트웨어 기술도 못 없는 망치일 뿐이다.하드웨어 개발도 결국, 소프트웨어 파워가 중요하다.SSD의 핵심은 낸드 플래시 메모리이다. 그리고, 그 낸드 플래시 메모리의 저장방법은 조금은 복잡하지만 쉽게 설명하면, 플로팅 게이트라 불리는 메모리 셀 구조에 있어서 전압을 가해서 전압이 낮으면 1, 전압이 높으면 0으로 할당하여 저장하는 방법이다. 전압을 상승하고 내려서 0, 1을 쓰는 방법을 사용해서 데이터를 저장한다. 그리고, 그 사이에 ‘절연막’을 통과하는데, 이 ‘절연막’이 손상되어지면 더 이상 쓰기 기능이 작동하지 않으므로, SSD의 수명이 종료되는 방법이다. ( 아주 자세한 내용을 정말 ~~ 간단하게 줄인 것이다. )현재는, 이 0, 1의 전압을 좀 더 세분화하여 3단계로 구분하는 방법까지 개발되었고, 이렇게  세분화하다 보니, 쓰기를  한 번 더 하는 방법을 통하여 유지하는 방법까지 개발되어서 2013년도 이후에는 좀 더 용량은 커지지만, 속도는 조금 떨어지는 방식의 SSD도 출시되었다.이러한, SSD의 핵심 또한 소프트웨어라고 볼 수 있다. 똑같은 하드웨어의 구조를 어떻게 소프트웨어로 구사하느냐가 그 절대적인 용량이나 속도를 비약적으로 증대시킬 수 있다.정말로 소프트웨어 공학적인 요소와 품질요소를 중요시 여기는 고품질의 영역이 필요한 항공기나 원전과 같은 곳의 중요한 컨트롤 소프트웨어들의 역할은 한두 줄로 설명할 수 있는 내용의 것들이 아니다. 말 그대로, 소프트웨어가 거의 전부나 다름없다.자동차도 이제는 거대한 소프트웨어 덩어리에 속한다. 소프트웨어 파워는 정말 대단하다.소프트웨어 개발자를 꿈꾸는 부모님들에게 한마디 하자면...필자도 대학교 2학년 큰아들 녀석을 둔 아이의 아빠입니다. 개인적으로는 소프트웨어 개발자가 되었으면 바람도 있고, 그 녀석의 어머니도 마찬가지 바람이었습니다. 정말, 소프트웨어 개발자의 미래가 충분하게 희망적이기 때문이죠.하지만, 큰아들 녀석은 '문예창작학과'로 진학했습니다. 프로그래머인 아빠에게는 큰 영향을 받지 않았나 봅니다. 하지만, 이렇게 글을 쓰는 아빠의 모습이 일부 영향을 주지 않았나 합니다.아이가 커가면서 프로그래머가 되라고 강요는 하지 않았습니다. 다만, 초등학교 시절에 정보처리 기능사 시험을 볼 정도로 개인적으로 가르치기는 했습니다. 처음에 정보처리 기능사 시험을 패스할 정도로 열의를 보이는 모습을 보여서 어린 녀석이 행렬을 풀어내는 것이 너무 좋았지만, 그 녀석이 나이를 먹고 나서 다시 물어보니.아빠랑 대화하고 같이 무언가를 하는 것 때문에 하는  척했다고 하더군요. 아빠의 과도한 욕심 맞습니다. 그래서, 요즘은 자기가 좋아하는 일을 하면서 살았으면 좋겠다는 생각을 하고 있습니다. 멋진 작가가 되기를 바랍니다.부모 된 입장으로써 아이가 ‘행복’하기를 바란다는 것은, 타인에게 존중과 인정을 받는 삶을 만들어주는 것이라고 생각합니다. 물론, 돈도 어느 정도 필요한 일이겠지만요. 부모 된 입장으로써 아이에게 조언을 해주는 것은 포기하면  안 됩니다. 최소한, 아이가 행복하게 어떤 일을 선택할 수 있게 하는 것 까지는 해줘야 할 것이라고 생각합니다.분명, 대한민국 IT의 불합리한 글과 미래에 대한 수많은 이야기들이 주변에 많이 이야기되고 있는 것은 알고 있습니다. 하지만, 이미 전 세계적으로 소프트웨어 개발자는 최고의 직업이며, 앞으로도 더욱더 중요한 역할을 담당할 것으로 믿어 의심치 않고 있습니다.이미, IT기술은 모든 비즈니스의 중심적인 역할을 담당하고 있고, 빅데이터라는 새로운 개념은 비즈니스의 기회까지도 IT를 통해서 만들어 나간다고 할 정도로, 소프트웨어의 세계는 매우 미래지향적인 직업입니다.다만, 대한민국의 대부분의 소프트웨어 개발자들의 2/3 정도는 일반적이고 ‘따분하고’, ‘지루한’, 기업용 소프트웨어를 개발하는 직업에 종사하고 있습니다. 하지만, 이런 일은 계속 줄어들 것이며, 향후 정말 자동화되거나 패키지 시장으로 진입하는 시대가 올 것입니다. 냉정하게 꿈꾸는 자가 이야기하자면, ‘SI 서비스업’은 결코, 우리가 이야기하는 IT나 소프트웨어 개발자들을 표현할 수 있는 세계가 아닙니다. 말 그대로 ‘인력 중심의 서비스업’ 일 뿐이죠.과거의 전산화 소프트웨어들이 단지 효율성을 높이기 위한 도구였다면, 현재의 소프트웨어들은 인간의 삶과 질을 향상하기 위한 소프트웨어들로 발전하고 있다는 것을 말하고 싶다는 점입니다.제대로 된 소프트웨어 개발자가 되려면 무엇을 공부해야 하는가?최소한 제 주변에 있는 고급 개발자들이 동의하는 첫 번째는 바로 ‘소프트웨어 이론’이 정립되어진 사람입니다. 자료구조라고 이야기하는 소프트웨어와 관련된 기초이론이 튼튼해야 한다는 것이 그 첫 번째 일 것입니다. 아무리 빠르게 변하는 소프트웨어의 세계이지만, 기본적인 기초이론은 아마도, 변하지 않을 것입니다.둘째는 오픈소스와 같은 개발 커뮤니티에서 공동으로 꿈을 꾸는 그 무언가를 한번 만들어 보는 것입니다. 이는, 적극적으로 무언가를 위해서 자신의 시간을 투자하고 ‘잉여’를 제대로 활용할 줄 아는 사람으로 변화하게 합니다. 적극적인 자신의 모습이 변화되는 모습을 느끼게  될 것입니다.마지막 세 번째는 폭넓은 상식과 인문학적인 개념입니다. 이제, 소프트웨어는 사람과 사람을 이해하지 못하면, 제대로 그 무언가, 어떤 서비스를 제대로 구현하지 못하는 시대가 되었습니다. 이제는, 세상의 새로운 가치를 창출하거나, 사람들이 즐거워할 그 무언가를 위해서 자신의 ‘잉여’를 풀 줄 아는 사람이 최고의 인재로 대우받는 세상입니다.특히, 마지막 세 번째는 이제 막 중/고등학교를 다니거나, 소프트웨어 개발에 눈을 뜬 어린 개발자들에게 꼭 하고 싶은 말이기도 합니다. 이제, 소프트웨어 개발은 ‘인문학’적인 소양이 없으면, 더욱 성장할 수 없는 시대가 되었고, 필자가 예전에 꿈꾸었던 소프트웨어 개발을 꿈꾸던 시대와는 조금은 다른 세상이 된 것입니다.필자가 소프트웨어 개발을 꿈꾸던 시대에는 인문학적인 소양이 없어도, 오로지 컴퓨터 소프트웨어 언어만 익숙하면, 소프트웨어 개발이 가능한 정말 낭만적인 시대였습니다. 왜냐하면, 당시의 소프트웨어 개발의 대부분은 지루하고 재미없는 기업용 소프트웨어의 개발이 대부분이던 시대였으니까요.하지만, 현재는 그렇지 않습니다. 개발은 쉬워지고, 더 다양한 디바이스와 커넥티드 되는 센서 기술들도 우리 주변의 사물들과 소통하는 시대가 되었습니다. 물건과 정보, 가치들을 제대로 이해해야만 소프트웨어를 정말 잘 만들 수 있는 시대가 된 것입니다.그래서, 현재의 어린 개발자분들은 좀 더, 인문학적인 소양도 같이 끌어올려야만, 제대로 된 소프트웨어 개발이 가능할 것입니다. 물론, 여기서 이야기하는 '인문학적'인 내용이란 인간, 사회, 제도, 법, 윤리 등을 이야기하는 것입니다. 모두, 학교에서 기본적인 것들을 가르치고 있죠.그리고, 회사와 동아리의 차이점에 대해서 알아야 합니다.소프트웨어 개발자들의 세계는 생각보다 오픈되어 있을 것 같지만, 실제 사회에 들어와 보면, 그렇지 않다는 것을 처음 느끼는 순간 매우 큰 좌절에 빠지기도 한다. 안타깝지만. 회사 동료들 사이에서는 적절한 거리를 유지하는 것을 배워야 하는 것을 알아야 한다.학교 때의 동아리의 선배처럼 인정으로 이끌어주는 환상은 말 그대로 환상일 뿐이다. 회사라는 조직에서는 ‘이윤추구’라는  절체절명의 명제를 실현해야 하기 때문에, 다른 사람의 아이디어나 성과를 집어삼키는 경우는 너무도 많다, 아니. 거의 대부분이라고 해야 맞을 것이다.물론, 그런 식의 아귀다툼과 같은 회사는 잘 발전도 못하고, 비전도 없는 회사가 되기 때문에 만일 그러한 회사에 승선(?)한다고 하면, 빨리... 그 배를 버리는 것이 아주 현명할 것이다. 대부분의 국내의 기업에서는 내가 가진 스킬과 리소스를 오픈하지 않고 꽁꽁 숨겨두는 스킬을 발휘해야 하는 회사에 가야 할 것인지도 모른다. 그리고, 개발자 직업이 가지고 있는 고충에 대해서도 심도 있게 고민해야 합니다.이제는 평생직장이 아니라, 평생 직업만이 존재하는 세상이 되었다는 것, 정말로, 사람들이 바라는 자유로우면서도 돈을 많이 주는 자리는 존재하지 않는다는 것이다.개발자! 소프트웨어 개발자!나이 40을 넘겨보니, 소프트웨어 개발 이외에도 정말 많은 것을 공부하고, 알게 되었을 때에 더 깊고 재미있는 세계를 알게 한 것이 소프트웨어 개발의 세계였다는 생각을 해본다. 보통 소프트웨어 개발에 눈을 뜬 젊고도 어린 개발자들은 특정 전문적인 분야나 스킬에 집중해서 그 부분만을 미친 듯이 파고드는 경향이 간혹 있다. 물론, 필자도 그런 경향이었다.정말 즐겁게 이 소프트웨어 개발일을 하고 싶다면, 폭넓은 시야와 지식을 갖추는 것이 최선이며 최고의 길이라는 것을 깨닫기까지는 20년이라는 세월이 훌쩍 지났는지도 모르겠다. 그리고, 아무리 한 분야만 집중하는 개발자라고 하더라도 몇 가지 경험을 꼭 해봤으면 좋겠다.하나. 전문화된 영역이 아니라 전체 영역으로 소프트웨어 개발을 살펴볼 수 있는 틀이 갖추어진 정형화된 기업( 보통, 큰 기업에서 이런 현상을 대부분 가진다. )보다는 아직, 그 틀이 많이 갖추어지지 않은 기업에서 자신의 역량으로 그 틈을 메워보려 하는 것.둘. 신입 때에 100만 원의 급여를 따라다니다 보면, 냉정하게 10년 20년 후에 1천만 원 이상의 손해를 보는 것이 신입 때의 잘못된 선택이다. 언제나, 자신을 대우해주고, 자신을 존중해주는 기업을 찾으라는 것이다.셋. 소프트웨어 개발자는 게으르다. 그래서, 언제나 자동화를 하려 한다. 하지만, 이러한 자동화라는 측면은 사람의 능력을 확장시키는 자동화라고 생각한다. 계속적으로 발전 가능성이 있는 자동화이지, 사람을  기계화시키는 자동화라는 개념이 아니라는 것이다.넷. 행복을 찾으라는 것이다. 아무리, 소프트웨어 개발이 좋다고 하더라도, 가족. 사람만 하겠느냐는 것이다. 우리가 아무리 ‘돈’을 받고 무언가를 만들어주는 ‘공돌이’의 역할만을 한다고 하더라도. 나의 행복과 타인의 행복, 그리고. 내가 만든 소프트웨어를 통해서 사람들이 행복을 얻을 수 있게 하는 것이.. 소프트웨어 개발자로서의 최고의 행복이 아닐까? 개인적으로 ‘게임’ 업체에 있는 친구에게 가끔 하는 이야기가 그것이다. ‘마약’ 장수가 되지 말고, ‘즐거움’을 줄 수 있는 게임을 만들라고 이야기한다. 필자도, 과거에 작은 실수로 ‘온라인 포커 게임’과 같은 소프트웨어를 만들라고 지시한 적이 있다. 다, 무식함(!) 때문이다.소프트웨어 개발자는 ‘즐거움’은 만들어도, ‘마약 장수’가 되면  안 된다.세상이 자본주의가 극단적으로 변해가고, ‘돈’을 선택할  수밖에 없는 삶을 살아가야 한다고 하지만, 내가 만드는 소프트웨어가 그런 억압의 수단이거나 ‘불법’적인 수단이 되는 것은 피해야 하지 않을까?아무 생각 없이 온라인 도박 사이트를 만들고, 마약과도 같은 불법적인 소프트웨어를 만드는 소프트웨어 개발자들이 후배들 중에는 생겨나지 않기를 바란다. 물론, 우리가 만들고 있는 소프트웨어는 자본주의를 가속화한다는 것은 이미 어쩔 수 없는 일이라고 하지만, 소프트웨어 개발자들은 잊어서는 안된다. 우리는 언제나 사람을 생각하고, 사람을 지향하는 소프트웨어를 만들고 있음을.그리고, 내가 행복한 만큼, 다른 사람도 행복할 수 있는 소프트웨어를 만드는 것만이 진정한 소프트웨어 개발자가 되는 한걸음 한걸음 아닐까?마지막으로, 꿈꾸는 자가 ‘인재를 구 할 때에 사용하는 말’로 끝맺음을 하겠다.‘소프트웨어 개발에 있어 '창의력'을 만들기 위해서는, 적절한 '잉여'가 필요하다고 생각합니다. 그리고, 적절한 보상과 비전이 같이 있어야죠. 프로젝트에 헌신한다는 것은 매우 어려운 일이니까요. 대부분의 소프트웨어 개발은 계획대로 되는 것이 아니라는 것을 잘 알 수 있습니다. 소프트웨어 개발자의 최고의 인재상은 잉여를 부여하면, 무언가를 도전할 수 있는 생각을 가진 사람입니다. 소프트웨어 개발은 그런 잉여를 바탕으로 완성되는 것이라고 생각하니까요.이 글을 읽는 당신께서 소프트웨어 기술도 있고, 성격까지 좋은 사람이라면 정말 좋겠습니다. 만일 그러신 분이 소프트웨어 개발자로 성장하신다면 그에 대한 충분한 보상을 다짐할 수 있는 조직이나 단체, 회사는 손쉽게 찾으실 것입니다. 정말입니다.그리고, 소프트웨어 개발회사가 꿈꾸는 인재는 그렇습니다. 가끔은 푸른 하늘을 보러 농땡이 치러가자고 팀장을 꼬드기는 그런 재미있는 동료들이 있는 그런 곳이면 좋겠습니다. 아무리, 소프트웨어 개발이 좋다고 하더라도. 푸른 하늘만 할까요? 그런 마음의 여유가 넘치는 소프트웨어 개발자가 되시고, 그런 회사와 조직을 만드십시오.소프트웨어 개발을 통해서 맹목적인 목표나 아주 거창한 세계 정복 계획은 세우지 않고 있지만, 재미있고. 인간사회에 도움이 되는 그런 서비스를 개발하고 싶어서 모인 집단(?)을 찾으십시오. 그런 사람들과 무언가 끄적거리며 도전해보실 그런 뜨끈한 마음을 가진 개발자를 이 늘었으면 좋겠습니다.충분한 능력에 어울리는 대우를 받는 시대, 그것이 소프트웨어 개발자의 미래입니다. 약속합니다. 뭐, 가끔은 팀워크가 좀 불성실해도, 내가 맡은 일은 책임질 수 있는 자신감이 있는, 비딱한 개발자도 좋습니다. 능력 없는 것보다는 성격이 약간 불완전한 것도 그 사람의 개성이니까요. 우리 모두 그런 소프트웨어 개발자가 되어서 실무에서 일하면서 만나면 웃음 한번 지을 수 있는 사람들이 되었으면 합니다.
조회수 1591

PyCon2017 첫번째날 후기

아침에 느지막이 일어났다. 어제 회사일로 피곤하기도 했지만 왠지 컨디션이 좋은 상태로 발표를 하러 가야지!라는 생각 때문에 깼던 잠을 다시 청했던것 같다. 일어나 아침식사를 하고 아이 둘과 와이프를 두고 집을 나섰다. 작년 파이콘에는 참가해서 티셔츠만 받고 아이들과 함께 그 옆에 있는 유아교육전을 갔었기에 이번에는 한참 전부터 와이프에게 양해를 구해둔 터였다.코엑스에 도착해서 파이콘 행사장으로 가까이 가면 갈수록 백팩을 메고, 면바지를 입고, 영어 글자가 쓰인 티셔츠를 입은 사람의 비율이 높아지는 것으로 보아 내가 제대로 찾아가고 있구나 라는 생각이 들었다.늦게 왔더니 한산하다.지난번에는 입구에서 에코백과 가방을 나눠줬던 것 같은데 이번에는 2층에서 나눠준다고 한다. 1층이 아무래도 복잡해지니 그런 것 같기도 하고, 2층에서 열리는 이벤트들에도 좀 더 관심을 가져줬으면 하는 것 같기도 하다. 우선 스피커 옷을 받고 싶어서 (솔직히 입고 다니고 싶어서) 2층에 있는 스피커방에 들어갔다.허락 받지 않고 사진찍기가 좀 그래서 옆방을 찍었다첫 번째 키노트는 놓쳤지만 두 번째 키노트는 꼭 듣고 싶었기에 간단히 인사만 하고 티셔츠를 들고 나왔다. (외국에서 오신 연사분과 영어로 대화를 나누고 있어서 자리를 피한것은 아니다.) 나가는 길에 보니 영코더(초등학교 5학년 부터 고등학생 까지 파이썬 교육을 하는 프로그램)을 진행하고 있었다. 의미있는 시도를 하고 있다는 생각이 들었다.이 친구들 2년 뒤에 나보다 잘할지도 모른다.키노트 발표장에 갔더니 아웃사이더님이 뒤에 서 게셨다. 지난 파이콘 때 뵙고 이번에 다시 뵈었으니 파이콘이 사람들을 이어주는 역할을 하는구나 싶었다.키노트에서는 현우 님의 노잼, 빅잼 발표 분석 이야기를 들을 수 있었다. 그리고 발표를 통해 괜히 이것저것 알려줘야만 할 것 같아 발표가 부담스러워지는 것 같다는 이야기를 들었다. 나 또한 뭔가 하나라도 지식을 전달해야 한다는 압박감을 느끼고 있었던 터라 현우 님의 키노트 발표를 듣고 나니 좀 더 오늘을 즐겨야겠다는 생각이 들었다.오늘은 재미있었습니다!현우님 키노트를 듣고 같은 시간(1시)에 발표를 하시는 경업님과 이한님 그리고 내일 발표이신 대명님, 파이콘 준비위원회를 하고 계신 연태님과 함께 식사를 하러 갔다. 가는 길에 두숟갈 스터디를 함께 하고 계신 현주님과 희진 님도 함께했다. 사실 이번에는 발표자도 티켓을 사야 한다고 해서 조금 삐져 있었는데 양일 점심 쿠폰을 주신다고 해서 삐진 마음이 눈 녹듯이 사라졌다.부담 부담식사를 하고 발표를 할 101방으로 들어가 봤다. 아직 아무도 없는 방이라 그런지 괜히 긴장감이 더 생기는 느낌이다. 발표 자료를 열어 처음부터 끝까지를 한번 넘겨 보고 다시 닫았다. 처음에는 가장 첫 발표라 불만이었는데 생각해보니 발표를 빨리 마치고 즐기는 게 훨씬 좋겠다는 생각이 들었다. 발표 자료를 다듬을까 하다가 집중이 되지 않아 밖으로 나갔다. “열린 공간” 현황판에 충동적으로 포스트잇을 하나 붙이고 왔다. 어차피 발표는 나중에 온라인으로도 볼 수 있으니까 사람들과 이야기를 나눠 봐야 겠다 싶었다. (내 발표에는 사람이 많이 왔으면 하면서도, 다른 사람의 발표는 온라인으로 보겠다는 이기적인 생각이라니..)진짜 궁금하긴 합니다다시 발표장으로 돌아왔다. 왠지 모르는 분들은 괜찮은데 아는 분들이 발표장에 와 계시니 괜히 더 불안하다. 다른 분들은 발표자료에 짤방도 많이 넣으셨던데.. 나는 짤방도 없는 노잼 발표인데.. 어찌해야 하나. 하지만 시간은 다가오고 발표를 시작했다.얼굴이 반짝 반짝리허설을 할 때 22분 정도 시간이 걸렸던 터라 조금 당겨서 진행을 했더니 발표를 거의 20분에 맞춰서 끝냈다. 그 뒤에 몇몇 분이 오셔서 질문을 해주셨다. 어리버리 대답을 한 것 같다. 여하튼 내 발표를 찾아오신 분들께 도움이 되었기를. 그리고 앞으로 좀 더 정확한 계산을 하시기를.대단히 발표 준비를 많이 하지도 못하면서 마음에 부담만 쌓아두고 있는 상황이었는데, 발표가 끝나니 아주 홀가분한 마음이 되었다. 발표장을 나가서 이제 부스를 돌아보기 시작했다. 매해 참여해 주고 계신 스마트스터디도 보이고 (정말 안 받고 싶은 ‘기술부채’도 받고 말았다.) 쿠팡, 레진 등 친숙한 회사들이 많이 보였다. 내년에는 우리 회사도 돈을 많이 벌어 여기에 부스를 내고 재미있는 이벤트를 하면 좋겠다는 생각이 들었다.부스를 돌아다니다가 이제 파이콘의 명물이 된 내 이름 찾기를 시작했다. 이름을 찾기가 쉽지가 않다. 매년 참여자가 늘어나서 올해는 거의 2000명에 다다른다고 하니 파이썬 커뮤니티의 성장이 놀랍다. 10년 전에 파이썬을 쓸 때에는 그리고 첫 번째 한국 파이콘이 열릴 때만 해도 꽤 마이너 한 느낌이었는데, 이제 주류가 된 것 같아 내 마음이 다 뿌듯하다. (그리고 내 밥줄이 이어질 수 있는 것 같아 역시 기쁘다)어디 한번 찾아보시라다음으로는 박영우님의 "Django admin site를 커스텀하여 적극적으로 활용하기” 발표를 들으러 갔다. (짧은 발표를 좋아한다.) 알고 있었던 것도 있었지만 커스텀이 가능한지 몰랐던 것들도 있어서 몇 개의 기능들을 킵해 두었다. 역시 컨퍼런스에 오면 내게 필요한 ‘새로운 것’에 대한 실마리를 주워가는 재미가 있다.익숙하다고 생각했지만 모르는것이 많다4시가 되어 OST(Open Space Talk)를 하기로 한 208B 방으로 조금 일찍 갔다. 주제가 뭐였는지는 잘 모르겠는데 주식 투자, Tensor Flow, 비트코인, 머신러닝 등등의 이야기들이 오가고 있었다. 4시가 되어 내가 정한 주제에 대해 관심 있는 사람들이 모였다. 괜히 모일 사람도 없는데 큰방을 잡은 것이 아닐까 하고 생각하고 있었는데, 생각보다 많은 분들이 오셨다.각 회사들이 어떤 도구를 사용하는지 설문조사도 해보고, 또 어떤 개발 방법론을 사용하는지, 코드 리뷰, QA는 어떻게 하고 있는지에 대한 이야기를 나눴다. 다양한 회사에서 다양한 일을 하는 사람들이 모여 있다 보니 생각보다 꽤 재미있게 논의가 진행되었다. 사실 내가 뭔가 말을 많이 해야 할 줄 알았는데, 이야기하고 싶은 분들이 많이 있어서 진행을 하는 역할만 하면 되었다. 마지막으로는 “우리 회사에서 잘 사용하고 있어서 다른 회사에도 추천해 주고 싶은 것”을 주제로 몇 가지 추천을 받은 것도 재미가 있었다.열심히 오간 대화를 적어두긴 했다5시에 OST를 마치고는 바로 집으로 돌아왔다. 오늘 저녁에 아이들을 잘 돌보고 집 청소도 열심히 해두어야 내일 파이콘에 참여할 수 있기 때문이다. 기대된다. 내일의 파이콘도.그리고 정말 감사드린다. 파이콘을 준비해주시고 운영해주고 계신 많은 분들께.#8퍼센트 #에잇퍼센트 #개발자 #개발 #파이썬 #Python #파이콘 #Pycon #이벤트참여 #참여후기 #후기
조회수 946

옐로모바일 창업가 모임 옐로프러너스 데이에 다녀오다

Y의 현장 스케치며칠 전 김현영 CYO와 함께 옐로모바일 창업가들이 한 자리에 모이는 ‘옐로프러너스 데이 (Yellopreneurs Day)’에 대해 이야기를 나눠보았는데요, 이런 중요한 행사를 놓칠 수 없겠죠?저 Y가 직접 현장을 찾았습니다!                                         선릉에 위치한 디캠프제 3회 옐로프러너스 데이는 햇살이 따뜻했던 지난 화요일 오후, 선릉에 위치한 디캠프에서 열렸습니다! 디캠프는 창업 생태계 활성화를 위해 예비 창업자와 스타트업에게 작업공간을 제공하고 다양한 교육 프로그램 및 행사를 진행하고 있습니다.6층 다목적 홀로 올라가보니 일찌감치 도착한 대표들이 이름표와 기념품을 받아 행사장 안으로 들어가고 있었습니다.                              축사하는 김광현 디캠프 센터장김광현 디캠프 센터장의 축사로 시작된 옐로프러너스 데이!김광현 센터장은 창업 생태계에서 스타가 나와야 한다며 그 역할을 옐로모바일이 해 줬으면 좋겠다는 말로 옐로 창업가들을 응원해주셨습니다.                             2.0시대로의 진입을 발표하는 이상혁 옐로모바일 대표그 후에는 옐로모바일 이상혁 대표가 많은 옐로 대표들이 궁금해했던 질문들을 취합하여 진솔하고 담백하게 설명하기도 하고, 옐로가 새로이 2.0 시대로 진입하기 위한 앞으로의 방향성 등에 대해 발표하는 시간을 가졌습니다.이상혁 대표는 옐로모바일2.0 시대를 ‘모바일 패러다임을 이끌기 위해 연합했던 준비기간을 지나 수익성을 강화, 경영체제 효율화, 시너지 극대화 등의 키워드를 바탕으로 한 도약기’라고 설명했습니다.                                            경청하는 옐로프러너들                                     발표 중인 신창균 퓨쳐스트림네트웍스 대표우연히 옐로프러너스 데이 당일 상장 예비 심사를 청구한 퓨쳐스트림네트웍스의 신창균 대표가 모든 기업가들 앞에서 축하를 받는 시간을 가졌는데요, 그는 그 동안 기업의 성장단계를 모두 겪어본 경험을 미루어보아 옐로모바일도 그 과정에 있다고 설명했습니다.또 옐로모바일이 다음 단계로 나아가기 위해서는 함께 하고 있는 창업가들의 지속적인 상호 신뢰가 가장 기본이 되어야 할 것이라고 강조하기도 했습니다.다양한 이야기에 시간가는 줄 모르고 빠져있다 보니 어느새 네트워킹 시간이 다가왔습니다!많은 창업가 분들은 맛있는 식사와 함께 삼삼오오 모여 서로 교류하고 소통하며 즐거운 시간을 보냈습니다!앞으로도 옐로 창업가들이 한자리에 모여 회사의 방향성과 비전을 공유하고 논의하는 옐로프러너스 데이는 계속될 것입니다. 지난 날의 시행착오로 얻은 배움을 갈고 닦아 회사가 더 나은 방향으로 발전할 수 있게 서로 응원하며 앞으로 전진하는 옐로모바일을 기대하며, 오늘의 현장 스케치를 마치겠습니다. Y였습니다 :)비하인드컷!                                             Go Yello!                            핫도그에 행복해진 이상혁 대표                              즐거운 시간을 보내고 있는 옐로프러너들
조회수 597

새해에도 사회공헌 열풍이 계속된다

- 현중특전동지회 '물품 기증 행사' 사회공헌 열풍이 거셌던 2018년인데요. 기해년(己亥年) 새해도 불우이웃을 향한 사랑이 벌써부터 뜨겁습니다. 현중특전동지회가 지난 1월 10일 방어진노인복지관을 찾아, ‘독거노인을 위한 물품기증 행사’를 가졌습니다.이들은 독거노인들이 따뜻한 겨울을 보냈으면 하는 마음으로 쌀, 라면 등 30만원 상당의 물품을 전달했어요. 현중특전동지회는 현대중공업 직원들 가운데 특전사 출신들이 모인 사내 봉사단체입니다.특전동지회는 지난 2005년부터 연 10회씩 수중 정화활동을 펼치는 것으로 유명한데요. 한번 나설 때마다 바다 속에서 4톤가량의 쓰레기를 수거하고 있어요. 이웃들을 배려하고 사랑하는 이들이야말로 진짜 사나이가 아닐까요?   현대건설기계도 연말 연시를 맞아, 사랑의 연탄 나눔행사에 나섰습니다. 현대건설기계 신입사원 10여명은 충북 음성군 관내 독거노인 15가구에 연탄 3천750장을 전달하며 따뜻한 온정을 나눴는데요.이번에 전달한 사랑의 연탄은 현대건설기계 직원들이 지난 2018년 연초부터 진행한 사랑의 동전 모으기 행사를 통해 마련됐습니다.봉사활동에 참여한 현대건설기계 최문후 사원은 “이번 봉사활동을 통해 주위 어려운 환경에서 생활하는 노인 분들이 아직도 많다는 걸 알게 됐다”며, “잠시나마 어르신들의 밝은 표정을 보는 보람의 시간이 됐다”고 말했습니다.  현대건설기계는 설, 추석 등 명절이면 어르신들께 위문품을 전달하고 있는데요.이처럼 현대중공업그룹 사우들이 소속을 막론하고 지속적으로 소외이웃들에게 사랑의 손길을 전하며, 함께 사는 지역사회를 만들어가고 있습니다.#현대중공업 #기업문화 #기업봉사 #연말봉사 #조직문화 #직무정보 #공채정보 #사회공헌 #CSR활동
조회수 1008

FBA(Fulfillment By Amazon)

안녕하세요 대한민국 셀러들의 성공적인 아마존 진출을 도와주는 컨설팅 회사이자 대행사인 컨택틱의 이이삭 대표입니다.오늘의 주제는 아마존에서 가장 중요한 FBA 서비스입니다. 입문 과정의 포스트를 읽지 않으신 분들은 꼭 보고 오시길 추천드립니다. 가장 중요한 개념일 뿐만 아니라, 정책적으로 가장 많이 바뀌고 있는 서비스이기 때문에, 여러분이 FBA의 발달 과정을 큰 그림에서 볼 수 있어야 조금 더 능동적인 판매를 할 수 있을 것입니다.FBA를 아마존의 배송대행 서비스 정도로 이해하시는 분들이 많겠지만, 우리는 Fulfillment라는 표현에 집중할 필요가 있습니다. 보통 직구를 하실 때, 배송 정도에 따라 상태(Status)가 단계적으로 표시되는데, 이때 ‘완료’ 되었다는 의미로서 ‘Fulfilled’라는 표현이 주로 쓰입니다. 근데 영어에서 ‘Fulfill’은 동사로서 보통 ‘성취하다, 충분히 발휘하다’ 이런 의미가 있는데요, 아마존의 FBA 서비스는 배송의 시작부터 끝까지, 배송 이후의 Q&A와 클레임까지 관리한다는 점에서 ‘Fulfillment’의 의미를 극대화된 케이스라고 이해하시면 되겠습니다.반면, 아마존에는 FBM 서비스도 존재하는데요. 이때의 배송 주체는 Amazon이 아니라, Merchant가 되는 것이고, 셀러께서 직접 배송 책임을 갖는 시스템입니다. FBM은, FBA 서비스를 이용했을 때의 배송대행 수수료를 절약할 수 있고, 소규모 판매를 하고 계신 개인사업자에게 적합하다는 게 일반적인 사실입니다.하지만, 이제 FBA는 선택이 아닌 필수가 되고 있습니다. 아마존이 폭발적으로 성장한 계기는 여러 가지 요인이 있지만, 그중 큰 역할을 한 게 바로 Prime membership입니다. 전 세계 1억 명의 소비자가 프라임이라는 연회비를 내면서 아마존의 ‘충성 고객’으로 쇼핑하고 있습니다. 전 세계 각지에서 배송된 물품을 미국 전역에 위치한 아마존 창고에 분류하고 소비자의 문 앞까지 도달하는 총 시간을 2-3일로 단축시킬 뿐만 아니라, 이런 엄청난 속도의 배송을 ‘연간 내내 무료’로 이용할 수 있게 되자, 미국 소비자들은 열광할 수밖에 없게 된 것이죠. 쿠팡에서 출혈 경쟁을 마다하지 않고 로켓 배송에 집중하면서 유료 연회원제도를 통해 사업모델을 확장하려는 것도 비슷한 맥락에서 비롯된 것입니다. 즉, 아마존 고객들은 상품 리스팅에 ‘FBA’라는 표현이 없는 상품은 애초에 구매 리스트에 넣는 것을 고려하지도 않을 것입니다. 미국에 지인이 있는 분들께서는, 제 말이 과장이 아니라는 것을 단번에 이해하실 겁니다. 소비자는 배송이 불편하고, 오래 걸리면 사지 않습니다. 어차피 이 제품을 구매하던 저 제품을 구매하던 대부분의 제품은 비슷하기 때문입니다.그러나, FBA가 반드시 정답은 아닙니다. 당연히, 아마존이 배송부터 사후 서비스까지 대행해주면, 그 서비스의 대가로 수수료를 요구하게 되겠죠. 따라서, 이때의 수수료와 본인이 직접 배송을 진행했을 때의 비용을 고려하시어, 손익분기점(BEP, Break Even Point)을 달성하는 가격을 산출하신 다음에 더 적합한 서비스를 선택하셔야 합니다. 그렇다면 언제 FBM 또는 FBA로 판매하는 게 적합할까요?가격 측면에서 제품이 초저가이거나 초고가인 경우, FBM을 추천드립니다. 우선 고가의 제품에 대해서 말씀드리겠습니다. 고가의 제품 경우, 대량 매입 후 FBA 창고에 보관했을 때의 경제적 부담(원가)이 큽니다. 하지만 이것만이 문제는 아닙니다. FBA는 단순 배송뿐만 아니라 반품, 교환, 환불까지도 관리를 대신하는 것이기 때문에 고객 반품에 대한 컨트롤마저도 없어지는 것이 추가적인 문제입니다. 고가 상품의 경우, 무작정 반품을 다 받아주면 로스(loss)가 클 수밖에 없습니다. 미국이라는 나라 자체가 굉장히 소비자 친화적임을 감안하더라도, 아마존은 상당히 소비자들에게 유리한 정책이 많습니다. 이는 곧, 공급자인 판매자에게, 그리고 특히나 고가의 제품을 판매하는 판매자들에게는 유난히 불리할 수 있다는 얘기가 되겠죠.반대로, 초저가 상품 경우에도 FBM 판매 방식을 권장하는 이유는 FBA 수수료가 제품의 무게와 부피에 따라 적용되는 “Fixed Price’ 시스템에 따라 적용되기 때문입니다. 쉬운 예를 드리자면, 본인의 상품 판매가가 $10이라고 했을 때, 아무리 작고 가벼운 제품이라고 하더라도, 무게와 부피, 사후 관리 서비스 등을 포함한 FBA 수수료가 $4.71이 나온다고 한다면, ‘수익’이 발생하기가 굉장히 어려운 구조라고 할 수 있겠습니다. 애초에 상품 판매가에 원가와 물류비를 포함해서 설정하셨겠지만, 그게 동종 상품군에서 최저가나 최저가 수준을 유지하지 못한다면, 판매 자체가 발생할 가능성이 적기 때문에, Pricing을 정말 정밀하게 하셔야 합니다.이처럼 수익이 발생하기 힘들어 보임에도 불구하고, 아마존 시장이 계속 크는 이유는 성공하는 셀러들이 꾸준히 나오기 때문입니다. 저희 컨택틱도 셀러 분들께서 꼭 성공하시길 바라는 마음에서 ‘영업 비밀’을 하나 말씀드리겠습니다 ^^ FBA 수수료가 무게와 부피에 따라 책정되는 시스템이기 때문에 이를 역이용하면, 물류비용을 조금이라도 줄일 수 있습니다. 바로 현지의 3PL 회사를 이용하는 것입니다. 미국 현지의 3PL 기업을 이용할 때의 장점은 FBA 배송대행 수수료보다는 저렴한 비용으로 배송이 가능하고, 한국에서 미국으로의 국제 배송 개념이 아니라 같은 미국 내에서의 배송이기 때문에 때문에 충분히 원활한 판매가 가능합니다. 그리고 무엇보다, Seller Prime이라는 자격조건을 얻을 수 있다면 FBA가 가져다주는 Prime 효과도 동반할 수가 있습니다.마지막으로 FBA 이용 시 가장 간과하기 쉬운 주의사항을 말씀드리고 글을 마무리하도록 하겠습니다. FBA는 결국, 본인의 상품을 아마존 창고에 보관하고 ‘소비자의 구매’가 발생하는 순간, 배송되는 구조입니다. 따라서, 보관 수수료가 발생할 수밖에 없습니다. 특히, 장기 보관 수수료를 조심하셔야 합니다. 아마존은 6개월 이상 장기간 보관된 제품은 아마존에서 일반 창고보관료보다 10배 이상 비싼 '장기 보관료'를 매월 부과하기 때문입니다. 따라서, 가장 좋은 방법은 월 판매량 예측치를 기준으로 '적당한 양만 FBA에 입고’하는 것입니다. 적당하다는 모호한 표현을 쓴 이유는 결국 제품에 따라 판매량 예측치가 다르기 때문입니다 (저희 컨택틱은 빅데이터 분석으로 예상 판매량을 도출한 후 셀러들에게 컨설팅을 진행하고 있습니다).컨택틱의 모든 교육은 파트너인 글로벌셀러 창업연구소와 접수하고 진행합니다. 교육 신청은 아래 링크나 글로벌셀러 창업연구소의 홈페이지를 통해 접수 가능합니다.오프라인 아마존 입문 과정오프라인 아마존 기초/심화 과정온라인 아마존 입문 과정그럼 오늘도 즐거운 글로벌 셀링 되세요!감사합니다.컨택틱서울특별시 서초구 서초대로 356, 606호(서초동, 서초지웰타워)대표 전화: 02-538-3939이메일: [email protected]홈페이지: https://www.kontactic.com네이버 블로그: https://blog.naver.com/kontactic카카오 브런치: https://brunch.co.kr/@allaboutamazon
조회수 1445

일본 스타트업 적응기#3   「혁신 속, 전통」

회사에 처음으로 방문하는한국 사람들을 안내할 때면빼먹지 않고 하는 말이 있다.가장 입구에 앉아 있는 분들이회사 임원진들이니까..조심해서 들어가야 해요..ㅎㅎ물론 농담 섞인 이야기지만,한국이었으면 가장 신입 직원들이 앉아있을 [문을 열고 들어가면 바로 모니터가 보이는 자리]에 CEO, CTO, CDO, CFO 그리고 인사담당 등이 자리 잡고 있다.일본도 한국과 다를 바 없는 권위적인 기업문화가 자리한 곳이라지만,20대로 이뤄진 젊은 스타트업에 걸맞게 직함, 자리 위치, 연봉, 업무시간 등,많은 부분에서 Fuller만의 문화를 만들어나가고 있다.하지만 모든 것을 다 바꾸려고 하지는 않는다.새로운 것 가운데, 너무나 전통적인 행사들도 있어 '함께하는 추억'을 만들어나가는 문화도 있다.아래는 1월 한 달 동안 구성원들과 함께하였던 '사내 일본 전통행사'들이다.1. 하쓰마이리 (신년맞이 신사 방문)새해 첫날 회사 사람들 모두 한해의 복을 기원하기 위해서 신사에 방문한다.신사에 가는 길에 운치 있는 풍경을 보는 것도 재미있지만, 함께 야외로 나와 보다 많은 이야기를 나눌 수 있는 시간이기도 하다. 엄숙한 분위기라기보다는 함께 소풍을 가는 느낌이다.신사를 처음 방문하는 나로서는 회사가 아니었다면 하지 못할 경험이었다.2. 떡 만들기 행사업무를 하는 사람들 뒤로 웬 떡시루가 들어온다.그리고 밥과 소금을 섞으면서 떡을 만드는 사람들그렇게 역할을 바꿔가며 약 1시간에 걸쳐 떡을 만든다.그래서 저 떡은 언제 나오냐....그리고 다 함께 만든 떡을 즐긴다.떡은 콩고물에 찍어서 인절미처럼 먹거나, 김에 말아서 소스에 찍어 먹는다.물론 사케(술)과 함께 -떡 만드는 것이 이렇게 힘든 일이었나.,만드는 과정부터 정리하는 과정까지 모두 함께 역할을 분담하면서 알지 못할 협동심이 다져지는 시간이다.3. 세쓰분에 마메마키(악귀 쫓기 행사)한국에서 동짓날에 팥죽을 먹어 악귀를 쫓는 것처럼 일본에서는 세쓰분(계절이 바뀌는 시기)에 볶은 콩을 먹거나 뿌리면서 악귀가 오는 것 쫒는 행사를 한다.한국에서는 동짓 날이 언제인지도 모르고, 팥죽을 맞춰 먹는 일도 드물지만...이곳에서는 도깨비(?) 에게 힘껏 콩을 던지고야구좀 할 줄 아는 우리 CEO, 악귀가 오는 것이 정말 싫었는지 있는 힘껏 던진다..(도깨비가 불쌍해 보일 때도 있다..)한해의 복을 기원하는 김밥을 함께 먹는다.회사를 들어오고 아직까지한 번도 한국식(?) 회식을 한 적은 없다.하지만 이곳에는 전통을 '콘텐츠' 삼아 다 함께 화합을 다지는 다채로운 행사들이 존재한다.함께 소풍 가고, 만들고, 먹으면서못하였던 이야기도 하고, 보지 못하였던 모습도 발견하고, 새로운 팀워크를 다져나가게 된다.물론 이런 행사는 모든 사람들이 사전에 인지하고 있고,일과 시간 중에 이뤄지며, 자신의 업무로 바쁜 경우에는자리에 앉아서 계속해서 일을 해도 아무도 뭐라고 하지 않는다.전통을 살리면서 구성원 간의 끈끈함을 유지해나가는 이런 방법,덕분에 나는 일본의 전통도 배우고 새로운 추억도 함께 만들어 나가는 시간을 보내고 있다.현재 직장에 있기 전, 50대 후반의 사장님과 함께 상하이에 출장을 가서 중국사람들과 함께 술자리를 갖은 적이 있다.술자리 화제 중에 하나가사업을 하면서 행해지는 전통적인 행사들에 관한 이야기였는데.고사를 지내고, 사업의 장수를 상징하는 거북이 등껍질을 기둥 밑에 심고, 축문을 태우고 등등나는 하나도 알아들을 수 없는 이야기로 가득했었지만...중국은 아직까지 이런 의식을 행하고 있다는 말에 사장님은 옛 친구를 만난 듯 이야기를 술술 풀어나가곤 했다.일본은 일찍부터 문호를 개방하고,옛것으로부터 벗어나 새로운 것을 추구한 나라라고 하지만,왜 잊혀가는 전통들은 우리가 더 많은지..생각해보면 아쉬움이 뒤따르는 상반된 현실인 것 같다.3#Fuller #일본 #스타트업 #해외취업 #스타트업합류 #일상 #인사이트
조회수 1277

Code without Limits

WWDC18 Review (1): Bring the Func! 보기 Introduction지난 글 Bring the Func! 에서 WWDC를 소개했습니다. Keynote와 Platforms State of the Union에서 인상 깊었던 경험도 소개했고요. WWDC 첫째 날은 애플에서 큰 이벤트를 진행했고, 둘째 날부터 마지막날까지는 세션과 랩스, 스페셜 이벤트를 진행했습니다. 이번엔 지난 글에서 미처 쓰지 못했던 것을 소개하겠습니다.SessionWWDC 하면 가장 먼저 떠오르는 건 대개 Keynote입니다. 하지만 다른 세션이나 랩스부터 생각나는 애플 개발자도 있을 겁니다. 저도 처음엔 Keynote만 기대했지만, 행사에 참여하면서 세션과 랩스의 매력(?)에 빠졌습니다.Apple Developer 웹사이트에서 수많은 기술 관련 영상을 볼 수 있다.애플 관련 애플리케이션 개발자는 문제에 부딪히면 Apple Developer 웹사이트에서 도움을 얻는데요. 특히 Development Videos 사이트에 들어가면 그해 발표한 WWDC 세션부터 시작해서 그 동안의 세션들을 모두 볼 수 있습니다. Topics에서는 주제별로 카테고리를 만들어, 해당 주제에 관한 동영상들을 모아서 볼 수 있고, Library에서는 찾고자 하는 내용에 대한 키워드를 검색해서 찾을 수 있습니다.Development Videos - Apple Developer 첫 화면Topics 에서는 주제별 동영상들을 볼 수 있다.Library 에서는 검색하는 키워드에 해당하는 동영상들을 볼 수 있다.WWDC 행사장은 Hall 1 ~ Hall 3, 그리고 Executive Ballroom까지 4개의 방으로 구성되어 있었습니다. 이곳에서 각각의 세션을 들을 수 있었는데요. 시간대별로 3~4개의 세션을 동시에 진행합니다. 듣고 싶은 세션은 해당하는 방에 들어가서 들으면 됩니다. 만약 같은 시간에 듣고 싶은 세션이 두 개 이상이라면 하나만 현장에서 듣고, 다른 세션은 developer 웹사이트 또는 WWDC 앱에서 업로드되길 기다려야겠죠. 물론 24시간이 지나면 세션 영상이 WWDC앱에 업로드됩니다. WWDC 앱에서 제공하는 행사장 지도세션이 진행되는 곳의 내부수많은 개발자의 똑똑한 머리와 지미집세션이 시작되자 개발자들은 무릎 위에 올려 놓은 맥북을 열심히 쳤습니다. 하나라도 놓치기 싫어서 열심히 타자를 치는 개발자들의 모습이 멋있었습니다. 마치 대학 영어 강의를 듣는 기분이었죠.아쉬운 점이 있다면, 에어컨을 너무 강하게 틀어 세션 행사장이 매우 추웠다는 겁니다. 며칠을 견디다 마지막 날엔 결국 행사장 밖에서 라이브로 시청했습니다. 그리고 세션을 진행하는 동안 빠르게 코딩을 하다 보니, 소스 코드를 다 작성하기도 전에 다음 장면으로 넘어가는 부분이 많았습니다. 실시간으로 같이 작업할 예제 소스 코드를 제공하거나 조금 더 효율적으로 세션을 들을 수 있게 해줬으면 좋겠다는 생각이 들었습니다.행사장에서 제공하는 아침 식사와 함께 맥북 프로에서 라이브로 세션 시청What’s new in ARTKit 2지금부터는 인상 깊었던 세션 세 가지를 소개하겠습니다. 첫 번째는 What’s new in ARTKit 2였습니다. 이 세션이 가장 인상 깊었던 이유는 애플이 AR에 중점을 두고 있다는 생각이 들었기 때문입니다. 실제로 Keynote 발표 중에 장난감용 블럭을 만드는 회사 관계자 두명이 AR을 활용한 앱을 실행해 노는 모습을 보여주기도 했습니다.Keynote 발표 중 한 장면. 크레이그 페더리기가 AR 파트에서 Shared experiences에 대해 발표하고 있다.가장 재미있었던 건 현실 공간을 저장해 다른 유저들과 공유할 수 있는 기능이었습니다. ARWorldMap Object를 이용해 사용자가 기기를 움직이면서 현실 공간의 모습을 저장합니다. 나중에 앱을 다시 실행하면 저장했던 현실 공간 맵이 그대로 유지되고, 이전의 모습도 나타나죠. 예를 들어, 노란 테이블 위에 가상의 물건을 올려 놓았다면, 나중에 테이블을 향해 기기를 움직였을 때, 그 자리에 놓여있던 가상의 물건이 다시 나타납니다. 또한, 저장한 맵을 근처의 다른 유저의 기기로 전송할 수 있습니다. 이렇게 하면 서로 다른 기기에서 같은 맵을 보면서, 같은 경험을 할 수 있게 됩니다. 개념을 확장하면 하나의 AR앱으로 다중 유저들이 게임을 함께 즐기거나 멀리 떨어져 있어도 같은 교육을 받을 수 있죠.SwiftShot AR게임을 즐기려고 기다리는 개발자들WWDC18 Keynote에서 잠깐 소개되었던 SwiftShot AR 게임이 이런 특징을 잘 나타난 앱입니다. 실제로 행사장 1층 안쪽에 이 게임을 즐길 수 있는 공간이 따로 마련되어 있었습니다. 개발자들이 직접 게임을 즐길 수 있었고, 마지막 날엔 개인전과 팀전을 진행해 1등에게 선물(AR뱃지)을 주었습니다. 옆에서 구경했는데 재밌었습니다. 아이패드가 있다면 여기를 클릭해 샘플 코드를 다운 받을 수 있습니다. 빌드해서 재미있는 AR 게임을 친구들과 함께 즐겨보세요. A Tour of UICollectionView브랜디 앱은 90% 이상 UICollectionView를 이용해 앱 화면을 만들었습니다. 많은 UICollectionViewCell을 다시 사용할 수 있고, 커스텀 레이아웃도 만들 수 있기 때문입니다. 이전에 포스팅한 ‘테이블이냐, 컬렉션이냐, 그것이 문제로다!’에서 UICollectionView를 공부했지만 더 배우고 싶어서 A Tour of UICollectionView를 들었습니다.이 세션은 UICollectionView에 대해 좀 더 깊은 내용을 다뤘습니다. UICollectionView와 UITableView의 가장 큰 차이점인 레이아웃에 초점을 두었는데요. 단순히 UICollectionView에서 선형 레이아웃 말고 그리드 형식의 레이아웃을 만들 수 있다는 것, 커스텀 레이아웃을 만들 때 고려할 것, 구현에 대한 가이드라인까지 제시했습니다. 애플에서 제공하는 레이아웃 중 하나는 UICollectionViewFlowLayout입니다. UICollectionViewFlowLayout은 line-based 레이아웃 시스템입니다. 일직선 상에서 최대한 많은 아이템들을 채운 후, 다음 행 또는 열로 넘어가 아이템을 채우는 형식으로 컨텐츠들을 배치합니다. 가장 흔한 레이아웃 모습이 바로 그리드 레이아웃입니다.그리드 레이아웃, 또는 UICollectionViewFlowLayout으로 구현할 수 있는 레이아웃Line-based 레이아웃이 아닌 다른 모습의 레이아웃이라면 어떤게 있을까요? 세션에서 예를 든 레이아웃이 바로 모자이크 레이아웃이였습니다. 브랜디 앱, 또는 다른 앱에서 볼 수 있는 모자이크 레이아웃은 일직선상에서 일렬로 정렬하지 않고, 그리드 레이아웃과 조금 다른 모습입니다. 아래의 스크린샷을 보면 어떤 레이아웃인지 감이 잡힐 겁니다.브랜디 앱, 인스타그램 앱, 세션 예제 앱의 모자이크 레이아웃모자이크 레이아웃은 line-based 레이아웃이 아니기 때문에 일반적인 UICollectionViewFlowLayout을 사용하지 않고, UICollectionViewLayout을 상속하여 커스텀합니다. 총 4개의 기본 메소드와 추가적으로 고려해야하는 메소드 하나를 이용하여 커스텀 UICollectionViewLayout을 만들 수 있습니다. 모든 컨텐츠를 담는 뷰의 크기, 레이아웃의 속성 2개, 그리고 레이아웃을 준비하는 기본 메소드들을 구현하고, 레이아웃이 변경해야하는 상황(기기를 가로로 눕히거나 레이아웃의 위치가 변경될 때 등)을 고려하여 메소드를 구현하면 됩니다.open var collectionViewContentSize: CGSize { get } func layoutAttributesForElements(in rect: CGRect) → [UICollectionViewLayoutAttributes]? func layoutAttributesForItem(at indexPath: IndexPath) → UICollectionViewLayoutAttributes? func prepare() func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) → Bool 세션 강연자가 직접 소스를 작성하면서 메소드 구현과 퍼포먼스를 위한 팁을 설명했습니다. 이 세션을 통해서 UICollectionView의 핵심인 레이아웃에 대해 더 깊이 배울 수 있었죠. 레이아웃 말고도 멋진 애니메이션 효과 구현 방법을 설명해주었는데요, 여기를 클릭해 직접 동영상을 보는 걸 추천합니다! 영상을 보고 나면 분명 멋진 UICollectionView를 구현할 수 있을 겁니다.Build Faster in XcodeBuild Faster in Xcode 는 가장 인기 있었던 세션 중 하나였습니다. 한국 개발자들 사이에서도 추천할 세션 중 하나로 꼽혔죠. 물론 혁신적으로 빌드 타임을 줄일 수는 없지만, Xcode의 기능과 빌드 타임이 어떻게 연결되는지 알 수 있었습니다. 프로젝트 세팅과 가독성 있는 코드 작성, 이 두 가지가 빌드 타임과 관련되어 있었습니다. Xcode는 프로젝트를 구성(configure)할 때, 빌드할 targets(iOS App, Framework, Unit Tests 등)와 targets 사이의 종속 관계(dependency)를 따릅니다. Dependency에 따라서 target을 빌드하는 순서도 정해지는데, 순서대로 빌드하지 않고 최소한의 연결을 유지하면서 병렬적으로 빌드하게 됩니다.빌드 시간을 아름답게 줄일 수 있다.이것은 Xcode 10에서 Scheme Editor에서 설정할 수 있습니다. 프로젝트의 Target → Edit Scheme → Build → Build Options에서 Parallelize Build를 체크하면 됩니다.Xcode 10의 Parallelize Build또한 Xcode 10에는 빌드 타임을 계산하는 기능도 있습니다. 빌드할 때 어떤 부분에서 얼마나 걸렸는지 요약해서 보여주는 기능도 있습니다. Product → Perform Action → Build With Timing Summary를 선택하면 빌드 후 요약해서 Xcode에 나타납니다.Build With Timing Summary를 선택하여 빌드하면위 스크린샷처럼 요약해서 보여준다.Xcode 프로그램을 이용해서 빌드 타임을 관리하는 방법도 있고, Swift으로 작성한 소스 코드를 가독성 높은 코드로 바꾸는 방법도 알려줍니다. 또한 Bridging Header로 Objective-C와 Swift를 동시에 개발할 때 도움이 되는 방법도 설명해줍니다. 빌드 타임에 대해 관심을 가질 수 있는 계기가 될 겁니다. 한 번씩 영상을 보길 추천합니다!Labs세션을 듣고 궁금한 점이 생겼다면 Labs(랩스)에서 질문할 수 있습니다. 각 세부 분야별 애플 기술자들이 시간대별로 모여서 개발자의 질문을 받거나 문제점을 해결할 수 있도록 도움을 줍니다.Technology Labstechnology Labs 간판Labs 입구에 있는 부스별 주제짙은 남색 Engineer 티셔츠를 입은 애플 기술자들이 질문을 받고 있다.가장 인기가 많았던 랩스는 Auto Layout and Interface Builder, UIKit and Collection View, Building Your App with Xcode 10 등등이었습니다. 사람이 많아서 줄 서서 기다릴 정도였습니다. 내년에는 랩스 시간이 조금 더 길게 진행됐으면 좋겠다는 생각이 들었습니다.WWDC 기간 중에 랩스에서 시간 보낸 적이 있었습니다. iOS 프로그래밍을 시작한 지 1년도 되지 않아 궁금했던 것들과 새로운 Xcode 10에 대해서 질문했습니다. 아래는 질문했던 내용을 문답형식으로 작성했습니다.애플 기술자와의 문답문: iOS 프로그래밍을 개발한지 얼마 안 된 신입 개발자입니다. 어떻게 하면 프로그래밍 실력을 높일 수 있나요? 답: 앱 하나를 처음부터 끝까지 개발해보면 실력을 늘릴 수 있다. 또한, 애플에서 만든 스위프트 책 보는 걸 추천한다.문: WWDC 기간 동안에 테스팅(testing)에 관심을 가지게 되었습니다. 앞으로 상용하는 앱을 테스트하면서 개발하고 싶은데, 테스트는 어떻게 시작하면 좋을까요?답: 이것에 대한 세션 동영상 을 보는 걸 추천한다. 테스트는 중요한 것이기 때문에 이 동영상을 보면서 테스트에 대해 배우고 난 뒤, 직접 앱을 테스트해보길 권장한다.문: 새로운 Xcode 10에서 앱을 빌드해봤는데 에러가 났습니다. 이런 에러가 나타난 이유는 무엇인가요?답: Xcode 10에 있는 컴파일러 문제다. 소스를 수정하면 앱이 빌드될 것이다. 컴파일러에 대해서 Xcode 팀에게 전달하겠다. (Range 관련된 컴파일러 문제였습니다.)문: 빌드 시간을 줄일 수 있는 방법은 무엇인가요?답: 컴파일하는 소스 코드를 줄이거나 프레임워크를 만들어서 빌드할 때 마다 계속 빌드하지 않도록 하면 시간을 줄일 수 있다. 이와 관련된 세션을 들으면 조금 더 자세한 내용을 확인할 수 있다.Consultation Labs애플 기술자와 일대일 면담식으로 진행하는 랩스도 있었습니다. 예전에는 선착순으로 진행되었는데 올해는 신청을 받고 당첨된 개발자에게만 기회를 주었습니다. 당첨되면 30분 동안 신청한 분야(디자인, 앱 스토어, 마케팅 등)의 전문가와 질의응답을 할 수 있습니다. 가장 인기가 많았던 User Interface Design 랩스를 신청하고 당첨이 되었습니다. 디자인 전문가들과 시간을 보낼 수 있었는데요. 애플 디자이너들이 생각하는 최선의 디자인 가이드라인을 배울 수 있었고, 함께 앱을 관찰하면서 개선되었으면 하는 디자인 요소 등의 팁을 얻었습니다. 아쉽게도 촬영 및 녹음은 불가능했습니다. 시간도 짧게 느껴져서 아쉬웠습니다.Special EventsWWDC 기간 동안에는 세션과 랩스 위주로 진행되지만 중간에 가끔 스페셜 이벤트들도 진행합니다. 점심 시간에 유명 인사들을 초청해서 하는 짧은 강연, 아침 일찍부터 모여서 같이 달리면서 즐길 수 있는 이벤트(WWDC Run with Nike Run Club), 맥주와 함께 음악을 즐기는 이벤트 등 개발 외적인 이벤트들을 많이 진행했습니다. 저는 그 중에서 Bash 이벤트를 소개하고 싶군요.BashBash는 목요일에 진행한 뒤풀이 파티였습니다. WWDC 행사장 근처에 공원을 빌려서 맛있는 음식과 주류를 무료로 제공하고, 초청 가수의 공연도 볼 수 있었습니다. 초청 가수가 공연하기 전에 소개할 때 크레이그 페더리기가 무대에 나왔습니다. 개발로 지친 몸과 머리를 식히고 다른 개발자들과 어울려 놀 수 있는 공간이였습니다. 뒤풀이 파티가 끝나갈 때쯤 진짜로 WWDC가 끝나간다는 느낌이 들어서 괜히 아쉽기도 했었습니다.무대와, 맥주와, bash 입장권한국인 개발자들과 함께 즐긴 뒤풀이 파티초청 가수를 소개하러 무대에 올라온 크레이그 페더러기아름다운 노을!마치며이번 글에서는 WWDC의 세션, 랩스, 스페셜 이벤트를 설명했습니다. WWDC가 한 달 전에 끝났지만 지금 다시 생각하면 두근두근 설레고 또 가고 싶어집니다. 내년 WWDC에 또 갈 수 있을까요? 지금까지 애플 개발자들의 축제였던 WWDC의 Review를 마치겠습니다. 긴 글을 읽어주셔서 감사합니다!글김주희 사원 | R&D 개발1팀[email protected]브랜디, 오직 예쁜 옷만#브랜디 #개발문화 #개발팀 #업무환경 #인사이트 #경험공유 #이벤트참여 #이벤트후기 #미국
조회수 1873

조직문화 특강 했습니다!

데이터진흥원 DB 스타즈 프로그램에서 연락이 와서 오늘 오후 스타트업 얼라이언스에서 진행했던 스타트업 조직문화 특강. 조직,인사 컨설턴트였다가 조직심리 박사과정을 하고 있고(논문 써야 하는데 ㅜㅜ) 이제는 작은 스타트업의 대표가 된 이력때문에 패스트캠퍼스에서 연락이 와서 시작했던 강의인데 그 이후에 이 내용으로 여기저기서 강의 요청이 와서 신기해하고 있다. 그런데 아마 이 내용으로 강의는 다음 달에 있을 현대아산나눔재단이 마지막이지 않을까 싶다. ^^ '나도 팀원으로 일하고 싶은 스타트업 만들기'라는 다소 유치해보이는 강의제목을 달아놓았는데 실제 우리 마보를 그런 스타트업으로 만들어 놓기 전까지는 내가 그런 말을 하고 다닐 자격이 있을까 하는 생각이 들기 때문이다.우리 마보가 저 제목에 당당한 스타트업이 되면 그때 당당하게 우리의 사례를 알리는걸로! 그러려면 마보 서비스를 더 알리고 우리 마보팀부터 키우는 것으로~덧붙임: 그래도 끝나고 Dable 과 rainist 에서 대표로 오신 두분은 도움이 많이 되었다고 하셔서 기뻤음. 사실 이 강의는 스타트업 CEO분들께 꼭 전달하고 싶은 내용임. 한마디로 요약하면 스타트업 대표가 본인 스스로를 동기부여하는 것이 무엇인지 먼저 생각해보고 직원들을 동기부여하라는 것!#마보 #스타트업 #스타트업강연 #강연후기 #조직문화 #기업문화 #사내문화 #특강 #스타트업CEO
조회수 2033

레진 기술 블로그 - IntersectionObserver를 이용한 이미지 동적 로딩 기능 개선

구글 크롬 51 버전부터 DOM 엘리먼트의 노출 여부를 비동기로 처리하는 IntersectionObserver API를 사용할 수 있게 되었습니다. 이 기능을 이용하면 이미지의 동적 로딩이나 광고 배너의 노출 측정 등을 효율적으로 사용할 수 있다고 구글 개발자 블로그에서 소개하고 있습니다. 이 글에서는 기존의 이미지 동적 로딩에 대한 문제점을 짚어보고 여러 예제를 통해 IntersectionObserver의 사용 방법을 익혀 기존 기능을 개선할 수 있도록 합니다. 사용한 예제들은 브라우저의 호환성을 고려하지 않고 구글 크롬을 기준으로 작성하였습니다.기존의 이미지 동적 로딩 구현이미지의 개수가 많거나 용량이 큰 페이지를 불러올 경우 쓸데없는 네트워크 비용이 증가하고 이미지를 불러오는 과정에서 서비스 속도에 문제가 발생할 소지가 있어서 이미지가 사용자에게 보일 때만 불러오는 동적 로딩 기능이 필요합니다. IntersectionObserver를 소개하기 전에 먼저 기존 라이브러리들이 이미지 동적 로딩을 어떤 방법으로 구현하고 있는지 간단하게 알아보도록 합니다.엘리먼트 가시성 판단이미지 동적 로딩에서 가장 중요한 코드는 해당 엘리먼트가 현재 화면 내에 보이는지 알아내는 것입니다. 이를 위해 엘리먼트의 크기와 위치 값을 돌려주는 Element.getBoundingClientRect 함수를 사용하는 경우가 많습니다. 아래는 이 함수를 사용한 간단한 구현 예제입니다.function isInViewport(element) { const viewportHeight = document.documentElement.clientHeight; const viewportWidth = document.documentElement.clientWidth; const rect = element.getBoundingClientRect(); if (!rect.width || !rect.height) { return false; } var top = rect.top >= 0 && rect.top < viewportHeight; var bottom = rect.bottom >= 0 && rect.bottom < viewportHeight; var left = rect.left >= 0 && rect.left < viewportWidth; var right = rect.right >= 0 && rect.right < viewportWidth; return (top || bottom) && (left || right); } 이벤트 처리위에서 구현한 isInViewport 함수는 언제 호출해야 할까요? 먼저 문서를 처음 불러왔을 때 호출해야 합니다. 그 후에는 동적 로딩이라는 단어에 맞게 사용자의 동작에 따라 보이지 않던 엘리먼트가 보이게 되는 이벤트를 감지해야 합니다. 마우스나 터치로 스크롤을 통해 문서의 위치가 바뀌거나 브라우저의 크기가 바뀔 수도 있고 모바일 기기의 화면을 돌려서 볼 수도 있습니다. 데스크톱의 경우 scroll, resize 이벤트를, 모바일의 경우 orientationchange 이벤트의 처리를 생각해야 합니다.const images = Array.from(document.querySelectorAll('img')); document.addEventListener('scroll', () => { images.forEach(image => { if (isInViewport(image)) { image.onload = () => images.splice(images.indexOf(image), 1); image.src = 'original_image_path'; } }); }); 간단하게 위 코드와 같이 구현할 수 있습니다. 물론 실제 서비스를 위해서는 수정할 점이 몇 가지 있습니다. 동적 로딩의 대상이 되는 이미지를 구분하기 위해 해당 엘리먼트에만 특정 클래스를 부여하거나 HTML5에서 지원하는 data 속성을 이용하기도 합니다. 스크롤이나 리사이즈 이벤트가 과도하게 발생하는 경우가 많으므로 throttle 또는 debounce 등을 사용해 실행 빈도를 조절할 수도 있습니다. 일부 라이브러리에서는 requestAnimationFrame을 이용해 이벤트 핸들러를 처리하기도 합니다.TADA레진코믹스에서는 이미지 동적 로딩을 위해 서비스 초기에 Unveil 라이브러리를 사용했었습니다. 그러나 적용 후 몇 가지 아쉬움이 있어 따로 TADA 라이브러리를 제작했습니다. 먼저 마크업 구조상 이미지를 태그가 아닌 다른 태그에 배경 이미지로 사용하는 경우를 지원해야 했습니다. 그리고 모바일 웹에 주로 많이 적용하는 수평 스크롤 구역에 대한 처리도 필요했습니다. 문서의 스크롤 이벤트로는 처리가 되지 않기 때문에 특정 엘리먼트를 받아 그 엘리먼트의 스크롤 이벤트 핸들러를 등록할 수 있도록 해야 했습니다. 이를 해결하기 위해 만든 라이브러리를 현재 서비스에 적용 중이지만 이 라이브러리 역시 아래와 같은 문제점들을 가지고 있습니다.</> < id>기존 이미지 동적 로딩의 문제점getBoundingClientRect 함수의 문제점위 코드에서 특정 엘리먼트가 현재 화면 내에 보이는지 검사할 때 사용하던 Element.getBoundingClientRect 함수에는 치명적인 단점이 있습니다. 이 함수를 호출할 때마다 브라우저는 엘리먼트의 크기와 위치값을 최신 정보로 알아오기 위해 문서의 일부 혹은 전체를 다시 그리게 되는 리플로우(reflow) 현상이 발생한다는 점입니다. 호출 횟수가 적을 경우에는 부담이 되지 않지만, 이 함수는 위에서 구현한 것처럼 스크롤이나 리사이즈 이벤트가 발생할 때마다 등록한 모든 엘리먼트를 순환하면서 호출하게 됩니다. 이 코드들이 하나의 메인 스레드에서 실행되기 때문에 스크롤을 할 때마다 실행 속도가 눈에 띄게 느려질 수도 있습니다.외부 도메인 문서를 사용하는 iframe최신 브라우저들은 동일 도메인 정책에 따라 iframe 내의 외부 도메인 문서에서 현재 문서에 접근하지 못 하게 막고 있습니다. 이 제한은 서비스 개발에서 겪게 되는 문제는 아니고 외부 광고 플랫폼 개발자의 입장에서 발생하는 문제입니다. 광고 이미지의 표시나 클릭 이벤트의 처리 등은 iframe 내에서 처리할 수 있지만 광고 이미지를 지연 로딩한다거나 이 광고가 사용자에게 노출이 되었는지 기록하는 등의 기능은 iframe 내에서 불가능합니다. 그래서 광고를 적용하는 서비스 개발자에게 스크립트를 제공하고 서비스 문서 내에 삽입하는 방식으로 처리하고 있습니다. 이러한 외부 광고가 여러 개라면 삽입해야 하는 코드가 늘어날 뿐만 아니라 코드 내에서 스크롤이나 리사이즈 이벤트 등을 각각 사용하기 때문에 위에서 언급한 문제점들이 배가될 수 있습니다.기타 이벤트에 대한 처리대부분의 동적 로딩 라이브러리들은 적용할 엘리먼트에 특정 클래스 또는 data 속성을 부여하면 코드를 추가 작성하지 않더라도 쉽게 사용할 수 있습니다. 하지만 화면에서 보이지 않던 엘리먼트가 갑자기 나타나는 현상은 스크롤이나 리사이즈 이벤트에서만 발생하는 것이 아닙니다. 더보기 버튼을 눌렀을 때 숨겨져 있던 엘리먼트를 노출할 수도 있고 AJAX 호출 후 엘리먼트를 생성한 후 보여줄 수도 있습니다. 이런 경우 일괄적으로 처리하기가 어렵우므로 해당 이벤트가 발생할 때 수동으로 처리하는 수밖에 없습니다.IntersectionObserver위에 나열한 문제들을 효과적으로 처리하기 위해 크롬 51/엣지 15/파이어폭스 55 버전부터 IntersectionObserver를 지원하기 시작합니다. 우리말로 번역하면 교차 감시자 정도가 될 이 기능은 등록한 엘리먼트가 보이는 영역에 나타나거나 사라질 때(용어에 충실하자면 대상 엘리먼트의 영역이 루트 엘리먼트 영역과 교차하기 시작하거나 끝났을 때) 비동기로 이벤트를 발생시켜 줍니다. 기본적인 사용법은 아래와 같습니다.const intersectionObserver = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { // do something observer.unobserve(entry.target); } }); }); intersectionObserver.observe(element); 먼저 IntersectionObserver 생성자에 콜백 함수를 인자로 넘겨주고 생성한 인스턴스의 observe 메소드를 통해 동적으로 처리할 엘리먼트를 등록합니다. 콜백 함수는 IntersectionObserverEntry 객체 목록을 전달받으므로 순환문을 통해 각 엘리먼트에 대한 처리를 완료하고 필요한 경우 unobserve 메소드를 이용해 감시 대상에서 해제할 수 있습니다.IntersectionObserver 예제아래 예제들은 기본적으로 아래 코드를 바탕으로 작성되었습니다. 각 예제들의 최상단에 엘리먼트에 짝을 이룬 표시등을 두었고 콜백 함수가 호출될 때마다 파동 효과를 주었으며 이 때 isIntersecting 속성을 기준으로 표시등을 켜지거나 꺼지게 되어 있습니다.const io = new IntersectionObserver(entries => { entries.forEach(entry => { // isIntersecting 속성으로 해당 엘리먼트가 보이는 지 표시 }); }); Array.from(document.querySelectorAll('.box')).forEach(box => { io.observe(box); }); 스크롤 이벤트를 다루지 않더라도 엘리먼트의 가시성 여부를 isIntersecting 속성을 통해 알 수 있습니다.<iframe class="demo" data-fr-src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/basic-verticalscroll.html" width="600" height="400" frameborder="0">수평 스크롤의 경우에도 overflow 속성이 적용된 컨테이너 엘리먼트의 스크롤 이벤트를 처리하지 않더라도 상관없습니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/basic-horizontalscroll.html" width="600" height="200" frameborder="0">더보기 버튼에 대한 클릭 이벤트를 따로 등록하지 않아도 동작합니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/basic-unfold.html" width="600" height="240" frameborder="0">리사이즈 이벤트 역시 따로 처리할 필요가 없습니다. 새 창을 띄운 후 창 크기를 조절하면서 확인할 수 있습니다.위의 모든 예제들은 <iframe> 태그 안에서 실행되고 있습니다. 이처럼 작성한 코드가 외부에서 실행이 되더라도 IntersectionObserver API는 문제없이 동작합니다.IntersectionObserver 생성자 옵션rootroot 옵션에는 가시성의 판단 기준이 될 HTML 엘리먼트를 지정합니다. observe 메소드로 등록하는 엘리먼트들은 반드시 이 루트 엘리먼트의 자식이어야 합니다. 이 옵션을 지정하지 않을 경우 브라우저 화면에서 현재 보이는 영역인 뷰포트가 기본이 됩니다. 아래 예제에서 알 수 있듯이 루트 엘리먼트를 지정하면 현재 화면과는 상관없이 루트 엘리먼트와 등록한 엘리먼트들의 영역이 교차하는 지 판단하게 됩니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/option-root.html" width="600" height="400" frameborder="0">rootMargin루트 엘리먼트의 마진값을 지정할 수 있습니다. CSS에서 사용하는 형식과 같기 때문에 “10px”, “10px 20px”, “10px 20px 30px 40px” 형태가 모두 가능하며 음수값으로 지정할 수도 있습니다. 기본값은 0이고 루트 엘리먼트를 지정한 상태라면 퍼센트값을 사용할 수도 있습니다. 이 옵션을 이용하면 이미지 동적 로딩에서 해당 엘리먼트가 화면에 나타나기 전에 이미지를 불러오기 시작해 이미지 공백을 줄이는데 유용하게 이용할 수 있겠습니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/option-rootmargin.html" width="600" height="400" frameborder="0">위 예제에서는 root 옵션은 지정하지 않고 rootMargin 옵션을 각각 0, 100px, -100px, 50%로 지정했습니다. 하지만 iframe 내에서 실행을 하게 되면 이 옵션이 정상적으로 동작하지 않습니다. 프로젝트 페이지의 이슈 댓글에는 동일 도메인의 프레임 안에서는 동작하는 것으로 논의되고 있지만 뷰포트에는 해당하지 않거나 버그 또는 아직 크롬에 반영이 되지 않아 보입니다.이 예제는 새 창을 띄워 프레임을 벗어나면 정상적으로 동작합니다. 스크롤을 내리다보면 엘리먼트마다 IntersectionObserver 콜백 함수가 다른 위치에서 호출됨을 알 수 있습니다.thresholdthreshold 옵션은 엘리먼트가 콜백 함수의 호출 시점을 정하는 옵션입니다. 0과 1을 포함한 그 사이의 숫자 또는 숫자 배열을 지정할 수 있는데 이 숫자는 엘리먼트의 전체 영역 중에 현재 보이는 영역의 비율입니다. 이 비율의 경계를 넘나들 때마다 콜백 함수가 호출됩니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/option-threshold-value.html" width="600" height="400" frameborder="0">위 예제에서는 threshold 옵션을 각각 0, 0.5, 1, [0, 1]로 지정했습니다. rootMargin 예제처럼 엘리먼트마다 콜백 함수가 다른 위치에서 호출됩니다. 두 번째와 세 번째 상자는 콜백 호출 시점에 isIntersecting 값이 항상 참이기 때문에 표시등이 정상적으로 표시되지 않습니다. isIntersecting 속성을 기준으로 처리해야 할 작업이 있다면 반드시 threshold 속성에 0을 포함시켜야 정상적으로 동작합니다. threshold 속성은 아래 예제처럼 콜백 함수의 인자로 받는 IntersectionObserverEntry 객체의 intersectionRatio 속성과 같이 사용하기에 유용합니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/option-threshold-ratio.html" width="600" height="400" frameborder="0">위 예제에서는 threshold 옵션을 각각 [0, 1], [0, 0.5, 1], [0, 0.25, 0.5, 0.75, 1]로 지정하고 콜백이 호출되면 intersectionRatio 값을 기준으로 표시등의 배경 투명도를 바꾸도록 했습니다.IntersectionObserver의 활용이미지 동적 로딩지금껏 알아본 IntersectionObserver를 이용해 이미지 동적 로딩을 간단하게 구현해봅니다. 이미지 엘리먼트를 구성할 데이터가 배열로 존재한다고 가정하고 ES6에서 지원하는 템플릿 문자열을 사용해 배열을 순환하면서 이미지 목록을 생성합니다. 그 후 IntersectionObserver를 초기화하고 만들어진 엘리먼트들을 등록합니다. 콜백 함수에서는 엘리먼트가 보이는 상태일 때 이미지를 로딩하고 해당 엘리먼트를 감시 해제합니다. id="comics"> const comics = [ { alias: 'eunsoo', id: 6080299074584576, title: '은수' }, ... ]; const template = comics => ` ${comics.map(comic => ` ${comic.id}"> ${comic.alias}" class="info">${comic.title} `).join('')} `; document.getElementById('comics').innerHTML = template(comics); const io = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (!entry.isIntersecting) { return; } const target = entry.target; const id = target.dataset.id; target.querySelector('.info').style.backgroundImage = `url(https://cdn.lezhin.com/v2/comics/${id}/images/wide?width=600)`; observer.unobserve(target); }); }); Array.from(document.querySelectorAll('.comic')).forEach(el => { io.observe(el); }); 아래 예제를 실행하면서 브라우저의 개발자 도구를 열고 네트워크 탭을 살펴보면 이미지 엘리먼트가 보이기 시작할 때 불러오기 시작하는 것을 확인할 수 있습니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/demo-lazyload.html" width="600" height="400" frameborder="0">무한 스크롤IntersectionObserver 기능을 이용하면 무한 스크롤 역시 쉽게 구현할 수 있습니다. 아래 예제에서는 스크롤의 끝부분에 감시를 할 엘리먼트를 두고 그 엘리먼트가 노출이 될 때마다 콘텐츠를 추가로 불러오도록 작성하였습니다. id="items"> id="sentinel"> const count = 20; let index = 0; function loadItems() { const fragment = document.createDocumentFragment(); for (let i = index + 1; i <= index + count; ++i) { const item = document.createElement('p'); item.classList.add('item'); item.textContent = `#${i}`; fragment.appendChild(item); } document.getElementById('items').appendChild(fragment); index += count; } const io = new IntersectionObserver(entries => { entries.forEach(entry => { if (!entry.isIntersecting) { return; } loadItems(); }); }); io.observe(document.getElementById('sentinel')); loadItems(); 실행 결과를 아래 예제에서 확인할 수 있습니다.<iframe class="demo" src="https://cdn.rawgit.com/fallroot/intersectionobserver-examples/master/demo-infinitescroll.html" width="600" height="400" frameborder="0">마무리IntersectionObserver API는 아직 몇몇 브라우저의 최신 버전에서만 사용할 수 있지만 지원하지 않는 브라우저를 위해 Polyfill을 제공하고 있습니다.IntersectionObserver API는 웹 광고 플랫폼 제공자와 사용자 모두에게도 좋은 소식이라 봅니다. 이 API가 정착된다면 광고 노출 여부를 측정하기가 쉬워지고 서비스에 더해졌던 리소스 낭비를 줄일 수 있을 것이라 생각합니다.레진코믹스는 크롬 브라우저 사용자의 비중이 높은 편이기 때문에 빠른 시일 안에 적용해 볼 예정입니다. 이미지 동적 로딩 기능의 개선과 정주행 기능과 같이 현재 스크롤 이벤트를 과하게 사용하고 있는 코드에 대한 부담을 덜 수 있기를 기대하고 있습니다.참고자료Intersection Observer API SpecificationIntersectionObserver’s Coming into ViewIntersection Observer API
조회수 1198

[인스팅터스] 이브의 브랜드 전략팀을 소개합니다(with 데이터 분석가 N)

안녕하세요 :) EVE의 브랜드 전략팀(Brand Directing) 데이터 분석가 N입니다. 마케팅과 브랜딩 업무에서 데이터 분석을 맡아 진행중입니다.Q. 브랜드 전략팀이란 ? 저는 BD(Brand Directing)팀은 최전선에서 뛴다는 느낌이 강하다고 생각해요. 고객의 관점을 생각하는 경우가 많고 우리의 메시지가 잘 전달될 것인가, 제품이 좋은 고객경험을 만들 수 있을까에 대해 치열하게 고민하는 업무가 많아요. 사회적 가치를 추구하는 기업이면서 동시에 수익을 추구할지 구체적인 구상안과 전략을 수립하는 팀, 그와 관련한 업무 전반을 총괄하는 팀인 것 같아요. 다른 회사에서 흔히 말하는 마케팅을 총괄하는 팀인 만큼 크리에이티브한 역량, 미적 감각, 생각한 것을 언어로 풀어내는 감각, 논리적 분석을 하는 역량 등 다양한 역량을 가진 사람들이 모여있어요. 서로의 영역에서 각자가 지닌 전문성을 존중하고 적극적으로 도움, 피드백을 주려는 분위기의 팀입니다. Q. 브랜드 전략팀에서 어떤 업무를 하나요 ? 브랜드 전략 팀에서 '데이터 분석'이라는 직무의 스펙트럼은 정말 넓다고 생각해요. 정교한 모델링으로 예측 모형을 세우거나 프로그래밍으로 고객의 선호를 분석하는 일부터 각 마케팅 활동의 성과를 평가하거나 전략을 도출하는 일까지 포함하는 개념으로 많이들 사용한다고 생각해요. 그 중에서 현재 제가 담당하고 있는 업무는 고객데이터를 통해서 고객의 구매성향을 파악하거나 할인• 가격 재조정시의 수요 예측, 마케팅 기획안에 대해서 성과지표를 설정하는 일까지 데이터에 기반해 분석적 사고가 요구되는 업무 전반을 다루고 있다고 생각합니다. 퍼포먼스 마케팅을 포함하는 업무라고 말씀드릴 수 있을 것 같아요. 데이터 분석가 또는 퍼포먼스 마케터 업무에서 필요한 역량은 논리적 사고와 구조화 능력, 끈질김이라고 생각합니다. 데이터를 통해 얻어낸 인사이트를 연결하고 구조화, 고객의 행동이나 성과를 예측, 평가하는 가설을 수립하고 검증하는 과정에서 주관적 사고를 배제하고 정량적인 사실에 근거해 판단을 내릴 수 있어야 하기 때문입니다. 또한 가설수립과 검증 단계에서 피드백과 수정을 반복하는 것을 통해 끈질기게 발전을 위한 노력을 해야 합니다. 다른 의견을 가진 사람에게 억지 주장을 펴는 것이 아닌 자신의 완전한 논리로 설득하고 수긍하도록 만드는 과정은 많은 노력과 시간이 들지만 발전을 위해 필수적인 부분이기 때문입니다. 현재는 수요예측모델에 따라 가격설정을 진행하고 데이터 수집, 모델 수정작업과 광고 집행비용대비 최대의 성과를 내는 최적수준을 찾는 작업을 진행중입니다. Q. EVE에 지원하게 된 계기는 무엇인가요 ? 저는 독특한 경우라고 생각해요. 정책에 대한 양적 분석을 진행하는 전공 수업을 통해서 해당 직무에 관심을 갖게 되었고 지인에게 이브를 추천받아서 지원하게 되었습니다. 브랜드 자체에 대해서 매력을 느끼거나 가치에 공감해서 지원한 경우는 아니라는 점에서 특이한 경우라고 할 수 있겠네요. 그러나 임직원의 실력과 커리어 패스에 맞는 업무를 주도적으로 수행하고 거기서 인정받는 과정에서 만족을 느끼고 있습니다. 사회적 기업에서의 독특한 성장을 기대한다면 EVE는 참 매력적인 브랜드인 것 같아요.Q. 지원자에게 면접에 도움이 될 만한 TIP을 알려주세요 ! 보통 자기소개서에 많이 있는 꿈이 뭐냐, 자신이 바라는 5년 후의 모습이 무엇이냐 하는 질문에 대해 깊게 생각해보지는 않는다고 생각해요. 하지만 진지하게 자신의 미래를 고민하고 이브에서 일하면서 무엇을 얻고 싶은지 고민하고 오시면 좋을 것 같습니다. 어디에서나 자신이 하고싶은 업무가 무엇인지를 정확히 알고 있어야 회사와의 시너지가 크게 날 수 있으니까요! Q. 평소 취미나 업무 외 일상은 ? 제 직무는 끊임없이 스스로 공부해야만 자신의 역량을 기를 수 있다고 생각해요. 회사의 교육 지원프로그램의 도움을 받아 전문성을 기르기 위해 공부하고 있습니다. 아, 그리고 요새는 색감이 예쁜 옛날 영화들을 보는 재미에 빠져 있어요. 퇴근하고 시간이 많이 보장되어서 저녁에는 영화를 보는 것으로 힐링을 하곤 합니다. (데이터와 수열을 벗어나 예쁜 미디어의 세계로...)Q. 내가 꿈꾸는 Career Path는 ?데이터에 기반해서 미래에 대한 예측, 구체적이고 효과적인 전략을 세울 수 있는 역량이 있는 사람이 되고 싶다고 생각합니다. 실질적으로 미래에 얼마나 성장할 수 있을지, 가치를 가지게 될지에 대해 전망하고 그것을 달성시킬 수 있는 사람이 되고싶어요.Q. (정말 솔직하게) 회사의 장단점에 대해 말해주세요 ! 본인이 하고 싶은 업무와 프로젝트를 스스로 지정하고 창조하여 디벨롭을 거듭하고 이것이 곧바로 현업으로 이어질 수 있다는 점, 그 무한한 자율성과 시행범위가 회사의 큰 매력이라고 생각합니다. 그러나 이 말을 뒤집어서 말하면 업무에 있어서도 시행에 있어서도 체계를 스스로 세워야 한다는 것, 이에 따른 책임감과 노동력이 추가된다는 점을 단점으로 꼽고 싶네요. 많은 자유도와 그에 따른 책임 정도로 정리해볼 수 있을 것 같습니다.evecondoms.com☘️생식 건강을 가장 먼저 생각하기에, 자연을 닮은 제품을 지향하기에, 소비자의 권리와 기업의 양심을 잃지 않기에 - 그래서 EVE는 성인용품이 아닌섹슈얼 헬스케어(Sexual healthcare) 브랜드입니다. 이브에 대해 더 알아보고 싶으시다면 지금 이브의 홈페이지에 방문해보세요:)Click me!
조회수 1573

소비자의 행동을 유도하는 작은 팁

아래 이야기는 오피노에서 진행한 A/B테스트를 수립할 때, 사고 흐름을 사례와 함께 글로 적어나갔습니다.#나도 모르게 망설여지는 이유막연하게 복싱이라는 운동이 해보고 싶어, 상담받으러 갔을 때 일입니다.“가격은 월 얼마에, 00시까지 운동할 수 있어요. 또…”사실 이미 알아본 내용들이라 머릿속에 잘 들어오지 않았습니다. 그때 머릿속에 들어온 말이 있었습니다.“처음에 오시는 분들 대부분이 거친 운동이라는 편견 때문에 걱정을 많이 하세요. 그런데 일단 시작하시면 다들 잘 따라오시더라고요. 저기 샌드백 잘 치시는 분도 처음에는 줄넘기 10개도 제대로 못하셨어요. 또 링 위에 있는 저분은 관절염… 여성분도 많고…”그러고는 저를 데리고 체육관 여기저기를 구경시켜줬습니다. 생각보다 밝은 분위기에 구석구석 살펴보니 꽤 깔끔한 시설이었죠. 왠지 모르게 등록해도 괜찮겠다는 생각이 들었고, 그날로 결제하고 운동을 시작했습니다.돌이켜 생각해보면 아마 저는 무의식 중에 복싱이라는 운동은 거칠고 시설이 열악할 것이다는 편견을 갖고 있었는지도 모릅니다. 그리고 그 편견들이 깨지자, 결제를 망설일 이유도 함께 사라진 것이지요.#온라인에서도우리는 하루에도 수많은 웹사이트에 접속해서 스크롤을 내리고, 버튼을 클릭하는 등 다양한 상호작용을 합니다. 개개인의 성향마다 어느 지점에서는 상호작용을 하고, 또 어느 지점에서는 상호작용을 하지 않죠. 예를 들어, 빨간색 버튼을 파란색 버튼보다 더 자주 클릭하고 네모난 버튼보다는 동그란 버튼을 더 자주 클릭한다는 거죠. 여러분은 어떤 경우에 상호작용을 하시나요? 여러분은 그 버튼을 왜 누르셨나요? 아마 뾰족한 이유를 말하기 쉽지 않을 거라고 생각합니다. 이렇게 스스로도 자기 취향을 찾기 어려운데, 남들은 오죽할까요? 하지만 우리 마케터는 이렇게 어려운 일을 해내야 합니다. 고객이 뭘 좋아하는지 알아내서, 우리 상품이나 서비스와 엮어 적절한 행동을 유도해야 하죠.소비자들의 취향을 파악하기 위해서는 실험을 해야 합니다. 이번 글에서는 D사 사례로 소비자들의 행동을 이끌어 내기 위해 A/B 테스트 시 고려해야 할 프로세스에 대해 소개하고자 합니다.1. 고품질 행동을 찾자로그 분석 툴을 사용하면 웹사이트에 들어와서 유저들이 어떤 행동을 하는지 살펴볼 수 있습니다. 제가 주로 눈여겨보는 것은, 구매한 유저와 구매하지 않고 이탈해버린 유저의 행동 차이입니다. 가설은 다음과 같습니다. 구매한 유저들이 공통적으로 많이 한 행동을 찾아서, 다른 유저가 해당 행동을 더 잘할 수 있게 유도하면 구매전환율이 올라가지 않을까? (상관관계, 인과관계에 대한 자세한 설명은 생략하도록 하겠습니다.)#D사 사례온라인 커머스 D사에는 어느 커머스에나 있을 법한 ‘20,000원 이상 구매 시 무료배송’이라는 혜택이 있습니다. 해당 문구는 상세페이지 최 하단 지점에 위치해 있었으며, 그 이외 다른 영역에서는 무료배송 혜택을 찾기 어려웠죠. 구매전환을 일으킨 유저가 상세페이지에서 무료배송 문구가 적혀 있는 위치까지 스크롤을 내린 비율이 전환되지 않은 유저보다 압도적으로 높게 나왔습니다.스크롤 량이 깊다라는 고품질 행동을 찾아낸 것이죠. 때문에 많은 유저가 무료배송 혜택을 인지하지 못했을 거라고 판단했고, 위치를 조정하자는 결정을 내렸습니다. 그럼 가장 적절한 위치는 어디일까? 가 문제였는데, 저는 건당 구매금액을 높이고 장바구니 이탈률을 낮추기 위해서 장바구니 페이지에서 무료배송 혜택을 노출하기로 했습니다.그럼 어떤 식으로 노출해야 가장 효과적일까요?스크롤 하단에 위치한 배송비 무료 안내 2. 소비자 입장에서 생각해보자우리는 문제를 개선하기 위해 다양한 방법을 찾습니다. 1번에 고품질 행동 찾기가 방법을 찾는 것이라고 할 수 있겠죠. 그리고 적용을 결정합니다. 이 단계에서 한 번쯤 생각해 볼 것들이 있습니다. 바로 적용되었을 때의 상황을 가정하고 스스로 소비자가 되어보는 겁니다.#D사 사례우리는 고품질 행동을 찾았고, 구매전환을 유도하기 위해 장바구니 페이지에서 무료배송 혜택을 노출하기로 결정했습니다. 처음에는 단순히 ‘20,000원 이상 구매 시 무료배송 혜택이 있습니다.’라는 문구를 띄울 계획이었습니다. 저는 이런 상황이 발생했다고 가정하고 실제 구매 절차를 밟아보았습니다. 상세페이지에서 6,800원짜리 물건을 장바구니에 담았고, 저는 장바구니 페이지로 이동했습니다. 그때 혜택 문구가 저에게 노출된 것입니다. ‘20,000원 이상 구매 시 무료배송 혜택이 있습니다.’ 그 문구를 봤을 때 소비자는 어떤 생각이 떠오를까요? 저는 짧은 시간 동안 두 가지 고민이 생겼습니다. (고민 1) 무료배송까지 얼마 남았지? 무료배송 혜택을 받기 위해 얼마를 더 구매해야 하는지 계산하기 시작한 겁니다. 20,000원부터 무료배송이고, 난 6,800원 담았으니까 13,200원 남았구나! (고민 2) 뭘 더 사지? 13,200원 남은 건 알겠는데, 그 13,200원을 채우기 위해서 어떤 걸 더 사야 할지 고민이 생긴 거죠.3. 생길 수 있는 고민을 미리 해결하자여러 실험을 진행하면서, 얻은 인사이트 중 하나는 ‘유저들은 고민을 정말 싫어한다’는 것입니다. 하지만 애초에 유저들이 고민을 아예 안 하게 만드는 것은 매우 어렵습니다. 개개인마다 성향이 너무나도 다르기 때문에, 가격이나 제품 측면에서 모두를 만족시킬 순 없기 때문이죠. 하지만 최소한 몇몇 고민들에 대한 답은 미리 제시해줄 수 있습니다. 답을 미리 제시해 줌으로써 망설임 포인트를 최대한 줄여주는 것이죠.#D사 사례고품질 행동을 찾았고, 실제 소비자로서 행동해보니 2가지 고민이 생겼습니다. (고민 1) 무료배송까지 얼마 남았지? (고민 2) 뭘 더 사지? 먼저 첫 번째 고민에 대한 답을 미리 해결해 주기 위해, 단순히 ‘20,000원 이상 구매 시 무료배송 혜택이 있습니다.’ 대신 ‘무료배송까지 13,200원 남았습니다.’라는 문구로 변경했습니다.굉장히 쉬운 산수이지만, 망설일 수 있는 작은 포인트 조차 제거해준 것이죠. 아직 고민이 하나 더 남았습니다. 어떤 걸 더 사야 하는지 고민을 줄이기 위해, 새롭게 만든 문구 아래 버튼을 하나 만들었습니다. ‘BEST 상품 보러 가기’ 즉, 어떤 걸 더 사야 하는지 고민하지 말고 BEST 상품에서 찾아보라는 것이죠.실제 적용 이미지위와 같은 하단 배너를 만들고 A/B 테스트를 진행했습니다. A 안은 배너가 뜨지 않는 원본이고 B 안은 배너가 추가된 대안이죠. 50%의 유저에게는 A 안을, 나머지 50%의 유저에게는 B 안을 노출시켜 어느 안에서 더 좋은 결과가 나오는지 확인해보았습니다.#결과 (A안 대비 B안)첫 번째로 B안에서 건당 구매금액이 증가했습니다. 20,000원 미만으로 구매할 유저들이 문구를 보고 무료배송 혜택을 받기 위해 한 번에 더 많은 금액을 결제한 것이죠. 두 번째는 Best 상품 페이지 뷰 수가 압도적으로 증가했습니다. 우리의 의도대로 유저들이 움직여준 것이죠. 이 두 결과는 어느 정도 예측이 가능했습니다. 예측하지 못했던 것은 구매 건수도 증가했다는 사실입니다. 구매를 망설이던 유저에게도 혜택 문구가 영향을 미친 것으로 판단할 수 있었습니다.#마지막으로첫 번째로 여러분들이 가진 혜택이 소비자들에게 잘 인식되고 있는지 확인해 보세요. 두 번째로 소비자 입장에서 한번 생각해보세요. 수정된 위치가 최선인가? 마지막으로 소비자들이 가질만한 고민을 미리 제거해주는 시도를 해보세요. 물론 같은 흐름으로 진행하더라도 실험 결과가 좋지 않을 수도 있습니다. 하지만 그로스는 시도하는 것에 충분한 의미가 있다고 생각합니다.광고에 굉장히 많은 돈을 사용하고 광고로 인한 웹사이트로 유입도 잘 발생하는데, 정작 웹사이트에서 전환이 발생하지 않아 고민하고 계신 광고주분들을 많이 만났습니다. 혹시 우리 웹사이트 구조가 소비자에게 안 좋은 경험을 겪게 하는 건 아닐까? 하는 고민이 들 때 위 세 가지 프로세스를 한 번쯤 생각해 보셨으면 좋겠습니다.퍼포먼스 마케팅 에이전시, 오피노 바로가기 

기업문화 엿볼 때, 더팀스

로그인

/