스토리 홈

인터뷰

피드

뉴스

조회수 22592

Next.js 튜토리얼 9편: 배포하기

* 이 글은 Next.js의 공식 튜토리얼을 번역한 글입니다.** 오역 및 오탈자가 있을 수 있습니다. 발견하시면 제보해주세요!목차1편: 시작하기 2편: 페이지 이동 3편: 공유 컴포넌트4편: 동적 페이지5편: 라우트 마스킹6편: 서버 사이드7편: 데이터 가져오기8편: 컴포넌트 스타일링9편: 배포하기 - 현재 글개요아래와 같은 궁금증이 생긴 적이 있나요?어떻게 내가 만든 Next.js 애플리케이션을 배포할 수 있나요?아직 배포에 대해 이야기하지 않았지만 배포하는 것은 꽤 간단하고 직관적입니다.Node.js를 동작할 수 있는 곳이라면 어디든 Next.js 애플리케이션을 배포할 수 있습니다. 매우 간단한 ▲ZEIT now로 배포하는 데에도 불구하고 어떤 잠금 장치도 없습니다.설치이번 장에서는 간단한 Next.js 애플리케이션이 필요합니다. 다음의 샘플 애플리케이션을 다운받아주세요:아래의 명령어로 실행시킬 수 있습니다:이제 http://localhost:3000로 이동하여 애플리케이션에 접근할 수 있습니다.Build와 Start처음으로 프로덕션에 우리의 Next.js 애플리케이션을 빌드해야 합니다. 빌드는 최적화된 프로덕션의 코드 세트를 생산합니다.이를 위해 간단히 다음의 npm 스크립트를 추가하세요:그런 다음 하나의 포트에서 Next.js를 시작해야 합니다. 사이드 렌더링을 수행하고 페이지를 제공합니다. (위의 명령으로 빌드됩니다)이를 위해 다음의 npm 스크립트를 추가하세요:이러면 3000 포트에서 우리의 애플리케이션이 시작됩니다.이제 프로덕션에서 애플리케이션을 동작시키 위해 다음의 명령어를 실행할 수 있습니다:두 개의 인스턴스 실행하기애플리케이션의 인스턴스 두 개를 실행시켜 봅시다. 대부분 앱을 수평으로 확장하기 위해 이 작업을 수행합니다. 처음으로 start npm 스크립트를 다음과 같이 변경해봅시다:만약 Winodws라면 next start -p %PORT%로 스크립트를 변경해야 합니다.이제 애플리케이션을 처음으로 빌드해봅시다.npm run build그러면 터미널에서 다음의 명령어로 실행시켜 봅시다:PORT=8000 npm startPORT=9000 npm startWinodws에서는 다른 명령어를 실행시켜야 합니다. 하나의 옵션은 애플리케이션에 cross-env npm 모듈을 설치하는 것입니다.그런 다음 커맨드 라인에서 cross-env PORT=9000 npm start를 동작시켜 주세요.두 개의 포트 모두에서 애플리케이션에 접근할 수 있나요?- 네. http://localhost:8000와 http://localhost:9000 둘 다 접근할 수 있습니다.- http://localhost:8000에서만 접근 가능합니다.- http://localhost:9000에서만 접근 가능합니다.- 둘 다 접근할 수 없습니다.한 번의 빌드로 많은 인스턴스 실행시키기보다시피 애플리케이션을 한 번 빌드해야 합니다. 그런 다음 원하는만큼의 많은 포트들을 시작할 수 있습니다.▲ZEIT now에 배포하기Next.js 애플리케이션을 빌드하고 시작하는 방법을 배웠습니다. npm 스크립트를 사용하여 모든 것을 수행했습니다. 그래서 원하는 배포 서비스를 사용해서 동작하도록 애플리케이션을 설정할 수 있습니다.하지만 ▲ZEIT now를 사용하면 딱 한 번의 과정만 수행하면 됩니다.다음과 같은 npm 스크립트만 추가해주세요:그런 다음 now를 설치해주세요. 설치 후 다음 명령어를 적용해주세요:now기본적으로 애플리케이션의 루트 디렉터리 안에서 "now" 명령어를 실행합니다.여기에서 애플리케이션을 시작하는 포트로 8000 포트를 지정했지만 ZEIT now에 배포할 때 변경하지 않았습니다.그러면 ZEIT now에 배포할 때 애플리케이션에 접근할 수 있는 포트는 어떤 것일까요?- 8000- 443 (혹은 언급되는 포트가 없음)- URL에 언급한 모든 포트- 에러를 표시한다. "443 포트에서만 시작할 수 있습니다"ZEIT는 항상 443 포트를 사용합니다실제로 8000 포트에서 애플리케이션을 시작해도 now에 배포될 때는 443 포트를 사용해서 접근할 수 있습니다. ("https" 웹사이트의 기본 포트)이것은 ▲ZEIT now의 특징입니다. 원하는 포트에서 애플리케이션을 시작해야 합니다. ▲ZEIT now는 항상 443 포트로 매핑합니다.로컬에서 애플리케이션 빌드하기▲ZEIT now는 npm build 스크립트를 발견하고 빌드 인프라 내부에 빌드합니다.하지만 모든 호스팅 제공자가 이와 같은 것을 가지고 있지는 않습니다.이 경우 로컬에서 다음의 명령어를 사용해서 빌드할 수 있습니다:npm run build그런 다음 .next 디렉터리를 사용하여 애플리케이션을 배포하세요.커스텀 서버를 사용하여 애플리케이션 배포하기우리가 막 배포한 애플리케이션은 커스텀 서버 코드를 사용하지 않았습니다. 하지만 만약 사용한 경우에는 어떻게 배포할 수 있을까요?다음의 브랜치로 체크아웃하세요:커스텀 서버를 사용하여 애플리케이션을 실행하기 위해 애플리케이션에 Express를 추가해주세요:npm install --save express애플리케이션 빌드하기이를 위해 next build를 사용하여 애플리케이션을 배포할 수 있습니다. 다음의 npm 스크립트를 추가해주세요:애플리케이션 시작하기프로덕션 애플리케이션임을 알리기 위해 커스텀 서버 코드를 생성해야 합니다.이를 위해 server.js로부터 이 코드를 살펴봅시다.이 부분을 살펴봅시다:그러면 프로덕션으로 이와 같이 애플리케이션을 시작할 수 있습니다.그래서 "npm start" 스크립트는 다음처럼 변경됩니다:마무리Next.js 애플리케이션을 배포하는 것에 대해 거의 다 배웠습니다.문서에서 Next.js 배포하기에 대해 더 배울 수 있습니다.배포에 대한 질문이 있다면 자유롭게 Slack에서 물어보거나 issue를 제출하세요.#트레바리 #개발자 #안드로이드 #앱개발 #Next.js #백엔드 #인사이트 #경험공유
조회수 1536

P2P금융의 본질, 콘텐츠로 접근하기

