스토리 홈

인터뷰

피드

뉴스

조회수 1235

철학이 있는 스타트업

철학이 있는 스타트업스타트업 업계의 옥석 가리기는매출과 투자과 같은 숫자로만 판별되지 않는다.내부적으로 창업자의 마인드와멤버들이 체감하는 현실을 반영하여야보다 정확한 실체에 접근할 수 있다.이 글을 적는 나 자신조차기업가 정신이라던가,창업자 기본 소양이라던가,도덕적으로 흠이 없는 스타트업을꾸려가고 있는지 항상 스스로 의심하고자문하여 본다.예비 창업자들이나 초기 창업자들에게올바른 철학을 먼저 세우라고 전하고 싶다.내가 그렇게 잘난 거 없는 창업자이며,늘 미완성이고 부족한 대표 생퀴라서이런 글을 쓸 자격은 미달이겠지만....꼭 전하고 싶은 말들이 있어 남긴다.흔히 기업의 철학이라던가,창업자의 마인드에 대한 중요성을 강조할 때면꼰대로 비칠 수 있겠지.직장인이든,취업준비생이든,학생이든,창업가든....요즘은 부정적으로 인식되어사용하기 겁나는 단어 혹은들으면 거북 해지는 단어가 있다.노~오력~!열~~ 쩡!참 좋은 단어들인데꼰대님들의 그릇된 활용으로금기시하는 단어가 되어 버렸듯이스타트업에서 원론적인 이야기인기업가정신이라는 부분은시대에 뒤떨어진 이야기처럼 들릴 수 있다.그래도 여전히 나는노력과 열정이란 말을 사랑한다.스타트업에게"마케팅", "투자", "사업계획서","팀빌딩", "국가지원사업" 같은 강의나 모임은몰리듯이 인기를 얻지만정작기업가정신이라던가,창업자 마인드에 대해따로 시간을 내서 공부하거나들으려 하지 않는 경향이 있다.지금 당장 무슨 스킬을 알려주는 것도 아니고,실무에 바로바로 써먹는다고퍼포먼스가 딱 나오는 건 아니기에선뜻 시간 내어 배우길 꺼려하는 마음을이해 못 하는 바는 아니다.그러나 꼰대를 싫어하는 내가굳이 꼰대스런 말을 하자면,이건 꼭 집고 넘어가야 할 중요한 문제이다.제대로 된 철학이 없으면구체적인 실행에서 기준이 없다.빨리 마일스톤을 달성하려다 보면,그 사이사이 수많은 결정의 순간에서갈팡질팡하게 되는 경우가 많다.대전제가 없거나 수시로 흔들리기 때문이다.그리고 모든 기업활동에서철학의 부재는 쓸데없는 행동을 발생시킨다.(출처: 구글, pixabay)우리가 무슨 종교인이나 도덕 가는 아니지만,적어도 지켜야 할 최소한의 양심은 꼭 잊지 말자.회사 대표라는 것은능력도 있어야 하지만,도덕적으로도 수양을 해야 한다.일전에 작성한 브런치에서"직원들 월급이 밀리면 나쁜 사장이다"라고 언급하였다.그럼 돈을 벌어오기 위해온갖 불법적인 일과용납받지 못할 악한 일을 해서라도직원들 월급만 주면 선한 사장일까?회사가 이윤을 추구하는 것은 당연한 일이다.하지만 불의한 과정으로 생성된 수익과불합당한 방법을 동원한 갈취(횡령)는회사를 멍들게 할 뿐 아니라 선량한 다른 스타트업들에게악영향을 준다.그래서"직원들 월급이 밀리면 나쁜 사장이다.""올바르지 못 한 사장은 더 나쁜 사장이다."로 한 줄 추가~~!올바른 철학이 없으면,쉽게 안 좋은 방향으로 회사가 흘러간다.양심이라는 기준이 있을 때,잘못된 일에 대한 거부반응이 있지만,양심이 없을 때,아무 일 없다는 듯이 잘못을 저지른다.기업에게 있어 철학은기업의 양심을 만들어가는 씨앗과도 같다.기업철학의 부재가 가져올 수 있는 몇 가지 예를 들어보겠다.1. 회사 돈이 내 돈?흔히 정부지원금이나 저금리 융자에 대하여그 사용처에 대한 이슈가 자주 언급된다.바로, 대표자가 공금을자기 돈처럼 막 돈을 쓰기 때문이다.스타트업은 항상 빈곤하다.창업자가 얼마나 굶주리고, 가난해지는지는굳이 설명하지 않아도 피부로 실감하고 있다.창업을 하기 위해그동안 끌어 쓴 많은 개인 자금, 개인 카드...그리고 밀려오는 고지서에 순간적으로회사 돈이 눈에 들어올 수도 있다.'견물생심'이니까'근데 그게 다대표자의 목을 조여 오는 올가미이다.그렇게 끌어 쓴 돈만큼회사는 더 궁핍해진다.제품은 더 망가진다.동료들은 더 마음이 떠나간다.그러다 망한다.우리 창업자들 동지들에게베테랑이라는 영화에서 나오는 명대사를 인용한다."우리가 돈이 없지 가오가 없냐?""쪽팔리게 살지 말자"2. 허세인가, 품위인가어찌 어찌해서자금의 여유가 생겼다고 치자.투자 유치를 하였든,첫 아이템이 대박을 쳤든 간에이제 좀 살만하다고 느끼는 순간이 위험하다.차를 바꾸고,그럴듯한 사무실로 이전하고,리모델링과 목적을 잃은 사교 모임을 전전한다.(필요에 의한 리모델링과 목적이 뚜렷한 모임은 지지한다.)시간이 너무나 소중한 대표들에게언제 고장 날지 모르는 차를 끌고 다니라고 하는 게 아니다.근무환경이 너무 열악한 상황에서동료들에게 보다 나은 환경을 만들어주는 것이 나쁘다는 게 아니다.정보를 나누고, 협력을 하고, 영업을 할 수 있는네트워킹 모임을 비하하려는 게 아니다.스스로에게 물어보라.누구를 위한 차량 구매이고,무엇을 위한 리모델링/이사이며,어떤 목적을 가지고 사람들을 만나려 하는지본인은 제일 잘 알고 있지 않은가.그다음으로는 동료들과 거래처와 가족들이알고 있다는 점을 잊지 마라.3. 사장님! 대표님! 성공하셨네요.성공은 개뿔~!스타트업에게 성공이란 단어는 존재하지 않는다.그냥 이전보다는 더 생존할 확률이 높아진 것뿐이다.회사 규모가 커졌다고?신규인력이 많이 늘었다고?확실한 고정적인 매출이 확보되었다고?정말 두려운 거 하나도 없나?정말 두 다리 쭉 뻗고 잘 수 있나?정말 나 없이도 회사가 잘 돌아갈 수 있나?사장이란 소리, 대표란 소리는허울만 좋을 뿐, 여전히 잠재적 죄인이라는 소리다.회사 사정이 안 좋아지면,가장 책임을 많이 져야 할 사람이고동료와 협력사, 고객들에게 사죄해야 할 사람이다.그런 생각은 하고 사냐?그런 고민은 하고 사냐?언론에 좀 나고, 모이는 장소마다 서로 명함 나누길 원하고잘 포장된 인터뷰 몇 번하고 나서'에헴~!'하고 어깨에 힘들어가면진짜 성공한 거 같냐?겸손해져야 한다.우리 팀의 부족한 능력을 보완하기 위해많은 외부교육을 듣곤 한다.강사로 오신 분들의 경험과 인사이트를 통해우리 눈으로는 볼 수 없었던 미지로 한 걸음 더 내딛을 수 있다.그런데 가끔은 강사분들을 깎아내리려는 의도로비치는 짓궂은 질문을 던지는 분들이 있다.모르는 것, 의문 나는 질문은 꼭 필요하다.그런데..."내가 해봤는데 그거는 틀린 거 같아요.""그 분야는 강사님보다 제 현직에서 부딪히죠""그건 강사님 개인적인 의견 아닌가요?"그렇게 마주 선다고돋보이거나 존경하는 눈빛을 보내 줄 것 같은가?우리도 바쁜 시간 쪼개서 배우고자, 알고자찾아온 사람들인데...꼭 그렇게 주목받고 싶었냐?개인적으로 의견이 다르면,따로 찾아가서 물어보든가,아니면 말이라도 곱게 쓰든가...우리는 뭔가 하나라도 더 배우려고찾아온 사람들인데...우리는 배움에 목마름이 채워지지 않은사막의 방랑자 같단 말이다.(출처: 구글, Rubens, Peter Paul - The Fall of Icarus, 이카루스의 추락)4. 내가 쫌 하지, 내가 제일 잘 나가~!가장 웃기는 말이 뭐 쫌 되면,영웅담이 술술 나온다는 거다.위기의 순간에 현명한 결정을 똬악~!그랬더니 고객들이 우와~! 하면서 환호성과 반응을보이더라고....설령 1인 기업이라고 하더라도혼자 사업하는 건 아니다.혼자 잘나서 좋은 기회를 가진 게 아니다.알게 모르게 뒤에서 도와준 분들이 있다.사업은 상호관계에서 이루어지는 거다.그래.정말 능력이 출중하고, 개인 역량이 뛰어난 분들도 있다.그래도 그뿐이다.동료들이 뒷받침해주니까 밖에서 누구라도 만나주는 거다.가족들이 희생해주니까 회사에서 열정을 쏟아부을 수 있는 거다.창업자의 마인드, 성격을 보고 투자했다는 말에정말 나 자신의 마인드가 좋다고 착각하는 건 아니겠지?대표가 마음에 들어서 거래를 트겠다는 말에정말 내가 잘 살아온 놈이라고 믿는 건 아니겠지?웃기지 마라.혼자서는 아무것도 아니다.주변인인 줄 알았던 분들이 사실은주인공인 분들이다.오히려 그분들 덕분에 콩고물이라도얻어먹고 있다는 사실을 늘 명심하자.난 1인 영웅보다는 멋진 팀이 이루는성공스토리가 더 좋더라.5. 친구 따라 나도 강남 갈래."지방으로 본사 옮겼다면서? 왜? 회사가 어렵냐?""아니, 우리에겐 서울 본사라는 게 메리트가 없어서...""다들 서울로 입성하려고 하는데 그래도 놔두지 그래""그분들은 서울에서 비즈니스 할 필요가 있는 거고,난 굳이 서울 밖이 회사 고정비라던가 협력사와 거리가 좁혀져서"스타트업이 가장 신경 써야 할 비용은 고정비이다.서울에서 사무실 임대하면관리비, 임대료에 고물가에 의한 식대 상승분까지... 에구...서울이 사업하는데 필요한 인프라도 많이 구축되어있고직접 만나서 얻는 정보들도 다양하며,도움을 받을 수 있는 사람들이 모여있음은 사실이다.그렇다고 꼭 본사가 서울일 필요까지는 없더라.우리의 경우,천사와 같은 건물주님께서 은혜를 베푸사서울 본사로 쓰던 사무실을 무상으로 2년간 사용했다.더 쓰고 싶으면, 무상임대계약서 다시 써주신다고 하시는세상에 보기 드문 에인~절 건물주님이시지.그럼에도 강원도로 회사 본사를 옮겼다.우리에겐 제조업의 특성상공장이 필요하고, 청정한 원재료를 쉽게 공급하며,관련된 산업 인프라가 있는 장소가 필요했다.또한, 함께 연구 개발을 진행할 대학연구소도 필요했으며,제품 출시에 협력관계를 가질 선배기업들을 꼬셔야 했다.그렇다고 서울에서 일은 없냐고?아니, 본사만 옮겼을 뿐서울에서 수행해야 할 업무들과기존 협력사들과 얼굴을 마주하기 위해어정쩡한 디지털 노매드가 되었다.(다행히도 서울에서의 공간을 무상으로 지원받았다.)그게 우리 사업과 전략에 맞춘 결정이었고,구성원 모두가 머리를 맞대어 선택한 합의였다.서울에 본사가 있어야 할 타당성이 있는 회사가 있고,판교에 본사가 있어야 할 근거가 있는 회사도 있다.안산에서, 파주에서, 부산에서, 광주에서 의미를 찾은 회사도 있다.무작정 친구 따라 인 서울?대책 없이 옆 사장 따라 해외로?따라다니기만 하다가따라서 낭떠러지에 떨어진다.통계에서 자주 언급되는꽃 피우지 못하고 스러져가는 90%의 스타트업들에합류하는 가장 빠른 길이 아닐까?6. 바람 불면 바람 따라, 물 흐르면 물 따라철학이 없으면, 스타트업의 모든 활동에 영향을 받는다.팔랑팔랑 팔랑귀가 되어버리는 건줏대가 없어서이고,줏대는 배움과 철학에서 나온다.사람에 대한 철학을 예로 들자면,평소에 팀 구성에 대한 나름의 철학이 없을 때,인재 채용에 대한 그때그때 기준이 달라진다.줏대가 없으면, 채용 이후에 관리 측면에서도 흔들린다."이 사람 좋네""저 사람도 좋네"로 끝나면 안 된다.사실 채용을 진행할수록회사에 지원한 분들은다 좋은 분들이더라.근데 우리와 함께 동행할 분들을모신다는 것은 결국 회사의 철학과맞닿아 있어야 한다.채용하는 입장에서는좋은 사람을 선택하는 게 아니라,회사에 좋을 사람을 유혹해야 한다.이 글을 적으면서,우리 회사에 지원하신 분들께송구한 점은...우리가 다 품을 수 있는 자리가 부족했기에최종 협상 테이블을 한정할 수밖에 없었다는 점이다.진심으로...지원해 주신 분들께감사드리고,부족한 대표 생퀴에 대한 이해를 부탁드린다.마지막 인터뷰가 끝난 이후에괴롭고, 고민스러운 시간이었고,지원자분들의 능력이 탐나고,회사의 그릇이 작았을 뿐지원자분들의 역량은 최고였다.다시 본론으로 돌아가서,대표가 흔들리면,경영진이나 동료들이 모두 흔들리고배는 산으로 간다.투자유치에 있어서도 명확한 철학이 있어야 한다.우리가 EXIT를 고려하는 회사를 만들려는지,끝까지 오래오래 키워나가는 회사를 만들려는지,빠르게 투자자에게 어필하는 회사가 될 것인지,투자보다는 자체적인 자금을 돌리는 게 더 우선일지,고객 만족이 최우선인지,내부고객(동료)과 상생이 최우선인지,주주이익이 최우선인지,투자가 필요한 이유가 내적인 비용인지, 외적인 비용인지확장에 필요한 건지, 내실 다지기에 필요한 건지모든 선택의 대전제는 회사의 방향을정해 줄 철학에 있다.화려하지는 않아도,뚝심 있는 스타트업도 있다.항상 보는 익숙한, 그러나 적은 인원이지만,모두가 웃으면서 열정을 쏟고 있는 스타트업이 있고홀로 골방에서 전기 인두질로 납 연을 흡입하고 있지만,딱히 외부자금 없이 잘 굴러가는 스타트업도 있다.아무리 들어도이해하기 어려운 난해한 기술의 제품이라아직 주목받지도 못 하고,어디에 쓰일지 모를 회로도가 적용된시제품이 구동되는 것을 보면,'우와~! 대박~!'이라고엄지 척할 그런 제품을 완성하고 있는 대표님도 있다.지금은 정말 힘들고, 시장 현황도 완전 꽝이라하루하루 너무 힘겹게 이겨내고 있는 스타트업이지만그 멤버들이 탐나고, 대표가 탐나서...서로 합치자고 의기투합하고 있는 스타트업 그룹도 있다.냉혹하게도,내실을 다졌음에도여러 가지 요인에 의해망하는 게 스타트업이라는 세상이다.스타트업에게 허세는 비눗방울과도 같다.무지개 빛나는 영롱한 아름다움이 있지만곧 터져버리고, 순간만 기억된다.스타트업에게 내실은 보석의 원석과 같다.처음엔 보석인지 모르지만갈고, 닦고, 깎아내고, 광을 내다보면무지개 빛나는 영롱한 아름다움이영원히 기억될 것이다."날 좀 더 채찍질해줘""날 좀 더 막 굴려줘"우리 멤버들과 대화를 하면서,나 자신의 부족한 점들을 깨닫는다.디테일하지 못한 대표이기에미처 신경 쓰지 못한 것들,좀 더 대담하지 못한 것들,지나고 나니 아쉬움이 남는 일들...회사라는 배의 선장은 대표라고 하더라.선장은 무엇을 보고 항해를 하는가나침반이다.대표라는 선장의 나침반은멤버들과 고객들이다.나의 철학은바로 "평생 함께 할 내 사람"이다.채용에 있어서능력보다는 성장 가능성을 우선시한다.투자유치에 있어서빠른 EXIT보단 지속적인 배당금 증대를 계획한다.(물론 투자자들에겐 매력이 없겠지만...;;;)제품에 있어서단기성 제품, 브랜드가 아니라 비록 시작은 미약하지만우리의 브랜드를 만들어가려고 한다.비용 지출에 있어서외부교육과 전문교육에 대한 비중이 높다.수익창출에 있어서고마진보다 함께 상생할 협력관계가 중요하다.등등등하나의 대전제는 각 분야 별 선택에서의중전제가 탄생하고 그에 따라 상세한 기준들이만들어진다.이것을 매뉴얼화/체크리스트 화하는 것이정량적/수치화한 내부 기준이 된다.나의 철학은 미흡하고, 부족하고, 미완이지만우리의 철학은 보다 현명하고, 보다 뚜렷하며,보다 다양성을 가지도록앞으로도 더욱 부탁합니다. 내 사람들이여^^#클린그린 #스타트업 #스타트업창업 #창업자 #창업가 #철학 #가치 #조언 #인사이트
조회수 908

