스토리 홈

인터뷰

피드

뉴스

조회수 975

[Tech Blog] Software architecture: The important stuff

마틴 파울러는 Software architecture 를 “무엇이건 간에 중요한 것들(The important stuff whatever it is)” 이라고 정의합니다. 조금은 재미있는 정의지만, 그 정의를 도출하기 위해 제시한 다른 정의를 들어보면 고개를 끄덕이게 합니다.  Software architecture 는 전문 개발자들이 같은 생각을 가지고 이해하는 시스템 디자인입니다. Software architecture 는 이른 시기에 정해져야 하는 디자인 결정들입니다. 혹은 여러분이 “아, 처음부터 좀 더 잘 생각하고 할 껄”이라고 후회하는 바로 그 결정들입니다. Software architecture 는 또한 바꾸기 어려운 결정들의 집합입니다.  결국 무엇을 중요하게 생각할 것인가, 그것이 Software Architecture 라는 의미입니다. Why is it important? 왜 중요한지 설득하지 못한다면 사실 중요하지 않은 것일지도 모르죠. 그래서 왜 Software Architecture 이 중요한지 짚어보고자 합니다. 쿠팡은 Microservice architecture 로 전환하는 여정을 글로 남겼는데요. 블로그 글의 제목을 “행복을 찾기 위한 우리의 여정” 이라고 지었습니다. (좋은 글이니 읽어보시길!) 다시 말해서, Software Architecture는 개발가자 더 좋은 제품을 만들 수 있는 길이기 때문에 중요하다고 말합니다. 그러나 좋은 Software Architecture를 만드는 일은 쉽지 않습니다. 블로그 글을 인용 해보겠습니다: “여기 저렴한 제품과 비싼 제품이 있습니다. 비싼 제품은 software architecture 가 잘 고려되어 있고, 저렴한 제품은 시스템 디자인에 대한 고민 없이 구현되어 있습니다. 하지만 두 제품은 겉으로 보기에 차이가 없습니다. 소비자가 보기에 똑같이 보이고, 똑같은 기능이 있으며, 성능 또한 같습니다. 어떤 제품을 사야할까요?” 소비자는 제품을 만든 개발자의 행복을 위해 더 비싼 제품을 선택하지는 않습니다. 개발자 역시 동료들에게 “내가 행복하려면 시간과 돈이 좀 더 들더라도 좋은 software architecture 를 구성해야 해.” 라고 주장하기엔 설득력이 부족하죠. Software architecture 가 왜 중요한지 모두가 공감하려면 경제적인 입장에서 그 중요성을 설득해야 합니다. “내부 품질을 좀 포기하더라도 이번 릴리즈에 더 많은 기능들이 들어가야 해.” 라는 의견에 “안돼 우리(개발자)는 더 전문적으로 구성해야 해.”라는 의견으로 대응하면 항상 질 수 밖에 없습니다. 장인 정신과 경제 논리 사이의 싸움에서는 경제 논리가 항상 이겨왔거든요.   Cumulative functionality over Time Software architecture 를 고려하지 않으면서 제품을 개발하면 초기에는 기능 추가 속도가 빠를 수 있지만, 시간이 흐름에 따라 제품의 기능 증가 속도는 점차 느려집니다. 이미 구현된 기능들과 코드가 새로운 기능을 추가하는데 걸림돌이 되기 때문입니다. 한편, 좋은 설계를 지속적으로 건강하게 유지하고, 주기적으로 리팩토링을 하고, 코드를 깨끗하게 유지한다면 시간이 흘러도 기능 추가가 느려지지 않을 수 있습니다. 오히려 기능을 추가하기 위해 수정해야 할 곳들이 명확하고 모듈화 또한 잘 되어있기 때문에 시간이 갈 수록 기능 추가가 더욱 빠르게 진행될 수 있습니다. 새로운 개발자가 참여하는 시점에도 시스템을 더욱 빠르게 이해하고, 더 빠르고 안전하게 기능을 추가할 수 있게 됩니다. 결국 장기적으로 더 많은 기능을 생산하고 빠르게 고객에게 전달하기 위해서 개발팀은 좋은 디자인과 설계에 대해 깊게 고민해야 합니다. What is the best software architecture? 옳은 software architecture 는 없습니다. 상황에 따라 해답은 다를 수 있습니다. Microservice architecture 가 좋다고 해서 모든 것에 대한 답이 microservice architecture 인 것은 아니고, 마찬가지로 어떤 시스템이 monolithic architecture 로 구현되어 있다고 해서 뒤쳐져 있는 것도 아닙니다. 모든 선택에는 Tradeoff 가 있기 마련이니까요. 유선 통신 시스템을 구성한다고 생각해 볼까요? 우리 나라처럼 인터넷이 잘 구성된 상황에서 Skype 로 할 수 있는 통화는 무료이고, 품질도 좋고, 영상 통화까지 됩니다. “Skype 만세! 인터넷을 통한 통신이 항상 옳습니다!” 라고 외치려던 시점에 정전이 되었습니다. 방금 외친 외침은 멀리 가봐야 옆집 정도 닿겠죠. 한편 기존 유선 전화 시스템은 느리고 화상 통화도 안되지만, 전화선 자체에 전원이 공급되고 있기 때문에 정전 시에도 통화가 가능합니다. 전쟁 상황이나 기타 재난 등에도 반드시 통신이 가능해야 하는 곳은 유선 전화 시스템이 꼭 필요할 것 같습니다. 은행 시스템도 적절한 예시가 될 수 있습니다. 비밀번호 입력, 전화 인증, OTP 확인하는 등 은행 업무는 왜이리도 복잡할까요? 그냥 비밀번호 기억해주고 로그인 유지해주면 참 편할텐데 말이죠. 안전하기 위해서겠죠. 여러분의 자산은 소중하니까요. 사용성(Usability)과 안전성(Security)은 종종 둘 사이를 조절해야 하는 Tradeoff 입니다. 만들려는 제품과 시스템, 환경, 시기와 조건 등에 따라서 적절한 architecture 는 달라집니다. 좋은 architecture 를 선택할때 개발자는 선택한 것의 대척점에 있는 무언가를 포기 해야합니다. 그렇기에 software architecture 는 기술적인 범주 안에서만 고려되면 안되고, 구현하고자 하는 비지니스를 매우 잘 이해하고 고려해서 적용해야 합니다. What are you going to do? 이미 구성된 software architecture 를 변경하는 것은 굉장히 어렵습니다. 이미 구성되어 있는 것들을 상세하게 알고 있어야 하고, 비지니스의 요구 사항을 수용해야 하며, 이미 존재하는 기능이 변경 도중 문제 없이 동작해야 합니다. 또한 기존 시스템에 기여한 개발자들과 변경 사항에 대한 공감대를 이뤄야 하며, 겉으로 보기에 당장 변화가 없는 것에 대한 비용에 대해 많은 사람들을 설득해야 합니다. 최근 Buzzvil 에서는 Architecture Task Force 팀을 구성하였습니다. 이를 통해 전체적인 설계를 정비하고 모든 개발팀이 구조적으로 같은 이해를 할 수 있도록 분석, 조사, 계획 수립, 실행에 옮길 예정입니다. 지속적인 공유를 통해 전사적인 공감대를 유지하고 체계적인 문서화와 가이드라인을 통해 모든 팀원이 함께 실행하며 성장할 수 있는 기반을 준비하게 될 것입니다. 궁극적으로 전사 프로젝트와 모든 팀이 더욱 빨리 움직일 수 있는 software architecture 를 구성하고, 이를 통해 더 많은 기능을 더 빠르게 전달할 수 있게 할 것입니다. 아직 해야할 일들이 많이 남아있지만 제대로 계획하고 빠르게 움직인다면 충분히 좋은 결과를 만들 수 있을 것 같습니다. 당장은 눈에 보이는 변화가 없을지라도, 좋은 디자인에 대한 고민과 실행이 우리가 궁극적으로 바라는 비전과 목표에 한 걸음 더 빠르게 다가가는 올바른 길이라고 믿습니다.   *버즈빌에서 개발자를 채용 중입니다. (전문연구요원 포함)작가소개 Whale, Chief Architect “Keep calm and dream on.”
조회수 1535

하던 걸 계속 하라고 하는데...

서론브랜딩이 뭔가 거창한 걸 시작해보쟛!!! 하는 것이 아니라, '그냥 하던 걸 꾸준히 하는 것' 이라고 정의내려보았습니다. 사실 사람도 그렇고 비지니스도 그렇죠. 뭔가 자꾸 매달리고 좋다고 생색낼수록 좀 정떨어지는 감이 있습니다. 물론 부정적인 각인을 통해서 잊혀지지 않거나, 그런 진상이미지가 캐릭터가 되는 경우도 종종 있긴 하지만, 이미지따윈 모르겠고 우린 매출이나 내쟈!! 라는 사람들이 딱히 브랜딩을 생각할 것 같진 않으니 그런 경우는 잠시 넣어두도록 하겠습니다.오늘은 '하던 걸 꾸준히' 에 대해서 얘기해보겠습니다.본론아무것도 하지 않는 걸 꾸준히 계속 하겠다.아니...이러란 얘기는 아니고..브랜딩에 있어서 하던걸 꾸준히 하란 얘기는 '일관성'을 얘기하는 것입니다. 비지니스의 색깔, 컨셉, 방향성 등 추구하고자 하는 것들에 대한 생각과 행동의 방향을 일치시키란 얘기이지요. 하지만 문제가 있습니다. 다음의 대화를 한 번 보도록 하죠오전9시23분 회의실김팀장 : 에...이번에 우리 프로모션 이벤트를 해야하는지 각자 아이디어 있으면 공유바랄께요팀원들 : Chim mook.김팀장 : 그..이번 우리 신제품 관련한 이벤트를 좀 재미있게 알리고 싶은데..팀원들 : 아........음..김팀장 : 이번에 배민에서 치믈리에 이벤트했던 거 어때요? 재밌던데? 우리도 그런 경연대회 한번 해볼까?팀원1 : 근데 우리 상품의 컨셉상...오프라인이벤트는 비용이 많이 들 것 같은데요. 일단 SNS이벤트로 진행해보는건 어떨까요.김팀장 : 오, 좋아요. 요즘 좀 핫한 SNS이벤트 뭐있지? 우리도 그 사연공모같은거 해볼까?팀원2 : 어떤 사연으로..?김팀장 : 사용후기 공모 한 번 때려보죠. 아직 사진찍어서 뭐 태그올리고 상품주던가.본질적인 문제는.. 대부분의 회사에서 '지금껏 하던 것' 이 없다는 겁니다. 대부분은 어디 유명사례나 이슈가 되었던 이벤트를 따라하는 등의 "우리도 그거 한 번 해볼까?" 는 식의 의사결정이 대다수였습니다. 어디서 본 듯한 카드뉴스와, 다른 누군가가 해서 대박친 이벤트 등 따라하기가 급급하죠. 배달의 민족에서 치믈리에 이벤트를 했던건 그 이벤트자체가 재밌어서 성공을 한 게 아닙니다. 배달의 민족이었기에 가능한 것이죠. 그들이 지금까지 유지해온 키치한 코드와 CF와 대외홍보에서 꾸준히 진행해오던 일관적인 소셜이벤트와 맥을 함께하기에 '배민답다.' 라는 생각이 드는 겁니다. 배달의 민족에서 치믈리에 이벤트를 했던건 그 이벤트자체가 재밌어서 성공을 한 게 아닙니다. 배달의 민족이었기에 가능한 것이죠. 우리는 이 문제에 대해 좀 심각하게 생각해 볼 필요가 있습니다. 우리가 창업이래 일관적으로 유지해오고 있는 "CODE"는 무엇인가? 라는 질문. 물론 알고 있습니다. 대부분의 초기창업체는 수많은 프로토타입과 시행착오를 통해 격하게 변화를 거듭합니다. 타겟부터 서비스의 방향성까지 끊임없이 수정되고 바뀌어가죠. 그러나 소위 변화라는 것은 기준이 존재하고 그 기준에서의 변곡점을 얼만큼 만들어 낼 것인가의 이슈이지, 기준 자체를 이리저리 움직이자라는 얘기가 아닙니다. 이러한 문제가 발생하는 이유는 3가지가 있습니다.1. 결정에 근거가 없습니다.대부분 어떤 의사결정을 진행할 때 그 근거는 '그게 잘되었으니까' 라는 결과론적 명제인데, 논리적으로 이것은 근거가 될 수 없습니다. 왜냐하면 그게 잘된 이유가 이벤트의 퀄리티나 컨셉의 포지셔닝 따위가 아니기 때문이지요. 이것의 큰 함정은 사실 기존의 컨설팅이나 책에서 언급하는 여러가지 유명사례들의 오용 탓도 있다고 봅니다. 개인적으론 브랜딩시장에 어느정도 깊이에 대한 재고와 자성이 필요한 시점이라고도 생각되죠. 케이스스터디를 진행할 때는 그 맥락과 근거에 대해 명확히 규명해야 합니다. 단순히 아마존이 어째서, 애플이 어째서... 이런 식의 결론은 적절치 못하죠. 우린 식료품을 판매하는 업체인데 애플의 마케팅전략을 가져다쓰겠다?...그게 잘 되었으니까?...이것도 좀 이상하지 않습니까?  모든 결정의 근거는 "우리 회사는 OO을 추구하기 때문이야." 라는 명제에 기인해야 합니다. 그 OO이 뭔가 거창한 사회적가치나 지구평화일 필욘 없습니다. 다만 우린 '깔끔함을 추구해' 우린 '편리함을 추구해' 우린 '저렴함을 추구해' 등 뭔가 구체적인 Keyword로 정의될 수 있다면 그것으로 충분합니다. 대신 "우린 사회적가치를 추구해" "우린 고객만족을 추구해" 등 뭉게구름같은 소리만 하고있으면 머지않아 사업자등록증이 루비콘강을 건너게 되겠죠.2. 다양성과 난잡함은 다릅니다.배민 치믈리에 시험에 치믈리지 마.(라임지렸다)이것은 의사결정권자 또는 직원들의 성향과도 관련이 있습니다. '다양한 시도'를 해보는 것과 '덕지덕지 가져다 쓰는 것' 은 분명히 다릅니다. 앞서 설명했던 배달의 민족은 폰트를 개발해서 오픈소스로 공급하거나 치믈리에 행사를 진행하거나 키치한 CF를 만들거나 하는 등 굉장히 다양한 액션을 선보였음에도 한결같은 '배민다움'을 유지하고 있는 것은 이 모든 액션들이 하나의 색을 지니고 있기 때문입니다. 우리가 실수하는 건 흔히 '가치중심뽕'에 취하는 것입니다. 우리는 사회적약자를 도와야하니까, 사회적약자를 대상으로 행사를 하자! 이런식의 크나큰 아젠다에 흠뻑 취해서 그것만 바라보고 있는 것이죠. 브랜드는 뭔가 전략을 통해 억지로 만드는 것이 아닙니다. 대표와 구성원들이 만들어내는 그 고유의 '기질' ....그러니까 흔히 똘끼라던가, 병신미라던가, 진지함이라던가, 사랑꾼이라던가..뭔가 이런 성격들이 곧 회사의 이미지를 결정하고 그 방향성을 선명하게 만들어갈 뿐입니다. 이러한 기질에서 출발한 브랜드고유의 색깔은 이들이 어떤 행동을 해도 그 색깔에 물들게 만들죠. 다양성은 바로 이것에 기인해야 합니다. 그 색깔이 없이 이것저것 끌어다쓰면 그걸 진행하는 사람도 지치고, 뭘 왜 하는 지도 모른 채 돈만 불태우는 계획들만 나오는 겁니다.3. 변화는 혁신은 분명하게!에뛰드하우스는 최초에 고객들에게 프린세스 판타지 브랜드를 유지해왔습니다. 그러나 이어 찾아온 실적부진에 브랜드개혁에 필요성을 느끼고 2014년 권금주 대표의 취임과 동시에 대대적인 개편을 진행했습니다. 이 때 두 가지의 놀라운 전략은 이것입니다. "기존의 프린세스판타지 컨셉은 과감히 버린다.""이제부터 모든 정책은 20대의 라이프스타일에 포커싱한다." 버릴 때는 과감히 버려야 합니다. "헤헤헤, 우리 그래도 이것가지고 좀 먹고살았는데..그래도 이건 남겨두는게.... " 라는 생각따윈 저 멀리 던져버리란 얘기이죠. 그리고 바뀌는 정책을 추진할 때는 한번에! 일제히! 확! 강렬하게! 바꾸는 겁니다. 점진적인 변화 이런건...진짜 어디 말만 번지르르 좋은 거지 점진적이란 건 대부분 처음에 돈이 너무 많이 들 것 같으니 돈 생길때마다 그때그때 바꿔가자..라는 얘기인데 제가 지금까지 브랜딩했던 업체중 이렇게 해서 점진적 변화가 성공한 곳은 단 한곳도 없었습니다. 대부분은 몇 개월 뒤 그냥 흐지부지 되는 경우가 다반사였죠.에뛰드하우스  명동점(저는 들어가봤다가 기겁하긴 했습니다만..)에뛰드 하우스는 이후 20대여성만 타겟으로 맞춰갔습니다.  '청순거짓 브라우 젤 틴트, 플레이 101스틱, 빅 커버 컨실러 BB' 등을 주력으로 잡아가며 SNS나, 스토어이벤트 또한 20대의 라이프에 관련된 컨텐츠만 집중적으로 공략하기 시작한 것이죠. 또한 김숙을 신제품 ‘핑크 생기 워터 세럼’의 모델로 활용하며 파격적으로 공감대를 만들어내는 데에 주력하기도 했습니다.  이와 더불어 2way전략으로 아시아권(중국, 싱가폴 등)에서는 프린세스판타지 코드를 그대로 유지하여 그 포지션을 외부로 확장시켜 가는 정책을 폈습니다. 심지어 그대로 전파하는 수준이 아닌, 판타지를 비쥬얼적으로 풀어낸 내부 인테리어와 궁전식 스토어를 만드는 등 플래그쉽 마케팅을 활용하기도 했습니다. 두 가지의 브랜딩이 동시에 가능했던 이유는 에뛰드의 메인철학이 'Enjoy Makeup Play' 였기 때문입니다. 그들은 화장을 일상의 행위가 아닌 '놀이'로 규정했죠. 공주님의 놀이에서 20대의 놀이로 그 계층적 벽을 허물었다라는 느낌을 주면서도 기본철학에서 어긋나지 않는 변화를 꾀했습니다. 이것이 강력한 변화를 일제히 진행하면서도 전혀 위화감없이 시장에 녹아들 수 있는 비결이었죠. 물론 에뛰드가 완벽하게 최고의 사례는 아닐 것입니다. 사실 실무적인 입장을 보면 개판이었을 수도 있죠. 하라는 거 안하고, 막 컨셉 섞여있고..야 그냥 대충 해..란 소리도 비일비재 했을 겁니다.. 하지만 성공적으로 브랜딩을 궤도에 올려놓을 수 있었던 것은 거의 반강제적인 '거친 변화' 를 추구했기 때문입니다. 솔직히 이러한 변화를 진행하려고 하는데 한 명 한 명 설득시켜가며 "우리가 이번에 이렇게 바꿀건데..그 이유는 이렇고.그래서 우린 이렇게 해야하고..."를 해명하고 다독이며 진행할 시간이 있을까 싶습니다. 가끔은 공표하고 거칠게 추진하는 순간도 필요한 것이죠. 그 변화의 리스크를 감당할 각오는 해야겠지만 말입니다. :)읽다보면 한가지 모순을 느끼셨을 겁니다. 2번과 3번은 스타일이 완전 다른데? 라는 것이죠. 2번은 구성원들의 성향과 기질로 자연스럽게 브랜드를 만들어내는 것이고, 3번은 정책과 시스템으로 회사의 방향을 확 트는 경우니까요. 사실 이 둘은 모순의 관계가 아닙니다. 필연의 관계라고 하는 편이 맞겠네요. 한가지 컨셉으로 회사가 평생 운영되는 경우는 드뭅니다. 어느 순간에는 뭔가를 크게 변화시켜야 할 순간이 오겠죠. 또한 2번에서 언급한 것처럼 성향만으로 브랜드의 색깔을 선명하게 만들기는 힘듭니다. 그것은 내부적인 문화를 만들기는 적절할 지 모르나, '일'을 해야하는 상황에 적용하기엔 다소 응집력이 약하죠. 이러한 관점에서 시스템은 두 가지 역할을 합니다.하나는 내부의 자연스러운 고유색깔을 극대화시켜서 정돈하는 역할이죠. 비쥬얼적으로나, 정책적으로나, 기획적으로나.. 어떤 방식이든 우리의 성격과 방식을 드러내는 수단적인 부분이 존재해야 합니다. 우리가 성격과취향을 패션이나 말투, 행동으로 드러내듯 기업도 마찬가지이죠.티몬의 웰컴킷의 티몬의 DNA를 잘 드러냅니다. 일단 키치함이 넘치죠.또 하나는 변화의 코드와 기준을 잡고 강제성을 부여하는 것입니다. 시스템은 브랜드를 위해 존재합니다. 회사도 브랜드를 위해 존재하죠. 회사가 돈벌려고 브랜드를 만드는 게 아니라, 브랜드를 구현하는 방식이 곧 회사라도 김봉진대표님이 언급하셨더군요. 그리고 이러한 시스템은 개인을 위해 존재하는 것은 아닙니다. 좀 더 커다란 목적을 위해 존재하죠. 그러니까 브랜드가 급커브를 하거나 전혀 다른 국면으로 변화해야 할 때 시스템은 그 변화를 전담하고 통제하는 역할을 맡는 것입니다. 그러니 조금 냉정하게 말해서 개인의 성향이 그 변화와 맞냐, 그렇지 않냐 따윈 중요하지 않습니다. 이러한 일관성은 때론 나갈 사람은 나가고 남을 사람은 남는 소위 '물갈이'가 이루어지는 이유가 되기도 합니다.가라, 다음에 만날 땐 적이다.위와 같은 이유로 대부분 방향성이나 컨셉없이 흐지부지 사라진 브랜드의 추억을 안고있거나, 애시당초 만들지 못한 기업들도 허다합니다. 키워드나 컨셉도 없이 이것저것 가져다 쓰다가 내가 뭔지도 잃어버린 제이슨 본이 되거나, 우리도 변화를 해보쟈!! 싶어서 절벽에 올라간 매의 심정으로 깃털을 쪼다가 아 시발 이건 원래 뻥이었지..를 깨닫고 너덜너덜하게 처참해지거나. 여러모로 브랜딩은 어렵고 알쏭달쏭하기 때문에 이것저것 해보다가 돈만 날리는 경우가 많습니다.  그러니 시간이 지나서 창업1년이 넘고, 2년,3년차가 되어도 우리만의 컨텐츠가 뭔질 잘 모르겠고..우리만의 색깔에 대해서도 지구평화와 우주정복과 같은 뜬구름잡는 소리만 하고있다면 진지하게 STOP해보는 것이 좋을 것 같습니다. 명백하게 마케팅회의시간에 구석에 앉아서 직원들이 하는 얘기를 곰곰히 들어보세요."어디가 그거 했는데 잘되었다더라."라는 얘기가 나오고 있다면, 오늘 점심은 혼자 드시면서 앞으로 어떻게 해야 할 지 고민을 좀 해보셔야 할 것 같습니다. 다음엔 그 혼밥의 시간 이후에.. 여러분의 결심을 도와드릴 얘기들을 하겠습니다.#애프터모멘트크리에이티브랩 #마케터 #마케팅 #마케팅팀 #인사이트 #조언 #꿀팁
조회수 5002

