스토리 홈

인터뷰

피드

뉴스

조회수 2147

CSS animation으로 프로토타이핑하기

들어가며Framer, Flinto, Origami, Invision. 많은 프로토타이핑 도구가 존재합니다. 디자인에 활력을 불어넣고 개발팀과의 커뮤니케이션을 위해 필수라고 하는 프로토타이핑. 어떻게 하기는 해야겠는 데 어려운 도구나 코드르 공부하기엔 시간이 없고, 막상 열심히 공부하면 새로운 버전이 나오고, 더 좋은 도구가 나오고. 이런 경험을 많이 하셨을 겁니다. 프로토타이핑 도구로 멋지고 완결된 시나리오를 가진 결과물을 만들 수도 있습니다. 하지만 우리에게 당장 필요한 것은 지금 당장 떠오르는 아이디어를 보여줄 수 있는 아이콘의 간단한 모션, 쓱 움직이는 화면 전환 같은 것이 아닐까요? 오늘 배워서 바로 쓸 수 있는 CSS animation으로 하는 간단한 프로토타이핑 방법을 소개합니다.https://codepen.io/yunkimoon/embed/preview/BZEYgY?default-tabs=css,result&embed-version=2&height=600&host=https://codepen.io&referrer=https://blog.stibee.com/media/c7c8adfdea76b3b98829ecce41fee7d7?postId=e5bb1630afb5&slug-hash=BZEYgY<iframe data-width="800" data-height="600" width="700" height="525" data-src="/media/c7c8adfdea76b3b98829ecce41fee7d7?postId=e5bb1630afb5" data-media-id="c7c8adfdea76b3b98829ecce41fee7d7" data-thumbnail="https://i.embed.ly/1/image?url=https://s3-us-west-2.amazonaws.com/i.cdpn.io/1370087.BZEYgY.small.f06b1cb1-09d2-4285-b8b5-eb8f5b9cea7a.png&key=a19fcc184b9711e1b4764040d3dc5c07" class="progressiveMedia-iframe js-progressiveMedia-iframe" allowfullscreen="" frameborder="0" src="https://blog.stibee.com/media/c7c8adfdea76b3b98829ecce41fee7d7?postId=e5bb1630afb5" style="display: block; position: absolute; margin: auto; max-width: 100%; box-sizing: border-box; transform: translateZ(0px); top: 0px; left: 0px; width: 700px; height: 525px;">어디서, playground코딩을 공부하려면 텍스트 에디터도 설치해야 하고, 각종 패키지도 설치해야 합니다. 또한, 결과물이 담길 파일도 생성해야 하고, 여러 파일이 연결되니까 폴더 구조도 고민해야 하죠. 이런 고민을 하다 보면 시작조차 하기 싫어집니다. 그래서 브라우저에서 바로 작성하고 확인하고 공유할 수 있는 온라인 코딩 플레이 그라운드가 있습니다. 대표적으로 jsbin과 codepen이 있습니다. 그냥 해당 서비스에서 가서 각 섹션(html 또는 css)에 맞게 코드를 입력하기만 하면 됩니다. 우리는 html과 css섹션만 사용할 예정입니다. js와 같은 다른 섹션은 최소화(minimize)해주세요.codepen.io어떻게 시작할까html에 내용을 담고, css에 디자인(스타일)을 담을 겁니다. 당장 직접 작성하기는 어려우니 예제(https://codepen.io/yunkimoon/pen/BZEYgY)의 html과 css코드를 그대로 복사합니다. 코드의 주석(회색글씨)을 확인해 봅니다. 요약하면 아래와 같습니다.가장 바깥의 파란 배경 상자이미지와 그걸 담고 있는 상자파란 배경 상자에 hover(마우스 오버 이벤트)를 하면,left 포지션을 2%에서 80%로 변경여기서 중요한 건 .box상자에 설정된 transition이라는 속성입니다. transition은 딱딱한 움직임을 부드럽게 해줍니다. 여기서는 position left를 2%에서 80%로 부드럽게 바꿔주었습니다. 위치뿐만 아니라 색상(color, background), 크기(width, height)도 자연스럽게 바꿔주는 속성입니다. “all 3s”라는 값을 가지고 있는데 “모든 변경사항에 대해 3초 동안 움직여라”라는 의미입니다.꼭 알아야할 3가지css 애니메이션의 맛을 잠깐 보았습니다. transition을 통해 부드러운 움직임을 줄 수 있습니다. 하지만 더 복잡하고 멋진 움직임을 위해서는 많은 속성들을 이해하고 응용할 수 있어야 합니다. 하지만 모든 속성을 다 알아볼 수는 없으므로 가장 중요한 3가지를 알아보도록 하겠습니다. 미리 살펴본 transition과 transform, keyframe(s) 입니다.1. transition위에서 살펴본 것처럼 대상의 위치, 크기, 색상 등에 부드러운 움직임을 줍니다.2. transform대상의 위치, 크기, 방향 등을 상대적으로 변경합니다. 예제를 통해 알아보겠습니다.<iframe data-width="800" data-height="600" width="700" height="525" data-src="/media/43617ca3eab01b6f86f50b25a362c5a1?postId=e5bb1630afb5" data-media-id="43617ca3eab01b6f86f50b25a362c5a1" data-thumbnail="https://i.embed.ly/1/image?url=https://s3-us-west-2.amazonaws.com/i.cdpn.io/1370087.BZErpP.small.5ebe332d-41b1-4a16-8253-6e2df7b347d0.png&key=a19fcc184b9711e1b4764040d3dc5c07" class="progressiveMedia-iframe js-progressiveMedia-iframe" allowfullscreen="" frameborder="0" src="https://blog.stibee.com/media/43617ca3eab01b6f86f50b25a362c5a1?postId=e5bb1630afb5" style="display: block; position: absolute; margin: auto; max-width: 100%; box-sizing: border-box; transform: translateZ(0px); top: 0px; left: 0px; width: 700px; height: 525px;">2.1. rotate대상에 각도 값을 설정합니다. 즉, 주어진 값만큼 회전합니다. 첫 번째 예제와 조금 다른 부분은 :hover { }에 작성된 내용입니다. transform:rotate(360deg)에서 rotate는 회전을 뜻하고, 360deg는 각도입니다. 즉, 360도(한 바퀴)만큼 회전하라는 의미입니다. 미리 transition이 걸려있었기 때문에 부드럽게 회전하는 모습을 볼 수 있습니다.2.2. translate대상의 이동 값을 설정합니다. 주어진 값만큼 이동합니다. 값은 좌푯값으로 x축, y축 값을 나눠서 줍니다. transform: translate(100px, 100px)에서 translate는 이동을 뜻하고, 이후에 나오는 값은 순서대로 x축의 이동값, y축의 이동 값입니다. 그런데 y축 이동 값이면 위로 올라가야 할 것 같은데, 그림은 아래로 이동합니다. 그 이유는 스크린에서 좌측 위가 기준점이기 때문입니다.2.3. scale대상의 크기를 설정합니다. 즉, 주어진 값만큼 늘어나거나 줄어듭니다. 값은 가로 값, 세로 값을 차례로 줍니다. transform:scale(1.5, 2)에서 scale은 크기를 뜻하고, 1.5와 2는 각각 가로값, 세로값을 뜻합니다. 가로는 1.5배가 늘어나고 세로는 2배가 늘어납니다. 그래서 그림은 세로로 긴 비율로 보입니다.이제 우리는 css만으로 대상의 위치, 크기, 회전 애니메이션을 줄 수 있습니다 :)3. keyframes마우스 오버 액션에 대한 애니메이션을 보아왔습니다. 이렇게 사용자의 특정 반응(마우스 오버)이 없어도 자동으로 움직이도록 할 수는 없을까요? 앞의 두 예제보다 조금 복잡하지만 keyframes를 사용하면 가능합니다. keyframes는 미리 움직임을 지정해두고, 대상에 해당 애니메이션의 속성을 부여하는 방식으로 작성됩니다. 예제를 확인해 보겠습니다.<iframe data-width="800" data-height="600" width="700" height="525" data-src="/media/fc6ef62f3a79def6442479e60dcba75d?postId=e5bb1630afb5" data-media-id="fc6ef62f3a79def6442479e60dcba75d" data-thumbnail="https://i.embed.ly/1/image?url=https://s3-us-west-2.amazonaws.com/i.cdpn.io/1370087.vZMRdd.small.22bea369-dda5-4454-9f16-f5ad68f9b292.png&key=a19fcc184b9711e1b4764040d3dc5c07" class="progressiveMedia-iframe js-progressiveMedia-iframe" allowfullscreen="" frameborder="0" src="https://blog.stibee.com/media/fc6ef62f3a79def6442479e60dcba75d?postId=e5bb1630afb5" style="display: block; position: absolute; margin: auto; max-width: 100%; box-sizing: border-box; transform: translateZ(0px); top: 0px; left: 0px; width: 700px; height: 525px;">3.1. spin앞서 살펴 본 transform의 rotate를 미리 애니메이션을 만들어 놓고 대상에 animation이라는 속성을 설정했습니다.@keyframes spin 처름 spin이라는 애니메이션을 설정합니다. 그 안에는 from과 to가 있는데 각각 시작과 끝을 뜻합니다. 즉, 시작할 때는 회전이 0(rotate(0deg))이고 끝날 때는 회전이 360도(rotate(360deg))입니다.대상과 keyframes를 연결할 때는 대상에 animation: spin 8s infinite linear;와같이 애니메이션 속성을 줍니다. spin은 keyframes의 이름, 8s는 8초 동안, infinite는 무한 반복을 뜻합니다. 여기서 linear는 easing을 나타내는데, 우선은 조금 딱딱한 애니메이션이라고 해둡시다.3.2. leftAndRighttransform의 translate를 활용해서 우측으로 이동했다 돌아오는 애니메이션을 반복시키는 예제입니다. from과 to대신 조금 상세한 타임라인을 가지고 있습니다. 0%, 50%, 100%는 타임라인을 구성하는 속성들로 전체 애니메이션 시간 동안 해당하는 타이밍에 맞게 속성이 변경됩니다. 역시 infinite 속성이 있어 계속 반복되고 있습니다. 그리고 마지막에 linear대신 ease라는 속성을 넣어서 조금 부드러운 움직임 표현했습니다.3.3. hideAndShow앞서 다루지 않은 opacity(투명도)를 활용했습니다. 1이 100%이고 0은 보이지 않는 상태입니다. 1 → 0 → 1을 반복하며 보였다 안 보였다 하는 애니메이션을 보여줍니다.이제 우리는 css만으로 대상의 위치, 크기, 회전 애니메이션 반복적으로 사용할 수 있게 되었습니다. 그리고 무한 반복 애니메이션도 만들 수 있습니다.마무리 예제<iframe data-width="800" data-height="600" width="700" height="525" data-src="/media/f95d4317209e7a3488242568bbdcd5a3?postId=e5bb1630afb5" data-media-id="f95d4317209e7a3488242568bbdcd5a3" data-thumbnail="https://i.embed.ly/1/image?url=https://s3-us-west-2.amazonaws.com/i.cdpn.io/1370087.OgeMEY.small.ab075079-b3bb-443e-a11e-d707c5a6a198.png&key=a19fcc184b9711e1b4764040d3dc5c07" class="progressiveMedia-iframe js-progressiveMedia-iframe" allowfullscreen="" frameborder="0" src="https://blog.stibee.com/media/f95d4317209e7a3488242568bbdcd5a3?postId=e5bb1630afb5" style="display: block; position: absolute; margin: auto; max-width: 100%; box-sizing: border-box; transform: translateZ(0px); top: 0px; left: 0px; width: 700px; height: 525px;">앞서 살펴본 예제들을 활용한 마무리 예제를 만들어 보았습니다. 앞서 공부한 내용을 바탕으로 소스를 분석해 보시기 바랍니다. 각 버튼에는 transiton으로 부드러운 hover 전환 효과를 주었고, 녹색의 메시지는 keyframes를 주어 상하로 계속 움직이도록 했습니다. frame에 마우스가 올라가면 메시지는 프레임 바깥으로 밀려나고 사용자 메뉴가 프레임 안으로 이동하도록 했습니다. 메뉴는 하위 메뉴가 펼쳐지는 인터렉션을 가지고 있습니다.마치며전문 프로토타이핑 도구보다 결과물이 투박하고, 지금 당장 만들 수 있는 장면도 제한적입니다. 자바스크립트 같은 동적 언어가 들어가 있지 않아 표현할 수 있는 화면도 많지 않습니다. 기본적으로 제공되는 템플릿이나 자원이 없으므로 하나하나 html로 코딩하거나 공개 소스를 넣어가면서 만들어야 하는 수고로움도 존재합니다.하지만 실행만 해도 막막한 도구들을 바라보며 “언제 한 번 해보나”하는 생각을 할 시간에 간단히 익혀 한 번이라도 써먹을 수 있다면 그 자체로 의미가 있지 않을까요? 물론 탄탄한 시나리오와 설계를 가지고, 제대로 만든다면 전문 프로토타이핑 도구보다 절대 뒤쳐지지 않을 것입니다. 그리고 우리가 만든 코드들은 커뮤니케이션을 위한 전달용이 아니고 실제로 쓰일 수도 있는 코드라는 점에서도 의미가 있습니다. 간단한 프로토타이핑이라도 지금 시작해 보면 어떨까요?참고https://www.w3schools.com/css/css3_animations.aspttps://www.w3schools.com/css/css3_transitions.asphttps://www.w3schools.com/css/css3_2dtransforms.asphttp://report.stibee.com/2017 by 조은지 디자이너#슬로워크 #스티비 #CSS #퍼블리셔 #개발 #디자인 #인사이트 #꿀팁 #조언
조회수 18699

아마존 매출 신고 방법, 영세율,  부가세 환급

