스토리 홈

인터뷰

피드

뉴스

조회수 2737

[SQL] 이탈고객의 재사용률 분석

저는 TLX에서 PM 과 Business Analyst로 일하고 있습니다. TLX의 서비스인 TLX Pass는 하나의 멤버십으로 여러가지 운동종목을 이용할 수 있는 서비스입니다.대부분 사람들이 운동이라는게 항상 심리적 부채로 가지고있고, 연초나 여름시즌을 앞두고 헬스장을 등록하며 그 부채를 갚으려 합니다.TLX Pass 사용자들도 그러한 패턴이 있는지 분석하려고, 각 월별로 이탈한 사용자가, 어느시점에 다시 돌아오는지, 돌아오는 비율이 어느정도 되는지 분석해보았습니다.이 글에서는 SQL을 이용해서 이탈고객(churned user)에 대한 재사용률(return rate)을 분석하는 방법에 대해서 설명하려고 합니다.Part 1. 월별 churned user 리스트당월 churned user(이탈회원)의 정의를 다음과 같이 정합니다.- 전월 멤버십을 가진 사용자 중에서 당월 멤버십이 없는 사용자Churned user 리스트는 여집합의 형태로 당월 retained user (유지회원)을 우선 구하고, 전월 멤버십 회원 리스트에서 빼는 형태로 만듭니다.[1-a] 월별 멤버십 회원 리스트멤버십의 사용시작일과 종료일을 기준으로 user_id를 가져온다.아래 sql은 2016년 9월 멤버십 회원 리스트를 가져오는 query이다.//[QUERY 1-a] 월별 멤버십 회원 리스트 select memberships.user_id from memberships where left(date_start, 7) <= "2016-09" and left(date_end, 7) >= "2016-09"[1-b] 월별 유지회원 리스트[1-a 월별 멤버십 리스트]에서 구한 회원들을 대상으로 1개월 뒤에도 멤버십을 가진 사용자 리스트를 구합니다.아래는 2016년 9월에 멤버십을 가진 회원중에서, 2016년 10월에도 멤버십을 가지고 있는 회원의 user_id 를 가져오는 SQL입니다.//[QUERY 1-b] 월별 retained user 리스트 select current.user_id from memberships current where current.user_id IN ( [QUERY 1-a] ) and left(current.date_start, 7) <= "2016-10" and left(current.date_end, 7) >= "2016-10"[1-c] 월별 churned user 리스트여집합으로 구하기 위해 [1-a 월별 멤버십 리스트]와 [1-b 월별 유지회원 리스트] 리스트를 left join으로 합치면, 당월에 멤버십이 없는 회원은 future.user_id 값이 NULL 이 됩니다.아래와 같이 future.user_id가 NULL 인 것만 모으면 바로 churned user 리스트가 됩니다.//[QUERY 1-c] 월별 churend user 리스트 select distinct current.user_id from ( [QUERY 1-a] ) as current //전월 멤버십 회원 리스트 left join ( [QUERY 1-b) as future //당월 retained user 리스트 on current.user_id = future.user_id where future.user_id is null //당월 멤버십이 없는 조건[1-d] 월별 churned user 리스트를 temporary table 에 저장하기이제 churned user를 분석하기 위해서 위에서 구한 churned user 리스트를 query에서 계속 사용해야 한다. 이럴땐 with 구문이나 with 구문이 지원되지 않는 db라면 temporary table 로 저장해 두면 편리하기도 하고 query가 가벼워져서 데이터를 뽑는 속도도 좋아집니다.Temporary table (임시 테이블)- 임시로 db에 생성하는 table로, db connection이 끊어지면 자동으로 삭제됩니다.- 임시라는 것 외엔 테이블과 동일한 SQL을 이용하면 됩니다.아래는 [1-c 월별 churned user 리스트] query 결과를 oct_16_churned_user_ids 라는 임시 테이블에 넣는 SQL입니다.create temporary table oct_16_churned_user_ids ( user_id varchar(20) )insert into oct_16_churned_user_ids ( [QUERY 1-c] )// select * from oct_16_churned_user_idsPART2. Churned period 별로 return rate 분석하기churned user 를 대상으로, churned 시점보다 이후에 만들어진 멤버십을 멤버십 시작월 기준으로 그룹핑을 시킵니다.select date_format(membership.date_start, '%Y-%m') , count(distinct membership.user_id) from membership where user_id IN ( select * from oct_16_churned_user_ids ) left(membership.date_start, 7) > '2016-09' // churned 시점 이후 group by date_format(membership.date_start, '%Y-%m') // 멤버십 시작월로 그루핑이 데이터를 월별로 모아서, Excel의 pivot table을 이용하면,아래와 같이 월별로 churned user가 언제 다시 돌아오는지, 돌아오는 비율은 어떻게 되는지 분석할 수 있습니다.데이터는 실제 데이터가 아님.뭔가 pivot table을 만드는 부분에서 휘리릭 끝내는 감이 있네요 ㅎㅎ코멘트를 언제나 환영입니다. :)#티엘엑스 #TLX #비즈니스애널리스트 #BA #BusinessAnalyst #업무 #꿀팁 #인사이트
조회수 1419

내가 가고자하는 길의 목적

'대박 날 스타트업을 창업하겠다', '좋은 직장에 입사하겠다', '안정된 직업을 찾겠다' 등의 목표를 가진 젊은 친구들을 종종 만난다. 그 중엔 능력이 있고 열정도 있고, 실행력까지 있는 친구들도 있다. 그런데 왜 스타트업을 창업하는가? 왜 좋은 직장에 입사하고픈가? 왜 안정된 직업을 원하는가?라고 다시 물어보면 많은 경우 막연한 대답을 한다. 예를들면 이런 식이다. '돈을 많이 벌겠다', ‘남부럽지 않게 성공하고 싶다’, ‘행복하게 살고 싶다’. 당연하지만 일반화 된 답변들이다. 왜라는 질문의 본질에는 다가가지 못한 대답들이다. ‘세상을 바꾸겠다’ 내지는 ‘사람들을 행복하게 만들겠다’같은 한단계 더 들어간 대답을 하는 친구들도 있지만, 어떻게라는 구체성이 결여되어 있는 경우가 많다. 꿈이 무엇이냐고 물어봐도 이 대답들은 크게 다르지 않다.사이먼 시넥의 골든서클[1]에 의하면 무슨 일이든 가장 본질은 ‘왜(why) 내가 이 일을 하는가’라는 질문에서 시작해야 한다고 한다. 그리고 why를 위해 어떻게(how) 할 것이며 무엇(what)을 할 것이냐의 순서로 전개 해 나가야 한다고 이야기 한다. 동사의 사고를 가진 서양에서는 그게 바람직한 흐름이지만 동양의 명사적 사고를 가진 나에게는 why를 위한 what이 먼저 이야기되고 그 것을 위한 how가 따라와야 하거나, 또는 아예 how와 what은 함께 이야기되어야 더 자연스럽게 느껴진다. 물론 어떤 경우라도 결국 중요한 것은 why의 본질과 how와 what의 구체성을 함께 목표로 가져야 한다는 것이다. 그러나 대부분의 대답들은 what에서 그치거나 막연한 how를 동반한 경우가 많고 그걸 목표로 삼고 있기 때문에 어찌보면 본질적인 고민이 빠져있는 셈이다. why와 구체적인 how가 있다면 내가 가고자 하는 길의 목적과 방향, 그리고 속도를 알고 항해를 하는 것과 같고 그렇지 않다면 막연하게 망망대해를 떠돌거나 항구에서조차 빠져 나오지 못하는 배가 될 수도 있는 것이다.예전에 이선희가 출연한 '히든싱어'라는 프로그램을 본 적이 있다. 즐겨보진 않는데 우연히 잠깐을 보다 흠뻑 몰입을 했던 기억이 있다. 이선희의 몇마디가 나를 뭉클하게 해서였다. 그녀는 30년이나 가수생활을 하면서, 여전히 많은 사람들에게 사랑을 받고 있고 근래에는 ‘그 중에 그대를 만나’라는 곡을 포함한 앨범을 발표하기도 했다. 대부분의 가수들이 음반으로 돈이 안되니 싱글 한곡 간만에 발표해도 가수라 통하는 세상에서, 인고의 시간과 노력으로 앨범을 만들어 낸 것을 보면, 이선희에게 왜 노래를 부르고 앨범을 만드는 지에 대한 why가 분명히 있었을 것이다. 이선희와 함께 노래를 부르는 후배가수들은 다 눈물을 글썽인다. 그녀와 함께 노래를 부를 수 있다는 것만으로도 사람들은 영광스러워하고 행복해 하는 것이다. 그녀가 노래를 부르는 이유를 말하지 않아도, 오롯이 살아 온 30년에 꽉 차있는 그녀의 본질에 사람들은 공감을 하기에 그럴 것이다.모창대회가 다 끝나고 마지막에 살아남은, 슈스케출연을 포기하고 이 자리에 왔다는 우승한 친구에게 이선희가 말을 건넨다. 가수가 되는 것을 도와주겠다같은 형식적인 이야기가 아니었다.그동안 나를 똑같이 모창하기 위해 보내 온 시간동안 감춰왔고 잃어버린너만의 목소리를 찾을 수 있도록 도와주겠다사람과 노래의 본질을 건드리는 이 한마디에 내 가슴은 뭉클했다. 이선희도 살아오는 동안 물론 수많은 방황을 했겠지만 자신이 하고자 하는 일에 why라는 의미를 부여하며 이 자리에 섰고, 이제는 세상이 바라보는 거인의 위치에서 또 why라는 자신의 의미를 이야기하고 있는 것이다.   그 why를 이루기위해 필요한 것이 창업이라면 창업을, 취업이라면 취업을, 아니면 모험이든 여행이든 일련의 how를 통해 실현나가면 된다. 창업을 원하든, 창직이나 취업을 추구하든, 그 안에 나만의 why가 의미를 가지고 자리하면 된다. 완벽하지 않은 why일지라도, 창업이나 취업은 그 why를 이루기 위한 수단일 뿐, 그 목적자체가 될 수는 없는 것이다. 그리고 구체적인 how를 통해 끊임없이 질문하고 시도하고 실패하면서 why를 완성 해 가는 과정이 바로 진짜 인생이며 목적이다. 맹목적으로 달려가는 사람도, 멍하니 자리에 머무르는 사람도, 목표는 있으나 구체적으로 실행 해 나가지 않는 사람에게도 시간은 똑같이 흐른다. 5년후, 10년후 내가 바라보았던 사람처럼, 다른 이에게 내가 바라보아지는 대상이 되는 날은 가고자 하는 길의 왜(why)를 가진 사람들이 얻게 되는 최고의 선물일 것이다.이미지출처: Prometheus-BD CC-BY-SA#라이프스퀘어 #스타트업 #창업자 #창업가 #마인드셋 #조언
조회수 1351

