스토리 홈

인터뷰

피드

뉴스

조회수 2560

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 #백엔드 #인사이트 #경험공유
조회수 2953

하루를 두배로 사는 기분

주어진 resource를 효율적으로 사용하는 건 오랫동안 내가 집착해온 주제이다. 시중에 나와 있는 매니지먼트 툴도 거의 다 사용해 봤고 애자일, 칸반, 스크럼 등도 시행착오를 겪으면서 경험해 봤다. 그리고 내린 결론은 특정 프로세스를 익히는 것도 중요하지만, 팀원들이 현실에 안주하지 않고 끊임없이 불편한 코너로 자신을 밀어 넣어서, 더 발전하고자 하는 의지가 더 중요하다는 것이다.Pomodoro?토마토(Pomodoro) 타이머이렇게 특정 테크닉보다는 mindset이 중요하다고 생각하고 있었는데, 우연히 개발자 출신 스타트업 대표님에게 Pomodoro Technique에 대해서 들을 기회가 있었다. 단순히 25분 업무 + 5분 휴식 정도로만 알고 있었는데, 이를 팀 전체에 적용한 얘기는 처음 듣는 거라 꽤나 흥미 있었다. 팀 전체에 Pomodoro 테크닉을 적용한 결과 엄청난 변화가 있었다는 이야기를 듣고, 우리 팀에서 시험적으로 적용해 보기로 했다.Pomodoro의 기본 룰- 할 일을 정하고, 25분으로 타이머 셋팅을 하고 '그 일만' 한다.- 타이머가 울리면, 하던 일을 멈추고 5분 동안 휴식을 취한다.- 그렇게 하루 15 Pomodoro를 업무로 채운다.  간단하다.그런데 팀에 끼치는 영향은 상당했다.Pomodoro의 영향1) 계획 짜기/ 리뷰하기실제 Pomodoro 계획하루 8시간은 15번의 Pomodoro로, 일주일은 75번의 Pomodoro로 분절화된다. Pomodoro는 막연했던 하루, 더 막연한 일주일을 구체적인 time slot으로 분절화하기 때문에, 어떤 업무를 얼마나 걸려서 진행할지 계획을 짤 수 있는 훌륭한 frame work을 제공한다. 그리고 하루/일주일이 지난 후에 계획한 대로 진행이 되었는지 리뷰하면서, 계획대로 되지 않았다면 어느 부분에서 왜 문제가 생겼는지 발견할 수 있는 훌륭한 도구가 된다. 리뷰를 잘 하면 다음 계획을 더 잘 세울 수 있다. 계획-실행-리뷰의 선순환은 결국 자원을 가장 효율적으로 쓸 수 있게 만들어 줬다.2) 생각보다 긴 하루하루 8시간은 15개의 Pomodoro로 나뉘고, 이는 점심 먹기 전까지 7개, 퇴근까지 8개의 Pomodoro로 나뉜다. 한 가지 일을 해야 하는 25분의 제한된 시간이 주어지면서, 업무에 완전히 몰입하는데 드는 시간이 2분 미만으로 급격하게 줄어들었다. 그렇게 점심 먹기 전까지 7개의 Pomodoro를 치열하게 해치우면, 가끔 하루 할 일들이 이미 끝나는 경우도 발생했다. 지금은 업무 리뷰를 통해서 업무를 하는데 걸리는 예상 시간이 오차범위 안에 들어오게 되었지만, Pomodoro 초반에는 일이 너무 빨리 끝나서 내가 그동안 얼마나 루즈하게 시간을 썼는지를 확인하게 되는 경우가 많았다. 15개의 Pomodoro를 치열하게 소화하고, 오후 5시에는 퇴근하는 것을 목표로 세우고 이를 지켰다. 하루는 생각보다 길었다. 퇴근 이후의 여유는 더 창의적이고 획기적인 아이디어들을 떠올릴 수 있게 도와줬다.3) Energy ManagementBurn out누구나 정해진 양의 정신적/육체적 energy를 가지고 있고, 이를 보충하지 않고 소진해 버리면 burn out이 찾아온다. burn out을 경험해본 입장에서, burn out은 극단적인 선택을 하게 만들고 다른 팀원들에게도 빠르게 전염된다. 초기 스타트업에게는 더 치명적이다. Burn out은 energy management를 통해서 방지할 수 있다. 매일 감정 롤러코스터를 타고, 매일 답이 없는 문제를 만나는 스타트업의 경우 높은 energy level을 유지하고 있어야 목표를 향해 나아갈 수 있다. energy가 없으면 그냥 포기하게 된다. 치열한 25분 뒤의 5분의 pause는 뇌에게 소화할 수 있는 여유를 주고, 하루 15 Pomodoro 후의 휴식은 정신/육체적 energy를 보충할 수 있게 해줬다. Pomodoro를 적용한 뒤 나의 energy level은 항상 최고치에 머물러 있다."Manage your Energy, not your time"절대적인 일이 너무 많고 인원이 너무 적은 스타트업, 지속적인 interruption이 있는 CS 업무의 경우 Pomodoro가 잘 안 맞을 수도 있으나, 대부분의 사무직에는 잘 맞을 거 같다. Pomodoro를 개인/팀에 적용해서, 하루를 두배로 사는 기분을 느껴보시길..By 전주훈#삼분의일 #스킬스택 #스택소개 #꿀팁 #인사이트 #Pomodoro #조언
조회수 724

알버트 비어만 사장이 말하는 현대차그룹의 현재, 그리고 미래

