스토리 홈

인터뷰

피드

뉴스

조회수 2401

이메일 뉴스레터, 목적이 다르면 디자인도 다르다?

이메일 뉴스레터를 보낼 때 가장 먼저 생각해야 하는 것은 보내는 목적입니다. 왜 보내는지, 받는 사람에게 기대하는 것은 무엇인지 등에 대해 생각해봐야 하죠.스티비 뉴스레터의 첫 번째 목적은 이메일 마케팅이 대한 팁을 공유하는 것이고 두 번째 목적은 스티비를 알리는 것입니다.이메일 뉴스레터를 왜 보내시나요?이 질문이 중요한 이유는 목적에 따라 이메일 본문의 디자인이 달라지기 때문이에요. 목적에 따라 길이가 달라지고 강조해야 하는 부분도 달라집니다.이메일 뉴스레터를 보내는 목적에 따라 크게 행동 유도하기, 소식 전하기, 소개하기의 3개 유형로 나눌 수 있습니다. 훨씬 다양하지만 디자인이 어떻게 달라지는지 알아보기 위해 단순하게 나눠봤습니다.행동 요청하기하나의 메시지에 집중하여 후원이나 구매와 같은 행동을 요청합니다. 행동 요청의 꽃은 CTA(Call-To-Action) 버튼입니다. 버튼을 클릭해야 후원이나 구매를 하게 할 수 있죠. 그래서 행동을 요청하는 이메일은 버튼을 크고 선명하게 만들어 강조합니다.소식 전하기여러 콘텐츠를 엮어 회사나 단체의 소식을 주기적으로 전달합니다. 콘텐츠의 내용을 간략하게 전달하는 대표 이미지와 3–4줄의 요약 텍스트를 반복하죠. 관심있는 콘텐츠에 대한 상세한 내용을 볼 수 있는 ‘더 읽기’, ‘자세히 보기’ 등의 버튼을 넣어도 좋습니다.소개하기새로운 제품이나 기능 등 알리고 싶은 정보를 전달합니다. 제품이나 기능에 대한 헤드라인, 대표 이미지를 가장 먼저 강조하여 전달하고 세부적인 내용은 그 아래에 이미지와 텍스트를 적절히 조합하여 전달하죠. 제품 구매나 앱 다운로드를 유도하는 CTA 버튼을 넣어도 좋습니다.모든 이메일 뉴스레터를 이 3개 유형으로 설명할 수 있는 건 아닙니다. 스티비 뉴스레터도 소개하기에 가깝긴 하지만 딱 들어맞진 않아요. 이메일 마케팅이라는 제한된 주제를 자세히 다루다 보니, 위에서 소개한 이메일들과 달리 텍스트나 이미지의 양이 많아지곤 합니다.보내고 계신 이메일 뉴스레터가 어떤 유형에 해당하는지, 목적에 맞게 디자인 된 템플릿을 사용하고 있는지 한 번 확인해보세요.참고: Really Good Emails#슬로워크 #스티비 #마케팅 #마케터 #인사이트 #꿀팁
조회수 4960

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/#조이코퍼레이션 #개발팀 #개발자 #개발환경 #업무환경 #인사이트 #경험공유
조회수 1118

테이블이냐, 컬렉션이냐, 그것이 문제로다!(KOR)