Bluetooth Low Energy(BLE) 파헤치기

1. What is BLE?스마트폰이 출시되어 대중화가 될 무렵, ‘스마트’한 개념의 밴드, 워치, 글래스 등이 출시되면서 웨어러블 디바이스 시장이 태동하기 시작했다. 그리고, 2015년 상반기, 애플워치의 등장으로 작은 생태계를 이루고 있던 웨어러블 디바이스들이 다시 한번 각광을 받게 되었다. 각기 생긴 모습은 다르지만 이들의 공통점은 스마트폰과 연동되어 작동한다는 것이었다. 과거부터 기기들간의 단거리 무선통신은 Bluetooth라는 기술이 이용되었다. Bluetooth가 공식적으로 등장한지 약 16년이라는 세월이 흘렀지만, 여전히 기기간의 무선통신에는 Bluetooth가 사용된다. 하지만, 지금 사용되는 Bluetooth는 기존과는 다른 방식이다. 바로 BLE라는 특징을 가진 Bluetooth인데, 바로 이것이 오늘날 다양한 종류의 웨어러블 디바이스들이 태어날 수 있었던 원동력이 되었다. 그렇다면 BLE라는 것이 도대체 무엇일까?그림1. BLE가 뭐지? 먹는건가?과거부터 기기들간의 무선 연결은 주로 Bluetooth라는 기술을 이용했는데, 이들은 기기간에 마스터, 슬레이브 관계를 형성하여 통신하는 Bluetooth Classic이라는 방식을 이용했다. 사람들이 이러한 기기들을 이용하면서 많이 염려했던 것은 ‘Bluetooth를 연결하면 베터리가 빨리 소모된다’, ‘사용하지 않을 때는 Bluetooth 꺼놓아야지’ 등과 같은 베터리 관련된 문제들이었다. 사실이었다. Bluetooth Classic은 다른 디바이스를 무선으로 연결을 하여 사용할 수 있는 편리함을 주었지만, 연결이 되는 동안에는 베터리를 빠르게 소모시켰기 때문에 사용하는 데에 많은 불편함이 있었다.2010년, 새로운 Bluetooth 표준으로 Bluetooth 4.0 이 채택이 된다. 기존의 Bluetooth Classic과의 가장 큰 차이는 훨씩 적은 전력을 사용하여 Classic과 비슷한 수준의 무선 통신을 할 수 있다는 점이었다. 이는 당시 Bluetooth의 최대 단점이었던 과도한 베터리를 소모 문제를 해결하는 기술이었기 때문에, Bluetooth 관련 업계에 큰 반향을 일으켰다. 이렇게 저전력을 이용하여 무선통신을 하는 특징을 Bluetooth Low Energy (이하 BLE) 라고 부르는데, Bluetooth 4.0 이후의 버전들은 이 용어로 대체되서 불리기도 한다. 최근 출시되고 있는 스마트 밴드, 워치, 글래스 등의 웨어러블 무선통신 기기들의 대부분은 이 BLE 방식을 이용하여 무선 통신을 한다.Bluetooth Smart Ready, Smart, ClassicBLE 기술이 등장하면서 Bluetooth 디바이스들은 아래와 같이 3가지로 분류 되었다.그림2. BLE 3가지 분류Bluetooth 4.0과 함께 새롭게 등장한 Bluetooth Smart Ready, Bluetooth Smart에 대해서 살펴보면,Bluetooth Smart Ready 디바이스는 Bluetooth Classic 및 저에너지 Bluetooth 무선통신 (BLE)을 지원하기 때문에 “듀얼 모드” 라디오라고 불린다. 따라서, 이들은 현재 시장에 나와 있는 수억 종의 Bluetooth 디바이스들에 대한 역방향 호환성을 가진다. 종류에는 스마트폰, 태블릿, PC, TV 그리고 셋탑박스 및 게임 콘솔 등이 있다. 이런 디바이스들은 클래식 Bluetooth 디바이스 및 Bluetooth Smart 디바이스들로부터 데이터를 받아, 이들을 유용한 정보로 변환시키는 Bluetooth 시스템의 허브라고 할 수 있다.Bluetooth Smart 디바이스 내에 있는 라디오는 “싱글모드” 라디오라 불리는데, BLE 연결만을 지원한다는 의미이다. 이들은 기존의 Bluetooth Classic 디바이스들과 호환이 되지 않고 듀얼모드 라디오를 가진 Bluetooth Smart Ready 디바이스 혹은 제조업체에 의해 호환성이 명시된 특정 Bluetooth 디바이스에만 연결이 가능하다. Bluetooth Smart 디바이스들은 ‘우리 집의 창문은 모두 잠겨 있는지’, ‘내 인슐린 농도는 얼마인지’, ‘오늘 내 몸무게는 몇 킬로그램인지’ 등과 같이 특정한 형태의 정보를 수집해, Bluetooth Smart Ready 디바이스로 보내기 위해 만들어진 디바이스이다. 종류에는 심박 모니터, 스마트 손목시계, 창문 및 현관 보안 센서, 자동차 키 체인, 그리고 혈압 팔찌 등이 있다.이 글에서는 BLE를 사용하는 디바이스들이 어떤 과정으로 서로 연결되어 통신을 하는지 그리고 이 과정들을 tracking 할 수 있는 장비인 Ubertooth 에 대해 내용을 정리해서 공유해보고자 한다.2. How they communicate?BLE를 지원하는 디바이스들은 기본적으로 Advertise(Broadcast) 과 Connection 이라는 방법으로 외부와 통신한다.Advertise Mode ( = Broadcast Mode)특정 디바이스를 지정하지 않고 주변의 모든 디바이스에게 Signal을 보낸다. 다시 말해, 주변에 디바이스가 있건 없건, 다른 디바이스가 Signal을 듣는 상태이건 아니건, 자신의 Signal을 일방적으로 보내는 것이라고 생각하면 된다. 이 때, Advertising type의 Signal을 일정 주기로 보내게 된다.Advertise 관점에서, 디바이스의 역할은 다음과 같이 구분된다.Advertiser ( = Broadcaster) : Non-Connectable Advertising Packet을 주기적으로 보내는 디바이스.Observer : Advertiser가 Advertise를 Non-Connectable Advertising Packet을 듣기 위해 주기적으로 Scanning하는 디바이스.그림3. Advertiser and ObserverAdvertise 방식은 한 번에 한 개 이상의 디바이스와 통신할 수 있는 유일한 방법이다. 주로 디바이스가 자신의 존재를 알리거나 적은 양(31Bytes 이하)의 User 데이터를 보낼 때도 사용된다. 한 번에 보내야 하는 데이터 크기가 작다면, 굳이 오버헤드가 큰 Connection 과정을 거쳐서 데이터롤 보내기 보다는, Advertise를 이용하는 것이 더 효율적이기 때문이다. 게다가 전송할 수 있는 데이터 크기 제한을 보완하기 위해 Scan Request, Scan Response을 이용해서 추가적인 데이터를 주고 받을 수 있다 (이에 대해서는 뒤에 자세히 설명한다). Advertise 방식은 말 그대로 Signal을 일방적으로 뿌리는 것이기 때문에, 보안에 취약하다.Connection Mode양방향으로 데이터를 주고받거나, Advertising Packet으로만 전달하기에는 많은 양의 데이터를 주고 받아야 하는 경우에는, Connection Mode로 통신을 한다. Advertise처럼 ‘일대다’ 방식이 아닌, ‘일대일’ 방식으로 디바이스 간에 데이터 교환이 일어난다. 디바이스간에 Channel hopping 규칙을 정해놓고 통신하기 때문에 Advertise보다 안전하다.Connection 관점에서 디바이스들의 역할은 다음과 같이 구분된다.Central (Master) : Central 디바이스는 다른 디바이스와 Connection을 맺기 위해, Connectable Advertising Signal을 주기적으로 스캔하다가, 적절한 디바이스에 연결을 요청한다. 연결이 되고 나면, Central 디바이스는 timing을 설정하고 주기적인 데이터 교환을 주도한다. 여기서 timing이란, 두 디바이스가 매번 같은 Channel에서 데이터를 주고 받기 위해 정하는 hopping 규칙이라고 생각하면 된다.Peripheral (Slave) : Peripheral 디바이스는 다른 디바이스와 Connection을 맺기 위해, Connectable Advertising Signal을 주기적으로 보낸다. 이를 수신한 Central 디바이스가 Connection Request를 보내면, 이를 수락하여 Connecion을 맺는다. Connection을 맺고 나면 Central 디바이스가 지정한 timing에 맞추어 Channel을 같이 hopping을 하면서 주기적으로 데이터를 교환한다.그림4. Central and Peripheral3. Protocol Stack디바이스들은 Bluetooth로 통신을 하기 위한 Protocol Stack을 가지고 있다. 일반적으로 네트워크 통신을 하기 위해서는, 통신을 위한 규약인 Protocol을 정의해야 되는데, 이렇게 정의된 Protocol들을 층층이 쌓아놓은 그룹이 Protocol Stack이다. Bluetooth Signal Packet을 수신하거나 송신할 때, 이 Protocol Stack을 거치면서 Packet들이 분석되거나 생성된다.그림5. Protocol Stack위 그림에서 볼 수 있듯이 Protocol Stack은 가장 아랫단부터 크게 Controller, Host, Application 로 나뉜다. 여기서는 Connection 과정에서 필요한 부분인 Physical Layer, Link Layer, Generic Access Profile(GAP), Generic Attribute Profile(GATT)에 대해서 알아볼 것이다.3.1 Physical LayerPhysical Layer에는 실제 Bluetooth Analog Signal과 통신할 수 있는 회로가 구성되어 있어서, Analog 신호를 Digital 신호로 바꾸어 주거나 Digital 신호를 Analog 신호로 바꾼다. 또한 Bluetooth에서는 2.4 GHz 밴드를 총 40개의 Channel로 나누어 통신을 한다. 40개 Channel 중 3개 Channel은 Advertising Channel 로써 각종 Advertising Packet을 비롯하여 Connection을 맺기 위해 주고 받는 Packet들의 교환에 이용된다. 나머지 37개의 Channel은 Data Channel 로써 Connection 이후의 Data Packet 교환에 이용된다.그림6. Channels3.2 Link LayerPhysical Layer의 바로 윗단에는 Link Layer이 있다. Link Layer은 하드웨어와 소프트웨어의 조합으로 구성되어 있다. 하드웨어 단에서는 높은 컴퓨팅 능력이 요구되는 작업들 (Preamble, Access Address, and Air Protocol framing, CRC generation and verification, Data whitening, Random number generation, AES encryption 등)이 처리되고, 소프트웨어 단에서는 디바이스의 연결 상태를 관리한다. 또한 통신하는데 있어서 디바이스의 Role을 정의하고 이에 따라 변경되는 State를 가지고 있다.RoleMaster : 연결을 시도하고, 연결 후에 전체 connection을 관리하는 역할.Slave : Master의 연결 요청을 받고, Master의 timing 규약을 따르는 역할.Advertiser : Advertising Packet을 보내는 역할.Scanner : Advertising Packet을 Scanning하는 역할. Scanner는 아래와 같은 2가지 Scanning 모드가 있다.Passive Scanning : Scanner는 Advertising Packet을 받고 이에 대해 따로 응답을 보내지 않는다. 따라서 해당 Packet을 보낸 Advertiser는 Scanner가 Packet을 수신했는지에 대해서 알지 못한다.Active Scanning : Advertising Packet을 받은 Scanner는 Advertiser에게 추가적인 데이터를 요구하기 위해 *Scan Request라는 것을 보낸다. 이를 받은 Advertiser는 *Scan Response로 응답한다.Scan Request, Scan Response : Advertising Packet type의 한 종류이다. 앞서, 31bytes 이하의 User data에 대해서는 Advertising Signal Packet에 넣어서 보낼 수 있다고 하였다. 하지만 31bytes보다는 크지만, Commection까지 맺어서 보내기는 오버헤드가 큰 데이터가 있을 때, Scan Request, Scan Response를 이용하면 두 번에 걸쳐서 데이터를 나눠 보낼 수 있게 된다. Advertising Packet을 받은 Scanner는 추가적인 User Data(예를 들어, Peripheral 디바이스의 이름)를 얻기 위해 Scan Request를 보내게 된다. Scan Request를 받은 Advertiser는 나머지 데이터를 Scan Response Signal에 담아서 보낸다.이들은 크게 Connection 전의 역할(Advertiser, Scanner), 후의 역할(Master, Slave)로 분류된다.StateLink Layer는 5가지 State를 가지고 있는데, 각 디바이스는 서로 연결이 되는 과정에서 이 State를 변화시킨다. 다음과 같은 5개의 State가 존재한다.Standby State : Signal Packet을 보내지도, 받지도 않는 상태.Advertising State : Advertising Packet을 보내고, 해당 Advertising Packet에 대한 상대 디바이스의 Response를 받을 수 있고 이에 응답할 수 있는 상태.Scanning State : Advertising Channel에서 Scaning하고 있는 상태.Initiating State : Advertiser의 Connectable Advertising Packet을 받고난 후 Connetion Request를 보내는 상태.Connection State : Connection 이후의 상태.아래 그림은 각각의 State를 Diagram으로 나타낸 것이다.그림7. Link Layer State3.3 Generic Access Profile (GAP)Generic Access Profile (GAP)는 서로 다른 제조사가 만든 BLE 디바이스들끼리 서로 호환되어 통신할 수 있도록 해주는 주춧돌 역할을 한다. 즉, 어떻게 디바이스간에 서로를 인지하고, Data를 Advertising하고, Connection을 맺을지에 대한 프레임워크를 제공한다. 그래서 GAP는 최상위 Control Layer라고도 불린다. Advertising Mode일 때, GAP에서 Advertising Data Payload와 Scan Response Payload를 포함할 수 있다.또한 GAP에서는 BLE 통신을 위해 Role, Mode, Procedure, Security, Additional GAP Data Format 등을 정의한다. 이들은 실제 API와 직접적으로 많은 연관이 있기 때문에 그 내용이 상당히 많지만, 여기서는 BLE Connection과 관련이 있는 Role에 대해서만 알아보겠다.RoleBroadcaster : Link Layer에서 Advertiser 역할에 상응한다. 주기적으로 Advertising Packet을 보낸다. 예를 들면, 온도센서는 온도데이터를 자신과 연결된 디바이스에게 일정주기로 보낸다.Observer : Link Layer에서 Scanner 역할에 상응한다. Broadcaster가 뿌리는 Advertising Packet에서 data를 얻는다. 온도센서로부터 온도데이터를 받아서 디스플레이에 나타내는 테블릿 컴퓨터의 역할이다.Central : Link Layer에서 Master 역할과 상응한다. Central 역할은 다른 디바이스의 Advertising Packet을 듣고 Connection을 시작할 때 시작된다. 좋은 성능의 CPU를 가지고 있는 스마트폰이나, 테블릿 컴퓨터들의 역할이다.Peripheral : Link Layer에서 Slave 역할과 상응한다. Advertising Packet을 보내서 Central 역할의 디바이스가 Connection을 시작할 수 있도록 하게끔 유도한다. 센서기능이 달린 디바이스들의 역할이다.3.4 Generic Attribute Profile (GATT)BLE Data 교환을 관리하는 GATT는 디바이스들이 Data를 발견하고, 읽고, 쓰는 것을 가능하게 하는 기초적인 Data Model과 Procedure를 정의한다. 그래서 GATT는 최상위 Data Layer라고도 불린다. 디바이스간에 low-level에서의 모든 인터렉션을 정의하는 GAP와는 달리, GATT는 오직 Data의 Format 및 전달에 대해서만 처리한다. Connection Mode일 때, GATT Service와 Characteristic을 이용하여 양방향 통신을 하게 된다. Service와 Characteristic에 대한 내용은 여기를 참고하길 바란다.GATT도 Data 처리와 관련해서 다음과 같은 역할을 정의한다.RoleClient : Server에 Data를 요청한다. 하지만 처음에는 Server에 대해서 아는 것이 없기 때문에, Service Discovery라는 것을 수행한다. 이 후, Server에서 전송된 Response, Indication, Notification을 수신할 수 있다.Server : Client에게 Request를 받으면 Response를 보낸다. 또한 Client가 사용할 수 있는 User Data를 생성하고 저장해놓는 역할을 한다.4. Packet TypeBLE 통신에서는 두 가지 종류의 패킷인 Advertising Packet, Data Packet만이 존재한다. Connection을 맺기 전에는 Advertising Packet type, 맺은 후에는 Data Packet type으로 Signal을 생성한다. Data Packet은 하나로 통일되지만, Advertising Packet은 특정 기준에 따라서 다음과 같은 성질들을 갖는다.ConnectabilityConnectable : Scanner가 Connectable Advertising Packet을 받으면, Scanner는 이를 Advertiser가 Connection을 맺고 싶어한다는 신호로 받아들인다. 그러면 Scanner는 Connection Request (이하 CONNECTREQ)를 보낼 수 있다. 해당 Connectable Signal을 보낸 Advertiser는 Scanner가 CONNECTREQ가 아닌 다른 타입의 Signal을 보내면 해당 Packet을 무시하고 다음 Channel로 이동하여 계속 Advertising을 진행한다.Non-Connectable : Non-Connectable Packet을 받은 Scanner는 CONNECT_REQ를 보낼 수 없다. 주로 Connection 목적이 아닌, Data 전달이 목적일 때 쓰인다.ScannabilityScannable : Scanner가 Scannable Advertising Packet을 받으면, Scan Request (이하 SCANREQ)를 보낼수 있다. Scannable Signal을 보낸 디바이스는 Scanner가 SCANREQ가 아닌 다른 타입의 Signal을 보내면 해당 Packet을 무시하고 버린다.Non-Scannable : Non-Scannable Signal을 받은 Scanner는 SCAN_REQ를 보낼 수 없다.DirectabilityDirected : Packet안에 해당 Signal을 보내는 디바이스의 MAC Address와 받는 디바이스의 MAC Address가 들어있다. MAC Address 이외의 데이터는 넣을 수 없다. 모든 Directed Advertising Packet은 Connectable 성질을 갖는다.Undirected : 해당 Signal을 받는 대상이 지정되어 있지 않다. Directed Advertising Packet과는 다르게, 사용자가 원하는 데이터를 넣을 수 있다.위의 내용을 종합하면, Advertising pakcet을 아래와 같이 4가지 type으로 나눌 수 있다.그림6. Advertising Packet Type5. How they really communicate?BLE 통신의 핵심은 ‘timing’이다.Before ConnectionConnection 전, 디바이스는 3개의 Advertising Channel을 이용해서 데이터를 주고 받는다고 했다. 이들은 이 3개의 Channel을 자신만의 time interval로 hopping한다. 서로의 hopping 규칙이 일치하지 않기 때문에 Channel이 서로 엇갈리는 경우가 많을 것이다. 예를 들어, Advertiser는 1번 Channel에 Advertising Packet을 보냈는데, 같은 시간에 Scanner는 3번 Channel에 대해서 Scanning을 하게 되면 데이터 전달이 되지 않는 것이다. 하지만 이러한 hopping이 빠르게 자주 일어나기 때문에, 두 디바이스가 같은 Channel에 대해 Advertising와 Scanning이 발생하는 경우도 많이 생긴다. 이 경우에 서로 데이터를 주고 받을 수 있다.After ConnectionConnection이 되면, Advertising은 종료되고 기기들은 Central, Peripheral 중 하나의 역할을 하게된다. Connection을 개시한 기기가 Central이며, Advertiser가 Peripheral이 된다. 그리고 두 디바이스는 엇갈렸던 hopping 규칙을 통일시킨다. 그렇게 함으로써, 매번 같은 채널로 동시에 hopping하면서 Signal을 주고 받을 수 있게 된다. 이는 둘 간의 Connection이 끊어질 때까지 지속된다.6. How they connect each other?디바이스간의 BLE 연결을 iPhone과 Zikto Walk와의 연결과정으로 설명하면 다음과 같다.1) Zikto Walk가 Advertising Channel을 hopping하면서 Advertising Packet을 보낸다.(Zikto Walk의 Advertising Packet 유형은 ADV_IND이다)2) iPhone Bluetooth를 켠 후, Zikto 앱에 Zikto Walk를 등록한다. iPhone은 Advertising Channel을 hopping하면서 Scan을 하다가 연결하려는 Zikto의 디바이스 이름 등의 추가적인 정보를 얻기위해 SCAN_REQ를 보낸다.3) SCANREQ를 받은 Zikto Walk는 SCANRSP를 보낸다.4) Pairing이 완료되고, Zikto Walk는 다시 Advertising Packet을 다시 일정 주기마다 보낸다.5) iPhone에서 Zikto Walk로부터 걸음 수 등의 Data를 받기 위해 Sync 버튼을 누른다. 이 버튼을 누르면 iPhone은 CONNECT_REQ를 보낸다.6) Zikto와 iPhone은 서로 Acknowledging을 시작하고, timing 정보 등을 동기화 한다.7) Connection이 완료된다.8) Connection이 완료된 후, Service Data, Characteristic Data 등에 대한 Data 교환이 일어난다.9) iPhone과 Zikto Walk간에 Data Sync가 완료되면, Connection이 해제되고, 다시 Advertising Packet을 보낸다. 이를 그림으로 표현하면 아래와 같다.그림6. Advertising Packet Type7. Ubertooth디바이스간 BLE를 이용한 통신 과정에 대해 알고나니, Bluetooth Signal Packet도 Capturing 할 수 있을 거라는 생각이 들었다. 검색을 해 본 결과, 오픈소스 Bluetooth Test tool인 Ubertooth라는 장치로 디바이스간의 BLE 통신을 tracking 할 수 있다는 사실을 알게 되었다. 가격은 100달러로 생각보다 저렴했지만 국내에서는 구매할 수가 없었다. 그렇다고 궁금한 것을 해보지도 않고 포기하는 것은 엔지니어의 마인드가 아니지 않겠는가. 직접 아마존 (www.amazon.com)에서 해외구매를 하였다. 이렇게 바다 건너 멀리서 날아온 Ubertooth를 사용했던 경험을 바탕으로, Ubertooth의 원리와 BLE 통신에 대해서 조금 더 자세히 설명을 해보고자 한다.Ubertooth는 10cm정도의 몸체와 그와 비슷한 길이의 안테나를 가지고 있는 매우 작고 귀여운 모양이다. 이것이 이름하여 Ubertooth!그림8. Ubertooth오픈소스이기 때문에 모든 소스가 공개되어 있고, 소스를 빌드하고 사용하는 방법도 Ubertooth Github 및 Ubertooth Blog에 잘 나와 있어서 사용하기가 수월했다.How it works?Ubertooth는 크게 Bluetooth Classic을 tracking하는 기능과 BLE를 tracking하는 기능으로 나뉘는데, 여기서는 BLE 통신을 tracking 하는 원리에 대해서 다루겠다.BLE는 앞에서 언급했다시피, Connection 전, 후로 통신하는 방법이 다르다. 그리고 위의 내용들을 꼼꼼히 읽은 독자라면 BLE 통신에서 가장 중요하다고 언급했던 timing 이라는 것을 기억할 것이다. timing 은 BLE 통신에서 굉장히 중요한 요소이기 때문에, 보다 더 자세하고 쉽게 설명을 해보겠다.종이컵 전화기를 사용하여 대화를 해야하는 두 사람이 있다. 종이컵 전화기는 총 40개가 놓여져 있다. 이 두 사람은 40개 전화기 중 하나를 사용해서 대화를 주고 받고, 일정시간 뒤에 다음번 전화기를 이용해야 한다. 이러한 커뮤니케이션 방식에서 소통을 하기 위해서는 한 전화기로 얼마만큼의 시간동안 통화를 할 것인지, 다음 전화기는 어떤 전화기를 사용할 것인지, 그리고 어떤 방식으로 자신들의 대화를 다른 사람들의 대화들로부터 구분할 것인지 등에 대해 알아야 할 것이다. 이것들이 위에서 말했던 timing 관련 정보이다.실제 BLE 통신에서 timing 과 관련된 정보들은 다음과 같다 : Access Adress, CRC Info, Hop Interval, Hop Increment (해당 내용들에 대한 자세한 설명은 여기를 참고하기 바란다). BLE 통신을 하는 디바이스들은 이 timing 관련 정보를 동기화하여, Connection이 맺어진 이후에 해당 규칙에 따라 Channel을 hopping하면서 데이터를 주고 받는다. Ubertooth는 바로 이 정보를 알아내어, Master, Slave와 같은 패턴으로 Channel을 hopping하면서 대화를 엿듣는다. 아까 말한 종이컵 전화기에 빗대어 말하면, 제 3자(Ubertooth)가 두 사람이 정한 대화 규칙을 알아내서, 매번 이들이 전화기를 바꿔가며 대화를 할 때 마다 해당 전화기의 대화 내용을 엿듣는 것이다. 굉장히 흥미로운 방법이 아닐 수 없다. 그렇다면 Ubertooth는 어떻게 이 정보를 알아낼까?Before Connection두 디바이스가 연결되기 전, Ubertooth가 timing 관련 정보를 알아내는 방법은 매우 간단하다. Scanner가 Advertiser에게 Connection을 맺기위해 보냈던 CONNECT_REQ을 기억하는가? 공교롭게도 해당 패킷에는 이 네 가지 정보가 전부 들어있다. Ubertooth는 그 정보를 추출해내어 저장해 두고, 그 규칙에 맞게 Channel을 hopping하면서 Signal Data를 전부 엿듣는다.그림9. Ubertooth로 Capture한 CONNECT_REQ packetAfter Connection이미 연결된 디바이스들은 CONNECT_REQ를 보낼 일이 없다. 그러면 Ubertooth는 Connection 이후의 상황에 대해서는 Signal Data를 엿듣지 못하는 것일까? 아니다. Connection 이후의 상황에 대해서 Ubertooth는 다음과 같은 방법을 이용한다.BLE Signal Packet은 Advertise Mode이든 Connection Mode이든간에 무조건 하나의 Signal Packet format만 존재하기 때문에, Packet마다 특정 정보가 존재하는 부분은 어느 Packet에서나 똑같다. 4가지 정보 중 Access Address라는 것은 모든 Signal Packet마다 존재한다. Access Address라는 것은 두 디바이스간의 Unique한 Connection을 나타내는 4bytes 크기의 Identifier로써, CONNECT_REQ를 보내는 디바이스에 의해 랜덤하게 생성된다. Ubertooth는 37개의 Data Channel을 hopping하면서 모든 Data Packet의 Access Address를 추출해내어 Look Up Table 형태로 저장해 놓는다. 그리고는 각각의 Access Address가 등장한 횟수를 세게 되는데, 가장 먼저 특정 횟수만큼 등장한 Access Address를 target으로 잡는다. 나머지 3가지 정보는 각각 추출해내는 방법 및 알고리즘이 따로 존재하는데 해당 내용도 위에 언급한 사이트에 잘 나와있다. 이렇게 해서 네 가지 정보를 알아낸 Ubertooth는 두 디바이스와 같은 패턴으로 Channel을 hopping하면서 Signal Data를 엿듣는다.그림10. Ubertooth로 Capture한 Aceess Address과 나머지 3가지 정보들이렇게 보면, Ubertooth로 모든 것을 할 수 있을 것처럼 보이지만, 몇 가지 한계점이 있기도 하다. Ubertooth가 timing 관련 정보를 얻어내는 과정에 대해 다시 한 번 생각해보길 바란다. 잘 모르겠다면, 직접 Ubertooth 구매하여 테스트를 해보는 것도 엔지니어로써 굉장히 좋은 경험이 될 것이다.8. ConclusionBLE 통신과 이를 tracking하는 Ubertooth에 대해서 알아보았다. 매우 장황한 내용처럼 보이지만 이것도 매우 압축해서 설명한 것이다. 하나하나 디테일하게 쓰기 보다는 BLE를 처음 접하는 사람이 최대한 이해하기 쉽도록 작성하는 것에 초점을 맞추었다. 위의 내용들을 바탕으로, 독자들이 BLE에 더 넒고 깊은 지식을 얻게 되었으면 하는 바램이다. 글을 읽으면서 Bluetooth Classic은 어떻게 통신하는지에 대해 궁금하신 분들도 있을거라 생각한다. 이에 대해서 간단히 언급하자면, Bluetooth Classic 통신 방식은 BLE보다 훨씬 더 복잡하다. BLE에 대해서 어느 정도 알게 되었다면, Bluetooth Classic에 도전해보는 것도 괜찮을 것이다. BLE내용과 관련해서 보충이 필요한 내용이나, 관련 경험 혹은 궁금한 점 등에 대해서 아낌없이 조이와 공유해주길 바란다.9. ReferenceAkiba, “Getting Started with Bluetooth Low Energy: Tools and Techniques for Low-Power Networking”, O’Reilly Media(2015)http://www.slideshare.net/steveyoon77/bluetooth-le-controllerhttp://www.hardcopyworld.com/ngine/aduino/index.php/archives/1132https://www.bluetooth.org/ko-kr/bluetooth-brand/smart-marks-faqshttp://trvoid.blogspot.kr/2013/05/ble.htmlhttp://blog.lacklustre.net/posts/BLEFunWithUbertooth:SniffingBluetoothSmartandCrackingItsCrypto/#조이코퍼레이션 #개발팀 #개발자 #개발환경 #업무환경 #인사이트 #경험공유
조회수 1471