안녕하세요, 대한민국 사업자들의 해외 전자상거래 진출(아마존 판매)을 도와주는 컨설팅 회사이자 업무대행사 컨택틱의 이이삭 대표입니다.오늘 여러분들께 말씀드리고 싶은 것은 영세율에 대한 개념입니다. 제 포스트를 읽으시는 분들은 수출에 관심이 있거나 이미 하고 계신 분들이 대부분일텐데요, 대한민국은 수출을 장려하는 나라이기 때문에 수출을 하는 분들은 내수 거래를 하는 분들보다 혜택을 보는 것들이 몇 가지 있습니다. 그 중에 매출이 영세율 적용되는 것이 많은 분들의 관심일거라고 생각합니다.영세율이란?세율(稅率)이라 함은 세액을 산출하기 위하여 과세표준에 곱하는 비율(從價稅의 경우) 또는 과세표준의 단위당 금액(從量稅의 경우)을 말하는 것으로, 이러한 세율이 영(zero)인 것을 영세율이라 한다... 중략… 또한 납부세액의 계산에 있어서도 매입세액의 공제가 허용되므로 항상 부(負)의 납부세액이 되며, 이는 환급세액으로서 정부로부터 환급받게 되므로 당해 사업자도 부가가치세를 전혀 부담하지 아니하게 된다. – 출처: Naver 지식백과위에서 보이듯이 영세율 매출은 부가세에서 면제되는 대상일 뿐만 아니라, 납부세액의 계산에 있어서도 매입세액의 공제가 허용되어 판매에 필요한 매입 부가세를 공제/환급 받을 수도 있다는 매우 큰 혜택이 있습니다.이해하기 쉬운 예시일반적인 내수 거래의 부가세 계산 예시:매입: 100원 (공급가 90원에 매입 부가세 10원)매출: 1000원 (공급가 900원에 매출 부가세 100원)최종 납부 부가세: 100원 – 10원 = 90원최종 수익: 1000원(매출) - 100원(매입가) - 90원(부가세) = 810원아마존 판매 부가세 계산 예시:매입: 100원 (공급가 90원에 매입 부가세 10원)매출: 1000원 (공급가 1000원에 매출 부가세 0원)최종 납부 부가세: 0원 – 10원 = -10원최종 수익: 1000원(매출) - 100원(매입가) + 10원(부가세) = 910원이렇게 영의 세율을 적용 받게 되면 물건을 사입 하면서 선 납부한 매입 부가세 10원을 분기당 부가세 신고/납부 때 환급 받게 되는 것입니다. 눈 여겨 볼만한 차이라면, 내수 거래를 하면 최종 수익이 (1000 – 100 – 90) 810원인 반면, 아마존에서 판매를 하면 수익이 (1000 – 100 +10) 910원인 만큼 수익성의 차이는 매입가가 높으면 높을수록 어마어마합니다.*위 예시는 아마존에 판매할 상품을 국내에서 소싱 했다는 전제 하에 작성되었습니다. 해외 소싱의 경우 한국을 경유하여 미국으로 수출할 경우 수입 부가세가 적용되겠죠? 해외에서 미국으로 가는 경우에는 부가세 납부가 일어나지 않으므로, 해당 사항이 없습니다.아마존 매출은 영세율 매출에 속하는 것일까?한 줄 답변: 네, 아마존 매출에서 발생하는 매출도 영세율 적용이 됩니다.영세율 적용이 되는 매출을 정리하자면, ‘국외에서 사용·소비될 재화 또는 용역… 중략… 또는 국내에서 사용·소비되는 재화 또는 용역의 공급이라 하더라도 외화를 획득하는 것인 경우에는 영의 세율이 적용된다.’ – 출처 Naver 지식백과이처럼, 대한민국 셀러가 아마존에서 판매한다는 것은 국외에서 사용·소비될 재화의 공급이기 때문에 영세율 적용을 받게 됩니다.아마존 매출을 영세율로 신고하려면 필요한 자료(주의: 홈택스에서 직접 부가세 신고를 하시는 분들도 계실텐데, 홈택스에서 어떻게 처리하는지까지는 제가 이 하나의 포스트에서 다루면 너무 글이 길어지기 때문에 세무사를 끼고 사업을 하는 분들을 위주로 설명 드리는 점 양해바랍니다)1. 아마존 월별 매출 자료아마존 메뉴 중에 Reports에서 Payments를 들어가시면 Monthly Sales Reports를 다운로드 받으실 수 있습니다. 여기서 Income (매출)과 Expense (지출)을 정말 한 눈에 쉽게 볼 수 있습니다. 세무대리인께서 해외 매출을 잡아 주실 때 해당 reports에서 ‘income’ 자료를 기준으로 신고하라고 당부하시면 됩니다. 그리고 ‘기타영세율’(부가세 신고할 때 수출 실적 명세서라는 서류에 기재하는 란 중 하나입니다)로써 아마존 매출을 해외 매출로 잡아달라고 얘기하시면 됩니다. 만약 환율 적용은 어떻게 해야하냐라고 세무사님께서 물어보신다면, 서울외국환중개 또는 관세청에 들어가서 보시면 월별 평균 환율을 알아보시면 됩니다. 아마존 매출 자료도 월별 단위로 다운 받은 것이니, 이렇게 월별 평균 환율로 계산하는 게 가장 편리하고 좋습니다 (정석을 따지려면 각 주문마다 화물이 반출되는 시점의 환율로 계산해야 하는데 이건 FBM으로 판매하든 FBA로 판매하든 판매건수가 한 두개도 아니고 현실적으로 좀 어렵죠 ^^;).2. 수출신고번호가 있는 수출 내역 (특송사를 통해 발송한 항공운송 화물, 포워딩사를 통해 발송한 해상운송 화물)우선 항공운송으로 보내는 화물들에 대해서 말씀드리겠습니다. FBA 배송대행을 하는 G-Trans 또는 도어로 같은 업체들이 있는데, 이런 곳들도 결국 전부 DHL, FedEx, UPS, THT 같은 특송사와 계약을 한 곳들입니다. 그리고 특송사들은 대부분 발송인이 화물을 보낼 때 ‘수출신고대행’이라는 옵션을 선택할 수 있게 해줍니다. 만약 이 옵션을 선택하게 되면, 해당 특송사가 발송인을 대신해서 ‘수출신고필증’을 작성하여 수출 신고를 대신해주는 것입니다. 물론 유료 서비스가 아니며, 15,000원 정도 내는 걸로 알고 있습니다. 아래에도 설명을 드렸지만 이런 특송사 또는 관세사가 귀사를 대신하여 수출신고를 해주는 것은 어쨌거나 외주를 맡기는 행위이기 때문에 돈을 지불하는 것은 당연하오니, 관세청 유니패스 전자통관시스템이라는 사이트에서 직접 수출 신고를 하는 방법을 터득하여 직접 처리 하시길 추천드립니다 (사업주의 입장에서 한 푼이라도 아낄 수 있다면 아끼는 게 좋겠죠 ^^). 만약 관세청 유니패스 전자통관시스템을 통해서 수출 신고하는 방법에 어려움이 있으신 분들은 컨택틱으로 연락 주시면 저희가 도와드릴 수 있는 한에서는 최대한 도와드리겠습니다. 이야기가 좀 샜네요. 어쨌거나 이렇게 수출신고를 대행하든 직접 하시든 수출신고를 하게 되면 수출신고필증이라는 문서를 받을 수가 있는데, 부가세 신고를 하실 때 이 자료들을 세무사/세무대리인께 전달해주시면 됩니다. 이 부분은 1번과 달리 ‘기타영세율적용’이 아니라 ‘수출재화’로 입력해야하는 부분이라고 세무사님께 말씀드리면 됩니다 (세무사님도 이건 당연히 알고 있을겁니다).3. 수출신고번호가 없는 수출 내역 (소형포장물 등)엄밀히 말하자면, 소형포장물 등을 통해서 나간 화물들은 수출 신고를 하지 않았어도 운송장들만 잘 모아 놓았다면 그걸로 ‘기타영세율’ 처리를 하여 해외 매출로 잡을 수 있습니다. 하지만 컨택틱에서는, 다소 번거롭긴 하더라도, 대한민국의 아마존 셀러들이 아무리 작은 화물도 관세청 유니패스 전자통관시스템에서 전부 수출 신고를 하는 것을 추천 드립니다. (왜 관세청 유니패스 전자통관시스템에서 수출신고를 직접 해야하냐? 관세사를 통해서 하면 돈이 너무 많이 들기 때문이거든요 ^^; 소형 포장물 하나하나마다 관세사를 통한 수출 신고를 하면 배보다 배꼽이 커지게 됩니다) 매출이 작으면 국세청에서도 눈 여겨 보지 않겠지만, 그렇다고 해서 이런 작업을 넘기면 안됩니다. 나중에 매출이 커지면 국세청의 조사가 있을 때 모든 자료를 진작에 미리 준비해 놓았다면 얼마나 편하겠어요? 그때 가서 안하던 것을 하려면 머리도 아프고 헷갈려서 오히려 더 골치 아파집니다. 습관의 중요성은 절대로 간과해선 안됩니다. 매출이 작을 때부터 아무리 작은 화물이라도 성실하게 수출 신고를 해야 나중에 매출이 커질 때에도 탈 없이 정리할 수 있을 겁니다. 어쨌거나 해당 분기에 속하는 모든 소형포장물들의 운송장을 정리해서 세무사님께 보내드리고, 해당 자료 또한 1번과 같이 ‘기타영세율적용’으로 잡고 해외 매출로 신고하시면 됩니다.저희 컨택틱도 아마존에서 판매를 하기 때문에 해외 매출을 분기별로 신고합니다. 제가 다소 완벽주의자라서... 저희 세무사님께 자료를 전달해드릴땐 이렇게 엑셀로 먼저 정리해서 보내드립니다 (누락되는 자료가 있으면 저만 손해니까요 ^^) 이렇게까지 정리하지 않으셔도 되지만, 혹여라도 나중에 국세청에서 조사가 들어온다면, 실제로 입금받은 외화 금액도 증명을 해야될 수도 있는데, 저희가 신고하는 해외 매출은 아마존에서 발표되는 매출을 그대로 신고하는 것이기 때문에 아마존의 수수료, FBA 수수료 등의 아마존 지출을 고려하지 않은 셈이 되어버립니다. 따라서 세무사에게 해외 매출분에서 사전 공제된 항목과 내역까지도 알려줘야한다고 생각해서 저는 이렇게까지 정리를 했습니다. 다시 한 번 말씀드리지만 이렇게까지 정리하는건 추후에 있을 세무 조사를 대비하여 하는 것일뿐, 월 매출이 억대를 초과하지 않는 이상 이렇게까지 할 필요는 없어보입니다.영세율 혜택의 실제 체감컨택틱이 아마존 판매를 도와준 고객사 중의 한 분의 실제 사례입니다. 이 분은 국내에서 유명 신발 브랜드 제품을 매입하고 아마존에 판매하는 분입니다. 제품 판매가가 $100이 넘어가는 고가의 제품들이라 당연히 매입할 때 발생하는 매입 부가세 또한 만만치 않았습니다. 이분이 3개월간 판매한 아마존 매출은 대략 $150,000 이었으며 (편의상 1억 5천만원이라고 하겠습니다), 매입에 사용된 금액은 대략 6천만원이었습니다.분기마다 컨택틱의 도움을 받고 해외 매출을 신고하였더니, 부가세 환급금이 (내수거래를 하지 않고 오직 아마존 판매만 하는 분이어서, 국내 매출이 없었습니다) 무려 500만원이나 넘게 나오셨습니다. 아마존에서 물건을 판매할 때 실제 남기는 수익이 얼마 안되셨지만, 이렇게 부가세 환급까지 받게 되니 수익률이 확 올라갔던 것이죠. 본 포스트에서 가장 먼저 언급한 국내 매출과 해외 매출의 수익성 차이를 실제로 보여주는 예시라고 볼 수 있겠습니다.마치며...아마존 판매를 포함한 수출 셀러 여러분들은 이렇게 정정당당하게 세금 혜택 누릴 것을 전부 누리고 계신가요? 지금까지 적게는 수십 만원 많게는 수천만원까지 현금으로 돌려받을 수도 있었을 부가세 공제/환급금… 지금이라도 늦지 않았으니 잘 알아보시고 세금 혜택을 받으시기 바랍니다 ^^
조회수 835

| OPSV 인터뷰 | 소비자 조사는 스타트업의 생존 전략

오픈서베이의 서혜은 마케팅 팀장, 강예원 쇼퍼 인사이트 그룹장 인터뷰오픈서베이는 지난 5월부터 스타트업 데이터 스터디를 진행하고 있습니다. 소비자 조사를 진행하고 그로부터 얻은 데이터를 분석하는 과정을 통해 비즈니스 고민을 해결하는 공부를 하는 자리입니다. 다르게 말하면 스타트업의 생존 전략을 배우는 거죠. 스터디 이름도 ‘생존을 위한 설문조사’를 뜻하는 SFS(Survey for Survival)입니다. 스타트업 생존을 위해 소비자 조사가 필요한 구체적인 이유는 뭘까요? * 본 인터뷰는 서혜은 마케팅 팀장과 강예원 쇼퍼 인사이트 그룹장이 함께 했습니다. | 스타트업 생존 전략을 말하다OPSV: 스터디에 앞서 스타트업 자체에 대한 이야기를 해봅시다. 스타트업에게 소비자 조사는 어떤 의미일까요?서혜은(이하 Hailey): 창업전문가로도 불리는 장병규 블루홀 의장의 “스타트업은 평균이 실패다”라는 말이 기억에 남아요. 스타트업이 실패하는 이유는 시장과 소비자에 대한 이해가 부족한 상태로 시작하기 때문이거든요. 실패 가능성을 낮추기 위해서는 소비자를 이해해야 하는데 그 방법 중 하나가 바로 소비자 조사라고 생각해요. 결국 스타트업에게 소비자 조사는 결국 실패할 위험을 낮추기 위한 생존 전략이라고 말해야 할까요?강예원(이하 Amy): 동의해요. 전 스타트업 생존 전략의 기초는 리스크 관리라고 생각해요. 리스크 관리란 지금 고민해야 할 문제가 무엇인지 명확히 정의하고 우선순위에 따라 문제를 해결해나가는 능력이고요. 다시 말해 스타트업이 실패하는 주요 원인은 시장과 소비자에 대한 이해 부족으로 지금 필요한 고민이 무엇인지 모르고 해매는데 있다는 거죠. 이때 소비자 조사는 지금 당장 고민해야 할 문제가 무엇인지 보다 명확하게 판단할 수 있는 근거를 제공하는 중요한 도구입니다. OPSV: 스타트업에게는 모든 것이 고민거리기 때문에 중요도에 따라 어떤 순서로 어떤 문제를 먼저 해결하는 게 맞는지 판단할 수 있어야 한다는 이야기 같아요.Amy: 맞아요. 간단하게는 ‘본격적으로 서비스를 시작해도 좋을지’를 판단할 수 있는 의사결정의 근거를 소비자 조사를 통해 파악할 수 있을만큼 준비가 돼 있는지가 관건이라고 생각해요. 스타트업이 겪는 많은 문제는 사실 리스크 부담으로 의사결정을 내리기 어렵다는 점에 있고 고민의 우선순위에 따라 소비자 조사를 진행해 보다 옳은 방향이 어디인지 결정할 수 있어요.대개 스타트업은 자신들이 꽤 표준편차 안에 있다고 생각하는데 아닌 경우가 정말 많아요. 자신들이 느끼는 문제를 전체 소비자는 문제로 여기지 않을 때도 많고, 합리적이라고 생각한 가격대가 소비자에게는 매우 비싸게 다가올 때도 있어요. 이런 시행착오는 결국 소비자와의 공감이 부족해서 일어난 의사결정의 결과거든요. | 결국은 의사결정의 근거가 필요하다OPSV: 그럼 의사결정에 앞서 소비자 조사를 활용한다면 리스크를 어떻게 줄일 수 있는 걸까요? 예를 들어주시면 좋겠네요.Amy: 지난 3월 출시한 ‘브러시몬스터(brushmon.com)’ 사례가 있어요. 아이들의 건강한 양치습관을 길러주는 교육용 증강현실 서비스에요. 브러시몬스터 내부에서는 본 서비스 정식 런칭을 앞두고 궁금한 게 많았는데, 출시하지도 않은 서비스에 소비자가 있을 리 없잖아요? 그래서 오픈서베이를 이용해 시장 조사를 해보고 싶으셨어요. 만나보니 다방면으로 궁금한 게 정말 많았는데, 지금은 서비스 출시 직전인 만큼 당장 의사결정에 필요한 조사를 추릴 필요가 있었죠. 오픈서베이는 고민거리를 정리하는 과정부터 도움을 드렸고요. OPSV: 위에서 이야기한 고민거리의 중요도를 판단하는 거군요.Amy: 맞아요. 몇 차례 미팅 끝에 브러시몬스터의 수많은 고민 중 지금 당장 소비자조사가 필요한 문제를 세 가지 꼽았어요.① 기업이 정의하는 시장의 문제를 타깃 고객 역시 문제로 여기는지② 문제를 공감한 고객이 서비스 구매 의향이 있다면 얼마까지 지불할 수 있는지③ 서비스 구매가 망설여진다면 그 이유는 무엇인지첫 번째는 시장 니즈 확인이라고 생각하면 좋아요. 자녀의 양치 교육 필요성이 생각보다 적을 수 있으니까요. 두 번째는 가격 적정선에 대한 조사인데 니즈 파악만큼이나 서비스 런칭 전에 중요한 의사결정 요소에요. 마지막으로 구매를 망설이는 이유는 보통 기업도 알고는 있는데 ‘가장 망설이는 이유’처럼 순위로 상세하게 알게 될 때 인사이트가 또 다르기 때문에 필요해요.이렇게 ① 시장 니즈, ② 가격 적정선, ③ 비구매 이유까지 현시점에 가장 중요하게 고민할 문제를 선정하고 소비자 조사를 진행하면 의사결정의 ‘근거’를 알 수 있어요. 의사결정을 내릴 때 따라오는 리스크를 효과적으로 줄일 수 있게 되는 거죠. 결국 브러시몬스터는 조사 결과를 통해 자신감을 얻고 서비스를 정식 런칭할 수 있었어요.정식 서비스 런칭 전 오픈서베이로 소비자 조사를 진행한 브러시몬스터 | 정확한 조사와 분석이 필요하다OPSV: 스타트업이 겪는 문제에 대해서는 잘 알게 된 것 같아요. 그럼 그 문제를 우리가 좀 더 잘 풀어줄 수 있는지를 판단한 ‘근거’는 무엇일까요? (웃음)Amy: 저희도 스타트업이잖아요! (웃음) 올해로 7년째 비즈니스를 하고 있어서 그런지 누구보다 스타트업의 절박함도 잘 알고 있고요. 실제로 스타트업 시장이 막 열렸을 때부터 신속하고 가격경쟁력 좋은 우리의 모바일 리서치 서비스를 꾸준히 이용하며 크게 성장한 스타트업 사례가 많아요. 스타트업의 성장 단계에 따라 무엇을 고민했으며 실마리로 소비자 조사를 어떻게 활용했는지 노하우가 쌓였어요. 고민 많은 다른 스타트업에게 단계별 혹은 케이스별로 알려줄 수 있는 게 많다는 말이죠.Hailey: 스타트업에게 적합한 소비자 조사 서비스가 적은 것도 이유예요. 물론 좋은 무료 툴도 있어요. ‘구글 폼’이 대표적이죠. 실제로 몇몇 스타트업은 자사 고객 대상으로 구글 폼을 활용해 만족도 조사나 이용행태 조사 등 소비자 데이터를 수집하고 있고, 그런 경우 설문 문항 구성도 고민한 흔적이 보이더라고요. 예를 들어 디지털 콘텐츠 출판 서비스 ‘퍼블리(publy.co)’는 멤버십 구독을 하면 처음 오는 메일에 설문조사가 따라와요. 샐러드 배송 스타트업 ‘프레시코드(freshcode.me)’도 서비스를 개선해야 할 때 고객 대상으로 설문조사를 하더라고요.그런데 자사 고객처럼 대상자를 직접 찾을 수 있을 때가 아니라 일반인이나 특정 프로필의 응답자를 대상으로 조사를 하려면 무료 툴로는 한계가 있어요. 표본 집단을 신중하게 선정할 수 없어 편향된 결과가 나오기도 하거든요. 보통 정규분포라고 표현하죠. 제 페이스북에서 오픈서베이 인지도 조사를 하면 나이키나 애플 같은 글로벌 브랜드와 대등한 인지도로 보일 테니까요. 그런 무료 툴로는 객관적인 데이터를 얻기 위한 표본 설정을 할 수 없어요. 뿐만 아니라 문항 건너뛰기 같은 기초적인 설문 로직마저 적용할 수 없어서 응답자들의 의사과 관계없는 오응답이 생길 수도 있고요. OPSV: 무료 툴 특성상 기능이 제한적인 건 어쩔 수 없다지만, 그런 기능적 한계가 결국 결과 데이터에도 영향을 준다는 건가요?Hailey: 맞아요. 사실 소비자 조사를 제대로 하려면 소비자 조사 방법론에 대한 이해가 필요해요. 당장 서비스가 급한 스타트업에게는 공부할 엄두가 없죠. 그래서 어떤 시점에 어떤 소비자 조사를 해야 하는지 잘 모르는 상황이 생기는 거예요. 막 런칭한 서비스의 브랜드 인지도를 궁금해한다거나, 앱이 완성되지도 않았는데 앱 사용성 테스트를 하고 싶어 하기도 해요. 막연하게 지금 단계는 고객의 목소리를 들어야 할 것 같은데 구체적인 방법을 모르는 경우도 많아요.사실 여기까지는 모든 기업이 겪는 일반적인 문제에요. 스타트업이라서 겪는 진짜 문제는 소비자 조사가 필요하지만 직접 할 순 없을 때 대안이 없다는 거예요. 리서치 기업에 의뢰해서 진행하기에는 비용 부담이 크고, 교육 프로그램도 상당한 고가인 경우가 많아요. 리서치 전문가 입문 교육 수준의 난이도라서 스타트업에서 실무적인 고민을 바로 해소하기 힘든 내용으로 구성된 경우가 많고요. 여러모로 스타트업에게 소비자 조사는 필요하지만, 선뜻 시도하기 어려운 것 같아요.Amy: 소비자 조사 방법론이 필요한 이유를 예시를 통해 설명해드릴게요. 만약 브러시몬스터가 구글 폼으로 주변 사람들에게 “자녀의 양치 교육을 돕는 서비스가 있다면 이용하시겠습니까?”라는 설문조사를 했다면 대다수 사람이 “그렇다”고 답했을 거예요. 그런데 그 응답 결과가 서비스의 시장성을 객관적으로 판단할 주요 근거로 활용되긴 힘들거든요. 브러시몬스터는 좀 더 객관적이고 정량적인 소비자 조사가 필요하다고 생각했고 스타트업으로서 큰 부담 없이 이용할 수 있는 오픈서베이를 찾게 된 거죠.Survey For Survival 스터디 현장(사진. 오픈서베이) OPSV: 그럼 스타트업은 그렇게 진행한 설문조사를 어떻게 활용하나요?Hailey: 비즈니스 단계에 따라 다양한 조사를 하는데요. 시작하는 단계는 주로 시장이나 소비자를 파악하는 조사를, 성장 단계에는 서비스 제품 자체나 마케팅 관련 조사가 주를 이루죠. 보통 각 단계 사이에 VC 투자를 받는데 IR 자료로 활용하기도 해요.‘인테이크(intakefoods.kr)’라는 고객이 기억에 남아요. 시작 단계부터 꾸준히 오픈서베이를 이용하셨어요. 신제품이 나오기 전에 주 구매층의 이용행태를 조사하시는데, 조사 결과를 내부에서만 보지 않고 보도자료로 기가 막히게 활용하시더라고요! 그런 활용은 저희도 깜짝 놀랄 정도예요. 고객 의견을 성실하게 반영해주시는 만큼 서비스 만족도 역시 높아서 오픈서베이 구성원들도 신제품 펀딩 날 구매 링크를 공유하기도 해요(웃음).사실 대기업은 소비자 조사만 전담하는 부서도 있고 예산이 많으니 전문가의 도움을 받기도 쉬운 구조에요. 근데 스타트업은 소비자 의견을 듣고 싶은 마음은 더 간절한데 직접 조사를 하겠다는 마음을 먹는 것부터 어려워해요. 저는 더 많은 분이 인테이크처럼 다양한 방법으로 소비자 데이터를 활용할 수 있으면 좋겠어요. 그 방법 중 하나로 스타트업도 이용할 수 있는 소비자 조사 방법을 알려드리고 싶은 거죠. 오픈서베이 DIY 같은 좋은 툴이 많으니까요. | SURVEY FOR SURVIVALOPSV: 배경 설명을 들으니 스타트업 데이터 스터디를 만든 이유를 알겠어요. 그럼 스타트업을 대상으로 하기 때문에 특별히 신경 쓴 게 있을까요?Amy: 위에서도 설명했지만 스타트업이 실무에 당장 활용할 수 있는 교육 프로그램이 적어요. 대부분 리서치/데이터 분석 교육은 설문 설계와 통계 분석 방법론 자체에 집중한 전문적인 프로그램이죠. 그런데 소비자 조사 경험이 없는 스타트업은 자사의 고민과, 그 고민을 소비자 조사를 통해 해결할 방법을 연결 짓는 것부터 힘들어해요. 그래서 리서치 교육을 전문적으로 다루기보다, 자사의 비즈니스를 객관적으로 바라보면서 현 단계에 어떤 고민이 필요하며 그 고민을 소비자 조사를 통해 어떻게 해소할 수 있는지까지 전체 과정을 함께 고민하고 해결할 수 있는 프로그램으로 구성했어요.Hailey: 사실 오픈서베이를 널리 홍보하는 것만 생각했다면 인원은 크게 늘리고 횟수는 줄여서 여러 번 진행했을 텐데, 지금 인원은 딱 8팀으로 제한했고 기간도 주 1회 6주 차 프로그램으로 구성해 밀도를 높이는 데 집중했어요. OPSV: 인터뷰를 읽고 스터디 내용을 많이들 궁금해할 것 같아요.Amy: 소비자 조사란 무엇이며 기업에 소비자 조사가 왜 필요한지 기초적인 이론 교육을 한 뒤부터는 실습 과정이 많아요. 숙제도 매주 있고요(웃음). 데이터를 수집하고 분석할 줄 아는 역량을 키워주기 위해서죠. 그래서 각 구성원이 소비자 조사를 통해 해소할 수 있는 자사의 고민을 직접 선정해서 가설을 세우고, 이 가설을 검증하는 방법을 탐색하고, 오픈서베이의 도움을 받아 소비자 데이터를 직접 수집한 뒤, 수집한 데이터를 기반으로 가설을 검증하는 전체 과정을 함께 합니다.Survey For Survival 스터디 일정표 Hailey: 오픈서베이는 DIY 고객, 특히 스타트업 고객에게 애틋함을 느껴요. 지금 오픈서베이 매출의 많은 부분은 기업 고객에게서 나오고 있지만요. 한 스타트업 대표님과 나눈 대화가 아직도 기억에 남아요. 설문 설계를 너무 잘 해주셔서 “스타트업 분들은 유난히 설문을 잘 만드시던데 다들 똑똑해서 그런 걸까요?”라고 여쭤봤더니, “아뇨. 간절해서 그래요”라고 웃으며 대답하시더라고요. 맞아요. 그리고 그 간절한 마음, 저희가 제일 잘 알거든요.오픈서베이는 지금도 꾸준히 스타트업이 시장과 소비자를 알아가는 데 도움을 드리고 싶어요. 한 스타트업이 비즈니스를 시작하고 막막해할 때 오픈서베이를 통해 시장과 소비자를 이해하도록, 각 성장 단계의 고민을 오픈서베이가 함께 하며 도움이 되도록 하는 건 즐겁고 놀라운 일이라고 생각해요. 그 기쁨을 좀 더 나누기 위한 출발점이 스타트업 데이터 스터디라고 생각합니다. #오픈서베이 #데이터분석 #시장분석 #마케터 #마케팅 #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화
조회수 3173