지난 12월. 어니스트펀드의 콘텐츠 마케터로 합류하기로 결정된 날. 루피(서상훈 대표의 닉네임)에게 오리엔테이션을 듣던 나는, 잠시 필기를 멈추고 어느새 글자가 빼곡하게 적힌 칠판을 바라봤다. "더 많은 사람들에게 금융의 기회를 제공하고, 어려워 이해하기 어려웠던 금융 경험을 더욱 쉽게 만드는 것. 그리고 더 나아가 그들이 그동안 받지 못했던 혜택을 정직하게 되돌려주는 것이 업의 본질이자 우리의 비전이다" 단순히 P2P금융을 사람과 사람을 잇는 서비스 정도로 생각하고 있었던 나는, 그 문장을 듣고는 잠시 동안 멍하게 생각에 잠긴 채, 계속해서 그 의미를 되뇌기 시작했다.필자는 집중하면 멍한 표정으로 입을 내미는 습관이 있다'누구나 멋진 투자자가 될 수 있다... 누구나 평등하게 기회에 접근할 수 있다...' 그리곤 P2P 금융의 방식을 재미있게 설명하는 가벼운 콘텐츠로 합류의 닻을 올리려던 나의 야심 찬 계획은 잠시 뒤로 미뤄둔 채, 이 메시지를 어떻게 하면 효과적으로 전달할 수 있을지에 대해서만 고민하기 시작했다. 우리가 이렇게 멋진 일을 하고 있다는 사실을 먼저 알리지 않고선 배길 수 없었을 것만 같았기 때문이었다.오랜 고민 끝에, 나는 이 메시지를 우리의 고객을 통해 전달하기로 결심했다. 내가 가장 잘하고 좋아하면서도, 그 메시지의 주인공인 고객을 활용하는 유일한 방법인 '인터뷰'로 말이다.증권사 애널리스트가 P2P 투자를 결심한 이유어니스트펀드 투자자, 증권사 애널리스트 염지윤님을 만나다. 증권사 애널리스트는 어떻게 재테크를 할까? 직접 어니스트펀드에서 투자를 하고 계시는 현직 애널리스트 염지윤님을 만나, 직접 여쭤 보았습니다. 어니스트펀드의 마케터들이 직접 찾아가 고객의 소리를 들어보는 [정직한 인터뷰], 지금 시작합니다. . 간단히 자기소개 부탁드립니다. 안녕하세…blog.honestfund.kr 아직 '정직한 인터뷰'를 못 보셨나요? 저런! 먼저 구경해보고 오실까요?진짜 고객을 만나보자. '정직한 인터뷰'의 탄생. 마침, 당시 우리 팀의 가장 큰 고민 중 하나는 '좋은 투자자 후기 콘텐츠'를 만드는 것이었다. 실제로 투자자 고객을 다양하게 분석하는 과정에서 우리는 다 저마다의 스토리를 지닌 멋진 투자자들이 있다는 사실은 알고 있었지만, 그걸 담아낼 수 있는 적당한 콘텐츠는 기획하고 있지는 못했다. 여러 가지 이유가 있었지만, 그중 가장 큰 이유는 그걸 제대로 담아낼 수 있는 포맷을 찾지 못한 것 때문이었다.카드 뉴스를 시도할 수도 있었고, 적당히 전화나 메신저로 인터뷰를 해서 많은 양의 콘텐츠를 만들어 낼 수도 있었지만 그러고 싶지는 않았다. 어설프게 접근할수록, 고객들에게 우리가 전하고자 하는 메시지를 놓칠 수 있을 것이라 생각이 들어, 더욱 신중하게 접근하려 했다.카드뉴스도 좋지만, 조금 더 무게감 있게 고객의 이야기를 전해보고 싶었다.오랜 논의 끝에, 우리가 돌고 돌아 선택한 포맷은 '인터뷰'였다. 그것도 서면이나 전화로 하는 간단한 방법이 아닌, '심층 인터뷰'였다. 직접 투자자를 '찾아가고', '좋은 장소'에서 편하게 이야기를 나누며, 어니스트펀드의 이야기뿐 아니라 '그들의 삶'에 대해서도 들어보는 시간을 갖는 것. 그 과정에서 우리가 찾고자 하는 답의 힌트를 얻을 수 있을 것이라 생각했다.질이 높은 콘텐츠를 만들기 위해서는 우리가 수고로워야 한다는 신념 아래, 콘텐츠의 윤곽을 잡기 시작했고 어느 정도 윤곽이 잡힌 후에는 잊지 말아야 할 몇 가지 전제를 정했다. ㅇ 고객이 스스로 자랑하고 싶어 하고, 참여하고 싶은 마음이 들어야 한다.ㅇ 어니스트펀드를 모르는 사람도 재밌게 볼 수 있어야 한다.ㅇ 고객이 말하지 않은 '사실과 다른 이야기'는 절대로 쓰지 않는다.또한, P2P금융에 대한 이야기를 전면으로 내세우지 않기로도 정했다. 어니스트펀드의 이야기로만 가득한 콘텐츠는 아무도 재미있어하지 않을 것이라는 가정, 그리고 '개인의 이야기'가 들어가면 콘텐츠가 더 재미있어질 것이라는 확신으로, 과감하게 P2P에 대한 이야기는 뒤로 뺀 다음 개개인의 일상에 조금 더 집중하기로 했다. 회사 이야기가 아닌 고객의 삶을 조명하는 브랜디드 콘텐츠. 도전이자 모험이었다.실제 고객을 만나는 것은, 매우 귀한 경험이자 동시에 일정의 리스크를 감당해야 하는 일이기도 했다. 고객은 온라인에서만 우리를 만날 뿐, 실제로 우리를 만나고 경험할 수 있는 경우는 극히 드물었기 때문이다.때문에 우리는, 고객이 실제로 우리 서비스에서 느끼길 바라는 경험을 실제 현장에서도 선사하기 위해 노력해야만 했다. 좋은 장소를 직접 보러 다니며 몇 번이고 사전답사를 하는 것, 그리고 고객과 사전에 많은 커뮤니케이션을 했던 것들 모두 그런 의도의 연장선이었다.또한 단순히 인터뷰를 하는 것에서 그치는 것이 아니라, 우리와 대화하고 머무르는 그 모든 순간들을 즐길 수 있길 바랐다. 그저 어떤 금융회사와 고객으로서 인터뷰를 한 것이 아니라, 새로운 사람들과 좋은 장소에서 만나, 즐거운 추억을 남길 수 있는 소중한 기회가 될 수 있길 바랐다. 그것이 곧 브랜드 경험의 확장이자, 콘텐츠가 만들어 낼 수 있는 또 다른 부수 효과라고 믿고 있었기 때문이었다. '우리가 고생하는 만큼, 더욱 좋은 콘텐츠가 나온다.'어찌 보면 아주 간단한 신념으로, 우리는 어니스트펀드가 말하는 '정직함'이란 가치에 더욱 접근하려고 노력하고 있었다.인터뷰 시작 전, 이야기를 나누고 있는 모습. 이 과정에서 많은 이야기들을 조율하고 합의한 다음 인터뷰에 들어가게 된다.평범한 사람이 특별해진다는 P2P의 본질, 콘텐츠에 녹여내다.고객을 더욱 멋지게 표현하는 것도 또 다른 숙제 중 하나였다. 아무리 좋은 의도를 갖고 있다고 한들, 그것을 표현하는 방식이 촌스럽다면 그 의도가 충분히 살지 못한다는 것을 너무나도 잘 알고 있었기 때문이었다.수년간 콘텐츠를 만들며 깨달았던 콘텐츠의 세 가지 요소. 그러니까 우리는 '재료', '스토리', 그리고 '표현 방식' 중 두 가지를 이미 갖고 있었다. 그 두 가지를 빛나게 해줄 마지막 퍼즐을 찾는 것이 우리에게 주어진 마지막 과제였고, 그 문제를 해결하기 위해 우리는 '사진작가'와 '영상 촬영팀'을 구하기로 했다. 인터뷰 현장에서의 영상을 담당해주시는 이용주 디렉터 마케터들이 가서 적당한 사진기로 대충 찍는 그런 사진이 아니라, 작가의 시선을 담은 멋진 '작품'으로 고객들을 표현하는 것이 중요했다. 그것이 그들이 살아온 삶을 보다 더욱 멋지게 비춰주리라는 믿음이 있었기 때문이었다. 또한 그 현장을 영상으로 남길 수 있다면 더 많이 활용할 수 있을 것이라 생각했다. 며칠을 수소문한 끝에 우리가 원하는 느낌의 사진을 찍어줄 수 있는 작가님과 멋진 영상팀을 구할 수 있었고, 고객과 만나는 그 순간을 우리는 그저 '기억'하기 위해 사진을 남기는 것이 아닌 '작품'으로 승화시킬 수 있었다. 마치 P2P 산업의 본질처럼, 평범한 사람들이 우리로 인해 특별해지는 순간이었다.때로는 조급한 마음에 적당히 타협하고도 싶었지만, 그럴 때일수록 차분하게 팀원들과 논의를 거듭하며 인터뷰를 다듬었다. 그리고 우리의 노력은, 첫 고객을 만나고 한 달 반이라는 시간이 흘러서야 세상의 빛을 볼 수 있었다. '정직한 인터뷰'라는 조금은 수더분하면서도 직관적인 이름과 함께 말이다.인생 프사를 남겨드리겠다는 굳은 약속. 덕분에 고객은 사진과 우리를 늘 연관시켜 떠올리게 됐다.고객이 주인공이 되는 콘텐츠, 그리고 진짜 바이럴의 시작 콘텐츠 마케팅의 세계에서는 이런 말이 있다. '공유(share)란, 즉 내 페이스북 담벼락을 더럽힐 만큼의 가치가 있다는 것을 의미한다'어찌 보면 우스갯소리처럼 들릴 수 있겠지만, 그만큼 사람들은 자신의 페이스북 담벼락을 마치 자신과 동일시한다. 쓸모없거나, 의미 없는 것. 혹은 주변 사람들의 시선이 의식될만한 것들은 담벼락을 진입을 쉽게 '허락'하지 않는다는 말이다. 그래서 우리는 '정직한 인터뷰'가 과연 그들에게 어떤 의미일지가 궁금했다. 그들을 최대한 멋지게 담아주기 위해 노력했지만 어쨌든 '광고'의 성격을 띠고 있는 후기가 정말로 '공유'될 수 있을지 우리 스스로도 의심스러웠기 때문이었다. 하지만, 의문도 잠시. 우리의 고객들은 너무나도 당당하게 자신의 인터뷰를 페이스북을 포함한 SNS에서 열심히 퍼다 다르기 시작했다. 자신의 이야기가 담긴, 그리고 자신의 멋진 모습이 담긴 이 콘텐츠를 지인들이 봐주었으면 하는 마음을 담아 공유가 이뤄지기 시작했다. 무려, '어니스트펀드'라는 브랜드가 옆에 있는 것을 오히려 멋지게 여기면서 말이다.그리고 심지어, 콘텐츠의 확산 과정에서 우리가 원했던 기획의도가 정확히 들어맞기도 했다.그뿐만이 아니었다. 사람들은 페이스북 프로필 사진부터 카카오톡에 이르기 까지. 자신들의 SNS를 모두 우리가 찍어준 사진으로 바꾸기 시작했다. 고퀄리티의 사진으로 일상이 도배되자, 지인들은 우리 고객들에게 사진의 출처를 물었고, 자연스럽게 고객들은 우리의 홍보를 하기 시작했다. 나에게 멋진 추억과 자랑거리를 만들어준 '어니스트펀드'를 마치 자신의 회사인 것처럼 설명하며 말이다.어니스트펀드가 무엇이냐는 질문과, P2P 금융은 도대체 무엇이냐는 지인들의 질문에, 우리 고객들은 자진해서 홍보대사가 되었다. 우리에게 물어볼 질문들을 먼저 해결해주기도 했고, 새로운 상품이 나오면 먼저 나서 홍보를 해주기도 했다. 지인들은 그 과정에서 우리 회사가 '믿을만한 회사인지', 혹은 '괜찮은 회사인지'에 대한 검증을 함께 끝냈다. 그리고 결국, 우리는 고객이 공유한 페이스북 게시글 댓글에서 그토록 바라던 질문 하나를 발견할 수 있었다."나도 어니스트펀드에서 투자하면 인터뷰할 수 있는 거야?"정직한 인터뷰 첫 주자 염지윤님의 인스타그램. 진짜 바이럴은 저곳에 있었다.마치며. '정직한 인터뷰'는 아직 시작한 지 2달이 채 되지 않은 콘텐츠다. 쉽게 말해, 아직 전통이 쌓이지 않은 콘텐츠다. 지금까지 공개된 것은 세 편, 그리고 만난 고객은 대략 8명쯤 되니, 우리의 모든 고객들을 만나려면 앞으로도 수년은 걸릴 것이다. 어쩌면 우리는, 아직 오래 진행되지도 않은 콘텐츠를 두고 설레발을 떠는 것일지도 모른다.그럼에도 불구하고 한 가지 자신 있는 것은, 어니스트펀드가 존재하는 한 이 콘텐츠는 고객들이 스스로 자랑하고 싶어 하고, 참여하고 싶은 콘텐츠로 남을 것이라는 점이다. 나를 진심으로 대해준 브랜드. 그리고 나를 멋지게 표현해주고 잊지 못한 추억을 선사해준 사람들은 쉽게 잊히지 않는다. 만약 고객이 평범한 사람이고, 살면서 그런 경험을 겪지 못했을수록 그 가능성은 더욱 높다. 때문에 대부분의 고객들이 평범한 사람들로 이루어진 우리와 같은 IT 서비스에선 그 의미가 더욱 빛날 수밖에 없다.어니스트펀드 팀멤버들과 이지연 고객님. photo by 김정재많은 기업들이 콘텐츠 마케팅을 하고 하지만, 종종 욕심을 이기지 못하고 가짜 콘텐츠를 만들어내거나 시간에 쫓겨 품질 관리에 소홀한 경우를 마주치곤 한다. 그러나 대부분의 경우, 콘텐츠의 양(量)은 질(質)을 이기지 못한다. 상사에 쫓겨, KPI에 쫓겨 본질과 품질을 잃은 콘텐츠는 절대로 제 역할을 하지 못한다. 때문에 콘텐츠를 만드는 사람은, 스스로 수고로운 만큼 사랑받는다는 사실을 잊어선 안된다. 급하더라도 돌아가는 것이 오래간다는 진리는 콘텐츠 마케팅에서도 통한다. '오래가는 행복은 오직 정직함에서만 찾을 수 있다'는 격언도 있지 않던가.마지막으로, 어니스트펀드가 정의한 '정직'의 의미 중 일부를 소개하며 글을 줄이려 한다. 누군가 설령 이 글을 보지 않고 먼저 '정직한 인터뷰'를 보더라도, 그 의미를 유추할 수 있길 바라며. 정직이란 그 실현을 위해서, 적당함과는 타협하지 않겠다는 우리의 불굴의 의지이자 진정성을 의미한다#어니스트펀드 #마케팅 #마케터 #콘텐츠 #콘텐츠마케터 #인사이트
조회수 1755

데이터 검증이 중요한 이유