하나부터 열까지 모두 알려주겠다! Scatter 계정 만들기 (feat. HexBP 연동하기)

스캐터(Scatter)는 암호화폐 지갑 계정에 대한 신원인증을 대행해주는 일종의 신원인증 프로그램으로, 별도의 보팅포털에 접속해서 신원인증을 통해 로그인을 도와주는 크롬의 확장 프로그램입니다.스캐터를 사용하게 되면, 기존에 여러 지갑 및 사이트로 부터 EOS 프라이빗 키를 부여 받아야 했던 번거로움 없이, 한번만 등록해놓으면 다양한 사이트에서 스캐터 계정 하나로 자신의 EOS 계정을 증명할 수 있게 됩니다.이러한 스캐터를 사용하는 방법을 지금 부터 알아보겠습니다.Step 1. Scatter 설치 및 계정 생성Scatter에서 크롬 확장 프로그램을 다운로드하여 설치하셔야 합니다.설치 후 크롬 브라우저에 설치된 Scatter 아이콘을 누르시면 다음과 같은 화면이 나타납니다.새로운 비밀번호 (최소 8글자)를 입력하시면 됩니다.비밀번호 입력 후 Create New Scatter 버튼을 누르세요.그럼 아래와 같이 12단어가 표시된 화면이 나타납니다. 바로 단어들을 복사 혹은 화면 캡처를 하여 보관해야 합니다.( * 저장하지 않은 채 다른 창을 누르시게되면 해당 화면이 사라지게 되니 꼭 바로 저장하셔야 합니다.)이 단어들은 나중에 비밀번호를 잃어버렸을 때 필요합니다.다 복사를 하셨으면 [ I wrote it down]을 눌러주세요.그 다음 화면에서 백업을 하실 지, 그냥 넘기실 지 선택하셔야 합니다.선택하시면 다음화면으로 넘어가게 됩니다.이제 더 편리하게 사용할 수 있도록 한국어 설정으로 바꿔 볼 거에요!우측 상단의 톱니바퀴 모양을 누르신 후[Language]-한국어 선택 -[Change Language] 차근차근 클릭하여진행하시면 됩니다.짜잔! 이제 한국어 버전으로 사용할 수 있습니다.이제부터 Scatter를 통해 자신의 EOS 프라이빗 키를 등록하셔야 합니다.왼쪽 상단의 [ < ]뒤로가기 버튼을 누르시면 다음과 같은 화면이 나옵니다.여기서 두번째 줄에 보이는 키 쌍(Key pairs)을 선택합니다.우측 상단의 [신규 생성]버튼을 클릭 하셔서 계정을 생성 하셔야 합니다.버튼을 누르시면 아래와 같은 화면을 확인하실 수 있습니다.이는 ‘현재 등록이 되어 있지 않다’는 것을 의미합니다.프라이빗키 항목에 자신의 EOS 프라이빗키를 넣고이름은 영어나 숫자를 이용하여 자유롭게 이름을 정하시면 됩니다.*프라이빗 키를 입력하면 퍼블릭 키는 자동으로 입력됩니다.*반드시 키 쌍 생성 버튼이 아닌 저장 버튼을 누르셔야 합니다.정상적으로 등록이 완료되면 다음과 같은 화면을 확인 하실 수 있습니다.다들 잘 따라오셨나요?만약 이 절차를 진행하셨음에도 등록이 안되었다면 계정이 EOS에 등록이 되지 않은 경우입니다.Step2 : Scatter 설정하기이제 등록된 Scatter 계정을 통해 HEX BP 사이트의 투표 시스템과 연동하는 방법을 알아보겠습니다.Scatter의 첫 화면으로 돌아가서 [톱니바퀴]를 선택합니다.해당 버튼을 누르시면 다음과 같은 화면이 나타납니다.[네트워크]를 선택합니다.해당 버튼을 누르시면 아래와 비슷한 화면이 나타납니다.이제 다시 우측 상단의 [신규 생성] 버튼을 누릅니다.해당 버튼을 누르면 네트워크 정보를 입력해야 하는 화면이 나옵니다.* 이름 : eosnet.hexlant.Io* https 선택* 도메인 혹은 IP 주소 : 목록 중에 선택* 포트 : 80* 체인 ID : aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906복사하여 붙여넣기모두 정확하게 입력 하셨으면 저장 버튼을 눌러주시기 바랍니다.이제 등록한 Chain을 계정에 연결해야 합니다![신원인증 ID]를 눌러주세요그 다음 [신규 생성]을 클릭 합니다.EOS Mainnet을 설정 한 후에 자신의 계정을 선택합니다.모두 선택하셨으면 [가져오기]를 누릅니다.[가져오기] 버튼을 누르신 후 잠시 기다리시면다음과 같은 화면이 나타납니다.이때 acticve 권한을 클릭 후 [선택한 계정 사용] 버튼을누르시기 바랍니다.*아래 개인 정보 입력하는 부분은 옵션이기 때문에 굳이 입력하지 않으셔도괜찮습니다. 모두 입력 하셨으면 [저장] 버튼을 눌러주시기 바랍니다.이제 스캐터 새 계정이 성공적으로 만들어졌습니다. 짝짝짝Step 3 : 투표하기[Login] 눌러서 Scatter 로그인 하기2. [신원인증 ID 선택]-[수락] 클릭하기3. Log out으로 바뀐 화면을 확인하실 수 있습니다.4. 투표를 하기 위해선 [Vote] 버튼을 누르셔야 합니다.5. Vote 버튼을 누르시면 체크박스가 생성됩니다! 이제 21명의 BP가 되길 원하는 후보자를 선택하시면 됩니다.누르시면 아래부분에 선택한 BP 후보자들을 확인하실 수 있습니다.후보자를 다 선택하셨다면 [Done] 버튼을 눌러 투표를마무리 해주시면 됩니다!6. [Done] 을 누르시면 마지막으로 Scatter 화면이 뜹니다. 여기서 [Accept] 버튼을 누르시면 됩니다.자 이제 투표도 모두 완료되었습니다!#헥슬란트 #HEXLANT #블록체인 #개발자 #개발팀 #기술기업 #기술중심 #Scatter
조회수 3175

ReactorKit 시작하기