SW 개발, 우선순위는 어떻게?

아키텍처적인 판단과 비기능적인 요소, 품질요소에 대한 것을 기준으로 우선순위를 결정하는 것은 차라리 간단하다. 아리송하고 판단하기 어려운 것은 따로 있다. 서비스를 어떤 기능이나 어떤 서비스, 어떤 영역을 먼저 시작해야 하는 가?. 아니면, 서비스가 개시되고 돌아오는 버그 리스트와 추가 요구사항 등의 사용자의 피드백을 통해서 유지보수의 순서를 정하는 것 등이 아리송한 것이다.이번에 중점적으로 이야기하는 것은 개발자들에게 요구되는 요구사항과 업무의 작업 단위들은 왜 이렇게 많이 변화하고, 이러한 요동치는 환경들은 무엇 때문에 발생하는 것인지에 대해서 생각해본다.대부분의 소프트웨어 개발자들은 시시각각 변화하는 요구사항과 유지보수 업무의 홍수 속에서 점점 무덤덤해지면서, 자신들이 할 수 있는 일만을 하려고 하는 경향으로 변화해 간다. 그렇게 변화하면서 개발 조직 내에서 무력감에 빠져드는 현상을 맞이 한다. 그 모든 이유의 대부분은 최고 경영자나 경영진, 리더층의 결정장애이거나 판단 미스인 것이 대부분이다.슬프게도 최고 경영진에게는 소프트웨어 개발팀에서 업무를 제대로 처리해주지 않는다는 영업과 기획 조직들의 푸념이 늘어나는 이유는 소프트웨어 개발팀에서는 제대로 된 요구사항의 정의가 되지 않았고, 작업의 우선순위가 불분명하기 때문에 이런 기술적 판단 미스와 잘못된 기술 부채가 누적되어지기 때문이다.기술적 부채에 대해서는 다음에 이야기하고, 이번 이야기에서는 '작업'의 우선순위를 결정하는 부분에 대해서만 이야기해보자.우선순위를 결정하는 기준이 없거나, 기준에 대해서 의사소통이 안 되는 경우가 발생할 수 있다. 그리고, 대부분의 스타트업들은 이런 현상을 맞이한다. 물론, SI현장에서는 너무도 비일비재하게 반복되는 경우가 많기 때문에 이런 현상은 지금 이 순간에도 반복되고 있다.도대체 왜 이런 상황을 만들었는가? 그리고, 누가 이렇게 만들었는가? 분명, 스타트업 초기에는 의기투합했던 CEO와 기술 총 책임자가, 어느 정도 기업이 성장하고 나니, 업무의 우선순위와 요구사항의 폭주 속에서 서로 일기토를 벌이는 대립된 상황이 되어버린 것은 무엇 때문일까? 도대체 이렇게 개발업무가 뒤죽박죽 되어버린 것은 누구의 책임인가?아키텍처가 부재하고, 아키텍트 역할을 담당하는 사람이 없는 경우에는 이런 현상은 매우 당연하다. 오히려, 발생되고 있는 것을 모른다면 그것은 더 위험하다. 개발자나 담당자가 현상을 숨길 가능성도 매우 크다. 언제나 개발 리소스는 부족한 것이 정상이다.개발 일정은 촉박하고 만들어야 할 것은 많으며, 버그는 언제나 발생한다. 이런 사항들을 어떻게 처리하는 것이 가장 합당한 것인가에 대해서 삐딱한 아키텍트의 시선으로 몇 가지 정의하여 보자.한편으로는 이러한 상황은 매우 당연한 것이다. 소프트웨어 개발을 할 때에 수많은 업무들이 밀려온다. 또한, 요구사항들은 급변하고 시장 또한 급속도로 변화를 일으키는 것을 간과해서는 안된다.‘냉정하게 ‘경영진’이나 ‘개발 총 책임자’의 능력이 부실해서 그런 경우가 태반이다.‘라고 필자는 이야기하고 싶다. 그런 상황을 피하게 해야 하고, 그런 문제를 해결하기 위해서 최선을 다해야 하는 것이 그들이 해야 할 일이다. 그래서, 고액 연봉을 받는다. 그러니, 이런 문제는 그들이 해결해야 한다.결론은 그러하지만, 그런 상황을 좀 더 세밀하게 분석해보자.보통 이러한 일이 발생하는 경우의 가장 대표적인 문제는 경영진의 ‘경영 목표’가 불분명하고, ‘프로젝트의 골’에 대해서 가치의 설정을 제대로 못하고, 이에 대해서 조직원들에게 의사전달이 불분명할 때에 이런 상황들이 대부분 발생한다. 그리고, 결과는 불을 보듯 뻔하게 된다. ( 의사소통이 안되었다고 판단하기도 하지만, 대부분 일방통행으로 전달되어지는 지시사항들이 대부분이므로, 의사소통의 문제는 아니다. 그러니, 개발자나 기획자, 디자이너의 책임이 아니다. 그냥, 지시가 잘못된 거다. )물론, 전통적인 제조업체와 전통적인 관료조직에서는 이러한 문제를 해결하는 다양한 방법들이 연구되었고, 차근차근 일을 풀어나가는 방법에 대해서도 많은 해결책과 솔루션들이 등장한다. 하지만, ‘지적 생산’을 주 업무로 하고 있는 소프트웨어 개발에 있어서는 이러한 방법들은 정말 바보스러운 프로세스를 만들 뿐이고, 인원이 비대해지며, 불필요한 회의와 불합리한 결정들이 도배되는 경우가 많은 관료조직을 비대하게 만드는 경우가 많다. 이런 문제를 해결하겠다고, 조직의 구성 방법이나 조직을 관료화하고, Tree구조로 만드는 바보 같은 짓을 필자도 그런 실수를 반복했었다. (ㅡ.ㅡ;)스타트업으로 빠르게 시작한 기업이 어느 정도 매출을 일으키거나, 서비스가 완성되어 갈 때에, 대규모 인원을 확충하면서 발생되는 문제들은 아이러니하게도 대부분 비슷하다. 그 문제의 핵심중의 핵심은 그 ‘문제’ 들을 어떻게 나열하느냐이다.그렇다면, 이러한 문제들을 어떻게 명확하게 해야 하는가? 그것을 조금 더 명확하게 개발업무에 있어서 정의한다면. 소프트웨어 개발에 있어서 가장 초보적이고 기본적인 ‘업무의 요구사항’을 제대로 결정하는 것이다. 그리고, 이러한 ‘요구사항’을 어떤 방법으로 중요한 ‘업무의 우선순위’를 잘 결정하는 것이다.이런 ‘우선순위’를 결정하기 위하여 ‘요구사항’을 어떻게 잘 정의하는가가 이 문제를 보다 명확하게 하는 방법의 가장 핵심중의 핵심이 되겠다. 물론, 똑똑한 경영자와 리더가 앞에 나서는 것은 당연한 것이겠이고, 그러한 리더는 ‘요구사항’을 정말 명확하게 정의하고, To-be에 대해서 명쾌하게 정의할 수 있다. To-be가 명확하고, 만들고자 하는 제품과 서비스가 명확하다면 이런 혼란을 발생하지 않을 것이다.하지만, 불분명한 목표와 불분명한 요구사항은 결국, 소프트웨어 개발을 파국으로 만들어 버리는 첫 번째 문제점이다. 훌륭한 리더는 작은 요구사항과 작은 결정사항부터 명확하게 정의한다.소프트웨어 개발 업무의 우선순위를 결정하는 방법물론, 이 내용은 소프트웨어를 중심으로 IT설루션이나 서비스를 개발하는 업체를 대상으로 설명하기는 하지만, 일반적인 기업들도 요즘은 대부분 중요한 의사결정과 지적 프로세스들을 갖추어야 하기 때문에 발생되는 문제들은 대부분 대동소이하다고 하겠다.또한, 경영의 목표에 대한 설정과 과학적인 접근 방법은 경영학적인 관점이기 때문에, 그 부분에 대해서도 이 글에서는 논외로 하자. 보통 조직이나 기업은 제한된 리소스와 자원과 일정을 가지고 최대의 이익과 목표를 도달하기 위한 경영자의 판단에 의해서 결정되어지고 움직여진다. ( 그래서, 사장이 똑똑해야 한다. )대부분의 조직과 회사는 이미, 시작부터 그 결과를 예측할 수 있다고 보는 것이 합당하다. 이처럼, 냉정하게 경영의 목표를 명확하게 하고, 조직의 비전과 한 해의 목표와 프로젝트의 목표에 대해서 얼마나 잘 결정하느냐가 핵심적인 성공요소들이다. 목표가 명확하면, 업무 순위도 명쾌하다.아무리 개발자가 똑똑하다고 해도, 경영진의 삽질을 버텨낼 수 있는 것은 거의 ‘기적’에 가까운 일이기 때문이다. 결정하고 업무의 우선순위를 정의하는 사항들이나 체크리스트에 대한 이야기인 경영진들이 판단해야 하는 내용에 대해서는 필자의 경험( 중견기업의 임원 노릇 )을 바탕으로 다음 기회에 이야기하도록 하겠다. 아마도, 스타트업과 중견기업의 임원으로 일해본 필자가 해줄 수 있는 이야기는 필자 주변에서 물어보듯이 생각보다 많은 듯하며, 브런치를 통해서 자주 언급하고 이야기하도록 하겠다.정말 중요한 소프트웨어 개발 기업에서의 업무의 우선순위는 무엇으로 결정되어지는가? 그것은 대부분의 기업과 대동소이하다. 그것은 ‘기업이 추구해야 할 이익’이다. 그리고, 그 이익을 위해서 어떠한 경영적인 지표와 목표를 설정하느냐에 따라서 결정되어진다.이러한 결정사항이 개발업무의 우선순위에 가장 지대한 영향을 준다. 앞서 이야기했지만 경영지표를 설정하는 것은 이 글에서는 논외이다. 일단, 여기서는 경영의 목표는 명확하다는 전제하에서 매일매일 요구사항에 따르는 업무의 우선순위가 요동치게 되는 상황을 생각해보자. ( 일단, 똑똑한 경영진이 제대로 된 목표 설정을 했다고 본다. )하지만, 그렇게 목표 설정이 되어도, 요구사항과 업무의 우선순위가 요동치는 경우는 똑같이 발생하게 되는 경험을 하게 된다. 도대체, 왜? 이런 현상들이 발생되는 것이고, 왜? 우리는 이러한 변동되는 상황 속에 노출되어 있는 것일까?대부분의 소프트웨어 개발 업무들을 보면, 생각 이상으로 매번 계획에 없던 일은 수시로 발생하고, 발생된 업무들은 아이러니하게도 중요한 업무 리스트로 추가되는 해괴한 현상이 수업이 되풀이된다. 도대체! 왜? 그런 현상이 일어날까?시장의 매우(!) 변화는 당연하다.물론 이러한 상황을 여러 가지 상황으로 해석할 수 있겠지만. 대부분의 이런 식의 업무의 우선순위가 요동치는 이유는 '회사 주변의 변화'가 극심해서 벌어지는 현상 중의 하나일 수 있다. 이러한 경우는 극히 당연하며, 이 요동치는 것을 어떻게 프로세스에 반영하는가가 관건이다. 그래서, 해당 프로세스의 분석과 반영에 집중하면 최고의 프로세스를 얻을 수 있다. 대부분이거나 특히, 일등 경쟁업체가 있고. 그 업체의 행동을 주시해야 하는 팔로워 정책을 사용하는 업체의 경우에는 이런 일은 거의 매번 발생하는 경우이니, 어떻게든 이러한 변화를 탄력적으로 운용할 수 있는 환경을 만드는 것이 중요하다.분명, 더욱더 극심하게 발생하는 것과 소프트웨어 개발과 환경, 조직을 그에 맞추어야 하니까 발생하는 것이다. 냉정하게 해당분야의 1등 기업이 아니고서는 대부분 이러한 현상을 비일비재하게 만나게 된다. ( 보통 기업들은 애플과 같은 선도적인 기업이 아니다. ) 그리고, 이런 요동치는 '변화'에 따라서, 보통은 이러한 변화에 따라서 세부적인 실행방안과 전략, 결과물들이 변동되는 것인 어찌 보면 당연하고 지당한 범위의 변동일 수 있다.당연하게도 이러한 ‘시장의 변화’를 내부 조직원들에게 어떻게 전파하고, 의사소통하는 것이 효과적인 것인가에 대해서 더 많은 투자를 해야 하고, 해당 정보들을 빠르게 전파할 수 있는 방법들을 고안해야 한다.하지만, 시장은 그대로인데? 요구사항은 요동친다?그렇지만, 시장의 변화도 없고, 경쟁기업의 변화도 그다지 없는데도, 부서와 부서원, 개발자와 영업 등에 있어서 주요한 우선순위가 요동치고, 기준점이 없는 상황에서 방황하게 되는 현상은 왜 일어나는 것일까?재미있게도, 대부분의 '우선순위'변동은 이러한 외부요인에 의해서 발생하지 않는다는 점이다. 보통은 이런 '외부요인'에 대한 대응방안과 충격은 대부분의 회사와 조직에서 반응할 수 있도록 대처가 되어있는 편들이다. 그리고, 경영이나 관리조직은 그러한 것들을 탄력적으로 운영할 수 있는 다각도적인 방법들에 대해서 이미 익히 알고 있기 때문에, 대부분은 소프트웨어 개발 조직에 이러한 여파가 가지 않도록 최선을 다한다. (* 만일 이런 상황이 아닌데도 개발 조직에 여파가 전해진다면, 전적으로 관리조직이나 리더십의 문제, 의사소통 등의 문제들이 그대로 드러난 것이다. )정말 대부분의 '우선순위'의 변동은 엉터리 같은 상황에서 발생되는 경우가 생각 이상으로 많다. 그것의 대부분은 납득하기 어려운 모호한 이유와 상사의 변덕, 사내 정치의 비합리적인 결정 등에 따라서 변화되는 경우가 많다.물론, 대한민국의 SI특성상 거지 같은(?) 고객의 불합리한 요청사항 때문에 거지 밥상을 뒤엎듯이 변화하는 것 또한 엄연한 현실이고 사실이다. 하지만, 냉정하게 이러한 현실에 대해서 잘 알고 있으면서 대응을 하지 못한다는 것 또한 분명 능력과 실력의 문제이기도 하다. 분명, 거지 같은(?) 고객과 시장이라면 그에 응당한 대응조직이나 프로세스를 갖추어야 한다. 하다 못해, 술말 마시는 술상 무라도 동원하는 것이 합당하다. 대한민국 공공 SI의 성패는 ‘술자리’에서 결정되는 경우도 많다. (ㅡ.ㅡ;)정말 중요한 것은 이런 상황을 파악하는 것 그 자체가 중요한 것이다. 이처럼 정말 중요한 것은 업무의 요구사항에 대한 본질을 정확하게 파악하는 것이다.분명, 자신의 조직과 회사에서 '소프트웨어 개발업무의 우선순위'는 어떤 식으로 결정되어지며, 어떤 것들이 정말 중요한 업무인지 파악하고 분석하는 것이 가장 핵심적으로 필요하다. 아주 세부적인 우선순위에 대해서는 실제 해당 업무를 분석하고 정의해야 하지만, 일반적으로 이러한 ‘요구사항의 본질’을 정의하는 데 있어서, 최소한 두 가지의 스텝으로 업무를 구분하고, 다음의 4가지 정도의 업무형태는 구분해야 한다고 생각한다.현재 팀에 적합한 소프트웨어 개발업무의 우선순위를 결정하자!그것의 첫 번째 스텝은 정말 필요한 '0순위의 업무'와 '쓸데없고 필요 없는 일'을 구분하는 것이다. 그리고 남은 요구사항과 업무들은 일반적인 업무들이며, 그 업무들은 다음 스태프의 분석과 정의에 따라서 ‘고품질이 요하는 업무’와 ‘적정 품질을 요하는 업무’를 구분하는 것이다.이처럼 0순위 업무, 불필요한 일, 고품질 업무, 적절 품질업무의 4가지 스태프로 구분하여 업무의 우선순위를 정하는 것이 요구사항 분석의 첫 번째 단계이다. 그리고, 그러한 기준과 성격에 대해서 조직원들에게 폭넓은 이해를 구해야 하며, 그 부분에 대해서 공감대를 형성해야 한다. 대부분 기업의 목표와 비전은 그러한 것을 전제로 구성되게 된다. 그렇다면, 이러한 해당 업무의 성격은 어떻게 구분하는지 하나씩 살펴보자. 요구사항들에 대해서 구분이 어렵다면, 필자가 사용하는 방법을 한번 사용해 보라. 아래의 표는 요구사항의 우선순위를 평가하기 위해서 필자가 사용하는 방법이다. 점수를 만들어서 사용하는 것이 가장 간단할 수 있다.표1, 요구사항에 대한 가중치 리스트위의 표를 이용하거나 적절하게 요구사항의 가중치를 조절하여 ‘수치화’하는 것도 일부분 가능하다. 하지만, 이렇게 정량적으로 판단하는 것보다 더욱더 중요한 것은 ‘요구사항’은 ‘정성적’인 판단을 제대로 하는 것이다.0 순의 업무를 찾고 정의하자가장 쉽게 이야기하면. ‘기업의 이익을 가져다주는 확실한 것’이 명확하게 드러난 것을 의미한다. 몇 가지 부연설명을 하자면, 기업이 사활을 걸어야 할 신기술이 들어간 서비스, 매출 증대를 위한 새로운 시장에 진입하는 비즈니스 모델을 갖춘 서비스, 수익모델을 만들고 실현하기 위한 일련의 서비스의 Back-office 작업들, 현재 서비스 중인 소프트웨어의 위기사항을 타개할 해결책을 찾는 것 등이 이러한 '0순위 업무‘에 해당한다.더 명쾌하게 이야기하자면 '업무의 가치'가 명확하고, '업무의 요구의 원천'이 명확하고 정확하게 드러난 요구사항들 중에 '수익'이 명쾌하게 보이는 일이 이에 해당한다. 이러한 '업무'들은 개발 조직뿐만 아니라, 영업이나 기타 조직에서도 발 빠르게 대응하는 것이 가장 중요하다.보통 이러한 일들에 있어, 가장 중요한 것은 '타이밍'이게 된다. 말 그대로, 발생한 시기와 해결되는 시기의 주기가 가장 짧아야 한다. 말 그대로, 고객이 원하는 제품과 서비스를 의미한다. 그래서, 0순위로 진행해야 한다.또한, 이러한 타이밍은 기업에게도 큰 기회를 주지만, 해당 업무를 추진하는 부서와 개인에게도 큰 이익과 인사고과의 결과를 선사하기 때문에 정말로 의미 있고 중요한 업무가 된다. 다만, 이러한 0순위 업무의 구분을 해야 하는 경우에는 해당 조직과 회사에 당연하게도 인사고과나 인사정책 또한 잘 구성되어 있는 경우에만 이러한 우선순위의 결정이 의미가 있다. 또한, 결정되어지는 긴급한 의사결정에 대해서 신속하고 명확한 의사전달과 의사소통이 가능한 집단의 경우에게만 이러한 ‘0순위 업무’에 대한 정의가 가능하다.앞서 이야기한 인사정책이나 의사소통이 불분명한 조직에서는 아무리 ‘고객’이 당장 원하는 ‘서비스’와 ‘제품’이라고 하더라도. 소프트웨어 개발 조직에서는 생뚱맞게 튀어나온 불특정 한 업무로 밖에 받아들이지 않는다.그러한 ‘문화’와 ‘환경’을 갖추고 있지 않는 기업이라면, 이러한 ‘0순위 업무’는 가능한 발생시키지 않는 것이 최선이다. 그리고, 다음의 ‘불필요한 일’을 구분하는 정도로만 진행하는 것이 더 효과적일 수 있다.하지만, 잘 갖추어지고 유연한 소프트웨어 개발 조직에서는 이러한 이벤트적인 최고 결정사항을 발 빠르게 대처할 수 있다. 이러한 일들은 말 그대로, 잘 수행된 이후에 기업도 이익이고 부서도 신바람 나고, 개인도 업무 고과에서 큰 영향을 받을 수 있는 일이므로, 기업에 가장 큰 이익과 긍정적인 효과를 매우 크게 안겨다 주는 업무가 된다.가장 중요한 ‘문화’가 성립되어진 기업과 조직은 어떻게든 이러한 ‘0순위 업무’를 정말 잘 필터링하는 것이 해당 기업의 점진적인 성공과 성패의 최우선적인 결정사항이 될 것이다.보통 이러한 결정은 어느 정도 회사의 서비스와 제품이 성공적으로 시장에 안착한 다음, 시장이 확대되거나 해외 수출 등의 매출이 급속도로 증가하는 시점에서 심각하게 고려해야 할 사항들이다.그렇다면, 이러한 요구사항이나 업무는 어떤 식으로 결정하는 것이 최선일까? 여러 가지 의견이 있지만, 크게 두 가지로 나눌 수 있다. 하나는 대부분 이러한 업무는 특정 체크리스트와 회의에 의해서 결정될 수도 있다는 점. 또 다른 하나는 리더십을 가진 사람이거나 경험이 풍부한 사람이 직감과 경험에 의존하는 것이다.과연 어떤 방법이 효과적일까? 프로세스로 이러한 0순위 업무를 결정할 것인가? 직감과 경험에 의존할 것인가? 두 가지 모든 것을 고려할 것인가에 대해서는, 각 조직과 기업의 성격에 따라서 조금씩 다르다.다만, 정말 중요한 것은 ‘0순위 업무’를 제대로 구분하고, 이를 정하는 일련의 작업들을 수행하고 있는가 하는 점을 먼저 판단하는 것이다. 보통 이런 ‘0순위 업무’들은 너무도 명확하기 때문에 잘 드러나서 경험과 직관으로 결정하는 것이 더 효과적인 경우가 많다. 경험이 풍부한 고급 개발자나 아키텍트와 같은 인력을 보유하는 절대적인 이유이기도 하다.하지만, 문화적인 형성도 힘들고, 고급인력도 없다면, 다음의 ‘쓸데없는 일’을 찾는 것에 중점을 두어보자.현재 상황에서 ‘쓸데없는 일’을 구분하자.대부분의 소프트웨어 개발 조직에서 가장 잘해야 하는 작업은 정말로, '쓸데없고 필요 없는 일'을 구분하는 것이다. 냉정하게 지금 당장 필요 없는 업무, 해도 그다지 성과가 없는 업무, 의미가 부족한 업무 등이 이에 해당된다. 대부분 이러한 업무들의 대부분은 '업무의 가치'가 불명확한 경우와, 누가 만들고 요구한 것인가? 에 대한 요건이 불명확한 경우가 많다.이 두 가지에 해당되는 내용들이라면, 대부분 쓸데없는 일이나 요구사항으로 구분하여 정리하고 처리해야 한다. 물론, 요구사항의 수집이 잘못되었을 수 있지만, 그것은 수집의 문제에 대해서 다시 논하기로 하자. 요구사항 수집 공학과 관련된 이야기도 칼럼 중에 한번 이야기해야 할 내용이다.하여간 이러한 ‘쓸데없는 일’들은 분명, 현재의 작업에 등록되어 있고, 누군가가 하고 있으며, 어떤 지시에 의해서 실제 수행되는 경우가 상당수 존재한다. 이러한 대부분의 일들과 요구사항들을 살펴보면, 현재 등록되어진 대부분의 업무들 중에 10가지 중에 1~2가지 일들은 대부분 타성적으로 흘러 지나가는 경우가 대부분인 경우가 많다. 냉정하게, 현재 등록되어진 요구사항이나 업무에 해당하는 것들의 10~20%는 정말 '쓸데없는 일'들이 많다. ( 지금 당장 업무의 Task를 살펴보면, 이런 쓸데없는 일들을 찾을 수 있다. 왜? 자신도 모르게 버퍼 삼아서 등록해 놓은 업무, 팀장이 버퍼로 등록한 업무까지 정말 많다. )또한, 그 이외에도 대부분이 비즈니스 환경이 변하거나, 업무를 지시한 상사의 변덕 등으로 사라지는 업무들도 이에 해당한다고 볼 수 있다. 이러한 업무들은 해당 이벤트와 상황에 따라서 후순위로 처리되거나 하지 말아야 할 것들에 해당한다. 그렇다면, 이러한 쓸데없는 일들을 어떻게 구분해 내는가? 가장 대표적으로 구분하는 방법은 ‘만들어진 보고서’와 ‘결과물’이 소홀하게 관리되는 경우가 대부분 이에 해당한다고 보면 되겠다.이러한 쓸데없는 일들의 결과들을 살펴보면, 정말 심한 경우 보고서나 결과물에 대해서 보고를 받는 시간 10~20분 정도의 대충하는 경우도 많은 것이 대부분이다. 그리고, 실제로 관료화된 조직에서는 이러한 많은 업무들이 필요 없는 업무들로 구성되어진다.소프트웨어 개발 조직이 관료화된다는 것이 얼마나 비효율적인가 하는 점은 굳이 첨언하지 않아도 대부분의 개발자들이 잘 알고 있을 것이다. 소프트웨어 개발 조직이 관료화되어있다고 생각한다면, 대부분의 '소프트웨어 개발 업무'들은 쓸데없는 일에 30~40%의 일을 소모하고 있는 경우가 대부분이라고 봐도 무방하다.그래서, 이러한 업무들을 구분하는 방법으로는, '업무가 추진되고 나온 결과물'을 검토하는 시간과 결과물에 대한 반응을 살펴본후, 그 반응이 어떻게 내재화되는지에 대해서 검토하여 보면 대부분 알 수 있다.또한, 해당 서비스나 라이브러라, 산출물들이 얼마나 재활용되고 있으며, 효과적으로 반영되고 있는지에 대한 평가도 같이 하면, 이러한 ‘쓸데없는 일’을 찾아낼 수 있다. 대부분 이러한 업무들의 대표적인 것들이 냉정하게 신입사원들 대부분의 업무가 그러하고, 선임 직원들은 관성에 따라서 만들어 내는 업무들이 대부분 이러한 경우가 많다. 또한, 습관적으로 중복적인 업무들도 많이 발생한다. 이러한, 업무의 누수를 어떻게 잘 검토해 내느냐가 관건이고, 정말 필요한 일을 잘 판단하는 기본적인 체크를 할 수 있는 방법을 만들어야 한다.이러한 분리된 스텝으로 정말 필요한 일과, 정말 필요 없는 일을 구분하는 것만 체크하고 점검하여 진행하여도, 업무의 우선순위는 대부분 정해지고, 불필요한 일과 쓸모없는 일들을 제거할 수 있다. 물론, 냉정하게 이러한 업무를 제대로 해야 하는 것이 중간관리자나, 팀장들이 일을 잘하는 경우에 해당되겠다. 또한, 효과적인 의사소통이 많아지고, 효과적으로 대응하는 경우에 이러한 업무의 구분이 보다 명확해진다. (* 그렇다고, 의사소통을 많이 하겠다고, 회의시간만 길게 잡는 것 또한 불확실한 일처리를 의미한다. 대부분 그 방법은 해당 조직들이 더 잘 알고 있다. 어떤 장소에서 어떤 시간이 더 많은 대화를 나누는 것인지 잘 알고 있다. )최소한의 이러한 구분이 가능하다면, 좀 더 업무의 우선순위를 좀 더 세분화하여 정의할 수 있게 시도할 수 있다. 그것은 소프트웨어 개발에 있어 정말 중요한 정말 고품질을 요하는 업무와 적정한 품질로 처리해야 하는 업무에 대한 구분이다. 필자의 경험에 따르면 정말 고품질을 요하는 소프트웨어 개발의 범위는 전체 프로젝트 범위의 30%를 넘어선 적이 없다. 대부분은 변화가 있으며, 단순 처리되는 내용들이므로, 적절한 품질로 대응이 가능하다.단순한 crud성 화면 프로그램에 엔진에서 검토해야 하는 품질 절차와 리소스를 투입하는 바보 같은 짓을 되풀이해서는 안된다. 전체적인 품질 테스트에서도 충분하게 검토될 내용과, 단위 테스트와 아키텍처적인 관점에서 접근해야 하는 고품질의 영역을 제대로 구분해 내는 것 또한 소프트웨어 개발의 요구사항을 효과적으로 대응하는 것이다.해야 할 일중에 정말로 고품질을 요하는 소프트웨어 개발업무를 구분하자성과가 명확하게 보이는 개발업무로써, 해당 소프트웨어의 개발된 서비스의 실체와 가치가 완벽하게 드러난 일이다. 또한, 해당 서비스나 소프트웨어가 다른 개발팀이나 다른 서비스에 많은 영향을 주는 영역의 개발이라면 당연하게도 ‘고품질’이 요구된다.다만, 0순위처럼 '그 이익'이 정량화되지는 않았으나, 정성적인 기준에 의해서 그 가치가 명확해진 개발업무들이라고 보면 된다. 대부분 이러한 일들은 '요구사항'의 변화가 거의 없을뿐더러, 관료조직의 극성인 변덕스러운 직장상사도 필요한 요구사항을 틀지 못하는 경우가 많은 서비스이거나 업무에 해당한다.또한, 이러한 대부분의 고품질 개발일은 이러한 '최선을 다해야 하는 일'인 경우이다. 하지만, 업무 순위를 결정할 때에 잘못하는 것 중의 하나가. 매일, 매번 이러한 '최선을 다해야 하는 일', ‘고품질’로 결정되어진다는 것이다. 그렇지만, 그렇게 결정된 ‘고품질 속성’은 잘못 결정된 판단일 가능성이 높다. 고품질은 많아야 전체 업무의 30% 정도이다. 그 이상으로 책정된다면, 평가기준부터 잘못된 것이므로 다시 살펴봐야 한다.물론, 정확하게 일에 대해서 살펴보면 이렇게 구분하는 것은 대단한 업무 처리능력을 가진 기업이나 조직일 수 있겠지만. 그런 식으로 제대로 관리하는 기업은 한 번도 본 적이 없다. 관리의 S기업도 그렇게 정의하지는 않고, 안전이 가장 중시되는 항공기 관련 소프트웨어 개발에 있어서도 그런 식으로 기준을 정하지는 않는다. 이런 식으로 대부분의 업무가 '고품질'로 책정된다면, '업무의 중요도'를 잘못 판단하고 있는 것이다. 그러므로, 기준 작업과 검증작업을 다시 해야 한다.다만, 개발업무내용에서 그 사용가치를 찾기 힘들고, 만들어진 결과물 또한 다른 서비스나 개발 조직에 별다른 기여를 하지 못할 것이 명백하지만, 최선을 다해야 하는 개발업무가 있다. 그것은 '사장님' 또는 개발 총괄 책임자가 만들어낸 업무이다. 그것은, 개발업무 우선순위에 있어서 '책임'은 윗분들이 결정한 것이기도 하지만, 고위층의 경영적인 판단에 의해서 움직이는 전략적인 업무일 수 있다.보통 이러한 사항들은 '경영진의 의사결정'이기 때문에, 우선순위를 중요하게 책정해야 한다. 그리고, 이러한 ‘업무의 성격’은 명확하게 ‘요구사항’이나 ‘업무’에 명시가 되어야 한다. 그래야, 개발 조직은 개발함에 있어서 주저함이 없을 것이다.대부분은 고품질이 아니며, 적절한 품질요건으로 만족하는 개발 영역대부분의 '쓸데없는 일'이 아닌 보통의 개발업무들의 경우에 이 4번째에 해당한다. 이 소프트웨어 개발업무는 고품질이 아닌, 해당 개발업무의 기본적인 완성도만 추구하면 되는 일이다.또한, 이러한 업무들은 대부분 QC와 QA의 업무가 구분되어져 있고, 해당 리소스를 투입하고 있는 경우에는 이 부분으로 처리가 되는 경우가 더욱더 많이 정의되게 된다. 가능한, 품질관리에 투입되는 리소스를 최소화하는 것이 전체적인 개발의 성과를 향상하게 된다. 소프트웨어 개발업무를 어떻게 하든 이 영역을 80% 이상으로 끌어올리는 것이 개발을 효과적으로 수행하게 하는 것이다. 필자의 경험에 따르면 ‘고품질’은 20%, ‘저품질’은 80%의 영역으로 설정하고, 고급 리소스는 ‘고품질’에 투입하도록 하는 것이 가장 합당하다.일반적으로 소프트웨어 개발업무의 대부분의 구성 업무들은 이러한 '적당하게 해야 하는 업무'이다. 이 업무에는 '에너지'와 '시간'을 낭비하면 안 된다. 말 그대로, 적정하게 해야 한다. 그리고, 개발자들에게 ‘잉여’를 공급하게 하고, 반복적인 테스트와 품질 검토는 품질관리 조직에서 다양한 방법으로 접근하고, 문제의 발생을 추적하여 통보하여, 품질관리를 분리하는 것이 최선이다.‘고품질’은 품질의 주요한 권한과 책임을 ‘개발자’에게 주는 것이고, ‘저품질’은 품질을 프로세스에서 검토하여 통보하는 방법으로 수행하는 것이다. 이는 개발 조직의 최대한의 역량을 ‘고품질’에 집중하게 하고, 단순 반복 테스트와 같은 업무를 소프트웨어 개발 조직에 있어서 가장 중요한 ‘개발 조직’을 효과적으로 활용하게 하는 것이다.물론, 이러한 품질 관련 업무의 가장 중요한 고려사항은 직장상사나 동료들과의 커뮤니케이션을 가장 중요시하게 된다. 이러한 업무의 대부분은 '신뢰'가 전제가 되어야 하기 때문이다. 또한, 여기서 가장 중요한 것은 '신뢰받는 직장상사'와 ‘신뢰받는 부서’의 업무지시가 가장 핵심이 되게 된다. 또한, 이러한 업무의 우선순위가 정치적/심리적 변화에 따라서 변화되는 요구사항은 제대로 된 업무가 아닌 것이 된다. 이 부분이 가장 중요하다.일반적으로 이해하고 있는 에자일의 핵심적인 요소는 위에서 잠시 설명한 ‘신뢰’를 어떻게 의사소통하느냐가 관건이다.결론적으로 이야기하자면 소프트웨어 개발업무에 있어서 ‘업무의 우선순위’를 결정하는 요구사항을 분석하는 데 있어서 최고의 핵심 요소는 다음의 5가지를 잘 정의하는 것이다.1) 업무의 가치2) 업무의 원천( 누가 만들고 요구한 것인가? )3) 기업의 가치 추구4) 직장상사와 동료의 가치 추구5) 고품질이 정말 필요한 업무의 구분이러한 4가지의 관점을 어떻게 정성적이고 정량적인 방법으로 도출하며, 이를 의사소통하여 공통 관심사를 형성하느냐에 달려있다. 하지만, 현대의 관료화된 조직의 대부분들은 쓸모없는 요구사항들이 상당수를 차지하며, 해당 조직의 스트레스에서의 핵심 요소가 된다는 점이다.이와 같이 업무의 요구사항들을 어떻게 구분하는 것인가부터 시작하는 것이 '요구사항 공학'의 기본적인 정의이다. 냉정하게, '업무의 가치'는 그 기업과 조직이 가지고 있는 '비전'과 '골'에 영향을 받는다.그러므로, 경영진이 가장 똑똑해야 그 기업의 가치가 증대된다. 언제나 이야기하지만 경영자의 삽질을 이길 수 있는 슈퍼 개발자는 존재하지 않는다. 그것은 기적이다.
조회수 2714