데이터 검증은 system error 또는 human error에 의해 garbage data가 쌓이고 있진 않은지, 정상적으로 데이터가 수집되는지 여부를 확인하는 매우 중요한 단계인데요. 오늘은 왜 데이터 검증 단계가 중요한지를 최근 경험을 통해 설명드리고자 합니다.한 고객사에서 데이터 검증 과정 중 GA(Google Analytics for Mobile Apps) 대비 저희가 공급한 툴(와이즈트래커)의 세션수(방문수)가 너무 낮다는 문의를 주셨습니다. 그 수치는 무려 3배 가량의 차이로 acceptable이 힘든 데이터였습니다.사실 세션은 설정이 요하는 분석 항목이 아니기 때문에 측정기준으로 비교해 봐야 했지만, 세션 기준 역시 30분으로 GA와 와이즈트래커와 동일했습니다. 이에 저는 GA에서 over counting되는 요인이 있을거라 생각하고 열심히 구글링 하다 흥미로운 아티클을 발견했습니다. GA SDK V4 적용했더니 세션수 2배 이상 증가했다?>> Link이 문의에 한 사람이 답변을 달기를, GA에는 activity auto tracking 기능이 있는데, 이를 사용할 경우 앱을 백그라운드에 내리거나 프로세스 킬하고 재실행하면 30분 세션 유지기간에 상관없이 세션이 증가한다는 내용이었습니다. 이 말인즉, 사용자가 앱과의 인터렉션이 없어도 GA SDK가 자동으로 새로운 세션을 발급한다는 건데요. 설마했지만 사실 확인을 위해 테스트를 진행했습니다.1) 테스트 앱 개발2) GA SDK v4 적용3) 앱 실행4) 앱 프로세스 종료 후 30분 이내 재실행 or 백그라운드 처리이는 불과 1분 안에 일어난 현상테스트 전 데이터는 사용자 1, 세션 6건이었고, 3단계 앱을 실행하는 시점에 사용자 2, 세션 7이 되었습니다. 정상적으로 사용자 1건, 세션 1건이 증가한 것입니다. 여기서 앱을 종료하고 바로 앱을 다시 재실행 해보았습니다. 그리고 데이터를 보니 오잉? 정말 세션이 증가했습니다. 정말인가 싶어 여러 번 했지만, 아래 캡쳐시간을 보시면 알겠지만, 불과 1분도 채 안되서 3건의 신규세션이 발생한 것입니다.그렇다면 도대체 왜 이렇게 처리한 것일까? 오류일까?정확히 알 수는 없지만 이 기준 자체는 데이터 해석에 큰 오해를 일으킬 수 있습니다. 우리는 보통 평균 값을 갖는 파생지표를 세션을 기준으로 산정합니다. 그래서 보시는 것 처럼, 평균 세션당 화면, 평균 세션 시간이 세션수를 기준으로 나눠진 것을 알 수 있습니다.평균 세션당 화면, 평균 세션 시간, 사용자당 방문횟수와 같은 지표는 사용자의 앱 인게이지먼트를 판단하는 척도로 활용하는 사용성 높은 지표인데, 사용자와 앱 간의 실질적인 인터렉션이 전혀 없는 허수의 세션이 증가하니 세션수와 연관있는 모든 파생지표 데이터가 실제보다 낮은 수치로 표기되고, 이를 가지고 잘못된 해석을 하고 잘못된 액션까지 취할 수 있다는 것입니다.해당 고객은 안타깝게도 세션 뿐만 아니라 세션과 관련된 파생지표 모두 잘못된 기준의 KPI를 보았다고 할 수 있는데요, 사실 아직까지 국내는 GA에서 추출하는 기본 데이터 수준으로 KPI를 활용하는 경우가 많고, 특히 GA의 activity auto tracking 기능을 대부분 true로 설정하여 활용하고 있을 것이기 때문에 데이터 해석의 문제는 생각보다 굉장히 범용적으로 발생하고 있을 것으로 예상됩니다.!! 데이터 검증은 선택이 아닌 필수 과정데이터 분석을 잘하기 위한 전제 조건은 좋은 데이터를 수집하는 것입니다. 하지만 보통 3rd party tracking 업체는 툴을 제공하는 것 까지만 수행하지, 클라이언트의 개발자가 제대로 적용했는지, 적용한 데이터가 정상 수집되고 있는지 등의 과정까지 support 하지 않습니다. 그럼 클라이언트가 직접해야 하는데 이건 현실상 더더욱 힘들 수 밖에 없습니다.그래서 툴을 선택할 때는 반드시 도입 단계에 데이터 검증을 지원하는지 여부를 확인해야 합니다. 2012년부터 빅데이터 분석 바람이 불고 있지만, 현실은 기업에 전문 분석가 1명이 없는 기업이 아직 대부분입니다. 또한 비전문가가 쉽게 배우고 커버할 수 있는 업무도 아니기 때문에 전문 업체의 지원을 받아야 합니다. 안해주면 해달라고 떼 써야 합니다. 초기 도입시에 말이죠. 그래야 이후에 자신감있게 데이터를 신뢰하고 분석하고 액션 플랜을 수립할 수 있습니다.오늘 당장 리포트의 데이터를 의심의 눈으로 한 번 다시 보시는 계기가 되면 좋겠습니다. * WISETRACKER는 모바일 광고 성과 측정부터 In-app 이용자/컨텐츠 분석, 푸시메시지 최적화까지 지원하는 모바일 통합 분석/타겟팅 솔루션입니다. 와이즈트래커 솔루션의 무료체험을 원하실 경우 여기를 클릭해주세요.* WISETRACKER가 제공하는 무료 데이터 분석 컨설팅를 원하신다면 여기를 클릭해주세요. #와이즈트래커 #데이터 #데이터리포트 #데이터분석 #서비스소개
조회수 1211

슬라운드 브랜드 아이덴티티(B.I) 개발기 - 1화

1. 좋은 브랜드 만들기에 대한 관심.세상에는 단순히 보기 좋은 멋있는 브랜드가 아니라, 그들의 철학과 가치관을 효과적으로 전달하는 매력적인 브랜드들이 정말 정말 많습니다. 좋은 브랜드들을 발견할때마다 ‘갖고싶다 저브랜드..’ 보다는‘와 샘난다.. 쟤네 왜이렇게 잘해’ 라고 느끼는 저는 좋은 브랜드들이 ‘왜 좋은지, 어떻게 좋은 브랜드가 되었는지, 앞으로는 어떠한 전략을 가지고 있는지’ 등에 관심이 많고 그들의 행보과 가치를 연구하고 있습니다. 그리고 최종 목적은 언젠가 어떤 형태로든 ‘좋은 브랜드’를 만드는 것이고요!2. 슬라운드와의 만남지난 해 여름, 우연한 기회로 매트리스 스타트업의 브랜드 디자이너로 합류하게 되었습니다.브랜드 디자이너라고는 하지만, 창업자들과 처음만나 이야기를 나누어 보니디자인의 ‘ㄷ’ 관련한 모든 일..이 슬라운드 안에서 제가 앞으로 마주해야할 일들이었습니다.(매트리스 두개뿐인 황량한 쇼룸부터.. 강력한 군청의 파란색 로고까지..)그래서 사실 메모리폼 매트리스에는 별로 관심이 없었지만.. 학부에서 인테리어를 전공한 이후 가구회사, 전시회사, 인테리어 회사 등을 거쳐  공간, 그래픽 작업을 하면서 현재는 대학원에서 석사과정으로 브랜드 개발을 연구하고 있는..매우 ‘잡식스러운’ 욕심 많은 디자이너에게 다양한 영역을 경험할 수 있는 이 곳이 내가 하고싶은 것들을 다 해볼 수 있는 꽤 좋은 환경일 것 같다고 생각했습니다!(물론 이는 착각이었음이 금새 판명..)3. 그리고 슬라운드와의 만남이후 들었던 생각들.1) 젊은 아저씨들이 왜 매트리스를..?인테리어 업계에서 일하면서 많은 가구 브랜드들을 관심있게 봐왔음에도 불구하고사실 매트리스하면 에이스침대, 시몬스 등만 생각날 정도로 매트리스가 현재시점에서 새로울게 있나? 하고 생각했었는데요.슬라운드와 만남이후, 좋은 매트리스를 사용해야하는 이유에 대해 납득하게 되었고 국내외 메모리폼 매트리스 브랜드들의 성공사례를 보면서 오래되고 새로울게 없다고 생각했던 낡은 산업이 오히려 혁신의 가능성이 있다는 게 흥미로웠어요.잠이라는게 우리 삶에서 매우 필수적인 요소 중 하나 인데, 보다 좋은 잠을 위해 적극적으로 수면 환경을 개선해야겠다는 생각은 못했던것 같아요.그리고 무엇보다 좋은 매트리스를 개발하겠다는 의지로 걸어온 슬라운드의 발자취가엄청 새롭고 혁신적인 시도들이라기보다, 맨땅에 헤딩하고 낡은 구조에 타협하기 않기 위해 (원래 그런것 또는 익숙함과 편함을 위한 방식 거부) 발도 뛰어 왔다는 점도 재미있었고요. 오히려 이런 집착이 혁신의 발판이라는 생각이 들었어요.국내외 매트리스 스타트업의 혁신사례2) 아직 명확히 정리되진 않았지만 추구하는 가치와 철학에 대한 동의!파랑파랑 슬라운드 / Brand guidelin v.5ㅌ그리고 창업자들이 초기에 정리한 브랜드 가이드 라인을 전달받았습니다."우리가 브랜드가 사람이라면 어떤 생각/행동을 할까?"라는 질문으로 시작하는30페이지에 달하는 브랜드 철학에 대한 이야기들... (부담..)매트리스 업계에서 한번도 등장 없는 identity의 구축을 하고싶다는 사장님들..ㅎㅎ장인적신, 배려심, 실험정신 이라는 브랜드 철학을 바탕으로 전문이면서 센스있는 (배려심있는) 그리고 친근하고 고급스럽고새로운 것을 시도하는!3가지의 브랜드 철학과 5가지 브랜드 아이덴티티 키워드들을 구체적인 예시 상황에 빗대어'슬라운드가 앞으로 어떤 태도와 이미지의 브랜드가 되고 싶은지' 빼곡히 적혀 있었고,아직 일관성 있는 이미지는 아니지만, 슬라운드가 무엇을 추구하는지 명확히 느낄 수 있었습니다. 그리고 그 철학과 가치관에 진심으로 동의했습니다. 4. 내가 좋아하는 브랜드가 될것 같아.이렇게 슬라운드를 만나고  브랜드 가이드 라인을 통해 전달되는 슬라운드가 추구하는 방향을알게 되면서 추구하는 철학과 가치관이 멋지다고 생각했고,무엇보다 내가 좋아하는 브랜드가 될 것 같다는 생각이 들었습니다.그리고 설레는 마음으로 슬라운드 브랜드 아이덴티티 개발 작업에 참여하게 되었습니다.졸업후 석사과정을 하고 있지만, 브랜딩이라는 영역은 공부하면 할수록 아직도 알아야할게 너무나 많고, 하나의 브랜드의 아이덴티티를 만들어 간다는게 정말 어렵고 책임감 있는 일이라는 것을 알기에한편으로 마음이 무겁기도 했지만! 최선을 다해 좋은 결과를 만들겠다고 생각했어요.그리고 앞으로 슬라운드의 팀원으로 소속되어 지난 6개월간 만들어온 슬라운드의 브랜드 아이덴티티 개발과정을 소개할 예정입니다. 사실 단순히 포트폴리오를 보여주기위해 결과물을 공유하는게 아니라, 디자인 과정과 나의 시행착오들을 있는그대로 공유하다는게 처음엔 엄두가 안나기도 했어요.이전까지는 보여주고 싶은 보기 좋은 것들만 포트폴리오로 남기면 되지라고 생각하기도 했고,그렇게 비주얼에 초점을 맞추어서 작업해온 것들고 있고요.그러나 하나의 신생 브랜드에 소속되어 디자이너가 아닌 다른 팀원들과 처음부터 브랜드 개발하는 과정을 경험하면서, 브랜딩은 디자이너 혼자만의 몫이 절대절대 아니라는 것을 절실히 깨닫게 되었습니다.그래서 우리가 무엇을 고민하고 어떻게 해결해왔는지.. (수많은 시행착오들..ㅜㅜ)그 고민의 흔적들을 꼭  나누고 싶다는 생각이 들었습니다. 단순해 보이는 로고 하나가 반년의 (고난의)시간을 거쳐 어떻게 탄생하게 되었는지 지켜봐주세요.
조회수 1308

스타트업! 아이디어가 중요한가?