비트윈의 HBase 스키마 해부 - VCNC Engineering Blog

비트윈에서는 HBase를 메인 데이터베이스로 이용하고 있습니다. 유저 및 커플에 대한 정보와 커플들이 주고받은 메시지, 업로드한 사진 정보, 메모, 기념일, 캘린더 등 서비스에서 만들어지는 다양한 데이터를 HBase에 저장합니다. HBase는 일반적인 NoSQL과 마찬가지로 스키마를 미리 정의하지 않습니다. 대신 주어진 API를 이용해 데이터를 넣기만 하면 그대로 저장되는 성질을 가지고 있습니다. 이런 점은 데이터의 구조가 바뀔 때 별다른 스키마 변경이 필요 없다는 등의 장점으로 설명되곤 하지만, 개발을 쉽게 하기 위해서는 데이터를 저장하는데 어느 정도의 규칙이 필요합니다. 이 글에서는 비트윈이 데이터를 어떤 구조로 HBase에 저장하고 있는지에 대해서 이야기해 보고자 합니다.비트윈에서 HBase에 데이터를 저장하는 방법Thrift를 이용해 데이터 저장: Apache Thrift는 자체적으로 정의된 문법을 통해 데이터 구조를 정의하고 이를 직렬화/역직렬화 시킬 수 있는 기능을 제공합니다. 비트윈에서는 서버와 클라이언트가 통신하기 위해 Thrift를 이용할 뿐만 아니라 HBase에 저장할 데이터를 정의하고 데이터 저장 시 직렬화를 위해 Thrift를 이용합니다.하나의 Row에 여러 Column을 트리 형태로 저장: HBase는 Column-Oriented NoSQL로 분류되며 하나의 Row에 많은 수의 Column을 저장할 수 있습니다. 비트윈에서는 Column Qualifier를 잘 정의하여 한 Row에 여러 Column을 논리적으로 트리 형태로 저장하고 있습니다.추상화된 라이브러리를 통해 데이터에 접근: 비트윈에서는 HBase 클라이언트 라이브러리를 직접 사용하는 것이 아니라 이를 래핑한 Datastore라는 라이브러리를 구현하여 이를 이용해 HBase의 데이터에 접근합니다. GAE의 Datastore와 인터페이스가 유사하며 실제 저장된 데이터들을 부모-자식 관계로 접근할 수 있게 해줍니다.트랜잭션을 걸고 데이터에 접근: HBase는 일반적인 NoSQL과 마찬가지로 트랜잭션을 제공하지 않지만 비트윈에서는 자체적으로 제작한 트랜잭션 라이브러리인 Haeinsa를 이용하여 Multi-Row ACID 트랜잭션을 걸고 있습니다. Haeinsa 덕분에 성능 하락 없이도 데이터 무결성을 유지하고 있습니다.Secondary Index를 직접 구현: HBase에서는 데이터를 Row Key와 Column Qualifier를 사전식 순서(lexicographical order)로 정렬하여 저장하며 정렬 순서대로 Scan을 하거나 바로 임의 접근할 수 있습니다. 하지만 비트윈의 어떤 데이터들은 하나의 Key로 정렬되는 것으로는 충분하지 않고 Secondary Index가 필요한 경우가 있는데, HBase는 이런 기능을 제공하지 않고 있습니다. 비트윈에서는 Datastore 라이브러리에 구현한 Trigger을 이용하여 매우 간단한 형태의 Secondary Index를 만들었습니다.비트윈 HBase 데이터 구조 해부페이스북의 메시징 시스템에 관해 소개된 글이나, GAE의 Datastore에 저장되는 구조를 설명한 글을 통해 HBase에 어떤 구조로 데이터를 저장할지 아이디어를 얻을 수 있습니다. 비트윈에서는 이 글과는 약간 다른 방법으로 HBase에 데이터를 저장합니다. 이에 대해 자세히 알아보겠습니다.전반적인 구조비트윈에서는 데이터를 종류별로 테이블에 나누어 저장하고 있습니다. 커플과 관련된 정보는 커플 테이블에, 유저에 대한 정보는 유저 테이블에 나누어 저장합니다.각 객체와 관련된 정보는 각각의 HBase 테이블에 저장됩니다.또한, 관련된 데이터를 하나의 Row에 모아 저장합니다. 특정 커플과 관련된 사진, 메모, 사진과 메모에 달린 댓글, 기념일 등의 데이터는 해당 커플과 관련된 하나의 Row에 저장됩니다. Haeinsa를 위한 Lock Column Family를 제외하면, 데이터를 저장하기 위한 용도로는 단 하나의 Column Family만 만들어 사용하고 있습니다.각 객체의 정보와 자식 객체들은 같은 Row에 저장됩니다.또한, 데이터는 기본적으로 하나의 Column Family에 저장됩니다.이렇게 한 테이블에 같은 종류의 데이터를 모아 저장하게 되면 Region Split하는 것이 쉬워집니다. HBase는 특정 테이블을 연속된 Row들의 집합인 Region으로 나누고 이 Region들을 여러 Region 서버에 할당하는 방식으로 부하를 분산합니다. 테이블을 Region으로 나눌 때 각 Region이 받는 부하를 고려해야 하므로 각 Row가 받는 부하가 전체적으로 공평해야 Region Split 정책을 세우기가 쉽습니다. 비트윈의 경우 커플과 관련된 데이터인 사진이나 메모를 올리는 것보다는 유저와 관련된 데이터인 메시지를 추가하는 트래픽이 훨씬 많은데, 한 테이블에 커플 Row와 유저 Row가 섞여 있다면 각 Row가 받는 부하가 천차만별이 되어 Region Split 정책을 세우기가 복잡해집니다. RegionSplitPolicy를 구현하여 Region Split 정책을 잘 정의한다면 가능은 하지만 좀 더 쉬운 방법을 택했습니다.또한, 한 Row에 관련된 정보를 모아서 저장하면 성능상 이점이 있습니다. 기본적으로 한 커플에 대한 데이터들은 하나의 클라이언트 요청을 처리하는 동안 함께 접근되는 경우가 많습니다. HBase는 같은 Row에 대한 연산을 묶어 한 번에 실행시킬 수 있으므로 이 점을 잘 이용하면 성능상 이득을 얻을 수 있습니다. 비트윈의 데이터 구조처럼 특정 Row에 수많은 Column이 저장되고 같은 Row의 Column들에 함께 접근하는 경우가 많도록 설계되어 있다면 성능 향상을 기대할 수 있습니다. 특히 Haeinsa는 한 트랜잭션에 같은 Row에 대한 연산은 커밋시 한 번의 RPC로 묶어 처리하므로 RPC에 드는 비용을 최소화합니다. 실제 비트윈에서 가장 많이 일어나는 연산인 메시지 추가 연산은 그냥 HBase API를 이용하여 구현하는 것보다 Haeinsa Transaction API를 이용해 구현하는 것이 오히려 성능이 좋습니다.Column Qualifier의 구조비트윈은 커플들이 올린 사진 정보들을 저장하며, 또 사진들에 달리는 댓글 정보들도 저장합니다. 한 커플을 Root라고 생각하고 커플 밑에 달린 사진들을 커플의 자식 데이터, 또 사진 밑에 달린 댓글들을 사진의 자식 데이터라고 생각한다면, 비트윈의 데이터들을 논리적으로 트리 형태로 생각할 수 있습니다. 비트윈 개발팀은 Column Qualifier를 잘 정의하여 실제로 HBase에 저장할 때에도 데이터가 트리 형태로 저장되도록 설계하였습니다. 이렇게 트리 형태로 저장하기 위한 Key구조에 대해 자세히 알아보겠습니다.Column Qualifier를 설계할 때 성능을 위해 몇 가지 사항들을 고려해야 합니다. HBase에서는 한 Row에 여러 Column이 들어갈 수 있으며 Column들은 Column Qualifier로 정렬되어 저장됩니다. ColumnRangeFilter를 이용하면 Column에 대해 정렬 순서로 Scan연산이 가능합니다. 이 때 원하는 데이터를 순서대로 읽어야 하는 경우가 있는데 이를 위해 Scan시, 최대한 Sequential Read를 할 수 있도록 설계해야 합니다. 또한, HBase에서 데이터를 읽어올 때, 실제로 데이터를 읽어오는 단위인 Block에 대해 캐시를 하는데 이를 Block Cache라고 합니다. 실제로 같이 접근하는 경우가 빈번한 데이터들이 최대한 근접한 곳에 저장되도록 설계해야 Block Cache의 도움을 받을 수 있습니다.비트윈에서는 특정 커플의 사진이나 이벤트를 가져오는 등의 특정 타입으로 자식 데이터를 Scan해야하는 경우가 많습니다. 따라서 특정 타입의 데이터를 연속하게 저장하여 최대한 Sequential Read가 일어나도록 해야 합니다. 이 때문에 Column Qualifier가 가리키는 데이터의 타입을 맨 앞에 배치하여 같은 타입의 자식 데이터들끼리 연속하여 저장되도록 하였습니다. 만약 가리키는 데이터의 타입과 아이디가 Parent 정보 이후에 붙게 되면 사진 사이사이에 각 사진의 댓글 데이터가 끼어 저장됩니다. 이렇게 되면 사진들에 대한 데이터를 Scan시, 중간중간 저장된 댓글 데이터들 때문에 완벽한 Sequential Read가 일어나지 않게 되어 비효율적입니다.이렇게 특정 타입의 자식들을 연속하게 모아 저장하는 묶음을 컬렉션이라고 합니다. 컬렉션에는 컬렉션에 저장된 자식들의 개수나 새로운 자식을 추가할 때 발급할 아이디 등을 저장하는 Metadata가 있습니다. 이 Metadata도 특정 Column에 저장되므로 Metadata를 위한 Column Qualifier가 존재합니다. 이를 위해 Column Qualifier에는 Column Qualifier가 자칭하는 데이터가 Metadata인지 표현하는 필드가 있는데, 특이하게도 메타데이터임을 나타내는 값이 1이 아니라 0입니다. 이는 Metadata가 컬렉션의 맨 앞쪽에 위치하도록 하기 위함입니다. 컬렉션을 읽을 때 보통 맨 앞에서부터 읽는 경우가 많고, 동시에 Metadata에도 접근하는 경우가 많은데, 이 데이터가 인접하게 저장되어 있도록 하여 Block Cache 적중이 최대한 일어나도록 한 것입니다.Datastore 인터페이스비트윈에서는 이와 같은 데이터 구조에 접근하기 위해 Datastore라는 라이브러리를 구현하여 이를 이용하고 있습니다. HBase API를 그대로 이용하는 것보다 좀 더 쉽게 데이터에 접근할 수 있습니다. GAE의 Datastore와 같은 이름인데, 실제 인터페이스도 매우 유사합니다. 이 라이브러리의 인터페이스에 대해 간단히 알아보겠습니다.Key는 Datastore에서 HBase에 저장된 특정 데이터를 지칭하기 위한 클래스입니다. 논리적으로 트리 형태로 저장된 데이터 구조를 위해 부모 자식 관계를 이용하여 만들어 집니다.Key parentKey = new Key(MType.T_RELATIONSHIP, relId); Key photoKey = new Key(parentKey, MType.T_PHOTO, photoId); // 특정 커플 밑에 달린 사진에 대한 키 Datastore는 Key를 이용해 Row Key와 Column Qualifier를 만들어 낼 수 있습니다. Datastore는 이 정보를 바탕으로 HBase에 새로운 데이터를 저장하거나 저장된 데이터에 접근할 수 있는 메서드를 제공합니다. 아래 코드에서 MUser 클래스는 Thrift로 정의하여 자동 생성된 클래스이며, Datastore에서는 이 객체를 직렬화 하여 HBase에 저장합니다.MUser user = new MUser(); user.setNickname("Alice"); user.setGender(Gender.FEMALE); user.setStatus("Hello World!"); Key userKey = new Key(MType.T_USER, userId); getDatastore().put(userKey, user); user = getDatastore().get(userKey); getDatastore().delete(userKey); 또한, Datastore는 Key를 범위로 하여 Scan연산이 할 수 있도록 인터페이스를 제공합니다. Java에서 제공하는 Try-with-resource문을 이용하여 ResultScanner를 반드시 닫을 수 있도록 하고 있습니다. 내부적으로 일단 특정 크기만큼 배치로 가져오고 더 필요한 경우 더 가져오는 식으로 구현되어 있습니다.try (CloseableIterable> entries = getDatastore().subSibling(fromKey, fromInclusive, toKey, toInclusive)) { for (KeyValue entry : entries) { // do something } } Secondary Index 구현 방법HBase는 데이터를 Row Key나 Column Qualifier로 정렬하여 저장합니다. 이 순서로만 Sequential Read를 할 수 있으며 Key값을 통해 특정 데이터를 바로 임의 접근할 수 있습니다. 비트윈에서는 특정 달에 해당하는 이벤트들을 읽어오거나 특정 날짜의 사진들의 리스트를 조회하는 등 id 순서가 아니라 특정 값을 가지는 데이터를 순서대로 접근해야 하는 경우가 있습니다. 이럴 때에도 효율적으로 데이터에 접근하기 위해서는 id로 정렬된 것 외에 특정 값으로 데이터를 정렬할 수 있어야 합니다. 하지만 HBase에서는 이와 같은 Secondary Index 같은 기능을 제공하지 않습니다. 비트윈 개발팀은 이에 굴하지 않고 Secondary Index를 간단한 방법으로 구현하여 사용하고 있습니다.구현을 간단히 하기 위해 Secondary Index를 다른 데이터들과 마찬가지로 특정 타입의 데이터로 취급하여 구현하였습니다. 따라서 Index에 대해서도 Column Qualifier가 발급되며, 이때, Index에 해당하는 id를 잘 정의하여 원하는 순서의 Index를 만듭니다. 이런 식으로 원하는 순서로 데이터를 정렬하여 저장할 수 있으며 이 인덱스를 통해 특정 필드의 값의 순서대로 데이터를 조회하거나 특정 값을 가지는 데이터에 바로 임의 접근할 수 있습니다. 또한, Index에 실제 데이터를 그대로 복사하여 저장하여 Clustered Index처럼 동작하도록 하거나, Reference만 저장하여 Non-Clustered Index와 같이 동작하게 할 수도 있습니다. Datastore 라이브러리에는 특정 데이터가 추가, 삭제, 수정할 때 특정 코드를 실행할 수 있도록 Trigger 기능이 구현되어 있는데, 이를 통해 Index를 업데이트합니다. 데이터의 변경하는 연산과 Index를 업데이트하는 연산이 하나의 Haeinsa 트랜잭션을 통해 원자적으로 일어나므로 데이터의 무결성이 보장됩니다.못다 한 이야기각 테이블의 특정 Row의 Column들에 대한 Column Qualifier외에도 Row에 대한 Row Key를 정의 해야 합니다. 비트윈에서는 각 Row가 표현하는 Root객체에 대한 아이디를 그대로 Row Key로 이용합니다. 새로운 Root객체가 추가될 때 발급되는 아이디는 랜덤하게 생성하여 객체가 여러 Region 서버에 잘 분산될 수 있도록 하였습니다. 만약 Row Key를 연속하게 발급한다면 특정 Region 서버로 연산이 몰리게 되어 성능 확장에 어려움이 생길 수 있습니다.데이터를 저장할 때 Thrift를 이용하고 있는데, Thrift 때문에 생기는 문제가 있습니다. 비트윈에서 서버를 업데이트할 때 서비스 중지 시간을 최소화하기 위해 롤링 업데이트를 합니다. Thrift 객체에 새로운 필드가 생기는 경우, 롤링 업데이트 중간에는 일부 서버에만 새로운 Thift가 적용되어 있을 수 있습니다. 업데이트된 서버가 새로운 필드에 값을 넣어 저장했는데, 아직 업데이트가 안 된 서버가 이 데이터를 읽은 후 데이터를 다시 저장한다면 새로운 필드에 저장된 값이 사라지게 됩니다. Google Protocol Buffer의 경우, 다시 직렬화 할 때 정의되지 않은 필드도 처리해주기 때문에 문제가 없지만, Thrift의 경우에는 그렇지 않습니다. 비트윈에서는 새로운 Thrift를 적용한 과거 버전의 서버를 먼저 배포한 후, 업데이트된 서버를 다시 롤링 업데이트를 하는 식으로 이 문제를 해결하고 있습니다.
조회수 1018

