스토리 홈

인터뷰

피드

뉴스

조회수 2784

Next.js 튜토리얼 4편: 동적 페이지

* 이 글은 Next.js의 공식 튜토리얼을 번역한 글입니다.** 오역 및 오탈자가 있을 수 있습니다. 발견하시면 제보해주세요!목차1편: 시작하기 2편: 페이지 이동 3편: 공유 컴포넌트4편: 동적 페이지  - 현재 글5편: 라우트 마스킹6편: 서버 사이드7편: 데이터 가져오기8편: 컴포넌트 스타일링9편: 배포하기개요여러 페이지가 있는 Next.js 애플리케이션을 만드는 방법을 배웠습니다. 페이지를 만들기 위해 한 개의 실제 파일을 디스크에 만들어야 합니다.그러나 진짜 애플리케이션에서는 동적 컨텐츠를 표시하기 위해 동적으로 페이지를 생성해야 합니다. Next.js를 사용해 이를 수행하는 여러 방법들이 있습니다.쿼리 문자열을 사용하여 동적 페이지를 생성해봅시다.간단한 블로그 애플리케이션을 만들 예정입니다. 이 애플리케이션은 home (index) 페이지에 전체 포스트 목록을 가지고 있습니다.포스트 제목을 클릭하면 뷰에서 각 포스트를 볼 수 있어야 합니다.설치이번 장에서는 간단한 Next.js 애플리케이션이 필요합니다. 다음의 샘플 애플리케이션을 다운받아주세요:아래의 명령어로 실행시킬 수 있습니다:이제 http://localhost:3000로 이동하여 애플리케이션에 접근할 수 있습니다.포스트 목록 추가하기먼저 home 페이지 안에 포스트 제목 목록을 추가해봅시다.pages/index.js에 다음과 같은 내용을 추가해주세요.위의 내용을 추가하면 다음과 같은 페이지가 보입니다:첫 번째 링크를 클릭하면 404 페이지가 나지만 괜찮습니다.페이지의 URL은 무엇인가요?- /?id=Hello Next.js- /post?title=Hello Next.js- /post?title=Hello Next.js- /post쿼리 문자열을 통해 데이터 전달하기쿼리 문자열(쿼리 파라미터)를 통해 데이터를 전달했습니다. 우리의 경우에는 "title" 쿼리 파라미터입니다. 다음에서 보이는 것처럼 PostLink 컴포넌트를 이용해 구현해봅시다:(Link 컴포넌트의 href prop를 확인해주세요.)이처럼 쿼리 문자열을 이용하여 원하는 모든 종류의 데이터를 전달할 수 있습니다."post" 페이지 생성이제 블로그 포스트를 보여줄 post 페이지를 생성해야 합니다. 이를 구현하기 위해 쿼리 문자열로부터 제목을 가져와야 합니다. 어떻게 구현하는지 살펴봅시다:pages/post.js 파일을 추가하고 다음과 같이 내용을 작성해주세요:다음과 같이 보입니다:위의 코드에서 무슨 일이 일어났는지 살펴봅시다.- 모든 페이지에서 현재 URL과 관련된 내용들을 가진 "URL" prop를 가져옵니다.- 이 경우 쿼리 문자열을 가진 "query" 객체를 사용하고 있습니다.- props.url.query.title를 사용해 제목을 가져왔습니다.애플리케이션에서 몇 가지를 수정해봅시다. "pages/post.js"를 다음과 같이 변경해주세요: http://localhost:3000/post?title=Hello Next.js 페이지로 이동하면 무슨 일이 일어날까요?- 예상대로 동작할 것이다.- 아무 것도 랜더링하지 않을 것이다.- 해더만 랜더링할 것이다.- 에러를 발생시킬 것이다.특별한 prop "url"보다시피 위의 코드는 이와 같은 에러를 발생시킵니다:url prop는 페이지의 메인 컴포넌트에만 전달되기 때문입니다. 페이지에서 사용되는 다른 컴포넌트에는 전달되지 않습니다. 필요하다면 다음과 같이 전달할 수 있습니다:마치며쿼리 문자열을 사용하여 동적 페이지를 생성하는 방법을 배웠습니다. 이제 시작일 뿐입니다.동적 페이지를 렌더링하기 위해 더 많은 정보가 필요합니다. 그리고 쿼리 문자열을 통해 모든 것을 전달할 수는 없을 것입니다. 또는 http://localhost:3000/blog/hello-nextjs와 같은 깔끔한 URL을 원할 것입니다.다음 편에서 이것들에 대해 모두 배울 수 있습니다. 이번 편은 모든 것의 기초입니다.#트레바리 #개발자 #안드로이드 #앱개발 #Next.js #백엔드 #인사이트 #경험공유
조회수 750

귀한 인연1. 에릭 리스의 스승 스티브 블랭크

I can't wait to read your autobiography saying "Hey Steve, I proved you were fucking wrong at that time". “스티브! 당신이 그 때 완전히 틀렸었단 걸 내가 증명했어!”라고 적힌 자네의 자서전이 나오길 기대하지.2011년 스탠포드 대학(Stanford University)에서의 두번째 학기 첫날, 린 론치패드(Lean Launchpad)라는 수업의 스티브 블랭크(Steve Blank) 교수님이 내게 하신 말씀이다. 과목 코드가 Engineering 245이기 때문에 수업명 대신 흔히들 E245라고 부르는 수업으로, 당시 린 스타트업(Lean Startup) 이론 열풍을 일으키는데 큰 역할을 했던 수업이다. 더욱이 실리콘밸리의 전설적인 연쇄창업가 스티브의 지도 아래 40명 가까이 되는 쟁쟁한 멘토들이 함께 참여하면서 큰 화제가 되었다.스티브 블랭크, 출처: Inc.고객 개발(Customer Development) 단계의 중요성과 방법론을 실제 창업 프로젝트를 통해서 가르치는 이 수업은 수강 신청 시기에 수업 참가 지원서를 받는다. 각 분야 학생들이 본인의 창업 아이디어와 팀 구성에 대해서 상세하게 제안서를 제출하는데, 워낙 지원자가 많고 창업 아이템과 학생들의 다양성을 매우 중요시하기 때문에 수업에 받아들여지는 것 자체가 굉장히 어렵다. 물론, 나 역시 지원서를 제출했지만 탈락했다. 내가 제출했던 아이디어는 조인트바이(JointBuy). 당시는 그루폰(Groupon)의 열풍이 가장 뜨겁던 시기로 그해 말 약 19조원에 나스닥 상장까지 이루게 된다. 그루폰의 열풍은 대단했지만 나는 구매 의사가 얼마나 있는지 알지 못하는 상황에서 다량의 고객이 모인다는 가정 하에 대폭할인을 제공하는 사업 모델을 적용하기 어려운 분야가 많을 것이라고 생각했다. 레스토랑, 레저 등의 서비스업이 아닌 실물 상품 판매의 경우에는 제조 수량과 재고 관리 이슈가 있기 때문에 전혀 다른 방식의 접근이 필요하다고 생각했다. 업계에서 흔히 말하는 버티컬(Vertical)에 최적화된 사업 모델의 개발이 필요하다고 생각했고 이를 구체화하기 위한 계획을 수강 신청서에 제출했다. 하지만 결과는 탈락. 이유도 제대로 듣지 못하고 수강 신청 탈락 결과를 받은 나는 무작정 E245 첫번째 수업에 찾아가서 스티브 교수님을 붙잡고 매달렸다. 스티브는 공동 구매 모델이 너무 뜨거운 감자이고 수도 없이 많이 다루어졌기 때문에 굳이 당신 수업에서 다루고 싶지 않다고 하셨고, 나는 정말 집요하게 조인트바이가 어떻게 다른지 설득했다. 나 말고도 수강 신청에서 탈락된 많은 학생들이 줄서서 면담을 기다리고 있는 상황이었기 때문에 스티브는 내게 이런 말을 하면서 면담을 끊었다. I can't wait to read your autobiography saying "Hey Steve, I proved you were fucking wrong at that time". I love entrepreneurial students like you because they always teach me that I could be wrong very often no matter how long I've been in Sillicon Valley.“스티브! 당신이 그 때 완전히 틀렸었단 걸 내가 증명했어!”라고 적힌 자네의 자서전이 나오길 기대하지. 내가 오랫동안 실리콘밸리에 있었음에도 불구하고 매우 자주 틀릴 수 있단 걸 가르쳐준 학생들은 항상 있었지. 나는 자네처럼 창업가 마인드를 가진 학생들이 정말 좋네!나를 매몰차게 거절한 교수님의 이 말씀이 아직도 생생하게 기억난다. 거절당했다는 것과 무관하게 스티브 특유의 유머와 함께 본인이 틀릴 수 있다라는 이야기에 진심이 느껴졌기 때문이다. 전설적인 창업가 출신의 교수님에게서 기대했던 답이 아니었기 때문에 머리 속에 강하게 각인된 것 같다. 20대 중반까지 계속 한국에서 교육받고 일해왔던 내게는 일종의 문화 충격이었다. 이후 나는 두번째 수업 날 전에 이 수업의 공동 교수인 앤 미우라-고(Ann Miura-Ko)를 찾아가서 다시 설득했고, 스티브를 또 한번 찾아갔다. 내 집요함에 두 손을 든 교수님들 덕분에 결국 조인트바이 아이디어로 E245 수업을 들을 수 있었고, 이게 나의 두번째 창업인 스타일세즈(StyleSays)의 시작이다.
조회수 344

[에디터 S의 관찰기] 주말 출근... 실화냐?