웹 개발자 react native와 친구 되다

안녕하세요. 프론트엔드 bk입니다.자존감이 폭발하는 요즘. 제 자신이 뿌듯하여 이 기분을 오래 간직하고 싶어 쓰는 글입니다. 물론 react native 설치법, 꿀팁 같은 건 없고(react native 경력 2개월) 제가 느꼈던 react native 장단점과 크몽에서 새롭게 선보인 단기 알바 매칭 앱 SOON react native 개발기에 대해 겸손히 적어보려 합니다.어떻게 React Native로 개발하게 되었는가우선 별 볼 일 없는 저를 소개하자면 개발 경력 3년 반 쯤 넘고 React 2년 6개월, Vue 9개월 정도를 프론트 메인 라이브러리로 사용했습니다. 그 동안 훌륭한 분들과 함께 개발을 해왔고, 현재 크몽에 입사한 지는 10개월쯤 되었네요,개발자라면 react native (이하 RN)에 대해선 한 번쯤 들어보셨을 겁니다. 저도 2년 전쯤 처음 들어봤는데요 그때는 네이티브 앱에 비해 느리다, 성능을 못 따라간다, 역시 네이티브!라는 말이 많아서 아 그런가 보다 하고 웹 개발에만 집중했었죠. 그렇게 2018년 9월, 열심히 휴게실에서 크몽의 Vuejs 구조를 잡던 중에 저희 크몽 CTO(a.k.a 크알)가 크몽에서 신규 플랫폼 단기 알바 앱을 기획 중인데, 빠르게 시장 반응을 확인하고, 개발 리소스를 최소화하기 위해 RN로 개발하면 어떨까 하고 React를 경험했던 저에게 권유하셨습니다. 무덤덤한 척했지만 사실 기분 째 질 뻔했습니다. 누군가에게 필요로 하는 사람이 된다는 건 기분 좋은 일이니까요.그렇게 약 1주일간 RN을 필사적으로 공부하여 10월 초부터 본격적인 SOON 폭풍 개발을 시작했습니다. 기본적인 개발 스택은 python + RN + mobx 조합으로 구축되었습니다. (백엔드분 들도 python으로 처음 도입!) 여러 레퍼런스들을 보며 나만의 best practice를 찾아갔고 mobx와의 조합도 훌륭했습니다. react는 익숙하지만 처음 앱 개발을 하는 터라 수많은 시행착오를 겪어야 했죠. 그만큼 새로운 경험도 엄청나게 했습니다. RN 개발자가 당연히? 저 혼자 였기 때문에 누구에게 물어볼 수 도 없었고 그냥 헤딩하며 하나하나 알아갔던것 같네요 ㅎㅎ..... 불과 얼마 전까지도 초창기에 (1달 전..) 짰던 코드를 보고 한숨을 깊게 쉬고 리팩터링을 한 것 수두룩합니다. 그 사이 실력이 늘어났나 보다!라고 열심히 행복 회로를 돌렸죠.RN... 정말 할만할까?정말 할만합니다. 우선 RN은 웹 개발자 (초급 이상의 javascript를 이용한다는 전제하에)라면 10초도 안 걸려 hello world를 띄울 수 있을 만큼 쉽게 만들어져 있습니다.요즘은 expo라는 툴 덕분에 안 그래도 쉽게 개발할 수 있게 만들어진 RN을 더더 더욱 쉽게 접할 수 있게 되어있습니다.hello world기본적으로 RN은 React 기반으로 되어있기에 나는 React를 못써~ 나는 vue or angular 밖에 안 해봤어~라고 하더라도 충분히 빠르게 배울 수 있으리라 생각합니다. React나 vue나 거기서 거기 (위험한 발언이지만 둘 다 상용서비스로 사용해본 입장에선 하나 배우면 다른 라이브러리를 배우는 시간은 처음 배울 때 대비하여 절반도 안 걸렸던 것 같네요)앱 개발이라고 안 하기 보기보단 일단 hello world만 찍어보면 와 재밌다~ 하고 이것저것 더 해보는 자신의 모습을 볼 수 있을 겁니다. 앱 개발을 위해서 RN을 해본다기보다 React를 아주 재미있게 배울 수 있는 도구로서도 훌륭합니다. 그냥 지루하게 docs 보면서 하는 것보단 전혀 새로운 분야를 배우면서 자연스레 React도 배울 수 있습니다. Facebook에서 React를 내세우며 앱 개발 RN도 할 수 있다! 의 기술력 과시가 아니라 RN은 정말 쓸만했습니다.뭘 선택해도 훌륭한 선택. 하지만 난 react와 vueRN의 미친 장점첫 번째는 ios, android 동시 개발하나의 코드로 ios, android가 만들어집니다. 여기서 한술 더 떠 view 부분을 html, css로 변환 후 몇몇 로직들만 수정하면 web으로 그대로 가져올 수 있습니다. 반대로 react로 만들어진 web 기반 서비스를 react native로 변환도 가능합니다. RN이 접근한 Learn once, write anywhere가 뭔가 멋있었죠. (95% 정도는 사실이고 5%의 코드는 ios, android를 나누어 개발합니다 ㅜㅜ)두 번째는 미친 수준의 개발 속도딱히 RN만의 장점은 아니지만.. React는 live-reload(코드가 변경되면 자동으로 새로 고침)와 hot-reload(코드가 변경되면 변경된 딱 그 부분만 렌더링)를 지원합니다. 그 어떤 복잡한 설정 없이 도요. 일단 RN은 compile, build 과정이라는 게 없다고 봐도 되기 때문에(속도 면에서) 굳이 live, hot reload가 없이도 빠른 개발이 가능합니다. 하지만 저 두 놈이 있기에 코드를 수정하면 그 화면을 직접 보는 데까지 오버 좀 섞으면 1초도 채 안 걸립니다. 사실 1~5초 걸림QA 시에도 변경사항을 바로 확인할 수 있습니다. 디자이너, 기획자와의 피드백을 빠르게 반영할 수 있어 UX/UI를 잡는데 아주 효과적입니다. 상상보단 직접 보는 게 더 와 닿으니까요. expo환경에서 개발하고 있다면 가상 simulator가 없어도, xcode, android studio를 건들지 않아도 개발/배포하는 데 아무 지장이 없습니다.(SOON이 론칭되고 나서도 android studio는 아직 설치도 안 했습니다.) 이 정도만 해도 장점이 꽤 큰데 사실 진짜 장점은 다음입니다.마지막으로 OTA(실시간 배포) 기능입니다.정말 이것이 제일 미친 장점입니다. RN으로 만들어진 앱은 기능 추가, 버그 수정, 디자인이 바뀌어도 앱 배포를 위한 심사를 거치지 않습니다. 앱 실행 시 언제나 최신 javascript를 다운로드하고 실행하여 유저는 언제나 최신 상태의 앱을 경험할 수 있습니다. 물론 몇 가지 제한 사항이 있긴 합니다. (앱 아이콘이 바뀌거나 앱과 관련된 config가 바뀔 시엔 심사 필요) 언제나 덤벙대고 맨날 까먹는 저는 정말 유용하게 쓰는 기능입니다. 항상 노트북을 가지고 다니기 때문에 뭔가 오류가 생기면 아 이 부분 예외처리 깜빡했네? 수정하고 publish만 하면 끝이라 오류에 대한 심리적인 부담감이 엄청나게 줄었습니다.당연히 단점도 존재합니다.RN은 성능이 아무래도 딸린다던데...native 코드로 변환작업이 필수 ㅜㅜ태생이 네이티브가 아니라 생기는 해결하기 힘든(불가?) 단점이 있습니다. 저도 이 얘기를 수도 없이 들었습니다. 하이브리드 앱, 웹앱 등이 태생이 Swift와 Java 등의 Native를 따라갈 수 있을 리 만무했죠. RN이 세상에 나오고서도 하브, 웹앱보다는 빠르지만 네이티브와 비교하기엔 민망했다고 합니다. (사실 잘 모름) 그 이후에 주기적으로 성능 향상과 효율성에 대한 업데이트가 있었다는 정도..?  성능에 대해선 딱 이 정도의 정보만 알고 있었고 SOON을 만들기 시작했습니다. 당연히 SOON에는 많은 기능이 담겨있진 않았고 오류 투성이었지만 성능에 대해선 한 번도 이슈가 된 적은 없었습니다. 물론 기능이 계속 추가되고 규모가 커지다 보면 성능이 느려집니다. ms로 비교하여 테스트하지 않는 이상 유의미한 결과라고 생각되진 않았습니다.SOON의 핵심가치는 '빠르고 간편하게 단기 알바를 매칭 시켜준다'입니다. 이것저것 앱의 몸집이 아주 크게 늘어날 것 같지 않다고 판단했고, RN이 가장 최적이라 생각했습니다.(@CTO) 객관적으로 보면 아무리 RN이 나르고 긴다한들.. 성능적으로 보면 네이티브에 대적할 수 없을 것입니다. 하지만 언어를 고르고 서비스를 생각한다기보다 서비스 성격에 맞게 언어를 선택하는 것이 옳다고 생각합니다. 언어는 도구일 뿐이니까요.(참고자료 RN, swift의 성능 테스트)아무래도 javascript와 react에 대해 좀 친해야..RN이 아무리 쉽게 앱 개발을 할 수 있다지만, javascript와 React에 대해 조금(꽤 적당히 많이) 알아야 초기 진입 장벽이 많이 낮아질 것입니다. 이 두 가지를 잘 모르는 상태로 무턱대고 RN을 시작하면, RN보다 javascript, React를 공부하다가 포기하는 경우가 많을 겁니다.사라지지 않는 네이티브에 대한 두려움전 네이티브 코드와 환경을 전혀 모릅니다. 앱 등록 시 인증서가 필요하다는 것도 처음 알았고, 정말 아무것도 몰랐습니다. 초기에 러닝 커브가 꽤나 있었죠. Swift, Java를 공부한 것은 아니지만, 앱 등록/배포는 어떻게 진행되는지 하나의 앱이 존재하는 생태계 등 전반적으로 공부했습니다. 아직도 네이티브 관련 에러가 터지면 앱 개발자 분들을 찾아갑니다. 그렇게 하나하나 배워가고 있죠. 아직은 제가 혼자 해결할 수 없는 부분이 있습니다. RN에 좀 더 적응하면, 기초 앱 개발 정도는 따라 할 수 있도록 공부해야 할 것 같습니다. 이러다 앱 개발로 전향할 지도..Hello World...어쨌든! 장단점이 너무 뚜렷합니다. 새로운 서비스를 론칭 준비 중이면, 내 서비스에 RN이 어울리는지 고민 후 적용하시면 됩니다. 단, 이미 개발된 Native App이 존재하는데, 장기적 관점으로만 RN을 다시 개발하는 것은 강력히 비추합니다. 아무리 RN 개발자가 앱을 만들고 해도 누적된 Native의 경험치를 따라잡긴 힘들거든요. 진짜 어쨌든!앱 개발 관심도 있고, Native를 배울 엄두가 없는 분들.일단 Hello World 만 띄워보세요.아주 아주 재밌습니다.   앞으로 얼마나 더 RN을 하게 될지는 모르겠지만 웹 개발만 하던 제가 할 수 있는 영역이 굉장히 크게 늘어났다는 걸 느낍니다. 그래서 말인데.. 어떻게.. 내년 연봉협상에 반영이 될까요?#크몽 #개발자 #개발팀 #React #기술스택 #도입후기 #인사이트 #경험공유
조회수 2514

