토요일, 6월 06, 2015

[B급 프로그래머] 6월 1주 소식

요즘 너무 바빠져서 격주로 블로그를 운영하는 상황이므로 재미있는 읽을거리를 찾는 독자 여러분들께 각별한 양해 부탁드리겠다. 하지만 소식 정리는 가급적 건너뛰지 않게 노력할 계획이다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 5월 23, 2015

[B급 프로그래머] 5월 3주 소식

금주는 상당히 많은 소식을 정리해보았다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 5월 09, 2015

[B급 프로그래머] 대규모 서버 소프트웨어에서 작업하는 동안 배운 교훈

지난번에 전해드린 소식 가운데, Lessons Learned while Working on Large-Scale Server Software이라는 블로그 글이 있었는데, 독자 여러분을 위해 간략하게 정리해드리겠다.

  1. 최악에 대한 계획을 세워라. 데이터베이스가 모두 내려가버리면 어떻게 되나? 모든 데이터가 다 날아가버리면 어떻게 되나? 시스템이 어떻게 실패하는지 이해하지 못하면 시스템이 어떻게 동작하는지도 이해하지 못한다.
  2. CAP 이론은 진짜다. 나쁜 일이 일어나는 목록이 아니라 중요한 결정을 내리게 강제하는 이론이다. 독배를 들었으면, 여기에 집중하라.
  3. 분산 컴퓨팅에 대한 오해는 진짜다. 네트워크는 빌어먹을 녀석이고, 대기 시간은 예측 불가능이고, 대역폭은 돈이 많이 들고 제약이 있고, 사람들은 당신의 네트워크에 침투하고, 구성 요소들은 이리저리 옮겨 다니고, 여러 팀과 회사가 시스템의 다양한 부분을 책임지고, 장비, 프로토콜, 직렬화 포맷은 엄청나게 다양하고... 시스템을 분산시켜야 한다면 다시 한번 생각하라. 어렵다.
  4. 역압이냐 평균 분배냐? 둘 중 하나를 골라라. Queues Don't Fix Overload를 보시오!
  5. 디버깅은 과학이다. 문제를 찾아 수정하는 과정에서 가설을 새우고 검증하라.
  6. 포스텔의 법칙은 어렵다. "전송할 때는 보수적으로, 받아들일 때는 자유롭게" 다시 말해, "좋은 데이터를 보내고, 쓰레기를 받을 준비를 하라"! 최대한 엄격하게 구현을 시작하라. 명세를 엄걱하게 구현하고 아무 것도 망가뜨리지 않게 만들어라.
  7. 네트워크를 신뢰하지 마라. 네트워크는 당신의 감정에 대해 신경 쓰지 않으며 당신의 신뢰에 보답하지도 않는다. 운영체제는 지역 컴퓨터를 벗어나 맺어진 연결에 대해 지역적으로 맺어진 연결과는 다르게 반응한다. 네트워크는 필요악이며, 즐거움을 찾을 장소는 아니다.
  8. 브루루스시스템 너마저! 가장 신뢰하는 기반 구조는 궁극적으로 가장 아픈 곳이 된다(B급 프로그래머 생각: 주키퍼야 미안하다. ㅋㅋ). 누군가 이런 기반 구조를 너무나도 신뢰하면 곧 당신(또는 다른) 팀에 마법이 된다. 모든 사람은 건드리지 않고서 여기에 신뢰하는 방식을 배움에 따라, 압력 하에서 썩고 고통 받기 시작한다. 결국 기존 시스템과 중요한 시스템의 특성을 모두 갖춘 구성 요소에 대해 어렵게 확장하는 작업을 벌여야 한다. 시스템의 성공은 운영자에 달려 있다. 충분한 연습이 없다면 시스템의 가장 취약한 부분이 된다.
  9. 빨리 죽이고 자주 죽이자. 오류 처리 방법에 대해 확신이 없으면, 죽여보자. 시끄럽고 빠르게 등장하는 오류는 찾기도 쉽고 수정도 쉽다. 수 일, 수 주, 수 달에 걸쳐 느릿느릿 시스템을 천천히 죽이는 오류는 진짜로 고통스럽다.
  10. 버그 수정은 실패를 초래한다. 새로운 소프트웨어 설치와 배포는 시스템에 있어 새로운 변수를 도입하는 훌륭한 수단이 된다. 배포가 커지면 더욱 무시무시해진다. 배포하고 나서 아무 문제가 없으면 두려워해야 한다. 우리 모두 실수를 하므로, 모든 것이 너무나도 조용하게 잘 돌아가면 나중에 문제를 감지하기까지 시간이 오래 걸릴 수도 있다는 사실을 암시할지도 모른다.
  11. 오래 시스템을 돌리야 그 때서야 버그가 나타날지도 모른다. 지속적인 개발은 오늘날 정도의 차이는 있지만 표준 관례다. 노드를 자주 재시작하면, 나타나기 전까지 오래 걸리는 이상한 동작, 손상, 확률이 낮은 이벤트가 숨겨진 채로 남을 것이다. (B급 프로그래머 생각: 상용 시스템에서도 이런 문제가 종종(응?) 등장하곤 한다. Boeing 787 software bug can shut down planes' generators IN FLIGHT를 참조하라!)
  12. 완전한 재시작을 준비하자. 부하가 걸렸을 때 백지 상태에서 전체 시스템을 재시작할 준비를 하자.
  13. 전역 변수 뿐만 아니라 전역 상태에 신경써라. 대규모 시스템, 특히 기존에 존재하는 시스템을 리펙터링할 경우, 문제 투성이가 될 수 밖에 없는 이유는 똑똑하고 산만한 양 쪽 사람들이 여러 가지 결정을 내렸고, 그 결과 모든 사람이 의지할 여러 부분을 눈에 보이지 않게 붙여놓았기 때문이다.
  14. 이게 모두 사람 때문이다. 시스템은 사람에 의해 죽고 산다. 시스템을 계속해서 살아있게 만들고, 운영하고 이상하다는 사실을 잽싸게 눈치채는 방법을 배우기 위해 힘들게 배운 교훈은 바로 개발에 시간이 걸리며 이 과정에서 사람이 개입한다는 사실이다. 이런 유형의 지식은 일반적으로 개발한 팀 내부에 남아 있고 개인이 역할을 떠나거나 바꿀 때 사라지는 경향이 있다. 새로운 팀원이 팀에 합류하면, 비공식적으로 이런 지식이 전달된다(우연한 시물레이션, 코드 검토, 기타 방법). 하지만 결코 영속적인 방식으로 진행되는 않는다. 영속적인 정보를 구축하고 전달하는 방식은 아주 중요하다. 시스템을 구축할 때, 운영자가 올바로 일을 처리할 것으로 가정하면 안 된다. 사람으로 인한 실패를 예상하라. 실수를 회복할 수 있는 도구에 대해 생각하려고 노력하라.

그냥 일반적인 좋은 이야기를 늘어놓은 것이 아니다. 원문을 읽어가면서 차분하게 검토해보기 바란다.

EOB

화요일, 5월 05, 2015

[B급 프로그래머] 5월 1주 소식

달콤했던 연휴도 다 끝나가므로, 5월 첫 주 소식을 정리해보았다.

  1. 웹/앱 소식
  2. 개발/관리 도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 5월 02, 2015

[B급 프로그래머] (Quora) 소프트웨어 개발자에게 자격증이 가치가 있을까?

Quora를 읽다보니 Are certifications for software engineers worth it?라는 글이 있어 독자 여러분들께 소개한다.

자격증은 가치가 있을지도 모르고 없을지도 모른다. 당신이 어디에 지원하느냐에 따라 달라진다.

마이크로소프트, 구글, 아마존과 같은 '엘리트' 소프트웨어 회사들은 일반적으로 소프트웨어 개발자를 위한 자격증에 중립적이지 않다. 실제로 부정적이다. 바로 그렇다. 당신이 자격증을 땄고 이들 회사 중 하나에 지원한다면, 이력서에 자격증 목록을 올리지마라.

이유는 자격증은 어느 정도 지식이 있음을 보여주긴 하지만, 엘리트 회사들이 원하는 핵심이 아니기 때문이다. 엘리트 회사들은 당신이 무엇을 아는지 실제로 관심이 없다. 엘리트 회사들은 만일 당신이 똑똑하고 전산 기초를 알고 있다면, 당신은 부족한 지식이 무엇이든 배을 수 있을 것이라 가정한다. 하지만 자격증은 당신이 실제 기술을 개선하는 대신 지식에 대해 신경쓰고 있음을 암시한다.

하지만 더 중요하게, 자격증을 따는 유형의 사람들은 공학도의 올바른 자질이 없을 가능성이 높다. 예를 들어, 나는 결코 자격증을 딸 생각이 없었고, 이들 회사에서 알고 있는 개발자 중 누구도 자격증을 딸 생각이 없었다. 만일 더 많이 배우고 싶다면, 코세라에서 강의를 듣거나 내가 직접 만드는 쪽에 집중할 것이다. 나는 심지어 탑 코더에도 참여해 이력서에 점수를 올릴지도 모른다. 나는 내가 자바 지식을 알고 있음을 보여줄 수 있기 위해 자바 지식을 기억하려고는 애쓰지 않을 것이다. 이렇게 하지 않는 이유는 기억에 신경쓰는 회사를 위한 직원으로 남고 싶지 않기 때문이다.

동일한 주장은 대다수 실리콘벨리 스타트업 대다수에도 적용될 수 있다. 스타트업에서는 자격증을 낮춰 본다.

어느 누구도 자격증에 대해 신경쓰지 않아야 한다는 사실을 의미하는가? 정확히 그렇지는 않다. 몇몇은 신경써야 한다. 특히 비기술 회사에서는 종종 자격증에 신경을 쓴다. 이들은 자바로 뭔가 만들어본 훌륭한 소프트웨어 개발자들 보다는 자바 2를 할 줄 안다는 지원자들에 끌리는 유형의 회사들이다.

위대한 소프트웨어 개발자들은 언어나 기술에 묶이지 않는다. 새로운 언어나 기술을 익히기가 쉽기 때문이다.

EOB

토요일, 4월 25, 2015

[독서광] 제로 투 메이커

지난번 약속드린 바와 같이 오늘은 메이커 책 중에서 2번 타자를 소개하겠다. 한빛미디어에서 출간 직후 바로 선물을 보내주셨는데 게으름으로 인해(라고 쓰고 책에서 다루는 내용이 상당히 많아 밀도가 제법 높다는 사실을 미리 알려둔다) 이제야 서평을 올리게 되어서 조금 아쉽긴 하다(재미있는 책을 이제야 소개하다니...). 오늘 독후감 대상은 이름부터 이 책의 성격을 정확하게 규정하는 '제로 투 메이커'다. 제목처럼 메이커에 대한 지식이 전무한 상태에서 골수 메어커가 되는 여정을 아주 잘 정리한 이 책은 뭔가 내 손으로 직접 만들고 싶지만 어디서 어떻게 어떤 순서로 누구 도움을 받아야 할지 모르는 초보 메이커를 위한 좋은 길라잡이가 될 것이다. 아 물론, 부제인 '누구나 메이커가 될 수 있다'에서 잘 나타나듯이 이 책은 메어커에 관심만 있다면 남녀노소를 가리지 않는다. 중고등학생부터 직장인을 찍고 은퇴를 앞두시고 소일거리를 찾으시는 전연령을 대상으로 한다고 보면 틀림 없다.

이 책에서 현장감이 느껴진다면, 메이커에게 필요한 공학/기술적인 지식이 전무한 상태에서 개인용 잠수함(ROV) 프로젝트를 성공리에 이끌고 튼튼한 공동체 결성과 동호인들을 위한 킷트 판매 단계까지 마친 데이비드 랭 때문이다. 대다수 메이커들은 어릴 때부터 부수고 만들고 분해하고 조립하는 일에 아주 익숙하며, 선천적으로 타고난 손재주에 독학 또는 학교에서 익힌 각종 공학적인 지식으로 무장했다고 섣불리 스테레오타입으로 판단하기 쉽지만 데이비드 랭은 이중 어느 하나에도 속하지 않기 때문에 메이커에 대한 편견을 없애는 과정에서 상당히 큰 공헌을 했다.

(비록 미국을 중심으로 설명하지만) 이 책은 메이커가 되기 위한 과정을 상당히 구체적으로 (어디서 누구를 만나 무엇을 했는지 어떤 시행 착오를 거쳤는지) 기술하고 있으며, 초보자 관점에서(데이비드 랭은 메이커의 기본 소양이 전무한 상태로 시작했다는 사실을 기억하라!) 필요한 자원을 어디서 어떻게 얻고 장비를 어떻게 선택하고 사용해야 하는지 이 과정에서 배운 교훈이 무엇인지를 정리하고 있기 때문에 실용적인 지침서로 분류하는 편이 타당하다. 그렇다고 해서 '메이커가 되기 위한 101가지 지식'과 같은 백과사전식의 체계를 따르지도 않는다. 개인용 잠수함 제작이라는 원대한 목표를 이루기 위해 때로는 시행착오도 겪어가면서 차근차근 진행해가는 과정이 중간 중간 계속해서 이어지므로 씨줄(ROV에 대한 열정)과 날줄(메이커가 되기 위한 소양)이 엮이듯 하나로 합쳐진 형태를 보여준다.

전업 메이커를 위한 배려도 아까지 않는다. 키트가 동호회뿐만 아니라 상업적으로도 중요한 이유, 사람을 끌어모으고 마케팅을 하는 방법, 공간을 확보하는 방법, 자금을 투자받거나(킥스타터!) 끌어들이는 방법 등 회사가 성장함에 따라 부딪히는 문제와 해결 방안을 제시하고 있기 때문에 앞으로 메이커로 활약할 사람들은 물론 현재 메이커로 열정적으로 활약하고 있는 사람들에게도 훌륭한 조언을 제공할 것이다.

결론: 메이커로 활약하는 사람과 메이커가 되고 싶은 사람 모두에게 강력하게 추천한다.

토요일, 4월 18, 2015

[B급 프로그래머] 4월 3주 소식

금주에도 넉넉하게 소식을 정리해보았다.

  1. 웹/앱 소식
  2. 개발/관리 도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 4월 11, 2015

[독서광] 전자부품 백과사전(전력 전원 및 변환 1)

'책' 블로그를 표방함에도 불구하고 서평이 올라오지 않아서 걱정해주신 애독자 분들이 많으시리라... 반성하는 의미에서 이번 주부터는 요즘 IoT도 뜨고 하니까 메이커와 관련된 책을 연속으로 소개해드리기로 약속한다. 오늘 1번 타자는 '전자부품 백과사전'이다.

요즘이야 온라인으로 모든 정보를 검색할 수 있기 때문에 상대적으로 백과사전의 가치가 많이 떨어지긴 했지만, 어릴 때 추억(백과 사전 전집만 있으면 하루 종일 즐겁게 보낼 수 있다!)도 있고 해서 한빛미디어에서 선물로 이 책을 보내주셨을 때 아주 기뻤다. 몇 달 동안(응?) 게으름을 피우다가 결국 다 읽었기에 조금 늦은 감이 들긴 하지만 독후감을 하나 써야겠다.

이 책 부제가 무척 중요하다. 숫자 1은 이 책이 총 3권으로 예정된 시리즈 중에 1번 타자임을 알려주며, '전력 전원 및 변환'은 이 책에서 다룰 전자부품의 특성을 그대로 반영한다. 이 책에서 다루는 부품을 살펴보면 배터리, 점퍼, 퓨즈, 푸시버튼, 스위치, 로터리 스위치, 로터리 인코더, 릴레이, 저항, 포텐셔미터, 커패시터, 가변 커패시터, 인덕터, AC-AC 변압기, AC-DC 전원 공급기, DC-DC 컨버터, DC-AC 인버터, 전압조정기, 전자석, 솔레노이드, DC 모터, AC 모터, 서보 모터, 스텝 모터, 다이오드, 단접합 트랜지스터, 전계효과 트랜지스터다. (길기도 길다.) 백과사전 특성상 이 책을 처음부터 끝까지 우직하게 읽어봐도 재미는 있지만 대부분 필요한 부분을 찾는 목적으로 많이 사용하리라 기대한다. 이 책의 독차 층은 명확하다. 전자 회로를 구성하고 싶지만, 부품을 사용한지 오래되어 어떤 부품이 있었는지 특징이 무엇인지 어떻게 활용할지 기억이 가물가물한 메이커다. 상세한 제품 스펙만으로는 졸음을 유발하기에 핵심을 요약한 책이 있으면 좋겠다는 생각을 여러 번 해봤는데, 이 책이 정확하게 이런 목적으로 기술되었다.

각 부품마다 역할, 작동 원리, 다양한 유형, 사용법, 주의 사항을 소개한다. 완벽한 회로도는 아니지만 부품을 구동할 경우 필요한 주변 회로나 응용 회로 등도 잠깐씩 소개하므로 기억을 되살리기 좋다. 부품에 대한 그림이나 분해도(절반을 가르고 내부를 공개하고 그림으로 표현하는 등...)를 컬러로 싣고 있기 때문에 시각적인 즐거움도 제공한다. 일반적인 사용법뿐만 아니라 대체 부품(또는 상황에 따라 더 적절한 부품)을 제시하며 흔한 실수 유형과 회피 방안도 소개하므로 부품 선별과 회로 구현 과정에서 실질적인 도움을 받을 수 있다.

백문이 불여일견이라고 실제 책 내용이 어떤지 살펴볼까?

(예로 든 그림의 품질을 보면 알겠지만, 공들인만큼 이해가 쉽다. 뒤에 가면 더 대단한 그림도 많이 나온다.)

500페이지가 넘는 분량을 열심히 읽었음에도 불구하고 지치기는 커녕 벌써부터 시리즈물로 나올 "2. 직접 회로, 광원, 음원, 열원, 고주파 발생기"와 "3. 센서"를 기대하고 있다. 개인적으로는 특히 '3. 센서'에 관심이 집중되긴 하지만, 광원/음원/열원도 만만치않게 많이 쓰이는 출력 장비라 건너뛰지는 않을테다!

결론: 전자공학에 관심이 많은 메이커라면 소장할 가치가 충분하다!

토요일, 4월 04, 2015

[B급 프로그래머] 4월 1주 소식

봄을 맞이해 소식을 넉넉하게 정리해봤다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 3월 28, 2015

[일상다반사] (Quora) 스타트업을 시작하기에 늙은 나이는?

http://www.quora.com/How-old-is-too-old-to-start-a-startup이라는 글이 Quora에 올라와서 독자 여러분들께 소개드린다.

스타트업을 시작하기에 늙은 나이가 언제일까? 몇 가지 실질적인 대답을 정리하면 다음과 같다.

  • 우선, 초기 견인력에 24개월을 오롯하게 투자할 필요가 있다. 6개월은 충분하지 않다. 제품을 올바르게 만들려면 9-12개월이 걸린다. 매출이 일어나려면 6-12개월이 더 필요하다. 뭔가 하려는 데 24개월을 투자하지 못한다면? 너무 '늙은'거다. 심지어 당신이 22살 먹은 청년일지라도.
  • 1년에 8,760 시간을 전념할 수 있는가? 24*365말이다. 사무실에 14시간 동안 처박혀 있으라는 말은 아니다. 하지만 강박적으로 생각하고 걱정하고 불가능이 가능하게끔 만들기 위해 스트레스를 받는다. 만일 정신적인 대역폭을 이 정도 가져가지 못한다면 너무 '늙은'거다.
  • 다른 옵션이 없어야 한다. 아마 이 항목이 가장 중요하다. 옵션이 있으면 사업은 성공하지 못한다. 잠시 동안 시도해보다 안 되면 구글에 가야지. 잘 되는지 보는 동안 컨설팅을 더 많이 해야지. 잘 되면 $500k로 올려야지."와 같은 생각 말이다. 이렇게 해서는 성공하기 어렵다. 위대한 창업자들은 옵션이 없다. 미친듯이 위험을 무릅쓰는 무모함 때문이 아니라 위험을 보지 못하기 때문이다. 위대한 창업자들에게는 백업 계획이 없으며, 미래만 볼 따름이다. 옵션을 유지한다면 너무 '늙은'거다.
EOB

토요일, 3월 21, 2015

[B급 프로그래머] 3월 3주 소식

3월 3주는 가볍게 진행해보려했는데, 생각 이상으로 풍성한 소식을 전하게 되었다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 3월 14, 2015

[일상다반사] (Quora) 실패하기 쉬운 스타트업 사업 아이디어(성지 예감!)

What are some startup ideas that frequently fail?라는 글이 Quora에 올라와서 독자 여러분들께 소개드린다. 2011년에 작성된 글인데, 아무래도 2015년 현재 상황에서 성지(!)가 될 느낌이 온다.

  • 비프로그래머나 비즈니스 인력이 프로그래밍을 쉽게 할 수 있는 서비스/제품
  • 마이크로페이먼트
  • 티셔츠(예외: ThreadlessBusted Tees)
  • 친구의 관심사에 기반한 추천
  • RSS 리더, 또는 외부 소스에서 얻은 새로운 이야기를 보여주고 형식화하는 사이트
  • 주류 소식에 집중한 개인화된 신문(예외: 높은 비즈니스 가치가 있는 틈새 소식)
  • 모바일 폰으로 주변 사람을 찾아 데이트하게 만드는 앱
  • 광고를 보면 보상하는 앱/서비스/사이트
  • 맥락이나 기능과 별개로 누군가의 신뢰도를 측정할 수 있다고 반복적으로 주장하는 사이트
  • 크레이그리스트 킬러 - 하지만 크레이그리스트의 개별 카테고리를 공격하지는 않는 사이트
  • 할 일 목록 - 엄청나게 많은 서비스가 나와 있지만 사람마다 작업 흐름이 개별화되기 쉬우며 정말 개인이 필요한 사항을 특정하기는 어렵다.
  • 사업 목적으로 시작한 대다수 블로그
  • 고객이 특수 장비 또는 스마트폰으로 숫자나 바코드를 스캔해 URL, 광고, 쿠폰을 얻게 만드는 사업.

끔찍한 아이디어라 반드시 실패한다고 말할 의도는 없다. 단지 일반적으로 많이 시도되는 아이디어이며 여러 차례 대중에 선보였지만 자주 실패하는 목록일 뿐이다.

EOB

토요일, 3월 07, 2015

[B급 프로그래머] 3월 1주 소식

봄맞이 기념으로 3월 1주 소식을 정리해보았다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 2월 28, 2015

[일상다반사] (Quora) 뭔가를 배우는 가장 좋은 방법은?

Quora를 읽다보니 What's the best way to learn something?라는 흥미로운 글이 올라와서 독자 여러분들께 소개해드리겠다.

제 기억 속에서 떠나지 않는 제 은사가 들려준 이야기가 하나 있습니다.

도자기 선생님이 반을 둘로 나눴습니다.

한쪽 그룹에 선생님이 말했습니다. "이번 학기 동안 도자기 이론을 배우고, 완벽한 도자기를 계획하고, 설계하고, 만들 것입니다. 학기 말에 누가 만든 도자기가 가장 훌륭한지 품평회를 열 것입니다."

다른 그룹에 선생님이 말했습니다. "이번 학기 동안 엄청나게 많은 도자기를 만들 것입니다. 학점은 학기가 끝날 때까지 완성한 도자기 수로 매깁니다. 학기 말에, 가장 잘 만든 작품을 품평회에 낼 기회가 주어집니다."

도자기 하나만 만드는 그룹은 연구와 계획과 설계에 매진했습니다. 그리고 경쟁을 위해 완벽한 도자기 하나를 만들었습니다.

도자기를 여러 개 만드는 그룹은 즉시 찰흙을 빚어 도자기를 대량으로 만들기 시작했습니다. 큰 도자기, 작은 도자기, 간단한 도자기, 복잡한 도자기를 만들었습니다. 엄청나게 많은 도자기를 만들기 위해 체력을 소비했고 여러 주 동안 근육통으로 고생했습니다.

학기가 끝날 무렵, 양쪽 그룹은 경쟁을 위해 가장 잘 만든 도자기를 제출했습니다. 투표를 시작하자, 거의 모든 최고 작품상은 도자기를 여러 개 만든 학생들이 차지했습니다. 쌓은 경험을 바탕으로 완벽한 도자기 하나를 만드는 계획가들에 비해 실천가들은 엄청나게 좋은 도자기를 만들었습니다.

인생에서, 기술을 익히려면 도자기를 여러 개 만드는 방법이 가장 좋습니다.

EOB

토요일, 2월 21, 2015

[B급 프로그래머] 2월 3주 소식

설 연휴 모두 잘 보내고 계신지? 2월 3주 소식을 정리해보았다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 2월 14, 2015

[일상다반사] (풀 스택 엔지니어로 이끌어주는) MEAN 스택을 사용한 모던 웹 개발 입문

지난번 일래스틱서치 관련 서적 출간 소식을 전한지도 한참 지난 느낌이다. 오늘은 요즘 관심이 집중되고 있는 풀 스택 엔지니어를 위한 멋진 도구인 MEAN(MongoDB, Express, AngularJS, Node.js) 스택 관련 번역서인 'MEAN 스택을 사용한 모던 웹 개발 입문'을 소개드린다. 현재 Yes 24에서 절찬 예약 판매 중이며, 내주 출간 예정이지만 설 연휴가 겹쳐 배송이 조금 지연되고 있다는 점을 양해해주시기 바란다.

이 책은 얇은 책 한 권에 MEAN 스택을 사용한 개발에 필요한 거의 모든 내용이 담겨 있기 때문에 늘 바쁜 업무로 인해 시간에 쫓기는 국내 개발자들이 부담없이 접근할 수 있다는 특징이 있다. 목차를 보면 알겠지만, 익스프레스를 사용한 노드 API 서버 구축(CRUD 중심), 바우어를 사용한 프론트엔드 의존성 관리와 AngularJS 앱 제작, 걸프를 사용한 빌드 자동화, 웹소켓을 사용한 푸시 통지, 종단간 테스트, 노드 서버 테스트, AngularJS 테스트에 이르기까지 풀 스택 엔지니어를 이끌어주는 주제를 망라하고 있다. 게다가 현업 Devops 개발자를 위해 PaaS 서버인 허로쿠와 (국내 개발자들 사이에 뜨고 있는) 디지털 오션에 배포하고 확장성을 높이는 방법까지 소개한다. 일단 이 책 한 권이면 MEAN을 맛보기에 전혀 무리가 없다는 생각이다. 물론 개별 주제에 대한 세부 지식이 필요할 경우 시중에 번역서와 저서가 꾸준하게 나오고 있으므로 부족한 부분을 채워나가면 된다.

저자가 상당히 꼼꼼하므로 깃허브 dickeyxxx/mean-sample에 본문에 나오는 모든 예제를 장별로 브랜치를 따서 제공하고(상당히 신선한 시도였다), 아예 허로쿠에 최종 예제를 배포했기에 책을 읽기 전에 미리 예습(?)하고 책을 읽으면서 복습할 수 있게 도와준다.

출간 기념으로 독자 여러분들께 드릴 선물을 하나 준비했다. 지난번 클린코드 복간 기념 발표 자료에 엄청난 성원을 보내주신 독자 여러분들께 다시 한번 감사하는 의미에서 지난 KELP 세미나 때 'MEAN 스택을 사용한 IoT 개발'이라는 주제로 발표한 자료를 슬라이드 셰어에 올려 공유해드린다. 올 겨울 4회에 걸친 숙명여자대학교/서일대학교 특강에서도 세미나 교재로 사용한 이 자료는 MEAN 설명과 함께 MEAN 스택을 사용해 최소한의 CRUD RESTful API 서버와 AngularJS 관리 프로그램을 만드는 예제(node-collector와 angular-lamp-app 참조)까지 제공하므로 오늘 소개하는 번역서와 더불어 함께 읽어보면 MEAN 입문에 많은 도움이 될 것이다.

그리고 보너스 소식 한 가지 더! 팩트 출판사에서 나온 'MEAN Web Development' 서적도 지금 한창 번역을 진행 중이므로 조만간 독자 여러분을 찾아뵐 예정이다. 'MEAN 스택을 사용한 모던 웹 개발 입문'을 읽고 나서 MEAN에 대해 더 깊은 내용을 알고 싶은 독자에게 적합하므로 기대하셔도 좋다(아마존 별 넷 반!).

아무쪼록 2015년 한 해도 많은 성원 부탁드리겠다. 설 연휴 모두 즐겁게 보내시기를 기원한다.

EOB

[일상다반사] FALinux' Docker 의 원리 해부' 세미나 소개

작년부터 Docker에 대한 관심이 집중되고 있다. 클라우드의 열풍이 불면서 가상화 기술이 상당한 인기를 끌고 난 다음이라 새롭게 등장한 Docker에 대한 차별성이 무엇인지에 대한 궁금증도 더불어 커지고 있다.

Docker를 간단하게 설명하자면 애플리케이션 빌드, 배포, 실행을 위한 개발자와 시스템 관리자를 위한 개방형 플랫폼이다. Docker는 게스트 운영체제와 운영체제 구동을 위한 바이너리/라이브러리를 모두 포함하는 가상 기계와는 달리 단지 실제 필요한 애플리케이션과 라이브러리만 포함한다. 컨테이너 기술을 사용해 호스트 운영체제의 사용자 영역에서 격리된 프로세스 형태로 구동하며, 다른 컨테이너와 커널을 공유한다. 따라서 가상 기계의 자원 격리와 할당이라는 장점을 누리면서도 이동성과 효율성을 보장하므로 두 마리 토끼를 모두 잡는 효과가 있다.

What is Docker?에서 가져옴)