'삼분의 일' 폴리우레탄 매트리스

원단 씌우기 이전 '삼분의 일' 프로토타입 v1.0"매트리스를 만든다고?"가까운 몇 명에게 말했을 때 돌아오는 반응은 대부분 ‘갸우뚱'이었다.처음에는 ‘잠’에서 시장이 보였고, ‘매트리스'에서 진입경로가 어렴풋이 보였을 뿐이었다.시장조사를 하고 공장을 찾아다니면서어렴풋한 실마리를 찾아가는 재미가 쏠쏠했다.너무 재밌어서 연결고리를 따라 조금 더 조금 더 깊숙하게 들어갔다.  어느새 정신을 차려보니더 나은 매트리스를 만들기 위해서외국에 나가서 유명 제품을 경험해 보고,수십 개의 폴리우레탄 조합을 만들고 있었다.좋은 제품은 우리 프로젝트.. 아니 우리 회사의 시작과 끝이다.좋은 제품이 없다면, 어떤 마케팅과 브랜딩도 통하지 않을 것이다.그래서 당분간은 우선 제품력을 최고 수준으로 끌어올리는데 올인했다.공장으로 수십 번 출퇴근하고,매일 새로운 조합의 매트리스에서 잠을 자다 보니,이제는 밀도, 경도 1 단위의 변화도 느낄 수 있을 정도로 감각이 예민해졌다.그렇게 출산하듯이 첫 번째 프로토타입을 완성하고,2주 동안 매일 새로 태어나듯 꿀잠을 잤다.하루빨리 이 좋은걸 널리 알리고 싶었다.그런데 사람이 간사한 게 완벽해만 보이던v1.0가 익숙해지면서 단점이 조금씩 보이기 시작했다.그래서 후다닥 경도와 밀도를 조금씩 조정하고 아쉬웠던 부분을 보완한프로토타입 v1.1이 내일 출시된다.내일 새벽에 공장에 트럭 몰고 가서 얼른 모셔오고 싶다.후후한 줄 홍보 : ‘삼분의 일’은 폼 매트리스 브랜드입니다.#삼분의일 #제품출시 #매트리스 #고객가치 #업무프로세스 #회사소개
조회수 1131