편집자 주 외래어 표기법에 따르면 ‘원어에서 띄어 쓴 말은 띄어 쓴 대로 한글 표기를 하되, 붙여 쓸 수도 있다.’고 규정하고 있다.(제3장 제1절 영어의 표기, 제10항과, 컴퓨터 전문어, 전기 전문어 등) 즉 ‘원칙’과 ‘허용’이 모두 가능하다는 의미다. 이를 바탕으로 여러 표기 용례를 참고한 결과, TableView는 ‘테이블뷰(원칙)’로 표기해야 하나, 본문에서는 독자의 가독성을 높이기 위해 ‘테이블 뷰(허용)’로 표기한다. 응용하여, CollectionView는 ‘컬렉션 뷰’로, TableViewCell은 ‘테이블 뷰 셀’ 등으로 띄어 쓴다. Overview앱에서 데이터를 사용자에게 보여줄 땐 여러 가지의 모습으로 나타납니다. 설정 앱처럼 목록으로 보여줄 때도 있고, 사진 앱처럼 그리드(grid) 형식으로 보여줄 때도 있습니다. 이처럼 데이터를 보여줄 때 많이 사용되는 뷰는 테이블 뷰(UITableView) 또는 컬렉션 뷰(UICollectionView)입니다. 각자 특징이 있기 때문에 앱의 성격에 따라 적절한 뷰를 사용해야 합니다. 왜냐하면 목록을 보여주는 디자인을 바꿀 때, 다시 개발해야 하는 수고를 덜 수 있기 때문입니다. 이번 글에선 각각의 뷰를 간략하게 알아보겠습니다. 목록 형식의 설정 앱과 그리드 형식의 사진 앱 스크린샷테이블 뷰(UITableView)단일 열에 배열된 행을 사용해 데이터를 표시하는 뷰입니다. 수직 스크롤만 가능하며, 테이블의 개별 항목을 구성하는 셀은 테이블 뷰 셀(UITableViewCell) 객체입니다. 테이블 뷰는 이 객체들을 이용해 테이블에 표시되는 행을 그립니다. 여러 행은 하나의 섹션 안에 구성될 수 있으며, 각 섹션은 헤더(header)와 푸터(footer)를 가질 수 있습니다. 섹션과 행은 인덱스 번호로 구별하는데, 번호는 0부터 시작합니다. 테이블 뷰는 plain과 grouped 스타일 중 한 가지의 스타일을 가질 수 있습니다. Plain 스타일은 보통 목록 스타일입니다. 섹션의 헤더와 푸터는 섹션 분리기(inline separators)로 표시되고 스크롤을 할 때 해당 섹션 안에 있는 콘텐츠 위에 나타납니다. Grouped 스타일은 시각적으로 뚜렷한 행 그룹을 표시하는 섹션이 있습니다. 섹션의 헤더와 푸터는 콘텐츠 위에 나타나지 않습니다. 아래와 같은 사진을 보시면 확연히 차이를 볼 수 있습니다. plain 스타일의 연락처 앱과 grouped 스타일의 설정 앱테이블 뷰의 많은 메소드들은 인덱스패스(NSIndexPath) 객체를 매개변수 또는 리턴 값으로 사용합니다. 테이블 뷰는 해당하는 행의 색인 인덱스와 섹션 인덱스 값을 가져올 수 있게 인덱스패스의 범주를 선언합니다. 또한 색인 인덱스와 섹션 인덱스 값을 가지고 인덱스패스를 만들 수 있습니다. 특히 여러 섹션이 있는 테이블 뷰는 섹션 인덱스 값이 반드시 있어야 행의 인덱스 번호로 구별할 수 있습니다.override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> AttractionTableViewCell {         // Table view cells are reused and should be dequeued using a cell identifier.         let cellIdentifier = "AttractionTableViewCell"              guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? AttractionTableViewCell else {             fatalError("The dequeued cell is not an instance of AttractionTableViewCell.")         }                 let attraction = attractions[indexPath.row]                 cell.attractionLabel.text = "\(indexPath.row). \(attraction.nameWithDescription)"         cell.attractionImage.image = attraction.photo                 cell.attractionImage.tag = indexPath.row                 attraction.indexPath = indexPath                 ...                 return cell     } 위의 코드는 데이터 소스(data source) 메소드로, 테이블 뷰의 특정한 위치에 셀을 추가합니다. 다시 말해, 이 메소드는 테이블 뷰가 ‘표시할 새로운 셀이 필요할 때마다’ 특정 행에 노출할 정보가 있는 셀을 만들고 리턴하는 걸 말합니다. 매개변수로 필요한 셀 객체의 행을 가리키는 indexPath 값을 전달합니다. 그리고 indexPath의 row 값을 이용해서 attraction이라는 배열 인덱스로 활용하고, 셀에 표시할 정보들을 설정합니다. 여기서 attraction 배열은 관광 명소들의 정보들이 담고 있는 배열인데, 1행은 첫 번째로 저장한 관광 명소, 2행은 두 번째로 저장한 관광 명소 등 순서대로 설정하도록 indexPath.row 값을 이용하는 것입니다. indexPath의 row 값과 배열의 인덱스 값은 0부터 시작하기 때문입니다. 해당 예제는 섹션이 1인 경우이기 때문에 섹션 인덱스 값이 없지만, 섹션이 여러 개 있다면 반드시 섹션 인덱스 값을 이용해서 설정해야 합니다.테이블 뷰 객체는 데이터 소스(data source)와 델리게이트(delegate)가 필요합니다. 데이터 소스는 UITableViewDataSource 프로토콜을 구현해야 하고, 델리게이트는 UITableViewDelegate 프로토콜을 구현해야합니다. 데이터 소스는 테이블 뷰가 테이블을 만들 때 필요한 정보를 제공하고 테이블의 행이 추가, 삭제 또는 재정렬할 때 데이터 모델을 관리합니다. 델리게이트는 화면에 보이는 모습과 행동을 담당합니다. 예를 들어 표시할 행의 수, 사용자가 특정 행을 터치했을 때, 행의 재정렬 등과 같은 것입니다.override func numberOfSections(in tableView: UITableView) -> Int {         // #warning Incomplete implementation, return the number of sections         return 1     }      override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {         // #warning Incomplete implementation, return the number of rows         return attractions.count     } 위의 두 소스는 데이터 소스가 필수적으로 구현해야 하는 메소드입니다. 하나는 섹션의 개수를 리턴하고, 또 하나는 한 섹션 안에 있는 행의 개수를 리턴합니다.테이블 뷰는 수정 모드에서 행을 추가, 삭제, 재정렬할 수 있습니다. 각 행은 테이블 뷰 셀에 연관된 editingStyle에 따라서 추가, 삭제, 재정렬을 할 수 있는데, 예를 들어 editingStyle이 insert라면 추가하는 메소드를 실행하고, delete면 삭제하는 메소드를 실행합니다. 행의 showsReorderControl 속성이 true라면, 재정렬하는 메소드를 실행할 수 있습니다.// Override to support editing the table view.     override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {         if editingStyle == .delete {             // Delete the row from the data source             ...                 // delete rows and attractions and reload datas             attractions.remove(at: indexPath.row)             tableView.deleteRows(at: [indexPath], with: .middle)             tableView.reloadData()         } else if editingStyle == .insert {             // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view         }     } 위 소스는 editingStyle이 delete일 때 셀을 삭제하고 테이블 뷰를 다시 로드하는 기능을 구현한 것입니다.테이블 뷰를 만드는 가장 쉽고 권장하는 방법은 바로 스토리보드에서 테이블뷰컨트롤러(UITableViewController)를 이용해서 만드는 겁니다. 런타임에 테이블뷰컨트롤러는 테이블 뷰를 만들고 델리게이트와 데이터 소스를 자기 자신으로 할당합니다.컬렉션 뷰(UICollectionView)컬렉션 뷰는 테이블 뷰에서 할 수 있는 모든 것을 할 수 있습니다. 섹션을 가질 수 있고, 인덱스패스 값을 이용해서 셀을 구별합니다. 이 셀들은 컬렉션 뷰 셀(UICollectionViewCell)의 서브 클래스이며 데이터 소스(UICollectionViewDataSource)와 델리게이트(UICollectionViewDelegate)가 필요합니다. 셀을 추가, 삭제, 재정렬하는 기능도 구현할 수 있습니다. 그렇다면 컬렉션 뷰와 테이블 뷰를 구분하는 특징은 무엇일까요? 바로 레이아웃입니다. 컬렉션 뷰는 여러 개의 열과 행으로 셀을 표현할 수 있습니다. 예를 들어, 그리드(grid) 형태로 아이템의 목록을 보여줄 수 있습니다. 그래서 수직 스크롤뿐만 아니라 수평 스크롤도 할 수 있습니다.스토리보드에서 디자인한 테이블 뷰 셀과 컬렉션 뷰 셀위 스크린샷에서 테이블 뷰와 컬렉션 뷰의 가장 큰 차이는 바로 셀입니다. 테이블 뷰에서는 하나의 열에 여러 행을 표시하는 형식이기 때문에, 셀의 모습을 행에 맞춰서 디자인합니다. 하지만 컬렉션 뷰는 열과 행을 만들 수 있기 때문에, 꼭 행의 모습이 아니더라도 다양한 모습으로 셀을 디자인할 수 있습니다. 컬렉션 뷰 셀의 가장 큰 특징이기도 하죠. 위처럼 셀을 디자인하고 앱을 실행하면 아래의 화면이 나타납니다.테이블 뷰와 컬렉션 뷰의 앱 화면 차이또한 컬렉션 뷰는 레이아웃 객체가 있습니다. 기존에 제공하는 flow layout을 사용해도 괜찮지만, 본인이 원하는 레이아웃 모양을 custom layout을 만들어서 사용합니다. 이를 담당하는 프로토콜은 UICollectionViewDelegateFlowLayout 입니다.func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {         let fullWidth = collectionView.frame.size.width - (self.CGFLOAT_INSET_WIDTH * 3) - (self.CGFLOAT_ITEMSPACING * 3)         let width = fullWidth/3         return CGSize(width: width, height: width + self.CGFLOAT_HEIGHT_ATTRACTIONCELL_DEFAULT)     }         func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {         return UIEdgeInsetsMake(self.CGFLOAT_LINESPACING_VERTICAL, self.CGFLOAT_INSET_WIDTH, self.CGFLOAT_LINESPACING_VERTICAL, self.CGFLOAT_INSET_WIDTH)     } 위 소스에서 collectionView(:layout:sizeForItemAt:) 메소드는 해당하는 셀의 사이즈를 설정하고, collectionView(:layout:insetForSectionAt:) 메소드는 섹션 안에 margin을 설정합니다.여러 모양의 셀을 이루어 하나의 뷰 화면을 구현할 수도 있습니다. 섹션마다 셀을 만들어 각각 다른 모습의 셀을 설정하고, 한 화면에 다양한 모습의 셀을 가진 뷰를 만드는 것입니다. 예를 들어, 헤더, 메뉴, 본문, 푸터 각각 셀을 만들어서 원하는 모양으로 만들고, 하나의 뷰 컨트롤러에 셀을 조합해서 한 화면에 나타나게 할 수 있습니다. 이 방법을 사용하면 자주 사용하는 셀을 재활용할 수 있습니다. 똑같은 헤더와 푸터 셀을 여러 번 만들지 않고 기존의 셀을 재활용하면 시간도 절약하고, 훨씬 깔끔한 소스를 만들 수 있을 겁니다.브랜디 앱 스크린샷 일부위의 스크린샷처럼 여러 화면에서 보여줘야 할 똑같은 뷰가 있을 때, 셀 xib 파일을 만들고 컬렉션 뷰에서 셀을 섹션별로 설정 및 사용하면 재활용하기 좋습니다.Conclusion지금까지 테이블 뷰와 컬렉션 뷰의 특징들을 살펴봤습니다. 한마디로 정리하면 테이블 뷰는 가장 간단한 목록을 만들 수 있습니다. 컬렉션 뷰는 다양한 모습의 목록으로 커스터마이징(Customizing)할 수 있습니다.그렇다면 우리는 어떤 것을 선택해야 할까요? 구현할 목록이 얼마나 복잡한지에 따라 선택은 달라집니다. 테이블 뷰는 간단하고 보편적인 목록을 만듭니다. 반면에 컬렉션 뷰는 특정한 모습의 목록을 만들 수 있습니다. 그래서 테이블 뷰는 목록이 간단하고 디자인 변경이 없을 때만 사용하길 권장합니다. 하지만 나중에 디자인이 바뀔 수도 있다면 컬렉션 뷰를 사용하는게 더 좋겠죠.Simple is the best! 간단하게 구현할 수 있는 건 테이블 뷰를 사용합시다. 테이블 뷰에서 구현하기 힘들다면 컬렉션 뷰를 이용해 개성 있는 목록을 마음껏 만들어봅시다!참고UITableView - UIKit | Apple Developer DocumentationUICollectionView - UIKit | Apple Developer Documentation 글김주희 사원 | R&D 개발1팀[email protected]브랜디, 오직 예쁜 옷만#브랜디 #개발문화 #개발팀 #업무환경 #인사이트 #경험공유
조회수 767

비트윈이 사용자를 분석하는 방법 - VCNC Engineering Blog

 빅데이터분석이 최근 이슈가 되면서 관심이 많으실 것 같습니다. 비트윈팀도 데이터 분석 참 좋아하는데요, 저희도 한번 해보았습니다. 이번 포스팅에서는 비트윈팀의 데이터 분석 노하우를 아낌없이 공유해드립니다.왜 사용자의 데이터를 분석해야하는가요?비트윈같은 서비스는 초기 단계에는 앱을 기획하고 만들어낸 팀에 아이디어에 의해 계속해서 발전하고, 유지됩니다. 하지만 기능이 점점 다양해지고 사용자가 점점 많아지면서 사용자들의 앱 사용패턴을 점점 예측하기 어려워집니다. 게다가 비트윈은 해외 진출을 구상 중이었는데, 개인 혹은 팀의 아이디어만으로 해외에서의 사용패턴을 정확히 알기는 어려웠습니다.이런 시점에 필요한 것이 사용자 분석입니다.사용자들의 사용패턴을 분석해 보는 방법은 여러 가지가 있습니다. 초기에 해볼 수 있는 가장 직관적이고 쉬운 것은 비트윈을 사용하는 자기 자신의 사용 패턴을 돌아보고 분석해보는 것입니다. 또 친구들이나 익명 사용자들의 사용패턴을 물어보거나, 관찰하는 방법들이 있습니다. 이런 방법은 매우 효과적이고 많은 아이디어를 주지만 여러 가지 한계점이 있습니다. 지역적, 시간적인 한계 등이 그것입니다.그래서 택할 수 있는 방법이 실제로 사용자들의 행동을 컴퓨터로 수집해서 분석하는 것입니다. 말 그대로 '데이터 분석'을 하게 되는 것입니다.무엇을 분석할지 알아야 합니다데이터로 분석할 수 있는 것은 무궁무진합니다만, 먼저 데이터가 있어야합니다. 비트윈과 같이 서버와 통신하는 앱은 사용자들이 서버에 요청을 할 때마다 엑세스 로그를 남기게 됩니다. 이 엑세스 로그는 사용자들의 사용패턴을 고스란히 담고 있어, 소중한 데이터가 됩니다.엑세스 로그 분석은 전혀 어렵지 않습니다. 엑세스 로그에서 특정 행동에 해당하는 내용을 세는 것만으로도 여러 가지 유의미한 값을 얻어낼 수 있습니다. 하루 동안의 로그를 한줄씩 읽어서 메시지에 관련된 로그를 카운트하면 그날의 메시지 전송 건수를 얻을 수 있는 것입니다. (참 쉽죠?)엑세스로그에서 가입, 메시지, 사진, 메모 등 기본적인 내용에 해당하는 것들을 카운트하는 것만으로도 꽤 자세하게 앱 전체 사용자들의 전반적인 사용통계를 얻어낼 수 있습니다. 이제 해당 데이터를 엑셀에 넣어서 차트를 그려보면, 사용 통계에 대한 그럴싸한 차트가 그려집니다.엑세스 로그 분석에 성공했다면 좀 더 다양한 분석을 해볼 수 있을 텐데요, 사용자별 행동패턴 분석이나, 나라별, 혹은 아이폰, 안드로이드 디바이스별 분석 등 다양한 분석을 시도해볼 수 있습니다. 분석을 하기 전에 중요한 것은 무엇이 궁금한지, 어떻게 궁금한 데이터를 모을지 아이디어를 먼저 내는 것입니다. 여러 예제들을 찾아보며 공부해보면, 금방 좋은 아이디어를 얻으실 수 있을 겁니다.물론 여기서 중요한것은 개인정보나 사생활의 보호입니다. 로그가 유출되었을때의 보안 문제 뿐 아니라, 데이터 분석팀에게조차 개인정보가 노출된다면 곤란합니다. 이 문제에 저희가 어떻게 대처하고 있는지는 글 뒷부분에 자세히 알려드리겠습니다.특정 기술에 구애받지 말고 다양하게 구현해봅시다처음에는 로그 파일을 돌며 간단한 string을 검사하는 스크립트와 엑셀로도 충분했지만, 점점 복잡한 분석을 할수록 다양한 기술이 필요해집니다. 비트윈 사용자 분석도 점점 다양해지고 복잡해지면서 여러 가지 기술들을 사용하고 있습니다.비트윈 사용자 분석은 처음에는 6줄짜리 간단한 shell script에서 시작되었습니다.cat 2011-10-31.log | grep /messages | grep POST | wc -l cat 2011-10-31.log | grep /photos | grep POST | wc -l cat 2011-10-31.log | grep /memos | grep POST | wc -l cat 2011-10-31.log | grep /like | grep POST | wc -l cat 2011-10-31.log | grep SIGN | wc -l cat 2011-10-31.log | grep REL | grep POST | wc -l 이런 스크립트를 만들어서 결과를 이메일로 공유하거나, 엑셀로 만들어 놓곤 했습니다.여기에 비트윈 분석은 조금 더 발전하여, 로그파일을 쿼리하여 Map Reduce 작업이 가능한 Hive를 사용하고, PHP로 통계 웹사이트를 만들어 차트를 그리기 시작했습니다. 이 방식은 처음에는 매우 편리했지만 차츰 쿼리만으로 원하는 결과를 얻기가 힘든 다소 복잡한 분석이 필요해지기 시작했습니다.현재는 모든 로그를 분산 데이터베이스인 HBase에 Date Key와 User Key로 넣고, 코드 생산성이 좋은 Scala로 직접 Map Reduce코드를 작성해서 데이터들을 분석하고 있습니다. 그래서 충분히 scalable하면서도 꽤 편리하게 이용할 수 있는 데이터베이스를 활용하고, Scala의 좋은 expression을 활용하여 짧고 유지보수나 확장이 쉬운 코드로 분석을 수행하면서도 Java와 호환되는 Scala의 특성을 이용하여 Map Reduce 코드 작성을 효과적으로 하고 있습니다. 이렇게 분석한 데이터는 MySQL에 넣어서 2차로 가공하고, Scala Web Framework인 Play Framework을 이용하여 분석 사이트를 구축하고 D3 Chart를 이용해서 Visualize하고 있습니다. 이렇게 함으로써 편리한 MySQL 쿼리 사용의 장점을 취하고 멋진 차트를 효과적으로 그려낼 수 있습니다.좋은 Visualization은 멋질 뿐만 아니라 손쉽게 아이디어를 공유할 수 있게 해줍니다.앞으로는 더 빠른 성능을 위해 Hive를 더 잘 사용해보거나, Elastic Search같은 index engine들을 사용해 볼 계획도 가지고 있습니다. 또한 End point들에서 직접 성능을 측정하여 중앙으로 모아서 분석해보려는 생각도 가지고 있습니다.기술을 선택함에 있어서 정답은 없는 거 같습니다. 널리쓰이는 MySQL같이 scalability가 좀 떨어지지만, 다양한 쿼리로 높은 생산성을 낼 수 있는 데이터베이스도 있고, HBase같이 scalability가 좋지만, 데이터를 저장하는 형태에 제한이 있어 생산성이 조금 떨어지는 데이터베이스도 있습니다. 저희는 앞서 소개드렸듯이 이 두 가지를 모두 혼용하여 사용하고 있습니다. 각자가 마주한 상황에 맞게, 또 각자가 익숙한 기술에 맞게 설계하고, 사용해보면 됩니다.개인정보 보호는 철저하게빅데이터 분석이 개인정보를 침해하는 빅 브라더가 될 수 있다는 우려들이 나오고 있습니다. 300만이 넘는 커플들의 비밀스러운 일기를 담고 있는 비트윈 서비스는 당연하게도 모든 업무를 진행하는 데 있어 보안과 개인정보를 최우선으로 하고 있습니다. 데이터 분석에서도 분석할 수 있는 내용을 상당히 제한받더라도, 예외 없이 그 원칙을 지키고 있습니다.비트윈의 API서버는 AWS클라우드에서 운영되고 있는데, 사용료가 상당히 비싸기 때문에 큰 컴퓨팅 파워를 사용해야 하는 데이터분석까지 AWS에서 하기엔 좀 부담이 되었습니다. 그래서 PC급 컴퓨터 여러 대를 구입하여 사무실 구석에 쌓아놓고 사용하고 있습니다.하지만 문제는 보안이었습니다. AWS의 비트윈 API서버는 다중으로 보안이 유지되고 있지만, 사무실에 있는 서버에 사용자들의 개인정보를 담아둘 수는 없는 일이었습니다. SECO*이 사무실을 지켜주고 있긴 하지만 보안회사에 고객들의 소중한 개인정보를 맡기고 안심할 수는 없으니까요. 그리고 설사 보안 문제가 잘 해결된다고 해도, 분석을 수행하는 비트윈 데이터분석팀원에 개인정보 혹은 사생활이 노출된다면 그 또한 문제라고 생각하였습니다.그래서 저희가 생각해낸 방법은 '익명화'입니다. Access Log들을 저장할 때 사용자의 아이디를 전부 단방향 salted-hash하여 누구인지 알 수 없게 만들었습니다. (물론 salt key는 데이터 분석팀은 알 수 없습니다.) 그리고 애초에 Access Log에는 '어떤 사람'이 '50글자짜리 메시지를 보냈다' 라던가, '사진을 올렸다' 정도만 기록이 되기 때문에, 이를 통계적으로 분석하는 것은 유의미하지만, 사적인 정보를 담고 있지는 않습니다.익명화되어 처리되고 있는 로그는 개인정보는 거의 담고 있지 않으면서도, 유익한 분석 결과를 만들어줍니다.이런식으로 운영을 한다면 데이터 분석팀에서도 사적인 정보(예: 메시지 내용)에 대해서는 접근할 수 없기 때문에, 회원들의 소중한 개인정보와 사생활을 지킬 수 있습니다. 어떤 분석을 수행할 때 언제나 비트윈팀은 언제나 보안과 사생활 보호의 원칙을 지킬 수 있는 범위에서만 진행하고 있습니다.아이디어의 공유, 그리고 액션아이템이 무엇보다도 중요합니다데이터 분석의 목표가 무엇인지, 왜 해야 하는지 생각해보면, 무엇을 해야 하는지 알 수 있습니다. 바로 분석으로부터 얻은 아이디어를 공유하고 액션아이템을 정하고 실천하는 것입니다.데이터를 visualization하는것이 중요한 이유가 여기에 있습니다. 보기 좋은 떡이 먹기도 좋다는 말이 있듯이, 데이터도 먹기 좋아야 합니다. 여러 사람이 쉽게 이해할 수 있어야 아이디어를 공유하고 의사결정을 내리기가 수월하기 때문입니다.민트&베리 사용량 분석. 연인들이 쓰는 앱이라 사랑표현이 인기가 많군요. 디자인팀이 이런 자료를 참고하여 이후 디자인 아이디어를 내는 데 도움이 되면 좋겠죠?비트윈팀은 매번 데이터 분석 미팅을 진행하고 나면 액션아이템을 정하고 실천합니다. 저희가 어떤 식으로 의사결정을 내리고 행동하는지에 대해서는 비트윈 팀블로그의 VCNC는 데이터분석에 기반해 어떤 결정을 내렸나 포스팅을 보시면 도움이 되실 것 같네요.맺으며이번 포스팅에서는 비트윈팀이 어떻게 무엇을 분석하는지 간단하게 다뤄봤습니다. 의견이나 참견 모두 환영이니 댓글 많이 남겨주세요! 다음번 포스팅엔 기술적인 부분에 대해 좀 더 자세하게 다뤄보도록 하겠습니다.
조회수 1320

스켈티인터뷰 / 스켈터랩스의 흥부자 Christi를 만나보세요:)