일할 때 오물거리는 꽈자에 대해 알아보았다.(개취존)

이제 하다하다 오물거릴 과자에 대해서도 알아보고 있네요. 뭐 아무 맥락없이 어그로나 끌려고 하는 것은 아닙니다. 말씀드렸듯 저는 프로젝트 할 때 주로 클라이언트 사무실에 컴퓨터를 들고 가서 직원마냥 일을 했죠. 일을 하다보니 자연스레 탕비실 이용도 종종 있었고, 그들의 주전부리를 함께 나누며 진정한 식구로 거듭나곤 했습니다. 근데 이게 한 두번도 아니고 미팅을 비롯하여 이곳저곳을 다니다보니 묘한 공통점을 발견하게 되었습니다. 도대체 왜! 한결같이 탕비실엔 마가렛트가 있는가...하는 것이죠. 기시감인가 싶어 다른 기억들을 되새겨봐도 이 마가렛트는 어디에나 존재했던 것 같았습니다. 롯데와 회사간 모종의 MOU가 있지도 않을진데, 죄다 비슷한 과자들이 있는 것을 보고 생각했습니다.마가렛트는 왜 항상 회사에 상주하는가. 직원인가?아, 이것이 진정한 브랜딩의 참모습이구나. 물론 헛소리입니다만, 조금 생각해보면 이렇습니다. 브랜딩이라고 하는 것은 결국 대상에 대한 이미지와 선입견의 구축입니다. 이러한 심리적 베이스가 가장 잘 드러나는 것은 사실 '의도적 구매'가 아닌(예를 들면 고가의 카메라나, 노트북과 같은 정보기반의 선택이 아닌) '습관적 구매' 부분이라고 할 수 있죠. 그냥 아무 이유없이 구매하는 것 만큼 무시무시한 브랜디드 콘텐츠가 또 있겠습니까. 물론 맥심같이 그냥 싸고 혜자스러워서 구매하는 합리적 선택도 있겠지만, 5만원어치 과자를 사와야할 때 장바구니에 담기는 과자의 종류는 놀랍게도 얼추 비슷비슷한 것들입니다. 아마도 우리 마음속엔 아..사무실에서 이런 과자. 행사장에선 이런 과자.. 등의 기시감이 존재하는 듯 합니다. 그리고 고대의 유전자로부터 흘러내려오듯 내재된 DNA에 마가렛트의 고소함이 흐르고 있을지도 모르는 일이지요.그래서 무의식중에 그냥 집어먹고 있는 사무실 안의 과자 및 주전부리에 대해 기억을 되새겨보기로 하였습니다. (어, 참 대단하다.) 개인취향이 가득하니 그냥 그런가보다....하는 관점에서 봐주시면 즐거울 것 같습니다.사무실용 꽈자1. 오징어집/양파링/자갈치 패거리농부의 마음 패거리들. 이 녀석들은 너무 와작거립니다. 그리고 계속 먹으면 입천장이 까지고 혓바늘이 돋죠. 이들의 공통점은 모두 뒷면에 '아빠의 술안주로도 좋은~' 이라는 문구가 있습니다. 곰곰히 생각해보면 과자야 아무때나 먹으면 되는 건데 굳이 본인의 TPO를 규정해놓는 것도 재미있습니다. 얘네들의 공통점은 짭쪼름입니다. 뭔가 입이 심심할 때 먹으면 아주 맛있지만, 지나치게 와작거려서 동료를 거슬리게 할 수도 있습니다.덧. 알새우칩은 케찹에 찍어먹어야 맛있습니다.2. 홈런볼느님존맛가성비가 창렬스러운 홈런볼느님은 보통 한 봉지에 23~24개정도가 들어있습니다. 큰 홈런볼 번들용이 4개들이 홈런볼보다 11개 정도가 적다는 쓸데없는 오유의 연구결과가 있습니다. 그러니 낱개로 사도록 합시다. 재수가 좋으면 27개까지도 득할 수 있습니다. 하지만 중량은 동일하므로 초코가 덜 들었을지도 모릅니다. 여튼 홈런볼은 일단 조용히 한 알씩 생각없이 먹기 좋습니다. 게다가 지구를 파괴하지만 편리한 플라스틱 용기가 있어서 부시럭거리지 않아도 될 일이죠. 아주 훌륭한 업무용 과자라고 할 수 있습니다. 당이 떨어질 때 고소함과 초코초코함을 한 번에 충족시켜주면서 뇌내의 다량의 도파민을 분출시킵니다. 일시적으로 기분이 좋고 잠이 깨는 듯한 느낌적인 느낌을 받을 수 있습니다. 게다가 졸라 맛있음. 3. 편의점팝콘이놈들은 악마다 악마야팝콘은 신이 허락한 마약과도 같습니다. 특히 콘소메와 어니언맛 팝콘은 아주 대단한 중독성을 보여주죠. 와작거림의 정도도 덜하고 양념된 팝콘을 먹고나서 몰래 손가락을 빨아먹으면 아주 기가 막힌 불량한 시즈닝맛을 느끼면서 혀르가즘에 도달할 수 있습니다. 단점은 자꾸 땅에 흘린다는 것과 이에 옥수수 껍질등이 낄 수 있다는 점, 가끔 혓바늘이 돋거나 입이 텁텁해진다는 등이 있습니다. 그리고 자꾸 손에 시즈닝이 뭍어서 키보드가 개판이 될 수 있으니 조심해야 합니다. 장점은 가성비가 엄청나단 것입니다. 편의점에선 1,000원에 하루종일 와작거릴 수 있는 거대한 양의 팝콘을 구매할 수 있죠. 4.예감뭔가 항상 있음얘는 꼭 하나씩 있더라구요. 특히 치즈그라탕맛은 거의 무조건적이었습니다. 혹시 여러분 사무실에도?...예감은 일단 튀기지 않았다는 문구로 뭔가 건강할 것 같은 느낌을 주지만 칼로리는 별 차이가 없다는 함정이 있습니다. 와작거리긴 하지만 하나씩 넣고 오물거리거나 녹여먹을 수도 있습니다. 특히 감질맛 나는 양과 동료와 나눠먹기 편한 형태로 되어 있어서 오고가는 예감속에 꽃피는 애사심을 느낄 수 있습니다.4.고구마깡/꿀꽈배기/감자깡 일당주로 얘네들은 묶음 판매를 합니다. 그래서 먹고싶지 않은 감자깡이 자꾸 딸려오죠. 그런데 놀라운 것은 원래 고구마깡과 감자깡은 내 돈주고 사먹지는 않지만 막상 까놓으면 또 한 두개씩 집어먹게 된다는 점입니다. 더욱 신기한 것은 한 두개 먹다보면 계속 먹을 수 밖에 없는 담배못지않은 중독성이죠.4.뽀또/애플잼쿠키/초코칩쿠키 하아..마성의 뽀또. 치즈맛. 이건 정말 절대 내 돈주고 사먹지 않는데, 있으면 하나씩 꼭 까먹게 됩니다. 애플잼쿠키와 초코칩쿠키도 그러하죠. 아마 이 녀석들의 매출의 70%는 직장인들이 아닐까 싶습니다. 이럴거면 그냥 B2B영업을 하는 것이.. 뽀또는 먹으면 어금니 안쪽에 자꾸 뭉쳐서 낍니다. 일하다가 자꾸 혀를 안쪽으로 넣어서 이상한 표정을 짓게 되죠. 초코칩과 애플잼도 그렇습니다. 덤으로 엄마손파이가 등장하는데, 주로 엄마손은 행사장 테이블에 많더라구요. 그래서 행사장 과자에서 다루도록 하겠습니다.4.콘칩/포테토칩/캬라멜콘+메이플커져서 먹기 힘들어짐.뭔가 고대의 유물같은 아재과자이지만, 심심할 때 와작거리기엔 또 이만한 것들이 없습니다. 단점이라면 자꾸 손에 가루가 묻는다는 것이랄까요. 캬라멜콘은 원래 땅콩이 7개정도 바닥에 깔려있는 것이 또 매력이었는데 이젠 땅콩이 사라지고 왕창 커져서 한 입에 넣기 힘들게 되었습니다. 이 녀석들을 동시에 먹으면 단짠단짠을 느낄 수 있는데 이는 마치 맛의 교향곡을 타고 어깨춤을 추며 저 하늘 너무 뭉게구름을 밟고 잠시 신선이 된 느낌과 같습니다. 그러나 그것은 단지 일장춘몽이요, 이내 입이 텁텁해지며 혓바늘을 감수해야 합니다. 심하게 와작거리므로 옆 동료와 나눠먹어야 합니다. 동료애를 고취시키는 멋진 아이템입니다.5.참붕어빵/뻥이요/신짱의문이 하나 있습니다. 저 참붕어빵은 심심치 않게 보이더라구요. 근데 정작 먹는 사람은 별로 없습니다. 하지만 며칠 지나면 또 없어져 있어!....사무실엔 "참붕어빵 요정"이 사는 것이 분명합니다. 뻥이요는 팝콘을 대신하는 유용한 과자입니다. 양이 혜자스럽고,  가루가 묻어나지 않아 깔끔하게 하나씩 먹을 수 있죠. 하지만 하나씩 먹는 사람은 거의 없습니다. 대다수 손에 담아서 털어넣죠. 남녀노소 신입경력 대표인턴할 것 없이 뻥이요는 털어넣는 것이 진리입니다. 버터맛이 아주 고소해서 계속 들어갑니다. 신짱도 그러합니다. 신짱은 가끔 입천장을 어택해서 피와 함께 버무려진 맛을 느낄 수도 있는데, 종종 느껴지는 검은깨의 고소함이 우리를 마치 깻잎밭으로 인도하는 느낌입니다.6.키도/레돈도/크리스피얘 이름이 레돈도라고 합니다. 처음알았네.요즘에 외국과자 판매점이 많아서, 손쉽게 외국과자를 살 수 있는데 대표적인 것이 키도와, 레돈도, 그 크리스피 감자(미용실에서 서비스로 주는)칩입니다. 당연히 양이 혜자스럽고 한입에 조금씩 넣어먹을 수 있는 훌륭한 업무최적화를 보여줍니다. 더불어 뭔가 사다놓으면 트렌디한 회사문화를 보여줄 수 있어서(도대체 왜..?) 스타트업 중에는 외국과자가 즐비한 곳들이 꽤나 있었습니다.7.기타 이상한 과자들(노브랜드 초코칩, 펑리수, 젤리)가성비가 지리는 노브랜드나, 코스트코 치즈볼 등을 쟁여놓고 먹는 곳도 있었습니다. 그리고 휴가철이 끝난 9월 초 정도가 되면 뭔가 회사에 펑리수나 파인애플과자, 일본과자들이 쌓여있더라구요. 개인적인 취향에 따라 젤리데이나 하리보, 마시멜로우를 놓고 있는 곳도 있었습니다. 하지만, 대부분 이런 것들은 탕비실이라기보단 두번째 서랍정도에 많이 있더라구요.행사용 꽈자사무실에만 과자가 있는 것이 아닙니다. 더욱 놀라운 것은 바로 소규모 행사때 때 테이블에 올려진, 또는 미팅이나 강의장에 뒷편에 비치된 주전부리입니다. 뭔가 행사용 과자 세트가 있는 듯한 느낌이 있는데 생각나는 대로 열거해보겠습니다.그래..완전체다 이거 완전카스타드/쿠크다스 조합뭔가 반드시 있습니다. 고구마맛도 있고, 통밀맛도 있고, 초코맛도 있고, 그냥 오리지날도 있습니다. 반드시 있음. 소리없이 오물거리며 먹기 좋습니다. 하지만 소리가 나지 않는다고 그냥 먹으면 목이 막힙니다. 반드시 맥심 화이트골드 믹스커피나 동서 현미녹차가 있어야 합니다. 쿠크다스는 얼마나 찢다가 흘리고 깨먹으면 뜯는 법이 두 번이나 설명되어 있습니다. 생각보다 양이 창렬스러워서 많이 구비할 수는 없는 귀족과자입니다. 아이비/에이스조합무조건 동서맥심 화이트골드/모카골드 각입니다. 김연아와 이나영의 대결이죠. 찍어먹으면 그 진가가 두 배가 되는데 너무 오래담그고 있으면 에이스가 녹아서 커피속으로 빠져버립니다. 신개념 스프를 먹을 수 있을 수도 있으니 살짝만 찍도록 합시다. 주로 강의장이나 미팅 때 많이 쓰이는데 조용히 먹을 수 있고, 뭔가 포장이 4,5개 단위로 되어 있어서 일회용접시에 쌓아놓기 좋기 때문인 듯 합니다.마가렛트/빅파이/후렌치파이 조합말할 필요가 없는 행사를 위한, 행사에 의한, 행사의 과자들. 후렌치파이 딸기맛이 가장 잘 팔립니다. 그 다음이 후렌치파이 사과맛, 마가렛트, 빅파이순이더라구요. 빅파이는 목맥혀서 많이 안먹습니다. 이에 초코 끼기도 하고.오레오/롯데샌드/초코하임 조합하아...이것 또한 전설의 삼위일체죠. 가끔 크라운산도가 끼기도 하는데 주로 딸기맛이 꼽사리를 낍니다. 롯데샌드 평소에 돈 주고 사드셔보셨나요? 하지만 행사장에선 왠지 하나씩 손에 쥐어야 할 것 같은 느낌이 있습니다. 마찬가지로 깔끔하게 하나씩 입에 넣을 수 있고 생각보다 와작거리지 않습니다. 그러고보면 행사장 과자는 거의 와작소리가 나지 않는 조용하고 매너있는 과자들이 많습니다.오예스/초코파이군대도 아니고, 행사장에만 오면 오예스를 하나씩 먹게되더라구요. 그런데 이상하게 초코파이는 손을 잘 안대는 듯한 느낌입니다. 쫀득거리는 마시멜로우때문에 뭔가 베어먹기가 그러해서 그런지... 그러나 이 오초조합은 꽤나 올드한 느낌이 강해서, 요 근래 행사장에선 많이 자취를 감추고 있는 근대의 유산이라고 할 수 있습니다.촉촉한초코칩/칙촉/다이제 조합등장! 초코초코 콤보. 제일 먼저 사라지는 선호도1순위의 조합이죠. 하지만 다이제는 뭔가 거대한 초코와 통밀과자가 부담스러워인지 쉽게 집어먹지 않더라구요. 아마, 딱히 하나씩 뜯어먹기가 힘든 패키징이라서 그럴 듯 합니다. 하지만 요즘은 3개가 한 봉지로 구성된 빌어먹을 질소포장 덕분에 행사장 과자로 그 위상을 넓혀가고 계십니다.    야채크래커/제크/하비스트 조합잘 안먹음. 과자라는 것이 참으로 그렇습니다. 사람이 먹는 낙이라도 있어야 즐겁게 일할 수 있다..라는 생각때문에 잔뜩 구비해놓고 와작와작 먹긴 하는데. 막상 먹고싶어서 먹는다기 보단 있으니까 먹는 경우가 훨씬 많은 것 같습니다. 주로 이러한 과자는 하모니마트나 롯데마트 등에서 많이 구매하게 되더라구요. 한 번에 5만원 어치 구매해서 2주정도 오물오물 거리는 것이죠. 경제심리를 증명하기 위한 게임중엔 '최후 통첩 게임' 이란 것이 있습니다. 상호간의 제안과 거래를 통해 이익을 취할 수 있는 선택을 하는 흥미진진한 게임이죠. 재미있는 것은 이 최후 통첩 게임을 진행하는 환경. 그러니까 테이블위에 놓여져 있는 몇 가지의 소품만으로도 사람은 크게 다른 선택을 한다는 점입니다. 펜과 종이, 시계등이 올려진 사무실느낌의 테이블에선 매우 합리적이고 경제적인 선택을 주로 하죠. 손해보더라도 조금의 이익을 취하는 쪽으로 행동을 하는 경향이 높습니다. 하지만 액자,꽃병,양초 등이 올려진 일상생활 느낌의 테이블에서는 감정적인 선택을 훨씬 많이 합니다. 상대의 제안이 기분나쁘면 약간의 이익도 포기해버리고 자존심을 지키는 것이죠.이처럼 사람은 주변의 환경, 그것도 단 몇 개의 소품만으로도 심리적 프레임과 행동의 패턴이 달라지곤 합니다. 사무실에 터줏대감처럼 자리한 늘 사오던 과자들도 어쩌면 우리의 행동을 규정하는 그 몇 개의 소품 중 하나가 되어있는 것을 아닐까용? 다음 번엔 과자를 담은 장바구니를 한 번 빤히 쳐다보는 것도 재미있을 것 같아요. 기존에 사보지 않았던 녀석을 한 번 가져가보는 것도 흥미진진한 경험을 선사하지 않을까 싶습니다.(참붕어빵은 제외)
조회수 657