ASIHTTPRequest를 대체하는 iOS 네트워킹 라이브러리 2가지

ASIHTTPRequest는 iOS 개발자들 사이에서 가장 많이 이용되는 네트워킹 라이브러리인데, 간결한 인터페이스와 개선된 성능으로 인기를 끌었습니다. Github의 Objective-C Most Watched Overall에서도 2위 자리를 현재도 유지하고 있는 것을 보면 이 라이브러리가 얼마나 오랜 시간 동안 iOS 개발자들에게 사랑받았는지는 쉽게 알 수 있습니다.[request release];하지만 애석하게도, 이 라이브러리는 작년 9월에 제작 종료가 선언되었습니다. 6개월 이상 된 소식이지만 하도 오랜 시간 동안 쓰여와서 소개된 곳이 많다보니 제작 종료 소식이 많이 안 퍼지고 있는 듯합니다.여러 가지 이유가 있겠지만, 제작자는 제작 종료 선언 글을 통해 “내부가 너무 복잡해졌고, 수 년에 걸쳐 누적된 몇 가지 아키텍처 선택이 프로젝트를 유지 보수하기 어렵게 만들었다.”라고 제작 종료 선언의 이유에 대해 고백하고 있습니다.부지런히 갈아탈 준비를 해두세요.제작 종료가 선언된 라이브러리인 만큼 가능하면 새로운 라이브러리로 갈아타시는 것이 좋습니다. iOS 개발환경은 1년 단위로 빠르게 성장하고 있는데, 당장 최근 iOS5 개발환경만 해도 block 문법 기반의 API 패러다임, ARC 지원들이 현행 라이브러리들의 필수 요소처럼 굳어져 가고 있습니다. 이에 맞추어 따라갈 수 있는 라이브러리들을 쓰는 것이 장기적인 개발 환경 개선에 도움이 될 것입니다.어떤 대안이 있나?ASIHTTPRequest 라이브러리 개발자는 여러 가지 대안을 소개했지만, 저는 2가지 정도로 간추려서 추천하고자 합니다. 하나는 AFNetworking이며, 하나는 MKNetworkKit입니다.AFNetworkingAFNetworking은 최근 Facebook에 인수된 Gowalla에서 NSURLConnection, NSOperation 등의 기본 Foundation framework 위에 구현된 네트워킹 라이브러리입니다.현재 ASIHTTPRequest의 대안으로 가장 빠르게 성장하고 있는 라이브러리인데, 그 이유는 유명 애플리케이션 개발사의 개발자들이 유지하고 있는 프로젝트이면서, 꽤 명쾌한 API를 제공하고 있습니다. 기본적인 block 기반의 API 구성 외로도, SDWebImage와 같은 라이브러리에서 볼 수 있는 이미지 다운로드 헬퍼도 제공하고 있어 매우 편리합니다.자세한 사용법은 AFNetworking Github 저장소에서 확인할 수 있습니다.MKNetworkKitASIHTTPRequest는 편리한 API를 제공해주는 것으로 많은 사용자에게 사랑받았지만, 기본 NSURLConnection, NSOperation 으로 낼 수 없는 높은 퍼포먼스 또한 그의 강점이었습니다. MKNetworkKit은, ASIHTTPRequest의 아키텍처와 AFNetworking의 인터페이스를 동시에 지향하고자 하는 라이브러리입니다. 그 외에도 아래와 같은 기능들을 추가로 겸비합니다.전체 앱에 대한 single queue 관리자동 queue 크기 조절캐싱과 복구 기능비슷한 request를 하나의 처리로 수행Full ARC support아주 멋진 목표를 가지고 진행되고 있는 프로젝트이며 개발 진척도 상당히 빠른 속도로 진행 중이지만, 아직 자잘한 버그가 많다는 것이 단점입니다. 네트워킹 라이브러리는 애플리케이션 단위에선 상당히 저 수준에 있는 만큼, 이 문제는 치명적일 수 있습니다. 그래서 상업용 프로젝트에 바로 이용하기보다는 실험적인 프로젝트에서 써보면서 지켜보는 것을 추천합니다.마무리하며iOS 애플리케이션 개발 환경에서 네트워킹 라이브러리의 선택은 개발 속도와 애플리케이션 퍼포먼스에서 아주 중요한 위치에 속합니다. ASIHTTPRequest는 그 중 가장 많이 쓰였지만, 개발 종료를 선언했기 때문에 대안 라이브러리를 준비하시는 것이 좋습니다.AFNetworking은 편리하게 쓸 수 있는 API를 NSURLConnection, NSOperation 위에 구현하였으며, 믿을 수 있을 만큼 성숙하여 현재 새 프로젝트에 바로 도입하기 좋습니다. MKNetworkKit은 아직 개발이 한창 더 진행되어야 하지만 API 디자인과 개선된 퍼포먼스, ARC 지원 등 보다 미래지향적인 목표를 하고 있으므로 장기적으로 지켜볼 가치가 있습니다.이 외에도 추천하는 라이브러리가 있다면 공유해봅시다.#스포카 #개발 #개발팀 #개발자 #개발팁 #꿀팁 #인사이트 #조언
조회수 4107

KT 채용 필수 정보! 실무자가 직접 말하는 KT 人사이드(영업/마케팅 직무 편)