Docker가 개발자와 시스템 관리자 모두에게 인기를 끄는 이유는 완전히 이동한 앱을 어디서나 실행 가능하게 만들어 배포할 수 있기 때문이다. 개발자는 Docker Hub에 올라온 13,000 가지가 넘는 앱 중 하나로 시작할 수 있으며, 시스템 관리자는 개발자가 만든 앱이 동작하는 환경을 쉽게 이해하고 적극적으로 제어할 수 있다. 표준화된 개발/배포 환경을 제공하기 때문에 개발/테스트/운영 환경의 간극을 좁힐 수 있다. 게다가 베어메탈은 물론이고 사설/공개 클라우드 위에서 자유롭게 사용 가능한 Docker의 경량화된 런타임 엔진 덕분에 요구에 대응해 빠른 확장이 가능하다.

그렇다면 Docker의 동작 원리는 어떨까? 일반적인 경우라면 내부 구조까지 속속들이 알고 있을 필요는 없지만 별도의 가상화나 반가상화 기술을 사용하지 않고 커널 위에서 동작하기 때문에 Docker를 제대로 활용하기 위해서는 커널의 어떤 특성을 십분 활용하는지 탐험할 필요가 있다. 이에 개발자와 관리자 여러분을 위해 Docker의 원리를 커널 저장소, 커널 이름공간, 커널 컨트롤그룹, 커널 네트워크라는 네 가지 측면에서 해부하는 FALinux 2015년 첫 공개 세미나 소식을 접했다.