개입전략 - 판매보다 흥미 먼저

개입전략 - 고객이 당신의 서비스에 흥미를 느낄 수 있는 경험 만들기 우리는 왜 마지막 목표만 생각할까?오늘 아침, 트래픽잼을 뚫고 사무실에 출근한 당신에게 상사는 갑자기 미션을 내린다. “매출상승” 다짜고짜 매출상승이란다. 지난 기간 매출이 하락하여 기대 매출을 맞추지 못했다는 것. 그래서 팀 전체가 이 목표를 반드시 달성해야 한다는 것이다. 자, 이제 당신은 어떻게 할 것인가. 매출을 늘리기 위해 무엇을 먼저, 어떻게 해야 할 것인가. 앞이 막막하고 캄캄하다. 보통 우리가 이런 막무가내의 목표를 듣게 되면 무엇부터 해야 할지 알기 어렵다. 이럴 땐, 아주 간단한 방법이 있다. 최종적인 목표달성이 무엇인지 정의한 후, 고객이 이 목표를 달성하기 위해 어떤 과정들을 거치는 지 시뮬레이션 해보는 것이다. 쇼핑몰이라고 생각해보자. 매출을 달성한다는 것은 마케터 입장의 사고이고 고객의 입장에서는 ‘구매완료’라고 정의할 수 있다. 그럼, 고객이 구매완료를 하기 전에 반드시 거쳐야 하는 곳이 어떤 페이지일까? 바로, ‘결제페이지’다. 그럼, 마케터는 두 가지 방법으로 접근해 볼 수 있다. 첫째, 결제페이지에서 구매완료 페이지로의 이동되는 고객수를 늘린다. 둘째, 결제페이지로 도착하는 고객수를 늘린다. 두 개의 아이디어가 비슷한 듯, 비슷하지 않다. 하나는 트래픽을 늘리는 전략이고, 나머지 하나는 전환률을 늘리는 전략이다. 둘 중 어느 것이 제대로 작동한다고 하더라도 ‘매출상승’이라는 목표는 달성할 수 있다. 위 두가지에서 ‘매출상승’은 직접적으로 언급되지는 않았다. 다만, 직접적으로 연관되어 있는 행동을 유도하면서 최종적인 목표를 달성하게 하는 것이다. 이런 생각을 해보자. 당신은 커피를 맛있게 만들 수 있는 바리스타다. 그리고 그 커피를 판매할 예정이다. 그럼, 가장 쉽게 커피를 판매하는 방법이 무엇일까? 바로, 시음신청을 받는 것이다. 다짜고짜 사람들에게 커피가 맛있으니, 사 먹으라고 한다면 먹지 않을 것이다. 그런데, 한 번 시도해보라고 한다면, 부담감 없이 시도해볼 것이다. 그리고 커피가 정말 맛있다면, 그들은 이후 돈을 내고서라도 당신의 커피를 사먹을 것이다. 이 프로세스가 새로운가? 사실, 전혀 그렇지 않다. 전혀 새롭지 않다. 전혀 특별하지 않다. 다만, 당신이 조금 덜 조급하면, 이런 효율적인 세일즈 프로세스를 개발 할 수 있다는 것이다. 맥락적 사고의 필요성: 단게 별 전략의 유무 모든 결과에는 원인이 있다. 바로 앞뒤 맥락이 있다는 것이다. 하지만 가끔 어떤 브랜드나 서비스에는 그 기본적인 맥락이 없다. 무조건 좋고 효과적일 것이라고 이야기 한다. 그것에 대한 검증, 테스트, 소비자인 나에 대한 관심여부는 중요하지 않다. 무조건 당장 구매하라고 한다. 마침 프로모션 할인기획까지 있다고 한다. 내가 그것을 사야 할 유일한 명분은 가격 할인 뿐이다. 당신은 이 비맥락적 캠페인에 여러 번 노출 된 경험이 있을 것이다. 너무도 당연한 이야기지만 실재 마케팅 환경에서는 이런 맥락이 간과되는 경우가 많다. 왜 그런 것일까?마음이 급한 것이다. 팔아야 한다는 생각이 앞선다. 결국 일을 그르 칠 수 밖에 없다. 무슨 일이든 순서라는 것이 있는데, 그 순서를 그르치고 일을 진행 시킬 순 없다. 쇼핑몰을 생각해보자. 고객의 구매를 유도해 사용자가 ‘결제완료페이지’에 많이 도착할 수 있게 만들어 본다고 생각한다. 그럼, 그 전에 고객은 결제페이지에 많이 도착해야 한다. 그럼 그 전에는? 그렇다. 바로 장바구니 페이지에 많이 도착해야 한다. 마지막 전 단계의 목표들에 집중 할 때 얻을 수 있는 것많은 마케터가 직면하는 미션은 옛날이나 지금이나 매출 상승이다. 어떻게 매출을 늘릴 수 있을까? 생각만해도 잠이 오지 않는다. 오로지 한 목표, 매출상승만을 바라보고 전략을 수립한다면 이처럼 숨이 턱하고 막히게 될 것이다. 하지만 다행이다. 우리에겐 맥락적 사고가 있다. 고객이 매출에 기여를 하기 이전에 어떤 경험들을 하는 지 살펴보면 생각보다 일이 수월하게 해결 될 수 있다. 쇼핑몰에서 대부분의 고객은 상세페이지의 내용을 보고 구매 의사결정을 하게 된다. 그리고 해당 제품을 장바구니에 담게 되며, 이후 결제 절차를 밟게 된다. 만약, 장바구니에서 결제페이지까지 이동되는 전환률이 10%라고 가정하자. 그럼, 장바구니에 물건을 담는 유저의 수가 늘거나 장바구니에 담기는 물건의 수가 많으면 많을수록 매출이 늘어날 수 있을까?결론은 ‘그렇다’이다. 10%의 전환률은 바뀌진 않지만 그 전 단계의 모수가 많아지면 많아질수록 그 다음 단계의 결과는 많아지게 될 것이다. 너무 상식적인가? 실제 이 질문을 강의에서 해보면 의외로 이 상식적인 맥락을 이해하는데 약간의 시간이 필요하다. 자, 그럼 우리는 이런 간단한 맥락을 가지고 무엇을 해볼 수 있을까? 다시 쇼핑몰 이야기로 돌아가보자. 장바구니에 물건을 담게 유도하여 그 수를 늘린다면, 매출이 늘어난다. 그럼, 당신은 매출을 어떻게 늘릴까를 궁리하지말고, 고객이 장바구니 버튼을 어떻게 하면 더 많이 누르게 만들지를 고민하라. 장담하건대, 그게 훨씬 더 쉽다. 그리고 매출도 늘어날 것이다. 고민하지 말라. 항상 마지막에 집중하되, 실행 게획은 그 모든 과정을 쪼개고 바로 앞 순서에 집중해야 한다. 퍼포먼스 마케팅 에이전시, 오피노 바로가기 
조회수 2984

아마존의 56억 달러 성공에 감춰진 디자인의 비밀

아마존은 의심할 여지 없이 온라인 상거래에서 가장 영향력 있는 기업임에 틀림없다.미국 온라인 판매의 약 44%는 아마존을 통해서 이루어진다. 이는 대략 1/3의 미국인들이 아마존의 프라임 멤버십을 이용한다는 것을 의미한다.작년에만 56억 달러의 수입을 거둔 아마존은(비록 이중 연방정부에 낸 세금이 한 푼도 없어서 문제가 됐지만), 프라임 멤버십을 계속 이용할 것이라고 응답한 사용자가 전체 회원의 95%에 달한다.하지만 이런 것을 가능하게 한 아마존의 디자인에 대해 언급하는 사람은 거의 없다. 지금은 유명해진 아마존의 리더십 원칙들 살펴보면, “고객에 대한 몰입” 그리고 “발명과 단순화” 라는 오직 두 가지 원칙만이 제품과 서비스 개발에 대한 디자인적 방식과 관련이 있다.그런데 이런 두 가지 원칙에도 디자인에 관해 구체적으로 언급된 부분은 없다.미적인 관점에서 봤을 때, 아마존의 웹 스토어는 단순하지도 않고 예뻐 보이지도 않는다. 보통 그 두 가지를 좋은 디자인의 조건이라고 보는게 일반적인데 말이다.대신에, 아마존은 사용자 경험, 프로세스 및 기능을 단일화 하는데 중점을 두었다. 많은 디자이너들에게 있어, 비주얼적으로 난잡해보이는 아마존 디자인이 성공했다는 발상은, 다소 혼란스럽게 느껴지기도 한다. 그렇다면, 디자이너 입장에서, 미적으로 아름다워 보이지 않는 아마존의 디자인이 왜 사람들에게 먹히는지를 어떻게 해석해야 하는 것일까?아마존 디자인의 성공은 쇼핑 업계의(디지털이든 실제 물건이든, 럭셔리든 저가품이든) 가장 위대한 4가지 원칙을 지켰기 때문이다. 그들에게 있어서, 그 위대한 원칙은 첫째,1. 투명성프라이싱과 구매 과정을 분명하게 만들며, 누구나 쉽게 이해할 수 있어야 한다.얼핏 보면 아마존은 특별히 투명해 보이지는 않는다. 그간 아마존의 가변적 가격 모델을 생각해보면, 우버의 혐오스러울 정도의 급격한 가격 인상, 혹은 여행객들을 괴롭히는 비행기나 호텔의 급격한 가격 변동과 유사한 점이 있었다.그래서 아마존 역시 투명성 부족으로 비판을 받았으며, 벌금도 부과 당해 왔다. 비록 소비자들은 이러한 가변적 가격 모델에 신경 쓰지 않지만, 그들 나름대로 가장 싼 가격을 찾으러 조사를 하는 것에는 아주 익숙하다. 따라서 아마존의 가변적 가격 정책이 다른곳보다 특별하다고 할 수는 없다.그렇다면 왜 이용자들은 아마존의 가변적 가격 정책만 관대하게 받아들여 주는 것일까?가장 가능성 있는 이유로는, 아마존이 자신들의 프라임 서비스를 통해 온라인 쇼핑의 두 가지 장애물을 제거해줬기 때문이다. 그 중 하나는 배송에 있어 숨겨진 가격이고, 다른 하나는 온라인 쇼핑이 매장에 가서 사는 것보다 느리다는 인식이다. 프라임 서비스의 성공은 사용자가 쉽게 이해할 수 있도록 디자인을 잘 설계했기 때문인데, 1년 서비스 신청을 하면 2일 무료 배송을 받을 수 있고, 오스카 상을 받을 만한 훌륭한 영화들도 볼 수 있다. 이러한 프라임 서비스의 투명성(이해하기 쉬운)은 아마존으로 하여금 쇼핑에 있어 가장 주목할 만한 인터랙션 디자인을 만들 수 있게 하였다. 단순함과 우아함을 동시에 보여주는 아마존의 원클릭 구매 시스템(최근에 특허가 만료되는) 역시 이에 포함된다. 이 시스템은 아마존의 대쉬 버튼 디자인뿐만 아니라 아마존의 인공지능 비서인 Alexa가 만들어지는 초석을 마련하기도 했다.2. 실체성사람들이 두 가지, 혹은 여러가지 제품들 중 하나를 고를 때, 훌륭한 쇼핑 디자인은 그러한 제품 선택 과정을 실체적으로 보여주고 바로 결정을 내릴 수 있게 만든다. 따라서 사람들은 선택에 대한 정보를 잘 알게 된 상태에서 자신감 있게 결정을 할 수 있게 된다.아마존의 상품 표시 페이지는 엄청난 목표를 이룰 수 있게 기획되었다. 이용자들로 하여금 모든 제품의 특성을 쉽게 이해할 수 있게 한 것 역시 이에 포함된다. 보통 한 가지 물건만 파는(옷이나, 신발, 자동차 부품 등) 쇼핑몰 사이트에 가보면, 그 단일 물품의 특성에만 맞춰서 정보를 보여주곤 한다.이와는 대조적으로, 아마존은 상상할 수 있는 모든 제품을 팔 수 있도록 디자인 되었다. 이는 아마존은 다른 특정 품목이나 브랜드를 파는 사이트와 달리 상품 표시와 검색 결과 페이지가 우아하고 깔끔하게 보이지는 않는다는 것이다. 아마존은 이렇게 겉보기에 단점으로 보이는 것을 자신들만의 자산으로 변화시켰다. 아마존의 모든 상품 표시 페이지는 똑같은 모듈과 구조를 사용하고 있는데, 이는 일관성이 있기 때문에 이용자들로 하여금 어떤 상품을 검색하건 그 특성을 쉽게 이해하게 만든다.3. 신뢰성사람들은 자신들이 이용하고 있는 곳이 정직한 곳인지 알고 싶어한다.인터넷 쇼핑몰로써 아마존은 퍼스트-파티 판매(아마존에서 직접 판매하는 상품)와 써드-파티 판매(아마존의 전체 판매의 대략 절반을 구성하는)를 둘다 운영해야 하기 때문에, 일관성 있는 이용자 경험을 디자인한다는 자신들의 약속을 지켜야 하는 아마존은 큰 도전에 직면해 있다고 할 수 있다.한 가지 아마존의 쇼핑 운영에 대해 실망스러운 부분이 있다면, 그것은 여러 판매자들이 파는 물품을 검색했을 때이다. 예를 들어 어떤 판매자가 가장 믿을만한지, 배송비는 포함되어 있는지, 이용자들이 신뢰할 수 있다고 평가한 판매자는 누구인지와 같은 점들을 살펴보고, 자신 있게 결정하기까지는 많은 수고가 든다.이렇게 된 데에는 아주 흥미로운 이유가 있다. 아마존은 Etsy와 eBay와는 대조적으로 판매자들이 자신들만의 판매 페이지를 만드는 것을 꾸준히 막아왔다. 아마존에서 유저들은 쇼핑만 하기 때문에, 판매자들은 그저 아마존이 아직 하지 못하는 상품 조달과 배송만 하는 일꾼으로 보이기 마련이다. 이는 Uber와 Lyft에 등록된 운전 기사들이 회사가 자율주행차를 기다리는 동안 임시로 쓰는 과도기적 노동자들처럼 보이는 것과 유사하다.아마존이 직접 파는 상품과 서드-파티 판매자들이 판매하는 상품이 통합돼서 검색되는 것으로 인한 사용자들의 혼란과 불편은, 배송과 반품 절차라는, 사용자들이 훨씬 더 심각하게 받아들이는 문제에 일관적인 경험을 주기 위함이라고 아마존은 주장한다. 당신이 어떤 물건을 직접 아마존을 통해 사건, 혹은 아마존 마켓플레이스를 통해 사건 간에, 당신은 어쨌든 그 물건을 아마존에서 샀다고 느낄 것이다. 이는 아마존으로 하여금 아마존 프라임의 이틀 배송 시스템과 반품 프로세스를 서드-파티 판매자에게까지 적용 시킬 수 있게 만들었다. 이렇게 모든 배송과 반품 절차를 통합시키는 것의 목적은 어떤 물건이든 아마존에서 사는 유저들과 핵심적인 신뢰 관계를 구축하기 위함이다. 이와 반대로 만약 아마존이 서드-파티 판매자들 각각 이런 과정을 컨트롤 할 수 있게 허용했다면, 신뢰를 구축한다는 아마존의 목표는 훨씬 더 이루기 어려워 졌을 것이다.4. 유익함사람들이 자신들이 무엇을 원하지는 지, 무엇이 필요한 지 항상 아는 것은 아니다. 훌륭한 쇼핑 디자인은 사람들이 원하는 것을 예측해서 그것을 능동적으로 제공하는 것에 있다.아마존의 상품 상세 정보 페이지가 그 상품의 다양한 정보를 보여줄 수 있는 것처럼, 아마존의 검색 인터페이스(왼쪽 필터와 하단 카테고리 내비게이션)는 확장성이 뛰어나고 매끄럽게 조정되어 사용자들이 상황에 맞는 선택을 할 수 있게 해주기 때문에, 원하는 것을 바로 찾을 수 있다.하지만 아마존의 상품 디스플레이 페이지처럼, 왼쪽에 표시되는 검색 필터는 특정 상황에서는 카테고리에 완벽하게 맞춤으로 보이지 않는다. 예를 들어, 신발을 검색한다고 했을 때 아마존의 검색 툴과 자포스(아마존이 소유한 신발 전문 쇼핑몰)의 네비게이션을 비교해 보자. 자포스의 툴은 사용자 경험에 일관성을 부여해서 사용자들이 새로운 것을 배울 필요 없이 시스템을 통해 찾고자 하는 것을 빠르게 찾을 수 있게 하여 아마존이 가진 단점들을 해결하고 있다.디터 람스(독일의 유명 디자이너)가 말했듯이, 좋은 디자인은 제품을 쓸모 있게 만든다아마존의 비주얼적 디자인은 날씬해 보이지도, 간단해 보이지도, 아름답지도 않고 유저들의 감성적인 부분도 건드리지 않지만, 그 자체로 대단히 유용하다. 아마존의 기능과 그에 따른 미학은 효율적인 쇼핑 경험을 제공하는데 확실히 맞춰져있다. 사실, 아마존은 디지털 브루탈리즘의 일종으로 묘사될 수도 있다. 그것은 직접적이고 효율적이며, 가능한 사람들의 요구를 가장 덜 까다로운 방법으로 충족시켜 주려는 이상적인 목표를 가지고 있다.아마존의 성공은 디자인 업계에서 인정하고 싶지 않아 하는 한 가지 원칙을 분명하게 보여준다. 그것은 바로 ‘성공한 디자인이 꼭 아름다울 필요는 없다.’ 이다. 물론, 디자인이란 것이 그저 미적인 과제에 불과하다는 관념은, 연구 중심의 디자인적 사고가 실제로 널리 사용되며 오래 전에 틀렸음이 밝혀졌지만, 그래도 잘 디자인 됐다는 것이 꼭 아름다울 필요는 없다는 생각은 여전히 받아들이기 힘들 수도 있다. 디자인이라는 관점에서 아마존의 성공을 분석하기 위해선 그 인터페이스의 겉모습만큼이나 안에 숨겨진 시스템적 디자인 역시도 봐야 할 필요가 있다. 아마존의 디자인 철학은 사람들에게 많이 알려지지는 않았지만, 디자인으로 유명한 회사인 애플이나 이케아만큼이나 세계에 많은 영향을 끼쳤다. 아마존을 보면서 디자인이 별로 중요하지 않다고 생각하는 것은 분명한 실수다.아마존이 보다 나은 유저 경험을 만들기 위해 계속 애쓰고 있는 이러한 디자인 원칙들은 경쟁자들 입장에서 보면 기회가 될 수 있다는 사실에 주목할 필요가 있다. 각각의 원칙들을 뜯어보면 사람들이 쇼핑에 있어서 무엇을 중요시하는 지 알 수 있기 때문이다. 아마존은 회사가 앞으로 더 커짐에도 이런 원칙들을 고수할 수 있을까? 다른 경쟁사들이 사람들을 만족시킬 수 있는 더 나은 시스템을 만들 수 있을 때가 무르익은 것 같기도 하다. 개인적으론 월마트, 그들을 주목하고 있다.*글쓴이인 Jason Brush는 Creative and UX at Possible의 전무이며, LA에 있는 회사 지점에서 창의적인 사용자 경험 디자인을 감독하고 있다. POSSIBLE에서의 수상 경력 외에도, 그는 UCLA 파사데나에 있는 Art Center College of Desing에서 강의도 진행하고 있다.원문 : fastcodesign#더팀스 #THETEAMS #디자인 #디자이너 #인사이트 #아마존 #UX
조회수 1869