저녁이면 선선한 바람이 불기 시작하고 하늘도 점점 높아지고 있는 것을 보니 가을이 다가오고 있는 듯 한데요.이맘때쯤,조금은 긴장된 마음으로 기다려지는 것이 있으니 바로 하반기 공채 시즌입니다!대학생이나 취업준비생이라면 곧 다가올 하반기 채용을 기다리며 입사지원 준비에 박차를 가하고 계실 텐데요.대학생활 동안 다양한 경험을 쌓았지만 막상 내 재능과 열정을 가지고 어떤 직무에 지원할 수 있을까 고민하는 분들도 많을 것 같습니다.그래서 여러분의 고민을 조금이나마 덜어드리고자, KT입사에 성공한KT人들의 인터뷰를 준비해보았는데요.가장 먼저KT의 이미지를 책임지고 있는 영업/마케팅 직원들의 이야기를 들어보려고 합니다.직무에 관한 정보는 물론 사내 분위기,취준생을 위한 입사지원 팁까지! KT人들에게 직접 듣는KT人사이드,지금 바로.들어갑니다.“KT는 젊은 직원들의 소리에 귀 기울여주는 조직입니다.”- KT유무선사업본부 무선요금기획팀 장은정Q.현재 어떤 직무를 담당하고 계신가요?A.저는 마케팅부문의 무선요금기획팀에서'요금기획 및 운영'업무를 담당하고 있습니다.무선요금기획팀에서는 사내 각 전문부서와 협업을 통해 요금제 출시 전 기획부터 출시 후 운영까지 요금제 전반에 관한 업무를 수행합니다.기획 단계에서는 고객 데이터 분석뿐 아니라 고객분석실과 협업을 통한FGI/FGD등으로 고객 니즈를 발굴하여 요금 기획에 참고합니다.기획한 요금제는IT부서의 전산 개발과정을 거쳐 고객에게 보다 효과적으로 홍보될 수 있도록 홍보실, IMC담당과 함께 출시와 동시에TV광고,보도자료 배포,프로모션 진행 등 다양한 마케팅 활동을 진행합니다.출시 후에는 실적 분석 및 고객 의견 수렴을 통해 필요 사항들을 개선하고,해당 내용들을 참고하여 다음 요금제 기획을 다시 준비합니다.Q. KT를 선택한 이유는 무엇인가요?A.통계학 전공자로서 숫자를 많이 다룰 수 있고 데이터 분석 쪽 커리어를 쌓을 수 있는 통신사에 입사하고자 하는 마음이 있었고,3사 중에서도 고객과의 소통을 중시하여 가장 신뢰감을 주는KT를 선택하게 되었습니다.실제로 입사하고 보니 연령대별 이용 요금제,데이터 이용 패턴 등 분석할 숫자들이 무궁무진하고,제가 관여한 상품이 출시되어TV광고에 나오고 지인들이 만족스럽게 이용하는 모습에 성취감을 느끼며 즐겁게 일하고 있습니다.Q.회사에서 가장 보람 있었던 일은 무엇인가요?A.작년에‘Y24요금제’출시에 참여한 것이 가장 보람 있었던 일로 기억에 남습니다.처음으로요금제 기획-개발-출시-마케팅-운영의A to Z까지 참여하게 되어 많이 배우고 한층 성장할 수 있는 계기가 되었습니다. Y24요금제는 만24세 이하의Young타겟이 데이터와 콘텐츠 이용이 활발하다는 부분에 착안하여 매일3시간 데이터 무제한과 콘텐츠 반값 혜택을 제공하는 특화 요금제입니다.연말에는 해당 요금제의 우수성을 국제적으로 인정받아'글로벌 텔레콤스 어워드'수상도 하게 되어 훈훈하게 한 해를 마무리할 수 있었습니다.Q.회사 분위기는 어떤가요?A.다른 회사를 다니는 친구들과 대화를 하면서 항상 느끼는 점은'우리 회사가 참 수평적인 조직이구나'하는 점입니다.KT는 상명하복의 문화보다는 본인의 의견을 언제 어디서든 자유롭게 개진할 수 있는 열린 조직 문화가 보편화되어 있습니다.또한 사원/대리 직급의 주니어를 중심으로 아이디어 협의체 등을 구성하여,사내 주요 과제에 대해 아이디어를 제시하고 실제 사업에도 반영하는 등Top-down방식보다는젊은 직원들의 소리에 귀를 기울여주는 조직이라는 생각이 듭니다.“KT는 능력보다 가능성을 높이 평가하는 회사라고 생각합니다.”- kt cs고객서비스본부CS기획팀 강윤Q.현재 어떤 직무를 담당하고 계신가요?A.저는CS품질혁신파트 소속으로 대/내외 고객으로부터KT고객센터가 완벽한1등으로 인식되기 위한 업무를 맡고 있습니다.우선KT고객님들에게 국내 최고 수준의 상담을 제공하기 위해CS품질혁신 업무를 맡고 있습니다.전국14개 센터 관리자들을 대상으로 혁신조직을 기획하고,상담컨설턴트에게 발생하는 허들을 찾아내고,이를 개선하기 위한 활동을 지원합니다.또한'행복한 컨설턴트가 고객인식1등을 만든다'라는 슬로건 아래 컨설턴트들이 자신의 일의 의미를 찾아 보람 있게 일할 수 있도록 내부직원을 케어하는 활동을 합니다.마지막으로는 외부 대회에 참가해KT고객센터의 품질 혁신 사례를 대외적으로 인정받고, kt cs의 우수한 상담 품질과 업무 프로세스를 홍보하는 업무를 맡고 있습니다.Q. kt cs를 선택한 이유는 무엇인가요?A.신입사원에게 허드렛일만 시키는 현실을 비꼬는 말로'내가 회사에서 복사나 하려고 대학 졸업했나'등의 말을 심심치 않게 들어오면서,회사를 선택할 때'주도적으로 일할 수 있는가?'하는 점을 가장 중요시했습니다. kt cs의 경우,회사 홈페이지 및 대외채널에서 선배 입사자들이 한결같이 꼽은회사의 강점은 바로‘신입사원에게 주도적인 역할이 부여된다’는 것이었습니다.이점이 가장 큰 매력으로 다가왔습니다.또한KT고객센터와 유통사업의 운영 노하우를 바탕으로 타 기업의 컨택센터 수주,강사도급사업, APP개발 등 다양한 분야의 사업 영역을 가지고 있기에 여러 방면에서 저의 역량을 펼칠 수 있을 것이라 생각했습니다.Q.하루 일과를 설명해주세요.A.아침에 출근하면 사내 그룹웨어 메일함을 열어 이슈를 확인하고 부서원들과 공유하며,업무의 우선순위를 정리하는 것으로 하루를 시작합니다.통신업계는 실시간으로 이슈가 많은 업종이다 보니,매일 그때의 이슈에 맞추어 새로운 스케줄로 움직이는 것이 일상입니다.그럼에도 변하지 않고 가장 중요한 업무는현장(KT고객센터)과의 소통입니다.모든 일의 시작과 끝은 현장과 닿아 있기에 원활한co-work를 위해 메신저를 항시 열어두고,필요시 전국 팔도에 위치한 현장으로 즉시 출장을 나갑니다.매월 말에는 현장에서 진행한 혁신활동의 진행상황 및 개선결과를 체크하면서 좋은 아이템은 좀 더 확대 발전시키고,전사에 공유될 수 있도록 제도화 합니다.Q.지원자에게 마지막으로 전하고 싶은 취업 팁은?A.kt cs는획일화된'스펙'보다는 학창시절 무언가를 위해'노력했던 열정과 과정'을 중요시하는 회사입니다.즉'얼마나 잘하느냐'보다는'얼마나 잘할 수 있는지'그 가능성을 높이 평가하는 회사라고 생각합니다.회사와 사업에 대한 명확한 이해를 바탕으로 본인이 그 사업에서 어떤 역할을 해내고 싶은지,나아가 그 사업을 어떻게 이끌어가고 싶은지 구체적인 비전을 그려 본다면 합격은 물론이고,입사 후에도 회사에서 누구보다 똑똑하게 성장할 수 있을 것입니다.“KT는 로열티를 가지고 즐겁게 일할 수 있는 회사입니다.”- kt m&s운영혁신본부 고객경험혁신팀 권순욱Q.현재 어떤 직무를 담당하고 계신가요?A.고객경험혁신팀에서 직영매장Pull Marketing기획,운영 및 매장 영업 효율화 업무를 수행하고 있습니다. KT를 대표하는 직영매장의 차별화된 고객 중심 매장마케팅을 기획하고,이를 기반으로 성과분석을 통한 개선작업을 수행하며,현장 조직과 매장의 효율적 마케팅 활동이 가능하도록 지원하는 업무입니다.구체적으로 고객의 통신상품 구매Cycle인‘접객-집객-응대-사후Care’에서 고객에게 효율적으로 정보를 제공하고 접근할 수 있는 마케팅 방법을 제공하고,효율적인 성과로 이어질 수 있도록 운영하며 지원하는 업무입니다.기존의 다양한 마케팅 방법 이외에도 새로운 방법들을 기획하여 성과와 직결되도록 운영하는 것이 핵심업무입니다.Q. kt m&s를 선택한 이유는 무엇인가요?A.기업 브랜드 가치,발전성,안정성 등을 종합적으로 고려했을 때KT그룹은 가장 우수한 레벨에 속한 기업입니다. KT가 가지고 있는 다양한 요소들은 충분히 제가로열티를 가지고 즐겁게 일할 수 있는 회사라 생각했습니다.특히 다양한 그룹사 중에KT그룹의 통신유통전문회사인m&s는 제가 가장 잘할 수 있는 분야라 생각했습니다.대학시절부터 통신산업에 대해 관심을 가져왔고,경영/경제를 공부하며 자연스럽게 유통∙마케팅에 관심을 가지면서 역량을 최대화할 수 있는 곳이라 생각했기에 KT를 선택했습니다.Q.하루 일과를 설명해주세요.A.출근하면 가장 먼저 오늘 해야 할 업무들을 리스트화합니다.주요업무 및 협업해야 하는 팀과의 스케줄 조정을 진행합니다.간단한 업무정리 후 본격적인 업무를 시작합니다.가장 먼저 월/일 단위로 진행되고 있는 마케팅 프로그램 및 효율화 정책의 성과를 도출합니다.유관부서 및 현장 직원들과 소통하며 프로그램들이 현장에서 원활하게 운영되는지 지표화하여 추출하고,이슈포인트에 대한 대응방향을 수립하여 지원합니다.오후에는 업무 특성상 다양한 아이디어 회의와 장기 프로젝트들이 많기 때문에,각 아이템을 수행하기 위한 사전 미팅 및 준비 작업을 진행합니다.이후에는 관리 예산 정리 및 스팟성 업무들을 대응하고,차주/월 마감 성과관리를 위한 계획을 수립하여 하루를 마무리합니다.Q.지원자에게 마지막으로 전하고 싶은 취업 팁은?A.'자신감'이 가장 중요하다고 생각합니다.본인이 지원하고자 하는 회사와 업무에 대해 충분히 이해하고 명확한 의견과 방향을 가진다면,경쟁력 있는 인재가 될 수 있다고 생각합니다.단순한 암기와 조급함이 아닌,이해를 바탕으로 한 명분 있는 자신감을 가지고 준비하신다면 조금 더 좋은 결과를 얻으실 수 있을 겁니다.“KT는 업계에서 가장 유능하고 열정적인 사람들이 일하는 곳입니다.”- KT미디어사업본부VOD수급팀 최융Q.현재 어떤 직무를 담당하고 계신가요?A.영화<워낭소리>의 주인공 할아버지에게는30년간 함께하며 가족이 된 소중한 소가 있습니다.할아버지는 고령에도 불구하고 소에게 먹일 풀을 베기 위해 매일 산을 오르고,소의 건강을 우려해 논에 농약도 치지 않으며,본인의 건강이 악화되어 소를 넘기려 시장에 나갔다가60만원짜리 소를500만원은 받아야 팔겠다고 큰소리 치고 그냥 돌아오기도 합니다.제가 하는 일은 할아버지와 협상하여 결국60만원에 소를 사오는 것입니다.대신 제가 사는 것은 소가 아닌 영화,시리즈,애니메이션 등의VOD콘텐츠입니다.콘텐츠 시장에는 다양한 할아버지가 존재합니다.자신의 콘텐츠에 자부심이 넘치는 분이 있고,신기술로 무장한 콘텐츠를 파는 분도 있으며,돈만 중요한 분도 있습니다.이런 분들에게서우리가 필요한VOD콘텐츠를 적정한 가격에 수급하여KT올레tv의 콘텐츠 경쟁력을 높이는 것이 저의 직무입니다.Q.본인이 속해있는 회사 분위기는 어떤가요?A.미디어/콘텐츠 산업은 계속 성장하고 있으며 변화무쌍합니다.불과 십 년 전 영화DVD를 우편으로 대여해주던 회사였던‘넷플릭스’는 이제1억 가입자를 보유한 세계 최대의 미디어 플랫폼이 됐으며,외국 콘텐츠를 베끼기 바빴던 한국 제작사들은 이제 콘텐츠를 할리우드에 수출하는 수준까지 도달했습니다. KT의 올레tv는 대한민국1등 유료방송 플랫폼으로서 이러한 기업들과 경쟁하고 협력해야 하는 엄중하고도 위태로운 위치에 놓여 있습니다.그래서 그럴까요?저희올레tv는 업계에서 가장 유능하고 열정적이며 스마트한 구성원들로 이루어져 있습니다.이런 분들과 함께 한다는 것은 영광스럽지만 한편으론 만만찮은 것도 사실입니다.그러나 미디어/콘텐츠 산업 메인스트림을 경험해보고자 한다면, KT의 올레tv가 정답입니다.Q.하루 일과를 설명해주세요.A.VOD수급팀원의 하루 일과를 느껴보기 위해서는 올레tv란 플랫폼을CP(콘텐츠 공급사)입장에서 이해해야 합니다.올레tv는20만 편이 넘는VOD콘텐츠를 백 군데가 넘는CP로부터 수급하고 있는데,평균의 가구가 모든VOD를 시청하기 위해선432년이 필요합니다.제가CP라면 고객이 제 콘텐츠를 찾아볼 때까지 손 놓고 있을까요?당장VOD수급팀 담당자에게 연락해 스크린 상 좋은 위치에 노출하기 위해 어필하고 설득하는 것이 정상적인 모습일 겁니다.VOD수급팀원은 이러한CP의 심정을 이해함과 동시에,섬세한 저울질과 조율을 통해 플랫폼의 공정하고 일관된 정책 및 매출 경쟁력을 지켜나가야 합니다.이를 위해서는 치밀하게 작성된 자료가 필요할 때도 있고,용기 있는 전화 한 통이 요구되는 순간도 있습니다.이런 식으로 몇 가지 이슈를 처리하고 보면,파랗던 하늘은 이내 붉은 빛으로 물들어 있더군요.Q.지원자에게 전하고 싶은 취업 팁!A.KT는 커다란 회사입니다.주변을 둘러보면 어딘가KT인이 꼭 있을 것입니다.그들로부터 정보와 조언을 최대한 긁어 모으세요.저는 취업을 준비하면서KT에 먼저 합격한 학교 동기를 여러 차례 만나고 밥도 사줘 가며 제가 지원하는 사업의 현황과 방향,한계점 등을 상세히 파악하였습니다.덕분에 인터넷 검색이나 스터디를 통해 만든 것보다 훨씬 설득력 있고 구체적인 자기소개서를 작성할 수 있었습니다.서류전형에 합격한 후에는KT에서 퇴직하신 친구 아버지께 면접 스타일,예상 질문 등에 대한 코칭을 구했습니다.친구 아버지께서는 하루 종일 진행되는 면접의 고단함에 대해 면접관 입장에서 설명해 주셨는데,실제 면접 시 저는 간단한 유머를 통해 첫 긴장을 해소하여 면접 내내 면접관 분들로부터 좋은 반응을 이끌어 냈습니다.지금까지KT그룹의 영업/마케팅 분야에서 역량을 십분 발휘하고 계신 네 분의 인터뷰를 소개해드렸는데요.인터뷰를 보고 나니 하반기 공채가 다가오는 게 좀 더 실감이 나는 것 같지 않나요?취업관문에 정답은 없지만 자신만의 돌파구를 찾는 게 중요한 것 같습니다. KT인들의 조언과 같이,단순히 높은 스펙을 쌓는데 열중하기보다는 직무에 대한 명확한 이해와 나의 장점을 연관 지어 어필하기!면접에서 자신감 넘치는 태도와 직무에 대한 열정을 뽐내주신다면 모두들 하반기 취업 성공하실 수 있을 거에요~그럼 하반기 공채까지 모두 파이팅! #kt #기업문화 #조직문화 #업무환경 #직무정보 #구성원인터뷰 #영업 #마케팅 #kt공채
조회수 1014

디자이너가 디자인을 (제 시간에)못하는 이유

브랜딩을 하다보면 디자인을 겁나 해야합니다. 회의실에서 나온 모든 얘기를 거의 다 만들어낸다고 생각하면 되죠. 로고부터 슬로건, 컬러, 제안서, 소개서, 리플렛, 브로슈어, 책자, 굿즈, 컨텐츠, 배너, 옥외광고 뭐 수도 없습니다. 그러니 브랜딩작업과 디자인은 사실상 뗄레야 뗄 수가 없습니다. 생각에서 시작되서 눈으로 확장되고 경험으로 끝나야 하는 것이 브랜딩이니까요. 이뻐보이지? 난 눈물이 나요..하아...ㅠㅠ얼마나 힘들어쓰꼬그래서 디자이너들이 일 좀 해보려고 의자에 앉았는데 이건 뭐 디자인이 너무 안되는 거야. 갑자기 의자가 너무 푹신하다거나, 뭔가 불편하다거나, 디자인요정이 어느 순간 사라져버리거나 또는 급똥악마가 찾아온다거나 뭐 여러가지 이유가 있겠죠. 디자인 할 줄 몰라서 안되는 게 아닙니다. 우리는 모두 능력자죠. 모두 머릿속에 크리에이티브 요정 한 마리 정도는 지니고 있는 똘똘이들입니다. 그럼에도 불구하고 도대체가 디자인을 할 수 없는 상황들이 있단 말입니다. 이런 상황들이 닥쳐버리면 데드라인 직전까지 육신과 나의 소중한 마이헐트가 만신창이가 되면서 머리만 쥐어뜯고 하염없는 공허속으로 빨려들어가기도 합니다. 사실 우스운 것들이지만 무시무시한 것들이죠.  지금 제가 이 글을 쓰는 이유도 디자인이 안되기 때문이죠. 그래서 도대체 왜 디자인이 안되는 지 냉정하게 생각해보았습니다. 그리고 그것을 정리해보았죠. 오늘은 우리의 크리에이티브 요정을 속박하는 잔혹한 현실들을 알아보겠습니다.하아....디자인 개자식1. 의자가 너무 불편해읏챠갑자기 의자가 불편해 집니다. 사실 의자의 탓이 아닙니다. 어제까지 편했던 의자가 왜 갑자기 불편해졌을까요. 물론 날 자꾸 째려보는 옆 자리 대리님의 의자바꿔치기 공격이 있었을지도 모릅니다. 하지만, 그럴 가능성은 매우 적어요. 그럼 혹시 내가 하룻밤만에 뭔가 체형이 바뀐 걸까요? 아니요. 일이 시작되었기 때문입니다. 아침에 입고왔던 팬티조차도 불편해질 수 있습니다.해결책 : 일이 끝나면 다시 편해집니다.2. 침대가 너무 가까워위허매침대는 위험한 존재입니다. 인간에겐 등센서라는 것이 있습니다. 신생아때부터 간직하고 있는 것이죠. 무언가가 등에 눕혀지거나 엄마등에 매달려있어야 잠이 오는 것입니다. 당연히 무언가가 등에 기대지는 순간 나른해지는 것이 양서류가 지상에 올라온 이래 생물의 DNA에 새겨진 본능인데, 그것을 거스른다는 것은 거대한 자연의 섭리를 이겨내야 한다는 것이죠. 그런 일은 우리에게 있을 수 없습니다.해결책 : 카페로 갑시다. 카페에서 일이 잘되는 이유는 누울 수 없기 때문입니다.3. 핀터레스트가 너무 재밌어그건 악마같은 사이트야. 볼수록 재밌다고. 심지어 예전에 봤던 거 또 봐도 재밌음. 레퍼런스 찾으러 갔다가 헤어나오지 못하는 광활한 네트워크가 허락한 유일한 마약이죠.해결책 : 와이파이신호가 2개정도 뜨는 곳에서 작업을 합시다. 이미지로딩이 답답해지도록.4. 배가 고파먹고만있어..디자인은 극도의 크리에이티브 작업이므로 수많은 당을 필요로 합니다. 인간의 당은 간과 허벅지 단일근육 하부에 저장되어 있는데, 두뇌활동이 활발해지기 위해선 이 당을 분해해서 원료를 만들어야합니다. 그러니 일을 할 때 '당이 떨어진다' 라는 말은 일리가 있는 얘기입니다. 근데 디자인할 땐 그냥 시도때도 없이 배가 고프다는 것이 문제입니다. 제 생각엔 그냥 일을 하기 싫어서인 것 같습니다. 해결책 : 참쌀선과, 참쌀선과를 먹읍시다.5. 음악이 맘에 안들어노동요는 필수임디자인할 때 음악은 중요합니다. 물론 케바케지만, 대부분은 자신만의 노동요를 가지고 있기 마련이지요. 하지만 카페에서 자꾸 시끄러운 음악, 싫어하는 종류(저는 주로 아이돌음악..)등이 꾸준히 나오면 아주 환장하겠습니다. 이어폰이나 헤드셋을 끼고 일하는 것도 1,2시간이지 나중에는 귀가 아리고 땀차서 못끼고 있겠더라구요. 노동요의 선정과 청취는 크리에이티브 요정을 편케 해줍니다.해결책 : 노이즈캔슬링 헤드셋을 삽시다. 놀라움을 경험할 수 있습니다. 팀장님 얘기도 안들림.6. 조명이 맘에 안들어눈부셧!조명이 노래서, 조명이 하얘서, 조명이 밝아서, 조명이 어두워서... 모든 조명이 다 거슬립니다.햇빛이 강하면 노트북이 잘 안보이고, 햇빛이 약하면 졸리고..해결책 : 노란 카페!!..노란 카페가 좋습니다. 노란 불빛은 크리에이티브 요정의 양식과도 같죠.7. 사진을 못 찾겠어대부분 디자인은 이미지 찾는데에 시간을 많이 쏟게 되더군요. 환장합니다 정말. 내가 원하는 그 사진을 찾아야 하는데 외국 저작권프리 사이트를 겁나 뒤지는 것은 못잡아도 1,2시간 이상이 걸립니다. 딴 짓하고 있는게 아니라 진짜 이미지를 못 찾겠습니다. 나중엔 막 합성도 하고, 보정도 해보지만 원본자체가 개똥인데 이쁘게 반죽한다고 똥이 아닌게 되는 건 아니죠. 해결책 : 어쩌다 맘에 드는 사진을 찾으면, 워터마크. 결국 돈인가...8. 폰트를 못 찾겠어예쁜 폰트를 찾아야 하는데 도대체 이 폰트 저 폰트 다 찾아봐도 맘에 안듭니다. 보통은 디자이너들이 사랑하는 몇 개의 폰트가 있긴 합니다. 그래서 일반적인 텍스트는 보통 그것만 쓰죠. 하지만 종종 아트웍을 해야할 때는 아웃라인 따서 이래저래 편집해야 하는 경우가 있단 말입니다. 그것에 어울리는 폰트를 찾는 것은 참으로 고역입니다. 해결책 : 유료폰트9. 훈수쟁이의 출현몇 시간 동안 자간 맞추고, 그리드 맞춰서 아트웍해놓으니 스윽 지나가던 훈수쟁이님이 '그거 좀 잘 안보이지 않겠어?' 라고 슥 지나갑니다. 아쉽게도 훈수쟁이는 대부분 나의 윗사람들입니다. 해결책 : 아주 현수막을 만들어서 방에 붙여드립시다.10. 방망이깎는 노인이 오셨다!!!장.인.정.신가끔 그 분이 오십니다. 그 분이 오시면 사실 모든 것이 끝난거야. 바로 장.인.정.신 이죠. 이 분이 마음속에 방문하시면, 사륜안을 개안하면서 픽셀단위의 오점들이 눈에 보이고 누끼의 완성도가 거의 크로마키 사진급으로 상승합니다. 그 댓가로 시력과 손목, 시간을 날려먹을 수 있습니다. 해결책 : 디자이너에게 방망이 깎는 할아버지는 랜덤하게 찾아오시므로, 막을 수 없습니다.11. 아이디어 요정이 오셨다!!!안녕?다 만들고 나면 아이디어 요정이 백색의 간달프마냥 헬름협곡 동쪽에서 찾아오십니다. 왜 시안을 구상할 땐 그게 생각나지 않았을까. 하지만 이 요정을 그냥 지나치기에는 너무 큰 대군을 몰고 오셨기에, 우리는 또 새로운 시안을 만들기도 합니다.해결책 : 대부분은 처음 만든 것이 컨펌됩니다.12. 자료를 안줌그것만 오면 되는데 그게 안옵니다.해결책 : 오후 약속을 취소합니다.13. 뭔 말인지 모르겠어.존나 모르겠다.이해 할 수 없는 비지니스모델이나 전문용어들이나 복잡한 개념들이 가득한 경우가 있습니다. 철골구조 중 H형강의 접합 시 문제점을 해결하기 위한 단방향체결식 볼트라던지... 그런것들.(실제로 만들어 봤었는데 토목공사의 프로세스를 공부해야했습니다.)해결책 : 오유에 이게 뭔 말이냐고 올려봅시다.생각보다 쉽게 잘 알려주더군요. 신뢰도는 반반14. 하얗게 타버렸어주화입마사람마다 다르지만 보통 한 번 방망이 할아버지가 오시거나, 또는 훈수쟁이가 와서 영혼을 불태우다 보면 몇 시간 내로 하얗게 재만 남은 육신을 발견할 수 있습니다. 이 육신은 당분간 제 정신으로 일을 할 수 없으며, 일의 속도가 급격하게 느려지고 사고능력이 저하되는 등 심리적 무정부상태 또는 주화입마와 비슷한 상태가 됩니다. 더 이상 뭐가 생각나지도 않고 생각하기도 싫은 지경이 됩니다.해결책 : 내일의 나를 믿어봅시다.15. 누군가 똥을 싸놓고 갔다..개똥같은...협업은 말은 아름답지만 현실은 잔혹한 경우가 많습니다. 누군가가 대략 시안잡아서 넘겨줄테니 툴작업만 해달라기래 오후6시에 온 시안을 손에 쥐어봤더니 나에게 왠 이 세상의 것이 아닌 듯한 무의식의 청사진같은 것이 쥐어져 있습니다. 해결책 : 그냥 내가 양식을 만들어 주고 빈칸을 채우라고 합시다.16. 해가 떨어지지 않았다.낮엔 디자인이 잘 안됩니다.해결책 : 24시간 카페는 시험기간 대학생과 디자이너를 타켓팅으로 한 공간입니다.17. 화장실에 그 분을 버리고 나옴보통 크리에이티브 요정은 머리나 마음속에 있다고 하는데, 제 생각엔 대장이나 방광 정도에 존재하는 것 같습니다. 한참 소변 참아가며 죽도록 집중해서 디자인하고 있다가, 이제 더 이상은 안되겠다 싶어서 화장실에 다녀오면 그 분이 사라져있습니다. 아마 물과 함께 쓸려내려가신 듯 합니다. 그 분이 떠나신 뒤엔 속도가 엄청나게 떨어지면서 귀찮음이 그 빈자리를 채웁니다.해결책 : 어쩔 수 없지 뭐..18. 컴터가 꼬졌음기회는 이 때다. 새로 사자크게 두 가지 종류가 있습니다. 저장 시에 메모리문제로 튕기는 경우와, 그냥 이것저것 함께 켜놓고 하다가 작동이 중지되는 경우죠. 우리에게 애시당초 선택권이 없는 '온라인으로 해결 방법을 확인하고 프로그램을 닫습니다.' 따위의 선택지를 주지만 어차피 뭘 눌러도 넌 망했다는 얘기입니다. 해결책 : 메모리 문제라면 가상메모리를 늘려서 일시적으로 해결은 가능합니다. 링크참조해보세요. http://imrich.tistory.com/981 / 그냥 작동이 중지되는 경우는 대부분 망할 안랩과 베라포트 등의 백신프로그램이 리소스를 엄청 잡아먹고 있는 탓도 있고, 다양한 프로그램을 한꺼번에 돌리고 있는 경우에 자주 발생합니다. 일단 빌어먹을 백신은 다 지워버리고, 인터넷창이나 쓸데없는 것들은 일단 꺼둡시다. 아니면 그냥 이 참에 다 부셔버리고 좋은 것을 삽시다.19. 저장을 안함뭐라 할 말이없다..침.통해결책 : 절레절레.. 컨트롤에스를 소중히 하지 않았군..20. 그냥 일이 많음사실 이겁니다. 디자인은 이렇게 해줘요! 해서 30분만에 뚝딱 만들어지지 않습니다. 이미지 가져다 붙이고 텍스트 정렬만 하는데 뭐 그렇게 시간이 걸려??? 라는 말은 매우 창피를 당할 수 있으니 삼가도록 합시다. 보통 그렇게 우스워보이는 심플단순한 시안이 나오려면 그 이전에 몇 개의 시안을 갈아엎고 다시 만들었는지 모를 일입니다. PPT 한 장을 장당 10분으로 계산한다거나, 포스터 하나 그냥 2시간정도? 로 생각하시는 분들이 21세기에도 현존하시며 디자이너에게 그냥 생각나는 대로 마구 오퍼를 주시는데... 도덕적으로 옳지 못한 일입니다.해결책 : 곧 이것을 해결하기 위해 책이 나옵니다. 제 책. (헤헤헤헤..)
조회수 5349