알버트 비어만 사장은 CES 2019에서 현대·기아차의 방향성에 대해 인터뷰를 가졌다세계적인 규모의 전자제품 박람회인 2019년 소비자 전자제품 박람회(CES, Consumer Electronics Show)가 본격적으로 막을 올리며 온라인을 뜨겁게 달구고 있다. 우리의 삶을 편리하게 바꿀 각양각색의 미래 기술이 구체적으로 모습을 드러내는 자리이기 때문이다. 첨단 기술의 집합체로 진화하고 있는 자동차 역시 CES에서 빼놓을 수 없는 요소로 거듭났다.현대·기아차 역시 첨단 유행을 선도하겠다는 의지와 뚜렷한 비전을 반영한 부스를 마련했다. 현대차는 전동화와 커넥티드, 오픈 이노베이션이라는 3대 키워드를 핵심으로 부스를 차렸고, 4족 보행 로봇과 자동차의 개념을 결합한 엘리베이트 콘셉트카를 선보였다. 기아차는 자동차가 운전자와 교감해 운전자의 감정과 상황에 맞게 차의 실내 공간을 최적화하는 실시간 감정반응 차량제어 시스템(R.E.A.D. 시스템, Real-time Emotion Adaptive Driving 시스템)을 공개했다. 지난 7일(현지시간) 현대·기아차 최초의 외국인 연구개발본부장 알버트 비어만 사장이 CES 2019가 한창인 행사장을 찾아 국내·외 언론을 맞이했다. 아래 이어질 내용은 알버트 비어만 사장이 국내 기자단과 현대·기아차의 현재와 미래에 대해 나눈 인터뷰다. 현대·기아차의 기술력을 끌어 올리고 있는 알버트 비어만 사장Q. 현대·기아차 연구개발본부장에 외국인이 임명된 것은 처음이다. 현대·기아차에서 기대하는 부분이 있다면? 내가 외국인이라는 건 중요하지 않다. 다만 현대·기아차가 역동적으로 발전할 수 있도록 많은 일을 할 것이고, 기업 문화도 바뀔 수 있도록 준비할 예정이다. 연구개발본부장으로서 현대·기아차에서 개발 중인 모든 기술을 관장해야 하기에 특정 기술이 중요하다고 말하기는 힘들다. 모든 부문에서 제대로 활동하고 연구할 수 있는 환경을 만들어 변화를 모색하는 게 내 역할이다.Q. 고성능 N이 성공적으로 출시됐지만, 아직 현대차와 고성능 이미지를 연결 짓기 어렵다. 현대차에 있어 고성능차는 어떤 의미를 가지는가? 그리고 올해 선보일 N 모델이 있다면?고성능 N 출범의 목적은 현대·기아차의 브랜드 이미지를 높이고 기술적 역량을 키우는 것이다. 우리는 N 모델이 경쟁 모델과 비교해 부족함 없이 만들어졌다고 생각하고, 실제로 세계 유수의 매체들이 고성능 N을 호평하는 것이 우리의 자신감을 대변한다고 생각한다. 또한 기아차가 가지는 젊은 느낌이 있는데, 현대차 역시 고성능 N으로 인해 젊은 감성을 가질 수 있다고 본다. 앞으로 나올 N 모델에 관한 정보는 디트로이트 모터쇼에서 공개할 예정이다. 꽤 놀랄 만한 소식일 것이다. 고성능 N은 현대차의 고성능 기술력을 세계에 확실히 각인시켰다 Q. BMW 재직 시절과 비교했을 때 현대차 개발진의 강점은 무엇이며, 어떤 부분을 보완하면 더 좋은 성과를 이뤄낼 수 있다고 생각하는가?한국에 머무른 지 4년쯤 됐다. 우선 한국의 유능한 엔지니어들과 일할 수 있어서 정말 기쁘다는 것을 얘기하고 싶다. 한국 엔지니어들은 독일과 비교해서 좀 더 진취적이고 끊임없이 뭔가를 개선하기 위해 노력한다. 어떤 영역이든 쉼 없이 개선하고 새로운 걸 시도하는 건 한국 엔지니어의 장점이라고 생각한다. 특히 엔지니어 사이의 경쟁심도 강한데, 이 점이 소비자가 원하는 기술을 개발할 때 큰 도움이 된다. 이 경쟁심을 잘 조정해서 좋은 성과를 이뤄낸 기억이 있다. 이런 경험을 토대로 연구개발 경쟁력을 강화할 것이다.Q. 고성능 친환경차 개발은 어느 정도 이뤄졌는가? 고성능 수소전기차를 기대해도 좋은가?콘셉트카나 시험 제작차 단계에서 고성능 친환경차를 개발하고 소개한 적은 있지만, 구체적인 양산 시기와 출시 지역, 차종 등에 대한 계획은 없다. 환경 규제가 심해지고 결국 내연기관 생산이 중단된다 해도 운전의 즐거움이 사라지지는 않으리라 생각한다. 먼 미래에도 고성능 N은 전기차나 플러그인 하이브리드 같은 친환경차를 통해 운전의 즐거움을 유지할 것이다. 고성능 수소전기차 역시 시간문제다. 가장 앞선 수소전기차 기술을 가진 우리가 아니면 어느 브랜드가 고성능 수소전기차를 만들 수 있겠는가? 수소전기차 넥쏘는 완성도 높은 친환경 파워트레인과 자율주행 기술력을 겸비한 미래형 자동차다Q. 자율주행차 시대가 가까이 왔다고 느낀다. 언제쯤 친환경 자율주행차가 상용화될까?개인적으로 내연기관차의 인기가 시들해지는 것에 대해 걱정하지 않는다. 자율주행 기술이 적용되기까지는 국가와 지역, 적용 수준 등에 따라 모두 상황이 다르고, 실제 자율주행 기술이 전 세계적으로 상용화되기까지는 많은 시간이 걸릴 것이기 때문이다. 파워트레인도 마찬가지다. 많은 브랜드가 각종 친환경차를 선보이고 있지만, 이런 현상이 내연기관차가 금방 수명을 다하는 걸 의미하지는 않는다. 환경 규제에 맞춰 내연기관을 꾸준히 개선하고 있으며, 내연기관차가 줄 수 있는 즐거움이 있다. 그럼 친환경차는 재미없는 차일까? 코나 일렉트릭과 니로 EV 같은 전기차는 파워풀하고 핸들링 성능이 좋아 운전이 즐거운 자동차다. 넥쏘도 마찬가지다. 우리의 미래 친환경차 역시 운전하기 재미있는 자동차가 될 것이다.Q. 자율주행 기술 분야에서 업체들의 경쟁이 치열하다. 다임러, GM, 구글, 웨이모 등 선도적인 기업과 비교해 현대·기아차의 기술력은 어느 정도인가? 자율주행 기술 경쟁력 강화를 위해 어떤 계획과 목표를 갖고 있나, 경쟁사와 협업할 계획도 있나?우리는 평창 동계올림픽에서 넥쏘의 자율주행 기술을 시연한 바 있고, 자율주행 기술 개발을 위해 분명한 로드맵을 가지고 꾸준히 개발 중이다. 여러 혁신적인 기업과 꾸준히 협업하고 있으며, 현대·기아차만의 자율주행 기술 개발 담당 조직과 자율주행 개발 센터도 갖춰 자체적인 기술 개발에도 소홀하지 않다. 다른 업체와의 기술력 격차가 몇 년이라거나, 시험용 차량을 이용해 좋은 기삿거리를 제공하는 것은 큰 의미가 없다. 우리는 많은 사람이 합리적인 가격으로 안전한 자율주행차를 가질 수 있도록 준비하는 게 중요하다고 생각한다. 홍보에 치중한 경쟁보다 가능한 많은 고객이 실질적인 혜택을 얻을 수 있도록, 현대·기아차만의 방향으로 나아갈 것이다.현대차는 미래 이동수단의 비전을 제시하며 스마트 모빌리티 솔루션 제공 업체로 발돋움하겠다고 밝혔다Q. 현대차는 CES 2019 미디어 컨퍼런스에서 전동화, 커넥티드, 오픈 이노베이션 3대 키워드를 중심으로 발표했다. 커넥티드 서비스 확대에 대해 좀 더 설명 부탁한다.2022년 1,000만 명 커넥티드 서비스 가입자 확보 같은 목표 수치도 중요하다. 하지만 현대차가 중요하게 여기는 것은 오픈 플랫폼을 구축해 기업과 외부 기관, 스타트업 등이 데이터를 공유해서 자생적인 생태계로 발전할 수 있도록 이끌어주는 것이다. 결국, 우리의 철학은 ‘소비자가 누릴 수 있는 혜택을 풍성하게 만드는 것’이라고 할 수 있다. Q. 현대차는 스마트 모빌리티 솔루션 제공 업체가 되겠다고 밝혔다. 앞으로 어떤 모빌리티 서비스를 선보일 것인가? 현대차의 방향성이 궁금하다.현대차는 전통적인 자동차 제조사를 넘어, ICT 산업과의 융합이 이뤄지는 4차 산업혁명 시대에 발맞춰 나갈 계획이다. 스마트 모빌리티 솔루션 제공 업체가 되겠다는 건 미래의 일상생활뿐 아니라 사람과 사람, 현실과 상상을 연결해주고, 도시와 환경, 에너지 문제 등을 개선하기 위한 혁신 기술을 선도해 미래 지속 가능성을 확보하겠다는 뜻이다. 많은 공유 경제 서비스가 생기고 사라지고 있는 상황에서 모빌리티 서비스의 미래가 어떻게 될 것이라고 구체적으로 말하긴 어렵지만, 현대차는 고객의 요구에 따라 유동성 있게 서비스를 제공해 차별점을 가질 것이다. G90를 비롯해 향후 등장할 제네시스 모델은 럭셔리의 새로운 기준을 제시할 것이다Q. 제네시스 브랜드 출범 후 3년이 흘렀다. 아직 세계 시장에 안착했다고 보기 어려운데, 현대·기아차와 제네시스가 어떤 차별점을 가지고 어떻게 R&D 전략을 이어갈 예정인가? 제네시스 브랜드의 고성능 모델 계획도 있는가?특정 판매 수치보다 제네시스의 브랜드 이미지를 제대로 구축하는 게 중요하다. 미국에서의 판매망 정비도 순차적으로 이뤄지고 있고, 한국에서의 제네시스는 브랜드 이미지가 좋다고 본다. 제네시스는 현대·기아차와 비교해 럭셔리, 안전 및 편의성, 브랜드 이미지, 소비 비용 등 전반적인 부분에서 차원이 다른 고객 경험과 만족도를 제공한다.제네시스 고성능차에 대해 얘기하자면, 이미 G70가 <모터트렌드> 2019 올해의 차에 선정됐고, ‘북미 2019 올해의 차’ 선정도 긍정적으로 보고 있다. 제네시스는 이미 고성능이라는 측면에서 잘 개발돼있다고 생각하고, 이보다 더 고성능으로 만들어야 한다고 생각하지 않는다. 현재 제네시스 신모델을 개발 중인데 개인적으로 만족하고 있으며, 향후 선보일 제네시스 모델들은 브랜드 이미지와 가치를 한 단계 높이는 데 공헌할 것이다. #현대 #현대그룹 #현대자동차그룹 #HMG #HMG저널 #HMGJournal #알버트_비어만 #CES #2019 #인터뷰 #고성능_N #친환경차 #제네시스 #미래 #모빌리티 #연구개발본부장 #기업문화 #구성원인터뷰
조회수 750

이브(EVE)의 Commitments/공헌

어떤 제품을 어떤 마음으로 만드느냐에 따라 기업이 사회에 미치는 영향은 달라질 수 있다고 믿습니다. EVE는 성과 관련된 제품을 [Healthy, Natural, Equal]이라는 3가지 화두를 토대로 재해석하여 보다 나은 대안을 제시합니다. EVE가 이야기하는 건강함은 제품의 성분적 안전성을 넘어 성을 바라보는 문화를 개선합니다. EVE는 제품이 아닌 생식건강을 판매합니다.Healthy & Clean : 건강하고 깨끗하게 만듭니다건강에 대한 소비자들의 관심과 목소리가 높아지면서 화장품, 식품 등의 시장에서는 업계 전체가 개선을 위해 노력하고 있지만 성(性)과 관련된 제품에 있어서는 성분적 안전성에 대한 인식이 여전히 많이 부족합니다. 저희는 새로운 기준을 제시하고자 합니다. 우리 몸 가장 소중하고 예민한 곳에 닿는 물건이기에 EVE는 사랑하는 사람에게 더 좋은 것만 주고 싶은 마음 – 그 사랑을 닮은 제품을 개발하기 위해 노력합니다. 인체에 유해할 수 있는 화학물질을 첨가하지 않는 것, 유기농 원료로 아낌없이 채우는 것, 우리 몸의 자연적인 균형을 고려하는 것 – 무엇을 만들던 EVE는 더 깨끗하고 건강하게 만듭니다.Natural & eco-friendly : 자연을 닮은 제품을 만듭니다지속가능성(Sustainability)은 지구에서 함께 살아가는 이들이 공통적으로 지녀야 할 책임의식이며, 이는 기업의 양심적인 생산을 필요로 합니다. 가능하다면 최대한 친환경적으로 만드는 것, 자연에 남기는 흔적을 최소화 하는 것, 환경에 대한 책임의식을 가지는 것 – 이것이 EVE가 지향하는 에코페미니즘입니다.Equal & Fair : 평등하고 공정하게 만듭니다건강하고 안전한 성(性)에 대한 접근성은 연령이나 성별, 성적지향, 직업, 지역, 국적, 문화 등에 의해 제한되어서는 안 된다고 믿습니다. 약자일 수 있는 이들의 입장에서 먼저 생각하고, 너무나 쉽게 외면/무시당하는 이들의 권리를 복원하고, 더 나은 성문화의 정착을 위해 노력하는 EVE는 평등과 공정함을 지향합니다.
조회수 8036