여러분은 時代의 最-尖端을 살아가고 있읍니다

어릴 적 TV에서, '공중전화 요금이 20원에서 30원으로 오른다'는 뉴스를 봤던 기억이 있다.그 때는 '전화 카드'라는 것도 있었고, 두 개로 갈라먹는 아이스크림이 하나에 150원이었으며, 국민학교 1학년생은 오전반과 오후반으로 나뉘어 수업을 받았다. 하루 아침에 학교 명패가 '사당국민학교'에서 '사당초등학교'로 바뀌는 걸 본 뒤 어린 마음에 나를 둘러싸고 있는 세상의 모든 것들이 바뀔 것 같아 불안해 했던 기억도 있다.왜 이런 아재감성을 꺼내서 글 앞머리부터 사람을 당황하게 만드는가 하면, 그만큼 많은 것들이 순식간에, 그러나 시나브로 바뀌고 있다는 것을 말하고 싶기 때문이다.겉모습만 보면 20대래도 믿겠지만 사실 우리 팀의 최연장자인 분께서는 63빌딩이 완공된 해에 태어나셨다. 그리고 우리 팀원 중 한 분은 올해 첫 사회인이 되셨다. 당연히, 이 두 사람이 생각하는 '나어릴적'이라는 이미지는 상당히 다르다. 간혹 저녁을 먹으며 이야기를 나눌 때 아무 생각 없이 어릴 때 보던 만화나 드라마 같은 얘기를 하면...주로 그런 얘기를 꺼내는 생각없는 사람이 나라는 것만 밝혀두고.그래서 반성의 뜻을 담아, 오늘의 주제는 '왜 여러분을 둘러싼 세상은 여러분을 따라가지 못하고 있는가'가 되겠다. 정확히는 '누구의 잘못인가'일테고.1. '당연함'의 기준이 달라지고 있다TMI스럽기 그지 없지만, 이제 4살 된 내 조카는 참 예쁘고 귀엽다. 그런 조카가 우리 집에 오면 늘 하는 것 중 하나가, 삼촌 방에 쪼르르 들어와서 노트북으로 넷플릭스 아동 애니메이션을 함께 보는 일이다.그리고 자기가 원하는 화면이 안 나오거나 다른 게 보고 싶어지면, 아주 당연하다는 듯이 사탕 묻은 손으로 노트북 화면을 눌러댄다. 그리고 나에게는 당연하게도, 화면은 바뀔 리가 없다. 사물과 소통하는 방식의 기본 틀이 아예 다른 것이다. 아니면 터치스크린을 지원하지 않는 노트북을 산 내가 잘못한 거거나.이런 내가 조카를 위해 어떤 UI를 만들어준다고 하면, 당연히 우리 조카는 불편함을 느낄 것이다. 나는 화면의 터치를 베이스로 하는 UI를 구상할 수 없거나, 완전히 상상해 낼 수 없으니까.여러분이 사는 세상은 10년 전의 사람들, 20년 전의 사람들이 살던 세상과는 비교할 수 없을 정도로 다르다. 기술의 발전이 점점 더 빨라지고 있어서, 1970년과 1980년의 차이보다 2017년과 2018년의 차이가 더 크다. 경인선 기차가 새마을호로 발전하는 데에는 70년이 걸렸지만, KTX가 하이퍼루프가 되는 건 분명 그것보다 빠를 것이다.*정말 TMI지만, 내 조카는 진짜로 예쁘고 귀엽다. 중요해서 두 번 말하고 싶었다.2. 공중전화를 쓰던 제가 5G망을 설계하고 있네요이렇게 나를 중심으로 돌아가는 세상은 숨가쁘게 바뀌고 있는데, 기업, 플랫폼, 시스템은 그 속도를 따라오지 못한다. 공무원을 가장 좋은 직업으로 쳐주는 건 조선시대나 지금이나 다를 바가 없고, 잠실이 뽕밭이고 압구정이 과수원이었을 때부터 지금까지 모두가 돈을 쉽게 벌려면 부동산을 사라고 한다. 그나마 노동에 대해서는 다들 바꿔야 한다고 말하지만. 정시에 출근해서 정시에 퇴근하는 걸 '칼퇴'라 부르며 마치 대단한 이득이라도 보는 양 포장하는 건 산업화 시대의 시선 그대로가 아닌가.이런 환경 속에서는 내게 업무를 알려주고 조직생활의 금도를 가르쳐줘야 할 직장 상사가 '꼰대'가 되어 버리고, 사우 여러분의 건강을 위해 주말에 등산을 가자고 부르짖는 상무님은 '웬수'가 될 수 밖에 없다. 시스템을 만들고 적용하는 사람들의 인식이 현실을 전혀 따라잡지 못하는데, 현실을 사는 사람들이 시스템에 만족한다는 건 불가능에 가깝다. 토요일에도 출근해서 일하던 시대라면 호연지기 함양을 위해 산에 가는게 재밌는 야외활동이 되겠지만, 주말 내내 밀린 드라마 챙겨보기도 바쁜 세상에 등산을 가자고 하면 취미가 등산인 사람 말고는 대체 누가 좋아할까.결국 나와 나의 윗세대가 생각하는 여가의 개념, 사적인 시간과 조직생활의 경계에 대한 인식의 차이가 이런 어긋남을 만든다. 채용도 마찬가지로, 부장님께는 그저 돈을 얻기 위한 수단에 불과한 일과 직장이 신입사원에게는 나의 만족감을 위한 도구이자 목적이 되기도 하고, 때로는 여가생활을 더 잘 보내기 위한 과정에 불과하기도 하다.하지만 아이러니하게도, 이런 변화를 가장 빠르게 캐치하고 있는 조직이 기업이기도 하다. 정확히는 워라밸, 복지, 기업문화를 위한 제도나 조직을 정비하고, 외부에 적극적으로 알리고 있는 기업에 한한 이야기이지만, '이렇게 하면 더 좋은 인재가 온다'라는 것을 인지하고 그 성향에 맞추어 변화를 추구하고 있는 기업들도 분명히 있다.이 부분에서, '왜 나는 기업의 니즈에 나를 맞추지 못할까', '왜 나는 좀 더 세상과 타협하며 살아가지 못할까'라고 생각하는 사람들이 의외로 굉장히 많다. 그러나 하나 확실한 건, 지금을 살아가는 사람이 이전 세대의 사고방식에 맞추지 못한다고 자책하거나 좌절할 필요는 전혀 없다는 점이다. 바꾸려면 새마을호를 KTX로 바꿔야지 왜 하이퍼루프를 무궁화호로 만드나.소프트뱅크의 손정의 회장은, 트위터의 한 유저가 '이마 라인이 점점 뒤로 후퇴하는 것 같네요'라고 하자 이렇게 말했다. '머리가 후퇴하는 게 아니라 내가 전진하고 있는 겁니다.' 손정의 회장이 대머리인 게 그의 잘못은 아니듯이, 시대의 변화에 맞추어 착실히 전진하고 있는 여러분에 맞추어 시스템이 더 빨리 따라와주어야 한다. 여러분은 지금 시대에 걸맞는 당연한 삶을 살고 있기 때문이다.*맹렬히 빠른 움직임에는 그에 맞춘 보조가 필연적이다.3.For sale: baby shoes, never worn그렇다면 채용 시스템은 여러분에 맞추어 어떻게 바뀌어야 할까.더팀스에 합류를 결심하기 전, 친구들을 만나 개인적인 고민과 망설임을 진솔하게 털어놓고 다음날이면 잊어버리는 알콜의 시간을 여러 차례 가진 적이 있다. 그 때 가장 많이 받은 질문은 '번듯한 직장에서 돈 잘 벌고 있는데 왜 굳이 이직을 하려고 하느냐?'였고, 나 스스로 그 이유를 논리적으로 설명하기 위해 머릿속 어딘가에 있는 생각의자에 앉아 많은 시간을 보냈다. 그리고 결론은 늘 한 가지였다.'지금의 채용 시장은 우리 아버지 세대의 시선으로 만들어져 있다. 그래서 더팀스는 가능성이 있다.'교차로, 벼룩시장과 같은 매체가 아직도 간행되고 있는지는 잘 모르겠지만, 그래서 어쩌면 이 단어를 사용하는 것 자체가 아재의 반증이 될 수도 있겠지만, 한 번이라도 이런 정보지를 봤던 사람이라면 그 구성이 기존의 채용 플랫폼들과 맥락이 비슷하다는 말에 동의할 것이다. 구인구직을 위한 전달의 수단이 종이였던 시절, 지면의 넓이는 곧 돈이었다. 다른 공고나 광고보다 눈에 잘 띄려면 더 넓은 공간을 사용해야 했고, 이는 곧 그 지면을 사용하는 이가 얼만큼 많은 돈을 갖고 있는지 간접적으로 가늠할 수 있는 척도이기도 했다. 모두가 구인공고에 돈을 무한정 쓸 수는 없으니, 자연스레 극히 일부를 제외한 대다수의 공고는 바둑판 형태로, 최대한 적은 공간에 최대한 많은 정보를 전달할 수 있도록 시장이 형성되었다.*저 네모진 텍스트가 거의 모두 구인공고이다.하지만 이론적으로, 지금 여러분이 바라보는 화면에는 지면의 한계가 없다.가끔 인터넷 기사를 보다 보면 이 특징을 극한까지 활용해서 사람을 극한까지 짜증나게 하는 사례를 접하게 된다. 잘 읽고 있는데 슬슬슬 글자가 옆으로 밀리며 배너가 등장하거나, 스크롤을 좀 내렸더니 난데없이 팝업이 튀어나오는데 닫기 버튼은 또 어찌나 작게 만들었는지 누르다가 클릭되기 일쑤고, 작은 팝업이 떠서 닫으려니 마우스 커서를 올리자마자 스르륵 커지는 광고창을 보면, 정보화 시대가 가져온 공간의 확장성과 한계의 극복에 대해 여러 생각이 든다. 깊은 짜증과 함께.조금 극단적인 사례를 들었지만, 하고 싶은 말은 간단하다. 손가락 하나면 지구 반대편의 유저가 찍어 올린 사진에 좋아요를 누를 수 있고, 내가 보고싶은 동영상 채널을 구독해서 알림까지 받아볼 수 있는 시대에, 왜 구인구직은 신문지와 정보지 시절의 시각구조와 텍스트 위주의 개념에서 벗어나지 못하는가?익숙함과 효율성이라는 면에서 기존 채용 플랫폼들이 낡았다고 감히 폄하할 순 없다. 하지만 굳이 사진과 영상이 넘쳐나는 시대에 구인구직만이 글자만으로 표현되는 이유 역시 쉽게 이해할 순 없는 노릇이다. 이제 와서 여러분에게 '이제부터 유튜브랑 인스타그램을 쓰지 않고 종이로 된 책과 신문을 읽으셔야만 합니다'라고 하면 어딘가가 많이 아프고 불편한 사람으로 여겨질 것이다.여러분이 너그러운 마음으로 국민학교 입학 초등학교 졸업자까지 요즘 세대라고 쳐 준다면, 적어도 '우리' 요즘 세대들은, 할아버지 세대가 옆 동네 밭매기를 도와주고 새경을 받는 방식, 신문지상에 직원 급구라고 써있는 공고를 보고 공중전화에 20원을 넣어 전화를 거는 방식에서 발전한 플랫폼을 원할 것이고, 또 그것이 당연해지고, 다시 진부해지는 시대가 차례차례, 그리고 반드시 올 것이라고 생각한다.나의 가장 오래된 기억은  30년 전, 3살 때이다. 그리고 그 때부터 지금까지, 단 한 번도 '내일은 오늘과 똑같을 거에요'라는 말을 들은 적이 없다. 21세기가 시작되면 우리 모두 쫄쫄이를 입고 날아다니는 차를 타고 다닐 줄 알았으며, 달 정도에는 기지를 세우리라 생각했다. 지금 생각해도 현실성이 없는 건 마찬가지이지만, 그 때는 '생각나는 대로 막 지른' 느낌이었다면, 지금은 달을 넘어서, 화성 쯤에 유인 탐사를 시도해 볼 수준까지 도달했다.칼 세이건의 '코스모스'라는 책을 어릴 때부터 참 좋아했는데, 그 책이 처음 출간될 때에는 DNA의 존재는 알았지만 RNA의 존재가 밝혀지지 않아 '이런 것이 있을 것이다' 정도로 추론했었다고 한다. 물론 지금은 고등학교 수준의 과학지식만 있어도 RNA의 존재를 알 수 있다. 이렇게 여러 번 반복해서 옛날엔 이랬다, 저랬다 하는 말을 계속 하는 이유는, 세상은 생각보다 빨리 바뀌고 있다는 것을 어떻게든 체감할 수 있었으면 하기 때문이다.시대를 앞서가는 서비스는 사람들을 만족시킬 수 없다. 그럼 시대에 뒤떨어진 서비스는 어떤가 하면, 불만족을 넘어서는 더욱 나쁜 것이라고 생각한다. 지나치게 앞서있는 서비스는 이해를 받지 못하고 외면되는 수준에서 끝나지만, 뒤처진 서비스는 그 수준에 사람들을 머무르게 하여 발전을 좀먹고 저해하기 때문이다.여러분의 수준에 맞출 수 있는, 가능하다면 반 발짝 정도 앞으로 나아가서 이해하기에도 어렵지 않은 서비스를 제공할 수 있다면, 아주 행복한 일이 될 것 같다.#TMI #나때는말이야 #라떼전문가 #아재요 #국민학생 #5공시절 #지하철에 #5호선이 #생긴다고?
조회수 600

