토요일, 3월 25, 2017

[B급 프로그래머] 3월 4주 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: Q. 그림은 2차 세계 대전에서 작전 수행 후 귀환한 폭격기들의 피탄 장소를 나타낸 것이다. 이 그림을 보고 폭격기의 방어력을 증가시킬 부분은 어디인가? A. 피탄 흔적이 하나도 없는 곳. 그 곳을 공격당한 폭격기는 귀환하지 못한 것이니까 via @zpdldlfrkwl)
  1. 빅데이터/인공지능
  2. 읽을거리
(마무리 짤방: via @Princessofwifi)
EOF

토요일, 3월 18, 2017

[B급 프로그래머] 3월 3주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: Every functional programming tutorial... via @iamdevloper)
  1. 개발/관리도구 부문
  2. 고성능 서버/데이터베이스 부문
(마무리 짤방: 맥도널드 감자 튀김의 위력 via @kin29t) EOB

[독서광] 도미노 : 변화를 불러일으키는 가장 간단한 방법

변화는 늘 어렵다. 매몰비용으로 인한 저항감은 차치하고서라도 편한 안식처를 버리고 새로운 뭔가를 찾아나선다는 느낌이 편한 사람은 많지 않을 것이다. 하지만 변화가 없다면 생존도 어렵다. 우리 주위를 둘러싼 세상은 늘 바뀌는 중이고, 생각보다 훨씬 더 빨리 바뀌기 때문이다. 그렇다면 변화를 유도하는 효과적인 방법은 없을까? 오늘 소개하는 '도미노'는 바로 리더 입장에서 변화를 불러일으키는 전략을 다룬다.

책 목차를 보면 1부와 2부가 바로 눈에 띌 것이다. 1부는 관성과 저항을 넘어서 변화를 유도하는 법(즉, 도미노 쓰러뜨리기), 2부는 변화에 친숙한 조직을 만드는 법(즉, 도미노 유지하기)를 소개한다. 실제 변화를 일으켜보며 이 과정에서 발생하는 여러 상황에 맞서 탄력 회복성을 갖춰 경쟁력있는 조직과 개인으로 거듭나자는 일반적인(응?) 주제를 어떻게 요리하는지가 이 책의 주요 관전 포인트라 볼 수 있겠다.

1부에서는 사고의 전환을 요구한다. 안 그래도 처리해야 할 사안이 많은 상황에서 변화를 위한 필수 사안을 곁다리로 추가하는 대신에 생존을 위한 결정을 주문한다. 스스로 변화를 유도할 능력이 있다고 믿는지 아니면 일어나는 변화를 수동적으로 받아들일지에 대한 태도를 운전자와 승객의 차이를 비유로 들면서 설명한다. 여러분들도 다음 질문에 답해보시라.

  1. 인생에서 원하는 성공을 얻을 자신이 있다.
  2. 가끔 우울하다.
  3. 시도하면 보통 성공한다.
  4. 가끔 실패하면 내가 가치 없게 느껴진다.
  5. 맡은 일은 완벽하게 끝낸다.
  6. 가끔 일이 뜻대로 되지 않는 것을 느낀다.
  7. 전반적으로 나 자신에 만족한다.
  8. 내가 능력이 있는지 의심스럽다.
  9. 내 인생은 내가 결정한다.
  10. 직업에서의 성공은 내 의지가 아니라고 느낀다.
  11. 내 문제의 대부분을 해결할 능력이 있다.
  12. 매사가 엉망이고 희망이 없어 보일 때가 있다.

위 질문지의 항목을 계산해서 점수를 냈다면 실제로 항목별로 어떤 일을 했는지를 생각하는 단계가 남아 있다. 운전자처럼 생각하면서 승객처럼 행동하면 오히려 독이 된다. 다음 질문을 생각해보자.

  • 불평하기보다는 결정을 했는가?
  • 남을 탓하느라 바빴는가? 아니면 대담하게 행동에 나섰는가?
  • 피드백을 구했는가, 아니면 비판을 피해 숨어 다녔는가?

결국 핵심은 올바르고 이성적인 결정과 행동이다!

2부에서는 변화에 대응하는 5단계 솔루션(ADPAT라고 불리는)을 중심으로 전개된다.

  1. 일어날 변화를 예측한다(Anticipate)
  2. 어느 방향으로 갈지 결정한다(Decide)
  3. 당신과 함께 팀이 이를 변화에 방향성을 부여한다(Align)
  4. 팀원에게 그 방향을 추진하도록 허가한다(Permit)
  5. 결정이 현실에 부합하는지 주기적으로 테스트한다(Test)