Editor. 스켈터랩스에서는 배경이 모두 다른 다양한 멤버들이 함께 모여 최고의 머신 인텔리전스 개발을 향해 힘껏 나아가고 있습니다. 스켈터랩스의 식구들, Skeltie를 소개하는 시간을 통해 우리의 일상과 혁신을 만들어가는 과정을 들어보세요! 스켈터랩스의 흥부자 Christi를 만나보세요:)사진1. 스켈터랩스의 PM, ChristiChristi의 인터뷰는 2개 파트로 나뉘어져 있습니다. 에서는 6월 출시를 앞두고 있는 Cue 어플리케이션 서비스와 직무에 대한 내용을 담았습니다. 을 아직 읽지 않은 독자들이라면, 먼저 ‘스켈티 인터뷰 w.Christi’을 읽고 오시기를 추천드립니다.PART2. About ChristiQ. 간단하게 자기소개를 한번 더 부탁한다.A. 한국어 이름은 정민정, 하지만 회사에서는 Christi로 통한다. 스켈터랩스에서 Product Manager로 일하고 있다. Iris(스켈터랩스 프로젝트 중 하나. 사용자를 학습하여 개인화 추천 서비스를 제공한다. 자세한 내용이 궁금하다면 PART1 인터뷰를 읽어보자)의 PM으로서, 현재는 곧 출시 예정인 Cue를 위해 열정을 불태우는 중이다.Q. 전공이 그래픽 디자인이라 들었다. 어떻게 PM을 맡게 되었는지 신기하다.A. 스켈터랩스에 입사할 때는 UI/UX 디자이너로 인터뷰를 보았다. 그런데 당시 인터뷰어였던 PM께서 PM으로 역할을 맡아보는 건 어떻냐고 제의하시더라. 디자인을 할 때도 항상 ‘왜'라는 질문에 대해 대답을 찾아가며 작업을 진행하는 것을 즐겼는데, PM은 정말 ‘무엇을(What)'에 대해 고민하고, ‘왜(Why)’라는 질문의 답변을 찾아가는 직무더라. 덕분에 나의 직무에 만족해하며 일을 진행하고 있다.Q. PM이라는 직무가 어찌보면 참 모호한 것 같다. 구체적으로 어떤일을 하는지 말해줄 수 있나.A. 나 또한 어려웠다. 처음에는 직접 새로운 Feature를 개발해야한다고 생각했다. 그러나 일을 하다보니 PM의 업무는 아이디어를 창출하기도 하지만, 팀원들이 아이디어를 낼 수 있도록 복돋우고 이를 한번 더 정리하여 발전시키는 일종의 큐레이터(Curator) 역할에 가까웠다. 더군다나 우리 회사는 ‘Innovation or die’라는 슬로건(Slogan)에서 느껴지듯, 혁신적인 제품과 서비스 개발을 추구하지 않나. 참고할 수 있는 선례가 없는 경우가 다수이기 때문에, 팀원들이 생각하는 이상적인 서비스를 단계별로 상상하고, 구체화 하는 작업이 중요하다. 그래서 Ideation부터 새로운 Feature를 구체화하는 과정에 많은 팀원들의 다양한 의견을 모을 수 있는 중간다리 역할을 하는 것이 제일 큰 업무라고 생각한다. 물론 상표를 등록한다거나, 개인정보보호 정책을 확인하고, UX도 함께 고민하는 다양한 업무가 병행되어야 한다.Q. 스켈터랩스를 어떻게 알고 입사했는지, Christi가 입사했을 당시에는 접하기가 쉽지 않았을 것 같다.A. 예전에 구글캠퍼스 서울에서 지인을 만났는데, 그를 통해 스켈터랩스의 대표인 Ted를 알게되었다. 스켈터랩스에서는 뛰어난 기술력을 바탕으로 새로운 제품을 내 손으로 직접 구상하고 만들어 볼 수 있다는 것이 매력적이었다. 특히 현재 우리 팀은 상황 정보 인식(Context Recognition)을 바탕으로 ‘Life improving moment’를 만드는 데 집중하고 있는데, 스켈터랩스에서 개발하는 기술이 내 삶과 주변을 어떻게 바꿀지 기대하고 있다.Q. 스켈터랩스의 조직문화는 어떻게 생각하는지 알고싶다. 예민한 질문이라면 오프더레코드도 가능하다.A. 조직문화에 매우 만족하고있다. 무엇보다 ‘우리는 이러한 조직문화니 우리 회사에서 함께 이 문화를 공유해야해'와 같은 주입적인 방식이 아니라, ‘함께 조직문화를 만들어간다'라는 접근이 좋다.Q. 조직문화를 만들어 간다니, 말은 좋지만 실천이 어려운 얘기 아닌가?A. 실제로 나는 ‘Culture Committee’ 멤버로 속해있다. Culture Committee는 사내 모든 직원의 의견을 수렴하고, 이를 반영하여 스켈터랩스만의 문화를 만들어 조직의 신뢰와 성장에 기여하는 조직이다. 이곳에서 우리는 사내에서 실행할만한 다양한 이벤트를 기획한다. 예를 들어 일주일에 한 번 다른 팀원과 함께 커피를 마시며 서로를 알아가는 ‘커피믹스' 제도 또한 Culture Committee 기획의 결과물이다. 우리는 커피믹스 시간 동안 업무에서 벗어나 Freshen up하며 함께 일하는 동료가 어떤 사람인지, 다른 프로젝트는 어떻게 진행되고 있는지도 알 수 있다. 이렇듯 직접 기획한 제도가 바로 반영되기 때문에, ‘우리가 직접 조직문화를 만든다'라고 얘기할 수 있을 것 같다.사진2. Christi의 '커피믹스' 인증샷, 커피믹스는 매주 1회 시행되고 있다Q. 스켈터랩스의 다른 이벤트도 소개해줄 수 있나.A. 많은 이벤트들이 있지만 내가 가장 좋아하는 제도는 Demo Days와 Inno Week다. 기존 업무에서 벗어나 일주일 동안 평소에 생각해놓은 아이디어를 함께 발전시키고 실제로 제품까지 완성시켜보는 주간이다. 이 기간만큼은 너도 나도 숨겨두었던 창의적이고 독특한 아이디어를 마음껏 풀어놓고, 발산할 수 있다. 실제로 Doodly 앱(증강현실에서 3D 브러쉬로 doodling하여 AR 앱, 스켈터랩스의 실험작이다. App store에서 다운 가능하다)은 작년 Demo Days의 아이디어를 기반으로 만든 결과물이다.Q. 스켈터랩스의 조직문화 이야기를 조금 더 듣고싶다. Christi가 가장 애정하는 우리만의 조직문화가 있다면.회사란 단순히 업무를 수행하는 곳이 아니라 개인의 역량을 키우고 성장시킬 수 있는 환경이어야 한다고 생각한다. 이런 나의 관점으로 살펴볼 때 스켈터랩스는 조직원 한 사람 한 사람을 단순한 직원이 아니라 성장 동력으로 여기고 지원을 아끼지 않는다. 가령 내가 PM을 수행하는 것도 개인적으로 큰 기회다. PM으로서의 경험이 전무함에도 불구하고 업무를 수행하며 일을 배워나가고 있다. 이렇듯 개인의 성장을 바탕으로 조직이 함께 발전하는 문화라는 점이 우리의 가장 큰 자랑 아닐까?Q. 진지한 질문을 한 번 던져보고 싶다. Christi가 스켈터랩스에서 가지고 있는 꿈이 있다면.A. 정말 사람 중심의, 사람을 위한 제품을 만들고 싶다. 요즘 AI Phobia와 같은 단어도 유행하지 않았나. 그러나 나는 좋은 기술이란 사용자가 더 편리하고 윤택한 일상을 살게 만드는 역할을 수행해야한다고 믿는다. 인공지능이 직업을 사라지게 만든다지만, 한편으로는 더욱 상위 레벨에서 인간만의 능력을 발휘할 수 있는 다양한 직업도 생기고있지 않은가. 인간 중심의 따뜻한 제품으로 나의 삶과 우리의 일상을 조금씩 바꾸어보고 싶다.Q. 요즘 스켈터랩스의 입사를 원하는 입사희망자들이 점점 늘고있다고 들었다. 이들에게 전하고 싶은 말이 있는지.A. 내가 특이하다고 생각하는 사람들은 꼭 입사하면 좋겠다. 다양한 사람들이 있어야만 다양한 아이디어가 나오고, 재미있게 일할 수 있지 않겠나. 물론 우리 회사가 다양한 가치관을 포용해주는 회사라는 점도 이들에게 이점이라고 생각한다. 새로운 것을 좋아하는 사람, 만드는 것을 즐기는 사람이라면 분명 스켈터랩스를 재미있게 다닐 수 있을 것이다. 그래서 우리의 문화에 이런 말이 있지 않겠나. ‘Innovate or Die’라고.#스켈터랩스 #사무실풍경 #업무환경 #사내복지 #기업문화 #팀원인터뷰 #팀원소개 #팀원자랑
조회수 1014