중소기업을 위한 비대면 서비스 바우처 사용처 Best 4

안녕하세요 협업툴 플로우입니다.요즘 일 잘하는 중소기업에서는 빠른 성과 달성과 업무 효율을 위해 여러 서비스를 이용하는데요. 오늘은 중소기업에서 사용하면 좋은 서비스를 추천해 드릴게요. 비대면 서비스 바우처 사용처를 아직도 고민하고 계신다면, 이 글을 주목해주세요!1. 플로우협업툴 플로우 바로가기플로우는 PC와 모바일의 동기화를 통해 프로젝트 중심으로 협업 및 커뮤니케이션을 할 수 있는 올인원 플랫폼이에요. 내부 직원을 물론 협력사 파트너와도 프로젝트별로 쉽게 초대해서 협업이 가능합니다. 메신저는 물론 프로젝트 일정관리, 작업관리, 파일공유 등의 기능을 사용할 수 있고, 클라우드 방식의 월 임대형 서비스와 중견/대기업을 위한 사내 서버 설치형 서비스를 모두 제공하고 있어요. 최근에는 비대면 서비스 바우처 우수사례로 뽑혀 바우처로 플로우를 많이 이용하고 계세요.▲ 클릭 시 비대면 바우처 우수 사례집으로 연결됩니다.2. 채널톡웹채팅, 카카오톡, 네이버 톡톡 등 모든 상담 관련 서비스를 한 곳에서 관리할 수 있는 올인원 서비스에요. 전화가 아닌 채팅 기능을 통해 물리적인 공간과 시간의 제약을 받지 않고, 제품 및 서비스에 대한 상담이 가능해요. 실시간 마케팅을 실시할 수도 있어요.3. 경리나라중소기업의 번거로운 경리업무를 금융과 연동해 불필요한 업무를 획기적으로 줄여주는 서비스에요. 수기 혹은 엑셀로 증빙을 하거나 관리하던 모든 경리 업무들을 한 곳에서 자동화로 처리할 수 있는 서비스입니다. 세금계산서, 영수증, 은행/카드 거래내역 등의 모든 증빙 및 영수증을 클릭 한번으로 자동 수집 후 바로 세무사에게 전달할 수도 있고, 월/분기/년간 단위별 관리가 가능해요.4. 모두싸인아직 종이 계약서를 우편으로, 퀵으로 주고 받으시면서 계약서를 작성하시나요? 모두싸인은 번거로운 종이 계약을 대신할 수 있는 온라인 계약 서비스입니다. 비대면 시대에 계약도 이제는 온라인으로 진행할 수 있어요. 종이계약과 법적효력이 동일하다고 하니 안심하고 사용해도 될 것 같습니다. 최근에는 과학기술정보통신부에서 디지털 뉴딜 우수사례로 선정되었어요.중소기업이 알아야 할 비대면 서비스 바우처 주의사항1. 한 기업당 최대 200만원 까지비대면 서비스 바우처의 수요기업으로 선정된 기업들은 사용처를 선택할 수가 있는데요. 한 기업당 최대 200만 원까지만 결제가 가능해요. 즉 최소 2개 이상 서로 다른 공급기업의 서비스를 선택해야하죠. 최대 400만원까지 가능하니 2개 이상의 기업을 선택할 수 있어요! (서비스 이용금액의 90% 지원, 10%는 자기부담금) 예를 들어 플로우에서 200만원을 결제하고, 경리나라에서 100만원, 채널톡 100만원 결제를 하실 수 있어요.2. 선정된 날로부터 60일 이내 결제K비대면 바우처 플랫폼에서 ≪기업정보관리≫ 메뉴로 들어가면 심사결과를 확인할 수 있는데요. 승인이 되었다면 바우처 신청 탭에서 바우처를 신청하실 수 있습니다. 주의 하실 점은 선정된 날로부터 60일 이내 1회 이상 결제가 되어야 하고, 90일 이내에 전액을 사용해야 수요기업 선정이 취소되지 않아요!비대면 서비스 바우처 바로가기
조회수 1166

안드로이드 클라이언트 Reflection 극복기