Anticipate: 변화 예측을 위해서는 정말 가장 중요한 것이 무엇인지 파악해서 단 한 가지 목표 설정으로 좁혀 나가는 기술이 중요하다. 우선순위(priority)는 1940년대까지 복수로 사용되는 경우가 드물었다는 사실을 기억하기 바란다.

Decide: 결정을 위해서는 맥을 짚고(정말 무엇이 중요한가!), 정반대 사람을 찾아 조언을 구하고, 정말 힘들지만 행동으로 보여주는 3단계가 핵심이다. 나쁜 일이 일어나도 포기하지 않고 제대로 대응할 수 있다는 자신감으로 한 번에 결정을 하나씩 할 수 있다는 믿음이 핵심이다.

Align: 90일 동안 우선 순위 세 가지를 정해 이를 집중적으로 수행하는 방법으로 팀원들의 주의를 분산시키지 않고 한 방향으로 움직이게 만든다. 야근과 특근과 매일같은 전력질주는 생산성을 높일지는 모르겠지만 정말 중요한 일을 수행하는 과정에서 오히려 장애물로 작용한다. 생산성은 일의 완료에 관한 지표다. 하지만 필요한 일은 하고 그렇지 않은 일은 미루는 전략이 아주 중요하다.

Permit: 자신에 대한 허가가 가장 어렵다. 급한 전화를 처리하고 하던 프로젝트를 마무리 짓고, 새로운 아이디어를 실천하고 싶더라도 최우선순위에만 집중하도록 스스로에게 허가하는 것은 가장 까다롭기 마련이다. 이럴 때 우선순위가 큰 도움을 준다. 아침에 우선순위 목록을 점검하면서 스스로에게 뭐가 중요한지를 깨닫게 만드는 방법은 이 책에서 얻을 수 있는 가장 중요한 교훈 중 하나다.

Test: 뭔가 결정을 내리고 나서 상황이 바뀐다는 사실을 인지했더라도 결정을 변경하기란 쉽지 않다. 팀원들은 "내 이럴 줄 알았지"라고 반발할 것이며, 특히 큰 조직의 경우에는 방향을 전환하기 위해 엄청난 시간을 다시 투입해야 하기 때문이다 이럴 때 우선 순위 다음으로 정리된 대기 목록을 제대로 유지하고 있다면 큰 도움이 된다. 그냥 최우선 순위 항목과 대기 항목을 바꾸고 하던 대로 계속 진행하면 된다. 상위 리더에게 기민성으로 느껴지는 것이 보통 다른 사람들에게는 변덕으로 느껴지는 문제나 사람들의 '동의'에 집중하느라 변화의 가능성을 닫아버리는 문제를 해결하기 위해서는 늘 변화의 가능성에 대해 열어두고 사람들에게 목표가 바뀔 가능성이 있다는 사실을 인지시켜야 한다.

결론: 변화를 추구하다 큰 실패에 눈물을 흘린 분들께 강력 추천한다.

EOB

수요일, 3월 15, 2017

[B급 프로그래머] 3월 2주 소식(빅데이터/인공지능, 읽을거리 부문)

(오늘의 짤방: five key phases of software development via ‏@mi_ku)

금주는 분량 조절 관계로 인해 오늘 나머지 부문에 대한 글을 올려드린다. 내주부터는 격주로 번갈아 가면서 소식을 전할 예정이므로 참고하시면 좋겠다. 독서광은 격주 토요일 오전에 올려드릴 예정이다.

  1. 빅데이터/인공지능
  2. 읽을거리
(보너스: '리더는 마지막에 먹는다' via @estima7)
EOB

토요일, 3월 11, 2017

[B급 프로그래머] 3월 2주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: "Learning to code is an essential skill in the modern world. Here's a handy diagram showing you how to get started." via @dylanbeattie)

금주부터 독자 여러분들을 위해 정리해오던 소식 글의 형태를 변경하기로 했다. 정리하는 데도 시간이 많이 걸리고 읽는 분들도 멘붕(!) 수준에 이를 정도로 양이 늘어나고 있기 때문이다. 격주로 절반씩 부문별 소식을 나눠 전해드기로 하겠다. 이렇게 해도 길다는 느낌이 든다면 4개로 나눌 생각도 있으므로 독자 여러분들께서 의견을 댓글로 달아주시기 바란다.

  1. 개발/관리도구 부문
  2. 고성능 서버/데이터베이스 부문