안드로이드 백그라운드 서비스 개발시 고려해야 할 사항

지난 시간엔 사운들리 백엔드에 대해 설명을 드렸었죠. 이번 시간엔 사운들리 서비스중 클라이언트에 해당하는 안드로이드 SDK, 그 중에서도 백그라운드 서비스에 초점을 맞추어 설명을 해 볼까 합니다.안드로이드의 특징 중 하나로 Service 를 들 수 있습니다. 이 서비스란 녀석은 백그라운드에서 실행 될 수 있다는 점이 가장 큰 특징인데요. 물론 iOS 에서도 일부 지원은 합니다만 매우 제한적인 경우(음악 재생 등)에만 사용 가능합니다.제가 생각하는 백그라운드 서비스 개발 시 유의 사항은 아래와 같습니다.동작 기간 - 상시 동작 해야 하는가, 특정 조건에서 특정 작업을 할때만 동작 해야 하는가글로벌 프로세스 사용 유무 - 서로 다른 어플리케이션에서 접근이 가능 해야 하는가동작 조건 - 특정 시간 혹은 기간마다 동작 해야 하는가, 특정 이벤트 발생시 동작 해야 하는가그 외에도 많은 부분들이 있지만 일단 저 정도만 고려해도 개인적인 생각으로는 충분히 개발 가능하다고 생각 합니다.그러면 각각에 대해서 좀 더 자세하게 알아 볼까요?1. 동작 기간동작 기간에 대해서 이야기 하기 전에 먼저 유저 레벨에서 가장 많이 사용하는 Service 와 IntentService 의 차이점에 대하여 짚고 넘어가보겠습니다.Service 를 상속`Context#startService//Context#stopService` 혹은 `Context#bindService(w/BIND_AUTO_CREATE)//Context#unbindService` 를 통해 수명 조절 (Service 내에서 Service#stopSelf 를 호출하는 방법도 있습니다.)Service 시작된 이후에 커뮤니케이션 가능수명 종료 API(stopService or unbindService) 를 호출 하기 전에는 프로세스가 사라지지 않음 (물론 LMK에 의해서 종료 된다던지 등등이 있지만 여기서는 논외로 하겠습니다.)IntentService 를 상속startService 를 통해 서비스를 시작함사용자가 따로 수명 관리를 할 필요가 없음상기 특징을 보면 Service 는 상시 동작하는 서비스에, IntentService 는 특정 조건에서 동작하는 서비스에 더 특화된 것을 볼 수 있습니다.사운들리 서비스는 백그라운드에서 상시 신호를 감지해야 하므로 Service 를 상속해서 쓰고 있습니다.2. 글로벌 프로세스 사용 유무안드로이드 컴포넌트 속성 중 android:process  속성을 소문자로 시작하는 이름을 쓰면 글로벌 프로세스로 사용 할 수 있습니다. 글로벌 프로세스니까 당연히 다른 어플리케이션에서도 접근이 가능하답니다.아래와 같은 경우에는 글로벌 프로세스를 사용 할 때 더 이점이 있습니다.불필요한 리소스 사용 자제 - 서버와 통신하는 모듈의 경우, 여러 앱에서 동일한 모듈이 사용 될 때 하나의 통로만 사용 하는 것이 네트워크 리소스를 적게 먹습니다.공유 불가능한 자원 사용 - 사운들리 SDK 가 이 경우에 해당합니다. 비가청 대역 음파를 사용하는 특성상 마이크를 사용 해야 하나 안드로이드에서는 서로 다른 어플리케이션 간의 마이크 공유가 불가능합니다.하지만 일반적인 어플리케이션 서비스는 굳이 글로벌 프로세스를 쓸 필요가 없습니다. 모듈 버전에 따른 실행, 데이터 공유 등 골치 아픈게 이것저것이 아니에요... ㅠ3. 동작 조건동작 조건은 크게 time base 와 event base 로 나눌 수 있는데요. 각각의 경우에 서비스를 동작 시킬 트리거를 다르게 쓰는 것이 좋습니다.동작 조건에 따라 안드로이드에서 사용 가능한 트리거는 아래와 같습니다.시간 기반 (time base)AlarmManager 의 alarm API (set, setExact, setExactAndAllowWhileIdle 등)Android System Broadcast (ACTION_TIME_TICK 등)GCM Message이벤트 기반 (event base)Android System Broadcast (ACTION_SCREEN_ON, ACTION_POWER_CONNECTED 등)GCM Message그 외 각종 어플리케이션 사용시 발생되는 이벤트위에서 이야기한 것을 표로 정리하면 아래와 같습니다.동작 기간동작 조건사용해야할 서비스동작 트리거그 외상시동작시간기반 동작Service 를 상속 받아 startService 서비스 시작bindService 를 통해 서비스와 연결하여 커뮤니케이션해당 Service 는 START_STICKY 로 실행AlarmManager 혹은 서버에서 주기적으로 동작하는 GCM Message 사용글로벌 프로세스를 사용 해야 한다면 android:process 속성을 사용이벤트 기반 동작System Broadcast 혹은 GCM Message, JobService 등을 사용작업 할때만 동작시간 기반 동작IntentService 를 상속받아 startservice 로 실행Intent 에 작업 관련된 파라매터를 전달AlarmManager 혹은 서버에서 주기적으로 동작하는 GCM Message 사용이벤트 기반 동작System Broadcast 혹은 GCM Message, JobService 등을 사용Etc. 유의해야 할 부분추가로 백그라운드 서비스 개발 시 유의해야 할 점들을 기술 해 보겠습니다.i) 배터리 절전 기술안드로이드 버전이 올라갈수록, 그리고 벤더들의 기술력이 높아질수록 배터리 절전 기술 역시 발전합니다. 이러한 기술들은 사용자 입장에서는 반가운 기술이지만 개발자들에게는 종종 절망을 선사합니다 ㅜㅜ사운들리 서비스도 개발 과정에서 각종 절전 기술 때문에 고생을 했는데요, 크게 고생한 기술 및 특징은 아래와 같습니다.DozeAndroid 6.0 이후 버전에 적용아래의 상태에서 일정 시간 이후 Doze 모드 진입충전 중이 아님스크린 꺼져 있음일정 수치 이상 움직이지 않음제한되는 사항AlarmManager 의 AlarmJobServiceWakeLock 무시네트워크 접근 제한회피 방법AlarmManager#setExactAndAllowWhileIdle() - Doze 에서도 동작하지만 최대 15분에 한 번씩만 동작 가능GCM high priority messageApp StandbyAndroid 6.0 이후 버전에 적용일정 기간 동안 아래 상황 중 하나도 발생하지 않은 경우 시스템에서 해당 앱을 standby state 로 간주명시적 앱 실행액티비티나 서비스가 포그라운드(전경)에서 실행 중, 혹은 포그라운드에서 실행 중인 앱이 해당 앱의 컴포넌트 사용중알림을 생성하고 유저가 잠금 화면이나 알림 트레이에서 확인한 경우제한되는 사항네트워크 사용 및 동기화 기능 사용 불가회피방법유저와 상호 작용유저가 디바이스 충전스마트 매니저삼성에서 킷캣 (안드로이드 4.4) 이후의 모델 (일부 제외)에 적용일정 시간 이상 유저가 사용하지 않은 앱은 알림 생성 불가관련글: 구글 개발자 블로그의 Android M 관련 변경점ii) LMK (Low Memory Killer)안드로이드의 각각의 프로세스는 특성에 따라 상태가 부여됨각 상태는 제한되는 메모리 사이즈가 정해져 있고, 디바이스의 가용 메모리가 해당 사이즈 이하로 떨어질 시 시스템에서 프로세스를 종료START_STICKY 로 실행한 서비스의 경우 일정 시간 이후에 null Intent 를 가진채로 재시작킷캣 이상에서 PID가 0이 된 채로 남아있는 버그가 있음ActivityManager#getRunningServices 에서 서비스 리스트를 가져 왔을때 찌꺼기가 존재마치며보기엔 복잡해 보이지만 사실 서비스 기획에 맞게 기능들을 골라서 쓰기만 하면 되니까 생각보단 복잡하진 않습니다. '사용자 중심의 나이스한 서비스 기획' 만 있으면 위의 표에서 기능을 골라서 조립만 하면 됩니다.물론 실제 개발 시에는 훨씬 더 고민 해야 될 부분이 많을 겁니다. 네트워크 트래픽도 최소화 해야 하고, WakeLock 도 적절히 써야 하고, 글로벌 프로세스 사용시는 DB 동기화도 시켜야 하고 GCM 은 downstream 이냐  group 이냐 topic 이냐 등등...개인적인 전망으론 장기적으로 Google 에서도 iOS 처럼 백그라운드 서비스 사용에 점점 제한을 둘 것 같습니다. 하지만 완전히 없애진 않을 것 같네요. 나름 특색 이니까요. 그러니 없애지만 않으면 방법을 찾아 낼 수 있을 겁니다.너무 두서없이 주저리주저리 쓴 글 같지만 조금이라도 도움이 되었으면 좋겠습니다.#사운들리 #개발 #개발자 #안드로이드 #안드로이드개발 #앱개발 #앱개발자 #SDK #인사이트 #조언 #경험공유
조회수 1118

[앵커리어랩]연구보고서 디자이너 '김상은'

밍케터)  인터뷰에 임하시는 각오 부탁드려요! 말량광이) 인터뷰를 그만할 때가 되지 않았나..ㅎㅎ아니에요! 열심히 해야죠. 하하!밍케터)  (밍무룩...)제1장. 키보드와 함께하는 손_ 디자인의 원천밍케터) 회사에서 하시는 일 소개 좀 해주세요.말량광이) 음..일단 웹 디자인, 앱 디자인, 캐릭터 디자인 등 각종 디자인을 도맡아 하고 있습니다.디자인 결과물 중 빙산의 일각.JPG  아 각종 쇼핑도 도맡아 하고 있습니다. 오늘은 화이트 보드를 구매했습니다! 회의실에 걸 예정인데 배송비가 비싸서 고민이네요… 흠!쇼핑 결과물 중 빙산의 일각.JPG 밍케터)  자소설닷컴 디자인 철학이 궁금합니다!! 알려주세요!!말량광이) 자소설닷컴 초기에는 ‘신뢰도’에 중점을 두었어요! 아무래도 개인의 소중한 정보가 들어있는 곳이니까요~이번 시즌에 사이트를 리뉴얼 하면서 분위기를 다르게 꾸몄어요.지금의 자소설닷컴은 또래 같은 느낌이에요.“무겁고 딱딱”에서 “재미있고 유쾌”로 정리가 되었죠!밍케터)  네네 동의합니다! (끄덕끄덕)자소설닷컴 메인컬러에도 변화가 있던 것으로 아는데요! 말량광이) 가장 초반에는 노란색+회색이었구 그다음 버전에는 남색+주황색이었어요! 현재는 주황색 + 회색입니다! 밍케터)  혹시 도입해보고 싶은 색 있으신가요?말량광이) 형광색이요.(단호) 현재처럼 기능에 최적화된 사이트가 아니라면 꼭 써보고 싶어요.밍케터)  혹시 사이트 디자인을 변경하시는 과정에서 재미있었던 에피소드 있으신가요?말량광이) 자소설닷컴 초기 작업할 때는 그래픽에 빠져있었어요.유행에 따라서 그래픽을 화려하게 넣었었죠!사람들은 이쁘다 이쁘다 했는데 정작 쓰는 사람들은 많이 튄다고 느꼈었나 봐요!한 번은 사이트 사용자분 중에 이직을 준비하시던 분이 회사에서 사이트를 몰래 사용하고 있는데 '너무 눈에 띈다'라는 의견을 주셨던 적도 있습니다!밍케터)  자소설닷컴의 모든 디자인을 전적으로 담당하고 계시잖아요~? 가장 힘든 디자인과 가장 즐거운 디자인을 꼽는다면?말량광이) 재미있는 디자인은 얼마 전 진행했던 유니브 엑스포 제작물 같은 것들이요! 유니브 엑스포 제작 결과물 중 빙산의 일각.JPG 재미없는 디자인은 홈페이지 디자인이요… ㅎㅎㅎ더 이상 넣을 공간이 없는데 중간중간 기능추가가 되니까 꾸역꾸역 넣고 있습니다...ㅎㅎ 채팅도 중간에 넣었죠… ㅎㅎㅎㅎㅎ그런데 대표님이 광고를 넣는다고 하셔서 당황스러웠어요ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ최대한 티 안나게 넣어야죠! 밍케터)  디자이너님으로서 팀원들을 색으로 표현해 주세요! 간단한 이유와 함께!  문케터 문규 -> 철쭉"이상하게 발랄해요. 그냥 발랄이 아니고, 엉뚱하게 발랄해요"주케터 주연 -> 라임"상상도 할 수 없을 만큼 발랄해요. 문규씨와 주연씨의 발랄함 정도는 비슷한 것 같아요"밍케터 민지 -> 빨강"딱 부러진다는 느낌이에요. 열심히 하기도 하고, 말투나, 일 처리도 그렇구요" 데이터 초롱 -> 브라운 "차분하니 묵직한 느낌이 있어요.가벼운 스타일의 사람이 아니에요."pm 상호 -> 남색"진중하고 발랄함의 경계에 있는 사람이에요.남색이 그런색이에요" 개발 선빈 -> 겨자"말할 때 핵심을 톡톡 찌르는게 있어요.그리고 알게 모르게 웃겨요." 대표 수상 -> 초록색(feat. 대표로서)"성실한 느낌이요. 회사에서의 대표님 색은 바름, 착한 대표님, 청년의 모습이에요"대표 수상 -> 베이비 블루(feat. 남친으로서)             "애같아요. ㅎㅎ"  제2장. 취준이_제 2의 인격밍케터) 자소설닷컴의 공식 마스코트 취준이 소개해주세요!말량광이) 캐릭터 디자인을 한 번도 해본 적이 없어요 사실! 파워퍼프 걸 참조해서 그래픽으로 만들어 놨던 애를 발전시켰죠!초반엔 참 미국스러운 친구였어요.다중이 취준이.JPG 밍케터)  취준이 공식 이모티콘화에 대해서 어떻게 생각하시는지?말량광이) “~~~너무 귀찮아~~~~”농담이구요~ 사업화해서 수익을 5:5로 나누면 할 마음이 있습니다.ㅎㅎ밍케터)  취업 못 하게 생긴 취준이에게 격려의 한 마디 해주세요!말량광이) "넌 머리스타일만 바꿔도 괜찮을 거야 ^^" 사실 열심히 하는 순.진.한 취준생.바로 우리네 모습 아니것어요~밍케터)  (급 구수한 마무리다)    제3장. 입_철두철미한 피드백의 근원밍케터)  매일 문케터(=페이스북 콘텐츠 담당)에게 디자인 피드백을 해주시고 계시잖아요? 디자이너님께 문케터의 존재란?말량광이) 우선 가르쳤던 사람 중에는 제일 발전속도도 빠르고, 퀄리티 좋고, 의욕 넘치고 그렇습니다.ㅎr….그런데 고집이 있어요. 예를 들면 핑크색, //사선// 같은 것들? 밍케터)  가장 고쳐주고 싶은 점 한 가지만 꼽으신다면요?말량광이) 글자 자간 행간을 맞춰주고 싶어요. 에이 그래도 다 괜찮은 편이에요~아 ,그리고 선 두 개 쓰는거?에이 그래도 진짜 다 괜찮은 편이에요~아, 그런데 가독성도 더 높게 해주고 싶고…밍케터)  (문케터의 콘텐츠는 다 괜찮은 편이지만 핑크, 사선, 선 두개, 자간과 행간, 가독성 부분에 고칠 점이 있다.보고있나 문케터?)밍케터)  제보를 받은 부분이 있습니다. 데이터 전문가 초롱 씨에게 항상 메이크업을 해주고 싶다고 하셨다던데, 어떤 메이크업을 해주시고 싶으셨나요?말량광이) 한 번 해드린 적 있어요!초롱 씨가 아이라인을 그리고 왔는데 ‘아, 저거 더 예쁠 수 있을 것 같은데…’란 생각이 들더라구요.집에 가는 초롱씨에게 세미스모키를 해줬죠.ㅎㅎ결과적으로 맘에 들었는지 알 수 없어요...ㅎㅎ*그래서 초롱초롱초롱씨에게 제가 물어봤습니다*알 수 없는 그녀의 속마음.jpg밍케터)  디자인뿐만 아니라 마케팅 쪽에 대한 감각도 뛰어나신 것 같아요. 평소 디자인과 마케팅 분야에서 영감을 얻기 위해 어떤 노력을 하고 계신가요?말량광이) 마케팅을 배운 적은 학교 다닐 때 수업을 들은 것 외에는 없어요. 그런데 사업 시작하면서 다 같이 마케팅을 해야 하는 상황이어서 책도 읽고 타 서비스 분석을 많이 했어요. 요즘은 마케팅 동향도 파악하고, 브랜딩 쪽으로 많이 공부하고 있습니다.디자인은 계속 봐야 해요. 순수 예술 전공이라 친구들과 그림얘기도 많이 나누고, 다양한 디자인도 많이 보구요.음...디자인을 본다기보다 예술을 많이 보고 있어요. 요즘은 경계가 뚜렷한 편은 아니에요!  제4장. 발가락_인간 김상은의 삶의 애환밍케터)  발가락 부상 중이십니다. 어쩌다 이렇게 되신 것인지…말량광이) 회사의 미래가 달린 일이었어요.제 노트북에는 회사 디자인과 관련된 모든 것들이 다 들어있어요.즉, 노트북을 잃으면 모든 것을 잃는 것이죠.그런 노트북이 바닥에 떨어져 버려서…제 발을 내어주었습니다... 불가피한 선택이었고, 지금도 옳다고 믿고 있습니다.밍케터) (보고 계시나요? 대표님?) 삶의 무게_뒷모습.JPG  밍케터) 또 제보를 받은 부분이 있습니다. 신체와 관련된 에피소드가 많던데… #강릉#방충망#파괴왕 이게 다 뭐죠..?말량광이) 아?? 이거 어떻게 알았어요???? 하하하하pm 님이 얘기했어요? 하하하하하아니~ 야외에서 고기를 굽다가 옆에서 불이 났어요. 물을 뿌려야 하니까 방안으로 들어가려다가 방충망을 못 봤어요!팅겨 나왔습니다! 하하! 제5장. 속눈썹_나의 베스트 OF 베스트 부위속눈썹이요.컬링이 정말 잘 되는 속눈썹이에요.한 번 올라가면 내려가지 않아요.착한 속눈썹이죠. ㅎㅎ   결론. 앵커리어 공식질문1. 나에게 앵커리어란?언제 여기까지 왔지? 시작은 집 앞에 카페였는데, 사업을 하고 있고 회사도 컸어요.초반엔 정말 동아리의 느낌이었는데, 지금은 회사 같은 느낌이 들어요.성장이 눈에 보여서 좋습니다. 2. 자소설닷컴을 한 마디로 표현하면?취준생의 와이파이.#앵커리어 #팀원소개 #인터뷰 #팀원자랑 #기업문화 #조직문화
조회수 2965