비트윈 팀은 비트윈 안드로이드 클라이언트(이하 안드로이드 클라이언트)를 가볍고 반응성 좋은 애플리케이션으로 만들기 위해 노력하고 있습니다. 이 글에서는 간결하고 유지보수하기 쉬운 코드를 작성하기 위해 Reflection을 사용했었고 그로 인해 성능 이슈가 발생했던 것을 소개합니다. 또한 그 과정에서 발생한 Reflection 성능저하를 해결하기 위해 시도했던 여러 방법을 공유하도록 하겠습니다.다양한 형태의 데이터¶Java를 이용해 서비스를 개발하는 경우 POJO로 서비스에 필요한 다양한 모델 클래스들을 만들어 사용하곤 합니다. 안드로이드 클라이언트 역시 모델을 클래스 정의해 사용하고 있습니다. 하지만 서비스 내에서 데이터는 정의된 클래스 이외에도 다양한 형태로 존재합니다. 안드로이드 클라이언트에서 하나의 데이터는 아래와 같은 형태로 존재합니다.JSON: 비트윈 서비스에서 HTTP API는 JSON 형태로 요청과 응답을 주고 받고 있습니다.Thrift: TCP를 이용한 채팅 API는 Thrift를 이용하여 프로토콜을 정의해 서버와 통신을 합니다.ContentValues: 안드로이드에서는 Database 에 데이터를 저장할 때, 해당 정보는 ContentValues 형태로 변환돼야 합니다.Cursor: Database에 저장된 정보는 Cursor 형태로 접근가능 합니다.POJO: 변수와 Getter/Setter로 구성된 클래스 입니다. 비지니스 로직에서 사용됩니다.코드 전반에서 다양한 형태의 데이터가 주는 혼란을 줄이기 위해 항상 POJO로 변환한 뒤 코드를 작성하기로 했습니다.다양한 데이터를 어떻게 상호 변환할 것 인가?¶JSON 같은 경우는 Parsing 후 Object로 변환해 주는 라이브러리(Gson, Jackson JSON)가 존재하지만 다른 형태(Thrift, Cursor..)들은 만족스러운 라이브러리가 존재하지 않았습니다. 그렇다고 모든 형태에 대해 변환하는 코드를 직접 작성하면 필요한 경우 아래와 같은 코드를 매번 작성해줘야 합니다. 이와 같이 작성하는 경우 Cursor에서 원하는 데이터를 일일이 가져와야 합니다.@Overridepublic void bindView(View view, Context context, Cursor cursor) { final ViewHolder holder = getViewHolder(view); final String author = cursor.getString("author"); final String content = cursor.getString("content"); final Long timeMills = cursor.getLong("time"); final ReadStatus readStatus = ReadStatus.fromValue(cursor.getString("readStatus")); final CAttachment attachment = JSONUtils.parseAttachment(cursor.getLong("createdTime")); holder.authorTextView.setText(author); holder.contentTextView.setText(content); holder.readStatusView.setReadStatus(readStatus); ...}하지만 각 형태의 필드명(Key)이 서로 같도록 맞춰주면 각각의 Getter와 Setter를 호출해 형태를 변환해주는 Utility Class를 제작할 수 있습니다.@Overridepublic void bindView(View view, Context context, Cursor cursor) { final ViewHolder holder = getViewHolder(view); Message message = ReflectionUtils.fromCursor(cursor, Message.class); holder.authorTextView.setText(message.getAuthor()); holder.contentTextView.setText(message.getContent()); holder.readStatusView.setReadStatus(message.getReadStatus()); ...}이런 식으로 코드를 작성하면 이해하기 쉽고, 모델이 변경되는 경우에도 유지보수가 비교적 편하다는 장점이 있습니다. 따라서 필요한 데이터를 POJO로 작성하고 다양한 형태의 데이터를 POJO로 변환하기로 했습니다. 서버로부터 받은 JSON 혹은 Thrift객체는 자동으로 POJO로 변환되고 POJO는 다시 ContentValues 형태로 DB에 저장됩니다. DB에 있는 데이터를 화면에 보여줄때는 Cursor로부터 데이터를 가져와서 POJO로 변환 후 적절한 가공을 하여 View에 보여주게 됩니다.POJO 형태로 여러 데이터 변환필요Reflection 사용과 성능저하¶처음에는 Reflection을 이용해 여러 데이터를 POJO로 만들거나 POJO를 다른 형태로 변환하도록 구현했습니다. 대상 Class의 newInstance/getMethod/invoke 함수를 이용해 객체 인스턴스를 생성하고 Getter/Setter를 호출하여 값을 세팅하거나 가져오도록 했습니다. 앞서 설명한 ReflectionUtils.fromCursor(cursor, Message.class)를 예를 들면 아래와 같습니다.public T fromCursor(Cursor cursor, Class clazz) { T instance = (T) clazz.newInstance(); for (int i=0; i final String columnName = cursor.getColumnName(i); final Class<?> type = clazz.getField(columnName).getType(); final Object value = getValueFromCursor(cursor, type); final Class<?>[] parameterType = { type }; final Object[] parameter = { value }; Method m = clazz.getMethod(toSetterName(columnName), parameterType); m.invoke(instance, value); } return instance;}Reflection을 이용하면 동적으로 Class의 정보(필드, 메서드)를 조회하고 호출할 수 있기 때문에 코드를 손쉽게 작성할 수 있습니다. 하지만 Reflection은 튜토리얼 문서에서 설명된 것처럼 성능저하 문제가 있습니다. 한두 번의 Relfection 호출로 인한 성능저하는 무시할 수 있다고 해도, 필드가 많거나 필드로 Collection을 가진 클래스의 경우에는 수십 번이 넘는 Reflection이 호출될 수 있습니다. 실제로 이 때문에 안드로이드 클라이언트에서 종종 반응성이 떨어지는 경우가 발생했습니다. 특히 CursorAdapter에서 Cursor를 POJO로 변환하는 코드 때문에 ListView에서의 스크롤이 버벅이기도 했습니다.Bytecode 생성¶Reflection 성능저하를 해결하려고 처음으로 선택한 방식은 Bytecode 생성입니다. Google Guice 등의 다양한 자바 프로젝트에서도 Bytecode를 생성하는 방식으로 성능 문제를 해결합니다. 다만 안드로이드의 Dalvik VM의 경우 일반적인 JVM의 Bytecode와는 스펙이 다릅니다. 이 때문에 기존의 자바 프로젝트에서 Bytecode 생성에 사용되는 CGLib 같은 라이브러리 대신 Dexmaker를 이용하여야 했습니다.CGLib¶CGLib는 Bytecode를 직접 생성하는 대신 FastClass, FastMethod 등 펀리한 클래스를 이용할 수 있습니다. FastClass나 FastMethod를 이용하면 내부적으로 알맞게 Bytecode를 만들거나 이미 생성된 Bytecode를 이용해 비교적 빠른 속도로 객체를 만들거나 함수를 호출 할 수 있습니다.public T create() { return (T) fastClazz.newInstance();} public Object get(Object target) { result = fastMethod.invoke(target, (Object[]) null);} public void set(Object target, Object value) { Object[] params = { value }; fastMethod.invoke(target, params);}Dexmaker¶하지만 Dexmaker는 Bytecode 생성 자체에 초점이 맞춰진 라이브러리라서 FastClass나 FastMethod 같은 편리한 클래스가 존재하지 않습니다. 결국, 다음과 같이 Bytecode 생성하는 코드를 직접 한땀 한땀 작성해야 합니다.public DexMethod generateClasses(Class<?> clazz, String clazzName){ dexMaker.declare(declaringType, ..., Modifier.PUBLIC, TypeId.OBJECT, ...); TypeId<?> targetClassTypeId = TypeId.get(clazz); MethodId invokeId = declaringType.getMethod(TypeId.OBJECT, "invoke", TypeId.OBJECT, TypeId.OBJECT); Code code = dexMaker.declare(invokeId, Modifier.PUBLIC); if (isGetter == true) { Local<Object> insertedInstance = code.getParameter(0, TypeId.OBJECT); Local instance = code.newLocal(targetClassTypeId); Local returnValue = code.newLocal(TypeId.get(method.getReturnType())); Local value = code.newLocal(TypeId.OBJECT); code.cast(instance, insertedInstance); MethodId executeId = ... code.invokeVirtual(executeId, returnValue, instance); code.cast(value, returnValue); code.returnValue(value); } else { ... } // constructor Code constructor = dexMaker.declare(declaringType.getConstructor(), Modifier.PUBLIC); Local<?> thisRef = constructor.getThis(declaringType); constructor.invokeDirect(TypeId.OBJECT.getConstructor(), null, thisRef); constructor.returnVoid();}Dexmaker를 이용한 방식을 구현하여 동작까지 확인했으나, 다음과 같은 이유로 실제 적용은 하지 못했습니다.Bytecode를 메모리에 저장하는 경우, 프로세스가 종료된 이후 실행 시 Bytecode를 다시 생성해 애플리케이션의 처음 실행성능이 떨어진다.Bytecode를 스토리지에 저장하는 경우, 원본 클래스가 변경됐는지를 매번 검사하거나 업데이트마다 해당 스토리지를 지워야 한다.더 좋은 방법이 생각났다.Annotation Processor¶최종적으로 저희가 선택한 방식은 컴파일 시점에 형태변환 코드를 자동으로 생성하는 것입니다. Reflection으로 접근하지 않아 속도도 빠르고, Java코드가 미리 작성돼 관리하기도 편하기 때문입니다. POJO 클래스에 알맞은 Annotation을 달아두고, APT를 이용해 Annotation이 달린 모델 클래스에 대해 형태변환 코드를 자동으로 생성했습니다.형태 변환이 필요한 클래스에 Annotation(@GenerateAccessor)을 표시합니다.@GenerateAccessorpublic class Message { private Integer id; private String content; public Integer getId() { return id; } ...}javac에서 APT 사용 옵션과 Processor를 지정합니다. 그러면 Annotation이 표시된 클래스에 대해 Processor의 작업이 수행됩니다. Processor에서 코드를 생성할 때에는 StringBuilder 등으로 실제 코드를 일일이 작성하는 것이 아니라 Velocity라는 template 라이브러리를 이용합니다. Processor는 아래와 같은 소스코드를 생성합니다.public class Message$$Accessor implements Accessor { public kr.co.vcnc.binding.performance.Message create() { return new kr.co.vcnc.binding.performance.Message(); } public Object get(Object target, String fieldName) throws IllegalArgumentException { kr.co.vcnc.binding.performance.Message source = (kr.co.vcnc.binding.performance.Message) target; switch(fieldName.hashCode()) { case 3355: { return source.getId(); } case -1724546052: { return source.getContent(); } ... default: throw new IllegalArgumentException(...); } } public void set(Object target, String fieldName, Object value) throws IllegalArgumentException { kr.co.vcnc.binding.performance.Message source = (kr.co.vcnc.binding.performance.Message) target; switch(fieldName.hashCode()) { case 3355: { source.setId( (java.lang.Integer) value); return; } case -1724546052: { source.setContent( (java.lang.String) value); return; } ... default: throw new IllegalArgumentException(...); } }}여기서 저희가 정의한 Accessor는 객체를 만들거나 특정 필드의 값을 가져오거나 세팅하는 인터페이스로, 객체의 형태를 변환할 때 이용됩니다. get,set 메서드는 필드 이름의 hashCode 값을 이용해 해당하는 getter,setter를 호출합니다. hashCode를 이용해 switch-case문을 사용한 이유는 Map을 이용하는 것보다 성능상 이득이 있기 때문입니다. 단순 메모리 접근이 Java에서 제공하는 HashMap과 같은 자료구조 사용보다 훨씬 빠릅니다. APT를 이용해 변환코드를 자동으로 생성하면 여러 장점이 있습니다.Reflection을 사용하지 않고 Method를 직접 수행해서 빠르다.Bytecode 생성과 달리 애플리케이션 처음 실행될 때 코드 생성이 필요 없고 만들어진 코드가 APK에 포함된다.Compile 시점에 코드가 생성돼서 Model 변화가 바로 반영된다.APT를 이용한 Code생성으로 Reflection 속도저하를 해결할 수 있습니다. 이 방식은 애플리케이션 반응성이 중요하고 상대적으로 Reflection 속도저하가 큰 안드로이드 라이브러리에서 최근 많이 사용하고 있습니다. (AndroidAnnotations, ButterKnife, Dagger)성능 비교¶다음은 Reflection, Dexmaker, Code Generating(APT)를 이용해 JSONObject를 Object로 변환하는 작업을 50번 수행한 결과입니다.성능 비교 결과이처럼 최신 OS 버전일수록 Reflection의 성능저하가 다른 방법에 비해 상대적으로 더 큽니다. 반대로 Dexmaker의 생성 속도는 빨라져 APT 방식과의 성능격차는 점점 작아집니다. 하지만 역시 APT를 통한 Code 생성이 모든 환경에서 가장 좋은 성능을 보입니다.마치며¶서비스 모델을 반복적으로 정의하지 않으면서 변환하는 방법을 알아봤습니다. 그 과정에서 Reflection 의 속도저하, Dexmaker 의 단점도 설명해 드렸고 결국 APT가 좋은 해결책이라고 판단했습니다. 저희는 이 글에서 설명해 드린 방식을 추상화해 Binding이라는 라이브러리를 만들어 사용하고 있습니다. Binding은 POJO를 다양한 JSON, Cursor, ContentValues등 다양한 형태로 변환해주는 라이브러리입니다. 뛰어난 확장성으로 다양한 형태의 데이터로 변경하는 플러그인을 만들어서 사용할 수 있습니다.Message message = Bindings.for(Message.class).bind().from(AndroidSources.cursor(cursor));Message message = Bindings.for(Message.class).bind().from(JSONSources.jsonString(jsonString));String jsonString = Bindings.for(Message.class).bind(message).to(JSONTargets.jsonString());위와 같이 Java상에 존재할 수 있는 다양한 타입의 객체에 대해 일종의 데이터 Binding 기능을 수행합니다. Binding 라이브러리도 기회가 되면 소개해드리겠습니다. 윗글에서 궁금하신 점이 있으시거나 잘못된 부분이 있으면 답글을 달아주시기 바랍니다. 감사합니다.저희는 언제나 타다 및 비트윈 서비스를 함께 만들며 기술적인 문제를 함께 풀어나갈 능력있는 개발자를 모시고 있습니다. 언제든 부담없이 [email protected]로 이메일을 주시기 바랍니다!
조회수 1224

CodeStar + Lambda + SAM으로 테스트 환경 구축하기

들어가기 전: 실제로 프로젝트와 팀원들과의 작업 환경을 구축한 경험을 바탕으로 작성했습니다. 한마디로 실화. Overview소스를 수정할 때마다 지속적인 테스트를 하기 위해 AWS lambda 로컬 테스트 환경, SAM을 결합해서 환경을 구축했습니다. 이번 글에서는 팀원을 추가하고 CodeCommit을 리포지토리로 사용하는 것도 소개하겠습니다. 예상 구성도테스트 환경 구축, 도저언!1. 팀원 추가하기 IAM 서비스를 이용해서 프로젝트를 같이 사용할 유저를 추가합니다. IAM에 유저를 추가하면 AWS 콘솔을 같이 사용할 수 있습니다. 사용자 추가를 클릭해 유저를 추가합니다. 팀원마다 한 개의 계정을 추가해야 합니다. 사용자 세부 정보 설정 > 엑서스 유형에서 ‘프로그램 방식 엑서스’와 ‘AWS Managrment Console 엑서스’를 체크합니다. 여기에서는 개발2팀 팀원인 강원우 과장의 계정을 생성했습니다.1) 비번은 귀찮으니 미리 세팅해둡시다. 유저 계정은 그룹을 생성해서 관리하면 편합니다. 그룹을 사용하면 보다 편리하게 계정 권한을 제어할 수 있기 때문입니다. 이번 예제에서는 그룹 이름을 codeStarGroup으로 만들었습니다. AWSCodeStarFullAcess를 정책으로 설정하고 ‘그룹생성’을 클릭해 그룹을 추가합니다. 2) codeStarGroup에 체크한 후, ‘다음: 검토’를 클릭해 진행합니다.‘사용자 만들기’를 클릭해 생성을 마무리합니다.계정 추가를 완료했습니다.사용자 이름(위의 예시에서는 kanggw)을 클릭하고, 뒤이어 ‘보안자격 증명’ 탭을 클릭합니다.콘솔 로그인 링크를 공유합시다. 링크를 입력하고 들어가면 그룹 로그인이 활성화가 되어있다는 걸 볼 수 있습니다.2. CodeStar 설정하기 프로젝트 인원을 무사히 추가했습니다. 이제 프로젝트를 만들어 봅시다. CodeStar 프로젝트 세팅 방법은 R&D본부 윤석호 이사님이 쓴 ‘애플리케이션 개발부터 배포까지, AWS CodeStar’를 참고해주세요.새 프로젝트를 생성합니다.python AWS Lambda를 선택합니다.프로젝트 이름은 ‘admin-lambda-API’로 입력하겠습니다. 그 후에 ‘다음’을 클릭합니다.‘프로젝트 생성’을 클릭합니다.우리는 Git을 이용해 로컬에서 직접 관리할 것이므로 ‘명령행 도구’를 선택한 후, ‘건너뛰기’를 클릭합니다.3분 만에 프로젝트가 생성되었습니다. 참 쉽죠?3. 프로젝트에 팀원 추가하기프로젝트를 같이 하려면 팀원을 추가해야겠죠. 팀원 추가는 codeStar 대시보드 좌측의 ‘팀’ 탭을 클릭하면 됩니다.‘팀원 추가’ 클릭IAM에서 등록한 팀원의 정보를 불러옵니다. ‘추가’를 클릭해 팀원을 추가합니다. 여기에서 중요한 사실 하나! 프로젝트의 소유자로 지정해야 소스 접근 및 코드 변경이 가능합니다.4. 코드 체크 아웃앞서 설명한 것처럼 직접 Git으로 소스를 받아야 하기 때문에 codeCommit으로 이동합니다. codeStar 대시보드 왼쪽 ‘코드’ 탭을 클릭하면 코드 내역들을 확인할 수 있습니다.‘URL 복제 > HTTPS’를 클릭해 경로를 복사합니다. 소스를 클론하기 전에 계정에 깃허용을 먼저 해주세요. IAM 돌아와서는 계정 설정을 변경해야 합니다.사용자 > kangww > 보안 자격 증명 탭 클릭 > HTTPS Git 자격 증명 > 생성Git에서 사용할 ID와 비밀번호를 받았습니다. 해당 정보를 팀원에게 전달합니다. 이제 workspace로 이동해 체크아웃을 시작합니다.git clone [복사한 경로] [id 입력] [pw 입력] clone이 완료 되었습니다. 이제 기본 프로젝트가 들어있기 때문에 바로 실행할 수 있습니다. 미리 설치된 SAM으로 실행해보겠습니다.이제 해당 경로에 이동해 SAM을 돌려서 정상적으로 구동되는지 확인해봅시다. (SAM설치 방식은 부록에서 소개합니다.) sam local start-api -p 3333 성공적으로 SAM이 구동되었습니다. (짝짝) http://localhost:3333 으로 접근해 결과를 확인할 수 있습니다. 이제 로컬에서 작업을 진행하면서 바로 바로 확인이 가능해졌습니다. 만약 동료와 함께 개발한다면 아래처럼 구동해야 자신의 IP에 접근할 수 있습니다.sam local start-api -p 3333 -host [자신의아이피] 글을 마치며CodeStar의 관리와 배포 기능은 강력합니다. 많은 부분을 알아서 해주니 고마울 뿐입니다.3) 이제 Lambda의 local 테스트 환경인 SAM을 이용해서 배포 전 과정까지 간편하게 테스트를 해보세요. 배포의 복잡함을 codeStar에서 해결하고 테스트를 하거나 개발을 할 때는 SAM을 이용해 효율적으로 업무를 진행합시다.글 쓰면서 발견한 다섯 가지1) codeDeploy > executeChangeSet 에 구동될 때 cloundFormation 이 자동 세팅 됩니다. 엄청 편합니다. API 배포가 진행되면 lambda에서 바로 수정하는 게 편합니다.2) codeCommit은 https 보다 ssh방식을 권장하며, https방식으로 하다가 꼬이면 여기를 클릭해 해결하세요.3) codeStar는 다음과 같은 추가 구성을 자동 세팅합니다.codeStar 용 S3 버킷codePipeLine용 S3 버킷cloundFormation 세팅lambda 세팅4) IDE를 cloud9을 사용하면 EC2 및 EBS가 생성되니 주의하세요. 그리고 생각보다 느립니다.5) 로컬에서 Git push를 하면 약 5분 정도 뒤에 최종적으로 배포됩니다.부록1)SAM을 설치하기 전, 여기를 클릭해 docker를 미리 설치하세요.2)SAM 설치 안내는 여기를 클릭하세요. ( npm install -g aws-sam-local )참고1)강원우 과장은 귀여운 두 달팽이, 이토와 준지의 주인이기도 하다. 2)AWSCodeStarFullAcess는 codestar 접근에 대한 권한을 부여한다.3)자동 배포까지 2~5분 정도 걸리는 게 어렵게 느껴질 수 있다.글천보성 팀장 | R&D 개발2팀[email protected]브랜디, 오직 예쁜 옷만#브랜디 #개발문화 #개발팀 #업무환경 #인사이트 #경험공유
조회수 652

숙박앱에 필요한와이즈트래커 리포트 Top 3

숙박앱은 O2O 서비스를 선도하는 사업 중 하나로 빠르게 시장을 확보하기 위한 다수의 앱이 생산되면서, 유사한 경쟁 앱 속에서 차별화 된 서비스로 고객을 잡기 위한 노력이 치열한 사업영역 이기도 합니다. 그래서 숙박 앱 운영에 도움이 될 와이즈트래커의 리포트 3가지를 소개하고자 합니다.1. 상품 카테고리 리포트숙박의 등급은 생각보다 다양합니다. 그러나 숙박 앱에서 한 화면에 보여지는 컨텐츠는 1~2개이며, 이후에는 지속적인 스크롤링으로 원하는 숙박장소를 찾기 때문에 사용자가 선호하는 컨텐츠를 상단에 효과적으로 배치하는 게 중요합니다.상품 카테고리 리포트는 각 숙박 카테고리별로 방문수(=유니크 조회수), 평균 체류시간 등 인게이지먼트 지표와 더불어 객실선택, 예약하기, 주문, 매출액 등 다양한 컨버전 지표를 함께 제공합니다. 나아가 상품 리포트를 통해서 ‘특급’이란 카테고리 중 실제 어떤 호텔이 효과가 좋았는지를 파악할 수 있습니다.이러한 데이터는 컨텐츠 배치 뿐만 아니라, 제휴 영역을 확장하는 데도 어떤 카테고리에 집중해야 할지 참고할 수 있는 유용한 데이터입니다.2. 화면 이동경로 리포트숙박 앱 UI는 매우 심플하고 직관적인 편입니다. 사용자는 예약이 앱 실행의 주 목적이기 때문에, 퍼블리셔는 보통 첫 화면에 컨텐츠를 스크롤링해서 볼 수 있도록 구성하지만 의외로 예약에 접근하는 행동패턴은 다양할 수 있습니다.샘플 데이터처럼 목적을 갖고 검색을 통해 빠르게 상품 정보를 획득하고자 하는 사용자의 비중이 많다면, 모바일 기기에 적합한 내부 검색엔진 편의성 및 결과 화면의 퀄리티가 매우 중요할 것이며 이는 예약율과 직결될 수 있습니다. 반대로 검색했는데 만족하지 못한 결과 값을 제공했다면, 높은 외부 유출 비율을 나타낼 것입니다.화면 이동경로 리포트는 이러한 다양한 사용자들의 행동패턴을 타겟별로 4가지 타입(A화면 이후, A화면 전/후, A화면 도달경로, A화면에서 B화면을 도달하는 경로)으로 분석하여 네비게이션 개선에 통찰력을 얻을 수 있는 데이터를 제공합니다.  3. 내부 검색어 리포트 숙박 앱에서 검색엔진을 사용하는 빈도는 꽤 높습니다. 앱을 실행하자마자 검색하는 사용자는 서핑을 즐겨하기보단 자신이 원하는 컨텐츠(정보)만을 빠르게 받고 싶은 성향이 있습니다. 해당 사용자에겐 효과적인 검색결과 화면을 제공하는 것이 핵심입니다.검색결과 화면은 2가지가 필히 고려돼야 합니다.1) 검색결과와 관련성 높은 결과 값 제시( 방대한 결과값은 오히려 재검색하게 하여 불편함을 제공)2) 검색결과 값이 없을 경우 대안을 제시( 빈 페이지 제시는 매우 부정적인 경험으로 기억)내부 검색어 리포트는 사용자의 검색빈도가 높은 인기 키워드를 파악할 수 있으며, 검색 실패수 지표를 통해 온전한 결과 값을 제시하지 못한 경우를 찾아 검색엔진 개선의 방향을 잡을 수 있습니다.  * WISETRACKER는 모바일 광고 성과 측정부터 In-app 이용자/컨텐츠 분석, 푸시메시지 최적화까지 지원하는 모바일 통합 분석/타겟팅 솔루션입니다. 와이즈트래커 솔루션의 무료체험을 원하실 경우 여기를 클릭해주세요.* WISETRACKER가 제공하는 무료 데이터 분석 컨설팅를 원하신다면 여기를 클릭해주세요.  #와이즈트래커 #서비스소개 #데이터분석 #데이터트래킹 #앱리포트
조회수 755

디자이너와 클라이언트를 위한 알쏭달쏭 색깔정리(2)