EOB

[독서광] 마이크로서비스 아키텍처 구축

어쩌다 보니 최근 기술 서적에 대한 독후감을 거의 적지 못했는데, 오늘은 감수 요청을 받고 미리 읽은 독자로서 '마이크로서비스 아키텍처 구축'에 대해 간단한 서평을 남기려 한다. 책에 실린 '추천의 글'을 옮겨온다.

최근 클라우드 환경이 일반화되면서 많은 서비스가 클라우드로 이전하거나 클라우드에서 시작되고 있다. 하지만 클라우드의 확장성과 안정성은 공짜로 얻어지는 산물이 아니다. 기존의 일반적인 애플리케이션 개발 방법을 그대로 적용할 경우 비용절감, 탄력성, 회복성, 배포 편의성과 같은 좋은 특성을 누리기 어렵고 어떤 경우에 있어서는 오히려 서비스의 품질이 떨어지게 된다. 빠르게 변하는 클라우드 시대에 걸맞게 아키텍처 설계, 서비스 모델링, 실제 구현, 통합, 배포, 테스트, 모니터링, 확장에 전력을 다해야 비로소 고객 만족을 극대화하는 서비스를 제공할 수 있다. 이 책은 거대한 모놀리틱 시스템과 반대되는 마이크로서비스를 중심으로 클라우드 시대의 생존 방법을 제시하며 실제 사례를 중심으로 실무에 바로 도움이 되는 내용을 담았ㄷ. 따라서 아키텍처 설계, 실제 구현, 운영 업무를 진행하는 과정에서 많은 도움을 줄 것이다. 미시적인 컴퓨터 프로그래밍 부문에서 리펙토링이 기술 부채를 줄이는 수단이라면 거시적인 서비스 개발과 운영 부문에서는 마이크로서비스가 기술 부채를 줄이는 강력한 수단이다. 이 책은 현대적인 컴퓨팅 환경에 적응하기 위한 좋은 길라잡이가 될 것이다.

마이크로서비스의 정의는 마틴 파울러의 글에 나오듯이 독립적으로 배포 가능한 서비스들의 슈트로서 소프트웨어 애플리케이션을 설계하는 아키텍처 스타일을 일컫는다. 여기서 핵심은 바로 '독립적으로 배포 가능한'이라는 문구다. 모든 서비스를 한 통에 담은 기존의 방식과는 달리 응집력을 높이고 결합도를 떨어뜨리기 위해 서비스를 분할하고 이를 사용(use)하는 방식으로 단일 애플리케이션을 만든다. 이렇게 되면 변경의 범위가 적어지므로 자주 빠르게 서비스를 변경하고 확장할 수 있게 된다.

기본에 서비스를 만들 때는 3계층 구조(브라우저 UI-웹 서버-데이터베이스 관리 시스템)에 맞춰 거대한 실행 가능 단위로 구현하고 배포하는 방법을 사용했다. 아무리 사소한 변경이 있더라도 전체를 새로 배포해야 한다. 물론 어카이빙 형태로 배포하지 않고 단위 클래스 파일이나 공유 라이브러리 파일 단위로 배포하는 방법도 생각할 수 있지만 버전 관리 등을 고려하면 나중에 꼬이는 상황이 발생하기 마련이다. 게다가 클라우드 환경이 일반화되면서 작은 가상 기계나 컨테이너 단위로 애플리케이션을 배포할 수 있는 수평 확장 아키텍처가 인기를 끌고 있기 때문에 거대한 모놀리틱 개발 방식이 점점 시대에 뒤쳐지고 있다. 그렇다면 이런 상황에서 우리는 어떻게 대응해야 하나? 마이크로서비스는 _마이크로_라는 이름과는 달리 생각처럼 단순하지 않으므로 알아야 할 내용도 많고 피해야 할 함정도 많기 때문에 시행착오를 줄이려면 기초를 튼튼히 쌓고 접근할 필요가 있다.