"안정적인 서비스 운영으로 더 나은 코인원의 가치를 고객들에게 전달합니다:D" - 플랫폼셀 김영민

하나의 서비스를 출시하고 운영하기까지의 여정을 '출산과 육아'에 비유하곤 합니다. 아이를 건강하게 낳고, 올바르게 성장할 수 있도록 하기 위한 육아법은 모든 부모들의 고민일거에요. 이는 서비스를 출시한 엔지니어들에게도 마찬가지입니다. 심혈을 기울여 서비스를 개발하고, 이후 서비스가 고객들에게 안정적으로 제공될 수 있도록 유지하고 끊임없이 개선하죠.오늘은 코인원의 서비스를 건강하게 키워나가고 있는 코인원 플랫폼셀 영민님과 이야기를 나눠봤습니다. 365일 밤낮없이 운영되는 암호화폐 거래소 서비스 운영은 어떤 모습일까요? 영민님이 이야기하는 코인원 서비스 개발부터 구축, 운영까지의 여정에 함께하시죠!Q. 영민님 반갑습니다 :-) 먼저 자기소개를 부탁드립니다!안녕하세요, 플랫폼셀의 클라우드 플랫폼 엔지니어 김영민입니다. 어느덧, 코인원에 합류한지 1년 반의 시간이 흘렀네요. 저는 코인원 한국거래소를 시작으로 해외송금 서비스 ‘크로스', 글로벌거래소 ‘CGEX’와 같은 다양한 금융 서비스 인프라 업무를 경험했습니다. 현재는 코인원 한국거래소 서비스 인프라 구축과 운영 업무를 중점적으로 담당하고 있어요. 저를 포함한 플랫폼셀의 크루들은 코인원을 지탱하고 있는 인프라를 효율적으로 운영하고 있습니다. 특히, 개발과 운영셀에 속해 있는 크루들과의 밀접한 소통으로 고객에게 더 나은 서비스의 가치를 전달할 수 있도록 하는 것이 목표입니다.  Q. 플랫폼셀은 어떻게 구성되었나요? 구체적으로 어떤 일을 하시는지도 궁금합니다. 플랫폼셀은 크게 클라우드 플랫폼 엔지니어들로 구성되어 있습니다. 세부적으로 시스템 엔지니어, 네트워크 엔지니어, 데이터 사이언티스트, 플랫폼 개발 업무로 나뉘어집니다. 플랫폼셀은 코인원 초창기 시절부터 팀명과 업무범위에 많은 변화가 있었습니다. 인프라팀, SRE(Site Reliability Engineering)팀을 거쳐 지금의 플랫폼셀이 탄생하게 되었죠. 플랫폼셀의 가장 큰 목표는 안정적인 운영을 통해 서비스의 신뢰성을 확보하는 것입니다. 이를 위해 신속하게 개발을 지원할 수 있는 플랫폼을 설계하고 구축하려고해요.플랫폼셀 크루들의 열띤 업무의 현장!Q. 플랫폼셀이 많은 변천사를 겪어온 만큼, 코인원의 서비스 구성에도 큰 변화가 있었을 것으로 예상됩니다. 그 중 가장 큰 변화는 무엇인가요?초창기 코인원 서비스의 경우, 전통적인 서비스 아키텍처인 모놀리틱(Monolitic) 아키텍처 기반의 서비스가 많았습니다. 모놀리틱 아키텍처는 로컬 환경에서 개발하기에도 편리하고 통합 시나리오 테스트를 수행하기에도 쉬운 구성입니다. 다만, 코인원의 서비스가 지속적으로 성장하고 규모가 커지면서 몇가지 한계에 부딪혔습니다.서비스 복잡도가 증가하고 트래픽이 상승하면서, 서비스 확장이나 배포 관련 업무에 인프라 작업들이 수시로 발생하게 되었어요. 무중단 배포, 효율적인 리소스 사용, 인프라 표준화를 위해 ‘마이크로서비스 아키텍처'로의 전환이 필요한 시기였습니다. 이를 위해 마이그레이션(Migration, 데이터를 추출하여 새로운 시스템 내의 지정된 형식으로 옮기는 과정) 계획을 세우고 조직의 의사결정 프로세스와 개발 문화, 배포 프로세스들을 개선해 나가기 위해 노력했죠.Q. 암호화폐 거래소 ‘코인원' 서비스를 운영하시면서 다이나믹한 에피소드들이 많을 것 같습니다.2017년 12월 말, 비트코인 전고점 시기에 도달할즈음 코인원 거래소의 서비스 트래픽이 가파르게 상승했습니다. 매일마다 두배, 세배 이상의 인프라 확장작업이 필요했어요. AWS(Amazon Web Services)에 지불했던 비용이 17년 7월 대비 12월에 20배가 늘었습니다. 6개월이라는 짧은 시간동안 이렇게 급성장한 트래픽을 경험할 수 있는 업계는 몇없을거에요!Q. 코인원을 이용하는 고객들의 거래가 더 편리해질 수 있도록 플랫폼셀에서는 어떠한 노력을 기울이고 계신가요?트래픽 급증으로 서비스 업데이트를 할 경우, 서비스 지연 그리고 점검으로 인한 중단으로 불편을 겪은 고객분들이 계실 겁니다. 코인원은 이러한 문제를 해결 하기 위해 대용량 서비스를 운영 할 수 있도록 아키텍처를 변경하는 작업을 진행했습니다. CI/CD(Continuous Integration and Continuous Delivery, 지속적 통합과 지속적 전달) 자동화, 무중단 배포 환경을 갖추면서 서비스 지연과 중단의 빈도수가 점점 줄고 있습니다. 이제는 서비스를 더 빠르게 업데이트 하고 버그나 장애를 최소화 하며 트래픽이 갑작스럽게 증가하더라도 서비스 안정성을 확보 할 수 있는 플랫폼으로 진화하고 있어요.노을지는 창가 속의 슈퍼크루 영민님!Q. 코인원의 플랫폼셀만이 갖고 있는 장점을 이야기해본다면!코인원에는 어느 스타트업보다도 연륜이 가득한 시니어 엔지니어들이 플랫폼셀을 이끌고 있습니다. 블록체인, 암호화폐 업계 뿐만 아니라 직무 경험도 많으신 분들이 곳곳에 포진되어 있어요. 코인원 기술본부만이 갖고 있는 중요한 장점이기도 하죠. 또한 플랫폼셀은 내부적인 아키텍쳐, 코드 리뷰를 거치면서 일하는 방식을 지속적으로 개선해 나가고 있습니다.추후 플랫폼셀에 합류하실 분들도 새로운 것들을 찾고 계속해서 발전시키려고 하는 분들이 함께해주셨으면 좋겠습니다! 스탠드업 미팅, 회고를 통해 소통하고, 재미있는 개발문화를 만들어가고 있으니 플랫폼셀에 많은 지원 부탁드립니다 :) (저희 해치지 않아요! ㅎㅎㅎ)Q. 영민님은 코인원에 어떻게 합류하게 되셨나요?저는 실생활에 다양한 금융서비스를 제공하는 핀테크에 관심이 많았습니다. 핀테크에 대한 관심은 이전에 몸담았던 게임산업에서부터 시작되었어요. 게임에서도 암호화폐 거래소와 유사하게 서비스 내에서 통용되는 가상의 화폐가 있습니다. 그러다보니 ‘가상의 재화가 아닌 실물화폐를 다루는 곳의 서비스는 어떻게 제공될까?’ 라는 호기심이 강해졌어요. 신기술이었던 블록체인과 암호화폐를 눈여겨보게 되었고, 지금 이렇게 코인원 크루로 함께하고 있네요! 코인원에서는 실제 현금을 다루는 곳이기 때문에 막중한 책임감으로 서비스 안정성과 보안을 함께 신경쓰고 있습니다.Q. 지난 겨울에 코인원 크루들과 함께 재미난 추억을 만드셨다고 들었어요!2018년은 코인원에서 피보탈랩스를 시작으로 새로운 것들에 많이 도전해볼 수 있는 시간이었습니다. 그 중, 다양한 직무에 계신 크루들과 함께 참가했던 ‘AWS re:Invent 2018’ 행사가 기억에 남네요. 리인벤트 기술세션에서 소개되었던 Tool들이 코인원에서 많이 사용되고 있는데, 컨퍼런스에서 새롭게 배운 것들을 적용해볼 수 있을 것 같습니다! 힙한 개발문화들도 접해보고, 다양한 국가, 회사, 직군에 계신 분들을 만나뵙게 되어 개발을 바라보는 시야 또한 넓어졌네요. 코인원 크루와 함께했던 AWS re:Invent 현장!Q. 영민님이 어떠한 미래를 꿈꾸고 계신가요?거창한 미래를 이야기하기 보단 소소한 바램을 말씀드리고 싶어요. 2019년에도 그리고 이후에도 지금 함께 일하고 있는 코인원 크루들과 더 재미나게 일하고 싶습니다. 훌륭한 동료들이 제 옆에 있다는 것만으로도 난관을 헤쳐나갈 때 큰 도움이 됩니다. 똘똘 뭉친 지금의 조직력을 바탕으로 99.999%(?)의 서비스 안정화 꿈을 이룰 거랍니다. 마지막으로, 새해에는 야근을 조금 덜하고 사랑하는 두딸들과 행복한 저녁 시간을 자주 가지려구요! (아빠 얼굴 잊은거아니지?)더 안정적인 코인원 거래소를 위해 오늘도 24시간 고군분투하고 있는 영민님. 앞으로도 코인원 플랫폼셀은 암호화폐 거래에 최적화된 플랫폼 구축을 위해 최선의 노력을 다할 예정이랍니다. 코인원 플랫폼셀 크루들이 선보일 멋진 서비스에 많은 응원과 관심 부탁드립니다.이렇게 멋진 엔지니어들과 동료가 되고 싶지 않으신가요? 현재 코인원 플랫폼셀은 함께 일할 동료 크루를 애타게 기다리고 있습니다! 많은 지원 부탁드려요 :-)
조회수 1114