퍽 궁금했었다.입사 전, 앞을 함께 일할 사람들과 회사의 분위기와 문화를 알기 위해 B.A.T 브런치에 올라온 글들을 정독했는데 그중에서 가장 눈길을 끌었던 부분이기도 했고. 바로 브런치 글을 읽으며 마치 VR 가상체험이라도 한 듯, 생생하고 즐겁게 다가왔던 B.A.T 문화 중 하나인 노마드 데이 말이다!한 달에 한 번, 사무실을 벗어나 서로에게 영감을 줄 수 있는 새로운 공간에서 직접 기획한 프로그램을 진행하고 맛있는 것을 먹는 워크숍 같은 워크숍 같지 않은, 이 멋진 문화를 즐길 수 있다는 기대에 가득 차 있었다.그런데, 기대에 포함되지 않는 것이 하나 있었으니...그 한 달에 한 번이 토요일이란 사실! (월요일 출근보다 더 피곤한 것이 주말 출근 아니던가)하지만 모두가 의외로 덤덤하게 혹은 새로운 장소에 대한 인사이트를 공유하는 것이 아닌가.나만 주말 근무를 극혐하는 인간인가 라는 좌절감이 들 찰나, 노마드 데이의 히스토리를 듣게 되었다.원래는 매달 마지막 주 금요일에 노마드 데이를 진행했는데, 평일이다 보니 일이 끝나지 않는 경우가 다반사였고 리프레시라는 목적의 겉핥기만 하는 것 같다는 의견이 있어 모두에게 양해를 구한 뒤 마지막 주 토요일로 이동하게 되었다는 것. 대신, 주말 출근이 적용되어 노마드 데이가 끝나고 나면 반차가 발생하기 때문에 전~혀 섭섭할 이유가 없다!아, 이런 의사결정과 과정들이 B.A.T스러운 것이겠구나 하는 생각이 들었다.노마드 데이에 관련한 히스토리의 산을 넘고 나니, 또 다른 산(?)이 기다리고 있었다.이번 노마드 데이는 새로 입사한 사람들이 프로그램을 직접 기획하고 장소도 서치하며 노마드 데이를 준비해야 한다는 것이 아닌가! 입사한 지도 얼마 되지 않아 적응도 다 되지 않았는데, 내부의 대표적인 문화의 총괄 진행을 맡으라니. 함께 준비해야 하는 멤버와 눈이 마주치는 순간, 서로의 동공 지진을 느꼈지만 멘탈 보호 차원에서 암묵적으로 모른척하기로 했던 것 같다.(민망하게 짧은 시간이긴 하지만) 돌이켜보면,준비하는 동안 기존에 있는 멤버들에게 궁금한 점이 있으면 물어보고 의견도 구하다 보니 어느 때보다 짧은 시간 안에 자연스럽게 회사 그리고 사람들에 적응할 수 있었던 것 같다. 처음부터 끝까지 프로그램들을 기획하고 의견들을 조정하다 보니 회사의 구성원으로서의 주체성도 생긴 것 같고. 매번 다른 멤버들의 구성으로 돌아가며 준비하는, 노마드 데이의 진짜 매력은 '이번에는 어떤 시간으로 채워질까?'라는 기대와 '어떻게 알차고 즐겁게 채워볼까?'라는 고민이 만나는 그 지점에 있는 것이 아닐까 하는 생각이 들었다.[따뜻한 우드와 기분 좋아지는 녹색의 조화가 멋스러웠던 '포레스트 구구']오랜 고심 끝 노마드 데이의 장소로 선택한 곳은 아름다운 삼청동 거리에 위치하고 있는 '포레스트 구구'갑자기 추워진 날씨에 거리의 운치를 느낄 여유 없이 바쁜 발걸음으로 도착하자 널찍한 공간에 따뜻하게 들어오는 햇빛과 향긋한 커피 냄새가 우리를 반겨주었다. 먼저 온 사람들은 옹기종기 모여 수다의 장을 펼쳤고, 각자 사진을 찍으며 공간을 음미한 뒤 본격적인 노마드 데이가 시작되었다.시작은 새로운 멤버들의 Lessons learned!컨설팅 회사 출신 Y님의 ‘Logical Thinking’부터 에디터 S님의 콘텐츠 기획 스터디가 진행되었다.보통의 조직은, 새롭게 합류한 사람이 기존의 질서에 잘 스며들기를 바라곤 한다.B.A.T는 오히려 낯선 관점에서 포착하는 새로운 인사이트에 주목해 더 좋고 나은 방향을 함께 모색하고, 그에 맞는 변화를 시도하는 것 같다. B.A.T의 조직가치 중 하나인 ‘끊임없는 성장’은 바로 이런 자세가 있기에 가능해지는 것이겠지.뒤이어 마케터 K님은 프로젝트를 진행하며 생각한 개선점을 공유해주었는데, 빡빡한 스케줄로 바쁘고 정신없었을 텐데 그 와중에 효율적인 협업 방식에 대해 고민하고 있었다니 새삼 그녀가 참 대단해 보였다.  그리고 이어진 대표님의 4분기 비전 공유 시간에선, 우리가 어떤 일을 하고 있는지, 또 어떤 일을 벌일(!) 예정인지 들을 수 있었다. 이렇게 회사의 운영 계획을 멤버들에게 세세하게 공유해주는 모습에서 단지 우리를 회사의 '직원'으로만 생각하는 것이 아니라 함께 회사를 키워나가는 파트너 그리고 팀이라고 생각해준다는 것을 고스란히 느낄 수 있었다.B.A.T의 파트너십이 가장 드러나는 것이 바로 이런 시간들이 아닐까. 처음 회사에 들어와 신기했던 부분 중 하나가 거의 모든 것을 공유하고 있는 시스템으로, 각자의 업무와 계획은 물론 모든 파일과 리소스가 누구에게나 열려있고 접근 가능하게 되어 있었던 것이다.서로에 대한 신뢰가 바탕이 되지 않으면 할 수 없는 일들이기에,그런 것들을 B.A.T는 무리 없이 해나가고 있다는 사실에 많이 놀랐다.[두구두구 BGM은 우리들 입에서 나는 소리일 뿐...]다소 진지했던(?) 순서들이 끝나고, 한 주 동안의 투표로 가려진 MBP를 발표하는 시간이 이어졌다. MBP는 Most B.A.Table Player의 약자로, 조직가치에 가장 부합하는 멤버를 뽑는 시상식으로 이번 노마드 데이부터 계속 진행될 예정이다. MBP로 선정된 멤버에게는 소정의 선물이 제공되었는데, MBP를 주관하는 이사님이 상품의 스케일을 점점 키워보겠다는 포부를 밝혀 다시 한번 분위기가 후끈 달아올랐다.[놀라운 고객 경험, 끊임없는 성장 부문 수상자: 무려 2관왕의 자리에 오른 B.A.T 아이돌 디자이너  L님][압도적인 성과 부문 수상자: 압도적인 포즈로 존재감 드러낸 디자이너 J님][유기적인 협업 부문 수상자: B.A.T 핵인싸 디자이너 N님(좌), 항상 얼굴에 미소 가득한 AE C님(우)]수상자를 발표하는 것만큼이나 흥미로웠던 것은 익명의 투표자들이 써준 선정 이유들이었는데서로에 대한 애정, 고마움, 미안함 등이 섞여 있어 끈끈한 동료애와 유대감을 느낄 수 있었다.B.A.T 조직가치가 그럴듯하게 명목상으로만 만들어 둔 것이 아니라, 모든 멤버들이 이 조직가치에 동의하고 실천하고자 하기 때문에 그것이 일을 하는 태도에서 드러나게 되고 이는 곧 좋은 아웃풋으로까지 연결될 수 있는 것이리라 생각해본다.디자이너 N님과 J님의 개인 프로젝트 공유로 노마드 데이의 재미와 활기는 더해갔다.최근 비영리 목적으로 라는 인스타그램 매거진을 론칭한 디자이너 N님은 브랜드 아이덴티티를 작업했던 과정들을 공유해주었고, 디자이너 J님의 사진학 개론(?)에서는 그의 취미 발전사와 함께 시간대별로 변화한 여러 사진을 함께 보며 이야기를 나누었다.자타 공인 B.A.T의 핵인싸들답게 힙한 일상을 엿볼 수 있어 더 재미있었던 시간이었던 것 같다.두 디자이너의 작업이 궁금하다면 아래 채널에서 확인할 수 있다.* 디자이너 N님의 HEAVY MAGAZINE: www.instagram.com/heavy.magazine/* 디자이너 J님의 개인 블로그: www.breadzini.kr/절대 업무 강도가 낮지 않은 B.A.T에서 일과 동시에 개인 작업과 취미를 부지런히, 그것도 너무나 멋지게 하고 있는 멤버들의 이야기는 언제나 동기부여가 된다.다재다능한 B.A.T의 멤버들 덕분에 노마드 데이가 마르지 않는 샘처럼 새로운 이야기들로 가득 채워지고, 주말에도 기꺼이 출근할 수 있는 의지를 심어주는 것이 아닐까?장장 3시간이 넘는 시간 동안 엄청난 양의 인사이트 (그것도 업무 관련한)를 공유해도 이렇게 즐거운 이유는 모두가 지금보다 더 성장하기 위해 함께 노력하고 있다는 것을 알기 때문일 것이다. 
조회수 792

[어반테이스트] 새우는 어디에... 애슐리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 
조회수 4503

Kubernetes을 활용한 분산 부하 테스팅

Kubernetes을 활용한 분산 부하 테스팅동명의 글이 Google Cloud Platform에도 있으니 여기서는 여태까지 한 삽질과 교훈에 집중한다.첫 시도 ngrinder처음에는 ngrinder로 부하 테스트 환경을 구축하려 했다. 몇 달 전에 부하 테스트를 진행할 때 잠시 쓴 적이 있었기 때문에 굳이 다른 솔루션을 찾을 이유가 없었다. 하지만 결국 후회하고 다른 솔루션으로 넘어갔는데 그 이유를 중요한 순으로 꼽자면로컬 개발환경과 실제 환경이 차이가 많다. 로컬에서는 JUnit 기반으로 개발과 디버깅이 가능하다. 하지만 이렇게 작성한 코드를 ngrinder에 넣으려 하면 외부 라이브러리가 문제가 된다. .jar 등 패키지 파일을 업로드하는 방식이 아니라 Groovy 스크립트 따로 스크립트에서 사용하는 라이브러리 따로 업로드를 해야 하는데 상당히 번거롭다.웹 UI를 통해 설정한 내용이 내장 데이터베이스에 바이너리로 들어가기 때문에 ngrinder 데이터를 관리하기가 힘들다.개발이 활발하지 않다. 주력 개발자가 Naver를 떠났다는 이야기도 있긴 한데 아무튼 커밋 히스토리를 보면 개발이 정체되어 있는 건 분명하다.설계가 진보적이지 않다. 예를 들어 현재 쓰레드의 ID를 시스템이 직접 계산해서 주입하지 않고 개발자가 주어진 코드 스니펫을 Copy & Paste 해야 하는 이유를 모르겠다.등이 있다. 이런 까닭에 좀더 간단한 솔루션을 찾아보았다.대안몇 가지 대안을 살펴보았는데Artillery는 테스트 스크립트를 yaml로 기술하기 때문에 얼핏 쉬워보이지만 이런 식의 접근 방법은 매번 실망만 안겨주었다. 조금만 테스트 시나리오가 복잡해지면 일반적인 코딩보다 설정 파일이 훨씬 짜기가 어렵고 이해하기도 어렵다.config: target: 'https://my.app.dev' phases: - duration: 60 arrivalRate: 20 defaults: headers: x-my-service-auth: '987401838271002188298567' scenarios: - flow: - get: url: "/api/resource"Gatling은 아직 분산 서비스를 지원하지 않아서 제외했다. 팀 내에 Scala 개발경험이 있는 사람이 극소수인 점도 문제였다.Locust로 정착이런 까닭에 Locust로 넘어왔다. 장점은파이썬 스크립트로 시나리오를 작성하니 내부에 개발인력이 충분하다.로컬환경과 실제 부하테스팅 환경이 동일하다. 즉, 디버깅하기 쉽다.Locust 데이터를 Dockerize하기 쉽다.한마디로 ngrinder에서 아쉬웠던 점이 모두 해결됐다. 반면 ngrinder에 비해 못한 면도 많긴 하다.통계가 세밀하지 않다.테스트 시나리오를 세밀하게 조정하기 힘들다.현재로썬 그때그때 가볍게 시나리오를 작성해서 가볍게 돌려보는 게 중요하지 세밀함은 그리 중요하지 않아서 Locust가 더 나아 보인다. 시나리오는 몰라도 통계의 경우, DataDog 같은 모니터링 시스템에서 추가로 정보를 제공받기 때문에 큰 문제도 아니긴 하다.결과물Locust on KubernetesGoogleCloudPlatform/distributed-load-testing-using-kubernetes에 있는 소소코드를 참고로 작업하면 된다. 단지 Dockerfile의 경우, 테스트 스크립트만 바뀌고 파이썬 패키지는 변경사항이 없는 경우에도 파이썬 스크립트 전체를 새로 빌드하는 문제가 있다.# Add the external tasks directory into /tasks ADD locust-tasks /locust-tasks# Install the required dependencies via pip RUN pip install -r /locust-tasks/requirements.txt 그러므로 이 부분을 살짝 고쳐주면 좋다.ADD locust-tasks/requirements.txt /locust-tasks/requirements.txtRUN pip install -r /locust-tasks/requirements.txtADD locust-tasks /locust-tasksngrinder on Kubernetesngrinder를 Kubernetes v1.4.0 위에서 돌리는데 사용한 설정은 다음과 같다. 참고로 dailyhotel/ngrinder-data는 ngrinder의 데이터만 따로 뽑아서 관리하는 도커 이미지이다.ControllerapiVersion: v1 kind: Service metadata:  name: ngrinder  labels:  app: ngrinder  tier: middle  dns: route53  annotations:  domainName: “ngrinder.test.com” spec:  ports:  # the port that this service should serve on  — name: port80  port: 80  targetPort: 80  protocol: TCP  — name: port16001  port: 16001  targetPort: 16001  protocol: TCP  — name: port12000  port: 12000  targetPort: 12000  protocol: TCP  — name: port12001  port: 12001  targetPort: 12001  protocol: TCP  — name: port12002  port: 12002  targetPort: 12002  protocol: TCP  — name: port12003  port: 12003  targetPort: 12003  protocol: TCP  — name: port12004  port: 12004  targetPort: 12004  protocol: TCP  — name: port12005  port: 12005  targetPort: 12005  protocol: TCP  — name: port12006  port: 12006  targetPort: 12006  protocol: TCP  — name: port12007  port: 12007  targetPort: 12007  protocol: TCP  — name: port12008  port: 12008  targetPort: 12008  protocol: TCP  — name: port12009  port: 12009  targetPort: 12009  protocol: TCP  selector:  app: ngrinder  tier: middle  type: LoadBalancer  — - apiVersion: extensions/v1beta1 kind: Deployment metadata:  name: ngrinder spec:  replicas: 1  template:  metadata:  labels:  app: ngrinder  tier: middle  spec:  containers:  — name: ngrinder-data  image: dailyhotel/ngrinder-data:latest  imagePullPolicy: Always  volumeMounts:  — mountPath: /opt/ngrinder-controller  name: ngrinder-data-volume  — name: ngrinder  image: ngrinder/controller:latest  resources:  requests:  cpu: 800m  ports:  — containerPort: 80  — containerPort: 16001  — containerPort: 12000  — containerPort: 12001  — containerPort: 12002  — containerPort: 12003  — containerPort: 12004  — containerPort: 12005  — containerPort: 12006  — containerPort: 12007  — containerPort: 12008  — containerPort: 12009  volumeMounts:  — mountPath: /opt/ngrinder-controller  name: ngrinder-data-volume  volumes:  — name: ngrinder-data-volume  emptyDir: {}AgentsapiVersion: extensions/v1beta1 kind: Deployment metadata:  name: ngrinder-agent spec:  replicas: 5  template:  metadata:  labels:  app: ngrinder-agent  tier: middle  spec:  containers:  — name: ngrinder-agent  image: ngrinder/agent:latest  imagePullPolicy: Always  resources:  requests:  cpu: 300m  args: [“ngrinder.test.com:80”]구 블로그 시절의 댓글#데일리 #데일리호텔 #개발 #개발자 #개발팀 #기술스택 #도입후기 #일지 #Kubernetes #인사이트
조회수 2055

다양한 형태를 지원하는 리스트 UI, 잘 그리고 계신가요?

대략 1년 반 전, 5.0 롤리팝과 함께 나타난 RecyclerView. ListView 를 이용할 때 아주 기초적이고 정석적인 개념으로 사용되던 ViewHolder pattern 을 반 강제화? 하면서 동시에 성능까지 개선한 ListView 의 개량버전.앱 시장이 활성화되면서 한 가지 타입의 뷰만 반복적으로 보여주는 단순한 구성보다는 다양한 타입의 뷰를 보여주는 앱들이 많아지고 보편화 된 시점에 이것을 구현하기 위한 Adapter.getView 메소드는 혼돈.chaos 가 되었지요. 가독성을 높일만한 나름대로의 시도를 해보고 있을 때, RecyclerView 가 갑툭튀 했고 이걸 이용하면 원하는 만큼의 많은 타입의 뷰를 “가독성 좋게 만들어 볼 수 있겠다” 라는 생각이 들었습니다.그래서 RecyclerView.Adapter 를 상속 받아 다양한 타입의 뷰를 바인딩 할 수 있게 도와주는 헬퍼 클래스, MultiItemAdapter 라는 것을 만들어 보게 됐습니다. 구 회사 프로덕트에 적용해보기도 하고, 개인 프로젝트에 넣어보기도 하고, 토스랩에서 서비스하고 있는 “잔디”에 녹여내보기도 했는데 나쁘지 않은 느낌이들어 그 과정을 공유하고 많은 분들께 피드백도 받고 싶습니다. 또, 어떻게 더 잘 활용하고 계신지 여쭙고 싶습니다.RecyclerView.Adapter 의 이해를 위해 단순단순하게 만들어보자public class BasicAdapter extends RecyclerView.Adapter { private List mItems = new ArrayList<>(); @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(android.R.layout.simple_list_item_1, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.mTextView.setText(mItems.get(position)); } class MyViewHolder extends RecyclerView.ViewHolder { private TextView mTextView; public MyViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(android.R.id.text1); } } ... 이런 식으로 구현하면 되는군, 하지만 내가 최종적으로 원하는 건 다양한 ViewHolder 를 다뤄야 되는 건데 ViewHolder 가 많아지는 경우 inner class 는 쓰면 안되겠다! ViewHolder 들은 따로 패키지 만들어서 관리하자. 음 근데 ViewHolder 를 구성하고 난 다음 어떻게 그려지는 지에 대해 궁금하면 다시 어댑터를 찾아가야 되고, 반대로 어댑터에서 ViewHolder 내 구성요소가 어떻게 생겼는지 궁금하면 다시 ViewHolder 찾아가서 뒤져봐야되는 군. 이건 비효율 적인 것 같다. ViewHolder에 뷰를 그리는 메소드를 하나 만들자. 아 기왕이면 추상화된 클래스를 만들어 돌려돌려 쓰자. 하나 더 Generic 을 사용하자.public abstract class BaseViewHolder extends RecyclerView.ViewHolder { public BaseViewHolder(View itemView) { super(itemView); } public abstract void onBindView(ITEM item); } 뷰를 그리는데 쓰이는 객체는 Generic 을 이용하면 ViewHolder 안에서 그리는 작업 또한 해결이 가능하겠군! 이걸 이용해서 다시 만들어보자.public class MyViewHolder extends BaseViewHolder { private TextView mTextView; public MyViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(android.R.id.text1); } @Override public void onBindView(String item) { mTextView.setText(item); } } ... public class BaseAdapter extends RecyclerView.Adapter { private List mItems = new ArrayList<>(); @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(android.R.layout.simple_list_item_1, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.onBindView(mItems.get(position)); } public void setItems(List items) { mItems.clear(); mItems.addAll(items); } @Override public int getItemCount() { return mItems.size(); } } 음 원하는 모양새다. 근데 이제 Adapter 에선 ViewHolder 에 들어갈 layout 이 어떤 건지 관심꺼도 되겠네. 게다가 ViewHolder 에서 layout 궁금하면 다시 또 찾아와야 되는게 문제다. 좀 더 명시적인 방법으로 Factory method 로 생성자를 제한해보자. RecyclerView.ViewHolder 는 View 를 가지는 생성자가 강제되니 이렇게 바꾸자.public static MyViewHolder newInstance(ViewGroup parent) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(android.R.layout.simple_list_item_1, parent, false); return new MyViewHolder(itemView); } private MyViewHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(android.R.id.text1); } 이렇게 하면 어떤 layout 을 다루고 있는지도 금방 알 수 있겠다. 이 정도만 되도 구색을 다 갖춘듯하니 이 느낌으로 다양한 타입의 뷰들을 다뤄보자.public class BasicMultiTypeAdapter extends RecyclerView.Adapter { public static final int VIEW_TYPE_A = 0; public static final int VIEW_TYPE_B = 1; private List mItems = new ArrayList<>(); @Override public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == VIEW_TYPE_A) { return AViewHolder.newInstance(parent); } else { return BViewHolder.newInstance(parent); } } @Override public void onBindViewHolder(BaseViewHolder holder, int position) { holder.onBindView(mItems.get(position)); } public void setItems(List items) { mItems.clear(); mItems.addAll(items); } @Override public int getItemCount() { return mItems.size(); } @Override public int getItemViewType(int position) { if (position % 2 == 0) { return VIEW_TYPE_A; } else { return VIEW_TYPE_B; } } } 음 깔끔하긴 하다. 근데 getItemViewType 이 스크롤 할 때마다 불릴 텐데, 분기도 많고 연산이 생겼을 때 스크롤 속도에 괜한 영향을 줄 듯? view type 을 차라리 미리 가지고 있게 만들자. 또! 가만보니 한 타입의 객체를 이용해서 다른 스타일로 뷰를 보여줄 뿐이었네. 이것도 여러가지 객체를 담을 수 있게 만들어야지.뷰를 그릴 대상이 될 객체랑 타입을 가지는 Wrapper class 를 만들어서 해결하자. 이러면 Adapter.onBindViewHolder 랑 Adapter.getItemViewType 도 해결이 되겠군.public abstract class MultiItemAdapter extends RecyclerView.Adapter { private List mRows = new ArrayList<>(); @SuppressWarnings("unchecked") @Override public void onBindViewHolder(BaseViewHolder holder, int position) { holder.onBindView(getItem(position)); } @SuppressWarnings("unchecked") public ITEM getItem(int position) { return (ITEM) mRows.get(position).getItem(); } public void setRows(List mRows) { mRows.clear(); mRows.addAll(mRows); } @Override public int getItemCount() { return mRows.size(); } @Override public int getItemViewType(int position) { return mRows.get(position).getItemViewType(); } public static class Row { private ITEM item; private int itemViewType; private Row(ITEM item, int itemViewType) { this.item = item; this.itemViewType = itemViewType; } public static Row create(T item, int itemViewType) { return new Row<>(item, itemViewType); } public ITEM getItem() { return item; } public int getItemViewType() { return itemViewType; } } } MultiItemAdapter 완성.네, 저는 이렇게 만들어서 1년 반 정도 필요한 부분(복잡해 질만한 부분)에 이 클래스를 상속받아 구현했습니다. 사용방법을 예로들어 데이터베이스나 서버로부터 긁어온 아이템들을 타입에 따라 A, B로 나눠서 보워줘야 한다면,// MutiItemAdapter 구현 public class AdvancedItemAdapter extends MultiItemAdapter { public static final int VIEW_TYPE_A = 0; public static final int VIEW_TYPE_B = 1; @Override public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == VIEW_TYPE_A) { return AViewHolder.newInstance(parent); } else { return BViewHolder.newInstance(parent); } } } // Activity 나 Fragment 등 view 요소에서 ListAdapter item setting. public void setItems(List items) { List rows = new ArrayList<>(); for (int i = 0; i < items xss=removed>이렇게 해주면 됩니다. 그런데 위 사용방법을 보면 추가적인 새로운 타입(Row)의 List 와 반복문을 돌려야 된다는 것이 단점으로 보이는데요. 그럼 이 클래스를 사용하지 않고 직접 구현한 결과를 좀 볼까요?public class NormalItemAdapter extends RecyclerView.Adapter { public static final int VIEW_TYPE_A = 0; public static final int VIEW_TYPE_B = 1; private List mItems = new ArrayList<>(); @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == VIEW_TYPE_A) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(android.R.layout.simple_list_item_1, parent, false); return new AViewHolder(itemView); } else { View itemView = LayoutInflater.from(parent.getContext()) .inflate(android.R.layout.simple_list_item_1, parent, false); return new BViewHolder(itemView); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof AViewHolder) { Item item = getItem(position); ((AViewHolder) holder).getTextView().setText(item.getName()); } else { ((BViewHolder) holder).getTextView().setText("I am B."); } } private Item getItem(int position) { return mItems.get(position); } public void setItems(List items) { mItems.clear(); mItems.addAll(items); } @Override public int getItemViewType(int position) { if (getItem(position).getType().equals(Item.ITEM_TYPE_A)) { return VIEW_TYPE_A; } else { return VIEW_TYPE_B; } } @Override public int getItemCount() { return mItems.size(); } } 뭐, 나쁘진 않습니다. 이 정도 수준으로 개발이 끝나도 되고 추가적인 확장이 필요하지 않아보인다면 굳이 MultiItemAdapter 를 쓸 필요가 없습니다.중요성을 가지는 리스트 위주의 화면에서 위와 같이 개발된다면 당장 보이는 제 불만은 onCreateViewHolder, onBindViewHolder 계속해서 분기가 들어가게 되고 getItemViewType 에서는 계속 해서 List 데이터에 접근해야 한다는 것입니다. 접근 자체가 큰 문제, 큰 영향을 끼치지 않을 정도 규모의 자료구조라면 논외로 치더라도, 뷰 타입이 조금만 늘어나도 onCreateViewHolder, onBindViewHolder 의 덩치는 엄청 커질 겁니다.예를들면 맨 마지막 아이템 타입이 B 이고 현재 추가 될 아이템 타입이 A인 경우에는 다른 형태의 디바이더를 넣어야 한다던지 하는 추가적인 확장이 이루어져야 한다면 골치가 꽤 아플겁니다. 특히 저는 위 예와 비슷하게 뷰 타입에 따라 각기 다른 아래 위 마진값을 요구받을 때, ViewHolder 마다 이전 데이터를 참고하게 만들고 동적으로 Visibility 처리를 하거나 MarginLayoutParams 를 고치는 것이 비효율적으로 느껴져서 height를 주입받는 DividerViewHolder 를 하나 만들어 사용하곤 했습니다. 이렇게 하니 각각의 ViewHolder 들이 데이터들에 의존적이지 않게 코딩이 가능했었습니다. 한 가지 더 예를들어 리스트 중간 중간 광고가 보여지게 되고 이 광고 클래스는 완전히 다른 객체로부터 보여줘야 한다 라고 했을 때 MultiItemAdapter 를 이용하면 쉽게 해결이 가능합니다.정작 근 1년간 “잔디”를 만들면서는 자주 쓰진 않았는데, 작년부터 각광받기 시작한 MVP 패턴을 사용할 때 View 에서의 로직을 최소화 하려고 한다면 써먹을 수 있는 모델로 적합하지 않나 생각이 들면서 다시 사용하기 시작했습니다. Presenter 에서 Row 를 만들어 던져주면 View 는 그것을 그대로 사용하게 만들 수 있다는 생각이 들었거든요.(아직까지는 비교적 크지 않은 부분에서만 사용하게 되서 View(MainThread)에서 Row 를 만들게 코딩해 놓은 컴퍼넌트가 더 많네요 흑흑) 더 복잡한 구조를 갖는 컴퍼넌트를 만들어야 할 때는 비동기 스레드에서 Row 까지 만들어 내보내는 것도 해볼까 하는 생각도 듭니다.제 눈에만 괜찮은 구조인지, 생각지도 못한 치명적인 단점이 있진 않은지, 구조나 설계 측면에서 안 좋은 점은 있지 않은지, 논리없이 Generic 으로 “퉁” 치고 있는 코드는 아닌지, 여러가지가 많이 궁금합니다 ^^ MultiItemAdapter 를 쓴 것과 안 쓴것의 정말 심플한 비교 소스를 열어놓았습니다 MultiItemAdapter 또, 여러분들은 어떻게 구현하고 계신지요? 여러분의 관심이 필요합니다 ! :)#토스랩 #잔디 #JANDI #개발 #개발자 #인사이트 #경험공유
조회수 2256

MOIN 마케팅 인턴을 소개합니다

이제 9월도 얼마 남지 않았네요. 유난히도 더웠던 올해 여름은 완전히 끝난 듯 합니다.환절기에 감기 조심하세요!오늘은 저희 모인에 지난 8월 말에 입성한 김보국 마케팅 인턴사원을 소개할까 합니다.들어온지 딱 한달 된 그는 벌써 보거스, 뻐꾸기 등 다양한 별명을 가지고 있다- Professional Experience -2016.05 - 2016.07 전용범회계사무소 회계인턴2012.06 - 2012.09 대구지방 국세청 동대구 세무서 세무인턴- Education -2015.08 - 현재 College of William and Mary, Economics2012.09 - 2013.08 University of California, San Diego2008.08 - 2012.06 San Joaquin Memorial High School▶     업무에서 어떤 부분을 담당하고 계신가요? 저는 마케팅팀 인턴으로 사업개발 자료 조사와 컨텐츠 작성 등을 하고 있습니다. 아직은 일을 담당한다기 보다 해보면서 하나하나 배워나가고 있습니다.▶     아직 학생이시죠? 지금 전공하고 계신 과목은 왜 선택하게 되셨나요? 네. 현재 휴학을 하고 모인에서 일하고 있습니다. 사실 저는 캘리포니아 대학교를 다니다가 윌리엄앤메리대학으로 편입을 했습니다. 이 시기에 “자본주의 역사 바로알기"라는 책을 접하게 됐는데, 경제와 금융을 매력적으로 느꼈죠. 내년에 복학을 하면 금융을 주전공으로 하고 회계를 부전공할 계획입니다. 회계의 경우는 숫자로 경영 상태를 측정할 수 있는 법을 배울 수 있는 과목이라 생각합니다. 앞으로 경영인을 꿈꾸는 사람으로서 필요한 과목이라 생각합니다.'나는 여전히 배움에 목마르다' by. 보쿡라테스▶     모인에 합류하게 된 계기는 무엇이었나요? 우연한 기회에 스타트업 전문 구인구직 플랫폼인 로켓펀치에서 모인을 알게 되었습니다. 해외송금은 외국에서 유학을 하고 있는 저와 매우 관련있는 금융 서비스입니다.특히 모인은 송금수수료를 파격적으로 낮추어 사용자가 받을 수 있는 금액을 더 늘려주겠다는 사업 아이템을 바탕으로 합니다. 이 부분이 서비스를 직접 써본 사람으로서 매우 매력적이라고 느꼈습니다. 그래서 지원을 하게 됐습니다. 이후 서일석 대표님과 구글캠퍼스에서 만나 사업에 대한 이야기를 자세히 들을 수 있었습니다.이야기를 하고 나니 제가 해외송금을 필요로 하는 사용자로서 모인 서비스 홍보에 있어 무언가 할 수 있겠다는 생각이 들었습니다. 그래서 모인에 꼭 합류하고 싶었습니다.▶     자신있는 파트와 더 키워나가고 싶은 역량은? 자신있다기보다는 저는 새로운 사람을 만나고 질문 하는 걸 좋아합니다. 새로운 사람을 만나서 질문을 통해 이야기 나누고 서로가 살아온 삶에 대해 공유를 할 수 있다는 점이 즐겁기 때문이죠. 같은 맥락에서 모인 팀원들과 일하는 게 즐겁습니다. 일에 대해서 뿐만 아니라 팀원들 한명 한 명 에게도 물어 보고 싶은 게 엄청 많기 때문입니다.아, 사무적으로 잘 하는 게 있습니다. 저는 하나를 파고드는 걸 좋아해서 조사하고 분석하는 분야에 자신 있습니다. 더 키워 나가고 싶은 역량은 어떤 아이디어를 누군가에게 설득 할 수 있는 능력입니다. 아무리 좋은 아이디어라 하더라도 논리적으로 잘 설명하지 못하면 설득 할 수 없다는 걸 직접 경험하고 아쉬웠던 적이 있기 때문입니다. 그는 질문하기를 정말 좋아한다. 정.말.로.▶     모인에서 한 달 정도 일했는데 어땠나요? 저는 모인에서 매순간이 감사했습니다. 구글캠퍼스라는 멋진 사무공간에서 일할 수 있다는 것뿐만 아니라, 배울 점이 많은 모인 팀원들과의 대화 등 사소한 순간 조차도 즐겁게 느껴졌습니다.사실 처음 대표님과 인터뷰할 때, 지금 당장 팀에 필요한 사람은 안드로이드 개발자라고 하셔서 팀이 저를 필요로할 지 매우 걱정했었기 때문입니다. 결국 모인 직원분들 내부 상의 끝에 제가 인턴을 할 수 있게 됐다고 했을 때, 그 기대에 꼭 부응하겠다고 결심했고, 제 나름대로 한달간 노력했습니다.뿐만 아니라, 뉴스에서만 보던 국내 스타트업 세계 안에서 직접 경험해볼 수 있다는 게 저에겐 정말 소중한 자산이 됐습니다. 구성원들이 서로 배려하고 서로 경청하고 진심어린 조언을 주고 받는 모습에서 모인은 정말 열정적인 사람이 모여있는 곳임을 알 수 있었습니다.김보국 사원에게 '함께 일하고 싶은 사람'이란?#근성 #신뢰 #배려▶     앞으로 어떤 쪽으로 일하고 싶으신가요? 앞으로 저는 졸업 후에 증권사 리서치 센터, 비즈니스 컨설팅 회사, 외국계 투자자문사 쪽에서 커리어를 쌓아보고 싶습니다. 이런 멋진 경험들을 바탕으로 언젠가 저희 모인 대표님과 같이 사용자를 중심으로 하는 프로덕트, 서비스 등을 제공하는 회사를 일구어 보고 싶습니다.▶     아직 한 달정도 밖에 안됐지만 그래도 모인에서 일하면서 스타트업은 어떤 곳이라는 생각이 들던가요? 제가 한 달간 느낀 스타트업은 이렇게 정리 할 수 있을 거 같습니다.첫째, 직급과 상관없이 논리적이고 합리적인 요소에 근거하여 사업에 도움이 되는 아이디어라면 뭐든 받아들일 준비가 되어있는 곳. 둘째, 무엇이라도 먼저 해보고 그 경험을 바탕으로 사업을 더 크게 발전 시킬 수 있는 곳.  셋째, 개개인의 역량 하나 하나가 모여 팀 전체의 발전에 밑거름이 되는 곳이기 때문에 팀 전체에 누가 되지 않고 원동력이 되어야 겠다는 책임감을 심어 주는 곳마지막으로 스스로가 회사에 기여하고 있다는 보람을 느낄 수 있는 곳.  모인에서 많이 배우는 중입니다.  "모인에서 최선을 다하겠습니다"- 김보국이 꼽은 인생 명언 -사소취대(捨小取大)작은 것은 버리고 큰 것을 취한다(순간의 잘못된 선택으로 이제 껏 쌓아온 모든 것들이 무너지게끔 하는 일은 없도록 하자는 제 다짐입니다)#모인 #MOIN #인턴 #인터뷰 #인턴생활 #팀원소개 #팀소개 #기업문화 #조직문화 #사내문화
조회수 1533

비전문가를 위한 유전자 정보 기반 산업에 대한 이해

비전문가를 위한 유전자 정보 기반 산업에 대한 이해 "유전자 해독( Genome sequencing)'을 아웃소싱하면 핵심기술은 그 회사에 있는 것 아닌가요? 3billion은 그럼 뭘 하는 건가요?"3billion 시작하고, 기자나 VC 분들에게 아주 빈번하게 받는 질문인데, 아마도 전문가 분들이 아니라면 모든 유전 정보 사업에 대해 가질 수 있는 의문일 수 있겠다 싶어 비전문가 분들이면서 유전자 정보 산업에 대해 궁금해 하시는 분들의 시각에서 답변을 정리해 본다.유전자 분석 과정에 대한 이해 사실 위 질문은 유전자 분석 이라 통칭되는 두리 뭉술한 용어에 대한 오해에서 근원하고 있는 것 같다. 보통 '유전자 분석( Genome analysis)' 이라는 용어를 사용할 때는,  여러 단계의 과정을 포괄해 이야기하는 경우가 많은 것 같다.보통 유전자 분석이라는 용어를 쓸 때  크게 '유전자 해독( Genome sequencing or genome decoding)'과 해독된 Data를 분석해 원하는 목적의 정보를 얻어내는 '유전자 정보 해석( interpretation )' 두 가지를 모두 포괄해 사용하는 경우가 많다.'유전자 해독'은 우리 몸 세포 안의 게놈에 있는 30억 쌍의 DNA 염기 서열을 읽어내는 과정을 의미 한다. DNA는 A,G,T,C 4개의 염기로 구성되어 있다. 따라서 유전자 해독은 이 4개의 염기 A,G,T,C 로 구성된 30억개의 DNA 염기 서열을 읽어내어, 30억개로 이루어진 문자 서열을 얻어내는 과정을 의미한다.2003년 완성된 인간게놈프로젝트가 바로 '유전자 해독'을 목적으로 한 연구 프로젝트 였고, 이를 통해 인류 최초로 30억 쌍의 염기 서열을 처음 부터 끝까지 읽어 낼 수 있었다. 당시 이 한벌의 염기 서열을 해독해 내는데 27억 달러 우리 돈 3조원 가까운 비용이 들었다. 최초의 인간 게놈이 완성된 이래로 유전자 해독 기술은 매 1.8년 마다 2배씩 성능이 개선된다는 반도체 무어의 법칙을 가볍게 능가하는 속도로 매우 빠르게 발전되어, 2014년 말 기준 한 사람의 전체 게놈을 해독하는데 $1000, 우리돈 100만원 수준으로 낮아졌다.유전자 해독 기술이 이렇게 빠르게 발전해, 이제 유전자 정보가 필요한 사람이라면 누구든 유전자 해독을 통해 자신의 유전자 정보를 획득할 수 있는 시대가 펼쳐진 것이다.유전자 해독이 가능해졌으니, 이제 게임 끝! 인가? 아니다.유전자 해독은 30억 쌍의 DNA 염기 서열을 해독한 text 정보일 뿐, 이 정보를 활용해 필요로 하는 다양한 용도로 활용하기 위해서는  '유전자 정보 해석' 기술이 필요하다.백만원 유전자 해독, 십억원 유전자 해석 시대게놈 해독 비용이 낮아져 많은 게놈이 생산되면서, 이를 해석하기 위한비용이 그에 비례해 막대하게 증가하고 있는 상황을 보여주는 그래프( 이미지 출처: https://epilepsygenetics.net/2014/06/27/when-will-we-have-the-1000-epilepsy-genome/ )$1000 게놈 시대가 가시화 되면서, '백만원 게놈 해독, 십억원 게놈 해석( $1000 genome, $1,000,000 genome interpretation)' 시대라는 캐치프레이즈가 등장했다. 유전자 해독 기술이 빠르게 발전해 대중화 될 수 있을 정도로 가격이 낮아져 많은 게놈이 생산되면서,  이들 게놈 정보를 활용해 질병 진단 등에 활용하기 위한 '유전자 해석'에 막대한 비용이 필요한 시대가 펼쳐진 것이다.'유전자 해석( Genome interpretation)'은 앞서 설명한 유전자 해독과정을 통해 생산된 DNA 염기서열 문자 정보로 구성된 Raw data를 필요한 용도로 가공하고 해석해 원하는 목적의 정보를 생산해 내는 과정을 포괄한다.이 과정은 컴퓨터를 통한 대규모 연산 과정을 통해 진행된다. 왜 꼭 그래야만 할까?유전자 해독기를 통해 생산된 raw data는 대규모의 이미지 파일들로, 한 사람의 게놈을 읽어내는데 1Tb(테라바이트)의 정보를 생산해 낸다. 이 이미지 파일을 처리해 생산된 한 사람의 DNA 문자는 30억 쌍에 달한다. Text 파일로 이 문자열을 저장하는데만 3Gb ( 기가 바이트)가 필요하다. 현재 유전자 해독 기술의 특성상 같은 부위를 평균 30배로 읽어내는데 이렇게만 해도 90G 여기에 각 DNA 염기를 읽어내는데 필요한 Quality score 등의 정보를 포함하면 270G로 불어난다. 270Gb 의 정보를 컴퓨터의 도움 없이 처리해 낼 수는 없다. 그래서 해독된 유전자 정보를 활용하기 위해서는 컴퓨터를 통한 정보 처리를 통하지 않을 수 없게 되는 것이다.유전자 해석 과정은 여기에서 부터 시작한다. 여기서 부터는 필요한 목적에 따라 다양한 알고리즘과 분석 방법론을 기반으로 각각의 기술들이 발산한다. 암환자의 유전자 정보로 정밀진단을 하기 위해서는 체세포 변이를 찾아내는 알고리즘을 사용하고, 산전유전진단을 위해서는 산모의 유전자에서 태아의 유전자를 구분해 내는 알고리즘을 사용하고, 최근 이슈가 되고 있는 액체생검을 통한 암조기진단을 위해서는 암세포에서 근원한 변이를 찾아내는 알고리즘을 사용한다.우리 3billion은 유전적 원인에 기반한 희귀질환을 검사할 수 있도록 생식세포 변이( Germ-line mutation)을 판별하고, 다양한 질병들의 유전 특성에 기반해 변이들이 질병을 유발할 것인지, 유발한다면 어느 정도 확률로 이런 가능성이 존재하는지 등을 정밀하게 계산해 낼 수 있는 알고리즘을 개발하고, 여기에는 딥러닝을 포함한 다양한 AI 기술들이 폭넓게 활용된다.즉, 목적에 따라 유전자 해석에 필요한 기술들은 서로 다르다. 그래서, 어떤 목적을 가진 제품을 만드느냐에 따라서, 유전자 정보 기반 회사들은 서로 다른 기술을 고도화 시켜나가는 각자의 길을 걷게 된다.3billion은 희귀 질환을 검사하는데 필요한 다양한 data analysis algorithms/methods, UI/UX 들을 개발하는데 역량을 집중하는데, 여기 활용되는 해석 기법들은 Grail 등의 암 조기 진단을 위한 회사나 Natera 등의 산전유전검사 제품을 만들어내는 회사들이 활용하는 해석 기법과 완전히 다르다.이는 마치, '컴퓨터와 프로그래밍 랭귀지'라는 동일한 자원을 활용해 각 software 회사들이 서로 다른 software를 만든 것과 같다고 할 수 있다. Microsoft 는 운영체제 소프트웨어를, 구글은 검색 엔진 소프트웨어를, 오라클이 DB 소프트웨어를 만든 것 처럼.유전자 산업의 '핵심 기술'자, 그러면 유전자 산업의 핵심 기술은 무엇일까?  유전자를 읽어내는 유전자 해독 기술인가? 아니면 읽어낸 유전자 정보를 해석하는 기술인가? 둘 다 핵심 기술이다. 유전자 해독의 핵심 기술은 유전자 해독기를 만들어 내는 회사에 핵심 기술이 있다. 현재 지구상의 유전자 해독기 시장을 독점하고 있는 illumina 가 가장 경쟁력 있는 유전자 해독 핵심 기술을 가진 곳이라 할 수 있겠다. 그 외에 게놈 해독기를 개발, 사업화 하고 있는 Pacific biosciences,  Oxford nanopore 등이 게놈 해독 핵심 기술을 가지고 있는 회사들이라 할 수 있다.유전자 정보 해석의 핵심 기술은 IT 회사들이 그랬듯, 각 목적에 맞는 software를 만드는 곳들에 핵심 기술이 분산되어 있고, 앞으로 이 분산이 가속화될 것으로 예상된다.  구글이 검색에선 야후, 라이코스, AOL 등 초기 경쟁자들을 물리치고 가장 독보적인 경쟁 우위를 점했고, 마이크로소프트가 윈도우를 기반으로 운영체제 소프트웨어를 독점했듯,  유전자 정보를 기반으로 다양한 문제를 해결하는 산업 분야들이 파생이 될 것이고, 각 영역에서 경쟁 우위를 가지는 회사들이 등장할 것이다.여기서 한가지 강조하고 싶은 것은, 어느 한 도메인의 해석 기술이 좋다고 다른 영역의 문제를 푸는데 필요한 해석 기술이 좋다고 할 수 없다는 점이다. 구글의 검색 엔진은 검색에서 의미가 있지, 운영체제를 만드는데 큰 도움이 안 되듯, 유전자 해석 기술도 마찬가지. Myriad 의 유방암 위험도 검사를 위한 소프트웨어가 산전태아유전 검사를 하는데는 큰 의미가 없다. 마찬가지로 Natera의 산전태아유전 검사를 위한 소프트웨어는 Counsyl의 임신전 태아 유전병 위험도 검사에는 큰 도움이 안 된다.물론, 구글이 Facebook처럼 SNS 를 만들고, Microsoft 가 구글처럼 검색엔진 Bing 을 만들 듯, 다른 회사의 제품들을 만들어 낼 수 있다. 소프트웨어라는 영역이 의례 그러하듯. 하지만, 이미 역사를 통해 우리는 잘 알고 있다. 그런 식으로 타회사의 소프트웨어를 따라 만들어 성공한 전례는 손에 꼽는다는 것을.  구글은 수많은 인재들을 영입해 수많은 소프트웨어 서비스를  출시했지만, 본업인 검색과 이메일 외에는 크롬을 제외하고 성공한 서비스라고 할 만한 것이 없다.  마이크로소프트 역시 수많은 소프트웨어를 만들어 냈지만, 운영체제와 오피스 제품군 이외엔 성공한 제품이 없다.구글은 직접 만든 제품이 아니라, Youtube나 안드로이드 등 좋은 소프트웨어를 만든 회사들을 인수해 막대한 매출을 내는 회사로 키운 경우가 더 많은 듯 하다( 물론 talent acquisition 에 그친 경우가 훨씬 더 많긴 하다만). 마이크로소프트는 그 마저도 신통치 않았지만.기본적으로 '인간 게놈 정보'를 바탕으로, 목적에 맞는 '유전자 해석' 소프트웨어를 주력으로 하는 유전자 정보 산업군의 회사들도 IT 기업들과 같은 전례를 따르며 시장이 성장해 나갈 것이라 생각한다.다만 한가지 변수가 더 있는데, 그게 바로 Data.또하나의 핵심 기술, Data 인간 최고수 바둑 기사들을 무참히 짓밟으며 큰 이슈가 된 AI 기술이 엄청난 주목을 받고 있다. 딥러닝 기술의 발전을 등에 엎은 구글 딥마인드의 알파고가 엄청난  '바둑 실력'을 쌓아, 인간 최고수들을 압도했기 때문이다. 헌데 알파고는 어떻게 '바둑 실력'을 습득한 것일까?알파고는 어떻게 인간 최고수 이세돌을 능가하는 바둑 실력을 학습할 수 있었을까?바로, 인간 최고수들의 바둑 대결을 통해 얻어진 '바둑 대결 기보 Data' 를 통해 바둑 기술의 습득이 가능했던 것이다.  딥마인드 팀이 가진 바둑 대결 기보 Data 에 인간 최고수들 간의 대결 Data는 빠져 있었다면 어땠을까? 절대 인간 최고수들을 능가하는 수준의 실력을 쌓지 못했을 것이다.딥러닝을 포함한 AI 에서 알고리즘도 핵심 기술이지만, 그 보다 더 중요한, 경쟁력을 가르는 핵심은 Data라고 할 수 있다.  특정 문제를 풀기위한 양질의 Data를 누가 더 많이 가지고 있느냐에 따라 AI 성능이 결정된다. 'Garbage in, Garbage out' , 아무리 좋은 성능의 AI 알고리즘을 개발했더라도, AI가 학습할 Data의 질과 양이 받쳐주지 못하면, 그 AI의 수준은 절대 경쟁력을 가질 만한 성능을 내지 못한다.'유전 정보 해석 소프트웨어' 기술에서도 같은 상황이 펼쳐지고 있다. 유전 정보 해석 소프트웨어들 자체가 빅데이터에 기반한 다양한 방법론 , AI 알고리즘 기반으로 하고 있기에, 자연히 양질의 Data 를 기반으로한 소프트웨어가 경쟁력 있는 성능을 확보할 수 있다.액체 생검 기반 '암 조기 진단 키트' 개발을 목표로 하는 Grail, Guardant health, Freenome 등의 회사가 왜 수천억~조단위 투자를 받을까? 투자금을 기반으로 회사를 성장시킬 Plan 이 있어야 하는데, 그 돈을 어디에 쓸 목적으로 막대한 투자를 받았을까?바로 Data 확보다. 암 조기 진단 kit를 개발하기 위해 수십만~수백만명의 게놈 Data를 확보해 암 조기 진단 소프트웨어의 성능을 압도적으로 높이기 위해 엄청난 투자를 받은 것이다.  압도적인 숫자의 양질의 데이터를 확보하고 나면, Data가 진입장벽이 되어 시장을 선도할 수 있게 된다.그런데, 돈만 있으면 양질의 데이터를 확보할 수 있을까? 반은 맞고 반은 틀리다고 본다. 결국, 의미 있는 제품을 만들어, 자연스럽게 고객숫자를 늘려갈 수 있는 곳이 가장 의미 있는 속도로 의미 있는 숫자의 Data를 확보할 수 있을거라고 본다.이를 위해서는 결국 고객의 선택을 받아야 하는데, 여기에는 제품의 품질 외에도, 회사가 추구하는 목적과 가치 등 제품 이외의 요소들도 매우 중요하게 작용하지 않을까 예상한다. 돈벌기 위해 어떤 형태의 Data 사용이든 불사하려고 하는 곳은 아무리 많은 자금을 바탕으로 하더라도 결국 유전자 정보 산업의 Data 경쟁에서 패퇴할 것이라 예상한다.  좋은 제품을 합리적인 가격에 제공하면서, 궁극적으로 질병 치료 등 선한 목적을 추구하는 회사가 유전자 정보 산업의 궁극적으로 가장 큰 경쟁력인 Data 확보 경쟁의 승자가 되지 않을까 예상해 본다.요약 많은 이야기를 했는데, 간단히 요약하면, 유전자 정보 산업에는 '유전자 해독'을 핵심 기술로 하는 회사도 있고, '유전자 해석'을 핵심 기술로 하는 회사도 있다. 유전자 해석을 하는 회사들은 각기 목적하는 바에 해당하는 소프트웨어를 고도화해 나가면서 기술이 차별화 되어 나간다. 유전자 해석을 핵심 기술로 하면서 같은 목적( 예, 액체 생검을 통한 암 조기진단)을 가진 회사들은 어느 곳이 양질의 데이터를 더 많이 가지고 있는가로 궁극적으로는 제품의 차별화, 경쟁력의 차별화가 이루어질 것이다.#3billion #운영 #인사이트 #스타트업 #마인드셋 #시장분석
조회수 2872

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

드디어 시작된2018년도 상반기KT그룹 공개 채용!채용을 준비할 때마다 자기소개서에는 어떤 내용을 적으면 좋을지,면접은 어떻게 준비해야 하는지 막막하기만 한데요…(๑´╹‸╹`๑) KT에 입사하기 위해서는 어떤 것을 준비해야 하는지,또KT에 어떤 그룹사가 있는지 궁금하신 분들을 위해 준비한 영업 직무KT인들의 이야기!기술영업,기획영업 등 영업의 다양한 분야와KT영업인이 되기 위해 길러야 할 역량까지,아낌없이 준비한 꿀팁이 가득한데요~KT실무자가 들려주는 생생한 영업 스토리를 함께 만나볼까요?“나만의 영업 스킬을 어필한다면 충분히 좋은 결과로 이어질 것입니다.”- KT Biz영업(기술영업)김주현Q.현재 어떤 직무를 담당하고 계신가요?A.Biz영업부에 소속이 되어,중소형 고객사(관리고객)를 대상으로 통신 서비스를 제안하고 더 나아가 고객사 내 통신에 대한 전반적인 부분을 관리하는 역할을 수행합니다.기업에 제공할 수 있는KT의 통신 서비스는 종류가 다양하기 때문에 매주 한 번 이상 새로운 통신 서비스에 대한 교육이 필수로 이루어지며,본인이 관리하는 고객사의 전체적인 업무 현황 및 통신 구성 현황 등에 대하여 분석을 진행합니다.Q.회사에서 가장 보람 있었던 일은 무엇인가요?A.고객사 중 한 곳이 내부 사정으로 급하게 사무실 이전 작업을 하게 되어,곧바로 사용하고 있는 통신 서비스의 현황을 세밀하게 파악한 뒤 정해진 일정에 맞추어 이전 업무를 진행하였습니다.동시에 새로운 사업장에서 효율적으로 업무를 운영할 수 있는데 큰 도움이 될 만한 통신 상품을 제안하였습니다.사무실 이전 당일에는 일찍 고객사로 출근하여 모든 통신 서비스가 원활히 이루어지는지 지속적으로 점검하였더니 고객사 담당자로부터 정말 고맙다는 이야기를 들을 수 있었습니다.더 나아가 새로운 통신 서비스 수주를 통해 회사의 성장에도 기여를 할 수 있었던 가장 보람찼던 경험으로 간직하고 있습니다.Q.본인이 속해있는 부서 분위기는 어떤가요?A.Biz(기술)영업을 수행하는 모든 영업대표(ITC)는 개인별로 맡고 있는 고객사가 존재하기 때문에 일과 시간 동안 각 팀원들은 고객사 미팅으로 외근을 나가게 됩니다.그렇기 때문에 많은 이야기를 나누지 못하는 경우가 많은데요.그렇지만 부재중인 팀원에게 급한 업무 특이사항 발생 시 내근중인 직원이 해당 업무를 도와주며 많은 협조가 이루어지기도 합니다.누구보다도 서로의 업무 사항들에 대하여 깊이 공감해주고,상생을 위해 노력하는 곳이 제가 근무하고 있는 광화문Biz영업부입니다.Q.지원자에게 마지막으로 전하고 싶은 취업 팁은?A.Biz(기술)영업 직무를 수행함에 있어서 가장 기본적인 업무는,고객을 직접 대면하여KT의 통신 서비스를 제안하고 전체적인 관리를 하는 것입니다.따라서KT에서 기업에 제공하는 다양한 통신 서비스에 대한 지식 습득과 더불어 영업을 하는데 있어서 본인의 역량을 어떻게 발휘할 수 있을 것인지 생각해 보고,고객사 담당자를 상대로 한 나만의 영업 스킬을 차분히 어필한다면 충분히 좋은 결과로 이어질 것입니다."겸손함을 방패로,자신감을 무기로!”- kt skylife기획영업 함종민Q.현재 어떤 직무를 담당하고 계신가요?A.저는 안방 브라운관에만 갇혀있는 방송이 아닌 달리는 자동차에서도 끊김 없는방송시청이 가능한 상품을 제공하는 전략영업팀에서,상품에 대한 고객군을 정리,분석하는 업무를 담당하고 있습니다.또한 아웃도어 차량에 빠르게 방송을 제공할 수 있도록 파트너를 서포트하거나,경험 많은 대리님을 도와서 고객들의 온라인 가입신청 절차를 보다 편리하게 바꾸는 일도 함께 하고 있습니다.Q.회사에서 가장 보람 있었던 일은 무엇인가요?A.전북 부안 장신리에"사랑의 안테나"사업으로TV와Skylife를 드리러 간 기억이 나는데요.마을 어르신들이 모여 쉬시는 마을회관에 낡고 작은 구형TV대신 신형UHD TV와Skylife안테나를 설치해드렸습니다.어르신들께서 지구 반대편 브라질 올림픽을 보시며 아이처럼 행복해하시는 모습에 가슴이 뭉클했습니다.Q.하루 일과를 설명해주세요.A.7시 반쯤 출근하여,전날의 이동체 접수 데이터를 정리하고 메일링 합니다.업무 성격상 파트너 회의 및 시장조사 등 외부 일정이 많은 관계로 체력을 유지하기 위해 틈틈이 스카이짐(사내 헬스장)에서 체력 단련을 하고 있습니다.이후에는 파트너에게서 오는 전화나 메일에 회신하고 때로는 각종 데이터를 집계하며 회의를 준비합니다.Q.지원자에게 마지막으로 전하고 싶은 취업 팁은?A.제가 남들과 조금 달랐던 점을 떠올려보면 다음의 두 가지가 아닐까 싶습니다.첫째, "누군가 해야 할 일이라면 내가 즐겁게 하자!"는 생각입니다.제가 조금 우스꽝스러워지더라도 타인이 즐거워하거나,긴장감을 덜어 줄 수 있다면 그걸로 저 역시 충분히 즐거운 일입니다.둘째,저는 인사를'좋아'합니다.처음 뵙는 분들에게도 반갑게 인사하며 그분들의 하루를 기분 좋게 만들고 싶고,그분들의 이야기를 듣고 싶습니다.결국 회사도 사람이 모인 곳입니다.어떤 이야기도 개방적으로 받아들일 수 있는'겸손함'을 방패로, '내가 회사와 사회에 충분히 도움이 될 사람이다!'란 믿음에서 오는'자신감'을 무기로 나아가면 취업전쟁에서 승리하실 수 있지 않을까 생각합니다.“위성을 너무 어려운 분야라고 생각하지 마시고,지금 도전하세요!”- kt sat해외영업 이철우Q.현재 어떤 직무를 담당하고 계신가요?A.저는 영업본부 해외중계기 영업팀에서 세일즈 엔지니어 업무를 담당하고 있는데요.위성운용 경험 및 기술력을 바탕으로 고객이kt sat의 위성을 사용하는데 있어 문제가 없도록 컨설팅하는 역할을 하고 있습니다.위성 커버리지가 인도차이나,중동,아프리카 등 글로벌지역을 모두 포함하는 만큼 해외의 다양한 고객들에게 위성 컨설팅 하고 있습니다.Q.회사에서 가장 보람 있었던 일은 무엇인가요?A.저는 기술적으로 어려움을 겪고 있었던 고객의 문제를 해결하고,이와 더불어 시장 담당자와 계약을 수주 했을 때 가장 큰 보람을 느낍니다.매 컨설팅 때마다 많은 시간과 노력이 들지만,계약 수주 소식을 들었을 땐 힘든 점을 다 잊을 만큼의 큰 기쁨을 느낍니다.Q. 하루 일과를 설명해주세요.A.해외 고객에게 기술컨설팅을 제공하는 업무를 담당하는 만큼최신 위성업계 트렌드와 기술을 꾸준히 공부하는 것이 중요합니다.때문에 아침에 출근하면 가장 먼저 위성분야 신문을 보며 기술 트렌드를 파악합니다.이후 해외 시장의 담당자와 함께 고객에게 제공할 기술 컨설팅 자료를 제작하고 메일,컨퍼런스콜을 통해 해외 고객이kt sat위성을 사용하는데 있어 어려움이 없도록 컨설팅을 진행합니다.필요한 경우 시장담당자와 현지 출장을 가기도 하죠.Q. 지원자에게 마지막으로 전하고 싶은 취업 팁은?A.위성이라는 분야가 일반인에게 낯선 분야라 지원 전부터 어렵다고 생각할 수도 있습니다.그러나위성 관련 지식과 경험은kt sat입사 후에 위성분야에서20년 이상 일하신 위성 전문가 분들께 체계적으로 교육받을 수 있습니다.그러니 위성을 너무 어려운 분야라고 생각하지 마시고,지금 도전하세요!“광고 전략을 세우고 효과를 빠르게 측정할 수 있다는 점이 매력적이에요.”-플레이디 영업 박지혜Q. 현재 어떤 직무를 담당하고 계신가요?A.저는 플레이디에서 온라인 광고AE로 일하고 있는데요.AE는 광고주와의 오프라인 미팅을 통해 제안서를 전달하고,경쟁PT등에 참여해 광고주를 영입하는 일부터 광고 계획 수립과 관리,집행까지 광고의 전반적인 업무를 담당하고 있어요.광고주와의 전반적인 커뮤니케이션 또한AE의 역할이에요.현재 모바일,페이스북,유투브,구글 등 온라인 광고를 통합적으로 진행하고 있어요.Q. 회사에서 가장 보람 있었던 일은 무엇인가요?A.데이터를 기반으로 타깃이나 예산 등의 계획을 수립해 광고를 집행할 수 있고,광고 집행 후 매출에 얼마나 도움이 되었는지를 눈으로 확인할 수 있다는 게 좋아요.몇 달 전,여러 광고 대행사를 거치고 이제는 큰 기대가 없다고 말씀하는 광고주가 있었어요.그래서 광고 관리 및 커뮤니케이션을 좀 더 밀착해서 진행했고,적합한 신규 매체를 제안했어요.그러자 조금씩 광고 효과가 나타났고,이로 인해 광고주의 태도도 점차 긍정적으로 바뀌더라고요.지금은 전반적인 포털사이트의 광고 영역까지 모두 맡겨주셨고요.Q. 본인이 속해있는 부서 분위기는 어떤가요?A.분위기는 전반적으로 자유롭고 개방적인 젊은 회사라고 생각해요.사내 시설도 잘 구비되어있는데,사내카페,안마의자,여직원휴게실 등이 있어서 굉장히 편리하고요.한 달에 한번2시간 늦게 출근or조기 퇴근하는PS(Punch Stress)데이가 있어서 친구들이 매우 부러워해요.거기에KT그룹의 복지혜택까지 있다 보니 직원으로써 만족도가 높을 수 밖에 없겠죠?Q.하루 일과를 설명해주세요.A.출근 후 가장 먼저 광고주 계정을 체크해요.집행된 광고의 동향이나 이슈 등을 확인하죠.온라인 광고는 효과가 데이터로 증명되기 때문에 계정을 살펴보면 기획한 광고 전략이 예상대로 흘러가는지,보완해야 할 필요는 없는지 판단할 수 있어요.오후 시간대에는 광고 관리뿐 아니라,광고주 미팅이나 제안서 작성을 위해 시간을 할애하는 편이에요.“장점을 나열하기 보단, kt mhows에 필요한 인재라는 부분을 어필하세요!”- kt mhows그룹영업 유준호Q.현재 어떤 직무를 담당하고 계신가요?A.kt mhows의 수많은 법인 고객사 중에서도KT그룹사를 대상으로 영업 활동을 모색하는'그룹영업'이 바로 저의 주요 미션입니다. KT및 그룹사를 통해 기프티쇼가 확대될 수 있는 활로를 모색하거나,기존 담당 거래처에 대한 지속적인 영업관리 업무를 통해 매출 증대는 물론,각 그룹사로부터 인입되는 기프티쇼 활용에 관한 문의에 응대하며,각각의 상황에 맞는 최적의 기프티쇼 솔루션을 제시하고 있습니다.Q. kt mhows를 선택한 이유는 무엇인가요?A.학부 시절,저는 미래성장 가능성이 높은 모바일 커머스 시장에 대해 많은 관심을 가지고 있었는데요.그러던 와중 급변하는 시장환경에 대한 유연한 대처 능력을 가지고 있는kt mhows이 눈에 들어왔습니다.트렌드에 기민하게 대응할 뿐만 아니라,지금까지 축적해온 모바일 관련 사업의 노하우는 앞으로kt mhows가 단순히 특정영역의 사업자가 아닌,모바일 마케팅 솔루션 기업으로 거듭날 수 있다는 확신을 주었습니다.Q.하루 일과를 설명해주세요.A.제가 속한 팀은KT및 그룹사를 상대하는 부서이기 때문에 매일 업데이트 되는 사내 게시판의 업계 동향 및 그룹사 현황을 살핍니다.이후 기본적으로제가 담당하는B2B거래처의 기프티쇼 대행 발송 요청 사항을 수시로 관리/집행하며,추가로 가능성이 엿보이는 영업 활로를 모색하여 제안을 하기도 합니다. kt mhows는 신규 서비스 추진 및 개선을 위한TF조직을 유동적으로 운영하는데,저 역시 회의에 참석하여 영업부서 시각의 의견을 개진,결과물을 도출 하기도 합니다.Q.지원자에게 마지막으로 전하고 싶은 취업 팁은?A.본인이 보유한 장점을 단순히 나열하기 보다는,그 장점이kt mhows에 어떻게 기여가 되고,본인이 꼭kt mhows에 필요한 인재라는 부분을 어필하신다면 반드시 좋은 결과가 있을 것입니다!저 역시 학창 시절부터 경험한 일련의 시간들을 통해 얼마나 모바일커머스 업계와 지원 직무에 애정과 열정을 지니고 있는지 증명하고자 노력했고,그러한 모습이 긍정적으로 작용했다고 생각합니다.더욱다양한 KT人의인터뷰보러가기다양한KT그룹사의‘영업 직군’에서 근무하고 있는KT인들의 이야기 어떠셨나요?취업은 흔히들 멘탈싸움이라는 이야기를 하는데요.계속해서 불합격 소식을 듣게 될 땐 나도 모르게 자괴감에 빠질 때가 있죠.우울할 때는 혼자서 모든 짐을 감당하려고 하기 보다는,하루쯤 그 동안 수고했다는 의미로 나에게 선물을 주는 하루를 가져보는 것도 우울함 극복에 좋다고 합니다!여러분들의 상반기 취업 뽀개기를 위해,타 직무KT인들의 생생한 이야기로 돌아오겠습니다~다음주에 또 만나요! (하트)[늘 곁에 kt, KT그룹 블로그]#KT #2018KT공채 #2018KT채용 #KT공채 #KT면접 #KT영업 #KT영업직무 #KT직무 #KT직무면접 #KT직무인터뷰 #KT채용 #KT취업 #KT취업면접 #직무정보 #직무소개 #구성원인터뷰 #기술영업 #기획영업
조회수 2316

스타트업의 커뮤니케이션

스타트업하면 떠오르는 이미지는"유연함, 자유분방, 역동적, 수평관계..."등등 무언가 젊은 느낌에 소통이 잘 되고딱딱하지 않은 부드러움이랄까?과연 그럴까?꼭 그렇지는 않더라.스타트업마다,업종마다,구성원에 따라,시기에 따라...달라지는 경향이 있다.많은 창업자들이 자신들만의 스타트업 문화를뿌리내리기 위해서 이런저런 노력을 한다.근데 그 문화라는 것이 고정적이지 않다.특히 스타트업은 적은 인원으로 시작해서,새로 입사하는 동료들에 의해초기 문화들이 희석되거나 변형되기 쉽다.투자를 받거나 큰 이슈들이 발생하면그 분위기에 자각하기도 전에변화가 진행된다.변화와 안정 사이에서무엇이 옳고 그른지는 알 수 없다.변화는 변화 나름대로 긍정적인 영향을 주고,꼭 지켜야 할 것들은 그 나름대로 존재 이유가 있으니까.갑자기 왜 이런 이야기가 시작되었느냐면,(주)클린그린은 올해 3명의 동료가 더 합류하였다.3월에 한 명, 9월에 2명!덕분에 나 스스로가 자각하지 못하였던문제를 발견할 수 있었다.바로 커뮤니케이션(출처: 구글, SBS 생활의달인 중 중화요리 4대문파, 반죽준비)창업 전부터 사전 준비 단계(베이킹 기간)에서나를 믿어주고나 역시 의지할 수 있는 팀을 구성하였고,자주 다투기도 했지만 굳이 커뮤니케이션에문제가 있다고 생각하지 못하였다.그리고 새로이 동료들이 합류하더라도기존에 문제가 없었으니까당연히 문제가 안 될 것이라고 안일한 생각을 했다.회사가 성장하면서,정신없이 살아왔고, 목표 달성을 위해 뛰어왔다.문제가 없었다. 적어도 겉으로는....문제를 알게 된 것은 바로 새로이 합류한 동료들과이야기를 나누던 도중에 깨닫게 되었다.우리가 그동안 항상 중요하다고 강조했던커뮤니케이션!새로 합류한 동료가 늘어날수록우리는 더 많은 시간을 관리에 힘써야 한다.스타트업은 규모가 작기 때문에한, 두 사람의 영향력이 크다.그리고 기존 일하던 방식과 의사소통의 방식에익숙해지면 안 된다.오히려 항상 깨어있어야 한다.(출처: 구글, 서울신문, 멘토는 직장에 있다)이럴 때, 신규 인력은 가장 확실한 멘토이다.우리 내부에 대해 관찰하고,불합리한 부분, 이해가 안 가는 부분들을바로 찍어 낼 수 있는 최고의 전문가이다.물론 바로 말할 수 있는 기회와망설이지 않고 정제되지 않은 생각을발언할 분위기를 만들어주어야 한다.이전에 직장에서 생활할 때,나의 가장 큰 불만은 "커뮤니케이션"이었다.애사심이 충만했고,보다 좋은 성과를 내고자 애썼지만,돌아온 것은 뚫을 수 없는 벽이었다.아니, 어쩌면 뚫을 수도 있었겠지만그러기에는 빠른 속도로 번아웃 되는나 자신이었고,유일한 내 자산이었던 열정과 시간이점차 부족해 짐을 느꼈기에적당한 선에서 거리를 두기 시작했다는 표현이 더 정확하다.내가 창업을 하면서적어도 이런 부분에서는 항상 요주의 하며,동일한 고민과 걱정을 동료들이 하지 않길 바라는 마음이다.그리고 커뮤니케이션에 문제가 있다는의견이 나오자마자 다른 어떠한 업무보다가장 시급한 문제라고 판단하였다.지난주에 춘천 본사에서 "업무가 없는 날"을 가졌다.하루 날 잡아서 출근은 하되,밖에서 점심을 먹고, 차 마시고, 드라이브하며 이야기를 나누는 시간!따로 정해진 업무는 그 날은 All Stop!사실은 그런 날이 너무 잦으면 문제겠지만,가끔 이런 날이 있어야 문제를 해결할 수 있다.말이 업무가 없는 날이지...사실 수다를 떨면서, 대부분은 우리의 방향성과업무 진행에 대한 구성원들의 솔직한 인사이트가 난무하다 보니...밖에서 무제한 회의하는 느낌이랄까?(나뿐만 아니라 다들 일중독자들인가 보다...ㅡㅡ;;)(주)클린그린 커뮤니케이션의 문제점은 다음과 같다.1) 팀원 간의 거리가 멀어 소통이 어려움2) 분업화된 업무로 인해 공통업무 처리에 난관3) 후순위로 밀려 있는 업무들의 진행이 계속 밀림그렇다면 어떻게 해결해야 할까?우선, 우리는 서울에 경영부, 춘천에 연구부(본사),부산에 파견자와 사외 팀원, 중국에 현지 팀원이 있다.처음 세팅할 때부터 전략적으로 위치를 배분하였기에창업 초기에는 꽤 유효한 성과를 낼 수 있었다.그렇다.초기에는 꽤 좋았다.(출처: 구글, 베트남 하노이 웨스트 레이크 풍경, "한 장에 담긴 7시간" 사진, 시간에 따라 같은 관점도 변한다)하지만 지금에 와서는 점차 거리를 무시하지 못하겠더라.중간에 이런 문제점을 보완하기 위해고민하다가 대안으로 "메신저"를 활용했다.위챗과 QQ 그리고 카카오톡을 병행하고 있다.웍스 모바일을 통해 일정과 게시판 등을 공유하고 있다.나름 도입 초기에는 업무에 대한 의사소통이 원활했고,효과적이었으며, 간단했었다.그런데시간이 지날수록인원이 늘어날수록메신저가 중구난방이다 보니동료들의 메신저 사용이 뜸해졌다.중국 팀원은 위챗이나 카톡...문서 전달용으로 QQ나 카톡을 쓰고,업무 외에 일에는 카톡을 썼다.이것을 일원화할 필요가 있다.그래서 공통적으로 쓰는 카톡으로 정했다.QQ와 위챗은 대외용으로 향후 중국 진출을 위해도입했지만, 국내에서는 카톡이 일단 나을 듯~!또한 업무 결제나 서류 작업을빠르고 편리하게 하기 위해"전자결제"시스템을 도입하였다.지금은 실시간으로 서류 기안과 결제가 이루어진다.스타트업에게 Paper work(서류 작업)만 좀 더 줄어들어도꽤 업무효율이 늘어난다.2017년에는 사외에서 활동하는 팀원들도고정적으로 모이도록공장과 자체 사무실을 개설할 것이다.분업화된 업무란"연구 및 개발"업무와 "기획 및 운영"업무그리고 "외부 업무"로 각 파트별로 주어진 영역이다.그러나 이러한 업무들은 유기적이기에공통적으로 논의해서 진행할 부분들이 있으며,최근 준비하고 있는 "마케팅 및 디자인"업무로 채용 건과"투자/매출 및 공장"확보의 건, 그리고 "해외 지재권 추가 출원"의 건등이 대기 타고 있다.이 부분들은 외부 컨설팅도 받으며 준비하고 있지만,내부적인 의견을 최대한 많이 반영해야 한다.우리가 앞으로 진행할 업무들에 있어서전문가가 아니다 보니 의사결정에 혼란이 야기된다.이런 부분에 있어서 외부교육 비중을더 늘리기로 결정하였다.도움을 받을 수 있는 지식을 얻고,현직자 또는 멘토의 도움과 자문을 더 자주 접해야 한다.그것이 바로 우리"만"의 개인적인 생각이 아니라공감할 수 있는 "인트라 지성"이다.밀려드는 업무는 우선순위를 정해야 한다.이건 당연한 이야기인데...실제로 스타트업을 하면서...아무리 우선순위를 정해서 일처리를 해도늘어나는 업무 양의 증가 속도가 처리하는 속도보다더 빠르고, 뒤늦게 찾아온 업무일수록 중요하더라.그러다 보니 우선순위에서 밀려지루하게 끌고 있는 업무가 꽤 쌓여있다.동료들 모두에게 업무는 항상 로드되어져 있다.이를 극복하기 위해2017년 2월에 신규채용을 진행할 예정이다.또한,2017년 상반기 계획 중 일부는과감하게 축소할 필요가 있다.무엇보다 주어진 일에 치여서회사에 다니지 않도록 신경 써야 한다.그래야 일을 찾아서 하게 되고, 능동적으로 생각하며회사를 다니게 된다.문제를 파악하는 것도,대안을 찾아내는 것도,동료들의 현재 상황을 공유하는 것도,우리 회사의 방향과 계획과 성과를재구성하고 피드백을 만들어가는 것도커뮤니케이션에서 시작된다.따라서스타트업에게 커뮤니케이션이란....문제의 해결방안이다.팀원과의 신뢰이다.조직의 관리이다.커뮤니케이션이 바로 경영이다.수치와 그래프와 표는 결정을 위한 보조 지표일 뿐이며주요한 지표는 바로 구성원 간의 커뮤니케이션이다.좋은 사람들이 모였다고 좋은 회사가 아니다.똑똑한 사람들이 모였다고 항상 올바른 결정을 내리는 건 아니다.좋은 커뮤니케이션이 좋은 회사를 만들어간다.현명한 커뮤니케이션이 올바른 결정을 만들어간다.다양한 커뮤니케이션이 혁신을 만들어간다.아무리 좋은 재료를 모아 왔다고 하더라도요리방법에 따라 맛이 있고, 없고 가 결정되듯이....우리는 무엇을 넣고, 얼마나 끓여야 하고무엇을 먼저 익히고, 어떻게 썰어야 하고,어떤 조미료를 쓰고, 재료 간의 궁합을 봐야 하듯이이 모든 과정들은 커뮤니케이션에서 나온다.우리는 그것을 경영이라고 부른다.(물론, 나는 경영학도가 아니라 이건 전적으로 내 개인적인 강력한 주장이다)2017년은 내실을 다지는 (주)클린그린을 만들어가겠다.이를 위해,잡담을 더 늘려야겠다.시간적 여유를 더 늘려야겠다.공간적 여유를 더 늘려야겠다.신규 고용으로 인력을 더 늘려야겠다.다들 이러한 결정에 대해동의를 하면서도, 걱정을 해 주는 동료들에게더더욱 감사한다.12월의 마지막 주를 맞이하여동료들에게 이 말을 남기며 마무리하고자 한다."쌓인 눈은 내가 치운다. 너는 그냥 달려!"#클린그린 #스타트업 #스타트업창업 #스타트업창업자 #고민 #성장 #조언
조회수 908

할아버지/할머니도 코딩을 해야 하는 이유

대부분의 교육은 초, 중, 고등학생이나 대학생 등 주로 젊은 층을 위주로 진행되고 있습니다. 프로그래밍 교육도 마찬가지로, 현재 10대에서 30대인 주로 젊은 층의 학생과 직장인들을 대상으로 교육이 서서히 일어나고 있습니다. 하지만 높아진 평균 수명으로 노인층이 급격히 늘어나고, 빠르게 변화하는 산업 아래 노인층의 재교육을 통한 지속적인 사회 활동이 요구 되는 시대가 되었습니다.2016년 한국의 인구분포도. 42–57세의 중장년층이 15–24의 청년층보다, 청년층이 0–9세의 유아층보다 월등히 많습니다. Wikipedia위 그래프에서 보이는 것처럼 이렇게 사회의 전체적인 평균 연령의 급격한 상승이 예고되어있음에도 불구하고, 고등학교나 대학까지의 일회성 교육이 아닌 전 연령층을 대상으로 한 지속적인 교육 제공은 아직 보편화 되어 있지 않습니다. 노인층 대상으로 진행되는 교육은 미미하며, 특히나 젊은층도 배우기 어려운 코딩 교육은 노인층에게는 교육이 불가능하거나 전혀 필요하지 않다고 여겨지고 있습니다.UC San Diego 대학의 Phillip Guo 교수Phillip Guo 교수는 HCI (사람-컴퓨터 인터랙션) 및 온라인/컴퓨터 교육 분야에서 명성이 높은 연구자입니다. Guo 교수는 처음으로 노인층에 대한 코딩 교육 연구를 진행하여 온라인에서 프로그래밍을 배운 52개국 60~80대 504명으로부터 다양한 설문조사와 심층조사를 진행한 결과를 CHI 국제 학술회에 출간했습니다. 본 연구 설명과 함께 엘리스에서 생각하는 로드맵을 소개합니다.연구본 연구는 http://www.pythontutor.com 웹사이트에서 실시된 온라인 코딩 교육 설문조사에 응한 504명의 60~85세 학생에 대한 심층 분석과 인터뷰로 이루어져있습니다. 이들이 코딩을 배우는 목적은 세가지 주요 요점으로 종합됩니다.첫째는 코딩을 배움으로서 노화되는 뇌를 자극하기 위함이고, 둘째로 젊은 시절 놓쳤던 새로운 기회를 잡기 위함, 그리고 마지막으로 어린 가족 구성원들과 소통하기 위함이었습니다.혼자 공부하는 방식의 교육은 온라인에서 특히 더 높은 이탈율을 보입니다.이들이 프로그래밍을 배우는 원동력은 교육을 통한 취업과 같은 정확히 정해진 목표보다는, 스스로의 동기부여 및 젊은층과의 소통을 위한 이유가 더 컸습니다. 코딩을 배우는 과정 중에 가장 힘든 세가지는 감퇴하는 인지력, 질문에 대답해 줄 수 있는 강사나 조교 혹은 학생이 없었고, 매번 변화하는 SW를 따라가기 어려움이 있었습니다. 첫번째를 제외한 나머지 어려움은 다른 연령층에서도 겪은 어려움이었습니다.마치며Philip Guo 교수의 논문에서 알 수 있는 것은 노인층이 노화하면서 겪을 수밖에 없는 배움의 어려움과 더불어, 현재 교육 시스템이 노인층을 전혀 고려하지 않고 있다는 것입니다. 이것은 노인층 대상의 교육을 더욱 어렵게 합니다.논문에서는 노인층에게 적합한 교육 시스템이 만들어지거나 제공된다면, 이들이 산업에 바로 투여될 수 있는 능력을 갖추기는 어려울 수도 있으나 프로그래밍 교육을 할 수 있는 선생님으로 활동할 수 있다고 서술하고 있습니다. 이를 활용하면 현재 현저히 부족한 SW 교육자 수로 어려움을 겪고 있는 공교육에 도움이 될 수 있습니다.엘리스에서는 라이브 교육 방송 진행, 헬프 센터 조교 도우미 등 학생들에게 좋은 교육을 제공하기 위해 부단히 노력하는 다양한 연령층의 온라인 조교님들이 계십니다. 언젠가는 60~80대 조교님이 활동하실 수 있다고 믿고 있습니다. 이러한 믿음을 주신 중2 아들을 둔 한 어머니의 피드백을 참조합니다. (엘리스 기초 자바 과정에서 최상위 점수를 받으셨습니다.)저는 전공도 인문학쪽이고 수학 싫어서 문과갔던 문과생인지라, 코딩처럼 논리력 요구하는 수업 따라가기나 할까 큰 기대없이 시작했었습니다.수업 초반에는 마냥 어리둥절했고, 시키는대로 따라하면 다 되었기 때문에 ‘어라 쉽잖아?’ 라고 느꼈습니다. 하지만 중반부 넘어가면서…클래스, 메소드라는 개념이 낯설기도 했고, 각종 연산자의 적용이나 변수들을 식에 적용시키는 다양한 패턴들이 적응이 잘 안되었어요. 반복문의 순서나 마침표,세미콜론, 콜론을 기억하지 못해서 다시 되돌아와서 확인한 것만도 수 십번이었습니다.다른 분들은 마치 초급 과정을 어디서 마스터 하고 온 것처럼 잘 따라가시는데, 저는 매 시간마다 헤매고 오류나고…하지만 똑똑한 것 보다 꾸준한 것이 더 낫다고… ‘머리가 안따라가면 더 오래 공부하면 되겠지’ 하고 다시 보고, 다시 풀고, 계속 질문하고그러나보니 어느 순간 이해가 가는 개념들, 저절로 외워지는 패턴들이 조금씩 늘어났어요.특히 실시간 강의라서 피드백을 받을 수 있고, 조교님이나 강사님들께 질문을 편하게 할 수 있는 시스템이 정말 좋았습니다. 비주얼 좋은 두 분이 수업을 진행해 주신 것도 좋았구요. 반응 좋은 우리 반 수강생들도 참 좋았습니다.저녁 설거지 해 두고 (때로는 저녁상을 치우기 바쁘게) 컴퓨터 앞에 앉아서 8주간 공부한 시간들이 저한테는 정말 소중한 시간이었습니다. 이렇게 집안 일 하고, 애들 챙기면서도 공부할 수 있고, 배울 수 있다는 것이 너무 좋습니다. 좋은 강의 열어주셔서 고맙습니다. ^^*p.s.수업 중에 어떤 분이 자바 알고리즘 강의 열어달라고 하시던데, 알고리즘이 뭔지 물어보고 싶었는데 못 물어봤네요 ㅋ#엘리스 #코딩교육 #교육기업 #기업문화 #조직문화 #서비스소개

기업문화 엿볼 때, 더팀스

로그인

/