'마이크로서비스 아키텍처 구축'은 거대한 시스템을 리펙터링해서 작은 단위로 쪼개고 이를 효과적으로 연결하는 아키텍처 설계 방법을 다룬다. 마이크로서비스 개념부터 시작해서 진화적 아키텍트를 소개하며 서비스 모델링 기법, 이상적인 통합 방법, 모놀리스 분해 방법, 배포 방법, 테스팅 방법, 모니터링 방법, 보안 강화, 콘에이의 법칙과 시스템 설계 방법을 설명한 다음에 대규모 마이크로서비스 고려 사항으로 마무리한다. 개념과 방법을 소개하며, 여러 가지 실제 사례를 제시하므로 마이크로서비스에 도전하기 전에 읽어두면 여러 면에서 이득을 얻을 것이다.

본문 구성이 어떤지는 미리 보기를 참조하기 바라며, 슬라이드셰어에 올라온 다음 발표 자료도 함께 읽어보기 바란다.

결론: 아키텍처 관점에서 마이크로서비스가 궁금한 개발자분들께 추천!

EOB

토요일, 3월 04, 2017

[독서광] 하버드는 어떻게 최고의 협상을 하는가

오늘은 협상에 관련된 책을 하나 소개해드리겠다. '하버드는 어덯게 최고의 협상을 하는가'라는 다소 낚시성인 제목이 달렸긴 하지만, 원서 제목인 "Getting to Yes with Yourself"에서 잘 드러나듯 외부적인 변화를 이끌기 위해 말과 논리를 중심으로 하는 협상이 아니라 자신의 내면을 먼저 바꾼 다음에 외부를 바꾸는 협상 방법을 소개하고 있다는 점에서 기존 서적과 차별화를 꾀한다.

우선 책을 소개하는 간단한 동영상을 살펴보자.

동영상에 나오듯이 "우리가 원하는 바를 방해하는 가장 큰 장애물은 여기 안에 있습니다. 바로 우리 자신이죠."라는 문구가 이 책의 핵심이다. 타인이 아닌 내면으로부터 예스를 끌어내기 위한 방법 6가지를 중심으로 이 책은 우리가 자신이 원하는 바를 정확하게 파악하고 이를 지렛대로 삼아서 남들이 원하는 바도 파악해내게 도와준다. 가장 강력한 방해꾼인 나 자신을 상기하면서 다음과 같은 6단계를 항상 되새김질하면 도움이 될 것 같다.

  1. 자신의 입장에서 생각하라. 직장에서 자신의 생각과 감정 상태를 심판하지 않고 관찰하는 내부 피평가를 알아낼 수 있는가? 자신의 감정이 향하는 마음속에 있는 욕구는 무엇인가? 진정으로 자신이 원하는 것은 무엇인가?
  2. 자신의 내적 배트나(BATNA)를 개발하라. 자신의 요구사항이 받아들여지지 않으면 누군가 혹은 무엇인가를 원망하는가? 원망함으로써 얻어지는 이익은 무엇인가? 또 손실은 무엇인가? 어떠한 경우라도 자신의 간절한 요구를 잘 이행할 수 있는가?
  3. 자신의 시각을 재설정하라. 인생이 자신에게 맞서고 있다고 느껴지는가? 오늘 어떻게 자신을 행복하게 만들 것인가? 인생이 역경임에도 불구하고 있는 그대로 예스를 선택할 수 있는가?
  4. 현실에 머무르라. 과거에 대한 원망이나 미래에 대한 걱정을 가지고 있는가? 무엇으로 그것을 떨쳐내고 지금 인생이 놓여 있는 그 자체로 받아들일 수 있는가? 현재에 머무르기 위해 자신이 할 수 있는 작은 한 걸음은 무엇이며, 어디가 자신에게 최고의 장소인가?
  5. 그럼에도 존중하라. 누군가를 향한 적개심을 느끼고 있는가? 그들의 입장이라면 어떨까? 상대방이 존중하는 태도를 보이지 않아도 여전히 그들에게 예의를 표할 수 있는가?
  6. 베풀기와 되돌려 받기. 자신이 처한 상황에서 결핍의 두려움을 느끼고 있는가? 빼잇는 것에서 배푸는 것으로, 윈-루즈에서 윈-윈-윈으로 자신의 태도를 변화시키는 것은 무엇인가?

본문 중에서 좋은 내용을 몇 가지 정리해보았다.