스타트업이 CTO를 찾는 법?

스타트업이 CTO를 찾는 법? 을 알고 계신 분에게 드리는 "질문"입니다. 이 글을 읽으시는 분들에게 부탁드리고 싶은 것은.. 1. 어디에 만나볼 엔지니어(개발자) 분들이 있으니 거기에 포스팅을 해보세요2. 엔지니어 들은 job을 찾을 때, 이런저런 고민을 하니.. 이런 포인트에서 조금 더 고민해보세요. 3. job 포스팅에는 이런저런 구체적인 내용들이 더 필요하니, 구체적으로 XX를 더 작성해보세요4. 이분 한번 만나보시겠어요? (소개 등등) 5. 공유를 해주셔도 좋습니다... 이런 고민을 함께 하시는 분들을 위해~등등의 조언을 댓글로 주셔도 좋고, 메일로 주셔도 좋고.. 아무튼 이 글은 조언을 구하고자 쓰는 글입니다. ^^;개발을 잘 모르는 스타트업 대표가 CTO를 모시는 방법은 어떤 것이 있을까요? ㅜㅜ대부분의 경우 co-founder 중, 엔지니어(engineer) 분이 CTO의 역할을 담당해주시는 것이 일반적인 경우로 보입니다. 하지만 서비스에서 engineer의 비중이 상대적으로 낮은 스타트업의 경우는 회사가 성장해 나감에 따라 function을 더 크게 만들어 나가는 경우도 있겠지요? 파펨도 그러한 회사 중에 하나입니다.지금까지는 할 수 있는 한 효율성을 따져가면서 최소한의 개발을 진행해왔지만, 이제는 조금 더 적극적으로 서비스를 고도화시켜야 할 때! 이기에 이제 좋은 분을 내부에 모셔야 하는데.. 우선 대표 입장에서의 고민을 한번 늘어놔 본다면.. 1) 개발을 거의 모르기 때문에 (새로 모셔야 할) 그분이 실력자 인지 아닌지 알 수가 없다는 불안감2) Ruby on Rails로 개발이 되어 있어, 이 언어에 능한 분을 찾는다는 것이 어렵다는 소문을 이미 많이 들음3) 엔지니어 분들이 선호하는 job 에 대한 구체적인 정보가 없음  반대로 job을 찾고 있는 엔지니어 분의 입장에서 상상력을 발휘해 본다면.. A) 잘 될 회사인지 아닌지 정확히 모르겠음 : 투자 몇 번 받은 것으로 스타트업 평가가 가능?B) 개발팀이 구성되어 있지 않아.. 당분간 나 혼자 full stack으로 일해야 함 : 내가 하나하나 다해야 함? C) 개발이 중심이지 않은 회사에서 일을 하는 게 적합할지? : 나의 커리어 차원에서 도움이 되는가? 위의 내용을 고려한다면, 100년 만의 개기일식이 일어나는 것과 같은 우연이 없다면 정말 만나기 어려운 인연이 아닐까?라는 생각이 듭니다. ㅜㅜ 그래도 어쩌겠습니까... 그런 인연을 찾아 나서야죠. 예전에는 엔지니어 한 분을 만나면, 리쿠르팅과 관계없이 다른 한 분을 소개 요청드리고, 또 그분에게서 다른 분을 소개받아서 계속해서 아는 분들의 영역을 넓혀가고자 노력도 해보았습니다. 그렇다면 파펨 대표가 생각하는 CTO는 어떤 분일까요? 현재의 파펨 구성원들과 아래의 일들을 함께 해나가 주실 분입니다. 1. 자체 커머스로써의 서비스 업그레이드 : 전체 팀과 함께 논의할 일 2. 알고리즘의 upagrade 반영 : 알고리즘 설계자(대표)와 함께 할 일3. 파펨 DB에서 추출할 수 있는 data를 바탕으로 마케팅 insight 발굴 : marketer와 함께 할 일4. 새로운 tool(예, GA보다 amplitude를 한번 사용해보자 등)을 소개하고 도입 이렇게 쓰면 컴퓨터 공학을 전공한 사람에게 저렇게 많은 것을 요청하는 당신은 경영학과 출신이니.. 재무, 회계, HR, 생산관리 모두 잘할 수 있는 사람인가요?라는 질문을 받을 것 같은 느낌이 들지만... ㅜㅜ 아무튼 어려운 리쿠르팅의 길을 떠나기 전에 머릿속에 생각나는 것들을 한번 써보았습니다.파펨에서 engineer를 찾습니다!! 파펨은? a. Ruby on Rails / AWS에서 서비스되고 있고, 나름 github에 히스토리 정리가 잘 되어 있고, 이전에 프리랜서로 개발에 도움을 주신 분이 체계적으로 정리해주셔서 나중에 열어보시면 뜨악하실 정도는 아닙니다. (라고 합니다. ^^;) b. 구체적인 연봉, job title 등은 상황별로 합리적인 논의를 할 준비가 되어 있습니다. C. 퓨쳐플레이와 아모레퍼시픽에서 투자를 유치하였습니다. #파펨 #스타트업 #창업가 #창업자 #마인드셋 #인사이트 #채용 #CTO #팀빌딩 #팀원
조회수 3239