ReactorKit 시작하기오늘은 StyleShare에서 ReactorKit을 사용한지 딱 1년이 되는 날입니다. ReactorKit은 반응형 단방향 앱을 위한 프레임워크로, StyleShare와 Kakao를 비롯한 여러 기업에서 사용하고 있는 기술입니다.StyleShare의 iOS 프로젝트 첫 커밋은 2011년 8월 23일입니다. 그 뒤로 약 7년간 크고 작은 기능을 추가하며 굉장히 큰 코드베이스를 가지게 되었습니다. 특히 2015년에는 스토어 기능을 런칭하면서 기존 서비스 만큼이나 많은 코드를 작성했습니다. 서비스 복잡도는 점점 높아졌고, 지속 가능한 코드베이스를 위해 많은 개선이 필요했습니다.ReactorKit은 많은 부분에 있어서 StyleShare가 가진 고민을 해결해주었습니다. Flux와 Reactive Programming의 개념을 결합하여 만들어진 ReactorKit에서는 사용자 인터랙션과 뷰 상태가 관찰 가능한 스트림을 통해 단방향으로 전달됩니다. 뷰와 비즈니스 로직을 분리할 수 있게 되면서 모듈간 결합도가 낮아지고 테스트하기 쉬워졌습니다. 또한, 자칫 복잡해질 수 있는 비동기 코드를 일관되게 작성할 수 있게 되었습니다.이 글에서는 ReactorKit의 기본 개념과 테스트를 위한 기법을 소개 합니다.데이터 흐름ReactorKit에는 뷰(View)와 리액터(Reactor)라는 개념이 존재합니다. 뷰는 상태를 표현합니다. 뷰 컨트롤러나 셀도 모두 뷰에 해당합니다. 뷰는 사용자 인터랙션을 추상화하여 리액터에 전달하고, 리액터에서 전달받은 상태를 각각의 뷰 컴포넌트에 바인드합니다. 뷰는 비즈니스 로직을 수행하지 않습니다.반대로, 리액터는 뷰의 상태를 관리합니다. 뷰에서 액션을 전달받으면 비즈니스 로직을 수행한 뒤 상태를 변경하여 다시 뷰에 전달합니다. 리액터는 UI 레이어에서 독립적이기 때문에 비교적 테스트하기 쉽습니다.ViewView 프로토콜을 적용하면 뷰를 정의할 수 있습니다. DisposeBag 속성과 bind(reactor:) 메서드를 필수로 정의해야 합니다.import ReactorKit import RxSwift class UserViewController: UIViewController, View { var disposeBag = DisposeBag() func bind(reactor: UserViewReactor) { } }<iframe width="700" height="250" data-src="/media/78a16e327ba4eb073cc5bdbb703c81f9?postId=c7b52fbb131a" data-media-id="78a16e327ba4eb073cc5bdbb703c81f9" data-thumbnail="https://i.embed.ly/1/image?url=https://avatars2.githubusercontent.com/u/931655?s=400&v=4&key=a19fcc184b9711e1b4764040d3dc5c07" class="progressiveMedia-iframe js-progressiveMedia-iframe" allowfullscreen="" frameborder="0" src="https://medium.com/media/78a16e327ba4eb073cc5bdbb703c81f9?postId=c7b52fbb131a" style="display: block; position: absolute; margin: auto; max-width: 100%; box-sizing: border-box; transform: translateZ(0px); top: 0px; left: 0px; width: 700px; height: 236.984px;">이 프로토콜을 정의하면 reactor 속성이 자동으로 생성됩니다. 이 속성에 새로운 값이 지정되면 bind(reactor:) 메서드가 자동으로 호출됩니다. 이곳에는 사용자 인터랙션을 리액터에 바인드하거나, 리액터의 상태를 각각의 뷰 컴포넌트에 바인드하는 코드를 작성합니다.func bind(reactor: UserViewReactor) { // Action self.followButton.rx.tap .map { Reactor.Action.follow } .bind(to: reactor.action) .disposed(by: self.disposeBag) // State reactor.state.map { $0.isFollowing } .distinctUntilChanged() .bind(to: self.followButton.rx.isSelected) .disposed(by: self.disposeBag) }<iframe width="700" height="250" data-src="/media/6a6d5aa66b156cae7d4475f6ed13efb0?postId=c7b52fbb131a" data-media-id="6a6d5aa66b156cae7d4475f6ed13efb0" data-thumbnail="https://i.embed.ly/1/image?url=https://avatars2.githubusercontent.com/u/931655?s=400&v=4&key=a19fcc184b9711e1b4764040d3dc5c07" class="progressiveMedia-iframe js-progressiveMedia-iframe" allowfullscreen="" frameborder="0" src="https://medium.com/media/6a6d5aa66b156cae7d4475f6ed13efb0?postId=c7b52fbb131a" style="display: block; position: absolute; margin: auto; max-width: 100%; box-sizing: border-box; transform: translateZ(0px); top: 0px; left: 0px; width: 700px; height: 325px;">Reactor리액터를 정의하기 위해서는 Reactor 프로토콜을 사용합니다. 사용자 인터랙션을 표현하는 Action과 뷰의 상태를 표현하는 State, 그리고 상태를 변경하는 가장 작은 단위인 Mutation을 클래스 내부에 필수로 정의해야 합니다. 또한 가장 첫 상태를 나타내는 initialState가 필요합니다.import ReactorKit import RxSwift final class UserViewReactor: Reactor { enum Action { case follow } enum Mutation { case setFollowing(Bool) } enum State { var isFollowing: Bool } let initialState: State = State(isFollowing: false) }<iframe width="700" height="250" data-src="/media/572f53fb442c67060d2a69f90a42a07b?postId=c7b52fbb131a" data-media-id="572f53fb442c67060d2a69f90a42a07b" data-thumbnail="https://i.embed.ly/1/image?url=https://avatars2.githubusercontent.com/u/931655?s=400&v=4&key=a19fcc184b9711e1b4764040d3dc5c07" class="progressiveMedia-iframe js-progressiveMedia-iframe" allowfullscreen="" frameborder="0" src="https://medium.com/media/572f53fb442c67060d2a69f90a42a07b?postId=c7b52fbb131a" style="display: block; position: absolute; margin: auto; max-width: 100%; box-sizing: border-box; transform: translateZ(0px); top: 0px; left: 0px; width: 700px; height: 435px;">Action이나 State와 달리 Mutation은 리액터 클래스 밖으로 노출되지 않습니다. 대신, 클래스 내부에서 Action과 State를 연결하는 역할을 수행합니다. Action이 리액터에 전달되면 두 단계를 거쳐서 뷰의 상태를 변경합니다.mutate() 함수에서는 Action 스트림을 Mutation 스트림으로 변환하는 역할을 합니다. 이곳에서 네트워킹이나 비동기로직 등의 사이드 이펙트를 처리합니다. 그 결과로 Mutation을 방출하면 그 값이 reduce() 함수로 전달됩니다. reduce() 함수는 이전 상태와 Mutation을 받아서 다음 상태를 반환합니다.func mutate(action: Action) -> Observable { switch action { case .follow: return UserService.follow() .map { Mutation.setFollowing(true) } .catchErrorJustReturn(Mutation.setFollowing(false)) case .unfollow: return UserService.unfollow() .map { Mutation.setFollowing(false) } .catchErrorJustReturn(Mutation.setFollowing(true)) } } func reduce(state: State, mutation: Mutation) -> State { var newState = state switch mutation { case let setFollowing(isFollowing): newState.isFollowing = isFollowing } return newState }<iframe width="700" height="250" data-src="/media/dc8fbdce8314a7eba99be944241c5432?postId=c7b52fbb131a" data-media-id="dc8fbdce8314a7eba99be944241c5432" data-thumbnail="https://i.embed.ly/1/image?url=https://avatars2.githubusercontent.com/u/931655?s=400&v=4&key=a19fcc184b9711e1b4764040d3dc5c07" class="progressiveMedia-iframe js-progressiveMedia-iframe" allowfullscreen="" frameborder="0" src="https://medium.com/media/dc8fbdce8314a7eba99be944241c5432?postId=c7b52fbb131a" style="display: block; position: absolute; margin: auto; max-width: 100%; box-sizing: border-box; transform: translateZ(0px); top: 0px; left: 0px; width: 700px; height: 522.984px;">테스팅테스트를 위해 가장 먼저 고민하게 되는 것은 ‘무엇을 테스트할 것인가’에 대한 것입니다. ReactorKit을 사용하면 뷰와 로직이 분리되어 상대적으로 쉽게 해답을 얻을 수 있습니다.View사용자 인터랙션이 발생했을 때 Action이 리액터로 잘 전달되는지리액터의 상태가 바뀌었을 때 뷰의 컴포넌트 속성이 잘 변경되는지ReactorAction을 받았을 때 원하는 State로 잘 변경되는지뷰 테스팅리액터의 stub 기능을 이용하면 뷰를 쉽게 테스트할 수 있습니다. stub 기능을 활성화하면 리액터가 받은 Action을 모두 기록하고, mutate()와 reduce()를 실행하는 대신 외부에서 상태를 설정할 수 있게 됩니다.func testAction_refresh() { // 1. Stub 리액터를 준비합니다. let reactor = MyReactor() reactor.stub.isEnabled = true // 2. Stub된 리액터를 주입한 뷰를 준비합니다. let view = MyView() view.reactor = reactor // 3. 사용자 인터랙션을 발생시킵니다. view.refreshControl.sendActions(for: .valueChanged) // 4. Reactor에 액션이 잘 전달되었는지를 검증합니다. XCTAssertEqual(reactor.stub.actions.last, .refresh) } func testState_isLoading() { // 1. Stub 리액터를 준비합니다. let reactor = MyReactor() reactor.stub.isEnabled = true // 2. Stub된 리액터를 주입한 뷰를 준비합니다. let view = MyView() view.reactor = reactor // 3. 리액터의 상태를 임의로 설정합니다. reactor.stub.state.value = MyReactor.State(isLoading: true) // 4. 그 때 뷰 컴포넌트의 속성이 잘 변하는지를 검증합니다. XCTAssertEqual(view.activityIndicator.isAnimating, true) }<iframe width="700" height="250" data-src="/media/9e5e0349766c69076a5081cbd680645b?postId=c7b52fbb131a" data-media-id="9e5e0349766c69076a5081cbd680645b" data-thumbnail="https://i.embed.ly/1/image?url=https://avatars2.githubusercontent.com/u/931655?s=400&v=4&key=a19fcc184b9711e1b4764040d3dc5c07" class="progressiveMedia-iframe js-progressiveMedia-iframe" allowfullscreen="" frameborder="0" src="https://medium.com/media/9e5e0349766c69076a5081cbd680645b?postId=c7b52fbb131a" style="display: block; position: absolute; margin: auto; max-width: 100%; box-sizing: border-box; transform: translateZ(0px); top: 0px; left: 0px; width: 700px; height: 721px;">리액터 테스팅리액터는 뷰에 비해서 상대적으로 테스트하기 쉽습니다. Action이 전달되었을 때 비즈니스 로직을 수행하여 State가 바뀌는지를 확인하면 됩니다.func testBookmark() { // 1. 리액터를 준비합니다. let reactor = MyReactor() // 2. 리액터에 액션을 전달합니다. reactor.action.onNext(.toggleBookmarked) // 3. 리액터의 상태가 변경되는지를 검증합니다. XCTAssertEqual(reactor.currentState.isBookmarked, true) } func testUnbookmark() { // 1. 리액터를 준비합니다. 액션을 미리 한 번 전달해서 테스트 환경을 만들어둡니다. let reactor = MyReactor() reactor.action.onNext(.toggleBookmarked) // 2. 리액터에 액션을 한 번 더 전달합니다. reactor.action.onNext(.toggleBookmarked) // 3. 리액터의 상태가 변경되는지를 검증합니다. XCTAssertEqual(reactor.currentState.isBookmarked, false) }<iframe width="700" height="250" data-src="/media/32af3eac8c1c9646bf95ea1442ad8ff4?postId=c7b52fbb131a" data-media-id="32af3eac8c1c9646bf95ea1442ad8ff4" data-thumbnail="https://i.embed.ly/1/image?url=https://avatars2.githubusercontent.com/u/931655?s=400&v=4&key=a19fcc184b9711e1b4764040d3dc5c07" class="progressiveMedia-iframe js-progressiveMedia-iframe" allowfullscreen="" frameborder="0" src="https://medium.com/media/32af3eac8c1c9646bf95ea1442ad8ff4?postId=c7b52fbb131a" style="display: block; position: absolute; margin: auto; max-width: 100%; box-sizing: border-box; transform: translateZ(0px); top: 0px; left: 0px; width: 700px; height: 522.984px;">마치며ReactorKit은 지금까지 CocoaPods에서 약 3만 7천회 다운로드 되었고, 약 730개 앱에서 사용되고 있습니다. 최근에는 Wantedly에서 사용하며 일본에서도 많은 호응을 얻고 있습니다. 공개된지 1년밖에 되지 않았지만 굉장히 좋은 평을 받으며 성장하고 있는 프레임워크입니다. 만약 새로운 프로젝트를 시작하거나, StyleShare와 비슷한 고민을 하고 계신다면 ReactorKit을 강력하게 추천합니다.ReactorKit GitHublet’Swift 2017 ReactorKit 발표 영상let’Swift 2017 ReactorKit 발표 자료#스타일쉐어 #개발팀 #개발자 #경험공유 #인사이트
조회수 1183

스타트업을 운영하며..

1. 심장이 "말린 무화과" 같다는 생각을 해본 적이 있는지? 심장이 쫄깃! 하다는 말로는 표현이 부족하다. 쫄깃하다는 것은 충분한 수분과 탄력이 있다는 것을 말하지만.. 요즘 내 심장은 쫄깃이 아니라 거의 수분을 잃어가는 말린 무화과 같은 느낌이다. 그런데 그런 것들이 이제 일상이 되는 것 같은 느낌이랄까?심장이 "말린 무화과가" 된다는 것은...최소한 아직 안쪽은 쫀득하다는 뜻이겠지.2. 작은 성공을 계속 만들어가는 것이 중요하다. 스타트업 선배 중에 한 분이 말씀해 주신 것이다. 파펨을 1년 반 이상 경험을 하면서 느끼는 것은... 정말 중요하다는 것이다. 실제로 작은 성공을 만들어 내는 것일 수도 있고, 아니면 정말 별것 아니지만 성공으로 생각하고 축하하는 것이다.그래야 지치지 않는다.갈길이 멀기에...3. 어디로 가야 할지 아는 것사실 파펨의 모델은 처음에 기획된 부분도 많이 있지만, 계속해서 진화해 가고 있다는 것이 맞다. 그 중심에는 향기(fragrance)라는 것이 있고, 우리가 가는 첫 번째 목적지는 PerfumeTeller의 성공이다. 퍼퓸텔러는 기존의 향수 시장에서 Game Changer가 되겠다는 생각을 가지고 실용적이며 합리적인 면을 강조하고 있는데, 향수라는 제품이 지금까지 가지고 있던 category의 이미지와는 맞지 않는 것이 사실이다.게다가 우리는 후각의 객관화라는 중간 목표를 가지고 있고.. 마지막으로는 냄새를 생성해내겠다는 생각까지 가지고 있다. 이건 향수 회사인지 아니면 tech 회사인지 혼동이 될 수도 있겠지만, 중심에는 후각이 존재한다. 어디로 가야 할지 안다는 것은 파펨에 올라탄 사람들이 무엇을 해야 할지에 대한 방향을 잡아줄 수 있고, 스스로 일할 수 있게 만들 수 있기에 상당히 중요하다.4. 누구와 일할 것인가?파펨에서 일하는 사람은...생각할 줄 알고 그것을 실행할 줄 아는 사람이기를 바란다. 바란다기보다는 그런 사람을 계속해서 받아들일 것이다.생각을 할 줄 안다는 것은... 우리가 어디로 가야 하는지를 아는 상황에서 자신이 무엇을 고민해야 하는지 알며, 발전을 만들어 낼 수 있는 능력이 있다는 것이다.게다가 그 생각을 실현하는 능력 또한 중요하다. 단지 고민만 하는 사람보다는, 구현해낼 줄 아는 사람이 필요하다. 그것이 디자인이던, 글이던, 혹은 operation이던 실행까지 마무리할 줄 알아야 한다. 그러기 위해서는 본인의 speciality가 필요하다는 생각이다. 요즘 열심히 찾고 있는 중이다.5. 어떤 성장을 그릴 것인가?처음부터 폭발적인 성장을 하게 된다면 얼마나 다행이겠냐만은...   그럴 가능성이 높지는 않기에, 차근차근 성장 전략을 세워야 한다. 성장 전략 중에 중요한 하나는 자원의 배분이다. 또한 많은 자원 중에 가지고 있는 자본금을 어떻게 배분할까의 고민이다.처음부터 빵! 터트릴 것(full 조직 setting, 공격적 마케팅 등) 인가? 아니면.. 계속해서 조금씩 조금씩 가지고 있는 자원을 사용해가며 성장의 기회를 찾아볼 것인가? 두 모델의 장단이 있다. (이 내용에 대해서 글을 작성 중) 파펨의 경우는.... 차근차근 준비를 해왔다. 최적의 타이밍을 잡고서 모아둔 자원(이런 건 사실 없다..)을 쏟아붓는 것이다.옛날 전쟁 영화에서 (활이던 총이던) 사정거리 안에 적이 들어올 때까지.... 기다리고 기다렸다가 가지고 있는 공격력을 쏟아붓는 것처럼. 자... 이제 파펨도 공격의 타이밍을 잡을 때다.이 글을 어제 쓸 때만 해도... 소식을 기다리고 있던 상황이었으나, 답이 오지 않고 있었는데드디어 오늘 아침 축하 소식이 날아들었다. ㅠㅠFuturePlay와 아모레퍼시픽(AP)의 TechUP+ 프로그램에 최종 합격하신 것을 축하드립니다.물론 이 소식이 회사에 당장 어떤 큰 변화를 줄 수 있을지 모르겠지만, 우리에겐 축하해야 할 작은 성공이고 또 이로 인해 좋은 사람들을 모을 수 있는 계기가 된 것도 사실! 심장이 이젠 조금 쫀뜩해진 기분이다!!자 이제 공격하러 GOGO#파펨 #스타트업 #창업가 #창업자 #마인드셋 #인사이트
조회수 453

iOS 개발자를 구합니다!

“세상 모든 광고영상을 누구나 쉽게 만들 수 있게 한다.”영상광고는 사업의 규모와 업종을 막론하고 모든 분야에서 필수적인 요소로 자리잡고 있습니다. 잘 만든 영상광고가 매출로 이어진다는 사실은 검증되었고, 그 중요성은 나날이 증가하고 있습니다.하지만, 영상제작 전문기술 없이 광고영상을 제작한다는 것은 시간과 비용적인 측면에서 매우 어려운 일입니다. 광고영상을 SNS에 업로드 하고 싶은 마케터나 창업가들은 영상 전문가나 디자이너가 되는 것을 꿈꾸지 않습니다. 단지 자신의 서비스와 제품이 멋지게 홍보될 영상을 원하고 있습니다.더브이플래닛은 전문기술 없이도 누구나 쉽고 빠르게 광고영상을 제작할 수 있는 브이플레이트를 통해 많은 마케터들과 창업가들이 겪는 시간과 비용에 대한 어려움을 해소할 것입니다.“더브이플래닛”에서 영상광고 생태계의 흐름을 바꿀 iOS개발자를 모집합니다.광고영상을 누구나 쉽게 만들 수 있도록 함께 고민하고 시장을 주도해나갈 분을 애타게 찾고 있어요.우리는 한사람 한사람의 소중한 능력들이 맘껏 발휘될 수 있도록 존중과 배려로 서로를 응원하고 있어요. 우리와 함께 소중한 능력을 맘껏 발휘하실 분들의 많은 지원 부탁드려요.
조회수 2832

"말솜씨보다 중요한 건 고객과 저 사이의 신뢰예요"

패스트파이브에는 총 77명의 직원들이 있습니다. 각 호점을 담당하는 CM(Community Manager), 고객경험부터 디자인까지 패스트파이브의 구석구석을 책임지는 CE(Customer Exellence)팀, 오피스와 라운지를 비롯한 공간 전체를 디자인하는 공간디자인팀 등등 다양한 직무를 맡고 있죠. 이렇게 다채로운 팀이 서로 협업하며 더 아름답고 효율적인 공유 오피스를 제공하려 노력하는데요, 앞으로는 Humans of FASTFIVE에서 패스트파이브의 사람들, 그리고 팀을 만나보려고 합니다. 많은 기대 부탁드려요!오늘 Humans of FASTFIVE에서 만나볼 분은 B2B 세일즈팀의 백도흠 님입니다. 도흠님은 ‘포마드남’이라는 별명을 갖고 계신데요, 늘 한결 같은 포마드 헤어스타일을 고수하기 때문에 붙은 별명이라고 해요. 처음에는 자유로운 분위기의 스타트업과 포마드 헤어가 어딘지 어색한 조합이라고 생각했지만, 인터뷰가 끝나고 나서는 고개를 끄덕이게 되었답니다. “머리가 잘 안 되면 일도 잘 안 되는 기분”이라는 도흠님과의 인터뷰를 통해 B2B 세일즈가 어떤 일인지 생생하게 들어보세요!Q. 도흠님 안녕하세요, 간단한 자기 소개 부탁드립니다. 안녕하세요, 백도흠입니다. ‘포마드남’이라고 소개해주셨는데, 저는 고객들에게 신뢰를 얻어야 하는 일을 하고 있기 때문에 이 머리가 신뢰의 상징이라고 생각하고 유지하고 있습니다. 스타트업이지만 제가 맡은 일에는 포멀한 이미지도 필요하니까요. Q. 헤어스타일에 깊은 뜻이 숨어 있었네요. 그럼 B2B 세일즈라는 직무에 대해 소개해주시겠어요? 포멀한 이미지가 필요하다고 이야기해주셨는데, 그 이유도 궁금합니다.우선 B2B 세일즈는 규모가 큰 기업을 상대로 패스트파이브의 다인실을 세일즈하는 일입니다. 기존에는 의뢰가 들어오는 경우에만 세일즈를 진행했지만 이제 먼저 고객을 찾아 나서기도 하죠. 그 밖에도 대기업과 제휴를 맺거나 기업의 성격에 맞게 사무실을 커스터마이징 하는 등 세일즈 영역을 넓혀가고 있습니다. 일과를 간단히 설명드리자면, 외근이 50% 가량을 차지합니다. 고객사로 찾아가서 미팅을 할 때도 있고 각 호점을 돌아다니면서 고객에게 공간 투어를 시켜드릴 때도 있어서요. 미팅은 주로 3차에 걸쳐 이루어지는데, 1차에서는 공간을 투어하면서 소개하고, 2차에서는 공간 레이아웃과 견적에 대한 컨설팅을 진행합니다. 물론 이후 공간 디자인팀과 더 자세한 미팅을 거쳐야 하지만요. 보통 3차 미팅 때 계약을 체결합니다. 내근 때는 주로 세일즈 방식을 기획합니다. 새로운 비즈니스 모델을 발굴하기도 하고, 계약을 진행 중인 고객들과 연락을 취하고, 공간 디자인팀이나 커뮤니티 매니저 분들과 내부에서 논의할 사항들을 이야기하죠. 팀원 면담을 하기도 하고요.기업 특성을 고려하여 커스터마이징 된 사무실 내부 전경B2B 세일즈는 계약 성사까지 걸리는 시간이 깁니다. 보통 소인실 계약은 투어부터 성사까지 일주일 정도가 걸리는데, B2B는 짧게는 열흘에서 길게는 세 달이 걸릴 때도 있어요. 본사가 외국에 있는 외국계 기업의 경우는 그럴 수 있더라고요. 기본적으로 B2B 세일즈는 설득해야 할 이해 당사자가 많기 때문에 시간이 걸릴 수밖에 없습니다. 그럴수록 ‘신뢰’가 중요한 것 같아요. 사실 제가 달변은 아니거든요. 말솜씨보다 중요한 건 고객과 저 사이의 신뢰라고 생각합니다. 거짓말은 절대 하지 않고 진솔하게 고객을 대하는 거죠. 그 신뢰를 바탕으로 계약이 진행되니까요. 실제로 받았던 피드백 중에서 “원하는 정보를 즉각적으로, 투명하게 전달해 주셔서 믿고 계약할 수 있었다”는 게 있었는데, 이 코멘트가 신뢰가 얼마나 중요한지를 단적으로 보여주죠. 저를 신뢰하셨기 때문에 제가 설명하는 완성된 사무실의 모습을 그대로 그려보고 선택할 수 있으셨다고 해요. 그럴 때 뿌듯함도 많이 느끼고요. B2B 영업이라고 해도 고객과의 관계가 중요한 것 같아요. 세일즈에서 중요한 요소는 판매 대상(product)과 사람, 둘이니까요.Q. 세일즈를 진행하는 단계가 있군요. 더 자세히 설명해주실 수 있나요?저는 우선 고객들이 공유 오피스에 매력을 느끼도록 설득합니다. 그게 세일즈의 첫 단계인 것 같고요, 그 다음이 실제로 비용을 이리저리 따져가며 패스트파이브가 기존 사무실보다 합리적인 선택이라는 걸 알려드리는 차례입니다. 아무래도 평당 비용으로 따지면 패스트파이브가 일반 사무실 임대보다 비싼 게 사실입니다. 하지만 운영비나 관리비 등의 비용까지 쪼개서 설명 드리면 고객들 입장에서도 이곳이 더 합리적인 선택이라는 걸 이해하게 되죠. 예를 들어 비용, 그리고 네트워킹, 인적 리소스 절감 등이 대표적입니다. 각 기업의 경영지원팀 분들은 공유 오피스를 굉장히 좋아해주세요. 잡무가 확 줄어드니까요. 2018년 패스트파이브 워크샵. 워크샵에서도 유지하는 포마드 헤어!Q. 지금까지 일하면서 가장 기억에 남는 계약이 있다면요? 아무래도 B2B 팀으로 넘어와서 성사시킨 첫 계약이 제일 기억에 남죠. 뷰티 커머스 회사였는데, 피드백을 빠르게 주고 신뢰할 수 있는 사람이라 계약을 결정했다고 말씀해주셔서 감사했던 기억이 납니다. 또 사무실 공간 내부에 스튜디오를 마련했던 첫 번째 사례이기도 해서, 공간에 만족한다는 이야기를 들었을 때 굉장히 뿌듯했죠. 어떻게 보면 아직 없는 공간인데 저의 이야기만 듣고 상상하신 거잖아요? 그 약속이 이루어져서 좋았습니다. Q. 그럼 반대로, 힘들었던 계약은 어떤 게 있나요?B2B 세일즈를 통한 입주는 입주사의 성격에 맞춰서 공간을 변형하는 경우가 많기 때문에 고객이 원하는 부분과 내부 부서의 의견이 다를 때가 있어요. 그런 경우에 고객과 회사 사이에서 중재 역할을 해야 하는 게 힘들죠.내근 때는 고객 팔로업, 세일즈 기획 등의 일을 합니다. (설정 사진의 어색함은 넘어가주세요…)Q. 작년(2017년 11월)에 패스트파이브에 입사하셨다고 알고 있어요. 도흠님에게 패스트파이브에서 일한다는 것은 어떤 의미인가요?저는 이곳에 오기 전에 호텔에서 근무한 적도 있고, 온라인 트레블 에이전시에서도 3년을 일했었는데요, 그 회사는 소위 말하는 ‘워라밸’이 좋은 외국계 기업이었습니다. 그래서 국내 스타트업으로 이직한다고 했을 때 주위에서 많이들 의아해했죠. 일반적으로 말하는 ‘조건’이 훨씬 좋아지는 이직은 아니라고 보이니까요. 그런데 저는 일과 삶을 분리하는 경향 때문에 워라밸을 찾게 된다고 생각해요. 그런 경우에는 당연히 워라밸이 중요하지만, 일에서 동기부여를 받는 편이고 큰 성취감을 누리는 사람들에게는 스타트업이 맞다고 봅니다. 도전적이고 주체적으로 일할 수 있는 환경이니까요. 외국계 기업은 시스템이 잘 짜여져 있어요. 정해진 프로세스대로 일하면 되죠. 그런데 그 때문에 제 자신이 작은 톱니바퀴처럼 느껴질 때가 있어요. 반면 패스트파이브에서는 매우 쉽고 빠르게 스스로 틀을 바꿀 수 있고, 제가 어떤 시도를 했을 때 바로바로 결과가 나오는 걸 볼 수 있죠. 특히 세일즈 부서는 제가 한 일의 결과물이 바로 수치화되어 눈에 보이기 때문에 이런 면이 더 중요한 것 같습니다. 저와 같은 성향의 사람이라면 패스트파이브가 최적의 직장이라고 생각합니다. 이직 전에 일 년 정도 준비를 하면서 여러 기업을 접했는데, 딱 저와 맞는다는 생각이 드는 곳이 없었어요. 그런데 패스트파이브 면접을 보고 나서 ‘재밌을 것 같다’는 느낌이 오더라고요. 일에서 재미를 찾고 신나게 일할 수 있겠다는 느낌? 조직 문화도 유연하고요. 또, B2B 세일즈는 원래 혼자 시작했던 일인데 실적이 생각보다 빠르게 나와서 팀이 분리되고 팀원도 두 분 생겼습니다. 어리다면 어린 나이에 팀장의 역할을 해볼 수 있다는 것도 패스트파이브에서 일하는 장점인 것 같네요. (B2B 세일즈 팀에는 코디네이터 이현경 매니저님과 세일즈 매니저 박지영 님이 함께 하고 계십니다!) Q. 앞으로 패스트파이브에서 달성하고 싶은 가치나 목표가 있으신가요?개인적으로 공유 오피스를 넘어서 신사업을 런칭해보고 싶습니다. 예컨대 해외 지사를 맡아서 일해보고 싶어요. 먼 미래에는 소셜 벤처도 해보고 싶고요. 고등학생 때 필리핀에 봉사 여행을 간 적이 있는데, 사람들이 밥을 굶지 않게 하고 싶다는 생각을 했거든요. 돈을 벌기 위해서라기 보다는 사회를 좀 더 좋은 곳으로 만들고, 선한 영향력을 끼치고 싶은 거죠. 패스트파이브 내에서도 충분히 해볼 수 있는 일이라고 생각해요. 패스트파이브와 함께 하는 입주 기업들Q. 도흠님의 인터뷰를 보고 B2B 세일즈에 도전해보고 싶다는 생각을 하신 분들도 많을 것 같은데요, 어떤 사람이 B2B 세일즈에 적합하다고 생각하시나요?세일즈가 곧 영업은 아니라고 생각해요. 특히 B2B 세일즈는 기획 능력, 큰 그림을 볼 수 있는 능력도 필요하고요. 하지만 사람 만나는 일을 싫어하면 조금 힘들겠죠? 또 뛰어나고 능숙한 말솜씨보다는 진솔함이 중요하다고 봅니다. 마지막으로 성취에 대한 열망이 큰 분이면 좋을 것 같아요. 세일즈팀은 아무래도 성과가 선명하게 드러나는 조직이다 보니 일에서 성취를 원하는 사람에게 잘 맞거든요.Q. 많은 인재분들이 지원해주셨으면 좋겠네요. 마지막으로 하고 싶은 말이 있으신가요?앞으로 패스트파이브에서 만나뵙기를 바라는 예비 입주자 분들께 드리고 싶은 이야기가 있어요. 공유오피스를 고려하신다면 여러 업체들을 선택지에 올리셨을 텐데요, 패스트파이브에는 탁월한 유연성이 있습니다. 고객 맞춤 서비스가 월등해요. 패스트파이브와 대화할 때 타 업체와의 차이를 확실히 느끼실 거예요. 아무리 팬시함을 내세워 마케팅해도 결국 ‘공간’에서 중요한 건 나와 얼마나 잘 맞느냐잖아요. 패스트파이브는 우리 회사와 딱 맞는 공간을 제공해드립니다. 너무 광고 같았나요? 자칫 광고처럼 들릴 수 있는 멘트도 도흠님이 말씀해주시니 신뢰가 가는, 놀라운 경험을 한 시간이었습니다. 많은 고객들과 신뢰를 바탕으로 성공적인 세일즈를 진행한 분답다는 생각이 저절로 들었죠 =) 앞으로도 더 많은 인터뷰로 패스트파이브 사람들의 이야기를 전하겠습니다. 읽어주셔서 감사합니다!- 패스트파이브 마케팅팀 드림
조회수 1158