당신 자신이나 상대방이 극도의 스트레스를 받는 협상이나 대립 상태에 있다면, 당신은 사람들이 얼마나 쉽게 타인의 말이나 말투 또는 행동에 즉각적으로 반응하는지 알아차릴 수 있을 것이다. 실질적으로 내가 중재했던 모든 분쟁들은, 그것이 부부싸움이건 사무실에서의 실랑이건 아니면 한 국가의 내전이건, 말투나 행동에 대한 즉각적인 반응들은 꼬리에 꼬리를 무는 모습으로 나타났다. “왜 그를 공격했나요?”, “그가 날 공격했기 때문이에요.” 이런 식으로 계속 된다.
우리가 즉각적으로 반응할 때는 대게 소위 ‘3A라는 함정’에 빠진다. 3A 함정은 ‘공격attack’하거나, ‘수용accommodate’ 하거나 아니면 ‘회피avoid’하는 것이다. 이 모두는 문제를 더 크게 만들뿐이다. 간혹 이 세 가지 방법을 혼합해 사용하기도 한다. 처음에는 회피하거나 받아들이는데, 얼마 못 가 더 이상 참을 수 없을 때는 공격하는 것이다. 맞불작전에 놓이면 우리는 다시 회피하거나 수용하게 된다. 이 공통된 세 가지 반응 중 그 어떤 것도 우리의 이해를 돕지 못한다. “눈에는 눈”이라는 식으로 대응하면 우리의 사고능력을 혼미하게 만들어 판단이 흐려진다.
내 협상 경험을 보면 대부분의 사람들은 자신의 입장을 잘 알고 있다. “나는 15퍼센트 임금인상을 원합니다.” 그러나 대게의 사람들은 자신의 내재된 요구사항이나 욕심, 걱정, 두려움 또는 포부 같은 본인의 관심사는 별로 깊게 생각하지 않는다. 임금인상을 요구하는 것이 그들이 협상에 흥미가 있는 것인지, 형평성 때문인지 또는 경력개발을 위해서인지, 혹은 물질적인 충족을 위한 것인지 아니면 이 모두 다를 위한 것인지 하는 것이다.
협상에서 당신의 관심분야와 요구사항을 표출할 수 있는 마법의 질문은 “왜Why”, 즉 “왜 나는 이것을 원하는가?”이다. 한 가지 중요한 훈련으로, 필요하다면 수차례 자신에게 왜냐고 계속 물어보는 것이다. 당신의 저 밑바닥에 있는 요구들에 닿을 때까지 말이다. 당신에게 내재되어 있던 욕망과 관심들에 더 깊이 닿을수록 당신의 관심분야를 충족할 만한 기발한 선택사항들을 생각해낼 수 있다. 예를 들어 임금인상의 경우에 당신이 협상에 관심이 있다면 설령 예산 부족으로 상사가 당신이 원하는 만큼의 인상치를 올려주지 못해도 어쩌면 새로운 직급을 얻거나 특별업무를 맡을 수 있게 협상해볼 수 있다. 관심을 드러내기가 당신이 미처 생각해보지 못한 새로운 가능성을 열어주는 것이다.
《YES를 이끌어내는 협상법》을 집필하며 나와 로저 피셔는 협상에서 가장 큰 동력은 자신의 배트나BATNA(협상 난항 시 선택할 수 있는 최상의 대안)인 것에 대해 논쟁을 했다. 당신의 배트나BATNA란, 상대방과 원만한 합의를 이루지 못했을 때 당신의 관심사를 만족시킬 수 있는 최상의 대안이다. 예를 들어 새로운 직업 제안을 협상하고 있다면 최고의 차선책은 다른 일자리도 찾아보는 것이다. 계약적 분쟁의 경우에는 협상을 위한 최고의 차선책은 중재자의 도움을 받거나 법정소송을 하는 것이다. 자동차 판매상과의 가격 합의를 이룰 수 없으면 다른 판매자를 찾으면 된다. 협상과정에 어떤 상황이 발생한다 하더라도 당신의 배트나BATNA가 또 다른 차선책이 있다는 자신감을 주는 것이다. 이렇게 하는 것이 당신의 요구사항을 만족시키기 위해 상대방에게 좀 덜 의지하게 만든다. 더불어 자유로움, 활력, 자신감을 주는 것이다.

결론: 뚜껑을 열고 보니 명상(응???)을 다루는 내용으로 느껴질 위험성으로 인해 호불호가 크게 갈릴 수 있는 책이지만, 인생이라는 게임에서 승리하기 위해서는 나부터 본질적으로 바뀌어야 한다는 점을 제대로 지적하고 있다는 점에서 나름 좋은 협상 서적으로 분류한다. 추천!

EOB