Attention is all you need paper 뽀개기

이번 포스팅에서는 포자랩스에서 핵심적으로 쓰고 있는 모델인 transformer의 논문을 요약하면서 추가적인 기법들도 설명드리겠습니다.Why?Long-term dependency problemsequence data를 처리하기 위해 이전까지 많이 쓰이던 model은 recurrent model이었습니다. recurrent model은 t번째에 대한 output을 만들기 위해, t번째 input과 t-1번째 hidden state를 이용했습니다. 이렇게 한다면 자연스럽게 문장의 순차적인 특성이 유지됩니다. 문장을 쓸 때 뒤의 단어부터 쓰지 않고 처음부터 차례차례 쓰는 것과 마찬가지인것입니다.하지만 recurrent model의 경우 많은 개선점이 있었음에도 long-term dependency에 취약하다는 단점이 있었습니다. 예를 들어, “저는 언어학을 좋아하고, 인공지능중에서도 딥러닝을 배우고 있고 자연어 처리에 관심이 많습니다.”라는 문장을 만드는 게 model의 task라고 해봅시다. 이때 ‘자연어’라는 단어를 만드는데 ‘언어학’이라는 단어는 중요한 단서입니다.그러나, 두 단어 사이의 거리가 가깝지 않으므로 model은 앞의 ‘언어학’이라는 단어를 이용해 자연어’라는 단어를 만들지 못하고, 언어학 보다 가까운 단어인 ‘딥러닝’을 보고 ‘이미지’를 만들 수도 있는 거죠. 이처럼, 어떤 정보와 다른 정보 사이의 거리가 멀 때 해당 정보를 이용하지 못하는 것이 long-term dependency problem입니다.recurrent model은 순차적인 특성이 유지되는 뛰어난 장점이 있었음에도, long-term dependency problem이라는 단점을 가지고 있었습니다.이와 달리 transformer는 recurrence를 사용하지 않고 대신 attention mechanism만을 사용해 input과 output의 dependency를 포착해냈습니다.Parallelizationrecurrent model은 학습 시, t번째 hidden state를 얻기 위해서 t-1번째 hidden state가 필요했습니다. 즉, 순서대로 계산될 필요가 있었습니다. 그래서 병렬 처리를 할 수 없었고 계산 속도가 느렸습니다.하지만 transformer에서는 학습 시 encoder에서는 각각의 position에 대해, 즉 각각의 단어에 대해 attention을 해주기만 하고, decoder에서는 masking 기법을 이용해 병렬 처리가 가능하게 됩니다. (masking이 어떤 것인지는 이후에 설명해 드리겠습니다)Model ArchitectureEncoder and Decoder structureencoder는 input sequence (x1,...,xn)<math>(x1,...,xn)</math>에 대해 다른 representation인 z=(z1,...,zn)<math>z=(z1,...,zn)</math>으로 바꿔줍니다.decoder는 z를 받아, output sequence (y1,...,yn)<math>(y1,...,yn)</math>를 하나씩 만들어냅니다.각각의 step에서 다음 symbol을 만들 때 이전에 만들어진 output(symbol)을 이용합니다. 예를 들어, “저는 사람입니다.”라는 문장에서 ‘사람입니다’를 만들 때, ‘저는’이라는 symbol을 이용하는 거죠. 이런 특성을 auto-regressive 하다고 합니다.Encoder and Decoder stacksEncoderN개의 동일한 layer로 구성돼 있습니다. input $x$가 첫 번째 layer에 들어가게 되고, layer(x)<math>layer(x)</math>가 다시 layer에 들어가는 식입니다.그리고 각각의 layer는 두 개의 sub-layer, multi-head self-attention mechanism과 position-wise fully connected feed-forward network를 가지고 있습니다.이때 두 개의 sub-layer에 residual connection을 이용합니다. residual connection은 input을 output으로 그대로 전달하는 것을 말합니다. 이때 sub-layer의 output dimension을 embedding dimension과 맞춰줍니다. x+Sublayer(x)<math>x+Sublayer(x)</math>를 하기 위해서, 즉 residual connection을 하기 위해서는 두 값의 차원을 맞춰줄 필요가 있습니다. 그 후에 layer normalization을 적용합니다.Decoder역시 N개의 동일한 layer로 이루어져 있습니다.encoder와 달리 encoder의 결과에 multi-head attention을 수행할 sub-layer를 추가합니다.마찬가지로 sub-layer에 residual connection을 사용한 뒤, layer normalization을 해줍니다.decoder에서는 encoder와 달리 순차적으로 결과를 만들어내야 하기 때문에, self-attention을 변형합니다. 바로 masking을 해주는 것이죠. masking을 통해, position i<math>i</math> 보다 이후에 있는 position에 attention을 주지 못하게 합니다. 즉, position i<math>i</math>에 대한 예측은 미리 알고 있는 output들에만 의존을 하는 것입니다.위의 예시를 보면, a를 예측할 때는 a이후에 있는 b,c에는 attention이 주어지지 않는 것입니다. 그리고 b를 예측할 때는 b이전에 있는 a만 attention이 주어질 수 있고 이후에 있는 c는 attention이 주어지지 않는 것이죠.Embeddings and Softmaxembedding 값을 고정시키지 않고, 학습을 하면서 embedding값이 변경되는 learned embedding을 사용했습니다. 이때 input과 output은 같은 embedding layer를 사용합니다.또한 decoder output을 다음 token의 확률로 바꾸기 위해 learned linear transformation과 softmax function을 사용했습니다. learned linear transformation을 사용했다는 것은 decoder output에 weight matrix W<math>W</math>를 곱해주는데, 이때 W<math>W</math>가 학습된다는 것입니다.Attentionattention은 단어의 의미처럼 특정 정보에 좀 더 주의를 기울이는 것입니다.예를 들어 model이 수행해야 하는 task가 번역이라고 해봅시다. source는 영어이고 target은 한국어입니다. “Hi, my name is poza.”라는 문장과 대응되는 “안녕, 내 이름은 포자야.”라는 문장이 있습니다. model이 이름은이라는 token을 decode할 때, source에서 가장 중요한 것은 name입니다.그렇다면, source의 모든 token이 비슷한 중요도를 갖기 보다는 name이 더 큰 중요도를 가지면 되겠죠. 이때, 더 큰 중요도를 갖게 만드는 방법이 바로 attention입니다.Scaled Dot-Product Attention해당 논문의 attention을 Scaled Dot-Product Attention이라고 부릅니다. 수식을 살펴보면 이렇게 부르는 이유를 알 수 있습니다.Attention(Q,K,V)=softmax(QKT√dk)V<math>Attention(Q,K,V)=softmax(QKTdk)V</math>먼저 input은 dk<math>dk</math> dimension의 query와 key들, dv<math>dv</math> dimension의 value들로 이루어져 있습니다.이때 모든 query와 key에 대한 dot-product를 계산하고 각각을 √dk<math>dk</math>로 나누어줍니다. dot-product를 하고 √dk<math>dk</math>로 scaling을 해주기 때문에 Scaled Dot-Product Attention인 것입니다. 그리고 여기에 softmax를 적용해 value들에 대한 weights를 얻어냅니다.key와 value는 attention이 이루어지는 위치에 상관없이 같은 값을 갖게 됩니다. 이때 query와 key에 대한 dot-product를 계산하면 각각의 query와 key 사이의 유사도를 구할 수 있게 됩니다. 흔히 들어본 cosine similarity는 dot-product에서 vector의 magnitude로 나눈 것입니다. √dk<math>dk</math>로 scaling을 해주는 이유는 dot-products의 값이 커질수록 softmax 함수에서 기울기의 변화가 거의 없는 부분으로 가기 때문입니다.softmax를 거친 값을 value에 곱해준다면, query와 유사한 value일수록, 즉 중요한 value일수록 더 높은 값을 가지게 됩니다. 중요한 정보에 더 관심을 둔다는 attention의 원리에 알맞은 것입니다.Multi-Head Attention위의 그림을 수식으로 나타내면 다음과 같습니다.MultiHead(Q,K,V)=Concat(head1,...,headh)WO<math>MultiHead(Q,K,V)=Concat(head1,...,headh)WO</math>where headi=Attention(QWQi,KWKi,VWVi)dmodel<math>dmodel</math> dimension의 key, value, query들로 하나의 attention을 수행하는 대신 key, value, query들에 각각 다른 학습된 linear projection을 h번 수행하는 게 더 좋다고 합니다. 즉, 동일한 Q,K,V<math>Q,K,V</math>에 각각 다른 weight matrix W<math>W</math>를 곱해주는 것이죠. 이때 parameter matrix는 WQi∈Rdmodelxdk,WKi∈Rdmodelxdk,WVi∈Rdmodelxdv,WOi∈Rhdvxdmodel<math>WiQ∈Rdmodelxdk,WiK∈Rdmodelxdk,WiV∈Rdmodelxdv,WiO∈Rhdvxdmodel</math>입니다.순서대로 query, key, value, output에 대한 parameter matrix입니다. projection이라고 하는 이유는 각각의 값들이 parameter matrix와 곱해졌을 때 dk,dv,dmodel<math>dk,dv,dmodel</math>차원으로 project되기 때문입니다. 논문에서는 dk=dv=dmodel/h<math>dk=dv=dmodel/h</math>를 사용했는데 꼭 dk<math>dk</math>와 dv<math>dv</math>가 같을 필요는 없습니다.이렇게 project된 key, value, query들은 병렬적으로 attention function을 거쳐 dv<math>dv</math>dimension output 값으로 나오게 됩니다.그 다음 여러 개의 head<math>head</math>를 concatenate하고 다시 projection을 수행합니다. 그래서 최종적인 dmodel<math>dmodel</math> dimension output 값이 나오게 되는거죠.각각의 과정에서 dimension을 표현하면 아래와 같습니다.*dQ,dK,dV<math>dQ,dK,dV</math>는 각각 query, key, value 개수Self-Attentionencoder self-attention layerkey, value, query들은 모두 encoder의 이전 layer의 output에서 옵니다. 따라서 이전 layer의 모든 position에 attention을 줄 수 있습니다. 만약 첫번째 layer라면 positional encoding이 더해진 input embedding이 됩니다.decoder self-attention layerencoder와 비슷하게 decoder에서도 self-attention을 줄 수 있습니다. 하지만 i<math>i</math>번째 output을 다시 i+1<math>i+1</math>번째 input으로 사용하는 auto-regressive한 특성을 유지하기 위해 , masking out된 scaled dot-product attention을 적용했습니다.masking out이 됐다는 것은 i<math>i</math>번째 position에 대한 attention을 얻을 때, i<math>i</math>번째 이후에 있는 모든 position은 Attention(Q,K,V)=softmax(QKT√dk)V<math>Attention(Q,K,V)=softmax(QKTdk)V</math>에서 softmax의 input 값을 −∞<math>−∞</math>로 설정한 것입니다. 이렇게 한다면, i<math>i</math>번째 이후에 있는 position에 attention을 주는 경우가 없겠죠.Encoder-Decoder Attention Layerquery들은 이전 decoder layer에서 오고 key와 value들은 encoder의 output에서 오게 됩니다. 그래서 decoder의 모든 position에서 input sequence 즉, encoder output의 모든 position에 attention을 줄 수 있게 됩니다.query가 decoder layer의 output인 이유는 query라는 것이 조건에 해당하기 때문입니다. 좀 더 풀어서 설명하면, ‘지금 decoder에서 이런 값이 나왔는데 무엇이 output이 돼야 할까?’가 query인 것이죠.이때 query는 이미 이전 layer에서 masking out됐으므로, i번째 position까지만 attention을 얻게 됩니다.이 같은 과정은 sequence-to-sequence의 전형적인 encoder-decoder mechanisms를 따라한 것입니다.*모든 position에서 attention을 줄 수 있다는 게 이해가 안되면 링크를 참고하시기 바랍니다.Position-wise Feed-Forward Networksencoder와 decoder의 각각의 layer는 아래와 같은 fully connected feed-forward network를 포함하고 있습니다.position 마다, 즉 개별 단어마다 적용되기 때문에 position-wise입니다. network는 두 번의 linear transformation과 activation function ReLU로 이루어져 있습니다.FFN(x)=max(0,xW1+b1)W2+b2x<math>x</math>에 linear transformation을 적용한 뒤, ReLU(max(0,z))<math>ReLU(max(0,z))</math>를 거쳐 다시 한번 linear transformation을 적용합니다.이때 각각의 position마다 같은 parameter W,b<math>W,b</math>를 사용하지만, layer가 달라지면 다른 parameter를 사용합니다.kernel size가 1이고 channel이 layer인 convolution을 두 번 수행한 것으로도 위 과정을 이해할 수 있습니다.Positional Encodingtransfomer는 recurrence도 아니고 convolution도 아니기 때문에, 단어의sequence를 이용하기 위해서는 단어의 position에 대한 정보를 추가해줄 필요가 있었습니다.그래서 encoder와 decoder의 input embedding에 positional encoding을 더해줬습니다.positional encoding은 dmodel<math>dmodel</math>(embedding 차원)과 같은 차원을 갖기 때문에 positional encoding vector와 embedding vector는 더해질 수 있습니다.논문에서는 다른 *frequency를 가지는 sine과 cosine 함수를 이용했습니다.*주어진 구간내에서 완료되는 cycle의 개수PE(pos,2i)=sin(pos/100002i/dmodel)<math>PE(pos,2i)=sin(pos/100002i/dmodel)</math>PE(pos,2i+1)=cos(pos/100002i/dmodel)<math>PE(pos,2i+1)=cos(pos/100002i/dmodel)</math>pos<math>pos</math>는 position ,i<math>i</math>는 dimension 이고 주기가 100002i/dmodel⋅2π<math>100002i/dmodel⋅2π</math>인 삼각 함수입니다. 즉, pos<math>pos</math>는 sequence에서 단어의 위치이고 해당 단어는 i<math>i</math>에 0부터 dmodel2<math>dmodel2</math>까지를 대입해 dmodel<math>dmodel</math>차원의 positional encoding vector를 얻게 됩니다. k=2i+1<math>k=2i+1</math>일 때는 cosine 함수를, k=2i<math>k=2i</math>일 때는 sine 함수를 이용합니다. 이렇게 positional encoding vector를 pos<math>pos</math>마다 구한다면 비록 같은 column이라고 할지라도 pos<math>pos</math>가 다르다면 다른 값을 가지게 됩니다. 즉, pos<math>pos</math>마다 다른 pos<math>pos</math>와 구분되는 positional encoding 값을 얻게 되는 것입니다.PEpos=[cos(pos/1),sin(pos/100002/dmodel),cos(pos/10000)2/dmodel,...,sin(pos/10000)]<math>PEpos=[cos(pos/1),sin(pos/100002/dmodel),cos(pos/10000)2/dmodel,...,sin(pos/10000)]</math>이때 PEpos+k<math>PEpos+k</math>는 PEpos<math>PEpos</math>의 linear function으로 나타낼 수 있습니다. 표기를 간단히 하기 위해 c=100002idmodel<math>c=100002idmodel</math>라고 해봅시다. sin(a+b)=sin(a)cos(b)+cos(a)sin(b)<math>sin(a+b)=sin(a)cos(b)+cos(a)sin(b)</math>이고 cos(a+b)=cos(a)cos(b)−sin(a)sin(b)<math>cos(a+b)=cos(a)cos(b)−sin(a)sin(b)</math> 이므로 다음이 성립합니다.PE(pos,2i)=sin(posc)<math>PE(pos,2i)=sin(posc)</math>PE(pos,2i+1)=cos(posc)<math>PE(pos,2i+1)=cos(posc)</math>PE(pos+k,2i)=sin(pos+kc)=sin(posc)cos(kc)+cos(posc)sin(kc)=PE(pos,2i)cos(kc)+cos(posc)sin(kc)<math>PE(pos+k,2i)=sin(pos+kc)=sin(posc)cos(kc)+cos(posc)sin(kc)=PE(pos,2i)cos(kc)+cos(posc)sin(kc)</math>PE(pos+k,2i+1)=cos(pos+kc)=cos(posc)cos(kc)−sin(posc)sin(kc)=PE(pos,2i+1)cos(kc)−sin(posc)sin(kc)<math>PE(pos+k,2i+1)=cos(pos+kc)=cos(posc)cos(kc)−sin(posc)sin(kc)=PE(pos,2i+1)cos(kc)−sin(posc)sin(kc)</math>이런 성질 때문에 model이 relative position에 의해 attention하는 것을 더 쉽게 배울 수 있습니다.논문에서는 학습된 positional embedding 대신 sinusoidal version을 선택했습니다. 만약 학습된 positional embedding을 사용할 경우 training보다 더 긴 sequence가 inference시에 입력으로 들어온다면 문제가 되지만 sinusoidal의 경우 constant하기 때문에 문제가 되지 않습니다. 그냥 좀 더 많은 값을 계산하기만 하면 되는거죠.Trainingtraining에 사용된 기법들을 알아보겠습니다.Optimizer많이 쓰이는 Adam optimizer를 사용했습니다.특이한 점은 learning rate를 training동안 고정시키지 않고 다음 식에 따라 변화시켰다는 것입니다.lrate=d−0.5model⋅min(step_num−0.5,step_num⋅warmup_steps−1.5)warmup_step<math>warmup_step</math>까지는 linear하게 learning rate를 증가시키다가, warmup_step<math>warmup_step</math> 이후에는 step_num<math>step_num</math>의 inverse square root에 비례하도록 감소시킵니다.이렇게 하는 이유는 처음에는 학습이 잘 되지 않은 상태이므로 learning rate를 빠르게 증가시켜 변화를 크게 주다가, 학습이 꽤 됐을 시점에 learning rate를 천천히 감소시켜 변화를 작게 주기 위해서입니다.RegularizationResidual ConnectionIdentity Mappings in Deep Residual Networks라는 논문에서 제시된 방법이고, 아래의 수식이 residual connection을 나타낸 것입니다.yl=h(xl)+F(xl,Wl)<math>yl=h(xl)+F(xl,Wl)</math>xl+1=f(yl)<math>xl+1=f(yl)</math>이때 h(xl)=xl<math>h(xl)=xl</math>입니다. 논문 제목에서 나온 것처럼 identity mapping을 해주는 것이죠.특정한 위치에서의 xL<math>xL</math>을 다음과 같이 xl<math>xl</math>과 residual 함수의 합으로 표시할 수 있습니다.x2=x1+F(x1,W1)<math>x2=x1+F(x1,W1)</math>x3=x2+F(x2,W2)=x1+F(x1,W1)+F(x2,W2)<math>x3=x2+F(x2,W2)=x1+F(x1,W1)+F(x2,W2)</math>xL=xl+L−1∑i=1F(xi,Wi)<math>xL=xl+∑i=1L−1F(xi,Wi)</math>그리고 미분을 한다면 다음과 같이 됩니다.σϵσxl=σϵσxLσxLσxl=σϵσxL(1+σσxlL−1∑i=1F(xi,Wi))<math>σϵσxl=σϵσxLσxLσxl=σϵσxL(1+σσxl∑i=1L−1F(xi,Wi))</math>이때, σϵσxL<math>σϵσxL</math>은 상위 layer의 gradient 값이 변하지 않고 그대로 하위 layer에 전달되는 것을 보여줍니다. 즉, layer를 거칠수록 gradient가 사라지는 vanishing gradient 문제를 완화해주는 것입니다.또한 forward path나 backward path를 간단하게 표현할 수 있게 됩니다.Layer NormalizationLayer Normalization이라는 논문에서 제시된 방법입니다.μl=1HH∑i=1ali<math>μl=1H∑i=1Hail</math>σl= ⎷1HH∑i=1(ali−μl)2<math>σl=1H∑i=1H(ail−μl)2</math>같은 layer에 있는 모든 hidden unit은 동일한 μ<math>μ</math>와 σ<math>σ</math>를 공유합니다.그리고 현재 input xt<math>xt</math>, 이전의 hidden state ht−1<math>ht−1</math>, at=Whhht−1+Wxhxt<math>at=Whhht−1+Wxhxt</math>, parameter g,b<math>g,b</math>가 있을 때 다음과 같이 normalization을 해줍니다.ht=f[gσt⊙(at−μt)+b]<math>ht=f[gσt⊙(at−μt)+b]</math>이렇게 한다면, gradient가 exploding하거나 vanishing하는 문제를 완화시키고 gradient 값이 안정적인 값을 가짐로 더 빨리 학습을 시킬 수 있습니다.(논문에서 recurrent를 기준으로 설명했으므로 이에 따랐습니다.)DropoutDropout: a simple way to prevent neural networks from overfitting라는 논문에서 제시된 방법입니다.dropout이라는 용어는 neural network에서 unit들을 dropout하는 것을 가리킵니다. 즉, 해당 unit을 network에서 일시적으로 제거하는 것입니다. 그래서 다른 unit과의 모든 connection이 사라지게 됩니다. 어떤 unit을 dropout할지는 random하게 정합니다.dropout은 training data에 overfitting되는 문제를 어느정도 막아줍니다. dropout된 unit들은 training되지 않는 것이니 training data에 값이 조정되지 않기 때문입니다.Label SmoothingRethinking the inception architecture for computer vision라는 논문에서 제시된 방법입니다.training동안 실제 정답인 label의 logit은 다른 logit보다 훨씬 큰 값을 갖게 됩니다. 이렇게 해서 model이 주어진 input x<math>x</math>에 대한 label y<math>y</math>를 맞추는 것이죠.하지만 이렇게 된다면 문제가 발생합니다. overfitting될 수도 있고 가장 큰 logit을 가지는 것과 나머지 사이의 차이를 점점 크게 만들어버립니다. 결국 model이 다른 data에 적응하는 능력을 감소시킵니다.model이 덜 confident하게 만들기 위해, label distribution q(k∣x)=δk,y<math>q(k∣x)=δk,y</math>를 (k가 y일 경우 1, 나머지는 0) 다음과 같이 대체할 수 있습니다.q′(k|x)=(1−ϵ)δk,y+ϵu(k)<math>q′(k|x)=(1−ϵ)δk,y+ϵu(k)</math>각각 label에 대한 분포 u(k)<math>u(k)</math>, smooting parameter ϵ<math>ϵ</math>입니다. 위와 같다면, k=y인 경우에도 model은 p(y∣x)=1<math>p(y∣x)=1</math>이 아니라 p(y∣x)=(1−ϵ)<math>p(y∣x)=(1−ϵ)</math>이 되겠죠. 100%의 확신이 아닌 그보다 덜한 확신을 하게 되는 것입니다.Conclusiontransformer는 recurrence를 이용하지 않고도 빠르고 정확하게 sequential data를 처리할 수 있는 model로 제시되었습니다.여러가지 기법이 사용됐지만, 가장 핵심적인 것은 encoder와 decoder에서 attention을 통해 query와 가장 밀접한 연관성을 가지는 value를 강조할 수 있고 병렬화가 가능해진 것입니다.Referencehttp://www.whydsp.org/280http://mlexplained.com/2017/12/29/attention-is-all-you-need-explained/http://openresearch.ai/t/identity-mappings-in-deep-residual-networks/47https://m.blog.naver.com/PostView.nhn?blogId=laonple&logNo=220793640991&proxyReferer=https://www.google.co.kr/https://www.researchgate.net/figure/Sample-of-a-feed-forward-neural-network_fig1_234055177https://arxiv.org/abs/1603.05027https://arxiv.org/abs/1607.06450http://jmlr.org/papers/volume15/srivastava14a.old/srivastava14a.pdfhttps://arxiv.org/pdf/1512.00567.pdf
조회수 2911