Docker 자체에 대한 관심 많은 개발자, Docker를 한 단계 더 높은 수준으로 활용하고 싶은 개발자, 단순 시스템 관리를 떠나 Devops에 관심이 많은 시스템 관리자라면 이번 세미나를 통해 Docker에 대한 이해 수준을 한 단계 더 높일 수 있으리라 기대한다.

행사 소개 내용은 다음과 같으며, FALinux 세미나 소개 페이지에서에서 등록 가능하다.

Docker가 무엇이며 동작 원리를 파악했다면 직접 실무에 적용할 일만 남았다. 아무쪼록 Docker를 활용해 개발과 서비스 생산성을 높여 기업과 개인의 경쟁력을 한층 더 강화하는 데 많은 도움이 되면 좋겠다.

EOB

토요일, 2월 07, 2015

[B급 프로그래머] 2월 1주 소식

오늘은 흥미로운 읽을거리를 잔뜩 정리해보았다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 1월 31, 2015

[독서광] Node Web Development 한국어판

오늘은 노드 관련 서적 한 권을 소개하려 한다. 2011년 말에 출간되었기에 철이 지났을지도 모르는 책을 굳이 먼지를 털어가며 소개하려는 이유는 이 책 서술 방식이 흥미롭기 때문이다.

'웹 개발 플랫폼 노드 프로그래밍'이라는 부제가 붙은 'Node Web Development 한국어판'은 노드를 사용한 웹 개발 방법을 설명하고 있다. 딱 여기까지 소개 글을 읽고 나서 책 내용을 한번 상상해보면, 노드 역사, NPM 소개, 익스프레스 소개, 템플릿 소개, socket.io 소개, 단위 테스트 소개와 같은 목차가 머리 속에 그려질텐데, 이 책은 아주 흥미로운 접근 방식을 택하고 있으며, "노드로 웹 서버를 한번 만들어보면 어떨까?"라는 질문에 대한 해법을 단계별로 풀어간다.

