개발자를 위한 아는 척 매뉴얼

전문가 칼럼입력 :2016/02/01 08:20    수정: 2016/02/01 08:32

임백준 baekjun.lim@gmail.com

현업 프로그래머로 일하다보면 홍길동이 되는 경우가 있다. 모르는 것을 모른다고 말할 수 없는 경우를 만나는 것이다. 솔직하지 않은 것과는 뉘앙스가 다르다. 무작정 솔직하기만 해서는 필요한 일을 하기 어렵기 때문에 선의의 타협을 하는 것이다. 때로는 모르는 것을 아는 척 넘어가고, 잘 기억해 두었다가 나중에 공부하는 것이 현실적이다.

이런 선의의 아는 척은 난이도가 높은 기술(art)이기 때문에 제대로 구사하면 크레딧을 쌓는데 도움이 되지만 어설프게 시연하면 심각한 타격을 입을 수도 있다. 하수들 앞에서 고수 행세를 하다가 진짜 고수를 만나서 망신을 당하는 사람도 있고, 고수를 못 알아보고 아는 척 기술을 시연하다가 천마탈공흡기공에 걸려 숨을 못 쉬게 되는 경우도 있다. 내 이야기다.

짧은 칼럼이라 많은 내용을 담을 수는 없지만, 이 글은 직업적 특성상 아는 척을 할 필요가 있는 선의의 프로그래머들을 위한 매뉴얼이다. 개발자라면 아는 것처럼 보일 필요가 있는 최신 트랜드 4개를 골라보았다. 현대 동시성 프로그래밍, 개발 방법론, 빅데이터, 그리고 머신러닝이 그들이다. 다른 내용이 많이 있지만 지면 관계상 4개만 간추렸다.

요즘에는 싱글 코어를 사용하는 컴퓨터가 없다. 스마트폰조차 멀티코어를 사용한다. 그래서 소프트웨어를 개발하는 사람들이 여러 개의 코어를 제대로 활용하는 동시성 프로그램을 작성하는 것이 매우 중요해졌다. 동시성이라는 말을 듣고 자바의 쓰레드(thread)나 락(lock)을 떠올리는 사람은 시대에 한참 뒤떨어진 사람이다. 현대 동시성 프로그래밍을 이야기할 때는 기본적으로 허브 서터(Herb Sutter)가 쓴 '공짜 점심은 끝났다'라는 글 정도는 언급해 줘야 아는 척 기술을 시작할 수 있다.

클로저의 STM(Software Transaction Memory)과 스칼라의 액터를 언급하면서 살짝 미간을 찌푸려주면 완성도가 올라간다. 고 언어의 고루틴을 이야기하면서 겉보기로는 액터와 비슷한데, 뭐랄까 액터의 메일박스가 스스로 돌아다니는 느낌이랄까, 라고 말하면 그럴듯하다. 자바스크립트를 사용하는 사람이라면 요즘 앨름(Elm)도 좋던데, 정도로 이야기하면 상당하다. 그리고 스칼라의 액터는 좀 지저분하고 역시 얼랭의 액터가 쓸 만하지, 라고 이야기하면서 (더 긴 이야기가 나오기 전에) 자리를 뜨면 화룡점정이다.

개발방법론 이야기가 나올 때에는 일단 애자일 보기를 애벌레 보듯 하면 자연스럽게 아는 척 기술을 시작할 수 있다. 에릭 마이어 같은 사람이 “애자일은 업계에서 사라져야 하는 암적 존재”라고 말한 것을 언급하면 일단 분위기를 자기 쪽으로 끌고 올 수 있게 된다. 마이어의 생각에 완전히 동의하지는 않지만 어느 정도 일리가 있는 부분도 있어, 라고 말하는 것이 적당하다. 매일 아침 서서 진행하는 스크럼을 해본 경험을 양념처럼 뿌릴 수 있으면 도움이 되고, 애자일하고 스크럼까지는 그렇다고 치고 칸반은 또 뭐야, 하고 말하면서 살짝 고래를 젓고 자리를 피하면 자연스럽다.