페이오니아로 VAT 쉽게 납부하는 방법

소개말안녕하세요 대한민국 셀러들의 성공적인 아마존 진출을 도와주는 컨설팅 회사이자 대행사인 컨택틱의 이이삭 대표입니다. 오늘 여러분들에게 소개하고 싶은 내용은 '페이오니아로 VAT를 쉽게 납부하는 방법'입니다. 컨택틱은 아마존 전문 대행사이며, 미국뿐만 아니라 유럽 아마존 마켓 플레이스도 서비스를 지원하기 때문에 아래에는 저희 고객사 중에 한 분의 계정을 예시로 구체적인 절차를 보여드리고, VAT를 납부해야 할 일이 있으신 분들은 본 글을 보고 그대로 따라 하셔도 쉽게 VAT를 납부하실 수 있도록 도와드리고자 합니다.배경 설명페이오니아의 VAT 납부 기능은 2018년에 생긴 걸로 알고 있습니다 (정확히는 기억이 안 납니다). 이 기능이 생긴 게 얼마나 감사한 일인지, 애초부터 이 서비스를 사용하신 분들이라면 원래는 얼마나 VAT 납부하는 일이 귀찮고 번거롭고, 또 문제투성이가 많은 작업인지 절대 모르실 겁니다. 컨택틱은 페이오니아의 VAT 납부 기능이 생기기 전부터 세무대리인(ecommerceVAT)을 통해 영국 국세청 (이하 HMRC)에 아마존 영국, 독일, 프랑스, 이태리, 스페인의 매출에 대하여 VAT를 신고하고, 신고 완료된 내역을 기준으로 VAT를 납부까지도 했었는데요, ecommerceVAT처럼 일을 깔끔하고 정확하게 해주는 세무대리인의 덕분에 VAT 신고까지는 매우 쉽고 편리하게 할 수 있었으나, 문제는 확정된 VAT를 납부하는 과정에서 HMRC가 매번 말썽이었습니다... 대한민국 셀러의 입장에선 사실상 VAT를 납부할 수 있는 방법은 유일하게 카드밖에 없는데, 전 신용카드를 지극히 싫어하는 주의라 평소 회사 운영에 필요한 지출이 있을 때에도 체크카드만 쓰거든요. 그래서 당연히 VAT 납부도 체크카드를 사용하려고 했으나 제가 결제에 사용하려고 했던 체크카드가 비자나 마스터카드임에도 불구하고 계속 결제가 안되었던 문제가 있었습니다. 결국 어쩔 수 없이 신용카드를 사용하게 되었는데, 신용카드로 결제하는 경우 수수료가 추가적으로 발생하는 번거로움과 불필요한 지출이 일어났었습니다.페이오니아의 VAT 납부 서비스이런 번거로움과 불필요한 지출의 문제를 완벽하게 해결해준 게 바로 페이오니아의 VAT 납부 기능이었습니다. 페이오니아에 잔액만 있다면, 이젠 '무료'로 VAT를 납부할 수 있었으며, 한 방에 매우 쉽게 VAT를 납부하는 매우 편리한 기능인 것을 발견했습니다. 아래에 실제 예시를 보여드리고자 하오니, VAT를 납부하고자 하는 글로벌셀러는 꼭 페이오니아의 VAT 납부 기능 서비스를 사용해보실 것을 적극적으로 추천드립니다.페이오니아로 VAT 납부하기 (설명은 사진 밑에 기재되어있음)페이오니아로 로그인합니다. Pay 메뉴 중에 'Pay Your VAT' 버튼을 클릭합니다.그다음 화면에서는 위와 같이 어느 기관에 납부할지 선택합니다. 대부분 영국을 통해 distance selling (DE/FR/IT/ES)을 하고 계실 겁니다. 저 또한 그렇기 때문에 영국을 선택했습니다.다음 화면에서는 페이오니아 계정을 연동하기 위해 로그인 정보를 다시 제출하라고 나옵니다. 페이오니아 아이디와 비번을 기재하고 sign in 버튼을 클릭합니다.잠시 새로운 브라우저 탭을 열어서 gov.uk (HMRC) 사이트에 접속합니다 (내 VAT 번호가 뭔지, 그리고 납부해야 할 금액이 얼마인지 미리 숙지해두기 위함입니다). 사이트에서 Money and Tax 메뉴로 접속합니다.다음 화면에서는 VAT >>> VAT Returns 메뉴로 이동합니다.그다음 화면에서는 'submit your return online'을 클릭합니다.그러면 위와 같이 일단 gov.uk에 로그인부터 하도록 합니다.세무대리인을 통해 생성한 gov.uk 아이디와 비번을 입력하고 로그인합니다.HMRC도 보안에 철저해서 이렇게 2차 인증을 해주어야 합니다 (혹시 모르시는 분들이 있을까 봐 설명드리지만, 위 Access Code는 HMRC 어플을 깔면 확인할 수 있습니다. 이것 또한 gov.uk 계정을 처음에 생성할 때 다 세팅하는 것들입니다).휴대폰에서 보이는 모습입니다. HMRC 어플을 설치하면 위와 같은 화면이 보이는데, 아까 언급했듯이 Access Codes를 클릭합니다.컨택틱은 대행사이기 때문에 여러 계정을 관리합니다. 지금 예시에서는 맨 아래의 계정에 대한 VAT 납부를 하는 것이기 때문에 해당 코드를 기억했다가 (시간이 초과되어 갱신되기 전에) 빠르게 gov.uk 사이트로 돌아가서 코드를 입력합니다.코드를 입력한 뒤에 continue를 누릅니다.다음 화면에서 두 가지를 알 수 있습니다: (1) 내가 납부해야 할 VAT 납부액 (2) 내 VAT 넘버. 이 두 가지를 잘 기억했다가 이젠 다시 페이오니아 화면으로 돌아갑니다.아까 기억했던 두 가지를 각 란에 맞게 입력하고 '최종 확인' 버튼을 클릭합니다.마지막으로 이상 없는지 확인하시고 '결제' 버튼을 클릭합니다.VAT 납부가 완료됐습니다! 수고하셨습니다 :)그럼 오늘도 즐거운 글로벌 셀링 되세요!컨택틱   서울특별시 강남구 강남대로 62길 11, 8층 (역삼동, 유타워)   대표 전화: 02-538-3939   해외 부서: 070-7771-1727   영업 부서: 070-7771-1728   이메일: [email protected]   유튜브: https://www.youtube.com/channel/UC8OxbQGAnMqWGpGj5weLcZA  홈페이지: https://www.kontactic.com
조회수 1030