일단 노드와 NPN 소개까지는 일반적인 방식을 택하고 있는데, 그 다음부터 일반적인 노드 서적의 정도에서 벗어나기 시작한다. 가장 먼저 간단한 애플리케이션을 만들어 본다. 그리고 나서 미들웨어를 위한 기반 구조인 커넥트(Connect)를 사용해 재구현하는 동시에 확장해본다. 그 다음에 커넥트 위에 만들어진 미들웨어인 익스프레스를 사용해 재구현하는 동시에 확장해본다. 그리고 나서 비동기식 프로그래밍 기법과 이벤트 처리 기법을 설명한다. 마지막으로 여기까지 배운 지식을 합쳐 간단한(하지만 필요한 필수 기능은 제공하는) 웹 서버를 노드로 처음부터 구현하면서(NPM 정적 웹 서버 모듈을 설치하고 나서 10줄짜리 웹 서버를 만드는 만행은 저지르지 않는다) 노드의 내부에서 일어나는 동작을 엿볼 수 있게 쏠쏠한 힌트를 제공한다. 아, 물론 웹 서버 프로토콜과 동작 방식 기초가 있어야 이 책을 흥미롭게 읽을 수 있다는 사실을 잊어서는 곤란하겠다.

요렇게 마무리하면 독자들이 멘붕을 일으킬 가능성이 높다는 사실을 알았는지, 6장에서는 sqlite3와 몽고DB를 사용한 영속적인 데이터베이스 저장 기법을 설명하고 사용자 인증 정보를 영속적으로 보관하는(이렇게 해야 노드 서버의 수평 확장이 가능해진다) 방법을 소개하며 마무리를 짓는다. 원서는 2판이 2013년에 나왔는데 아직 번역서는 안 나왔기 때문에 독자 여러분께 힌트를 주자면, 원서 2판에는 socket.io, 다중 사용자 지원과 다중 호스트 배포 방식, 단위 테스트 방법이 추가되었다. 큰 틀은 바뀌지 않았을지 모르지만 어느 정도 독자 요구에 맞춰 내용이 변경되었음을 알 수 있다.