iOS 아키텍처 패턴(MVC, MVVM, VIPER)

Overview“글 한 번 써보실래요?” 입사하고 일주일이 지나 기술 블로그에 글을 써 보라는 제안을 받았습니다. 여러 고민 끝에, 아이폰 앱(이하 ‘iOS’) 주니어 개발자로서 프로젝트 경험과, 공부한 내용을 바탕으로 글을 쓰기로 했습니다. 적절한 짤이라고 생각하는 중iOS 개발자 사전 준비iOS 개발자의 길에 들어섰다면 이미 앱 개발과 개발 언어에 대해서는 알고 있을 겁니다. 개발 프로그램 Xcode와 프로그램을 지원하는 macOS 환경, 개발 언어 Swift 또는 Objective-C, iOS 앱 프로그래밍 등 iOS 앱을 개발하기 위해 필요한 내용까지도요. 우선 ‘iOS 주니어 개발자라면 꼭 알고 있어야 할 것’들을 아래 목록과 같이 정리했습니다. 글을 읽기 전, 목록 중에서 공부가 더 필요한 것이 있다면 꼭! 검색해보세요. Xcode, macOSApple Developer ProgramSwift or Objective-CCocoa TouchUIKitAuto Layout…iOS Architecture Patterns(아키텍처 패턴)“Viper 패턴 들어보셨어요?” Viper는 단순히 ‘독사’를 의미하는 줄 알았는데, MVC 패턴와 같이 디자인 패턴의 한 종류라는 건 입사하고 나서 알게 됐습니다. MVC와 SingleTon(싱글톤) 패턴은 익숙했지만 Viper 패턴은 생소했습니다. Viper 패턴을 3일 안에 분석하겠다는 저의 부끄러운 과거를 반성합니다... ㅜㅜ검색해보니 다양한 디자인 패턴을 찾을 수 있었습니다. iOS 개발자는 앱 프로젝트를 시작하기 전 또는 이미 진행되고 있는 프로젝트에서 개발을 시작한다면 우선 어떤 패턴으로 설계되어 있는지 파악해야 합니다. 그러므로 오늘은 iOS 개발에 주로 사용되는 패턴인 MVC, MVVM, VIPER를 간단하게 살펴보겠습니다.MVCMVC 패턴Model(모델), View(뷰), Controller(컨트롤러). Model에서는 애플리케이션에서 사용할 데이터들을 관리하고, View는 유저 인터페이스를 표현 및 관리합니다. Controller는 View와 Model의 다리 역할을 해 View의 입력을 Model이 반영하고, Model의 변화를 View에 갱신하는 역할을 합니다. 하지만, 애플의 MVC 패턴은 기존 MVC 패턴과 다릅니다. View와 Controller가 강하게 연결되어 있어 View Controller가 거의 모든 일을 합니다.1) 애플 MVC 패턴MVVMMVVM 패턴Model(모델), View(뷰), ViewModel(뷰모델). Controller를 빼고 ViewModel을 추가한 패턴입니다. 여기서 View Controller가 View가 되고, ViewModel이 중간 역할을 합니다. View와 ViewModel 사이에 Binding(바인딩-연결고리)가 있습니다. ViewModel은 Model에 변화를 주고, ViewModel을 업데이트하는데 이 바인딩으로 인해 View도 업데이트됩니다. ViewModel은 View에 대해 아무것도 모르기 때문에 테스트가 쉽고 바인딩으로 인해 코드 양이 많이 줄어듭니다.import Foundation // ViewModel var gameScore: Int? var gameScoreLabel: UILabel func updateGameScoreLabel() {   var text = ""   if let gameScore = gameScore, gameScore == 100 {       text = "Excellent!!"   } else if let gameScore = gameScore, gameScore >= 90 && gameScore < 100>       text = "Great Job!"   } else if let gameScore = gameScore, gameScore < 90>       text = "Not Bad~"   }   gameScoreLabel.text = text } // View Controller gameScoreLabel.text = viewModel.updateGameScoreLabel간단한 예를 들면, 게임 점수에 따라서 textView에 보여줄 내용을 담당하는 함수 등, View에서 변화가 일어나는 함수들이 View Controller에 정의되어 사용하는 경우가 많을 겁니다. 이런 함수들이 점점 많아지면 View Controller가 Massive, 많은 코드를 담게 됩니다. 그래서 이런 함수들을 ViewModel에 옮기고, 값들을 미리 세팅한 다음에 view controller에서 viewModel을 선언하고 viewModel의 함수를 불러오는 식으로 사용하면 됩니다. 매우 간단한 예제이기 때문에 대략 viewModel과 view controller에서 어떻게 사용하는지만 보시면 될 것 같습니다. 이 패턴은 주로 Reactive programming(ReactiveCocoa, RxSwift 등)을 할 때 많이 사용하는 패턴이어서 다음에 설명하겠습니다.VIPERVIPER 패턴View(뷰), Interactor(인터렉터), Presenter(프리젠터), Entities(엔티티), Router(라우터). MV(X) 패턴과 다른 패턴으로 MVC 패턴을 대체하기 위해 만들어진 패턴입니다. 먼저 Entity는 그저 모델 객체입니다. 단순하게 어떤 모델의 속성들만 있는, Dumb Model이라고 부를 수 있습니다. 이 모델 객체를 조작하는 것이 바로 Interactor입니다. 어떤 행동(behavior or use case)에 따라서 모델 객체를 조작하는 로직이 담겨 있습니다. 작업이 완료되어도 View에 아무런 영향 없이 오로지 데이터 작업만 합니다.Presenter는 데이터를 Interactor에서 가져오고, 언제 View에 보여줄지 결정합니다. View에 보여주기 전 내용을 준비하는 로직을 담당한다고 생각하면 됩니다. View는 Presenter에서 어떻게 보여줘야 할지 요청대로 디스플레이하고, 사용자의 입력을 받으면 다시 Presenter로 넘깁니다. Presenter는 View/ViewController, Interactor, Router와 상호작용합니다. Interactor로부터 조작된 데이터를 가져오고, 디스플레이하기 위해 데이터들을 준비한 다음 View/ViewController에 보냅니다.Router 또는 Wireframe은 화면 전환(navigation information)을 담당합니다. Presenter가 “언제” 화면을 전환해야 하는지 안다면, Router는 화면 전환을 “어떻게” 하는지 알고 있습니다. Router는 화면 전환 애니메이션을 구현하고, View Controller를 생성하여 Presenter와 연결합니다.항목내용ViewPresenter의 요청대로 디스플레이하고, 사용자 입력을 Presenter로 보내는 작업을 합니다.InteractorUse case에 따라서 Entity 모델 객체를 조작하는 로직을 담고 있습니다.PresenterInteractor로부터 데이터를 가져오고, View로 보내기 위해 데이터를 준비하여 “언제” View에 보여줄지를 결정합니다.Entity모델 객체. Dumb Model.Router(Wireframe)화면 전환(navigation information)을 담당하며, Presenter가 “언제” 화면 전환해야하는지를 안다면, Wireframe은 화면 전환을 “어떻게” 하는지를 알고 있습니다.하...지금까지 설명한 내용들은 막상 프로젝트 만들어 소스를 작성하려고 하면 막막해집니다. 역할이 잘 분할되어 있기에 앱의 기능을 하나 정하여 interactor, entity, presenter, view, router 만들고, 또 앱의 기능에 따라서 다시 interactor, entity,…. 고민을 많이 해야 해서 다시 MVC 패턴으로 돌아가고 싶은 마음이 생깁니다.크게 보면 Add Module와 List Module, 그리고 공통적인 모델(데이터)을 잘 분리한 앱 구조Conclusion도대체 우리는 왜 다양한 앱 디자인 패턴을 알아야 할까요? 그 이유는 바로 앱의 특성에 따라 적합한 설계를 가지고 작업해야 하기 때문입니다. 간단한 앱 프로젝트는 쉽게 개발하고 적용할 수 있는 MVC 패턴이 더 적합합니다. 반대로 MVVM 패턴이나 VIPER 패턴을 적용하면 점점 커지는 앱 프로젝트에 잘 대응할 수 있습니다. 또는 어떤 디자인 패턴이 적용된 앱 프로젝트에 참여하면, 그 디자인 패턴에 대해 알아야 앱 구조를 이해하고 기능을 추가하거나 수정할 수 있고, 작업하는 시간을 줄일 수 있을 겁니다.가장 좋은 패턴은 사람마다 차이가 있습니다. 패턴마다 장단점도 있습니다. 다만 어떤 패턴이든지 간에 구조화되고 정리된 코드는 쉽고, 직관적입니다. 이 글 하나만으로 앱 패턴을 완벽하게 마스터할 수는 없어도 패턴의 종류와 특징을 알게 되었다면 본전입니다. 다음 편도 기대해주세요! :-) 도움말 1) View Controller에서는 Controller가 View의 life cycle(라이프 사이클)에 관여하기 때문에 View와 Controller를 분리하기 어렵습니다. 개발자들 사이에서는 Massive View Controllers라고도 불립니다. 앱을 테스트할 때, Model은 따로 분리되어 테스트를 할 수 있어도 View와 Controller는 강하게 연결되어 있기 때문에 각각 테스트하기 어렵습니다. 참고문헌 iOS Architecture Patterns: Demystifying MVC, MVP, MVVM and VIPER글김주희 사원 | R&D 개발1팀[email protected]브랜디, 오직 예쁜 옷만#브랜디 #개발문화 #개발팀 #업무환경 #인사이트 #경험공유 #iOS
조회수 1494