Node.js로 Amazon DynamoDB 사용하기

DynamoDB 로컬 설정 (다운로드 버전)실제 DynamoDB 웹 서비스에 액세스하지 않고 로컬에서 애플리케이션 작성 및 테스트를 할 수 있음1. 다운로드 링크에서 DynamoDB 무료 다운로드2. 압축 해제 후 해당 디렉터리에서 아래의 명령어로 실행java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb* Ctrl+C로 중지할 수 있고 중지하기 전까지 수신 요청을 처리함* 기본적으로 8000번 포트를 사용Node.js 용 AWS SDK 설치1. 설치npm install aws-sdk2. 실행// app.jsvar AWS = require("aws-sdk");var s3 = new AWS.S3();// 버킷 이름은 모든 S3 사용자에게 고유한 것이어야 합니다.var myBucket = "dynamodb.sample.wonny";var myKey = "myBucketKey";s3.createBucket({ Bucket: myBucket }, function(err, data) {  if (err) {    console.log(err);  } else {    params = { Bucket: myBucket, Key: myKey, Body: "Hello!" };    s3.putObject(params, function(err, data) {      if (err) {        console.log(err);      } else {        console.log("Successfully uploaded data to myBucket/myKey");      }    });  }});node app.js테이블 생성// CreateTable.jsvar AWS = require("aws-sdk");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var dynamodb = new AWS.DynamoDB();var params = {  TableName: "Movies",  KeySchema: [    { AttributeName: "year", KeyType: "HASH" }, // Partition key    { AttributeName: "title", KeyType: "RANGE" } // Sort key  ],  AttributeDefinitions: [    { AttributeName: "year", AttributeType: "N" },    { AttributeName: "title", AttributeType: "S" }  ],  // 다운로드 버전인 경우 아래 코드 무시  ProvisionedThroughput: {    ReadCapacityUnits: 10,    WriteCapacityUnits: 10  }};dynamodb.createTable(params, function(err, data) {  if (err) {    console.log(      "Unable to create table. Error JSON: ",      JSON.stringify(err, null, 2)    );  } else {    console.log(      "Created table. Table description JSON: ",      JSON.stringify(data, null, 2)    );  }});node CreateTable.js샘플 데이터 로드1. 이곳에서 샘플 데이터 파일 다운로드데이터 형태는 아래와 같음[    {        "year": 2013,        "title": "Rush",        "info": {            "directors": ["Ron Howard"],            "release_date": "2013-09-02T00:00:00Z",            "rating": 8.3,            "genres": [                "Action",                "Biography",                "Drama",                "Sport"            ],            "image_url": "http://ia.media-imdb.com/images/M/MV5BMTQyMDE0MTY0OV5BMl5BanBnXkFtZTcwMjI2OTI0OQ@@._V1_SX400_.jpg",            "plot": "A re-creation of the merciless 1970s rivalry between Formula One rivals James Hunt and Niki Lauda.",            "rank": 2,            "running_time_secs": 7380,            "actors": [                "Daniel Bruhl",                "Chris Hemsworth",                "Olivia Wilde"            ]        }    },    ...]- year 및 title을 Movies 테이블을 위한 기본 키 속성 값으로 사용- info의 나머지 값들은 info라는 단일 속성에 저장- JSON을 DynamoDB 속성에 저장2. 샘플 데이터 Movies 테이블에 로드// LoadData.jsvar AWS = require("aws-sdk");var fs = require("fs");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var docClient = new AWS.DynamoDB.DocumentClient();console.log("Importing movies info DynamoDB. Please wait.");var allMovies = JSON.parse(fs.readFileSync("moviedata.json", "utf8"));allMovies.forEach(function(movie) {  var params = {    TableName: "Moves",    Item: {      year: movie.year,      title: movie.title,      info: movie.info    }  };  docClient.put(params, function(err, data) {    if (err) {      console.error(        "Unable to add movie",        movie.title,        ". Error JSON:",        JSON.stringify(err, null, 2)      );    } else {      console.log("PutItem succeeded:", movie.title);    }  });});node LoadData.js테이블에 항목 추가// PutItem.jsvar AWS = require("aws-sdk");var fs = require("fs");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var docClient = new AWS.DynamoDB.DocumentClient();var table = "Movies";var year = 2017;var title = "The Big Wonny";var params = {  TableName: table,  Item: {    year: year,    title: title,    info: {      plot: "Nothing happens at all.",      rating: 0    }  }};console.log("Adding a new item...");docClient.put(params, function(err, data) {  if (err) {    console.error(      "Unable to add item. Error JSON:",      JSON.stringify(err, null, 2)    );  } else {    console.log("Added item:", JSON.stringify(data, null, 2));  }});node PutItem.js- 기본 키가 필요하므로 기본 키 (year, title) 및 info 속성 추가항목 읽기// GetItem.jsvar AWS = require("aws-sdk");var fs = require("fs");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var docClient = new AWS.DynamoDB.DocumentClient();var table = "Movies";var year = 2017;var title = "The Big Wonny";var params = {  TableName: table,  Key: {    year: year,    title: title  }};docClient.get(params, function(err, data) {  if (err) {    console.error(      "Unable to read item. Error JSON:",      JSON.stringify(err, null, 2)    );  } else {    console.log("GetItem succeeded:", JSON.stringify(data, null, 2));  }});node GetItem.js항목 업데이트// UpdateItem.jsvar AWS = require("aws-sdk");var fs = require("fs");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var docClient = new AWS.DynamoDB.DocumentClient();var table = "Movies";var year = 2017;var title = "The Big Wonny";var params = {  TableName: table,  Key: {    year: year,    title: title  },  UpdateExpression: "set info.rating = :r, info.plot=:p, info.actors=:a",  ExpressionAttributeValues: {    ":r": 5.5,    ":p": "Everything happens all at once.",    ":a": ["Larry", "Moe", "Curly"]  },  ReturnValues: "UPDATED_NEW"};console.log("Updating the item...");docClient.update(params, function(err, data) {  if (err) {    console.error(      "Unable to update item. Error JSON:",      JSON.stringify(err, null, 2)    );  } else {    console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));  }});node UpdateItem.js- 지정된 항목에 대해 수행하고자 하는 모든 업데이트를 설명하기 위해 UpdateExpression을 사용- ReturnValues 파라미터는 DynamoDB에게 업데이트된 속성("UPDATED_NEW")만 반환하도록 지시원자성 카운터 증가시키기update 메서드를 사용하여 다른 쓰기 요청을 방해하지 않으면서 기존 속성의 값을 증가시키거나 감소시킬 수 있음 (모든 쓰기 요청은 수신된 순서대로 적용)실행 시 rating 속성이 1씩 증가하는 프로그램// Increment.jsvar AWS = require("aws-sdk");var fs = require("fs");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var docClient = new AWS.DynamoDB.DocumentClient();var table = "Movies";var year = 2017;var title = "The Big Wonny";// Increment an atomic countervar params = {  TableName: table,  Key: {    year: year,    title: title  },  UpdateExpression: "set info.rating = info.rating + :val",  ExpressionAttributeValues: {    ":val": 1  },  ReturnValues: "UPDATED_NEW"};console.log("Updating the item...");docClient.update(params, function(err, data) {  if (err) {    console.error(      "Unable to update item. Error JSON:",      JSON.stringify(err, null, 2)    );  } else {    console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));  }});node Increment.js항목 업데이트(조건부)UpdateItem을 조건과 함께 사용하는 방법조건이 true로 평가되면 업데이트가 성공하지만 그렇지 않으면 수행되지 않음// ConditionalUpdateItem.jsvar AWS = require("aws-sdk");var fs = require("fs");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var docClient = new AWS.DynamoDB.DocumentClient();var table = "Movies";var year = 2017;var title = "The Big Wonny";// Increment an atomic countervar params = {  TableName: table,  Key: {    year: year,    title: title  },   UpdateExpression: "remove info.actors[0]",  ConditionExpression: "size(info.actors) > :num",  ExpressionAttributeValues: {    ":num": 3  },  ReturnValues: "UPDATED_NEW"};console.log("Attempting a conditional update...");docClient.update(params, function(err, data) {  if (err) {    console.error(      "Unable to update item. Error JSON:",      JSON.stringify(err, null, 2)    );  } else {    console.log("UpdateItem succeeded:", JSON.stringify(data, null, 2));  }});node ConditionalUpdateItem.js다음과 같이 작성하면 아래와 같은 에러 메시지가 표시 됨The conditional request failed"영화에는 3명의 배우가 있는데 배우가 3명보다 많은지를 확인하고 있어 에러가 발생다음과 같이 수정하면 정상적으로 항목이 업데이트 됨ConditionExpression: "size(info.actors) >= :num",항목 삭제// DeleteItem.jsvar AWS = require("aws-sdk");var fs = require("fs");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var docClient = new AWS.DynamoDB.DocumentClient();var table = "Movies";var year = 2017;var title = "The Big Wonny";var params = {  TableName: table,  Key: {    year: year,    title: title  },  ConditionExpression: "info.rating <= :val",  ExpressionAttributeValues: {    ":val": 5.0  }};console.log("Attempting a conditional delete...");docClient.delete(params, function(err, data) {  if (err) {    console.error(      "Unable to update item. Error JSON:",      JSON.stringify(err, null, 2)    );  } else {    console.log("DeleteItem succeeded:", JSON.stringify(data, null, 2));  }});node DeleteItem.js다음과 같이 작성하면 아래와 같은 에러 메시지가 표시 됨The conditional request failed특정 영화에 대한 평점이 5보다 크기 때문에 에러가 발생다음과 같이 수정하면 정상적으로 항목이 삭제 됨var params = {  TableName: table,  Key: {    year: year,    title: title  }};데이터 쿼리- 파티션 키 값을 지정해야 하며, 정렬 키는 선택 사항- 1년 동안 개봉한 모든 영화를 찾으려면 year만 지정, title을 입력하면 2014년 개봉된 "A"로 시작하는 영화를 검색하는 것과 같이 정렬 키에 대한 어떤 조건을 바탕으로 일부 영화를 검색할 수도 있음한 해 동안 개봉한 모든 영화// QueryYear.jsvar AWS = require("aws-sdk");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var docClient = new AWS.DynamoDB.DocumentClient();var params = {  TableName: "Movies",  KeyConditionExpression: "#yr = :yyyy",  ExpressionAttributeNames: {    "#yr": "year"  },  ExpressionAttributeValues: {    ":yyyy": 1985  }};docClient.query(params, function(err, data) {  if (err) {    console.error("Unable to query. Error JSON:", JSON.stringify(err, null, 2));  } else {    console.log("Query succeeded.");    data.Items.forEach(function(item) {      console.log(" -", item.year + ": " + item.title);    });  }});node QueryYear.jsExpressionAttributeNames는 이름을 교체함. 이를 사용하는 이유는 year가 DynamoDB에서 예약어이기 때문. KeyConditionExpression을 포함해 어떤 표현식에서도 사용할 수 없으므로 표현식 속성 이름인 #yr을 사용하여 이를 지칭ExpressionAttributeValues는 값을 교체함. 이를 사용하는 이유는 KeyConditionExpresssion을 포함해 어떤 표현식에서도 리터럴을 사용할 수 없기 때문. 표현식 속성 값인 :yyyy를 사용해 지칭* 위의 프로그램은 기본 키 속성으로 테이블을 쿼리하는 방법. DynamoDB에서 1개 이상의 보조 인덱스를 테이블에 생성하여 그 인덱스로 테이블을 쿼리하는 것과 동일한 방식으로 쿼리 작업 가능. 보조 인덱스는 키가 아닌 속성에 대한 쿼리를 허용하여 애플리케이션에 더 많은 유연성을 부여함한 해 동안 개봉한 모든ㄴ 영화 중에 특정 제목을 지닌 영화year 1992에 개봉한 영화 중에 title이 "A"부터 "L"까지의 알파벳으로 시작하는 영화를 모두 조회합니다.// QueryTitle.jsvar AWS = require("aws-sdk");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var docClient = new AWS.DynamoDB.DocumentClient();console.log(  "Querying for movies from 1992 - titles A-L, with genres and lead actor");var params = {  TableName: "Movies",  ProjectionExpression: "#yr, title, info.genres, info.actors[0]",  KeyConditionExpression: "#yr = :yyyy and title between :letter1 and :letter2",  ExpressionAttributeNames: {    "#yr": "year"  },  ExpressionAttributeValues: {    ":yyyy": 1992,    ":letter1": "A",    ":letter2": "L"  }};docClient.query(params, function(err, data) {  if (err) {    console.error("Unable to query. Error JSON:", JSON.stringify(err, null, 2));  } else {    console.log("Query succeeded.");    data.Items.forEach(function(item) {      console.log(        " -",        item.year + ": " + item.title + " ... " + item.info.genres + " ... ",        item.info.actors[0]      );    });  }});node QueryTtiel.js스캔테이블의 모든 항목을 읽고 테이블의 모든 데이터를 반환선택 사항인 filter_expression을 제공할 수 있으며 그 결과 기준이 일치하는 항목만 반환하지만 필터는 테이블 전체를 스캔한 후에만 적용됨// Scan.jsvar AWS = require("aws-sdk");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var docClient = new AWS.DynamoDB.DocumentClient();var params = {  TableName: "Movies",  ProjectionExpression: "#yr, title, info.rating",  FilterExpression: "#yr between :start_yr and :end_yr",  ExpressionAttributeNames: {    "#yr": "year"  },  ExpressionAttributeValues: {    ":start_yr": 1950,    ":end_yr": 1959  }};console.log("Scanning Movies table.");docClient.scan(params, onScan);function onScan(err, data) {  if (err) {    console.error(      "Unable to scan the table. Error JSON:",      JSON.stringify(err, null, 2)    );  } else {    // print all the movies    console.log("Scan succeeded.");    data.Items.forEach(function(movie) {      console.log(        movie.year + ": ",        movie.title,        "- rating:",        movie.info.rating      );    });    // continue scanning if we have more movies, because    // scan can retrieve a maximum of 1MB of data    if (typeof data.LastEvaluatedKey != "undefined") {      console.log("Scanning for more...");      params.ExclusiveStartKey = data.LastEvaluatedKey;      docClient.scan(params, onScan);    }  }}node Scan.jsProjectionExpression은 스캔 결과에서 원하는 속성만 지정FilterExpression은 조건을 만족하는 항목만 반환하도록 조건을 지정. 다른 항목들은 모두 무시됨테이블 삭제// DeleteTable.jsvar AWS = require("aws-sdk");AWS.config.update({  region: "us-west-2",  endpoint: "http://localhost:8000"});var dynamodb = new AWS.DynamoDB();var params = {  TableName: "Movies"};dynamodb.deleteTable(params, function(err, data) {  if (err) {    console.error(      "Unable to delete table. Error JSON:",      JSON.stringify(err, null, 2)    );  } else {    console.log(      "Deleted table. Table description JSON:",      JSON.stringify(data, null, 2)    );  }});node DeleteTable.js#트레바리 #개발자 #안드로이드 #앱개발 #Node.js #백엔드 #인사이트 #경험공유 #데이터베이스 #DB #개발 #AWS #아마존 #NoSQL 
조회수 839