결론: 노드를 사용해 블로그를 만들고, 트위터 타임라인을 만들고, 채팅을 만드는 실질적인 예제를 소개하는 대신 이런 기본을 파고드는 서술 방식에 대해 호불호가 확실하게 갈릴 가능성이 높다. 하지만 종종 이런 독자의 허를 찌르는 다소 변칙적인 책도 한 권 정도는 있어야 하지 않을까?

EOB

토요일, 1월 24, 2015

[B급 프로그래머] 1월 3주 소식

벌써 2015라는 숫자에 익숙해진 느낌이 든다. 오늘은 1월 3주 소식을 정리해 전해드리겠다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 1월 17, 2015

[B급 프로그래머] IOTivity(OIC) vs AllJoyn(AllSeen Alliance)

2015년 CES에 출품된 제품들을 보면 알겠지만, IoT(Internet of Things)가 대세로 자리잡은 듯이 보인다. 범람하는 IoT 기술이 오히려 시장에 혼란을 주기 때문에 OIC(Open Interconnection Consortium)AllSeen Alliance가 결성되어 IoT 표준화 작업을 진행 중이다.

단순히 표준 문서만 작성하는 데서 벗어나, 올신 얼라이언스가 먼저 AllJoyn을 공개했고, 이어서 OIC도 IOTivity라는 프레임워크를 공개했다.