의외로 디테일한 디자이너의 종류

디자이너란 사람들은 참으로 다양한 개성은 지닌 새럼입니다. 숨길 수 없는 어떤 세계가 가득하죠. 물론 일을 하는 사람이니 그것들을 잘 봉인하고 있습니다. 하지만 스멀스멀 어쩔 수 없이 흘러나오는 미지의 어떤 힘을 막기에는 역부족입니다. 저만 해도 그래요. 지금 이 글을 쓰는 시간은 정확히 밤12시05분입니다. 지금 전 화장실에 가고싶지만 참고 있습니다. 왜냐면 여기서 화장실을 가게 되면 제 손 끝의 어떤 요정님이 사라져버릴 것 같은 느낌때문이죠. 변태적 성향으로 보일 수도 있겠지만 여러분들이 좋아하는 크리에이티브함은 대부분 이러한 변태성에서 비롯됩니다. 1픽셀만 틀려도 막 소름돋는 예민함이랄지, 화장실을 참아가서 아랫배에 머무는 요정님을 지키려는 노력, 책상정리가 안되어 있으면 모든 것을 포기해버리는 강박증 등... 말이 좋아 크리에이티브지, 그 이면의 진실은 기괴할 때가 많습니다.제목에 디자이너의 종류라고 해놓으니 많은 분들이 UX디자인, 웹디자인, 편집디자인..뭐 이런 디자인영역에 대해 이야기하려나보다.....하시겠지만 그건 함정카드입니다. 우리가 알아볼 디자이너의 분류는 조금 달라야 합니다. 왜냐면 전 실무와 현장감, 디테일에 미쳐있는 디테일변태이기 때문이죠.일에는 기본적으로 지켜야할 언어와 행동과 체계가 있습니다. 디자이너가 아무리 미지의 힘을 지니고 있는 존재라고 해도 이것을 어겨서는 안됩니다. 그래서 표준 안에서 어떻게 다양한 행동들을 취하는 지 그것을 보려고 합니다. 그러고 이러한 디자이너와 어떻게 협업할 지도 생각해보도록 합시다.1. 은둔형 구석자리 디자이너(feat. 후드티)조용합니다. 하루종일 말이 없을 때도 있습니다. 입을 열어도 모기모기한 소리로 말하고 크게 의견을 막 내세우지 않습니다. 이 분들은 관찰자처럼 모든 상황을 관망합니다. 그리고 말보단 시안으로 얘기하는 타입입니다. 안듣는 것 같아도 다 듣고있으니 대답소리가 작다고 막 뭐라하면 안됩니다. 커뮤니케이션을 능숙하게 잘한다고 다 일을 잘하는 건 아니니까요. 이런 분들은 챠근챠근 일을 정리하고 깔끔하게 정리하는 걸 좋아합니다. 속도가 좀 늦고 답답해 보일 수는 있지만, 퀄리티 면에서 필살기를 보여줄 때가 많습니다.2. 이건 싫어!! 이건 좋아!! 호불호대장맥주 좋아!! 유아콘텐츠 싫어!!! 테크쪽 몰라!!! 행사 디자인 좋아!! ..이렇게 영역에 대한 호불호가 아주 분명해서 손가락 베일 것 같은 분들도 있습니다. 이런 분들은 취향도 아주 명확해서 좋아하는 디자인이 땋! 있더라구요. 그리고 그 범주 내의 프로젝트를 맡으면 각성하여 지력과 전투력이 상승합니다. 반면 노잼극혐 플젝을 주면 지연 핸디캡을 받거나 HP가 빨리 떨어지는 저주에 걸릴 수 있습니다. 그렇다고 현실적으로 일을 가려받을 순 없습니다. 그러니 노잼극혐 플젝에 합류시킬 때는 적당한 동기부여를 전달해줄 필요가 있습니다. 나중에 포폴로 활용할 수 있게 저작권을 일부 인정해준다거나.맥주와 간식으로 HP를 채워준다거나.이 다음 괜찮은 플젝으로 딜을 본다거나.용모가 수려한 팀원들로 구성을 한다거나...뭐 등등등3. 조증아이디어가 떠오르거나 맘에 드는 시안이 탄생하면 흥분을 감추지 못합니다.1시간 정도 뒤에 얘기하도록 합니다. 밥먹고 졸린 3시 정도에 다시 오라고 합시다.4. 투머치토커디자이너는 평균적으로 조용하고 자기만의 세계가 있다고 하지만, 그게 꼭 그런 것만은 아닙니다. 종종 말을 좋아하는 성향의 사람들도 있기 마련이죠. 이런 분들은 회의시간이나 시안PT때 그 광역필살기를 시전합니다. '이 시안으로 말씀드릴 것 같으면, 우선 제가 LA에 있을 때 이야기를 하지 않을 수 없는데....'로 시작된 봇물은 어느새 1,2시간이 되버리고 말죠. 이렇게 넘나 말이 많은 것이 꼭 좋은 것은 아닙니다. 뭐든 과유불급이죠. 적당히 중간에 자르고 핵심만 얘기하라고 합시다. 핵심이란 건 이런 거예요. 이 디자인이 어떤 의도와 어떤 철학, 스토리, LA이야기를 담고있는지는 사실 중요치 않습니다. 그건 브랜드가이드에 몇 줄이면 될 사연들이죠. 중요한 건 이걸 보는 사람은 누구고그 사람들에게 이 시안이 어떤 행동(또는 사고,감정)을 유발시키는지.이 2개예요. 그것만 짧게 얘기하라고 합시당. 5. 픽셀장인책상도 일렬종대, 마우스와 키보드는 무선, 포스트잇 하나없이 깔끔하고 정돈된 걸 좋아하는 분도 있습니다. 약간의 오차나 틀어짐도 용납하지 못하는 픽셀변태들이죠. 마트에 가서 정돈된 과일을 보면 이너피스를 얻는 부류입니다. 이런 분들과 일할 때는 생각보다 난관이 많습니다. 사실 손의 빠르기에 따라 일속도는 천차만별이지만 퀄리티는 항상 완벽을 추구하기 때문에 스트레스는 매한가지입니다. 오래 일을 잡고있으면 그만큼 피곤해지고, 빨리하면 빨리해야하니까 또 스트레스..그래서 이런 픽셀장인님들은 센서티브한 성향이 있습니다. 크릉거리기도 하고 으르렁대기도 하고 뭐 그렇습니다. 업무분장을 할 때 프론트 엔드를 나눌 수 있다면 이런 분들은 엔드작업에 배치하면 좋습니다. 6. 탱커타입반면에 그냥 밀어부치는 거친 탱커타입의 전사도 있습니다. 빠른 시안! 대충 챡챡!! 이런거요? 샥샥 이거요? 이렇게요? 하면서 순식간에 진도를 촥촥 빼는 부류죠. 최대장점은 역시 속도와 실행력입니다. 고민보다 손이 앞서는 타입인지라 기획회의 하면서도 바로 시안을 대강 만들어서 '이런 거 말씀하시는 거예요?' 라고 보여주기도 합니다. 하지만 단점도 존재하죠. 종종 실수가 생기거나, 빠른 속도를 활용해서 양으로만 밀어부치거나 하는 등의 문제가 생길 수도 있습니다. 이러한 탱커타입은 프론트단계에서 시안을 빠르게 나열하고 선택, 디벨롭 시켜야 하는 시기에 적절합니다.7. 멀티플레이어분명 디자이너인데 마케팅도 알고있고, 데이터도 다룰 줄 알고 퍼블리싱도 하고 기획력도 있는데다가 맛집도 잘 알고 있고 경영도서도 곧잘읽고, 시사지식까지 뛰어난 하이엘프들도 있습니다. 이들은 귀는 둥글지만 그에 맞먹는 민첩과 순발력이 쩔죠. 그래서 이런저런 방면의 인사이트로 소비자행동을 관찰하고 적절한 문제해결능력을 보여줍니다. 막 주변에선 오오오..능력쨔아! 여윽시! 와 같은 감탄사가 튀어나옵니다. 사실 이런 분들은 자기가 잘난 걸 알고있습니다. 그래서 부끄러워하지만 그런 인정을 좋아라하죠. 배움에 대한 호기심과 인정욕구가 있어서 살짝살짝 어려운 과제를 던져주면 동기부여를 느끼곤 각성합니다. 오히려 너무 쉽고 단순한 일에 지쳐버리는 타입이랄까요.8. 눈표범고독한 늑대와 같은 타입이죠. 멀티플레이어와는 반대성향입니다. 하나에만 겁나 집중하고 나머지엔 신경을 안써요. 그래서 보통 업무에 열중하면 다른 것을 동시에 하지 못합니다. 이런 분들은 딱! 특정한 일을 맡기는 게 좋아요. 100개의 콘텐츠카드를 만들어!, 상세페이지 템플릿 만들어!, 이거 지도 이미지 제작해줘! 이렇게 혼자 끝낼 수 있는 1인1업무가 적절합니다.9. 손그림장인아티스트 성향과 디자이너 성향이 반반 섞인 데미갓입니다. 회화전공자였을 수도 있고 원래 그림을 좋아할 수도 있습니다. 손그림 아트웍을 곧잘 만들어냅니다. 아기자기한 성향이나 또는 프랑스 만화같은 독특한 자기세계가 있을 수도 있습니다. 대부분 강력한 예술적 차크라를 숨기면서 살지만, 종종 새벽이 되면 폭발할 수 있습니다. 새벽 이전에 퇴근해야 합니다.10. 아이소메트릭능력자노가다에서 쾌감을 느끼는 장인입니다. 손목연골이 빨리 닳을 수 있으니 보호대가 필요합니다.11. 레이어정리집착증인수인계 받는 사람에게 축복이 있을지니. 12. 파일이름작명가개발자들의 사랑을 그대 품안에.13. 간식대마왕디자인은 많은 두뇌활동을 필요로 합니다. 두뇌는 당과 케톤체로 움직입니다. 당은 말그대로 포도당의 당분해로 충전되고, 케톤체는 지방분해를 통해 생성됩니다. 그래서 우린 달달한 것과 기름진 고기를 먹어야 합니다. 14. 소심한 타입자꾸 자긴 디자인을 못한다고 수줍어서 양쪽 검지를 만지작 거립니다. 흔히 엄지나 검지 손톱 옆 살을 뜯거나 손톱을 깨물깨물하기도 합니다. 근데 지는 못했다고 해서 가보면 엄청 잘해놨을 경우가 많습니다. 놀리는건가...보통 이런 분들의 '제가 잘..못해서....' 라는 말은 '기분은 못할 것 같은데 이미 내 몸은 만렙이다.' 는 소리와 비슷합니다.15. 투덜이스머프뭐만 하면 이건 안되고 저건 안되는 타입도 있습니다. 공격력이 현저하게 높아서 일단 일이 많아지는 걸 극딴적으로 싫어합니다. 까칠하고 까다로워서 사람들이 어려워하는 부류긴 하지만 츤데레기질도 있어서 투덜대면서도 또 급한 건 해줄때가 많습니다. 하지만 진짜 투덜만 대고 일도 안하고 솔루션도 없다면 음.... 문제가 좀 있죠?16. 머리가 손을 지배하는 타입디자이너라고 하면 막 감성충만한 파랑새가 마음속에 날아다닐 것 같지만...의외로 그렇지 않습니다. 꽤나 기능과 논리를 중요하게 생각하는 분들이 많습니다. 디자인은 목적성과 목표가 뚜렷하기 때문에 더 그런 것 같습니다. 그래서 생각보다 논리와 상식적인 알고리즘을 중요하게 생각하는 분들이 많아요. 이런 부류 중에선 본인이 납득이 가지 않으면 손이 움직이지 않는 분들도 계시죠. 설득시키기가 난감할 때가 있지만, 한번 설득되면 또 무슨 휴머노이드마냥 일을 하기도 합니다. 17. 광전사승부욕 폭발하는 타입입니다..... 주변에 있는 능력자들을 다 뛰어넘고 인정받고 싶은 욕구가 온몸에 열기처럼 불타오릅니다. 가끔 모든 사람을 이겼다 싶으면 어제의 자신과 싸웁니다. 더 강해져야해!!!! 슈퍼파워가 있었다면 지구최강의 빌런이 되었을지도...일을 시키는 입장에선 막 능력자같고 세상 애사심이 넘치는 사람같아 보이지만 이 광전사 버프가 끝나고 나면 번아웃이 와버리기도 합니다. 자기관리가 필요합니다. 보통 이런 광전사모드일 때는 몸이나 마음을 돌보지 않고 일을 하거든요. 뭐..사실 말린다고 말려지지도 않습니다. 시간이 지나야 하죠...18. 환자손목터널증후군, 일자목, 거북목, 척추측만, 골반틀어짐, 위경련, 위궤양, 대장염, 안구건조증, 허리디스크, 고관절통증, 성인여드름, 소화불량, 가스차고 더부룩, 원형탈모, 이유없는 두통, 불면증....19. 독립운동가프리랜서를 꿈꾸는 부류입니다. 언젠간 내 것을 할꼬야!!! 라는 굳은 의지가 있어요. 하지만 아직 돈이 없어서 레퍼런스를 쌓고있는 타입이죠. 일을 하면서 투잡을 뛰는 경우도 있어요. 본인이 스스로 의뢰받아서 클라이언트 비즈니스도 하고 회사일도 하는거죠. 종종 회사에서 연봉많이 못 줄때 이렇게 겸업을 허락하는 곳도 있더라구요. 독립의지가 강해서 일을 배우고자 하는 열정이도 있습니다. 이래서 일잘하고 똘똘한 사람들은 다들 나가서 회사차린다는게 이런 말입니다.20. 야망의 바다DISC검사하면 D성향이 극단적으로 높은 스타일. 숨길 수 없는 리더쉽과 승진욕망이 있는 부류입니다. TF팀이나 프로젝트 리더 맡는 걸 막 좋아해버리고 뭔가 조정하고 조율하고 디렉션하길 좋아합니다. 네임밸류있는 큰 플젝를 선망하기도 하고, 얼른 선임달고 주임달고, 수석되서 마인드컨트롤 풀업을 꿈꾸기도 합니다. 내면의 칼갈이들이죠. 부작용이 생기면 직급놀이에 심취해버리기도 하지만, 리더로써의 인성과 자질이 동반될 경우엔 연차에 상관없이 업무 전체의 밸런스를 맞추고 카리스마있게 프로젝트를 이끌어나가는 군주가 되기도 합니다.
조회수 1484