우리 제품의 USP를 정의하는 방법

안녕하세요. 오피노입니다. 저희는 데이터 분석을 기반으로 한 성과 최적화를 대행하는 퍼포먼스 마케팅 에이전시입니다. 저희가 진행하는 모든 마케팅 의사결정의 근거는 [데이터]입니다. 데이터는 거짓말을 하지 않고 확실하고 냉정하게 숫자로 성과를 표현해주기 때문이지요. 그래서 그 어떤 근거들 보다 정확합니다. 하지만 최근 제가 데이터를 기반으로 대행을 하다가 잃어버린 것들이 있습니다. 문제는 바로, "숫자에만 치중" 한다는 것이지요. 숫자에만 치중하게 되면, 어느 날 "우리 브랜드가 어떤 방향으로 가고 있나?", "KPI가 매출이라고 해서, 매출액을 올리는 데에만 급급하지 않은가" 고민하게 됩니다. 데이터를 기반으로 매체를 다루다가 , 어떤 한계에 봉착하는 느낌을 받았습니다. 더 이상 일정 부분에서 ROAS가 오르지 않는 한계점 같은 것이지요.네, 숫자에만 치중하게 되면 무언가 잘못되어가고 있다는 느낌을 지우지 못합니다. 어느새 이 제품의 브랜드는 사라지고, 이 브랜드가 고객들에게 다가가는 메시지는 할인 프로모션, 특가와 같은 '매출을 끌어올리기 위한 수단으로써의 메시지'만 있게 되는 것 같았습니다. 숫자는 반드시 마케팅 의사결정에 필요하지만, 과학의 시대인 21세기에도 [종교]라는 개념이 있는 걸 보면, 데이터와 숫자가 비즈니스의 전부가 아니란 생각도 자연스레 떠올릴 수 있습니다. 제품이 나아가야 할 방향, 즉 , USP(Unique Selling Point)의 부재에서 저는 비어있는 공간을 느꼈던 것이지요.그렇다면 마케팅원론에서 그렇게 질리도록 배운 USP는 도대체 무엇이고, 이 USP는 어떻게 정의해야 할까요? 잠깐 이 질문에 대답을 해봅시다 : "비슷한 제품들이 즐비하는 시장에서 당신의 제품을 어떻게 차별화되는가?어려운 질문이지요. 여러분과 저는 아마도, 여러 가지 생각들이 들 수 있을 것입니다. 예를 들면, [사용하기 쉽다거나, 내구성이 좋다거나, 다른 경쟁사 제품보다 훨씬 더 품질이 좋다거나]와 같은 것들을 떠올릴 수가 있습니다.하지만 지금 직관적으로 떠오르는 이 여러 가지 특장점들은 그저, 제품의 기술적인 특징에 지나지 않습니다. 대신에, 우리들만이 판매할 수 있는 고유한 특장점(Unique Selling Point : USP) 이 있을까요? USP는 간결하게 말해, 1) 우리의 제품이나 서비스가 고객들에게 감정적으로 제공할 수 있는 것(가치), 2) 사용자들의 불편함을 처리해주는 방법론(솔루션) 3) 시장에서의 다른 제품들과 더 나은 이유(차이점) 이 모든 3가지 조건을 충족시키는 한 가지의 특징입니다. 예를 들면, 경쟁사보다 조금 더 우위에 있는 우리 제품이 잠재고객들이 겪는 문제점을  해결하는데 중요한 영향을 미치는지 까지 파악할 필요가 있다는 것이지요. 모든 기술적으로 뛰어나거나 품질적으로 뛰어나거나 하는 등의 조건들을 배제하고, 위에서 말씀드린 이 3가지를 모두 만족시키는 하나의 USP를 만들어낸다면, 우리는 좀 더 체계적인 마케팅 전략과 세일링 프로세스를 구축할 수 있습니다.그래서, 어떻게 USP를 정의할까?제품의 특성을 정의하는 것을 정확히 찾아내는 것은 때로는, 아들 딸 중에서도 어떤 자녀를 더 좋아하는지를 선택하는 것과 비슷합니다. 아마도 우리는 우리 제품의 모든 면을 사랑하고, 그 제품이 가지고 있는 잠재성과 개개의 기능들도 좋아할 것입니다. 하지만, 고객들은 다릅니다. 제품을 보는 고객은 제품의 전체 모습을 좋아하는 것이 아니라 그 제품에서 자신의 문제를 해결해줄 수 있는 단 한 가지 면만 보고 구매 의사결정을 내립니다. 경쟁사가 많은 복잡한 시장에서 고객들은 한 제품의 모든 면을 볼 수 있도록 주의를 기울이지 않기 때문이지요. 고객들이 순간적으로 제품을 스쳐 지나가 볼 때, 그들의 문제를 해결할 수 있을만한 방안 또는 그들이 얻을 수 있는 가치를 얻지 못하면, 그들은 그대로 떠나버리기 마련입니다.우리 모두는 우리 브랜드에 대해서 색안경을 벗어야 할 필요가 있습니다. 여러분 제품의 강점과 약점을 철저하게 분석하고, 우리 제품의 강점이 우리 제품의 약점을 커버할 수 있을 만한지도 되물어보셔야 합니다. 마케팅 원론에서 그렇게나 배우던 SWOT 분석이 중요한 이유도 다 여기에 있지요. 우리 제품을 분석했다면, 경쟁사 제품 역시 분석이 필요합니다. 고객의 입장에서 느낄 수 있는 경쟁사 제품의 USP는 무엇이고 이들은 어떻게 마케팅을 하고 있는지 반드시 알아야만 하는 것입니다. 그런 다음, 추가적으로 우리 제품을 구매하는 사람들을 이해하기 위해, 우리 자신에게 질문을 던집니다.- 우리 고객들은 언제 우리 제품을 사용할까?- 우리 고객들은 우리 제품을 통해 어떤 경험을 할까? - 우리 고객들은 왜 다른 경쟁상품 대신 우리 것을 선택하였을까?- 그들의 구매 결정에 시발점이 되었던 메시지는 무엇이었을까? 저희 오피노가 Google Analytics나 Google Optimize와 같은 화려한 도구들로 도출해내는 데이터는 위에 열거한 4가지 질문에 대답을 얻기 위해서였습니다. 그렇습니다. 데이터는 대답을 얻기 위한 수단일 뿐, 그 데이터는 USP라는 거대한 요리 속에서 하나의 조미료에 불과합니다. USP는 이 데이터들에 [인간]이라는 거대한 재료를 첨가하고 나서야 비로소 완성될 수 있습니다.Revlon의 창업자는 이런 유명한 말을 남겼었죠. "공장에서, 우리는 립스틱을 만들고 있습니다. 하지만 광고에서, 우리는 희망을 팔고 있습니다."  제품 그 자체 기능에 집중을 하는 것이 아니라, 제품이 최종 구매자에게 제공해주는 가치에 집중을 하는 것이지요. 네 그렇습니다. 사실 우리는 우리 고객들이 제품을 구매하면서 느끼는 휴머니즘적인 가치, 그들의 감성에 대한 공감을 기반으로 마케팅 전략을 구축해야 합니다. 저는 고객들이 느끼는 이 추상적인 감성을 데이터화 시키는 것을 잘할 수 있던 것이지, 데이터 그 자체를 맹목적으로 쫓는 게 정답이 아니었단 걸 깨달았습니다.우리 제품의 기능적 우위 + 휴머니즘적 공감을 함께 결합하여 최종 USP를 만드는 것이지요.  기억해주세요. 데이터는 본질을 가져와주는 도구일 뿐, 그 자체가 목적이 되면 안 됩니다. 이상 센치해진 저만의 반성문이었습니다 :) 영감이 될 수 있는 글이 되었으면 좋겠습니다.퍼포먼스 마케팅 에이전시, 오피노 바로가기
조회수 1276