간략하게 두 프레임워크의 특성을 소개하겠다.

IOTivity는 개발자가 IoT 애플리케이션을 개발하는 과정에서 필요한 여러 가지 API를 제공하며, 다양한 운영체제(현재 리눅스, 아두이노, 타이젠)를 지원한다. API는 RESTful 방식으로 되어 있으며, 다음 네 가지 빌딩 블록을 제공한다.

  1. 발견: 근접해 있거나 원격에 있는 장비와 자원을 탐색하는 여러 메커니즘을 지원
  2. 데이터 전송: 메시지와 스트림 모델 기반으로 정보 교환과 컨트롤 지원
  3. 데이터 관리: 다양한 자원으로부터 얻은 데이터를 수집하고 저장하고 분석하는 기능 지원
  4. 장비 관리: 구성, 권한 설정, 진단 지원

AllJoyn은 근처에 있는 장비를 발견하고, 브랜드/범주/전송/운영체제와 무관하게 각각에 대한 통신이 가능한 애플리케이션을 개발하는 과정을 쉽게 해주는 프레임워크다. 물리적인 전송의 세부 사항을 추상화하며, 사용하기 쉬운 API를 제공한다. 임베디드 RTOS 운영체제부터 상용 운영체제에 이르기까지 다양한 플랫폼 위에서 동작하며, 여러 언어를 제공한다.

AllJoyn은 전송(네트워크)을 담당하는 코어 프레임워크(Core Framework)와 실제 장비의 서비스를 개발하는 기본 서비스(Base Service) 또는 데이터 주도 API(Data-Driven API)로 구성된다. 애플리케이션 개발자 입장에서는 코어 프레임워크 위에 구성된 서비스 프레임워크를 사용하거나 데이터 주도 API를 사용할 수 있다. 서비스 프레임워크가 제공하는 기본 서비스는 다음과 같다.

  • 연결: 새 장비를 와이파이 네트워크에 붙이는 일관성 있는 방식 제공
  • 구성: 애플리케이션/장비의 특정 속성을 구성
  • 통지: AllJoyn 네트워크 상에서 장비가 텍스트 기반 통지를 송수신하게 허용. 또한 URL을 사용한 오디오와 이미지 지원
  • 제어판: 원격에서 제어되는 가상 제어판을 지원
  • 오디오 스트리밍: 동기화된 오디오 재생 기능 지원

IOTivity와 AllJoyn은 IoT의 표준화를 위해 추구하는 방향은 유사하지만 실제 설계 사상(그리고 지원하는 기능)은 많이 다르기 때문에 완전히 중원을 평정할만큼 강력한 위력을 발휘하기는 어려워 보인다. 이와 관련해 IoT 단체 춘추전국시대··· 통일 조짐은 2016년에나를 읽어보면 현재 IoT 표준화 단체의 전투 상황을 머리 속에 그릴 수 있을 것이다.

EOB

토요일, 1월 10, 2015

[B급 프로그래머] 1월 1주 소식

2015년을 맞이하여 첫 소식을 정리해보겠다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리

조금 늦어졌지만, 2015년 새해 복 많이 받으시기 바란다.

화요일, 1월 06, 2015

[독서광] 처음 시작하는 인텔 갈릴레오

오늘은 한빛미디어에서 선물로 보내주신 아두이노 관련 서적을 하나 소개드리려 한다. 그런데 어떻게 된 영문인지 이름에 '아두이노'가 없고 '갈릴레오'만 들어있으니 여기에 대해 먼저 설명하고 넘어갈 필요가 있겠다.

Atmega CPU를 장착한 아두이노와는 달리 갈릴레오는 인텔의 32비트 x86 호환 쿼크 코어를 탑재하고 있다. 특별한 운영체제가 없이 펌웨어 수준에서 동작하는 아두이노와는 달리 갈릴레오는 리눅스 운영체제로 동작한다. 갈릴레오는 리눅스 상에서 아두이노 하드웨어/소프트웨어를 그대로 동작시킬 수 있게(하드웨어와 소프트웨어 핀 호환을 목표로 한다) 특수 하드웨어와 수정된 소프트웨어를 탑재하고 있다고 보면 이해가 쉽겠다. 100% 호환을 목표로 두고 있긴 하지만 갈릴레오에 존재하는 미묘한 문제(예: GPIO 속력과 PWM 관련해 문제가 많았기에 2세대 갈릴레오가 등장했다는 기사 참조)와 상대적으로 큰 보드 크기와 복잡도로 인해 완벽하게 아두이노를 대체하기는 어렵다는 생각이다. 뭐 그럼에도 불구하고 교육과 실험 목적으로는 크게 나쁘지 않다. 잘만 하면 임베디드 부문에서 리눅스와 아두이노 둘 다 다뤄볼 수 있으니까.

이제 갈릴레오와 아두이노의 관계를 알았으므로 책 내용으로 들어가보자. 지난 번에 소개드린 33가지 프로젝트로 배우는 아두이노와는 달리 이 책은 C도 잘 모르는 초보자가 보기에 적합한 내용을 담고 있다. 목차를 보면 알겠지만 일단 갈릴레오 소개와 보드 기초 사항을 설명한 다음 출력(디지털/아날로그)과 입력(디지털/아날로그)을 설명하고 반복문과 시리얼을 사용한 고급(?) 기법을 소개한다. 그리고 이더넷이 내장된 갈릴레오의 특성을 살려(아두이노 같으면 별도 확장 실드를 구매해야 하므로 여러 가지 면에서 번거롭다) 네트워크에 접속하고 웹 서버를 구동하는 방법을 설명한다. 이 과정에서 갈릴레오에 셀로 접속하는 트릭도 알려주므로 아두이노와는 또 다른 갈릴레오만의 접근 방식을 엿볼 수 있다.