스타트업인 우리 회사는준비 기간이 긴 편이었다.직장생활은 나름대로회사에 뼈를 묻을 각오로 일 했으니까준비기간에서 빼고,(사실 퇴사 결심을 한 순간부터 창업준비했지만...)실제로는 2013년부터 준비했다고 볼 수 있다.그전에 팀빌딩은 끝난 상황이었고,준비 자금도 적지만 모아 놓았고,아이디어도 3가지 정도 사업계획서로준비 된 상태였다.흔히 스타트업의 3대 요소로아이디어, 멤버, 자금이 꼽힌다.:가끔 4대요소로실행력, 고객, 창업자 정신, 공간 등이 추가되기도 함이번 글에서는아이디어에 대한 이야기를 풀어볼까한다.창업자는 기획자이다.처음부터 팀이 존재한 경우를 제외하고는보통은 창업자가 아이디어를 기획하여 팀원을 구성한다.(출처: JTBC, 비정상회담 중에서)대학생으로 창업 동아리를 구성하여성공스토리에 소개되는 몇몇 예는 정말 소수이다.대다수는 아이디어 공모전 몇 번 나가서수상하고 상금 받아 나누고는이력서 스펙에 한 줄 추가하고 끝나는 경우가 허다하다.물론,내가 아는 대학생 창업가 중에서는정말 빠른 실행력과  지치지 않는 체력으로무서울 정도로 성장하는 스타트업도 있다.부럽기도하고,존경스럽기까지 하다.어쨋든아이디어가 구체화되는데는 많은 시행착오가 수반된다.필자는 아이디어가 창업에서필수요소이기는하지만큰 비중을 차지하지는 않는다고 본다.그 이유는 다음과 같다.1. 아이디어의 불확실성일단 아이디어의 존재 의미가 확실해야 한다.그럴려면 창업자 뿐만아니라 팀원들도 공감해야 하는아이디어가 도출된 근거가 있어야한다.더욱 중요한 것은 그 아이디어가고객에게 필요한 것이냐다.1) 고객조사를 통해 만들어진 아이디어와2) 먼저 만들어졌다가 고객에게 필요성을 묻는 아이디어.전자의 경우는 빠른 피드백을 기반으로 필요성을 확보하였지만,후자의 경우는 많은 수정과 보완 작업이 필요할 것이다.그렇다고 후자가 꼭 나쁘다는 이야기는 아니다.때로는 사용자/고객들도 인지 못하는 니즈가 존재하며,그 니즈를 창업자 또는 개발자가먼저 제시해 주는 경우도 더러 있으니까.다만, 빠른 제품개발과 출시를 위해서는가급적 고객의 니즈를 기반으로 기획된 아이디어가보다 구체화 과정이 단순해지고 명확해진다는 말이다.그런데 말이다.그런 과정을 통해 나온 아이디어가 완전할까?고객의 변덕은 무섭다.니즈가 순식간에 뒤바뀌는 경우가 있다.경기가 불황이거나 신제품의 출시라던가유사제품의 시장 외면을 겪는 경우가 생기면서분명 고객 니즈를 기반으로 만든 아이디어가쓸모없어지는 경우가 허다하다.아니,차라리 아이디어 수준에서이런 일이 생기면 다행이다.제품 양산을 마치고 출시 직전에 이런 일은 대참사다.(들어간 돈이 얼마인데, 들어간 시간이 얼마인데)일반적으로는 고객조사 과정에서아이디어는 수 십번 난도질을 당한다.너덜너덜해서 원래 컨셉과는전혀 다른 아이템이 되기도 한다.2. 아이디어의 구체화 및 경쟁력길가는 사람을 잡고 물어보면,거의 모든 사람들은 자신만의 아이디어가 있다.그러나,그걸 메모하거나 더 나아가 문서화, 도식화 한 사람은 드물다.그리고 한 발 더 들어가서,시장조사/고객조사, 선행연구 등을 수행한 경우는천연기념물과 같이 찾기 힘들다.그런데스타트업이라는 리그에서는그런 준비된 사람들이 왕창 모여 있다.아이디어 수준을 넘어서이미 시제품까지 준비 된 창업자들이 넘쳐난다.벌써 양산 판매중이거나후속 아이템을 출시 준비중인 분도 많다.이런 분들하고동일한 업계에서 경쟁한다고 생각해보라.사실은 이런 분들조차관련 업계에서는 도전자의 위치이다.업계를 쥐락펴락하는 강자는또 따로 있다는 점을 상기하면,나 자신이 얼마나 왜소하게 느껴질까?아이디어의 경쟁력은 물론 차별화에서 나온다.하지만 차별화가 무조건 경쟁력을 높인다고 보긴 어렵다.기존의 제품이나 서비스와 다르다는 점은 과연 강점일까?'왜 이런 다른 업체는 이런 생각을 못 했지?'라는 의문에서 실마리를 찾을 수 있다.아이디어가 구체화하는데기술적인 어려움이 크거나구현에 필요한 시간 또는비용이 많이 소모되는 경우는비록 타 제품이나 서비스보다차별성이 있더라도 마이너스가 될 수 있다.너무 특이해서 고객의 관심을 끌 수도 있지만,너무 특이해서 고객이 난해하게 생각해 외면할 수도 있다.왜냐면 고객들은 익숙한 것을찾는 경험적 선택을 하는 경향이 크기 때문이다.그러니 아이디어의 차별성은양날의 검이다.3. 아이디어에 대한 맹신개발자나 창업자는본인의 아이템에 대해 자식 같다고한다.오냐~내 새끼 하면서 좋은 부분만 보려는 경향이 있다.그리고세계최초~!세계최고~!라는 호칭을 서슴없이 붙인다.일단, 최소한 중국 땅 밟고나서,베이징, 상해, 선전 정도는 둘러보고 와서,"아직은" 세계최초,"어제까지는" 세계최고!라고 우겨볼 수 있다.실제로 몇몇 유망했던 스타트업 대표님들은중국에 다녀와서 심각하게 업종 전환을 고민하더라.제조업에서 무역업으로...(필자도 늘 중국시장을 민감하게 모니터링하고 있다. 아~ 무서운 놈들~!)그리고국내 앱이라던가 핀테크, 서비스업종도중국이 꽤 앞서고 있고,하루에도 수 백가지의 베타서비스이 쏟아지고 있다.아이디어는 시간이 유한하고, 한계가 있으며 불안정하다.고객에게 외면 받기 전에,시장에서부터 유사 서비스/제품으로 외면 받기도 한다.우리 회사의 세 번 째 제품도아이디어 단계에서 수 십번 수정이 들어갔고  시제품 제작 단계에서 20번이 넘게 재설계 됬으며,시금형 제작에서 13번 보완작업이 들어가고지금은 양산준비 단계에서 다시 피드백에 들어가 있다.(출처: 구글, 프로세스 중에서)아! 첫 번째랑 두번째 제품은?첫번째는 아이디어 사업성 조사에서 폐기!(사업성 없음/비용과 인력 제한)두번째는 제품구체화 과정에서 폐기!(기술적 문제/특허 제한 해결불가)필자라고 쉽게, 가볍게 포기한줄 안다면 오산이다.얼마나 마음고생이 심했는지 결정을 내리기까지몇 일 밤을 고민했다.그래도 빠르고 합리적인 결정이 회사의 생존을 좌우하고해결책에 더 가까이 다가갈 수 있다.신박한 아이디어가 아니라팔리는 아이디어/구현가능한 아이디어가중요하다.계속 아는 주변 사장님 이야기를 하게 되는데,아이디어가 특별나게 튀는 것도 아니고,고급기술이 필요한 것도 아니고그냥 고만고만해 보이는 아이템이었는데....우리 중에서 가장 빨리 매출을 내더라고.그리고 매출을 기반으로 쑥쑥 성장하더라고.사실 아이디어보다는 창업자의 능력이라던가팀워크라던가 실행력이 더 중요하다고 본다.뛰어난 아이템보다는보통 아이템이라도 잘 파는, 잘 만드는스타트업이 더 잘 살아남더라.아이디어에 너무 집중하거나 집착하지마라.어느 순간에 그 아이디어는 훅 간다~!차라리팀 관리와 제작/유통 루트확보,거래처 발굴이 더 확실하다.완전 신박한 아이디어나높은 수준의 기술력을 요구하는 아이디어로공모전이나 지원사업에서 빛을 낼 수는 있지만,정작 고객의 손에 쥐어질 때까지,고객이 평가하기까지의제품/서비스로 구현되는데는오히려 적정하고 단순한 아이템,너무 크게 차이나지는 않는 아이템이더 유리하다.아이디어에 매몰되어 있지 마라.우리는 공모전이나 기술개발을 하려는 사람들이 아니라사업을 하는 사람들이다.예상비용과 예상수익,예상기간과 예상인력,예상고객과 예상유통루트 등등에서"예상"이란 말을 지워나가야 하는 사람들이다.#클린그린 #스타트업 #스타트업창업자 #창업자 #창업고민 #고민 #경험공유 #인사이트
조회수 987

업무전화를 알아듣게 해보쟈.