원하는 정보를 5초 안에 인지할 수 있게 하자

우리나라에서 웹 서비스가 아이디어에서 출발해 출시되기까지 여러 단계를 거치게 되는데 크게는 기획, 디자인, 개발의 3단계를 거치게 된다고 볼 수 있다. 각 단계별로 세분화된 역할들이 있어도 결국은 각각 기획자, 디자이너, 개발자로 분류된다. 어니스트펀드에서는 그들이 제품개발팀을 이루고 있다.어니스트펀드 제품개발팀나는 그중 개발자로 속하고 퍼블리싱 & 프론트 개발을 하고 있다. 퍼블리싱은 디자이너가 그린 디자인된 화면을 웹페이지용 프로그래밍 언어라고 할 수 있는 HTML과 CSS로 웹 문서화하는 것이고, 프론트 개발은 HTML과 CSS로 만들어진 웹문서를 사용자의 의도/목적에 따라 기능이 동작하도록(주로 데이터 입출력, 예를 들자면 네이버 검색창의 자동 완성이나, 네이버 메인의 다음 뉴스 보기 등) 기능을 개발하는 것이다.어니스트펀드에서는 팀원들이 자신의 지식/경험을 공유하는 브런치 글을 돌아가면서 쓰고 있고 나도 함께하기로 결정하였다. 내가 가치 있게 공유할 수 있는 내용이 무엇인지를 고민하면서 나의 과거 경험들을 생각해보았다.나는 2002년 웹 디자인을 시작으로 퍼블리싱 업무를 겸하다 2004년부터 퍼블리싱 업무를 본격적으로 했고 2011년부터 스타트업에 합류하면서 기획 및 프론트 개발까지 제품 개발에 있어서 서버 개발을 제외한 사용자와 접하는 모든 업무를 두루 경험하였다. 보통 디자인 전공자들은 기획파트로 전업하는 경우가 많지만 나는 프로그래밍 언어로 코드를 작성하는 것이 재미있어 기회가 닿을 때마다 업무 영역을 넓혀왔다.따라서 기획과 디자인, 퍼블리싱, 프론트 개발에 이르는 사용자와 접점이 많은 다양한 업무를 해오면서 경험한 것을 바탕으로, 서비스를 구성하고 화면을 개발하는 데 있어 도움이 되는 유용한 내용을 공유하고자 한다.1. 많을 땐 나눠서 해결하자정보가 많다는 것은 정리 정돈할 물건이 많다는 것과 비슷하게 생각할 수 있다. 물건이 목적에 맞게 정리되지 않으면 찾기 어렵고 정리해놓더라도 쉽게 어질러질 수 있다. 정보도 마찬가지로 목적에 맞게 정리가 안되어 있을 때 이해가 어렵게 되고, 이해가 어려워서 이해를 돕기 위한 불필요한 설명이 덧붙여지다보면 더욱 이해하기 어려운 결과를 낳게 된다. 그렇게 되면 결국 설명하는 말만 늘어나고 고객의 이해는 저편에 남게 된다.웹페이지가 뜨는데 1초, 훑어보는데 3초, 원하는 정보를 캐치하는데 5초로 충분해야 한다. 사용자가 원하는 정보를 5초 안에 캐치하지 못할 정보의 양이라면 정보를 나누는 것이 좋다. 2. 제목을 생략하지 말자목적으로 나누어진 정보를 사용자가 빠르게 캐치할 수 있도록 돕는 가장 중요한 요소는 바로 제목이다. 제목은 본문을 다 읽지 않아도 내용을 어느 정도 짐작할 수 있게 한다. 따라서 훒어보는데 3초라는 의미는 한 페이지의 메뉴와 제목을 훑어보는데 필요한 시간이다. 이런 제목의 중요성 때문에 제목은 직관적이어야 하고 되도록 생략하지 말아야 한다. 생략을 할 때는 제목이 없어도 이해가 가능하며, 생략된 제목을 누구나 유추할 수 있을 경우가 아니면 제목의 생략을 피하도록 한다. 위 캡쳐화면은 네이버 메인 콘텐츠의 일부를 캡처한 이미지다. 네이버 메인 중 제목이 생략된 예는 왼쪽 하단 영역인 '주제형 캐스트'뿐이다. 다른 영역들은 '뉴스스탠드', '쇼핑' 등 제목을 생략하지 않고 노출시키고 있다. 메인 페이지처럼 목적이 다양한 페이지일수록 콘텐츠의 성격을 분명히 알 수 있게 하는 제목은 짧은 시간 안에 원하는 정보를 찾는데 도움을 준다.3. 한눈에 중요 정보를 읽을 수 있게 하자그다음으로는 정보의 배치이다. 해당 정보가 발생한 원인, 결과 등 고객이 인지하는 과정에 기반한 그룹으로 나누는 것이 좋다. 정보를 배치할 때는 개별 정보의 중요도 순서와 왼쪽에서 오른쪽, 위에서 아래로 흘러가는 흐름대로 배치고 중간에 역행하는 구성이 없는 것이 좋다. 국내 대형 인터넷 쇼핑몰의 상품 목록을 보면서 위 설명을 이해할 수 있다.정보 배치에 정답이 있는 것은 아니지만 마치 정답이 있는 것처럼 상품, 제목, 할인율, 가격, 현재 판매현황에 이르는 순서대로 나열하고 있다. 이는 선두업체를 따라 흉내 낸 것이 아니라 이와 같은 구성이 인지하기에 용이하기 때문에 모두 이와 같이 구성했다고 생각한다.   4. 어렵지 않게 보이도록 하자서비스에 대한 정보를 전달하고 나서 우리가 기대하는 바는 고객이 서비스를 이해하고 우리 서비스를 이용하게 하는 것이다. 쇼핑몰에서는 주문을 받는 것일 것이고, 어니스트펀드의 경우는 대출이나 투자를 신청하는 경우이다. 서비스를 이용하게 하려면 고객의 정보를 필수적으로 입력을 받아야 한다. 어니스트펀드의 경우는 대출 및 투자에 대한 금융서비스이기 때문에 더욱 많은 정보를 고객에게 요청한다. 고객의 정보를 웹 상에서 입력을 받을 때는 "폼"이라는 일종의 정형화된 웹페이지 구성항목을 이용하게 되는데 이것은 정형화되어있기 때문에 남들과는 다른 개성적인 방식을 이용하기는 어렵다. 금융서비스의 입력 폼이 아주 쉽지는 않다는 것을 고객들은 여러 다른 서비스를 이용하면서 어느 정도 알고 있다. 그러나 고객이 중간에 포기하지 않고 제대로 서비스 이용을 완료할 수 있도록 어렵지 않게 만들어야 하고, 언제나 경쟁사의 서비스를 확인하고 경쟁사보다는 어려워 보이지 않도록 만들어야 한다.5. 순서는 반드시 지키자순서는 여러 가지가 있다. 입력해야 할 항목이 무엇인지를 알려주는 입력항목 및 입력하는 창(=입력 필드), 입력하는데 필요한 도움말, 입력해야 할 항목들을 나열하고 전송/입력완료 버튼까지의 순서가 곧 정보의 순서이다. 이 중 쉽게 놓치는 부분은 첫 입력 필드에서 입력완료 버튼까지의 여정 중에 연관이 없는 링크나 버튼을 추가하는 경우이다. 이 순서는 디자인상으로는 잘 구분되지 않을 수 있지만, 웹코드 상으로는 100% 지켜져야 하는 순서이고 디자인과 웹코드의 순서가 일치하면 가장 좋은 결과이다.'다음'과 '네이버'의 로그인 영역을 비교해보자면 두 포탈 서비스 모두 메인 검색창에서 탭키로 아이디 입력 칸까지 이동할 수 있지만, 아이디 입력 후 비밀번호를 입력하고 로그인 버튼을 누르기까지의 탭키 이동 경로가 다르다. 다음 로그인 화면네이버 로그인 화면다   음 : 아이디 입력 -> 비밀번호 입력 -> 로그인 버튼 -> 로그인 상태 유지 순서로 이동한다.네이버 : 아이디 입력 -> 비밀번호 입력 -> 로그인 상태 유지 -> IP보안 선택여부 -> 로그인이다.탭키로 입력필드를 이동하는 경우가 곧 웹코드상에서의 각 입력 필드의 순서가 되는데, '다음'과 같은 경우는 아이디/비밀번호 입력 후 로그인에 대한 옵션을 키보드로 선택하기 위해서는 로그인 버튼을 지나쳐야 선택할 수 있다. 로그인에 대한 옵션은 로그인 버튼을 선택하기 전에 나오는 것이 더 자연스럽지 않을까? 눈에 보이는 순서도 중요하지만 각 입력필드의 논리적 우선순위를 지키는 것 또한 중요하다.6. 틀린 부분을 즉시 명확하게 알려주자고객이 언제나 우리가 기대한 값을 입력해주지는 않는다. 이 경우 너무너무 명확하게도 오류가 발생한 시점에 오류가 발생한 지점을 알려주는 것이 필요하다. 10개의 입력필드가 있는데 입력완료 버튼을 누르자마자 10개 항목 구구절절이 맞고 틀리고를 알려주는 것보다는, 오류가 발생한 시점에 알려주는 것이 훨씬 인지가 빠르다. 따라서 오류 항목을 보여주어야 하는 곳은 해당 입력필드의 다음이고 전송 버튼이나 후속 작업 이전이 되는 것이다. 위 캡쳐화면은 어니스트펀드에서 대출을 받고자 할 때 이름과 생년월일을 입력하는 부분이다. 필자는 생년월일 부분에 5월 32일이라고 없는 날짜 정보를 넣었고, 이와 같은 입력 실수는 사용자가 실수를 했다는 것을 시스템이 "정확한 정보를 입력해 주세요"라고 즉시 알려주고 있어 사용자가 입력을 실수하지 않도록 돕고 있다. 웹 페이지를 보는 고객들은 아무런 도움 없이 해당 서비스를 이해하고 이용할 수 있어야 한다. 똑같은 정보라고 하더라도 어떤 순서로 어떻게 보여주느냐에 따라서 인지와 인식은 크게 개선될 수 있다. 하물며 정보까지 가공을 하게 되면 더욱 큰 개선을 이끌어 낼 수 있다. 각자가 맡고 있는 서비스에서 5초 안에 고객이 원하는 정보를 웹 페이지 내에서 바로 인지할 수 있는지를 생각해보고 아니다면 테스트해보고 개선해보자.#어니스트펀드 #개발자 #개발팀 #UX개발 #철학 #인사이트
조회수 2132

킥보드 타고 출근해요

와 여기는 완전 미국 스타트업이네요?내가 퇴근할 때 마침 회사를 방문하신 분들이 나를 보며 하시는 이야기다. 좀 더 정확히는 킥보드를 타고 엘리베이터 문을 향해 미끄러져가는 나를 보며 하시는 이야기다. (정작 미국 스타트업이 어떤지는 나는 잘 모르겠다)지난 5월 8퍼센트는 사당에서 광화문으로 천도했다. (회사 내에서는 이번 이사를 천도라고 부른다) 집에서부터 회사까지의 직선거리는 훨씬 가까워졌는데 의외로 출퇴근 시간은 크게 줄지 않았다. 지하철을 환승해야 하기 때문이기도 했고, 회사의 위치가 종각역, 광화문역, 경복궁역, 안국역의 중간 어디 즈음에 묘하게 위치하고 있기 때문이기도 했다. 이사 후 자전거, 버스, 지하철 등등 여러 가지 조합을 시도해 봤는데 썩 마음에 드는 방법이 없었다. 그러던 어느 날, 잘 닦인 광화문길을 걷다가 "우리 아들이 여기서 킥보드 타면 쌩쌩 잘 나가겠네"라는 생각을 했다. 그러다가 "어? 나도 킥보드를 타볼까?"라는 생각이 들었고 그날 충동적으로 킥보드를 질렀다. 그리고 뒤따라서 회사 동료 두 분이 킥보드를 질렀다. 아침에 킥보드를 타고 집을 나서면 온 동네 아이들이 다 쳐다본다. 아이들 입장에서는 그들이 여태까지 보아온 킥보드 중에 제일 크고 멋있기 때문에 쳐다보지 않을 수가 없다. 그래. 나도 람보르기니가 지나가면 쳐다본다. 킥보드를 타고 신설동역에 도착하면 2호선 -> 1호선 환승구간을 지나 1호선을 타고 종각역으로 향한다. 신설동역의 환승 구간은 아침에도 사람이 정말 없기에 킥보드를 타기에 좋다. 하지만 “역내에서 킥보드를 타시는 분은 당장 내려서 끌고 가주시기 바랍니다.”라는 역내 방송을 들은 이후부터는 그냥 역 밖을 돌아서 1호선 입구로 들어간다.강북의 최고 번화가 중 한 곳인 종각역으로 나오면 풍물시장이 있는 신설동역과는 완전 다른 분위기이다. 신설동역에서는 양복 입은 사람을 찾기가 정말 힘든데 종각역에서 회사로 가는 길에는 대부분의 사람들이 격식 갖춘 옷을 입고 있다. 그 사람들 사이를 반바지에 슬리퍼를 신고 배낭을 메고 킥보드를 타고 지나가면 사람들의 시선을 한 몸에 받는다. 특히 근엄하게 건물 경비를 서고 있는 친구들 옆을 쌩하고 지나갈 때면 흘깃 째려보기도 한다.재미있게도 이게 킥보드를 타는 가장 큰 즐거움이다. 첫 번째는 "흥~ 너네는 그렇게 빡빡하게 일하지? 나는 자유로운 분위기에서 일한다고~"와 같이 내가 다니는 8퍼센트에 대한 자부심이다. 그리고 두 번째는 가지 말라는 길을 꼭 가는 개구쟁이처럼 조금 비뚤어진 일을 했을 때의 쾌감이다.(킥보드를 타고 가면 제일 눈치 보이고 신나는 구간)그렇게 회사에 도착하면 자리까지 킥보드를 타고 가서 책상 옆에 킥보드를 세워둔다. 일을 하다가 간혹 을지로에서 일하는 와이프를 만나 점심을 먹을 때 혹은 근처에 있는 회사에 미팅을 갈 때에도 킥보드를 타고 간다.8퍼센트를 보면 "업무에 대한 기대치를 만족해야 한다."와 "다른 사람에게 불편함을 주지 않는다."의 제약만 지키면 회사생활에 있어 거의 모든것에 대해 자유가 주어진다. 사내에서 킥보드를 타는것도 그중 하나다. 사람들은 누워서 일할 때도 있고 맨발로도 다니고 업무시간에 안마의자도 사용한다. 이런 소소한 자유가 업무 스트레스를 줄여주고 남들과 다른 창의적인 생각을 하는데 도움을 주고 있다고 생각한다.  하지만 이렇게 즐겁게 타던 킥보드를 팔아야 할 것 같다. 처음에는 킥보드 출근을 하게 되면 환승을 하지 않고 먼 거리를 직접 이동하게 되어 운동량이 꽤 많아질 것이라 기대했는데 킥보드를 산 이후에 오히려 운동량이 줄어들었기 때문이다. 킥보드가 기대했던 것보다 크게 운동이 안 되는 이유도 있고, 너무 잘 나가는 킥보드를 산 것도 원인 중 하나겠다. 혹시 킥보드를 사고 싶으신 분은 연락 달라. 내가 중고나라에서 산 가격에서 20%를 빼서 드리겠다. 단, 직거래다.#8퍼센트 #에잇퍼센트 #자율 #수평적조직 #기업문화 #조직문화 #자유로운분위기 #스타트업문화

기업문화 엿볼 때, 더팀스

로그인

/