[가트너-제니퍼소프트 뉴스레터]APM의 진짜 가치 (Application Performance Management)

제니퍼소프트-가트너 뉴스레터 APM의 진짜 가치 (Real value of APM)Index. 1 page. APM의 진짜 가치 (Application Performance Management)5 page. 가트너 리서치: How to Move Analytics to Real Time10 page.  제니퍼소프트에 대해 가트너 리서치- How to Move Analytics to Real Time가트너 뉴스레터 다운로드 > JENNIFERSOFT Newsletter with Gartner research_Real Value of APM모바일 디바이스의 혁명 덕분에 인터넷의 세계는 10 년 전에 상상할 수 없었던 거래량과 서비스 속도를 경험하고 있습니다. 이러한 변화는 기업 IT 관리자가 시장 변화에 발 맞춰 웹 애플리케이션 성능을 관리하는 새로운 솔루션과 방법을 고려할 것을 요구합니다.  결과적으로 웹 애플리케이션 서버 (JAVA, .NET, PHP)의 모니터링이 점점 더 중요 해지고 있습니다. 최종 사용자와 백엔드 시스템 사이에 WAS (Web Application Server)가 있으므로 모든 트랜잭션이 WAS 영역을 통과합니다. WAS를  모니터링 하는 것은  확장 가능한 웹 애플리케이션 시스템을 구축하고 유지 관리하는 가장 효과적인 방법임이 입증되었습니다.Real-Time Transaction 모니터링과 분석은 JENNIFER의 핵심 기술입니다.  JENNIFER는 처음부터 끝까지 실시간 트랜잭션을 감지하고 트랙킹하는 유일한 APM 제품입니다.  Real-Time Active Service Monitoring은 (제니퍼의 독특한 기능 중 하나) 트랜잭션 상태를  초단위로 제공합니다. 이 기능을 사용하면 어떤 트랜잭션이 아직 처리되지 않았고, 어떤 사용자가 응답 지연을 겪고 있으며 어떤 SQL 쿼리가 현재 실행되고 있는지를 포함하여 트랜잭션 실행 상태에 대한 정보를 모니터링 할 수 있습니다.... 이하 생략... 리포트를 통해 더 많은  내용을 읽으실 수 있습니다. 
조회수 3014