단순히 갈릴레오를 아두이노처럼 사용하는 에물레이터를 벗어나 중간에 리눅스와 아두이노가 어떤 식으로 상호 작용하는지 알려주기 위해 /proc 파일 시스템을 사용해 센서를 읽고 액추에이터에 명령을 내리는 방법을 소개하며, 파이썬을 사용해 만든 프로그램과 연동하는 방법(아두이노 프로그램에서 popen 확장 명령으로 외부 명령을 수행한 다음 결과를 얻는 방식)도 설명하고 있다. 아두이노의 기본 명령이 아니라 갈릴레오에서 사용할 수 있는 확장 명령인 경우 명시적으로 이런 사실을 알려주므로 혼동의 여지를 없앴다. 책의 마지막 부분에는 부록 형태로 아두이노(+갈릴레오 전용) 프로그래밍 참조 문서를 제공하므로 많이 사용하는 명령을 한 눈에 확인할 수 있다.

이 책을 읽으면서 아주 복잡한 프로젝트를 수행하기는 어렵겠지만, 기초적인 개념 설명과 함께 어렵지 않은 실험거리를 제공하므로 '처음 시작하는'이라는 제목과 잘 어울린다는 생각이다.

결론: 갈릴레오/아두이노를 처음 접해 아두이노/갈릴레오로 뭔가를 하고는 싶은데 C 프로그래밍 언어나 전자 회로 기초가 부족해 곤란을 겪고 있는 초보자분들께 추천한다.

EOB

토요일, 1월 03, 2015

[번역은 즐거워] 고양이가 당신을 거대하고 예측불가능한 유인원으로 생각하는 이유

독자 여러분을 위한 2015년 인사를 글로 대신 드리려 한다. Why Your Cat Thinks You’re a Huge, Unpredictable Ape라는 재미있는 글이 wired에 올라와서 독자 여러분을 위해 전문을 번역해봤다.

싱글즈(Shingles)는 내 질병 이름(대상포진)이 아니라 내 고양이 이름이다. 나는 이 녀석을 죽도록 사랑하지만, 이 녀석은 나를 짜증나게 만든다.

나만이 갈등을 겪는 애묘가가 아니다. 토니 버핑턴은 오하이오 주립 대학의 수의사이며, 최근에 내게 많은 고양이 집사들이 끊임없이 자신들의 고양이 동료에 좌절감을 느낀다고 말해줬다. 먹이고, 뒤를 깨끗하게 청소하고, 쓰다듬고, 안아주고, 붙들고 있지만, 버핑턴은 우리 중에 극소수만 고양이 말을 어떻게 듣는지 안다고 말한다. 이는 우리보다 고양이를 더욱 좌절스럽게 만든다. 우리가 고양이를 아무리 사랑할지라도 고양이는 사로잡히고 길들여진 이방인에 불과하기 때문이다. 자신들의 풍습을 설명할 방법도 사람을 이해할 방법도 존재하지 않는다.

버핑턴 박사(어찌되었거나 다음 고양이로 좋은 이름이다)는 내게 고양이 말을 듣는 방법을 참을성 있게 설명했다. 더 많이 안을 수 있는 트릭이 아니라 고양이의 건강을 개선할 수 있는 더욱 조화로운 집안 분위기를 만드는 방법이다. 여러 해 동안, 버핑턴은 고양이과 동물의 방광 조직에 고통스럽고 만성적인 염증이 생기는 병인 간질성 방광염의 근본 원인을 연구해왔다. 버핑턴의 연구는 스트레스가 가득한 집안 환경이 질병을 일으키며, 아마도 다른 만성 고양이 질환 역시 일으킬지도 모른다는 가능성을 보여준다. 버핑턴은 최선의 치료가 고양이의 말을 듣는 방법을 배우고 고양이에게 선택의 기회를 주며, 고양이의 스트레스성 반응을 일으키는 환경 요인을 줄이는 데 있다고 믿는다.

당신은 거대하고 예측불가능한 유인원이다

당신은 누가 봐도 분명한 소파를 발톱으로 긁은 소리를 듣는다. 화난 목소리로 톡 쏘며, 고함지르며, 물을 쏘며, 심지어 배게를 던진다. 헛수고다. 고양이는 다시 원래대로 돌아가기 때문이다. 버핑턴에 따르면 고양이는 당신을 무시하지 않는다. 고양이는 자신의 행동과 부정적인 강화를 연결하는 방법을 모를 뿐이다. 고양이는 사회적인 신호를 읽을 필요성이 거의 없는 외로운 사냥군으로 진화했기 때문이다. 특히 행동 변화를 요구하는 사회적인 신호를 읽지 못한다.

"쇼파를 긁지않게 멈추고 싶어하기 때문에 사람이 고함을 지른다는 사실을 고양이가 어떻게 알겠습니까?"라고 버핑턴은 말한다. 발톱으로 긁는 행위를 주인의 분노와 연결하는 능력이 없는 상황에서, 고양이는 사람의 미친 공격성만 볼 뿐이다. "고양이에게 당신은 이유없이 자신을 공격하는 미친 영장류일뿐입니다."라고 버핑턴은 말한다.

행동을 포기하게 만드는 대신, 당신은 공포의 대상이 된다. 한술 더 떠, 고양이는 당황하게 되며 결국 스트레스를 받는다. 발톱을 긁거나 높이 뛰는 등의 고양잇과의 자연스러운 활동을 끊임없이 방해하기 때문이다. "고양이는 자신의 자연스러운 행동을 표현하기를 원할 때 그렇게 하지 못하면 병이 듭니다."라고 버핑턴은 말한다. 당신이 주변에 없을 때 고양이는 계속해서 자연스러운 행동을 할 것이다.

"고양이를 훈련하는 방법은 주변 환경 개선입니다."라고 버핑턴은 말한다. 예를 들어, 소파 모서리에 양면 테이프를 붙이거나, 부엌 조리대에 은박지를 붙여놓는다. 그리고 근처에 개박하로 덮은 고양이 기둥이나 버려진 표류목으로 만든 기가 막힌 캣타워와 같이 관심을 끌 대안을 놓아둔다. 대안을 대상으로 고양이가 원하는 행동을 할 때, 선물을 주거나 애정으로 보답한다. "집은 부정적인 강화를 제공하게 만드는 반면, 고양이게게는 긍정적인 강화를 제공해야 합니다."

고양잇과 풍수