삼분의일 매트리스 냄새 이야기

삼분의일 매트리스 제품 개발 초기부터 품질만큼 신경 썼던 것은 바로 냄새였다. 유명한 템퍼도 냄새 때문에 고객들과의 잡음이 끊이지 않았기 때문이다. (참조 : http://news1.kr/articles/?2737094)삼분의일은 업계 최초로 폴리우레탄 냄새를 잡을 수 있는 설비와 공정을 추가했다. 이거 때문에 정식 출시가 2달이나 늦춰졌다. '아직' 유명 브랜드도 아니고, 이제 '막' 시작한 삼분의일 입장에서는 엄청난 투자를 했다.(삼분의일 공정 소개 : https://www.youtube.com/watch?v=8deepSEXGqo&feature=youtu.be ) 모두들 미쳤다고 했지만, 결과적으로 경쟁사들에 비해서 냄새 관련 컴플레인을 90% 넘게 줄일 수 있었다. 그런데 날씨가 굉장히 추워진 2018년 12월 어느 날부터 냄새 관련 컴플레인이 급속도로 증가하기 시작했다. 너무 갑작스러워서 삼분의일 CS팀은 멘붕에 빠졌다. 하지만 우리가 할 수 있는 일은 해결책을 찾아 제공해드리는 것이었다. 문제가 발생한 고객님들의 제품은 우선 빠르게 회사 비용을 들여서 회수했다. 그리고 나는 매일 공장으로 출근해서 왜 같은 공정을 거쳤는데 냄새가 나는지, 원인을 파악하는데 총력을 기울였다. 1주일이 지나서야 원인을 찾을 수 있었다. 범인은 추위였다. 갑자기 한파가 닥치면서 작업장 내부 온도가 영하 밑으로 내려갔고 이로 인한 문제가 발생한 것이다. 방금 발포를 끝낸 폼의 내부 온도는 180도이고, 이를 둘러싸고 있는 외부 공기 온도가 영하게 가까울 때 문제가 발생한다. 추운 공기는 무겁고 밀도가 높다. 따듯한 공기는 가볍고 밀도가 낮기 때문이다.작업장 내부 온도가 영상이라면 공기의 밀도가 높지 않아서 내부에 쌓여있던 냄새 분자들이 스멀스멀 폼 외부로 빠져나온다. 그리고 어느 정도 빠져나온 이후에 전용 탈취기를 통해서 잔류 냄새를 말끔하게 제거할 수 있다.하지만 작업장 내부 온도가 영하라면 폼을 둘러싸고 있는 외부 공기 온도가 너무 낮고 밀도가 높아서 폼 내부에 있는 냄새 분자들이 외부로 빠져나오지 못하는 상황이 발생한다. 이 상태로 탈취기를 돌려도 예전만큼 탈취가 되지 않는다. 그리고 고객님의 집에 도착해서 외부 온도가 따듯해지면 그때부터 내부에 숨어 있던 냄새 분자들이 스멀스멀 나오기 시작하면서 고객님들의 컴플레인이 일어난 것이다. 이제 원인을 알았으니 재발 방지를 위한 프로세스를 구축해야 했다. 한파가 닥쳐도 작업장 내부 온도가 영하로 떨어지지 않도록 비닐 보온막을 꼼꼼하게 설치했다. 그리고 탈취기를 폼이 통과하는 속도를 2배 늦추고, 반복하는 횟수를 두배로 늘렸다. 문제는 해결했지만, 12월 물량이 크게 늘면서, 이미 출고된 제품들의 컴플레인은 한 달 동안 계속되었다. 접수된 불만 건은 한 건 한 건 사과드리고 가장 빠른 시일 내에 완벽한 제품으로 교환해 드렸다. 변명보다 모든 상황을 솔직하게 말씀드리고, 진심을 담은 사과와 해결책을 제안해 드리려고 노력했다. 대부분의 고객님들이 감사하게도 넓은 아량으로 삼분의일을 이해해주셨다. 삼분의일 매트리스가 출시되고 첫 번째 겨울에 우리는 소중한 경험을 했다. 이사일이 맞물려서 방바닥에서 며칠을 주무시면서도 더 좋은 제품을 만들어 달라고 응원해주신 고객님들이 자랑스럽게 우리 제품을 가장 소중한 사람들에게 추천할 수 있도록 앞으로도 제품 개선, 개발에 더 박차를 가하기로 했다. 결국 단순한 진리를 다시 마주하게 되었다. 최고의 제품을 만들고, 진심을 다해서 고객을 대하자. 이제 냄새 걱정하지 마세요.http://bit.ly/coldsmellby 삼분의일 대표전주훈#삼분의일 #매트리스 #문제해결 #인사이트
조회수 710

회사도 민주적으로 운영될 수 없을까? -에이스프로젝트 운영위원회

탈권위와 소통, 토론을 통해 정책을 펼치고 있는 문재인 대통령이 연일 화제인 요즘.에이스프로젝트에서 2기 째 운영되고 있는 운영위원회를 소개해볼까 합니다.우리는 각자의 의견을 자유롭게 펼칠 수 있는 민주주의 사회에 살고있지만사실 회사에서 진짜 민주주의는 멀게만 느껴질 때가 많습니다.상명하달 문화에 익숙해지길 강요받고때론 부당하고 불합리하다고 느끼는 사규와 제도에 그저 따를 수 밖에 없습니다.왜 그래야 하는지 이유를 물으면나서지 말라는 둥, 조직생활에 맞지 않는다는 둥 핀잔을 듣기 일쑤죠.의견개진이 자유롭지 못한 근무환경은창의적인 사고를 필요로 하는 기업에게도, 주인의식을 갖고 일하고자 하는 구성원들에게도 독이 될 뿐입니다.그래서 에이스프로젝트는 '토론 문화'를 가장 중시해왔습니다.리더들이 토론하는 '리더십 토론', 전직원이 자유롭게 토론하는 캠페인 '로댕 프로젝트', CEO와 함께하는 '타운홀미팅등 다양한 주제로 토론을 진행해 왔습니다.임직원들이 자신의 생각을 이야기할 준비를 마치고2016년 10월부터 '에이스 운영위원회'제도를 도입했습니다.이름도 생소한 운영위원회는말 그대로 회사 운영정책에 대해 논의하는 모임입니다.운영위원은 직원 3명 이상의 추천으로 선발되며 인원수 제한은 없습니다.선출된 운영위원은 자신을 뽑아준 직원들의 의견을 수렴하여 운영회의 시간에 적극 발언합니다.필요하면 직접 발제도 가능합니다.에이스 운영회의는 에이스프로젝트 조직문화 및 운영과 관련된 사안에 대해 논의하고필요에 따라 정책을 결정하기도 합니다.작게는 회식비 지원 체계부터 크게는 역할 중심 문화에 대해서까지논의가 필요하다고 생각되는 모든 주제로 토론합니다.얼마 전 1기 운영위원회가 무사히 6개월의 임기를 마쳤습니다. :)1기 운영위원회를 통해 에이스인 모두가 함께 만든 일들에 대해 공유하고자 합니다.서로의 다른 의견을 토론을 통해 조율하고 합의하는 과정은때론 느리게 느껴질 수 있습니다.그러나 시간이 걸려도 다수의 지지를 얻는 것이 결과적으로 조직에 더 좋은 영향을 끼친다고 믿기 때문에에이스프로젝트는 앞으로도 운영위원회 제도를 적극 활용할 계획입니다.4월부터 2기 운영위원회를 시작했습니다.새롭게 선출된 7명의 운영위원과 에이스인 모두가 더 적극적인 의견으로, 더 좋은 에이스프로젝트를 위해 힘써주세요! :)
조회수 898

다큐멘터리 제작 조연출에서 마케터로

스푼을 만드는 사람들 2편, 정상인은 한 명도 없다는 한국 마케팅 팀원들 중 한 명인 겉보기엔 굉장히 평범해 보이지만 독특하고 특이한 반전 매력이 넘치는 2년 차 마케터 '썸머 or 써머' 를 소개하고자 한다. (누군가는 그녀를 썸머라고 하고또는 써머라고 부르기에)아귀찜 사진 출처: 해먹남녀별명이 왜 '하아구' 인가요?본명 성이 '하'씨 + 아귀찜을 너무 좋아해서사실 외관상 서머를 보면 (편견이 가득 담겼지만) 곱창, 아귀찜, 축구 그리고 동동주와는 거리가 멀 것만 같아 보였다. 그 누구보다 도시적으로 보이고 세련됐달까? 그런 그녀가 가장 좋아하는 음식은 '아귀찜' 그리고 알고 보니 누구보다 털털한 성격의 소유자였다. 심지어 집에 막걸리 만드는 재료도 있고, 예전에 '막걸리 서포터스'를 했었을 만큼 막걸리를 좋아한다고 한다.Q. "이번 마케팅팀 회식 때 가장 먹고 싶은 음식은 뭔가요?""아, 저 정말 육회 탕탕이가 너무 먹고 싶어요. 아 아귀찜도! 아 아니 간장게장?! 기대된다!"닉네임이 'Summer'인 이유 1. 좋아하는 미드 'THE O.C'에 나오는 주인공 이름2. 발랄하고 활기찬 그 주인공이 마음에 들어서(마케팅팀엔 여름과 관련된 친구가 두 명이나 있다. Summer, Sunny 그것도 바로 옆자리..)마케터가 되기까지Q. 썸머는 다큐멘터리 제작사 조연출에서 교직원까지 다양한 경력이 있으시네요?"저는 사실 마케터가 되는 건 꿈이 아니었어요. 제 꿈은 원래 '영화감독'이었답니다. 하루에 한 편 이상 영화를 볼 정도로 영화를 좋아했고, 대학 졸업과 동시에 제작사에서 조연출로 1년 정도 근무했었어요. 제가 생각했던 진로와는 많이 다르다는 것을 깨달았어요. 그리고 대학교 교직원으로 전환을 했었는데, 생각보다 너무나도 같은 일상이 반복되다 보니 무기력해지는 모습을 발견했어요. 그렇게 저에게 더 원동력을 줄 수 있는, 바쁘고도 빠르게 트렌드를 따라가야 하는 직업인 마케터로 진로를 바꿨어요."Q. 어떤 업무를 하고 계시나요? 그리고 스푼 마케터로서의 삶은 어떤가요?"저의 업무는 주로, 콘텐츠를 기획해서 제작하는 업무를 해왔어요. 최근에는 하나의 큰 프로젝트를 진행하고 있고, 퍼포먼스 마케팅을 주로 했지만 브랜딩 쪽에 관심이 많아서 브랜딩 관련 업무도 차근차근 준비하고 있어요. 마케터로서의 삶은 늘 도전적이라고 생각해요. 마케터로서의 삶은 행복하기도 하고 힘들기도 해요. 제가 스스로 알지 못했던 저의 부족한 모습들을 알게 되고, 저의 괜찮은 모습들도 알게 되는 것 같아요. 제 스스로가 다듬어지는 과정을 함께 하고 있다는 느낌을 받아요, 배우는 것도 정말 많고요."Q. 콘텐츠는 어디서 영감을 받아서 제작하시나요?"저는 보이는 모든 것들이 저에게 영감을 준다고 생각해요. 길을 걷다가, 쇼핑을 하다가 또는 지하철에서도 문득 영감을 받을 때가 있거든요. 또는 유저 콘텐츠를 자주 들으면서 콘텐츠 아이디어가 떠오르기도 하고요."Q. 마케터가 된 후 혹시 변한 점이 있다면?"관련 서적을 참 많이 읽게 되었다는 점이에요. 마케터 전공자가 아니다 보니, 마케팅에 대해 지식도 많이 필요하고 노력도 해야 하다 보니 자연스레 읽게 되는 점과, 'Why'라는 질문을 많이 하게 되었다는 점이에요."Q. 스푼을 어떻게 브랜딩 하고 싶으세요?"우리 어릴 적에 기억나세요? 버디버디라던지.. 세이클럽 등등, 정말 딱 바로 생각나는 추억의 브랜드이잖아요. 물론 앞으로 50년 100년 쭉쭉 스푼이 추억이 아닌 현재의 브랜드가 되리라 믿지만, 한마디로 누군가 어떤 한 시대를 이야기할 때 바로 나올 수 있는 그런 핫하고도 마스코트가 될 수 있는 브랜드로 만들고 싶어요. 그 정도로 인지도가 높은! 그런 서비스요."당신의 회사생활이 궁금합니다Q. 한국 마케팅 팀원들에게 바라는 것이 있다면?"저는 아직도 배우는 중이에요. 제가 몰랐던 것들 그리고 고치고 변해야 할 점들도 스스로도 많이 깨우치려고 하고 배우려고 하는데 아직 다듬어지는 중이라 느리지만 노력 중인 저를 조금만 더 기다려주시고 응원해주셨으면 좋겠어요."(응원할게요 썸머! 열심히 하고 있다는 거 알고 있어요)Q. 입사 후 가장 기억 남는 에피소드는?"작년에 기획 수업을 들은 적이 있어요. 그때 제가 이 수업 끝에 꼭 이루었으면 좋겠다 하는 리스트가 있었는데, 그중에 하나가 제가 만든 콘텐츠로 성과를 내는 거였는데, 정말 그 수업 끝에 좋은 콘텐츠가 제작되었고 광고 성과도 좋았거든요. 그 날이 정말 뿌듯하고 성취감을 느낀 날이에요."Q. 내가 가장 좋아하는 회사 복지제도는?"어버이날, 부모님께 드리는 용돈이 나왔는데 그게 정말 인상 깊었어요. 그날 엄마가 말씀해주신 말이 떠올라요! 정말 좋은 회사에 다니고 있다고..!!!!!"Q. 어떤 사람들과 일하고 싶으세요?타인의 의견을 잘 경청할 줄 알고, 서로에게 인사이트를 줄 수 있는 사람이면 좋겠어요. 서로 신뢰를 가지고 믿고 일할 수 있는 그런 관계요. 꼭 회사에서만 보고 마는 그런 관계가 아닌, 진솔된 관계를 맺을 수 있는 소통이 가능한 사람과 일하고 싶어요. 무엇보다! 스푼이라는 서비스를 좋아하고 관심 있는 사람이면 좋겠어요.이모티콘 수집가 썸머 당신의 사생활이 궁금합니다.Q. 2019년 계획이 어떻게 되세요?"어, 새로 이사를 하게 되었는데요. 무사히 이사를 마치고 새로운 곳에서 새로운 마음으로 시작하고 싶어요! 그리고 개인 Vlog로 시작하고 싶고, 스푼 공식 계정 Vlog도 시작할 예정이에요."Q. 본인을 한 마디로 표현하자면?어린아이 - 저는 의외로 순진하고, 순수하거든요. 늘 궁금한 게 많기도 하고 동심을 잃고 싶지 않아서요.Q. 축구를 왜 그렇게 좋아하시죠?"전에 만난 모든 남자 친구들이 축구를 좋아했답니다... 그러다 보니 자연스럽게"Q. 늘 책상에 먹을 것들이 잔뜩 쌓여있는데 대체.. 왜죠?"저는 모든 친구들도 다 알 정도로, 음식을 습관처럼 쌓아두는 편이에요. 물건도 잘 버리지 못하는 성격이고요. 그렇다 보니 제 책상에 보면, 많은 간식들이 쌓여있어요ㅋㅋㅋ.. 저를 참 잘 아시는 듯.."한국 마케팅 팀원들이 썸머를 한마디로 표현한다면?Sunny 曰: 레드벨벳 아이린 - 내 눈엔 닮았음 Jay 曰: 물놀이하는 아이 - 그냥 느낌이 ㅎ ('ㅎ'자 정말 좋아하시는 분 )Ted 曰: 구름 - 하얗고 맑은 이미지라서Ringo 曰: 하얀 튤립 - 청순하고 여리여리한 한편에..많은 걸 풍성하게 담고 있는 모습 때문에 볼 때마다 그냥 연상됨요..Jakie 曰: 꼬부기 - 물속성 타입 같아서..
조회수 784

창업자의 일기장(4)-백수의 길

---지난 이야기---그렇게 투자해주겠다던 분에게열과 성을 다 바치고,공들였던 사업계획서와그 사업에 핵심이 되는 인맥도와세부 예산안, 컨소시엄 구성도까지 다 드렸는데...그리고는 연락이 없다.기다려보라는 말만 계속 되풀이된다.그리고 나는 백수가 되어 있었다.(나중에 알게 된 거지만내가 호구였다.역으로 생각해보면,누가 우리에게 투자해 준다는 게웃긴 이야기였다.아직 회사도 설립 안 했는데,그리고우리가 진짜 실행할 능력이 있는지도검증되지 않았는데투자해주는 게 이상한 거지.)그렇다!나는 백수다.백수!!!빨리 재취업을 하든,준비했던 창업을 하든 결정을 내려야 했다.아내는 아침마다 집 밖으로 나가는나를 배웅해 주었다.집에 있으면, 사람이 나태해진다고도서관에 가서 충분히 고민하고,결정하라고 응원을 해 주었다.퇴사하기 전에 아내의 임신 사실을 알았다.타이밍이 완벽하게나를 회사생활을 강요하는 모양새였다.너무나 큰 리스크였다.사표를 준비할 때까지만 해도,'내가 잘하는 짓인가?'라는 의문이 들었다.그러나 아내는 나에게 지금이 아니면,기회가 없을 수도 있다고...지금처럼 회사 일로 힘들어하면서계속 일하기보다는 새직장을 가서 새롭게 시작하던가,창업을 해서 꿈을 이루던가,선택할 수 있는 절호의 찬스라고등을 떠밀어주었다.믿어 준다는 것이 얼마나 큰 힘이 되는지그리고 그 부담감은 또 얼마나 큰 압박인지...문 앞을 나설 때마다발걸음이 무거웠다."오늘 하루도 정말 미친 듯이 살아야 해.후회가 없도록 말이야"어쨌든 그러건 말건 현실은 백수다.결국 창업의 결심을 하였다.한 번 더 직장생활을 할 수 있는시기적인 기회도 있지만...실업급여를 받는 기간과입사지원시기를 고려했을 때,6개월의 시간을 채우기 위해서는재취업보다는 창업이었다.그리고 투자하겠다는 분이 언제 좋은 소식을 줄지 모르는데직장에 발이 묶이면 안 될 것 같았다.(다시 말하자면, 결국 투자 건은 물 건너갔다)그럼 6개월이라는 시간 동안무엇을 준비하고,어떻게 채워갈 것인가에 대한계획을 수행해야 했다.물론 퇴사 전에 계획한 시나리오가3가지 있었다.하나는 재취업 시나리오,하나는 창업 시나리오,다른 하나는 프리랜서 시나리오.일단 창업 시나리오와 프리랜서 시나리오를 수행하기로 정했다.1) 창업을 위해 준비해야 할 전문교육때마침 정부에서플랜트 공정 관련한 300시간 교육 프로그램을 신청했는데선정되었다.12월부터 2월까지 아침 9시부터 저녁 6시까지파주에서 서초동으로 가서공부해야 하는 교육이었다.플랜트 공정이 왜 필요하냐면,제조업은 결국 공장자동화와기계(유틸리티) 간에 공정을 설계해서생산 프로세스를 구축해야 하기 때문이다.어떤 공장이든 기본적인 원리는 유사하다.필요한 기능을 정하고,장비 사양을 정하고,설비 간에 연결을 정하고,시운전을 하여 수정하고,생산에 들어간다.이러한 일련의 과정들을 배울 수 있기에내게는 꼭 관련 지식이 필요했다.이전에 직장에서 실험실에서 파일럿으로,파일럿에서 플랜트로 스케일 업을 해 봤지만,거의 마구잡이 식으로 하다 보니탈도 많았고,고생을 엄청 많이 했거든.기술에 관련한 전문교육을 받기에직장인이라면 엄두도 못 냈을 테니좋은 기회였다.2) 백수기간이 끝났을 때를 위한 준비생계를 위해서는프리랜서 일을 준비해야 했다.지금 당장은 실업급여를 받지만,그 기간이 다 끝났을 때,바로 먹고 살 준비가 안 되어있으면창업을 하기 전에 포기하게 되니까미리 지금부터 영업을 해 두어야 했다.다행히도,군대 전력 후에 잠시 창업했던 경험이 있어그때 알게 된 몇몇 분들에게 일감을 얻을 수 있을 거라 생각했다.갑자기 부탁하긴 그러니까교육을 받으면서, 차근차근 준비해 두면 필요한 시점에 일거리를 받을 수 있다.백수긴 한데...그래도 꿈이 있는 백수랄까?(나중에 알게 되지만...꿈도, 계획도 늘 맘 같지 않더라...ㅠ.,ㅠ)그렇게 백수가 되어,창업 준비와 몇 개월 후에 먹고 살 준비를하나씩 준비하게 되었다.그러나 마음이 안 놓였다.예상되는 수익과예상외로 나가는 지출!그리고불쑥불쑥 자라는 아내 태중에 아이!마음 한편에서 불안함이 싹트고 있었고,서서히 조바심과 조급증이 생기기 시작했다.될 일도 성급하면 망치는 법!잘 짜인 계획이라고 생각했는데내가 인지하지 못 한 곳에서부터서서히 균열이 커져가고 있었다.감당하지 못할 문제로 다가왔을 때,나는 아내에게 큰 마음의 빚, 인생의 빚을 지게 되었다.
조회수 1077