[인공지능 in IT] 맥락인식, 말하지 않아도 알아요

오전 6시 30분. 휴대전화 알람이 울리기 시작한다. 부랴부랴 샤워를 끝내고, 나갈 채비를 하고 있으니, 5분 후 집 앞 버스 정류장에 회사로 향하는 100번 시내버스가 도착한다는 메세지가 나타났다. 버스에 몸을 싣고 사무실 근처 정류장에 내려서 걸어가는 도중, 필자가 즐겨 마시는 커피를 맛있게 내린다는 동네 카페에 대한 정보를 받았다. 어느새 다가온 점심시간에는 어제 이태원에서 과음한 것을 어떻게 알았는지, 휴대폰 잠금화면에 주변 해장국집 추천이 뜬다.그저 영화 속 이야기가 아니다. 실제 사용자의 취향과 행동 등을 분석하고, 시간, 날씨, 교통 등과 같은 외부적 환경요소를 정교하게 더한 시나리오다. 각 개인에게 필요하고, 일상을 윤택하게 만들 수 있는 유의미한 정보를 제공하는 것. ‘맥락인식’ 혹은 ‘상황인지 기술’이라고 불리는 ‘Context Recognition’의 궁극적인 목표 중 하나다.맥락인식 기술은 여러 센서로부터 수집한 데이터를 통해 사용자의 상황을 인지하고, 실시간으로 맥락을 이해하는 데 초점을 맞춘다. GPS, 와이파이, RFID, 모션 센서, 소리 등 여러 시그널을 수집해 분석하며, 사용자의 일정, 문자 메시지나 행동 정보 등을 가져와 ‘사용자가 어떤 사람인지’, 그리고 ‘현재 어떤 상황인지’ 등을 추론한다. 이와 같은 맥락인식 기술을 구현하기 위해 필요한 몇 가지 주요기술은 다음과 같다.1. 상황정보 수집사용자 인터페이스 또는 센서, 센서 네트워크 등를 통해 사용자의 위치, 활동, 생활 패턴 등 다양하고 복잡한 정보를 수집하는 기술.2. 상황정보 모델링상황정보를 가공, 저장 및 공유하는 모델링 기술.3. 상황정보 융합 및 추론사용자의 상황정보를 다른 기술과 융합해 높은 수준의 추론 기능을 제공하는 기술.4. 상황정보 교환센서, 장치 및 객체와의 상호작용을 지원하기 위해 이벤트 기반의 통신 메커니즘을 제공하는 기술.5. 지능형 에이전트사용자의 단순한 의도뿐만 아니라 감정이나 감성을 고려해 전체 상황을 자율적으로 판단, 사용자에게 적합한 서비스를 제공하는 기술.기업 입장에서 생각했을 때, 맥락인식 기술은 소비자 개인에게 특화된 서비스를 제공할 수 있는 날카로운 검이다. 간단한 예로 맥락인식을 활용한 맞춤형 광고에 대해 알아보자. 소비자 A와 소비자 B는 서울에 사는 30대 남성이고 스포츠를 좋아한다. 일반적인 검색이나 구매 히스토리에 기반한 광고와 달리 맥락인식 기술을 활용하면, 이들의 라이프스타일이나 행동패턴을 바탕으로 더 깊은 디멘션까지 분석해 세분화된 광고를 제공할 수 있다. 두 소비자 모두 스포츠를 좋아한다고 가정했을 때, A는 한강 근처에서 매일 저녁 7시 정도에 조깅하는 것을 좋아할 수 있고, B는 남산에서 새벽 6시부터 등산하는 것을 좋아할 수 있다. 미묘한 차이겠지만, 분명 다른 카테고리의 소비자로 정의할 수 있는 것이다.스켈터랩스에서 진행하고 있는 맥락인식 기술 프로젝트를 예로 들어보자. 앞서 언급한 것처럼 다양한 기기로부터 측정하는 저레벨 데이터를 수집하는 것으로 맥락인식 프로세스는 시작된다. 측정 데이터는 서버에 전송되어 시간 순으로 변경 및 취합되고, 기계학습을 통해 필터링 후 수집되며, 고레벨의 맥락으로 추상화된다. 시간, GPS, 와이파이, 모션센서, 소리, 문자메시지, 일정 등 여러 데이터를 처리해 사용자의 맥락을 이해한다. 이러한 일련의 과정 역시 맥락인식 기술의 한 부분인지라 메시지 스트림 프로세서를 기반으로 확장할 수 있는 인프라를 설계, 구축했다.실시간으로 데이터를 처리할 수 있는 파이프라인이다. 처리한 데이터는 좀 더 상위 레벨의 이벤트와 행동으로 인식되어 ‘의미‘를 지니는 데이터로 표현되는데, 예를 들어 GPS 정보를 와이파이 및 시간 등과 같은 다른 데이터와 결합하고, 방문 장소와 행동반경 등을 포함해 사용자의 장소를 식별하는 방식이다. 이러한 사용자의 행동 히스토리는 패턴인식 기술을 활용해 사용자 특정 행동을 학습하고, 이를 기반으로 ‘언제 집으로 돌아갈지‘, 혹은 ‘언제 식사를 하는지’ 등 행동을 예측할 수 있다. 결국, 맥락인식을 통해 사용자의 다음 활동을 예측할 수 있는 기술을 개발, 사용자에게 필요하고 유용한 정보와 서비스를 제공하는 것이 목표다.< 맥락인식 기술을 적용한 큐 앱 화면, 출처: 스켈터랩스 한지예, 이해연 디자이너 >얼마 전, 스켈터랩스의 맥락인식 기술 프로젝트 팀은 해당 기술을 활용해 사용자들이 일상 속에서 가볍게 사용할 수 있는 서비스가 무엇일까 고민하고, ‘큐(Cue)’라는 앱을 개발했다. 큐는 사용자가 직접 명령할 필요가 없다. 큐가 먼저 사용자의 생활을 돕기 때문이다. 날씨를 예를 들면, 사용자가 날씨를 알아보기 전에 비가 올 것 같으면 우산을 챙기라 알려주고, 덥거나 미세먼지가 많을 경우 도움 되는 정보를 알려준다. 사용자에게 전달하는 정보는 카드 메시지를 통해 잠금화면으로 표시된다.큐 프로젝트의 이민학 시니어 프로덕트 매니저는 큐를 통해 사용자가 ‘내'가 누구인지 파악할 수 있을 것이라고 말한다. 예를 들어, 나는 내가 운동을 좋아하는 액티브한 라이프스타일을 살고 있는 줄 알았는데, 실제로는 집에 누워서 영화보는 것을 더 좋아하는 사람에 가깝다는 것. 개인의 삶이 매우 중요해지는 시대이지만, 정작 내가 누구인지 확인하기 어렵기 때문에 맥락인식 기술은 다양한 용도로 사용될 수 있다.< 사용자 패턴을 분석한 유형 결과 예시, 출처: 스켈터랩스 한지예, 이해연 디자이너 >이민학 매니저는 맥락인식 기술에 대해 이렇게 말한다. 그는 “누가, 언제, 어디서, 무엇을, 어떻게, 왜로 구성된 사용자의 육하원칙을 파악하고, 더 나아가 ‘Next-육하원칙’을 파악하는 것이 진정한 맥락인식 기술입니다. 앞으로 기업 특히, 마케터들은 타겟 고객을 잡는데 굉장히 유용하게 사용할 것이라고 생각합니다”라며, “소비자 입장에서는 일상, 문화, 생활 등 세분화된 영역에서 자신의 삶을 더 윤택하게 영위할 수 있습니다. 맥락인식 기술이야말로 인간에게 정말 도움될 수 있는, ‘피부에 와닿는' 인공지능 기술이 아닐까 생각합니다”라고 설명했다.이호진, 스켈터랩스 마케팅 매니저조원규 전 구글코리아 R&D총괄 사장을 주축으로 구글, 삼성, 카이스트 AI 랩 출신들로 구성된 인공지능 기술 기업 스켈터랩스에서 마케팅을 담당하고 있다#스켈터랩스 #기업문화 #인사이트 #경험공유 #조직문화 #인공지능기업 #기술기업
조회수 1320