고양이가 자지 않는 매일 몇 시간 동안, 고양이는 최대한 균형잡히게 집에서 움직이기를 원하는 작은 에너지 덩어리다. 하지만 냉장고 근처에 음식 접시를 놓아두거나 드라이어기 옆에 작은 상자를 놓아두거나, 정원으로 나가는 여닫이 유리문 주변에 고양이가 좋아하는 카드 보드 상자를 놓아둠으로써 고양이의 몰입을 방해해왔다.

냉장고 소리나 탈수기 소리에 귀가 멀지도 모르겠다. 하지만 버핑턴에 따르면, 고양이가 먹거나 배변하는 동안 냉장고나 탈수 소리는 괴물이 으르렁거리는 소리로 들린다. 접시와 고양이 배변통은 조용한 곳에 놓아둬서, 고양이가 위협을 느낄 때 안전한 탈출 경로가 되는 (벽장이 아닌) 고요한 장소를 만든다.

풍경 역시 스트레스를 줄 수 있다. 고양이는 다른 동물에 대해 호기심이 많다. 하지만 멍멍이, 강아지, 염소, 말 등 사이에 시각적인 경계가 없으면 고양이는 위협을 느낄 것이다. "고양이는 유리를 이해하지 못합니다. 하지만 높이는 이해합니다."라고 버핑턴은 말한다. 고양이에게 캣 트리나 책장과 같은 높은 장소에 올라갈 수 있게 만들어주자. 평온한 상태에서 주변을 관찰할 수 있는 장소 말이다.

솜털로 뒤덮인 새끼 고양이의 배는 건드리지 마세요

풍경과 소리만 고양이의 감각을 공격하는 집안의 유일한 방해물은 아니다. 사람은 고양이보다 더 노골적으로 애정을 표시하며, 종종 귀여운 털뭉치만 보면 못견뎌한다. 하지만 우리와 같이 고양이도 정중하게 다뤄달라고 말하기를 원한다. "누군가 항상 당신을 들여올려 안아주고 비비면 이를 환영하겠습니까?"라고 버핑턴은 말한다.

솜털로 뒤덮인 새끼 고양이가 상호 작용을 이끌게 놓아두는 편이 좋다. 당신에게 와서 몸의 일부를 비비면, 고양이를 쓰다듬어도 좋다는 허락을 내린 것이다.

고양잇과 동물의 다른 행위에 주의해야 한다. 쓰다듬기를 원하는 초청장으로 보이기 때문이다. 솜털로 뒤덮인 새끼 고양이가 발라당 뒤집어서 배를 드러내는 행동이 전통적이다. 스다듬으러 가면, 고양이는 물고 뜯는다. "배를 드러내는 행동은 만들어놓은 함정이 아닙니다."라고 버핑턴은 말한다. "고양이가 무는 이유는 사생활을 침해 받았기에 두렵기 때문입니다." 고양이의 배는 가장 취약한 부분이며, 이를 드러냄으로써 고양이는 자신이 당신을 신뢰하고 있다는 사실을 알려준다. 배를 쓰다듬어 주기를 원하는 행동은 아니다.

배가 유일한 출입 금지 구역이 아니다. 고양이를 쓰다듬다 보면, 갑자기 고양이가 슬그머니 도망쳐 방 반대편에 가서 뭔가 뒤에 웅크린 다음 당신을 빤히 쳐다보는 경험을 한 적이 없는가?

고양이가 뭔가 이상하게 행동하면, 이런 고양이의 행동을 불러일으킨 원인이 있습니다."라고 버핑턴은 말한다. 아마 꼬리 시작 부분을 만져 엉덩이를 들게 만들었을지도 모른다. 이 영역은 신경으로 가득 차 있으므로, 너무 많이 만지면 간지럼을 탄다. 또한 두 팔로 안아 올리는 행위는 고양이에게 일반적이지 않다. 고양이가 무릎 위로 올라가더라도 반드시 들어 올려달라는 초청장을 의미하지는 않는다.

무슨 뜻이냐고? 당신의 고양이를 번쩍 들어 올려, 바짝 붙어, 천사와 같은 배를 문질러도 문제 없지 않느냐구? 문제 없다. 어느 누구도 시샘하지 않는다. 여기에 대해 이야기만 하지 마라.

고양이들끼리 친구 만들기

싱글즈와 나는 최근 다른 두 마리 고양이가 살고 있는 집으로 이사했다. 그리고 내 방돌이와 나는 여러 달 동안 고양이들이 함께 놀게 만들려고 시도했다. 잘 되지 않았다. 몇 번이고 되풀이해서, 거실에 함께 놓아뒀지만 가벼운 호기심이 공황과 싸움으로 바뀌는 모습만 볼 뿐이다.

버핑턴은 우리가 완전히 잘못하고 있다고 말했다. 버핑턴에 따르면, 동일한 수건을 사용해 차례로 고양이를 문지른 다음 서로의 체취를 알게 만드는 방법으로 천천히 시작해야 한다. 서로를 소개하기 전에, 고양이들이 존경하는 주인으로부터 먹이, 배변, 사랑을 잘 받았는지 확인하자. 다시 말해 고양이들이 편안함을 느껴야 한다. 일단 고양이들이 함께 있게 되면, 애정을 듬뿍 줌으로써 주인이 고양이들 뒤를 보살펴 준다는 사실을 고양이가 알게 만들자. 고양이들이 어울리게 압력을 가하지 말고, 각자 방해받지 않는 안전한 탈출구가 있는지 확인하자.

만일 고양이가 어울리지 못하고 떠나기로 결정하며, 그렇게 하게 둬라. 버핑턴은 고양이에 대한 우리의 가장 큰 오해 중 하나가 고양이들이 다른 고양이들과 어울릴 필요가 있다는 우려다. 야생에서 고양이들은 홀로 사냥하고 공유하지 않는다. 다른 고양이는 친구가 아니라 경쟁자다.

고양이가 당신을 챙기기

고양이는 보이는 것만큼 무관심하지 않다. 고양이는 유대감을 원하며, 이를 위한 가장 좋은 수단은 쓰다듬고 먹이를 주고 놀아주는 것이다. 고양이가 놀고 싶지 않아하면, 뭔가 잘못하고 있는 셈이다. 레이저 포인터를 사용한다면, 미친 듯이 흔들어대지 말자. 자연스러운 속력으로 움직여 고양이가 종종 잡을 수 있게 만들자. 끈에 묶은 쥐돌이도 동일한 규칙을 적용하자.

싱글즈는 내가 하루 종일 자리를 비울 때 끊임없이 울곤 했으며, 싱글즈를 혼자 두면 신경증에 걸리지 않을지 걱정했다. 버핑턴은 오갈 때마다 작은 의식을 만들어라고 조언한다. "떠나기 전에 고양이를 불러, 사랑을 표현하고 안녕이라고 말한다는 사실을 알게 할 수 있습니다."라고 버핑턴은 말한다. 그리고 집에 올 때도 비슷한 의식이 있어야 한다고 조언한다. "몇몇 결혼한 사람들은 하루에 한 시간도 접촉하지 않고서도 잘 살아갑니다. 고양이와 관계도 하루 10분이면 충분합니다. 물론 정말로 질이 높아야 하겠지만 말입니다."라고 버핑턴은 말한다.

EOB