브랜딩 뿐 아니라 모든 업무가 그렇듯 커뮤니케이션은 흔히 4가지로 나뉘어집니다.1. 얼굴보고 하는 미팅2. 글로 주고 받는 메일3. 목소리로 주고받는 유선4. 법정에서 주고받는 소송등등이죠. 물론 4번은 되도록 안하면 좋겠지만, 종종 하고싶기도 하고 은근히 주변엔 이 대화를 하시는 분들이 꽤나 있더군요. 5번 몸의 대화도 있지만 다 큰 어른들이니 그건 잠시 미뤄놓도록 하겠습니다. 일을 함에 있어서 가장 어려운 파트는 눈에 보이지 않는 것을 설명해야 할 때 입니다. 기획, 컨셉, 느낌, 이렇게 만들어주세요 등을 알려야 할 때죠. 물론 상대방이 초안을 잡아주면 좋겠지만, 그는 초안을 잡을 시간이 없습니다. 손으로라도 그려주면 참 좋을텐데라는 생각이 들지만, 뭐 어차피 레퍼런스는 내가 만들어서 주는 편이 오히려 속 편할 때가 있으니 웃으며 넘어갈 수 있습니다.어..어 뭔 말이야?... 기한을 못 맞추겠다고?..문제는 이렇습니다. 전화와 메일은 생각보다 어렵다는 거죠. 특히 위에서 말한 두루뭉술한 것들을 표현해야 할 때는 너도 나도 내 머릿속의 타블렛을 활용하여 제 멋대로 창작활동을 펼집니다. 깔끔하고 간결하게 정돈하기 쉽지 않은 작업이죠. 이러한 커뮤니케이션의 어려움은 오해를 불러일으키고 돈문제를 만들고, 서로를 피곤하게 합니다. 서로 좋지 않은 경험으로 남는 것이죠. 그래서 오늘은 제 짧은 경험들을 되살려 업무메일과 전화를 알아듣게 표현하기에 대해 얘기해보려고 합니다. 오늘은 커뮤니케이션 중 '전화' 에 대해서 알아보겠습니당.전화를 해보자업무전화를 해봅니다. 내선도 있고, 외부전화도 있고, 개인폰으로 받는 전화도 있고, 새벽에 자다가 깨서 받는 전화도 있고 업무전화는 시간장소를 가리지 않습니다. 전화업무는 특성상 피곤을 유발합니다. 특히 우리나라는 '상식적인 시간'이란 게 존재하지 않는 듯해서 24시간 전화대기를 타고 있어야 하는 긴장감이 있죠. 또한 대부분의 전화업무는 그리 좋지 않은 이슈들이 많은터라 전화업무가 많아지면 가만히 앉아서 입만 움직였는데도 온 몸이 두둘겨 맞은 듯 합니다. 어릴 적 교통사고 처리를 담당하는 콜센터에서 근무를 했던 적이 있었습니다. 이 빌어먹을 보험사 전화는 가뜩이나 교통사고가 나서 멘탈이 소보로빵이 된 분들에게 ARS라는 (AstRal Strike = 정신공격) 거대장벽을 제공합니다. '잠시만 기다려 주시면 곧 연결해드리겠습니다.' 라는 말을 400번쯤 듣고나서 분노게이지가 각성모드로 바뀐 분들이 저같은 콜센터 직원에게 다가오는 것이죠. 그들을 마주하는 것은 거대한 슈퍼사이언인을 대적하는 것과 같습니다. 아 물론 저는 일개 지구인이죠. 그렇게 1년 간 다채로운 순우리말 욕을 듣고, 이후 3년간 영업직에서 배운 것 몇 가지를 풀어보겠습니다.1. 안녕하세요는 없습니다. 어디에 누구라고 합시다.애프터모멘트 박창선 대표입니다. (아 대표님이세요? 저 한성일실장입니다) 아 네 안녕하세요!이 순서로 나가는 겁니다. 이 때 '아 네!' 는 반갑게 올려줘야 합니다. 아!!당신이군요!! 라는 느낌으로 보이진 않지만 눈을 동그랗게 뜨고 스마트폰을 두손으로 쥐기도 합니다. 가끔 전화로 안녕하세요!를 하며 직접 고개를 숙이는 분도 있더군요. 뭐 어찌되었든 좋습니다. 안녕하세요는 2번째 문장입니다.2. 다름이 아니라다름이 아니라를 붙입시다. 한템포 쉬어가면서 나도 말정리 하기가 좋습니다. 상대방도 뭐가 다름이 아닌지 궁금하게 만들어줍시다.3. 그 왜 예전에이런 말은 쓰지 않도록 해용. 그..그그 왜 , 예전에 그 말씀하신 거 있잖아요. 그 뭐냐, 그거.... 기억이 나면 다시 전화하도록 합시다.4. 용건부터 말합시다.사정얘기부터 늘어놓는 경우가 있습니다.'아, 저희가 이번에 MDF로 제작하려고 했던 것이 시공업체 쪽에서 조금 이슈가 있다고 하더라구요. 그래서 그 쪽이 자재 들어오면 일정이 조금 늦어진다고 차라리 다른 것이 어떻겠냐고 추천해준 것이 있는데 제가 보니까 그것들도 나쁘지 않더라구요...'이런 식으로 말이죠. 10마디만 더 들으면 눈물없이 들을 수 없는 가슴아픈 사모곡이 될 수도 있습니다. 상대방으로 하여금 7번방의 기적을 본 듯한 느낌을 주려는 것이 아니라면 간결하게 용건부터 말합시다. '제작물품의 소재변경건으로 연락드렸습니다.' 라고.5. 땋땋 얘기하자.'되면 알려주세요'  라는 말은  "하더 거 마저 다아아아 하시고, 밥도 드시고, 데이트도 하신 후, 페북에 글도 올리시고, 푹 한 줌 주무셨다가 꿈결에 불현듯 생각나면 '월요일날 하지 뭐' 하고 미루셔도 되요." 라는 뜻입니다. 그건 상대방을 배려하는 것이 아니예요. 기획사에서 일할 때 느낀 점이 있습니다. 가장 착한 목소리를 한 분들이 후순위로 밀려난다는 것이죠."결재진행도 해야하니 해당 견적과 비교견적 각1부씩 4시반까지 부탁드리겠습니다. 가능하신가요?"이게 깔끔합니다. 부탁드리겠습니다 = 해야한다. 가능하신가요? = 가능해야한다. 라는 의미인데 저기에서 '아니요 불가능한데요' 라고 할 사람은 몇 없습니다. 분명 바쁘다, 지금 외부에 있다 뭐 이런저런 말들이 많겠지만,그 쪽만 바쁜 건 아니니까요. 커뮤니케이션은 정확하고 땋.땋.땋 떨어지게 합시다.6. 부재중 메모엔 제발 회신 전화번호를 적어주세요.= 김대리님 한성물산에서 전화왔는데요? / 응 한성물산 누구? / 김형모 차장님이라는데../ 그게 누구야? / 글쎄요? / 전화번호는? / 아 맞다.. / .... /아..그 번호 뭐드라...아...으....7. 전화로 설명하는 건 의미가 없어요.= 본인은 말하면서 막 눈 앞에 그려지겠지만, 듣는 사람은 공허의 장막을 들추고 우주를 탐험하는 기분입니다.설명은 메일로 주시거나 아니면 파일로 넘겨주세요.8. 어떤 전화들이 올 지 미리 짐작은 해놔야 해요. = 전화 받았는데 '왜 전화하셨어요?' 라는 말투면 상대방이 벙 찔 수 있습니다. 대충 누구에게 연락이 올 것 같고, 어떤 이슈때문일지는 어느 정도 정리를 해놓는 것이 좋습니다. 그럼 대화가 빨리 끝날 수 있죠.9. 전화해서 메일로 넘어가지 마;;;진짜 이런 경우가 은근 많더라구요. 서로 미리 체크도 안되있고, 자료준비도 안된 상태에서 그냥 전화 먼저 하고 나중에 얘기거리를 정리하는 경우인데, 문제가 많습니다. 대화를 한 번 볼까요."이 대표님 저 OO협회 김정화입니다. 수정요청이 몇 가지가 있어서요.""어떤...?..""저번에 했던 그 작업이요.""로고요? 아니면.. 포스터요?""포스터 쪽인 것 같은데..잠시만요 저도 확인해볼께요."(부스럭부스럭)"아 포스터요""아, 네 "어떤 요청이시죠?""그 몇 가지 바꿔야 하는데, 그 위에 그 부분 있잖아요.""아 잠깐만요 지금 외부라서 파일을 보기 힘들어요.""아 그러세요, 그러면...음 이거 정리해서 메일로 드릴께요.""네 감사합니다.""감사합니다.""아 맞다! 대표님 그 통장사본은 언제쯤 주실 수 있으세요?""어? 그거 저번에 보내드렸다고 문자드렸는데. 안왔나요?""아 정말요? 그럼 메일 확인해볼께요! 감사합니다!"=총체적난국...일단 둘 다 문제가 있어요. 이 대표는 어떤 전화가 올 지 미리 체크가 안되어 있는 상태이고, 업무건에 대해 정확히 컨펌여부를 확인하지 않았어요. 추가업무가 진행될 사항이 있는 건은 항상 On going으로 놔두고 긴장하고 있어야 해요. 김정화씨도 문제가 있어요. 일단 미리 확인을 해보지 않고 그냥 무작정 전화만 해버린 케이스예요. 전화해놓고 그제서야 자료를 찾고, 메일을 확인해보겠다고 허둥지둥하고 있는 모습이죠. 결국 커뮤니케이션의 주제가 "메일로 연락드릴께요." 로 끝나버렸습니다. 이건 서로 고구마섭취를 함과 동시에 상호간에 무례한 자식이 될 수 있기 때문에 신경을 좀 써야해요.10. 복명복창한당.콜센터에서 전화교육받을 때나 영업뛰던 시절엔 전화 인바운드 롤플레이훈련을 정말 많이 했어요. 이 때 선배들이 알려준 꿀팁은 복명복창입니당. 상대가 했던 말을 다시 말해서 크로스체크하는 거죠."12일날 1차시안 진행하고, 15일을 수정안가지고 다시 미팅하는 걸로 하시죠.""네 좋습니다 그럼 12일날 1차시안 드리고, 15일날 수정안 가지고 봽겠습니다!"11. 끊고나서 아차! 하지 않으려면끊고나면 생각나서 다시 전화하게 되는...아래의 말을 한번 분석해볼께요."그럼 4시까지 서류정리해서 메일로 보내주시구요, 17일날 미팅건은 대표님께 확인해서 추후 알려드리도록 할께요. 맞다, 영상제작건은 어느정도 진행되고 있나요? 급한 건 아닌데 위에 보고할 사항이 있어서요."4시 서류정리 후 전달17일 미팅건 상대측 대표확인 요추후 언제 어떻게 알려줌?영상1차수정작업 완료/1시간 이내로 발송보고할 때 어떤 사항들이 필요하신지?이렇게 5가지 정보로 나뉘어지는데 이때 내가 확인해야 할 게 3가지이고, 재질문 해야 하는 것이 2가지입니다.그럼 10번에서 말했던 것처럼 3가지는 크로스체크해주고, 2가지는 되물어야 합니다."4시까지 통장사본, 사업자등록증, 거래명세서 취합해서 보내드릴께요. 17일 미팅건은 확인해주시고 언제쯤 확인 가능할까요? (아마 오늘 중으로 가능할 것 같아요. 돌아오시면 바로 여쭤볼께요), 네 그러면 확인 후 19시까지 문자로 남겨주시면 확인하도록 하겠습니다. 영상은 1차수정완료되서 1시간내로 드릴거예요. 혹시 보고하실 때 추가로 필요하신 사항있나요? (아 수정사항 어디 반영된건지 알려드려야 해서요.) 그럼 수정된 부분 보고서에 표시해놓을 테니 별도로 챙기시면 될 듯합니다.(감사합니다)"이런식으로 전화받으면서 내가 주어야 할 것들과 내가 들어야 할 것들을 명확하게 나눠보는 것이 좋아요. 적으란 얘기죠. 우린 어릴 적부터 한 귀로 흘리는 연습을 자주해서 들은 말 중 90%는 흘려버려요. 그러니 손의 도움을 좀 받도록 합시다.말을 잘하는 것과 말이 많은 것은 엄연히 다른 얘기입니다. 업무전화의 생명은 간결함과 명확성이예요. "즈음, 추후, 확인하고 알려드릴께, 되면 알려주세요, 보내놓은 상태다, 아마도..." 등등의 뜬구름구렁이 표현은 좋지 않아요. 시간과 업무내용을 명확히 해놓으면 당장 할 일이 생기긴 하겠지만, 어쨋든 순서를 정할 수는 있습니다.뿌연 커뮤니케이션은 이런 결과를 만들 수 있습니다.근데 두루뭉술해지면 대부분의 일들을 다 후순위로 밀어버리는 것이 또 사람의 본성이죠. 인간의 게으름은 끝이없고, 같은 실수를 반복합니다. 후순위로 밀려난 거대하고 사소한 일더미는 결국 내일의 나에게 '누락과 좆됨'을 선사합니다. 그러니 서로서로 정확하고 깔끔한 대화로 가열차게 혼나거나 멱살잡고 싸울 일을 최소화 해보도록 합시다.메일 쓰기편에서 다시 만나용.
조회수 3435

KBS 신입사원 입사후기 - [장아련] 한 시절의 미완성이 나를 완성시킨다(방송경영(경영기획) 편)