챗봇과 인공지능 머신러닝 ㅡ Part 1/2

스타워즈를 보신 분이라면 거기에 나오는 난쟁이 로봇 R2D2와 키다리 로봇 C3P0를 아실 것이다. 친근한 R2D2는 전자음을 조정해 인간과 대화를 하며 주로 말 잘하고 박식한 로봇인 C3P0가 통역을 해준다.이런 충실하면서 똑똑한 친구들이 옆에서 항상 나를 도와준다면 어떨까? 정말 좋을 것이다. 만약 매일 보는 스마트폰 안에서도 나의 질문에 답해주는 이런 고마운 친구들이 있다면 얼마나 좋을까? 이런 저런 생각을 하다보면 우리는 대화형 로봇의 필요성을 느낀다.챗봇(Chatbot)이란?챗봇의 정의는 “대화형 인터페이스 상에서 규칙 또는 지능으로 유저와 소통하는 서비스”이다. 이 말을 하나하나 풀어보자.먼저, 대화형 인터페이스란 뭐지? 어렵다. 쉽게 설명해 보자. 인터페이스는 사람과 컴퓨터를 연결하는 장치라고 한다. 역시 어렵다. 아! 그냥 스마트폰 앱으로 보면 된다. 그럼 소통한다는 말은 대화한다는 것이므로 스마트폰 앱에서 일방향이 아닌 양방향이 가능하다는 얘기다. 어! 이상하다. 양방향이라면 나의 말에 응대하는 로봇은 뭐로 움직이는 거지? 궁금하다. 누가 일정한 규칙으로 만들어 논건지 아니면 우리처럼 지능이 있는 건지. 지능이 있다면 그런 지능은 뭐지? 점차 우리는 자연스럽게 인공지능에 다가간다.인공지능(Artificial Intelligence)이라는 용어는 1956년 미국 다트머스의 한 학회에서 존 매카시가 처음 사용했다고 한다. 원래 인공지능은 소프트웨어인 정신을 말하고 로봇은 하드웨어인 육체를 말하는 것이지만 정신없이 육체가 존재할 수 없는 것처럼 로봇을 얘기하면 당연히 인공지능은 따라간다.학자들은 인공지능을 강(强)인공지능과 약(弱)인공지능으로 구분한다. 간단히 얘기하면 강인공지능이란 자의식이 있는 인간에 가까운 지능이고 약인공지능은 자의식이 없다. 자아가 없으며, 명령받은 일만을 수행한다. IBM의 왓슨(Watson), 작년에 인공지능의 붐을 가져온 구글의 알파고(Alpha-GO) 등은 모두 약인공지능이다. 이런 인공지능을 구현하는 기술은 무엇인가? 바로 기계한테 학습을 시키는 머신러닝(Machine Learning)이다.1959년 아서 사무엘은 머신러닝을 "기계가 일일이 코드로 명시하지 않은 동작을 데이터로 부터 학습하여 실행할 수 있도록 하는 알고리즘을 개발하는 연구 분야"라고 정의했다. 여기서 학습이란, 입력 값을 받아 결과 값을 내는 모델을 만드는 표현과 표현을 통해 주어진 업무가 얼마나 잘 수행됐는지 알아보는 평가, 그리고 평가에서 설정한 기준을 찾는 최적화로 구성된 일련의 과정을 말한다. 중요한건 우리가 시키지 않은 일도 학습에 의해 자율적으로 처리한다는 것이다. 정말 신기하지 않은가?이제 챗봇이 뭔지 감이 잡힌다. 스마트폰 앱상에 존재하는 로봇인데, 물론 육체는 화면의 아이콘으로 밖엔 안보이지만 인공지능을 가지고 머신러닝에 의해 동작을 하면서 우리와 대화를 하는 그분. 그렇다면 이제 남은 건 이분의 지능이 어느 정도인지 또 얼마나 일을 잘하는 지로 판가름 난다.우리는 평생 공부를 한다. 이제는 학교를 졸업하고 나서도 항상 배워야 한다. 학습이 없다면 지능도 없다. 학습은 일일이 지도받는 지도학습과 알아서 공부하는 자율학습이 있다. 알아서 공부하려면 먼저 머리에 지식이 많아야 한다. 역시 기계도 사람과 비슷하게 배운다.  다음시간엔 챗봇에게 학습을 시켜 지능을 가지게 하는 방법에 대해 알아본다.> Part 2에서 계속
조회수 2433

KBS 신입사원 입사후기 - [이은주] 이유 있는 자신감(예능, 드라마 PD 편)