회사에서 말 잘하는 프로또박이 되기

말이 많은 것과 말을 잘하는 것은 엄연히 다릅니다. 가끔 회사에는 프로또박이들이 한 분씩 계십니다. 그리 길게 말하는 것 같지도 않은데 뇌리에 타카를 쏜 것 마냥 상큼하게 메시지를 박아주시는 분들이죠. 깔끔하고 명료한데다가 뭔가 안경선배같은 아우라까지 풍기는 터라 선망의 대상이 되기도 합니다. 물론 말이라는 게 항상 또박또박일 필욘 없습니다. 매일 일상마다 또박또박 거리면 설명충같기도 하고, 재수없어 보이기도 하니까요. 스벅에서 친구와 해묵은 얘기를 나누거나 닭도리탕과 처음처럼을 마시며 노가리를 깔 때는 의식의 흐름이 더 중요합니다. 흔히 우리가 의식의 흐름이라고 부르는 대화의 기법은 '말꼬리잡기' 인데 이를테면 이런식입니다."어제 라면 먹었는데 눈이 부었다.""그러게 쌍꺼풀이 완전 없어졌네.""야 나 쌍꺼풀 수술해야 하지 않을까?""넌 쌍꺼풀이 문제가 아니다.""니 얼굴.""응 니 얼굴.""아 맞다, 너 내 친구 소개해주까?""뭐하는 사람인데?""뭐 디자인한다는 거 같던데.""아 디자인쪽 하는 분이면 야근많지않나? 자주 못보면 싫은데.""너도 야근많잖아.""아...진짜 요즘 것때문에 짜증나 죽겠다니까.""왜 또 팀장이 계속 꼰대짓해?""아니 세상에 있잖아....블라블라..."네 그렇습니다. 짧은 대화지만 눈이 부은 것에서 야근얘기로 넘어오게 되었습니다. 이러한 대화가 이어지는 것을 '의식의 흐름' 기법 내지는 '아무말 화법' 이라고 하죠. 그냥 생각나는 대로 마구 내뱉는 느낌이랄까요. 주로 친구와의 대화는 이런 식의 화법을 따릅니다.그러나 일할 때 이런식으로 말하다간 맴매맞겠죠.일할 때는 "또박이 화법"을 활용합니다. 또박이 화법은 상당히 어렵고 난해한 부분이 있어서 어떻게 정리를 해야할 지 꽤나 고민을 했습니다. 크게 3가지의 단계로 나눌 수 있겠더라구요. 일단 오늘은 기초편으로, 또박이의 기본중에 기본인 "끊어말하기" 에 대해 알아보도록 하겠습니다.제1장. 또박이의 외모1. 안경을 쓰자.안경을 쓰면 똑똑해 보입니다. 물론 안경을 썼을 때 아라리같다면 지양하도록 합시다. 추천드리는 포즈는 사카모토의 제스쳐입니다. 반무테는 늙어보이지만 똑똑해보이더군요. 코난안경은 코난같이 생겨야 하므로 패스합시다.사카모토입니다만?2. 올바른 자세.거북목에 뛰이.....해서 어깨 축 늘어뜨리고 있으면 또박또박한 말이 안나옵니다. 복화술 화법으로 입은 안벌리고 입술만 오물거리면 쭝얼쭝얼 거리는 듯 해서 별로입니다. 정석의 자세를 알려드리죠. 일단 제시카 챠스테인 누님의 미스슬로운 포즈로 변신해보도록 합시다. 고개는 집어넣고 여유로운 자세와 적당히 소매를 걷고 윗 단추를 풉니다. 아래와 같은 자세가 또박이의 정석이랄까요. 혹시라도 영어또박이를 하고 싶으시다면 미스슬로운을 200번쯤 재감상하시길 추천드립니다.챠스테인 누님 [미스 슬로운 中]3. 제스쳐는 단순하게.이렇게 하라는 건 아님스피치 학원가면 허리밑으론 손을 내리지 마라 짝다리 짚지마라 등등 다양한 제스쳐 룰을 알려주는데, 사실 이건 몸에 밴 습관인지라 어지간해선 고치기가 어렵습니다. 우리가 제기찰 때 왠지 손이 으에ㅞ에ㅞ? 처럼 되는 것과 비슷하달까요. 음, 제스쳐에서 중요한 건 손가락입니다. 검지가 괜히 Index finger가 아니죠. 손가락의 힘과 방향에 따라 집중력도 크게 좌우된답니다. 우리의 챠스테인 누님처럼 부드럽고 고결한 검지의 선을 만들 수 있다면 좋겠지만, 그게 아니라면 그냥 어딘가를 잡고 얘기하는 편이 나을 것 같습니다. 선이 살아있는 검지. 제2장. 또박이의 화법또박이의 기초예제부터 알아보겠습니다. 오늘은 3가지 예제를 보도록 하죠. 일단 말을 시작하는 '또박한 도입'부분을 알아볼까요? 뭔가 말을 시작할 땐 갑자기 끼어들면 안됩니다. 우리가 친구들과 얘기할 때도 '내가 재미있는 얘기 해줄까?'(물론 그것은 대부분 재미가 없음) 하면서 들어가듯 내가 지금부터 말을 하겠다는 뉘앙스의 스타트문장을 잘 얘기하는 것이 또박이의 첫걸음이더라구요.그런데 이 첫 문장이 "제가 의견을 말해도 되겠습니까?" 라는 식의 안경선배 말투면 가끔 어색해질 때가 있더라구요. 시공간이 일그러지는 듯한 느낌도 받고... 그래서 시공간의 균형을 중요시하는 분들께선 간단하게 다음과 같이 말하시더군요."제 생각은...(PAUSE)"이라고 말입니다. 아주 짧은 2초간의 포즈이지만, 이 효과는 굉장한 집중효과가 있습니다. 만약 상대방의 의견에 대한 반박이나 다른 인사이트를 말하고싶다면 어떻게 할까요? 마찬가지입니다. '제 생각은.' 입니다. 혹시라도 그 상대방이 나의 미래를 좌지우지 할 수 있는 존재이거나 뭔가 내 결재란 어딘가에 있는 이름이라고 한다면 "좋은 의견입니다. 하나 덧붙이자면..."이라고 그 의견이 좋든 안좋든 그냥 일단 좋은 의견입니다. 하나 덧붙... 이라고 얘기해주도록 합시다. 이 때도 ~덧붙이자면... 다음엔 2초 포즈를 걸어줍시다. 뭔가 집중되는 느낌과 함께 부담과 현기증을 동시에 느낄 수 있습니다. 근데 중요한 건 이렇게 시작을 했는데, 그 다음 말이 별 거 없다거나 횡설수설하면 '그건 어떤 혼돈의 음성이니?' 라는 눈빛세례를 받을 수 있습니다. 말을 하면서 생각하는 게 아니라, 생각하고 말을 하는 겁니다. 이 때 생각의 구조는 다음과 같습니다.1. 전제(-한다면)2. 가정(-입니다.)3. 누가/무엇을4. 어떻게5. 어쩐다.이렇게 5단계로 따박따박 얘기해줍니다. 경우에 따라 1,2번은 생략이 가능합니다. 주로 1,2번은 상대방의 의견을 다시 한 번 정리해주고 내 의견을 들어가는 경우에 많이 쓰이죠. 또는 현재 프로젝트의 상황을 정리하면서 내 의견의 거점을 확실히 잡는 역할두 하구요. 예를 들어볼께요."현재 오프라인의 사용자가 온라인 사용자보다 훨씬 많은 상태인데, 만약 오프라인에 별다른 공지없이 온라인을 바로 오픈하게 된다면 고객들이 혼란스러워하거나 변화된 UX에 대한 학습을 강요받게 될 가능성이 있습니다. / 일단, 리뉴얼하는 웹페이지 이벤트를 온라인에선 헤드배너, 이벤트 지점안내를 진행하고 오프라인에선 방문고객 대상 결제 시 안내를 통해 옴니채널로 운영하면서 안정적으로 리뉴얼페이지로 유도하면 어떨까 하는 생각입니다."전제 : 현재 오프라인의 사용자가 온라인 사용자보다 훨씬 많은 상태인데, 만약 오프라인에 별다른 공지없이 온라인을 바로 오픈하게 된다면 / 가정 : 고객들이 혼란스러워하거나 변화된 UX에 대한 학습을 강요받게 될 가능성이 있습니다.무엇을 : 일단, 리뉴얼하는 웹페이지 이벤트를 / 어떻게 : 온라인에선 헤드배너, 이벤트 지점안내를 진행하고 오프라인에선 방문고객 대상 결제 시 안내를 통해 옴니채널로 운영하면서 / 어쩐다 : 안정적으로 리뉴얼페이지로 유도하면 어떨까 하는 생각입니다.네 이런 식으로 포인트 단어들만 묶어도 말이 되게끔 논리구조를 만드는 거죠. 저 문장의 핵심은 결국"웹이벤트를 옴니채널로 운영해서 오프라인 고객들도 유도하자."라는 한 문장으로 요약할 수 있겠네요. 대부분 위 5가지 요소에서 하나씩 빠질 때마다 반문과 질문이 생기게 되는데, 그걸 물어봐주는 사람은 오히려 괜찮은 편이예요. 일반적으론 그냥 '뭔 말이야?' 하고 말아버리죠. 한 번 볼까요.일단 전제가 빠지면 "쌩뚱맞다." 라는 생각이 들 수 있습니다. 가정이 없으면 해결해야 할 문제점이 명확히 보이지 않아  "추상적이다." 라는 느낌을 주죠. 주어가 없으면 "그러니까 뭐슬?" 이라는 반문이 나옵니다. 어떻게가 없으면 "말을 해 말을." 이라는 반응이 나오고, 어쩐다..라는 내용이 없으면 "어쩌라고?" 라는 질문이 튀어나와요.여기서 특히 중요한 건 제일 마지막에...그러니까 그걸 어쩌라고? 라는 부분을 콕 찝어주는게 중요합니다. 유도하자!제작하자!공유하자!런칭하자!모집하자!등등... 딱 하나의 행위로 점철될 수 있는 명확한 단어로 정리해주는 게 또박이의 첫 걸음입니다. 저 부분이 없으면..이렇게 될 수 있어요."그래서...그 옴니채널로 운영을..뭐 잘 해보면 어떨까 해서요..."잘한다, 가치있게 해보자, 정리해보자....등등의 추상적인 단어들로 헤벌레 풀어질 수 있죠. 그러니 마지막에 확실한 서술어로 콱 쪼매주어야 해요.마지막 또박이의 기초화법은 바로 말의 마무리입니다. 위에서 말한 마지막 '어쩌라고' 부분에 대한 얘기와 일맥상통합니다. 말이 어버버버 해지는 이유는 그 내용과 논리성때문입니다. 그러나 내용이 챡챡 정리되어 있어도 '어미처리'가 흐릿하면 느낌적으로 말이 장황해보이죠.말을 마무리 지을 때"그렇다고 생각은 하는데..아닐 수도 있구요...""그러는게 어떨까하는 생각이 들기도 합니다.""이게 맞는지는 모르겠지만...""그렇지 않을까...해서요."등등 어미를 주욱 늘여버리는 경우가 종종있는데. 물론 이는 내 생각에 대한 확신을 너무 뿜뿜하면 재수없는 놈이 될까봐 자기방어에서 비롯된 화법일 겁니다. 살아남아야 하니 어쩔 수 없죠. 하지만 인생은 원래 개썅마이웨이이므로 저렇게 말해도 욕먹고, 따박하게 말해도 욕먹습니다. 기왕 욕먹을 거면 어버버 해보이기보단 좀 쎄보이는 편이 낫지 않을까요?그렇다고 정치인마냥 부르짖으란 얘기는 아니고, 다음과 같은 어미처리의 느낌이랄까요."~ 라고 생각합니다.""~의 방법도 있습니다.""~쪽을 추천합니다.""~해보는 건 어떨까요."등등 아무리 풀어도 2어절 이상을 넘기지 않는 우회적 어미처리를 추천드립니다. 내가 진리요 생명이다라는 느낌보단 내 생각은 확고하지만 난 자비롭다라는 느낌을 동시에 줄 수 있는 크세르크세스식 화법입니다. 유용하게 쓰이곤 하더군요.응용편에서 계속.
조회수 1677