딸과 많은 시간을 보내지 못한 아버지가, 암으로 딸을 먼저 보낸 후 쓴 책 <딸에게 보내는 굿나잇 키스>. 그 한 구절을 인용하자면 다음과 같습니다. “딱 한 번이라도 좋다. 낡은 비디오 테이프를 되감듯이 그때의 옛날로 돌아가자. 나는 펜을 내려놓고, 읽다 만 책장을 덮고, 두 팔을 활짝 편다. 너는 달려와 내 가슴에 안긴다. 내 키만큼 천장에 다다를 만큼 널 높이 들어 올리고 졸음이 온 너의 눈, 상기된 너의 뺨에 굿나잇 키스를 하는 거다.” ‘후회’라는 한 단어로는 미처 담지 못할, 딸을 잃어버린 아버지의 진심을 전하는 말입니다. 감히 딸을 잃은 아버지의 마음에 빗댈 수는 없겠으나, 이와 같은 후회가 남지 않도록 끊임없이 마음에 되새겼던 이 말 덕택에, 저 역시 이번 길을 완주할 수 있었습니다. 완주 후 숨을 고르고 있는 지금, 정보 부족, 적은 인원, 높은 경쟁률, 자격증, 스펙 등 많은 언덕들과 싸우기 위해 준비하고 계신, 혹은 이런 언덕들로 인해 지쳐있을 누군가를 위해 조금이나마 도움이 될만한 문장들을 적어보고자 합니다. 1% 차별성을 만들자. 방송사를 준비하시는 분들의 경우 엄두도 못 낼 높은 스펙과 역량을 갖고 계신 경우가 대부분입니다. 그 가운데서 저는 휴학 없이 달려온 대학교 4년, 경영 또는 언론과 관련 없는 학과, 방송 경험 부재의 상태에서 3개월이라는 상당히 짧은 기간 동안에 KBS를 준비해야 했습니다. 그래서 자신만의 차별성으로, 자신만의 존재감을 드러내기 위해 저는 오히려 방송사 입사의 정석이라고 알려진 길만을 가지 않도록 노력했습니다. 모두들 방송과 관련된 경험들로 자기소개서를 채워나갈 때, 방송과는 전혀 상관 없는 밴드나 법 동아리, 지리, 교생 실습 이야기 등으로 자기소개서를 작성하며 오롯이 저의 이야기를 전달하는데 집중했습니다. ‘형식이 너무 과감하다’, ‘소재가 위험하다’는 주변 사람들의 만류에도 제 방향에 확신이 있다면 이를 포기하지 않았습니다. 소위 KBS에 들어오기 위한 ‘높은 정량’에 속하지 않음에도 서류 전형을 통과할 수 있었던 건, 바로 이런 시도들에 있지 않았나 예상합니다. 우리나라의 법에서 모든 죄를 열거하기 보다 특정 죄목을 법관의 재량으로 해석할 수 있도록 허용하는 이유는, 지나치게 원칙을 지키다 보면 오히려 허점이 드러나 선량한 피해자가 발생할 수 있기 때문입니다. 선배님들의 훌륭한 입사 사례도 분명 도움이 되겠지만, 이를 바탕으로 본인에게 가장 적합한 방법을 찾고, 그 속에서 본인의 차별성을 드러낼 수 있는 방향을 잡는 것이 필요합니다. 정답이 없는 경쟁. 필기 과정을 보며 들었던 첫 번째 생각입니다. 어마한 경쟁률을 뚫어야 한다는 것도 무서웠지만, 도대체 ‘상식’과 ‘논술’이라는 이 모호한 과제를 어떻게 준비해야 할 지가 더 난감했습니다. 부족한 시간 속에서도 이를 극복할 수 있는 방법이 필요했습니다. -상식 공략 방안은, 자신만의 정리 본을 만드는 것입니다. 사실 상식 시험은 스터디에서 각 분야의 지식들을 취합하는 경우가 대부분이었습니다. 분명 효율적이겠지만, 성향이 다른 개인들이 모여 취합하다 보니 나타나는 단점도 있었습니다. 그래서 저는 서점에 가서 상식에 대한 여러 책들을 비교한 뒤, 넓은 범위를 심도 있게 다루는 책 한 권을 선정했습니다. 그리고 책에 나오는 용어들을 스스로 정리하여 한 권을 마스터하는데 중점을 두었습니다. 여기에 최근 이슈들은 여러 언론사들의 기사를 취합하여 보충했습니다. 실제로 제가 상식을 많이 맞은 편이 아니라서 확언하지는 못하겠으나, 그래도 약술(5문제)과 객관식(35문제)이 혼합된 상식 시험에서 평균 점수라도 받을 수 있었던 건, 해당 방법 덕택이라 생각합니다. -논술 공략 방안은 자신만의 논리 구조들을 끊임없이 재생산해내는 것입니다. 논술에서 어떤 주제가 나올 지는 정말 미지수이기에, 어떠한 주제가 나오더라도 근거로 사용할 수 있는 소스들을 최대한 많이 보유하는 것이 중요합니다. 가령 로이터, AP에서 시행하고 있는 ‘팩트 체크 전담팀’ 소스를 ‘신뢰도 회복’이라는 주제에 맞춰 구조화했다면, 이는 ‘가짜 뉴스에 대한 대응 방향’라는 주제에도 하나의 근거로 활용될 수 있고, 나아가 팩트체크 전담팀-> 신뢰도 및 저널리즘의 회복-> 2030세대의 유입의 논리 구조로도 이어질 수 있습니다. 이렇게 최대한 많은 소스들을 접하고자 노력하고, 해당 소스들을 여러 개의 논리 구조로 만들어보고자 노력했습니다. 또한 항상 글을 쓸 때 ‘포용, 인내, 주관, 긍정’의 뉘앙스가 많이 풍기던 글을 보다 명백히 전달할 수 있도록 논술을 작성하는 내내 ‘객관, 비판, 비난’의 눈을 되새긴 것이 큰 도움이 되었습니다. 상황을 주도하는 작가가 되자. 면접 상황에서 주도권을 잡는 방안을 고민하시면 좋겠습니다. 사실 면접관님들이 저희에게 어떤 질문을 던질 지는 알 수 없습니다. 아마도 그 날의 상황, 이전 면접자의 대답, 혹은 면접관님들의 가치관 등등에 따라 영향을 받을 겁니다. 이 모든 걸 대비하여 예상 질문을 만들고, 예상 답변을 만들어 암기하는 것은 비효율적이라 생각합니다. 대신 간략한 답변 속에서도 면접관님들이 궁금해 할 만한 trigger들을 본인의 답변 안에서 만드는 연습을 계속 하시는 것이 더 중요합니다. 면접 시뮬레이션도 중요하지만, 한 질문에 대해 trigger들을 심어놓고, 그 trigger들로 면접관님들을 유인하여 본인이 준비한 답변을 말할 수 있도록 해야 합니다. 그저 준비한 질문들이 나오기만을 바라기보다는, 본인이 면접 상황을 구성해나가는 작가라 생각하고, 본인이 원하는 방향으로 면접을 이끌고 가야 할 것 같습니다. 나아가 자신에 대한 성찰도 필요합니다. 꼬리에 꼬리를 무는 질문들을 끊임없이 던져야 합니다. ‘왜 여타의 언론 기관이 아닌 방송국을 택했는지’, ‘방송국 중에서는 왜 하필 KBS인지’, ‘KBS라는 방송국 내에서 PD, 기자 직군이 아닌 경영을 택한 이유는 무엇인지’ 질문했습니다. 보기에 그럴 듯한 답변이 아닌, 스스로가 인정할 수 있고, 스스로를 합리화시킬 수 있으며, 스스로가 당당한 답변을 준비하기 위해 노력했습니다. 그리고 그런 진심이 분명 최종 면접에 통했다고 확신합니다.  하고 싶은 일을 평생의 업으로 할 수 있다는 축복을 받은 제가, 아직은 그 준비과정에 있는 분들께 조언의 말씀을 드리는 것 자체가 어불성설이라는 점을 잘 압니다. 그러기에 제가 전해드리는 이 작은 글들이 완주의 유일한 길이 아니라는 것만은 꼭 알려드리고 싶었습니다. 그러나 꼭 얘기하고 싶은 한 마디는, 본인과 본인의 인생이 특별함 그 자체를 증명하고 있다는 사실입니다. 확률이 지나치게 낮은 이 시험에 도전하다 보면, 완벽하게 준비하기 위해 시험에 나를 맞추고, 부족한 나의 모습을 비난하고, 완벽하게 준비하지 못한 자신을 탓하기도 합니다. 허나 완벽하지 않고 조금 서툰, 미완성의 답변과 인생이 오히려 더 매력적으로 다가오는 순간이 있을 겁니다.  ‘나는 오래 멈춰있었다. 한 시절의 미완성이 나를 완성시킨다.’는 이훤 시인의 시처럼, 지금의 미완성을 너무 탓하지 말고 훗날을 기약하시길 바랍니다. 아주 부족한 제가 길을 완주한 만큼, 글을 읽고 계시는 여러분 모두들도 분명 무궁한 가능성이 존재할 거라 생각합니다. 동일한 축복을 함께 누릴 수 있는 날이 오기를, 동료가 되어 함께 발맞추어 투닥 거릴 수 있는 날이 오기를, 진심을 담아 기대하고 고대하겠습니다.#한국방송공사 #KBS #KBS공채 #KBS신입채용 #KBS채용 #입사후기
조회수 2008

더 빠른 Android App Build