‘일단 된다고 믿어라. 그리고 되게 하는 방법을 찾아 실행하라’ 서류, 필기, 최종에서 몇 번씩 탈락한 후 헛헛한 마음으로 찾은 서점. 겉으로는 짐짓 괜찮은 척하면서 속으로는 어린아이같이 펑펑 울고 있을 때, 눈물 쏙 들어가도록 제 뒤통수를 가격한 글귀였습니다. 지금 생각해보면 저는, 저를 위하는 따뜻한 배려의 말과 위로의 말보다는 ‘아직 준비가 덜 된 거다.’ 라든가 ‘울지 말고 앞으로 어떻게 할지 먼저 생각하라.’라는 냉정한 평가와 따끔한 충고의 말로부터 다시 시작하는 힘을 얻었던 것 같습니다. 그럼에도 저는, 지금 PD를 꿈꾸는 다른 사람들에게 감히 이렇게 말할 수가 없습니다. 각 전형을 준비할 때마다 항상 다른 사람들로부터 배우는 입장이었기에, 제가 그들보다 더 뛰어나서 합격한 것이 아니라는 점을 잘 알고 있기 때문입니다. 그래도 제 글을 읽어주는 사람들에게 조금이나마 도움이 되면 좋겠다는 생각으로, 제가 찾은 ‘되게 하는 방법’을 조심스레 전해보고자 합니다. 제게 ‘되게 하는’ 공통된 방법은 사람을 찾는 것이었습니다. 솔직하게 쓰면 된다는 말만 믿고 패기 넘치게 써낸 자소서가 우수수 떨어지는 대참사를 겪고 난 후, 서류전형을 항상 통과하는 사람들을 먼저 찾았습니다. 잘 쓰인 자소서 대여섯 개를 꼼꼼하게 읽고 나니 저절로 좋은 자소서가 어떤 것인지 감을 잡을 수 있었습니다. 그렇게 수십 번 수정해 나가면서, 말은 쉬워도 쓰기는 어렵다는 ‘지원동기와 경험이 녹아 있는 자소서’를 얼추 완성해낼 수 있었습니다. 아무 경험 없이 준비하게 된 필기 전형과 처음 주어진 면접 전형에서도 제게 큰 도움이 된 건 사람들이었습니다. 남들에게 보여주기 부끄러운 글이지만 스터디원들에게, 가족들에게, 친구들에게, 현업 PD분들에게 보여드리고 사람들의 의견을 물었습니다. 기획안 아이디어가 떠오르지 않아서 머리가 지끈지끈할 때는 사람들을 만나 요즘 무엇에 관심이 있는지 열심히 들었고, 같이 웃고 떠드는 중에 번뜩 생각이 떠오르면 그때그때 메모해두었습니다. 언젠가 술자리에서 막역한 친구들에게 기획안을 들려주고 팩트폭력의 신랄한 피드백을 받았을 때도, 서운한 마음을 뒤로하고 피드백 하나하나를 소중히 적어 둔 기억이 납니다. 초행길을 떠나는 초짜 언시생이었지만, 먼저 길을 떠나본 경험이 있는 사람들을 찾아 도움을 받으며 최종 면접의 기회를 얻었습니다. ‘나라면 이런 거 물어볼 것 같아’라는 친구들의 도움과, ‘너라는 사람과 현재 방송국의 고민에 대해 생각해 봐’라고 조언해 주신 현업 PD님들, ‘저 면접 볼 때는 이런 걸 물어봤었어요’라며 도와준 스터디원들. 그 모든 질문을 모아서 저만의 생각을 정리했습니다. 모든 방면에서 깊게 생각해보니, 면접장에서 예상하지 못했던 질문을 받아도 솔직하고 자연스럽게 제 생각을 전할 수 있었습니다. 이제야 왜 일분일초가 소중한 연말 시상식 수상소감에서 고마운 사람들을 읊느라 대부분의 시간을 쓰는지 알 것 같습니다. 심장이 터질 것 같은 두근거림에 온종일 볼이 빨갛게 상기되어있었던 최종 발표일의 그 날, 저도 고마운 사람들에게 감사 메시지를 보내며 긴 저녁 시간을 보냈으니까요.아무것도 몰랐던 제가 KBS에 입사할 수 있게 되었던 것은, 처음의 근거 없는 자신감을, 저만의 방법을 찾아 행동하면서 이유 있는 자신감으로 조금씩 만들어 왔기 때문이 아닐까 생각합니다. 제게는 그 열쇠가 사람들이었던 것처럼, 누군가에게는 책이, 누군가에게는 현장에서의 경험이, 누군가에게는 깊게 생각해보는 혼자만의 시간이 그 열쇠일 수 있습니다. 그 방법이 무엇이든, 나만의 방법을 찾아 실행해 나가세요. 이유 있는 자신감과 열정을 가진 여러분을 KBS는 분명히 알아줄 것입니다.#한국방송공사 #KBS #KBS신입공채 #KBS채용 #신입사원후기
조회수 739

[어반테이스트] 새우는 어디에... 애슐리w를 다녀오다!

어반베이스 입사 '3'주차에,어반동료 '3'명이서 함께하는어반 테이스트 '3'기!제목 : 새우는 어디에....(테이스트 3기는 셀카가 메인)입사한지 얼마되지 않아 얼떨결에 어반테이스트 3기 리더가 되고서는.....처음으로 딱! 떠올랐던 미슐랭에 선정된 음식점을 가보즈아! 했으나.... 역삼역 인근에서 미슐랭에 선정된 음식점을 찾기가 힘들었습니다. (우리가 잘 못찾은건가.....=o=;;)그렇게 고민 중에마침, 회사가 있는 건물 '아주빌딩' 옆건물 GS타워 지하에 위치한 '애슐리w '에서 새우 축제가 한창이라는 정보를 얻어 듣고서는,새우+@ 라도 양껏 먹어보자는 심산으로 더이상 고민없이 바로 애슐리로 gogo!(절대 가까워서 간게 아님, 진짜 그런게 아님) 역삼역 7번출구로 나오자마자 보이는 건물인 아주빌딩을 지나 바로 옆에 있는 건물이 바로 GS타워! 밥 먹으로 가는 순간만큼 행복한 순간이 또 없어요...><(세상 순수한 미소를 가진 어반의 꽃미모 담당 정준&용필)가는 길목에서 혜인님의 발길을 멈출 수 밖에 없게 한... 포스터......행보가냐..? (전라도 사투리 버전)그렇게 도착한 애슐리 입구 앞 전경입니다! "하악하악, 그래, 새우라도 마음껏 먹어보자"우리를 이곳으로 이끌게 했던... 이 포스터,이때까지만 해도 저희는 새우를 배터지게 먹을 수 있겠다는 행복한 기대를 하고 있었더랬죠..저희는 자리를 안내받자마자 부푼 마음을 가득안고 샐러드바가 있는 곳으로 향했습니다!  사실... 음식이 더 가득 채워졌을때 찍으려고 했는데, 너무 많은 사람들이 이용중이였기 때문에 사진을 찍기에는 어려웠어요 흑 열심히 접시에 담아 보았습니다ㅋㅋㅋ 근데 위의 포스터에서 기대하게 만들었던 만큼의 다이나믹한 새우는 찾아보기가 힘들었어요ㅠㅠ심지어 혜인님은 새우 한마리도 드시지 못하셨다는 후문이...... 왠지 저녁 스페셜 메뉴가 아니었나 싶습니다.. 샐러드바로는 도저히 만족할 수가 없어서 메인메뉴를 시켜보기로 합니다.(어반 테이스트 고마워요 ♡)사실, 보통 뷔폐에 가면 단품 메인메뉴를 주문하지 않는 경우도 많기때문에 애슐리에서의 메인메뉴 주문은 처음인 것 같아요! 양고기&전복 스테이크, 뉴욕 스톤 스테이크, 메인메뉴를 주문하면 메뉴 1개당 음료 2개씩 제공해주는 세트 행사중!완성된 요리가 아닌 뜨겁게 달군 돌판위에 셀프로 익혀먹게끔 나왔습니당!양고기는 고기 특유의 냄새가 조금 났지만, 같이나온 소스에 찍어 먹으면 그런대로 먹을만 했으나스테이크는 정말 너무 질겨서 얼마 안되는 양을 남겼어요........ㄸㄹㄹ 1인당 3,000원을 내면 무제한으로 이용이 가능한 와인도 있었으나, 우리는 오후 근무가 남아있기에 아쉽게도 패스.... 용필님이 이번 애슐리에서의 식사 중 가장 맛있었다는 오른쪽의 무알콜 와인홍차 ㅋㅋ (웃어야 하나 울어야 하나.....) 열심히 먹고 귀요미 인증샷 ㅋㅋ (안본눈 삽니다...)그렇게 애슐리에서의 식사를 마무리하고 GFC에 위치한 홍차전문점으로 향합니다."클로리스 티 앤 커피" 요기 분위기도 맛도 정말 좋아요!홍차를 마시며제가 다니는 보드게임 동호회 이야기, 용필님의 클라이밍 취미생활 이야기, 혜인님의 다이어트 이야기 등등동료들과 처음으로 서로에 대해 알수 있었던 대화의 시간을 이어갔어요~~~그리고 빠질 수 없는 셀카타임ㅋㅋㅋ 이야기 보따리를 풀다보니 어느새 2시간이라는 시간이 훌쩍 지나 있었습니다ㅠㅠ2시간이라는 시간이 넉넉할거라 생각했는데,일단 선택했던 음식점이 뷔폐였기 때문에 계속 왔다갔다 움직이느라 예상시간을 많이 소비했고,팀원들과 충분한 대화를 즐기기엔 너무 아쉬운 시간이었어요ㅠㅠ다음에 기회가 또 주어진면 퇴근 후에 여유롭게 다녀와야 겠습니다!! 이렇게 점점 어반 테이스트 노하우가 쌓여지겠죠?(그렇다면 와인도!! 캬!!!)출처: https://blog.naver.com/urbanbaseinc 

기업문화 엿볼 때, 더팀스

로그인

/