에이스프로젝트 추천도서 - 프론트 편

안녕하세요!기업 문화가 좋은 야구게임 개발사에이스프로젝트입니다.기획팀 편에 이어 2탄!에이스프로젝트의 대소사(?)를 책임지는 '프론트'편을 준비했습니다!프론트는 조직문화 담당자부터 인디자이너까지 다양한 인재들로 구성되어 있어요.하는 일이 다양한 만큼 추천도서의 스펙트럼도 넓었는데 그중 다섯 권을 엄선했다고 합니다.에이스프로젝트 프론트가 추천하는한 번쯤은 읽어보면 좋은 추천 도서 Best 5!1. 구글의 아침은 자유가 시작된다 - 라즐로 복[ 이미지 출처 : 예스 24 ]자유롭게 일하는데 성과도 좋은 조직문화, 구글은 어떻게 만들었을까조직문화 담당자들에게 생각할 주제를 던져주는 책2. 배민다움 - 홍성태[ 이미지 출처 : 예스 24 ]회사에 맞는 문화를 만드는 과정에 대한 정리가 잘 되어 있는 책3. 내 문장이 그렇게 이상한가요? - 김정선[ 이미지 출처 : 예스 24 ]칼럼 쓸 때 도움이 많이 됐던 글쓰기 실용서교정교열 경력 20년이 넘었다는 작가분의 내공이 느껴지는 책4. 좋은 문서 디자인 기본 원리 29 - 김은영[ 이미지 출처 : 예스 24 ]"자네는 디자이너도 아닌데 어떻게 이렇게 전달력이 좋나!"좋은 내용을 더 좋게 만들어 주는 문서 디자인 기본서5. 디자이너 사용설명서 - 박창선[ 이미지 출처 : 예스 24 ]프론트 인디자이너의 추천서!디자이너와의 원활한 협업을 원하는 모든 사람들에게 이 책을 추천합니다프론트는 인사, 채용, 회계, 홍보 등 각자의 전문 영역이 있지만 결국은 다 함께 좋은 회사를 만들기 위해 노력하는 팀입니다. 위 다섯 개의 도서는 프론트가 공통적으로 읽고 추천한 도서라고 해요 :-) 이상 "각자, 그리고 함께 조직문화를 만들어가는" 프론트의 추천도서였습니다!다음은 '그래픽팀'의 추천도서로 찾아올게요 ;)

기업문화 엿볼 때, 더팀스

로그인

/