Android App Build의 변화Android App 개발에서 빌드는 올해 중순을 기점으로 큰 변화를 가져왔습니다.Ant 에서 Gradle 로… Eclipse 에서 Android Studio 로…Android Studio 는 JetBrains 사의 IntelliJ 의 Community 버전을 커스터마이징한 것입니다.Gradle 은 Ant 의 빌드 기능 에 Maven 의 의존성 관리 기능이 접목된 빌드 툴입니다. 그만큼 제공하는 기능이 다양하며 동시에 의존성에 대한 문제도 함께 해결이 되었습니다.큰 변화는 장점과 단점 모두를 가져왔습니다. 대표적인 장점은 기존에 Eclipse 에서는 한계가 있었던 Plugin 기능이 더욱더 다양해졌다는 것입니다. 반면 갑작스럽게 바뀐 IDE 와 빌드툴은 여전히 큰 장벽으로 존재하고 있습니다.특히 Gradle 의 성능 문제는 줄곧 거론되었습니다. Eclipse 에서는 빠르게 빌드되던 것이 Gradle 기반으로 전환되면서 적게는 2배에서 5배 이상 오래 소요되는 문제를 가져오게 되었습니다.그러한 문제는 토스랩의 안드로이드 팀도 빗겨갈순 없었습니다.코딩-빌드-실행이라는 반복적인 패턴에서 빌드에 소요되는 시간이 개발의 흐름을 끊게 되는 상황에서 이를 개선하는 것은 필수적인 요소였습니다.이 포스팅은 그동안 잔디의 안드로이드 팀이 빌드 속도를 개선하기 위해 노력했던 흔적들의 모음입니다.New Android App Build System1. Bazel (Google)본디 Android 만을 위한 빌드는 아니고 iOS 까지 빌드 할 수 있는 통합 빌드 시스템이라고 보시면 됩니다. Google 의 빌드 시스템인 Blaze 에서 파생된 빌드 프로젝트로 현재 베타로 등록, 진행되고 있습니다.2. Buck (Facebook)Bazel 보다는 좀 더 다양한 언어를 지원하기 위한 프로젝트로 보여집니다. 실제로 Go, Rust 등 다양한 언어를 지원하는 빌드 툴이라고 생각하시면 됩니다.3. Pants (Twitter, FourSquare, Square)3개의 회사가 협동해서 만든 빌드 툴입니다.특이점은 Bazel 만 Mobile Platform 을 위해 개량된 빌드 툴이고 2개는 좀 더 다양한 빌드 환경을 제공한다는 것입니다.Build 시스템의 성능들1. Bazel| —-| 출처 : Bazel(http://bazel.io/docs/mobile-install.html)|구글의 자료에 의하면 기존에 비해 4배~10배 의 성능 향상이 있다고 합니다.2. Buck|**Gradle**|**Buck**| | ----|----|----|----| clean build|31s|6s|5x| incremental build|13s|1.7s|7.5x| no-op build|3s|0.2s|15x| clean install|7.2s|7.2s|1x| incremental install|7.2s|1.5s|4.8x| 출처: Buck (https://buckbuild.com/article/exopackage.html)Gradle 과 비교Gradle 팀에서는 Bazel 에 대해서 2015년 3월 포스팅에 아래와 같이 평하였습니다.Gradle 팀이 꼽은 Bazel 의 단점Bazel 은 구글의 특화 되어 있으며 쉽게 빌드 할 수 있을만큼 고수준 상태가 아니다확장성이 떨어진다.성능은 의존성이 해결된 이후의 문제이다.*nix 환경(Mac, 유닉스, 리눅스를 지칭)에서만 가능하다. 아직 많은 엔터프라이즈 툴들이 .Net 기반이다.(51%)플러그인을 위한 생태계가 구성되어 있지 않다.결론각각의 빌드 시스템들이 제공해주는 정보에 따르면 새로운 빌드 시스템은 큰 차이를 보여주는 빌드 환경을 제공해줍니다. 하지만 그런 이점에도 불구하고 잘 알려지지 않은 이유는 설정에 큰 어려움이 있기 때문입니다. Gradle 과 Android Plugin 에서 제공해주던 것을 직접 스크립트로 작성을 해야하며 각각의 의존성에 대해서도 직접적으로 명시를 해줘야 하기 때문에 정교하고 어려운 작업입니다. 또한 개별적으로 Plugin 을 제공하지 않아 Crash Report 를 위한 툴이나 Build 과정에서 추가적인 작업들이 필요한 경우에도 별도의 작업을 필요로 합니다.이러한 어려움에 기존의 Gradle 에서 새로운 빌드 환경으로의 전환은 쉽지 않으며 끊임없는 도전이 될 것입니다.그래서 잔디의 안드로이드 팀이 선택한 것은 Gradle 에서 성능 극대화 하기 입니다.Gradle 의 성능 개선하기1. Gradle 의 최신화$> vi $project/gradle/wrapper/gradle-wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-all.zip2. Android Gradle Plugin 최신화buildscrpt { dependencies { classpath 'com.android.tools.build:gradle:1.5.0' } }3. 최소 지원 기기 설정하기android { productFlavors { dev { minSdkVersion 21 } prod { minSdkVersion 14 } } }minSdkVersion 을 LOLLIPOP 으로 설정하게 되면 Build 하는 과정에서 큰 부분이 생략이 되고 특히 MultiDex 를 설정한 프로젝트에서 더 큰 효과를 보실 수 있습니다. Android 는 컴파일 및 패키징과정에서 Class to Dex 와 Merge Dex 을 거치게 됩니다. 이때 하지만 LOLLIPOP 부터는 art 기반이기때문에 Merge Dex 과정이 생략되기에 빌드 성능이 크게 개선됩니다. 단, API 21을 바라보기때문에 lint 나 개발 과정에서 API 특화 대응이 되질 않을 수 있습니다. 유의해서 API 를 사용해주세요.4. Gradle 속성 추가$> vi $project/gradle.properties org.gradle.daemon=true org.gradle.parallel=true org.gradle.jvmargs=-Xmx768m5. DexOption 추가android { dexOptions { incremental true } }※incremental 은 잠재적 오류가 있을 수 있으니 조심해서 사용하라고 합니다. (참고링크)빌드 성능 비교빌드 환경 : MacBook Pro Retina 2012 (i7 2.3Ghz, 8GB Ram)|**변경 전**|**변경 후**| | ----|----|----|----| SingleDex clean build|57s|47s|1.2x| SingleDex incremental build|16.3s|9.6s|1.7x| MultiDex clean build|71s|71s|1x| MultiDex incremental build|48s|17.6s|2.7x| Incremental Build 를 보면 Single Dex, Multi Dex 모두에서 주목할만큼 성능 향상이 있습니다. 개발 과정에서는 Incremental Build 가 대다수의 빌드임을 감안한다면 Gradle 옵션을 수정이 개발 과정에서도 충분히 좋은 성능을 얻을 수 있음을 알 수 있습니다.코딩-빌드-실행을 반복해야하는 패턴에서 최대한 코딩과 테스트에 집중할 수 있는 환경을 만들기 위해 했던 많은 시도들이 다른 안드로이드 개발자분들에게 큰 도움이 되었으면 합니다.#토스랩 #잔디 #JANDI #개발 #개발자 #개발팀 #모바일 #안드로이드 #Android #꿀팁
조회수 1143

레진 기술 블로그 - AWS Auto Scalinging Group 을 이용한 배포

레진코믹스의 서버 시스템은 잘 알려진대로 Google AppEngine에서 서비스되고 있지만, 이런저런 이유로 인해 최근에는 일부 컴포넌트가 Amazon Web Service에서 서비스되고 있습니다. AWS 에 새로운 시스템을 셋업하면서, 기존에 사용하던 PaaS인 GAE에서는 전혀 고민할 필요 없었던, 배포시스템에 대한 고민이 필요했습니다. 좋은 배포전략과 시스템은 안정적으로 서비스를 개발하고 운영하는데 있어서 필수적이죠.초기에는 Beanstalk을 이용한 운영에서, Fabric 을 이용한 배포 등의 시행착오 과정을 거쳤으나, 현재는 (스케일링을 위해 어차피 사용할 수밖에 없는) Auto Scaling Group을 이용해서 Blue-green deployment로 운영 중입니다. ASG는 여러 특징 덕분에 배포에도 유용하게 사용할 수 있습니다.ASG를 이용한 가장 간단한 배포는, Instance termination policy 를 응용할 수 있습니다. 기본적으로 ASG가 어떤 인스턴스를 종료할지는 AWS Documentation 에 정리되어 있으며, 추가적으로 다음과 같은 방식을 선택할 수 있습니다.OldestInstanceNewestInstanceOldestLaunchConfigurationClosestToNextInstanceHour여기서 주목할 건 OldestInstance 입니다. ASG가 항상 최신 버전의 어플리케이션으로 스케일아웃되게 구성되어 있다면, 단순히 인스턴스의 수를 두배로 늘린 뒤 Termination policy 를 OldestInstance 로 바꾸고 원래대로 돌리면 구버전 인스턴스들부터 종료되면서 배포가 끝납니다. 그러나 이 경우, 배포 직후 모니터링 과정에서 문제가 발생할 경우 기존의 인스턴스들이 이미 종료된 상태이기 때문에 롤백을 위해서는 (인스턴스를 다시 생성하면서) 배포를 다시 한번 해야 하는 반큼 빠른 롤백이 어렵습니다.Auto scaling lifecycle 을 이용하면, 이를 해결하기 위한 다른 방법도 있습니다. Lifecycle 은 다음과 같은 상태 변화를 가집니다.기본적으로,ASG의 인스턴스는 InService 상태로 진입하면서 (설정이 되어 있다면) ELB에 추가됩니다.ASG의 인스턴스는 InService 상태에서 빠져나오면서 (설정이 되어 있다면) ELB에서 제거됩니다.이를 이용하면, 다음과 같은 시나리오로 배포를 할 수 있습니다.똑같은 ASG 두 개를 구성(Group B / Group G)하고, 그 중 하나의 그룹으로만 서비스를 운영합니다.Group B가 라이브 중이면 Group G의 인스턴스는 0개입니다.새로운 버전을 배포한다면, Group G의 인스턴스 숫자를 Group B와 동일하게 맞춰줍니다.Group G가 InService로 들어가고 ELB healthy 상태가 되면, Group B의 인스턴스를 전부 Standby로 전환합니다.롤백이 필요하면 Standby 상태인 Group B를 InService 로 전환하고 Group G의 인스턴스를 종료하거나 Standby로 전환합니다.문제가 없다면 Standby 상태인 Group B의 인스턴스를 종료합니다.이제 훨씬 빠르고 안전하게 배포 및 롤백이 가능합니다. 물론 실제로는 생각보다 손이 많이 가는 관계로(특히 PaaS인 GAE에 비하면), 이를 한번에 해주는 스크립트를 작성해서 사용중입니다. 대략 간략하게는 다음과 같습니다. 실제 사용중인 스크립트에는 dry run 등의 잡다한 기능이 많이 들어가 있어서 걷어낸 pseudo code 입니다. 스크립트는 사내 PyPI 저장소를 통해 공유해서 사용 중입니다.def deploy(prefix, image_name, image_version): '''Deploy specified Docker image name and version into Auto Scaling Group''' asg_names = get_asg_names_from_tag(prefix, 'docker:image:name', image_name) groups = get_auto_scaling_groups(asg_names) # Find deployment target set future_set = set(map(lambda g: g['AutoScalingGroupName'].split('-')[-1], filter(lambda g: not g['DesiredCapacity'], groups))) if len(future_set) != 1: raise ValueError('Cannot specify target auto scaling group') future_set = next(iter(future_set)) if future_set == 'green': current_set = 'blue' elif future_set == 'blue': current_set = 'green' else: raise ValueError('Set name shoud be green or blue') # Deploy to future group future_groups = filter(lambda g: g['AutoScalingGroupName'].endswith(future_set), groups) for group in future_groups: asg_client.create_or_update_tags(Tags=[ { 'ResourceId': group['AutoScalingGroupName'], 'ResourceType': 'auto-scaling-group', 'PropagateAtLaunch': True, 'Key': 'docker:image:version', 'Value': image_version, } ]) # Set capacity, scaling policy, scheduled actions same as current group set_desired_capacity_from(current_set, group) move_scheduled_actions_from(current_set, group) move_scaling_policies(current_set, group) # Await ELB healthy of instances in group await_elb_healthy(future_groups) # Entering standby for current group for group in filter(lambda g: g['AutoScalingGroupName'].endswith(current_set), groups): asg_client.enter_standby( AutoScalingGroupName=group['AutoScalingGroupName'], InstanceIds=list(map(lambda i: i['InstanceId'], group['Instances'])), ShouldDecrementDesiredCapacity=True ) def rollback(prefix, image_name, image_version): '''Rollback standby Auto Scaling Group to service''' asg_names = get_asg_names_from_tag(prefix, 'docker:image:name', image_name) groups = get_auto_scaling_groups(asg_names) def filter_group_by_instance_state(groups, state): return filter( lambda g: len(filter(lambda i: i['LifecycleState'] == state, g['Instances'])) == g['DesiredCapacity'] and g['DesiredCapacity'], groups ) standby_groups = filter_group_by_instance_state(groups, 'Standby') inservice_groups = filter_group_by_instance_state(groups, 'InService') # Entering in-service for standby group for group in standby_groups: asg_client.exit_standby( AutoScalingGroupName=group['AutoScalingGroupName'], InstanceIds=list(map(lambda i: i['InstanceId'], group['Instances'])) ) # Await ELB healthy of instances in standby group await_elb_healthy(standby_groups) # Terminate instances to rollback for group in inservice_groups: asg_client.set_desired_capacity(AutoScalingGroupName=group['AutoScalingGroupName'], DesiredCapacity=0) current_set = group['AutoScalingGroupName'].split('-')[-1] move_scheduled_actions_from(current_set, group) move_scaling_policies(current_set, group) 몇 가지 더…Standby 로 돌리는 것 이외에 Detached 상태로 바꾸는 것도 방법입니다만, 인스턴스가 ASG에서 제거될 경우, 자신이 소속된 ASG를 알려주는 값인 aws:autoscaling:groupName 태그가 제거되므로 인스턴스나 ASG가 많아질 경우 번거롭습니다.cloud-init 를 어느 정도 최적화해두고 ELB healthcheck 를 좀 더 민감하게 설정하면, ELB 에 투입될 때까지 걸리는 시간을 상당히 줄일 수 있긴 하므로, 단일 ASG로 배포를 하더라도 롤백에 걸리는 시간을 줄일 수 있습니다. 저희는 scaleout 시작부터 ELB에서 healthy 로 찍힐 때까지 70초 가량 걸리는데, 그럼에도 불구하고 아래의 이유 때문에 현재의 방식으로 운영중입니다.같은 방식으로 단일 ASG로 배포를 할 수도 있지만, 배포중에 혹은 롤백 중에 scaleout이 돌면서 구버전 혹은 롤백 버전의 인스턴스가 투입되어버리면 매우 귀찮아집니다. 이를 방지하기 위해서라도 (Blue-green 방식의) ASG 두 개를 운영하는게 안전합니다.같은 이유로, 배포 대상의 버전을 S3나 github 등에 기록하는 대신 ASG의 태그에 버전을 써 두고 cloud-init 의 user-data에서 그 버전으로 어플리케이션을 띄우게 구성해 두었습니다. 이 경우 인스턴스의 태그만 확인해도 현재 어떤 버전이 서비스되고 있는지 확인할 수 있다는 장점도 있습니다.다만 ASG의 태그에 Tag on instance 를 체크해 두더라도, cloud-init 안에서 이를 조회하는 경우는 주의해야 합니다. ASG의 태그가 인스턴스로 복사되는 시점은 명확하지 않습니다. 스크립트 실행 중에 인스턴스에는 ASG의 태그가 있을 수도, 없을 수도 있습니다.굳이 인스턴스의 Lifecycle 을 Standby / InService 로 전환하지 않고도 ELB 를 두 개 운영하고 route 53 에서의 CNAME/ALIAS swap 도 방법이지만, DNS TTL은 아무리 짧아도 60초는 걸리고, JVM처럼 골치아픈 동작 사례도 있는만큼 선택하지 않았습니다.물론 이 방법이 최선은 절대 아니며(심지어 배포할때마다 돈이 들어갑니다!), 현재는 자원의 활용 등 다른 측면에서의 고민 때문에 새로운 구성을 고민하고 있습니다. 이건 언젠가 나중에 다시 공유하겠습니다. :)
조회수 7004

늑대 VS 개. 당신은 어떤 유형인가?

얼마 전, 개와 늑대의 차이에 대한 흥미로운 실험을 한 다큐멘터리를 봤다. 실험자는 일부로 고기를 먹기 힘들게 배치해 놓은 뒤 개와 늑대가 어떻게 대처하는 지를 알아보았다.개와 늑대는 얼추 조상도 비슷하여 시베리안 허스키와 늑대는 크게 분간도 안 간다. 그런데, 외관과 달리 실험 결과는 개와 늑대의 확연한 차이를 보여줬다. 늑대는 끝까지 혼자 고기를 꺼내먹으려 애썼다. 반면, 개는 고기를 먹으려 몇 번을 시도한 뒤 쉽지 않자 옆에 있는 사람에게 불쌍한 표정으로 고기를 꺼내 달라는 듯 쳐다봤다. 개는 문제 해결을 위해 인간에게 의존하게끔 진화한 것이다. 개는 더 강한 이빨도, 발톱도, 근육도 필요가 없게끔 진화했고, 고양이나 늑대와 달리 야생에서 살아남을 수 없는 동물이 되어버렸다.'인간에게 의존하여 문제를 해결한다'라는 개의 좋은 학습력이 개라는 동물을 지금까지 생존하게끔 만든 것이다. 많은 동물들이 인간에 의해 멸종했지만 개는 꿋꿋이 살아남아 지금도 우리의 반려'견'으로서 어떻게 보면 인간보다도 더 좋은(?) 대우를 받고 있다.늑대와 개의 차이를 드러낸 실험늑대는 인간에게 길들여지는 것이 불가능할 정도로 야생성이 강하다. 또한 '비열하다'라고 평가할 만큼 인간에 대한 충성도가 매우 낮고 조금도 의지하지 않는다. 늑대는 수세대에 걸쳐 더 강하고 더 빠르고 더 영리하게 진화했다. 늑대는 지금도 야생에서 살아남고 있고, 타고난 사냥꾼으로서 입지를 굳히고 있다.즉, 늑대는 오랜 시간에 걸쳐 문제 해결 능력을 매우 느리게 체득해온 반면, 개는 태어나자마자 인간을 통해 대부분의 문제를 해결해왔다. 우리가 보기엔 늑대가 바보처럼 보일 수 있다. 그러나, 개를 야생에 던져놓으면 개는 순식간에 바보가 되어버린다. 지구 상에 어떠한 개도 늑대를 이길 수 없다. 어떤 이들은 핏불이나 로트와일러 같은 전투형으로 개량된 개가 늑대를 이길 수 있다고 주장하는데, 늑대와 개의 심폐지구력 자체가 다르기 때문에 늑대를 결코 이길 수 없다.투견끼리는 서로의 목을 물어 제압을 하려 한다. 반면, 늑대는 개의 몸통을 물어 갈비뼈를 부러뜨릴 정도의 힘을 갖고 있다. 실제로 대부분의 늑대와 개의 싸움을 보면 늑대가 개의 몸통을 물어 곧바로 내장까지 뜯어내는 방식으로 싸움이 끝난다. 개는 결코 늑대를 이길 수 없다. 아무리 개량된 투견이라 할 지라도, 인간에 의해 개량된 투견은 아주 짧은 시간 동안 투견장에서 승리하기 위해 개량됐기 때문에 심폐지구력이 매우 낮다. 인내심이 강한 개라고 할 지라도 심폐지구력이 월등한 늑대와는 상대가 안된다. 늑대는 심폐지구력이 월등하면서도 싸울 때 즉각적으로 달려드는 것이 아니라 심리전을 계속하며 느리고 차분하게 한 방을 노린다. 오랜 세대에 걸쳐 야생에서 살아남을 수 있는 전투력을 갖게 된 늑대와 인간에 의해 개량되고 길러진 개는 이렇게 큰 차이를 갖는다.늑대형 창업자와 개형 창업자그럼에도 불구하고, 개는 늑대보다 훨씬 오랫동안 행복하게 살아남는다. 확률적으로 죽을 확률이 늑대에 비해 훨씬 낮다. 개가 아프면 인간이 동물병원에서 치료를 해준다. 반면, 늑대는 작은 상처에도 기생충이 감염되면 죽어야 된다. 결국, 개와 늑대의 차이는 둘 사이에 어떠한 우월성도 갖지 않는다. 그저 다를 뿐이다.이 다큐멘터리를 보고 창업자의 삶도 이와 크게 다르지 않다는 생각이 들었다.나는 개형 창업자와 늑대형 창업자가 있다고 본다. 개형 창업자와 늑대형 창업자는 둘이 싸우는 것이 아니기 때문에 우열을 가릴 수 없다. 그저 두 부류의 창업자 모두 제품-시장 핏을 맞추기 위해 시장과, 기존의 패러다임 속에서 고독하게 싸울 뿐이다. 어떤 창업가는 관계를 통해 대부분의 문제를 해결한다. 대부분 이런 창업자들의 문제 해결 능력은 극도로 뛰어나다. 대기업을 나와 창업을 한 창업자나, 해외 유명대학을 나와 끈끈한 네트워크를 갖고 창업한 창업자들이 이런 유형에 해당한다. 유명한 기업인으로는 잭 웰치나 아마존의 제프 베조스 같은 사람들이 이러한 개형 창업자에 속한다고 본다.많은 사람들이 창업자의 학력이 중요하냐고 묻는 것을 보았다. 그런데, 잘 생각해보면 안중요할 수가 없다. 학력이 좋거나 대기업 출신인 사람들이 성공확률이 높은 것은 당연한 것이다. 그들이 그러한 경험을 갖기까지의 인내심과 노력도 그렇지만, 그 이후 구축된 관계들, 그리고 그것을 통한 문제 해결 능력은 결코 무의미한 것이 아니다. 그들이 온갖 노력 끝에 얻은 '관계'와 '안정성'은 언제 어디서든 힘을 발휘한다. 반면, 늑대형 창업자가 있다. 뭔가 늑대라고 하니까 더 멋있어 보일지 모르겠으나, 현실적으로 비즈니스를 수행할 때 어떠한 관계도 없는 경우 실패 확률이 대단히 크다. 지금의 늑대는 강하지만, 그러한 늑대가 태어나기까지 수세대에 걸쳐 수많은 늑대들이 죽음을 맞이했다. 결국, 늑대형 창업자의 경우 맨땅에 헤딩을 하는 경우가 많고 이때 들어가는 시간이나 비용적인 부분이 굉장히 크다. 이러한 늑대형 창업자의 대부분은 실패한다고 본다.그런데, 아주 만약에 이러한 늑대형 창업자가 생존했을 경우 일반적인 개형 창업자들보다 훨씬 더 강한 면모를 드러낸다. 애플의 스티브 잡스나 소프트뱅크의 손정의 회장이 이러한 늑대형 기업인에 속한다고 본다. 스티브 잡스나 손정의 회장 모두 '안정성'과는 거리가 멀다. 스티브 잡스는 리드 대학을 중퇴하고 창업했으며, 손정의 회장 또한 일본의 와세다나 동경대학을 나온 사람이 아닌 미국 UC버클리 출신이다. 우리나라에서 서울대를 하버드보다 더 알아주듯 일본이나 중국도 로컬 대학이 더 높은 비즈니스적 가치를 갖는다. 늑대형 창업자 - 손정의 회장. (동시대 인류에서 나오기 힘든 인물이라고 보면 되겠다)즉, 늑대형 창업자는 생존이 매우 어렵지만, 만에 하나 생존했을 때는 매우 강하고 저돌적인 측면이 있다. 개형 창업자의 경우 생존확률이 높고 영리하지만, 만에 하나 실패 문턱에 갈 경우 늑대형 창업자에 비해 쉽게 지칠 확률이 있다. 늑대와 개는 저렇게 이미 진화가 끝났다. 하지만 인간은, 창업자는 끊임없이 진화할 수 있다.결국 우리는 개형 창업자과 늑대형 창업자의 면모를 섞어서 더 강력한 개체를 만들어야 한다. 늑대형 창업자는 개형 창업자들이 가진 관계나 관계를 통한 문제 해결 능력을 배우면 되고, 개형 창업자는 늑대형 창업자가 가진 헝그리 하게, 가끔은 무식하게 저지르고 보는 그러한 승부 수적 기질에 대해 배우면 된다.공동창업자가 있는 회사가 더 성공할 확률이 크다는 것도 이러한 맥락일 수 있다고 본다. 한 명은 개형, 한 명은 늑대형 창업자일 경우 회사가 성공할 확률이 월등하게 높을 수밖에 없다. 스티브 잡스는 마이크 마쿨라라는 귀인을 얻어 사업을 폭발적으로 키울 수 있었다. 인텔 출신의 마쿨라는 창업 동아리 수준의 애플을 세계적인 회사로 키워낸 일등공신으로 꼽힌다. 이 마이크 마쿨라가 애플에 '안정성'을 부여하는 개형 창업자라고 볼 수 있다.이제 우리도 몇 가지 질문을 던질 때가 아닌가 싶다.우리는 개형 창업자인가? 늑대형 창업자인가?관계를 통한 빠른 학습이 중요한가?느리더라도 직접 체득하며 학습할 것인가?고통을 미리 예견하고 피할 것인가?고통을 맞닥뜨릴 것인가?No pain, No gain 이라지만, Yes pain, Yes gain! 은 아니다.고통이 없으면 얻는 것도 없을지라도, 꼭 고통받아야 얻는 게 있는 것도 아니다.창업자는 이러한 근본적 고민을 계속해야 한다고 본다.왜냐하면, 창업자의 심리적 안정성이 회사의 안정성과 직결되기 때문이다.기업 초기에는 창업자가 무너지면 회사가 무너진다.그러나, 창업자는 늘 매우 무너지기 쉬운 감정상태로 버텨 나간다. 그렇기 때문에 이러한 방향성을 잘 정하고 자신이 추구하는 기업가정신을 마음속에 되새기는 것이 매우 중요하다고 본다.  오늘 늑대와 개의 사진을 보며 이러한 고민을 해보는 건 어떨까?* 이 글은 비캔버스로 초안을 잡아 작성한 글이다. 비캔버스로 잡은 글 초안을 https://beecanvas.com/s/77c25a 에서 확인할 수 있다.

기업문화 엿볼 때, 더팀스

로그인

/