배트맨을 통해 배운 리더십

가끔 영화를 보다 보면 영화 속 캐릭터의 대사가 그 어떤 멘토의 조언보다 더 깊은 울림을 줄 때가 있다. 얼마 전엔 내가 정말 좋아하는 크리스토퍼 놀란 감독의 불명의 명작 다크나이트 시리즈의 시작 편인 <배트맨 비긴즈>를 우연히 다시 볼 일이 있었는데, 일전엔 그저 멋있는 말로 느껴졌던 배트맨(브루스 웨인)의 대사가 내 머리를 강타하는 것을 느꼈다.사진 출처: 블로그스팟 영화명대사 모음(MovieQuotes)It’s not who I am underneath – it’s what I do that defines me.정확한 한글 해석이 무엇인지에 대해선 여러 의견이 있겠지만, 회사의 대표이자 리더로서의 정체성에 대해 많이 고민하는 나에게 이 대사는 다음과 같이 들렸다. “진짜 나를 규정하는 것은 보이지 않는 나의 생각이 아니라 지금 보이고있는 나의 행동이다”사업을 하다 보면 사실 대부분의 중요한 일이라는 것이 다양한 이해관계자들의 생각을 이해하고 소통을 통해 조율하는 과정이라는 것을 알게 된다. 그 과정에서 당연하게도 내가 전달하고자 했던 나의 진심을 함께 일하는 동료들이 알아주지 못하는 경우도 생기고, 나아가 파트너사나 주주들이 오해를 하는 경우도 생기기 마련이다. 그렇기에 거미줄같이 복잡한 소통의 과정 속에서 얼마나 효과적으로 진심을 잘 소통할 수 있는지는 리더의 능력을 평가함에 있어 분명 가장 중요한 요소 중 하나일 것이다. 예전엔 ‘사람들이 왜 내 진심을 몰라주지...’, ‘내 생각을 어떻게 하면 더 잘 전달할까.’ 같은 고민을했던 기억이 난다. 하지만 반복되는 소통과 조율 과정에서 내가 느꼈던 가장 단순하면서도 명쾌한 진리는 내 진심을 전달함에 있어서 나의 생각, 나의 원래 마음이 중요한 것이 아니라 내가 그래서 어떻게 행동하느냐, 실제로 나를 둘러싼 사람들이 보게 되는 나의 모습이 무엇이냐, 그것이 더 중요하다는 것이었다. 지각을 하는 것은 팀웍을 망치는 나쁜 일입니다, 라고 내가 아무리 말하더라도 정작 나는 항상 지각을 한다면 그 말이 팀원들에게 공감대를 형성하고 마음을 전달하는 데에는 명확한 한계가 있을 수밖에 없다. 우리 회사는 다양한 아이디어에 귀 기울이고 나에 대한 비판적인 피드백에 대해서도 경청하는 문화를 가져야 합니다, 라고 이야기하는 것 역시 중요하지 않을 수 있다. 내가 백 번 그렇게 이야기하고 마음 속으로 굳게 그것이 옳다고 믿고 있더라도 실제로 나에 대한 동료들의 비판이 있을 때 상기되어 화내는 모습을 보이면, 동료들은 ‘아 우리 회사 대표는 달콤한 소리만 듣길 원하는구나. 우리 회사는 결국 솔직하고 냉정한 피드백은 조심해야 하는 문화구나.’ 라고 판단하게 될 것이다. 진짜 나를 규정하는 것은 다름 나의 행동이다. 나는 원래 이런 사람이다, 나의 마음은 사실 이게 아니었다, 와 같은 변명을 하지 않는 리더가 되어야 하겠다. 나의 행동이 나를 규정한다. 나의 행동이 바로 나 자신이다. 나의 행동이 진심을 전달하는 가장 중요한 시작이자 끝이라는 사실을 다시 한 번 곱씹어본다.#어니스트펀드 #리더십 #마인드셋 #스타트업 #스타트업창업 #인사이트 #조언
조회수 878