39. 연보라+파스텔보라+씨스타보라(아님)아주 예쁜 색이죠. 하지만 놀라운 건 이것은 보라색계열이 아닙니다. 이거슨 사실 파란색계열이죠!!! 그러니 많은 클라이언트분들이 뭐여?? 하실 수도 있겠습니다. 하지만 그냥 보기에 보라색이므로 보라색이라고 하겠습니다. 실제로 파란색과 보라색은 그다지 멀리 있지 않습니다. 40. 이쁜보라보라..라는 본명을 지니신 분들 기분이 좋아지는 색입니다. 하지만 이제 슬슬 구별이 되실런지 모르겠지만 이것은 보라색이 아닙니다. 살짝 뭔가 색이 엇나가는 듯한 느낌이 있습니다. 그럼에도 불구하고 그냥 보라색같으니 보라색이라고 합니다. 흔히 비디자이너와 얘기할 땐 항상 이런 자세가 필요합니다. 그냥 봤을 때 대강 이거면 이거인 것.... 그냥 대충 그려놓으면 알아먹는 것. 이것은 인간의 고대역사에서부터 이어져내려온 유구한 전통입니다. 이미 알타미라 벽화나 고구려의 수렵벽화에서부터 그냥 대강 이것은 사슴이고 나는 말타고 이걸 잡는거다. 동그란것은 태양이고, 이것은 활이다. 라는 메시지중심의 그림을 그려왔죠. 디자인으로 '일'을 할 땐 디테일을 구구절절 따지지 말고, 메시지로 대화를 합시다.41. 시원한데 부드러운 색시원하면서도 부드러운 색은 이겁니다. 플랫한 파란색이죠. 그냥 쌩파랑은 너무 차갑고 딱딱한 느낌이 든다면, 이런 부드러운 톤의 파란색을 써보세요. 특히 그놈의 전문적인 걸 원하는데 감성도 녹아들길 원한다면 이런색이 아주 적격입니다. 42. 파란색파란색입니다.43. 쨍한 파란색네, 이건 쨍합니다. 쨍(=채도가 극도로 높음)44. 전문적인 색깔공공입찰 제안서에 들어가면 좋을 색깔입니다. 또는 뭔가 자꾸 전문적인 걸 원하시는데, 아까 41번같은 느낌은 아니다..싶으면 이 색을 써주도록 합시다.45. 아주 찐하게 전문적인 색진짜 전문적이다 싶으면 이걸 써줍니다.46. 심하게 전문적이고 학술적인 색무슨 연구소나 금융계, 아니면 회사자체가 굉장히 오래되었거나 공공입찰을 주로 하거나, 건축사무소거나 뭔가 사무실이 지나치게 조용하고 파티션이 딱딱 쳐져있을 것 같다. 탕비실엔 노란색 현미녹차티백과 맥심만 있을 것 같다하면..이 색입니다.46. 여름이벤트 배너 배경색네, 제목이 설명을 다 했네요.47. 페리오치약색민트색이라고 합니다. 원래 민트는 이 색이 아닙니다. 민트를 이런 색으로 굳힌 것은 죄다 페리오치약에 '민트향' 이란 것이 붙었기 때문입니다. 그냥 치약색이라고 합시다.48. 하늘색넌 무슨색 좋아해? 그러면 50%는 파란색이라고 하는데, 그들이 좋아하는 파란색은 아까 위에 그 파란색이 아닙니다. 대부분은 '하늘색'을 파란색이라고 합니다. 그러니까, 클라이언트가 파란색으로 해주세요라고 하면 반드시 '하늘색이요? 아니면 청바지색이요?' 라고 반드시 물어봅시다. 1편에서 설명했듯이 노란색과 파란색은 원추세포가 받아들이는 가장 넓은 스펙트럼에 존재하는 색입니다. 그런만큼 사람들이 '파란색'이다..라고 느끼는 범위가 크다는 것이죠. 아직도 신호등의 '가라는' 신호가 초록불이다 파란불이다..를 논쟁하고 있으니까요. 신호등색은 '초록색'입니다. 49. 옥색흔히..그 청록색..이라고 하면 사람들이 잘 모릅니다. 주로 이 색은 옥매트에 쓰이거나 아니면 칫솔막대기부분에 쓰이곤 합니다. 50. 태종대 전망대에서 본 맑은 날의 바다색그것 이외엔 딱히 설명할 수 있는 말이 없습니다. (물론 옥색이란 말이 있지만..옥장판을 쓰지 않으면 쉽게 알기 힘든 색이죠..그렇다고 태종대를 안가봤으면 뭐..폭망)51. 제주도 협제해수욕장 먼바다색.........추억이 아련아련....... 하아..협제가고싶다..(뭔소리..)52. 어른스러운 색음..뭔가 모르겠지만 이 색은 어른스러운 색입니다....53. 파스텔보라놀랍겠지만 이것이 연보라입니다. 39번을 다시 보시겠어요? 어때요? 53번은 오히려 연한 핑크같아 보이지 않나요?? 맞아요, 보라는 빨강과 파랑이 섞였습니다. 명도가 높아지면 발산색인 빨강색이 훨씬 도드라지게 보여요. 그래서 진짜 파스텔톤의 연보라는 오히려 연한 핑크와도 같아보입니다. 그러니 "연보라" 라고 할때는 클라이언트에게!! 반드시!!! 39번과 53번색 두개를 다시 보여줘야합니다!!!...대부분의 사람들은 39번색을 연보라라고 여기거든요.54. 이쁜 색이거슨 보라고 뭐고 그걸 떠나서 그냥 이쁜 색이라고 합니다. 어릴 때 먹던 그 아줌마가 국자로 퍼서 콘에 얹어주던 200원짜리 아이스크림의 포도맛부분 같이 생겼습니다.55. 밝은 보라연보라와 밝은 보라는 다릅니다. 연보라는 흐리흐리한 보라를 의미하고 밝은 보라는 위처럼 보라는 보라인데 좀더 명도가 높은 걸 얘기합니다. "연보라" 라는 단어가 은근히 사람들이 미리 이미지화시키고 있는 것들이 있기 때문이죠. 주로 "옷"색깔을 많이 떠올립니다. 남자들 셔츠도 연보라셔츠가 은근히 있는 것처럼 말이죠. 그래서 연보라..라고 하면 거의 파스텔톤의 흐리흐리희르히ㅡ리희릐희르힐 한 걸 생각하시면 되요. 55번색은 '밝은 보라' 입니다.56. 보라색사람들이 진짜 헷갈리는건 보라색과 자주색입니다. 사실 정말 다르거든요. 하지만 이름탓인지 뭔지...자주색과 그렇게 많이 헷갈리더라구요. 클라이언트가 자주색자주색 그러면..보라색도 옵션으로 한번 보여주도록 하세요. 56번색은 사실 보라색이 아닙니다. 보라색같지만, 아직 한참 멀었죠. 그럼에도 불구하고 채도가 명확한 저런 색을 '보라색'이라고들 많이 합니다. 진짜 보라색은 포도색과 가까워요. 일반인들이 보기엔 거의 검은색이나 남색과 다를바가 없죠. 그래서 일반적인 '보라!!!' 라고 하면 저 색을 생각해주시면 됩니다.56. 진짜보라색 & 포도 & 찐한 보라이게 진짜 보라색입니다. 하지만 혹시 폰으로 이 글을 보고계신다면 거의 남색으로 보이실 수도 있어요. 그래서 이것은 보라색이라고 하지않고, '포도색' 이라고 합시다. 또는 찐한 보라라고 이름을 짓도록 하죠. 거의 창씨개명임..57. 너무 밝지 않은 하얀색이게 그 문제의 너무 밝지 않은 하얀색의 정체입니다. 사실 이것보다 더 희미해야 정상입니다. 하지만 그러면 너무 안보일까봐 조금 더 찐하게 했으니 참고바랍니다. 하얀색이 안밝을 수 없습니다. 하지만 그럼에도 불구하고 자꾸 너무 밝지 않았으면 좋겠다..라고 하는건.. 아주 조금만 회색을 섞어달라는 겁니다. 왜냐면 사람들이 자주 본것들이 있거든요. PPT만들때도 바탕이 완전 쨍한 흰색보단 조금 회색이 깔리면 전체적으로 안정되니까요. 58. 회색이건 사실 회색이 아니지만, 사람들이 얘기하는 회색은 이런 겁니다.59 찐한 회색아시는 분들은 아셨겠지만, 이건 순수한 회색이 아닙니다. 약간 붉은기가 섞여있죠. 보통 이렇게 회색에 약간의 붉은기를 섞어주면 '예쁘다' 라고 하십니다. 어둡긴한데 따뜻한 웜톤이 살아있기 때문이죠. 게다가 발산색이 섞여들어가기 때문에 너무 딱딱하거나 뭉친 느낌이 들지 않아서 밸런스가 맞습니다. 사람들이 예쁘다..라고 느끼는 것은 극단적인 감정에 치우치지 않는 색을 의미해요!60. 찐한 회색2찐함의 정도가 어느정도인지따라 다르지만, 위의 것을 했다가 '조금 더 찐하게요' 라고 하면 이 색입니다.61. 밝은 까만색이게 아주 놀라운 언어유희인데, 회색과 밝은 까망은 다릅니다!!!..-.- 일반인들은 명도단계 N10 이런 걸 몰라요. 그러니 일정 구간부터는 까만색을 기준으로 삼습니다. 생각해보세요 명도단계는 흔히 10단계로 쪼개져있는데 우리가 말할 수 있는 색이라곤 흰색,회색,검은색이 전부입니다. 그러니 나머지 7가지를 얘기하려면 어딘가를 기준으로 얘기해야해요. 4,5,6단계를 연한회색,회색,찐한회색 이라고 했다면 7,8,9,10단계는 까만색을 기준으로 얘기합니다. 이건 밝은 까만색이라고 해요;;62. 이쁜 까만색예쁜 까만색은 이런겁니다. 폰으로 보시는 분들은 구별이 잘 안되실 수 있습니다. 아래의 것과 구별해주세요. 아니 시벌탱 까만색이 어떻게 예쁘란 말이야?!!?!?! 라고 디자이너들은 멘붕일 수 있겠지만..척하면 착하고 알아들으면 됩니다. 이쁜 까망은 플랫한 톤을 진하게 만들어주면 됩니다. 그러니까 까망에 약간에 붉은기를 섞어주고 적당히 어둡게 만들어주면 되죠. 이게 흔히 말하는 '예쁜 까만색' / '너무 어둡지 않은 까만색' 이라는 해괴한 언어로 번역되는 색입니다.63. 그냥 까만색 / 쌩까망 / 솔리드블랙그냥 까망. 이라고 하면 그냥 이겁니다. 가끔 솔리드블랙이라는 멋진 말을 쓰는 분도 계십니다. 그것도 이것입니다. 위에 것과 좀 차이가 나시나요? 참으로 길고 긴 글을 마무리합니다....물론 글로 따지면 얼마 길지는 않지만....이 색들을 하나하나 정리하고 떠올리는 데 매우 빡셌습니다. 놀라운 걸 알려드릴까요. 이 색깔의 호칭은 왜 어렵고 자꾸 엇나가는지...? 그것은 놀랍게도 서로를 굉장히 배려하기 때문입니다. 이렇게 얘기하면 알아들으시겠지? 디자이너들은 이런 단어를 알겠지?...라고 어디서 들은 것들을 자꾸 쓰려고 하기 때문이예요. 그렇지 않습니다. 그냥 아주 일상적인 언어들로 풀어주세요. 직접 보여주시면 아주 좋지만, 그게 안된다면 그냥 우리가 흔히 알고있는 일상의 사물들에게서 색을 뽑아서 얘기해주세요. 그럼에도 불구하고 그 색의 범주는 굉장히 넓을 수 있습니다. 그러니 디자이너들은 일반인들이 흔히 생각하는 색의 오차들을 이해할 수 있어야 해요. 예를 들어볼께요. 맥주색은 무슨색이예요? 노란색?...그렇죠 그게 흔한 색입니다. 하지만 누군가는 연노랑을 떠올리고, 누군가는 갈색을 떠올려요. 개인의 경험과 기호에 따라 그 범위는 굉장히 다양해질 수 있습니다. 그런 관점에서 보면 디자이너는 끊임없이 주변을 관찰하고 사람들의 행동과 말에 귀기울여하는 존재입니다. 대다수가 무엇을 보고 어떻게 느끼는지...를 파악하고 이해하고 있어야 시각화라는 작업이 가능해지지 않겠습니까?ㅎㅎㅎ..모든 디자이너힘내십쇼. 그리고 클라이언트님들도 화이팅 :)끝.개힘들었다...
조회수 102

2017 코리아 스쿠터 레이스 챔피언쉽, 바로고 협찬 - 김원주 선수 우승!

안녕하세요.바로고 입니다기분까지 좋아지는화창한 날씨의 어느 날2017 코리아 스쿠터 레이스 챔피언쉽이 개최되었습니다.#스쿠터#오토바이스쿠터, 오토바이이륜차와 뗄레야 뗄 수 없는#바로고김원주 선수바로고에서 협찬하여대회에 참가하였습니다.2017 KSRCKSRC는코리아 스쿠터 레이스 챔피언십 Korea Scooter Reae Championship 을 의미합니다.대한민국 이륜차 생산기업인대림자동차에서1989년부터 주최하는 대회입니다.언제2017년 6월 18일 일요일어디서잠실 스피드 트랙-풍성한 볼거리와 체험까지함께 즐길 수 있는대회의 현장그 열기가 날씨만큼이나뜨거웠습니다!2017 KSRC 1전의 예선은오전 10시부터 12까지 치러집니다.기종별로 20분간의 예선을 치른 후결과에 따라 그러드를 배정받습니다.결승전은 오후 1시부터 다시 시작됩니다.VJF250은 25랩, 그 외에 시티에이스나 VD125는 20랩을 돌아 완주 순으로 순위를 매기게 됩니다.속도감이 그대로 느껴지는박진감 넘치는 레이스김원주 선수를 응원합니다!2017 KSRCVJF 예선전 결과 입니다.김원주 선수는 5위를 기록예선전을 무난히 통과하였습니다.중요한 것은 결승!결승에서의 활약을 기대합니다~예선전을 마치고barogo 로고가 돋보이는스쿠터에서 포즈를 취한김원주 선수멋짐 폭발!결승전은예선전 뒤 당일에 바로 진행됩니다.결승전을 위해안전점검은 다시 한 번!무엇보다 중요한 것은안전이니까요!꼼꼼하게 오토바이의 상태를 점검합니다.김원주 선수의 오토바이 입니다.점검을 마치고안전장비를 모두 착용하였습니다.오토바이의 점검만큼이나장비 착용도 꼼꼼하게 착용합니다.떨리는 마음으로 결승전을 기다립니다.김원주 선수는 오히려 긴장 안 하신 것 같아요.옆에서 응원하는 바로고 직원들이 더 떨려서조마조마한 마음으로 결승전을 기다립니다.출격대기!드디어 결승전을 시작합니다.레이싱 모델들의 에스코트를 받으며선수들이 준비합니다.2017 코리아 스쿠터 레이스 챔피언쉽 대회는접근성이 좋은 장소에서 개최되는 대회인 만큼경기 이외 다양한 이벤트들이 준비되어 있습니다.신차 전시와전시 차량 경매 행사 등이 진행됩니다.그 밖에 ATV 체험장어린이 그림대회 등다채로운 이벤트들이 마련되었습니다.대회의 하이라이트 아이돌의 축하공연도 마련되어있습니다.볼거리 풍성한2017 코리아 스쿠터 레이스 챔피언쉽내년의 대회도 기대됩니다!드디어 결승전이 시작됩니다.환한 미소의 김원주 선수화이팅입니닷!신호가 떨어지자재빨리 출발하는 선수들드디어 결승 경기가 시작되었습니다.레이스의 대결이 치열합니다.비교적 작은 배기량의 오토바이지만선수들의 활약으로박진감 넘치는 레이스 머신을 선보였습니다.선두에 있는 SLR-TAICHI의 7번김원주 선수치열한 순위 다툼을 이겨 내고1위 선두를 지켜냅니다. 김원주 선수1위!우승을 축하합니다!!!VD125, FC125전 1등 VJF250전 4등눈부신 활약의 김원주 선수였습니다.짠!우승을 차지한김원주 선수의 멋진 전신샷!라이더복을 착용한 모습이정말 멋지네요~-바로고의 응원에 힘입어우승을 차지한김원주!우승을 축하드립니다.마지막으로 우승트로피를 들어올린김원주 선수의 환한 미소축하드립니다!-이상으로 2017 코리아 스쿠터 레이스 챔피언쉽김원주 선수의 우승 소식을 전해드리며마무리합니다.이륜차 전문배달 배송바로고"진심을 채워 배송합니다"www.barogo.com

기업문화 엿볼 때, 더팀스

로그인

/