빅데이터는 범위가 너무 크기 때문에 여기에서는 개발자들이 사용하는 NoSQL 데이터베이스를 중심으로 이야기하겠다. 참고로, 나는 프로그래머다에 출연했던 마이크로소프트의 김진영님을 중심으로 “생활데이터”라는 말이 많이 쓰이고 있는데, 빅데이터 대신 생활데이터라는 말을 쓰면 현대적이고 세련된 감각을 뽐낼 수 있다. NoSQL과 관련한 이야기를 할 때 몽고디비, 카산드라, 카우치디비, 다이나모, 리악, 버티카, 에어로스파이크 등의 제품군을 이야기하는 것은 너무 기본이라서 촌스럽다. 아는 척 기술을 시연하려면 내부를 말해야 한다.

NoSQL 데이터베이스는 여러 대의 노드를 가지고 클러스터를 구축하는 것이 기본이기 때문에 분산 컴퓨팅의 이론을 언급해야 아는 척이 가능하다. 시작은 CAP 이론이다. Consistency(일관성), Availability(가용성), Partition Tolerance(분할내성)라는 세 개의 특징을 설명하는 CAP 이론은 분산 컴퓨팅의 출발점이다. 여러 대의 노드가 마치 한 대의 컴퓨터인 것처럼 동작하려면 C, A, P라는 세 개의 요구사항을 모두 동시에 만족시킬 수 없음을 입증한 수학적 모델인데, 이렇게까지 자세하게 설명할 필요는 없고 그냥 모자를 쓰는 시늉을 하면서 캡 이론 말이야, 하고 이야기하면 아는 척으로는 충분하다.

상대방이 모자 이론, 아니 CAP 이론에 만족하지 않는 눈치면 벡터 시계와 일관성 해시(consistent hashing) 정도를 말하며 자리에서 일어날 준비를 한다. 그래도 만족하지 않으면 결국 팩서스(Paxos) 알고리즘을 말하면 된다. 팩서스 알고리즘을 견디는 사람은 흔하지 않다. 쐐기를 박기 위해서 팩서스 알고리즘이 아마 MIT의 레슬리 람포트 교수의 논문에 기초하고 있던가, 하고 말하면서 시선을 먼 곳에 있는 플라타너스 나무의 잎사귀에 두면 더 이상 저항은 없다.

머신러닝이라면 요즘에는 역시 딥러닝을 언급해줘야 아는 척이 가능하다. 최근 이세돌에게 바둑을 두자고 도전한 구글의 알파고가 딥러닝을 사용하는 것은 유명하다. 하지만 머신러닝도 가물가물한 상태에서 딥러닝을 아는 척 하는 것은 위험이 따르는 모험이다. 따라서 여기에서는 무리해서 아는 척을 하지 말고 그냥 관심이 있는 척 정도만 하는 게 안전하다. 일단 가벼운 출발을 위해서 앤드류 응 교수의 코세라 강의정도는 기본적으로 언급해 주어야 한다. 엉성하긴 하지만 낯익은 누군가가 진행하는 '개발자를 위한 머신러닝'을 시청하는 것도 좋다.

관련기사

머신러닝은 기본적으로 ‘분류’다. 컴퓨터가 어떤 사진이 고양이 얼굴인지 ‘아는 것’이 아니라, 그 사진을 고양이 얼굴이라는 범주로 ‘분류’하는 것이다. 딥러닝은 이를테면 더 정교한 분류다. 사람의 두뇌를 흉내 낸 신경망 알고리즘을 강력해진 하드웨어 파워를 이용해서 수행함으로써 단순한 머신러닝보다 더 정교한 ‘분류’를 가능하게 만든 것이다. 안드이 카파시의 블로그을 읽거나 구글의 텐서플로우(https://www.tensorflow.org/)를 다운받아서 돌려보면 아는 척의 밀도를 한층 높일 수 있다.

장난처럼 이야기했지만, 사실 아는 척을 잘 하는 것은 개발자에게 실력의 일부다. 거짓과 사기의 영역으로 일탈하지 않는 한 그것은 의사소통에서 윤활유 역할을 하기도 하고, 개발자의 몸에 흡수되는 영양분이 되기도 한다. 무엇보다도 자기가 한 말에 책임을 져야하기 때문에 남몰래 열심히 공부하는 습관을 강제하기도 한다. 좋은 부작용이다. 그래서 아는 척은 노력의 뒷면이다. 그러니 누군가 불안한 눈빛으로 아는 척을 할 때, 개발자여, 추궁하지 말고 즐겁게 속아주자. 그게 동종업계 친구들 사이의 인정이다.

*본 칼럼 내용은 본지 편집방향과 다를 수 있습니다.