스타트업 견문록(2)

 어느 날 번뜩인 아이디어로 몇 날 며칠 흥분의 나날을 보내고, 창업 결심을 했을 때, 우리는 무엇을/어떻게/어디서 시작하여야 할까? 출퇴근하는 지하철에서 이 아이템으로 성공하는 상상도 해보고, 뭔가 남들이 모르는 비장의 카드 하나를 얻은 듯 나 자신이 대견하게 느끼는 순간이 있었어. 최근에는 정부와 민간의 투자사들의 주도로 창업 자금과 공간도 지원해 주고, 조금이라도 더 젊을 때, 도전해 보자는 혈기왕성, 넘치는 열정을 발산할 수 있는 기회라고 생각할 수도 있어.      그런데 말야. 한 걸음만 더 현실적으로 따져보자구. 세상 일은 그리 쉽게 생각대로 되지 않는 법이거든. 그냥 감으로, 순간의 순발력으로 이룰 수 있는 일은 복권이나 도박 정도랄까? 그렇기에 아이디어 수준에서 진짜 창업을 하기까지는 세세하게 준비하고, 하나하나 점검해야 하며 신경 써야 할 일들이 많아. 그럼에도 불구하고, 나름 준비하고 창업해도 그 이상으로 생각하지 못했던 문제들이 일어나는 게 다반사인걸. 그렇기에 더욱 준비를 더 잘 해야겠지?     준비물 1. 지도(사업계획서) 아이디어에 대하여 맹신하지 마! 이것은 마치 서쪽으로 가면 황금의 땅, 엘 도라도가 있을 거란 가설과도 같아. 무슨 말이냐면 아이디어는 말 그대도 추상적이고, 실체화되지 않은 상상 속 정보의 조합일 뿐이야. 설령 신박하거나 기똥찬 아이디어일지라도 구체적이거나 실현 가능성이 없다면, 아무런 가치가 없는 거야. 다시 말해, 아이디어를 “사업계획서”라는 이름으로 사전조사와 구현 방법, 필요자원과 기간 등에 대한 계획이 논리적이고 타당한 근거 위에 준비되어야 해. 마치 미지의 바다를 항해하기 위해 지도(해도)를 준비하는 것과 같아. 단지 서쪽으로 가자 수준이 아니라 서쪽이면 지브랄 협해를 언제 거치고, 대서양을 항해하기 위해 알려진 상선들이 다니던 루트를 갈 것인지, 새로운 루트로 갈 것인지, 별을 기준으로 삼을 것인지, 선원은 얼마나, 식량은 얼마나 필요할 것인지, 유망한 항해사를 데리고 올 것인지, 참고할 수 있는 사례가 있는지 등에 대한 스토리가 정리되어 있어야 하지.  아이디어 수준에서 상대방을 설득하는 것과 사업계획서 수준과 비교하면 어느 쪽이 더 현실적일까? 물론 사업계획서도 꾸준히 수정되고, 보완되어야 하기에 완벽하지 않아. 오히려 계획했던 것과 다른 일들이 빈번하고, 일정이나 방향이 예상외의 상황으로 빠져들곤 해. 그렇지만 적어도 사업계획서라는 큰 틀이 있어야 무엇이 오류였고, 어떻게 고쳐가야 할지 파악할 수 있어. 그렇게 점차 완성형으로 바꿔가는 최초의 기준점이 바로 사업계획서야.       준비물 2. 나침반(회사의 목표/미션/핵심가치 그리고 선행활동) 지도는 있는데 나침반이 없으면 우리가 어디에 있고, 어디로 가고 있는지 알 수 없듯이 계획대로 일이 만들어지려면, 그때 그때 점검할 수 있어야 하고, 때에 따라서는 유연성을 가지고 수정해야 하지. 그 능력은 리더에게 있어. 물론 큰 회사나 어느 정도 자리를 잡은 회사는 시스템 또는 조직이 수행하지만, 궁극적으로 선택과 결단을 내리는 점에서는 리더의 역량이 중요한 위치를 차지하지. 가장 먼저 창업을 한 목적과 회사가 달성하려는 목표가 명확해야 해. 그리고 미션, 핵심역량에 대한 충분한 고민이 필요해. 이것은 방향이야. 우리가 엘 도라도에 가려면 서쪽으로 가야 할 것인지, 동쪽으로 가야 할 것인지 정도는 알아야 항해를 하지. 그리고 설정된 방향으로 나아가기 위하여 나침반이 필요해. 경험에서 우러나올 수도 있고, 전문지식을 기준으로 삼기도 해. 사전 고객 조사, 해당 업종의 인프라나 전문가 멘토링을 통해 수시로 우리가 제대로 방향키를 잡고 있는지 확인할 수도 있어. 창업 전에 이러한 부분을 염두해서 미리 세팅을 해두면, 보다 효과적인 항해가 될 거야.     준비물 3. 항해사와 선원들(팀 빌딩) 정말 뛰어난 능력자라면, 1인 창업자라는 타이틀로 이 험난한 길을 헤쳐 나갈 수 있겠지만, 우리 중 대다수는 부족한 점이 많기에 서로 다른 능력의 조력자들 또는 팀원들이 필요하지. 사람은 아는 만큼 보인다고 해. 나 홀로 보는 범위와 시각보다 다수의 관점으로 바라보면, 미처 내가 생각하지 못하는 감추어진 부분들을 알아낼 수 있지. 단거리라면, 창업자만의 폭발적인 속도전으로 치고 나갈 수 있을 수도 있지만, 대부분의 사업은 장거리라 금방 지칠 수 있고, 한계에 빨리 도달할 거야.    그럼 어떤 기준으로 팀원들을 모을 수 있을까? 단지 친하니까, 쿵짝이 잘 맞는 사람들이라서 함께 역경을 이겨내기에는 불충분한 조건이야. 오히려 가까운 사이라서 더 상처받고, 실망하고, 할 말 못 하는 상황에서 등 돌리는 경우가 많거든. 때문에 우리는 몇 가지 고려할 사항들이 있어.       먼저, 사업에 필요한 사람인지가 중요해. 만약 IT 쪽의 사업이라면, 당연히 개발 능력이 있는 팀원이 있어야겠지. 셋이서 창업했는데 셋 다 기획자라던가, 어플(앱)을 만들겠다고 뭉쳤는데 개발자가 아무도 없다던가 하면 정상적이겠니?  상황에 따라서는 투자나 재무관리의 능력이나 마케팅에 탁월한 사람도 필요해. 여기는 동아리 모임이 아냐. 비록 작지만 회사라는 걸 늘 인지해야 해. “하하호호 우리는 행복해요~ 우리는 즐거워요~” 하는 식의 스타트업 놀이하다가 고꾸라지는 사례를 많이 보게 되지. 냉정하게 회사는 수익을 지향하는 집단이야. 목적을 위해 그에 상응하는 능력들을 갖춘 사람들이 모이는 게 효과적이야. 스타트업은 가볍게, 빠르게 가야 하는 조직이야. 그러려면, 디자이너인데 마케팅도 할 줄 아는 사람, 기획이면서 개발을 할 수 있는 사람, 재무를 보면서 영업을 할 수 있는 사람 등과 같이 기본적인 능력에 부가적인 업무 수행이 가능해야 해. 초기에는 한정된 인적자원이기에 영업이든, 기획이든, 마케팅이든 다 해내야 하거든.      두 번째로는 창업자와 다른 시각을 가진 사람이어야 하지. 마음 맞는 친구들과 창업하면 의사결정에 있어서 만장일치로 빠르게 결정이 될 수도 있지만, 다른 시각, 다른 관점에서 문제나 상황을 파악할 수 있어야 보다 정확한 결정을 이끌 수 있어. 무조건 창업자의 의견에 동조하는 사람들이 모여 있으면, 사방을 주의하면서 항해하는 것이 아니라 오로지 앞만 보고 돌진하는 항해가 될 거야. 여기서 중요한 점은 비관적이고 부정적인 사람 또는 무조건 반대를 외치는 사람을 찾으라는 게 아냐. 모두가 “예스”라고 말할 때, “노”라고 말할 수 있는 사람이 필요한 게 아니라, “왜?”라고 말할 수 있는 사람이 필요하단 말이야.       세 번째로, 배고픔을 아는 사람들이 필요해. 대표자만 절실함이 있다고 사업이 되는 건 아니거든. 동료들 역시 목적과 필요가 명확해야 해. 스타트업은 항상 불확실한 환경에서 고군분투 살아남아야 하는데 악조건에서도 포기하지 않는 끈기는 성공을 향한 갈망(배고픔)이어야 하지.     준비물 4. 배와 식량(공간과 자금) 다른 준비물에 비해서 가장 난감해하는 공간과 자금에 대한 이야기야. 창업을 하는 데 있어 사업자등록증을 낼 때, 지정된 공간이 필요해. 정보통신 분야(IT) 벤처기업 붐이 일어나던 시절에 SOHO(small office home office)라는 공간이 생겨났어. 쉽게 말해서 살고 있는 집 주소를 활용하거나 작은 사무실 하나 구해서 공간으로 활용하는 것인데 최근에는 코워킹 스페이스라는 형태로 공간은 많이 있어. 보증금이나 임대료/관리비 등에 큰 비용들이지 않고 일정기간을 창업공간으로 활용할 수 있지. 최근에는 디지털 노마드(Digital nomad)라고 꼭 장소에 국한되지 않는 업종이라면, 창업카페라던가 도서관에서 자리 잡기도 해.  자금이 필요한 이유는 굳이 하나하나 설명하지 않아도 체감하게 될 거야. 문제는 우리에게 충분한 자금이 없다는 거지. “자본금 없이 창업하는 노하우를 전수해 주겠다”라는 컨설팅업체들이 있는데, 현혹되지 말자. 사실 많은 자금 지원 제도가 있어 자금조달에 대한 이야기는 따로 이야기를 Keeping 해 두었어. 융자/투자/정부지원 등 자금의 종류가 워낙 다양하고 다 정리하기에는 분량이 꽤 많아서 따로 정리해서 좀 더 깊이 이야기하자. 어쨌든 초기에 자금이 적더라도 필요해. 우리 회사의 경우, 처음 법인 설립할 때, 100만 원으로 시작했어. 그리고 엄청 고생했지. 중간중간 필요한 자금을 자체 조달하며 증자하고, 투자 유치하고 이래저래 에피소드가 많이 생기더라고. 그래서, 가급적이면 초기 자본금을 좀 여유 있게 준비하라고 권하고 싶어. 창업하는 순간부터 움직이는 게 다 돈이고, 증빙이고, 기록이거든. 동료들의 열정에도 상한선이란 게 있어. 설령 모두 무급여로 시작했다 하더라도 교통비, 식비, 잡비 등 비용들을 자부담하게 하면, 빠르게 식어 버리는 게 열정과 비전이야. 회사라는 조직이 지속되기 위해서 규정이 있고, 관리가 있고, 지원이 있어야 하는데 아무리 초기 스타트업이라는 이름으로 시작하더라도 이 모든 걸 개개인에게 부담시키면, 시간이 흐를수록 갈등과 원망이 커지고 팀이 깨지게 되지. 이상과 꿈이 있는 선원들이 굶주리고, 살을 깎아 먹고 있으면, 선장에 대한 반란을 일으키듯이 말야.      여기까지 창업을 위해 가장 기본적으로 준비해야 하는 사항들을 나열해 보았어. 업종에 따라서는 인프라도 사전에 준비하고, 거래처도 미리 세팅하고, 할 수 있는 한 최대한 준비하는 것을 추천해. 아무리 준비를 잘 해도, 늘 부족하고, 아쉬운 것이 창업이야. 그 조차 준비 없이 창업을 하면, 우리는 세상 끝 낭떠러지를 만나게 될 거야. 조금이라도 더 성공 확률을 높이고, 보다 안전하며, 빠른 길로 항해하도록 창업자는 더욱 만반의 준비를 해야 한다구. 다들 준비되었으면, 모험을 해 볼까? 돛을 올려라~!                         (역주)* 코워킹 스페이스(co-working space): 예비창업자 또는 초기창업자들에게 공동으로 업무를 수행할 수 있도록 구성된 공간으로 오픈형 테이블, 개별 테이블(또는 개별 공간), 공용회의실 등이 구비되어 있는 형태의 창업공간. 정부나 지방자치단체에서 운영하는 무상 지원 공간과 저렴한 임대료/관리비로 제공되는 민간 코워킹 스페이스가 있으며, 일부는 투자자가 공간을 무상 또는 현물투자 형태로 지원하기도 한다.