스타트업에서 운영자로 살아간다는 건

타고나기로 운영을 좋아하게 태어났다.처음 그 기질을 발견한 건 대학교 시절에 편의점 아르바이트를 하던 시절.삼각김밥 열을 맞추고, 조금 더 빠른 계산을 위한 아이디어를 생각해 내고, 1초라도 더 빠르게 담배를 손님에게 드리는 방법을 생각해내는 것이 게임보다 재밌었던 시절.기획자로 살아갈 때도 창의적인 것보다, 트렌디한 것보다내 주변의 직원들이 고객들이 조금 더 편해지는 것이 더 행복했었다.내가 진행했던 기획으로, 프로젝트로 몇 십명 직원들의 업무가 30% 줄어드는 상황을 지켜보며아, 프로세스의 변화가 이렇게 무섭구나. 하는 생각을 했더랬다.지금은 스타트업에서 서비스운영실을 맡고 있다.스타트업에서 운영자로 살아간다는 건, 누군가에게는 현장에서의 재미를, 누군가에게는 얼른 떼고 싶은 '운영'이라는 딱지를 달고 있는 삶인지 모르겠다.내가 처음 서비스운영실을 맡게 되었을 때 꿈꾸었던 것들이 있었다.어느날 한 외국 대형 가구점을 방문했었다. 노란색 줄무늬 제복을 입은 일명 '외국계 기업의 자존감 높은 운영자'를 보면서 남편과 이런 대화를 나눈 적이 있다."나도 이 회사에서 일하고 싶다"이 말에는 상당히 많은 뜻이 내포되어 있는데, 이 회사의 네임밸류, 트랜디함을 느껴보고 싶다. 이 사람들이 하는 일은 주변 사람들에 대한 스트레스도 없을 것 같고, 일이 그렇게 어려워 보이지도 않으며, 삶과 일의 균형을 잘 맞추고 있는 사람들인 것 같다. 나도 이렇게 살고 싶다. 등을 표현한 한 문장이었던 것 같다.나는 이 사람들도 결국 '운영자'가 아닐까. 하는 생각을 했었다.별다방에서 커피를 제조하는 매니저들은 또 다른 '운영자'의 모습이 아닐까.왜 우리는 그들을 보며 '멋있다' 라고 느끼는 걸까.회사의 운영자의 삶을 들여다 보면, 회사가 직원을 어떻게 생각하는지직원은 회사에 자부심을 느끼는지, 기업문화와 가치를 엿볼 수 있다.다시 원점으로 돌아가보자면,내가 처음 서비스운영실을 맡게 되었을 때 꿈꾸었던 것들은 이런 것이었다.와디즈의 '운영자'가 와디즈의 색깔을 그대로 입고, 와디즈의 수준 높은 고객들을 대하고, 와디즈를 사랑하고, 와디즈의 아이덴티티를 가장 잘 드러내는 모습이 되는 것.하지만 스타트업에서는 이슈가 많고, 리스크도 많아서 운영자의 삶이 평탄하기는 사실 어렵다. 앞에서 말한 대기업의 경우에는 모든 이슈와 리스크에 대한 매뉴얼이 있어서 운영자들이 안정감을 가지고 밸류를 찾기에 쉬운 구조라고 한다면 스타트업에서 운영자의 삶은 하루하루가 시한폭탄일 수밖에 없다.세상에 없는 비즈니스를 만들어야 하는 '와디즈'는 더욱 그러하다.실장인 나 혼자서 소위 '운영이 좋다고' 실원들에게 '운영'을 강요할 수도 없는 노릇이다.따라서, 스타트업에서 운영자로 살아간다는 건'가치'를 만드느냐에 따라서 천국과 지옥을 오갈 수 있다.(물론 '가치'를 만드는 시도를 하다가 혹독한 지옥을 맛보기도 한다)내가 생각하는 운영의 '멋있음'이란 이런 거다.1. 사명감. 고객이 와디즈를 만나는 처음과 끝의 경험, 모두 '운영'에 의해 좌지우지된다는 걸 잊지 않는다.- 회원가입 방법을 안내 받던 투자자- 프로젝트를 개설하여 콘텐츠 피드백을 받는 메이커들에게는 그들이 사실상 와디즈의 전부다.2. 디테일. 운영의 디테일은 와디즈가 가장 중요시 하는 '신뢰'를 견고히 한다.3. 디벨롭. 오늘 하던 개고생을 내일 또 하지 않도록 하는 것. 그걸 해내는 사람.결국 스타트업에서 운영자로 살아간다는 건한 회사의 얼굴이 되는 것이다.그러니 나의 역할은 우리 실원들이 와디즈의 얼굴임을 자부심 느끼게 하고자부심을 통해 스스로 더 발전하고자 하는 마음이 샘솟게 하는 것인 것 같다. (결론)저녁 내내 내 마음에 '운영'이라는 단어가 쓰리게 맴돌아서.마음 속 정리를 해본다.#와디즈 #크라우드펀딩 #운영 #운영자 #인사이트 #성장

기업문화 엿볼 때, 더팀스

로그인

/