조회수 1438

Humans of TODAIT : 전설의 전성윤을 만나다

‘Humans of TODAIT’의 두번째 주인공, 투데잇 안드로이드 개발자 전성윤을 만나봤습니다. 투데잇의 전설(★)이 된 그의 이야기를 함께 들어볼까요?(2016.08)✓ 전설윤, 그는 누구인가Q. 자기소개 부탁드려요.안녕하세요! 투데잇에서 안드로이드 개발자를 맡았던 전성윤입니다. 퇴사자 인터뷰를 하려니까 투데잇을 떠나는 게 정말 실감나네요. 작년 2015년 10월 경, ‘SW 마에스트로’ 과정에서 만난 분께서 대표님을 소개해주셨고, 좋은 인연으로 연결되어 투데잇과 함께 일하게 되었어요. 처음엔 안드로이드 개발자로 들어왔다가 지금은 안드로이드 개발 팀장직까지 맡고 있습니다. (당시 2016.08)Q. 투데잇을 떠나는 이유는 무엇인가요?사실 처음 입사할 때도 1년 정도 생각하고 있었어요. 일하다보니 투데잇이 너무 좋아져서 나가고 싶지 않았지만, 아무래도 군문제와 학교 복학 문제가 마음에 걸리더라고요. 그래서 여러 고민 끝에 할 수 없이 나가게 된 케이스예요. 결국 아쉽지만 이번 8월을 마지막으로 투데잇과 헤어지게 되었죠.Q. 별명이 전설윤이라고 하던데, 왜 전설이라고 불리는 건가요?저도 이번 인터뷰를 통해서 생각해보게 된 건데요. ‘전설’이라는 칭호가 지금은 한물 간 사람에게 붙는 것이 아닌가 싶어요. 다른 팀원분들이 들어오시게 되면서 자연스럽게 리즈시절이 지나게 되었죠. (웃음)다른 이유가 아니라, 혼자만 잘하는 것이 아닌 다 함께 잘하기 위해 애썼기 때문인 것 같아요. 업무에 있어 버려야 할 습관 같은 작업 처리 팁에 대해 새 팀원분들께 적극적으로 공유했고 적당한 선에서 체크해드렸어요. 7–8개월의 짬 덕분인지 기획 단계에서부터 개발 단계 때 준비할 것들이나 구현 방법들이 곧장 떠오르는 경지에 이르더라고요. 이런 점들이 다른 팀원분들이 좋은 퍼포먼스를 낼 수 있게 이끌어주는 역할을 했던 것 같아요. 또 그 분들도 잘 하는 방법에 대해 치열하게 고민했고 실제로도 다들 너무 잘해주셔서 결론적으로 이제는 혼자가 아닌 다 함께 잘하게 된 거죠.✓ 보안 전문가에서 투데잇 안드로이드 팀장으로 레벨 업!Q. 투데잇 안드로이드 팀장까지, 성윤님의 입사 초반부터 지금까지 업무 성장과정이 듣고 싶어요!입사 초기에는 솔직히 맘고생 많이 했어요. 내가 지금 당장 회사에 기여할 수 있는 점이 무엇일까 의욕적으로 많이 고민했지만, 그에 비해 개발 능력은 많이 떨어졌죠. 초기에는 무엇보다 제 개발 능력 수준에 대해 정확히 몰랐고 커뮤니케이션하는 방법이 미숙했던 것 같아요. 그 때마다 대표님, 개발팀장님께서 진심어린 피드백과 따끔한 조언을 계속 해주셔서 해결할 수 있었죠. 두 분의 노력덕분에 중반부터는 업무 처리 능력도 커뮤니케이션 능력도 많이 향상됐어요,이후에 본격적으로 개발자분들이 더 들어오고 협업이 시작되면서 1인 개발자에서 2인 개발자 체제로 바뀌게 되었고, 자연스럽게 그에 따른 새로운 이슈들이 생길 수 밖에 없었어요. 다른 개발자분들에게 업무 분담하고 리드하는 부분에서 어려움을 느꼈지만, 함께 잘 해결해나갈 수 있었죠 지금은 기획적인 틀을 잡고 누군가에게 일을 맡기고 내 일을 해내고 하는 여러 부분에서 팀장의 위치에서 역할을 잘 해내는 것 같아요. (웃음)Q. 그렇다면 특별히 힘들거나 어려웠던 일정은 무엇이 있었나요?되게 좋은 질문이에요! 전 개발자다보니까 이런 질문이 너무 좋네요. (웃음)구매페이지와 그룹 기능 작업이 좀 힘들었어요. 그 중에서도 프로버전 구매페이지 작업이 가장 힘들었는데요. 작업 자체가 힘들다기보다는 구매페이지에서 에러가 나면 유저의 신뢰도에 큰 영향을 주기 때문에 한치의 실수도 용납되지 않는 부분이라는 점이 부담이 됐죠. 처음엔 실수도 많았는데, 그 이후에 치밀하게 설계한 덕분에 두 번째부턴 버그가 터져도 바로 대처할 수 있었어요. 개인적으로 개발적으로 많이 성장한 느낌을 받았죠.그룹 기능 개발은 클라이언트 쪽에서 해결해야 하는 부분이 많아서 힘들었어요. 하지만 릴리즈 이후 유저분들이 격렬하게 환호해주신 덕분에 뿌듯하게 잘 마무리할 수 있었죠. 두 작업 다 힘들었지만, 굉장히 보람됐던 작업으로 기억에 남아요.Q. 유저들의 피드백을 보면서 얻은 게 많다고 하던데, 좀 더 말해주세요!“실제 유저와 소통하고 친근한 서비스를 제공하려고 노력하다보니 유저들의 피드백이 얼마나 소중한 건지 알게되더라구요.”투데잇을 다니기 전까지만 해도 저는 별 5개 짜리 리뷰가 당연하게 받아야할 칭찬이라고 생각했어요. 그래서 사실 크게 반응하지 않았었는데, 실제 유저와 소통하고 친근한 서비스를 제공하려고 노력하다보니 유저들의 피드백이 얼마나 소중한 건지 알게되더라구요. 당연히 좋은 피드백은 정말 힘이 많이 되었고, 좋지 않은 피드백도 굉장히 감사했어요. 사실 유저 입장에서 그냥 지워버리면 그만인건데, 우리 앱의 장점을 알아봐주시고, 개선할 점을 말해주시고 또 기다려주시는 거잖아요. 그런 유저분들 보면서 빨리 개선해드리고 싶단 생각이 들죠. 그 어떤 피드백보다 더 큰 동기부여가 되더라고요.✓ 투데잇 TALK“투데잇팀은 서로 부담없이 정말 효율적으로 커뮤니케이션을 해서 어떻게 하면 서로의 업무 컨텍스트를 빠르게 마무리할지 고민해요.”Q. 투데잇의 힘은 이거다!음 투데잇의 힘은 서로를 존중하고 커뮤니케이션을 중시하는 데에서 나오는 것 같아요. 결국 모든 문제의 결착점은 커뮤니케이션이거든요. 사소한 거라도 시기에 맞춰서 커뮤니케이션이 되어야 하는데, 개발팀과 비개발팀간의 커뮤니케이션이 사실 어렵잖아요. 하지만 투데잇팀은 서로 부담없이 정말 효율적으로 커뮤니케이션을 해서 어떻게 하면 서로의 업무 컨텍스트를 빠르게 마무리할지 고민해요. 누군가 못한 부분이 있더라도 절대 무시하지 않고, 서로의 업무를 존중하고 정식적으로 피드백을 공유하면서 문제를 잘 해결하기 위한 고민을 하죠.Q. 투데잇에서 제일 기억에 남는 순간이 있다면?투데잇에서는 많이 힘들었을 때부터 행복했을 때 그리고 소소한 일상들까지 전부 다 기억에 남아요. 워크샵이라고 가평에 가서 일한 적이 있었는데, 정말 놀지도 못하고 거의 일만했거든요. 근데 밖에 나와서 그런지 그 자체가 너무 재밌었어요. 일하면서도 되게 색다르고 즐거웠죠. (웃음) 제주도로 워크샵 갔을 때도 너무 재미있었고, 정말 매일 매순간이 기억에 남아요. 팀 분위기가 너무 좋아서 그런지 특별한 일들 뿐만 아니라 개발팀 회의할 때나 회사 메신저에서 웃고 떠들고 했던 것들처럼 아주 소소한 일상들까지 모두 에피소드였던 것 같아요. 깜짝 생일파티도 그렇고 되게 예정없이 나온 에피소드가 많았거 든요. 그런게 진짜 참된 에피소드 아닐까요?✓ 마지막으로…Q. 애정이 컸던 만큼 투데잇을 떠나기 많이 아쉬울 것 같아요.네 많이 아쉽죠. 전 투데잇에서 10개월 동안 정말 하루종일 개발만 했어요. 일 하는 게 너무 좋아서 거의 자취하다시피 야근도 매일 했었거든요. 좋아하는 사람과 좋은 분위기에서 재밌게 일하기도 했고, 또 어떤 목표를 이루기 위해 정말 치열하게 고민하고 일할 수 있었는데 이 부분들을 더이상 느끼지 못한다는 점이 많이 아쉬워요.음 아쉬운 사건을 말하라면, 맨 처음으로 앱 안에 코틀린을 적용해볼 때 너무 시간을 오래 끌었던 일이 있었어요. 잘 적용시킬 방법에 대해 혼자 고민하고 정리해보다가 늦어졌었는데, 다른 분들 일정에 피해를 준데다가 실수도 한두개가 아니었거든요. 그 때 제가 계획대로 잘 처리했으면 마케팅적으로나 여러 시도들을 해볼 수 있지 않았을까?하는 아쉬움이 들죠. 결국 개발자가 세운 일정에서 해내는 여부에 따라 회사에 큰 영향이 가고, 다른 팀에도 막대한 영향이 갈 수 있다는 걸 뼈저리게 깨달았어요. 그래도 이 사건 덕분에 업무적으로도 많이 성장할 수 있었던 것 같아요. 몸소 당해봤으니 그럴 수 밖에 없죠. (웃음)Q. 투데잇을 떠나며 마지막으로 하고 싶은 말이 있다면?“충분히 치열하게 일했고 다함께 즐겁게 소통하면서 일했기 때문에 언젠가 또 다시 만나지 않을까 싶어요.”개인적으로 아쉬운 점은 있지만, 충분히 치열하게 일했고 다함께 즐겁게 소통하면서 일했기 때문에 언젠가 또 다시 만나지 않을까 싶어요. 모든 투데잇 사람들과 연을 이어가고 싶기도 하고 특히 대표님께 보답하고 싶다는 마음이 크거든요. 처음 들어갔을 때, 아무 준비 안 돼있는 상태였던 절 믿어주시고 함께 일할 수 있는 기회를 주셨어요. 앞서 말한 것처럼 일하면서 초반에 실수도 많이 했는데 꾸준히 믿고 지금의 포지션까지 저를 밀어주셨다는 점이 너무 감사하거든요. 대표님께 보답하자! 투데잇에 보답하자!가 마지막으로 하고 싶은 말이에요. 저 나가더라도 아는 척해주셔야 해요..!Q. 투데잇을 꿈꾸는 개발자에게 한마디!음 투데잇에 들어오는 건 어쩌면 쉬울 수도 있어요. 저 같은 경우 30분 정도 면접을 보고 당일에 바로 함께하기로 했거든요. 하지만 중요한 건 본인이 ‘함께 성장하고 싶은 사람’인가?에 대해 생각해보셔야 해요. 또 투데잇과 방향성이 맞는지 스스로 생각해보고, 성장하기 위해선 어떤 태세를 취해야 하는지 고민해보아야 하죠. 만약 이런 성향이 맞지 않는 사람이라면 아마 들어오시더라도 투데잇과 잘 맞지 않아서 힘들 수도 있거든요. 투데잇에 들어오고 싶은 분들은 이런 부분들에 대해 한 번 깊게 고민해보셨으면 좋겠어요.#투데잇 #팀원소개 #팀원인터뷰 #팀원자랑 #기업문화 #조직문화 #개발자 #개발팀
조회수 767

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

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

기업문화 엿볼 때, 더팀스

로그인

/