테크데이즈 미니 토요세미나 발표자이신 김희준님을 미리 만나 보았습니다.
오늘은 카카오에서 PC용 카카오톡 개발자로 근무하고 계신 김희준님을 만나 보았습니다.
김명신: 안녕하세요. 오랜만에 뵙습니다. 모르시는 분들을 위해서 간단히 본인 소개를 부탁 드려도 될까요?
김희준: 네, 저는 현재 카카오에서 PC 버전의 카카오톡을 개발하고 있는 김희준이라고 합니다. 카카오에 합류한지는 6개월 정도 되었고요, 이전에는 마이크로소프트에서 핵심 개발자 지원 팀에 3년간 김명신 부장님과 같이 있었고, 그 이전에는 윈도우 Device Driver를 개발하는 회사에서 근무하였습니다. 2000년부터 개발을 시작했고, 중간에 학교에 다녀온 것을 제외하면 10년차 개발자라고 말씀드릴 수 있을 것 같네요.
김명신: 무엇보다 이번 테크데이즈 미니 토요세미나에 모실 수 있게 되어서 영광입니다. C++11이다 C++14이다 하여 전 세계적으로 C++ 커뮤니티에서는 C++이라는 언어가 새롭게 조명되고 있음에도 불구하고 국내에서는 개발자를 위한 이렇다 할 자리가 없었는데, 테크데이즈 미니 토요세미나를 통해서 C++ 이야기를 전달할 수 있어서 얼마나 다행이지 모르겠습니다. 먼저 간단한 질문을 하나 드려 보고 싶습니다. 도대체 C++이라는 언어는 어떤 장점이 있을지요?
김희준: 사실 C++을 사용하는 많은 개발자들이 동의하시겠지만 C++ 언어의 최고의 장점은 역시 성능입니다. 다른 언어에 비해서 컴퓨터와 가장 지근거리에 있는 언어이고, C++을 사용하였을 때 컴퓨팅 파워를 최대한으로 끌어 낼 수 있다는 것이 가장 매력적인 부분이라고 생각합니다. 최근 마이크로소프트가 주최하는 GoingNative라는 행사에서도 Hurb Sutter가 유사한 질문을 한적이 있었어요. 그 때도 역시 C++을 사용하였을 때 얻을 수 있는 최고의 장점은 Performance가 아니겠는가라는 대체적인 공감이 있었지요. 하지만 그 외에도 C++은 상당히 스펙트럼이 넓은 언어입니다. 국내에서는 주로 게임 분야에서 많이 사용되고 있는 것이 사실이지만 전세계적으로 살펴보면 게임뿐 아니라 의료, 공학, 엔터테인먼트, e-commerce 등 다양한 분야에서 C++ 언어가 사용됨을 알 수 있습니다. 그리고 최근 모바일 분야를 필두로한 플랫폼의 다양화가 IT분야의 큰 화두인데요, 역설적일지 모르겠으나 C++은 이처럼 다양한 플랫폼이 상존하는 상황에서 Portability를 고려할 때 최상의 언어입니다. 상용 플랫폼들 중에 C++을 지원하지 않은 플랫폼은 거의 없기 때문이지요. 게다가 최근 C++98/03에 머물러 있는 표준 규격이 C++11으로 완전히 재편 되었을 뿐 아니라 C++14 규격도 상당부문 표준화가 진척된 것으로 알고 있습니다. 기존에 C++ 언어가 가지는 단점 중에 하나로 다양한 라이브러리나 프레임워크 등의 부족을 꼽는 부분이 있었는데요, 최근 C++ 표준화 기구의 움직임을 보면 정말 다양한 라이브러리가 지원될 것으로 보입니다. 이렇게 되면 Cross Platform을 지원하는 가장 강력한 언어가 될 수 있으리라 봅니다.
김명신: 일부 개발자들 사이에서는 C++ 언어는 배우기 어려운 언어다. 그리고 시대에 뒤쳐진 언어다라는 이야기가 있습니다. C++ 언어가 너무 복잡해서 그런 것은 아닐까요?
김희준: C++은 매우 강력한 기능들을 갖추고 있고, 다양한 형태로 활용할 수 있기 때문에, 이런 부분이 잘못 비추어진 것은 아닐까 합니다. 게다가 C++의 문법이나 구현 방식들을 교묘하고 현학적으로 사용하는 경우가 간혹 있는데 이는 C++의 강력함을 과도하게 사용한 결과입니다. 실제로 C++ 언어의 규격을 설명하고 있는 문서의 분량은 Java나 C# 규격 문서와 거의 유사합니다. 규격 문서가 언어의 모든 내용을 정밀하게 나타내고 있음을 고려할 때, 다른 언어에 비해서 과도하게 복잡하다거나 사용하기 어렵다는 측면에서는 동의하기 어렵습니다. 물론 스크립트 언어에 비해서는 상대적으로 복잡해 보일 수 있겠으나, 활용도 측면에서 고려해 본다면 반드시 그런 것은 아니지요.
김명신: 기존 C++언어에 비해서 C++11/14는 어떤 부분이 개선되거나 변경되었을까요?
김희준: 워낙 많이 변해서 어떤 부분을 꼬집어 말씀 드리기에는 어려움이 있습니다. 개인적으로는 달라진 기능 모두가 다 중요한 것 같습니다. C++ 전문가들 사이에는 완전히 새로운 언어로 탈바꿈 하였다는 평가를 하기도 합니다. 저 또한 유사한 느낌을 많이 받습니다. 이전의 C++가 마치 C언어의 수퍼셋처럼 비추어졌다면 C++11이나 14이 지향하는 방향성은 이와는 전혀 다르다고 평가할 수 있을 것 같습니다.
김명신: 국내에서는 특히나 게임 산업이 발달해서인지 C++ 개발자의 비중이 높은 편입니다. C++ 개발자로서 계속 C++만 하면 될까요? 아니면 여러 가지 다른 언어들도 같이 살피는 것이 좋을까요?
김희준: 저는 개인적으로 C++ 언어를 많이 쓰고, 좋아하는 언어이지만, JavaScript나 Python과 같은 언어도 비교적 즐겨 쓰는 편입니다. 이러한 스크립트 언어들을 익혀두면, 특정분야에서 상당한 생산성 향상 효과를 볼 수 있습니다. 특정 언어 하나를 고집하기 보다는 수행해야 하는 업무에 맞추어서 여러 언어들을 사용할 수 있다면 좋지 않을까 생각합니다.
김명신: 그렇군요. 하지만 여러 언어들을 능통하게 잘 구현할 수 있다는 것은 쉽지 않은 일임에 분명한 것 같습니다. 계속해서 새로운 기술을 익혀야 하는 것이 개발자로서 주어진 숙명 같은 것은 아닐까 생각도 드는데요, 개발자가 가져야 하는 기본 소양이랄까 자질이나 능력 같은 것에는 어떤 것이 있을까요?
김희준: 개발자에게 가장 중요한 것은 원리를 알고자 하는 호기심이 아닐까 합니다. 호기심이 없으면 깊이 있게 살펴볼 수 없고, 결국은 수박 겉핥기 식의 공부가 될 수 밖에 없습니다. 넓게 아는 것도 좋지만 개발자라면 기본적으로 깊이 있는 공부가 필수라고 생각하는데, 원리를 찾고자 하는 호기심 어린 시각이 없이는 깊이 있는 공부를 하기란 쉽지 않을 것 같습니다. 개인적으로 초보 개발자 분들에게는 디버깅을 깊이 있게 공부하라고 조언을 많이 하는 편입니다. 디버깅이라는 것이 단순히 버그를 찾고 수정하기 위한 절차일 뿐 아니라, 결국 코드의 동작원리를 규명하고 그것을 따라 갈 수 있는 가장 좋은 도구이기 때문입니다. 이를 통해서 하나를 깊이 있게 살펴보다 보면 다른 것들도 크게 다르지 않다는 기본적인 원리를 찾아내곤 하지요.
김명신: C++ 코드를 접하다 보면 과도하게 복잡하게 작성된 코드들을 자주 보게 됩니다. 물론 말씀해 주신 것처럼 디버깅을 통해서 그 원리를 알고 따라갈 수는 있겠습니다만, 항상 그런 여유가 주어지는 것은 아닌 것 같아요. 개인적으로 선호하는 코드 작성 원리랄까 스타일 등이 있을까요?
김희준: 그 점에 대해서는 저도 개발을 하면서 많이 바뀌었는데요, 처음 개발을 시작할 때에는 우습게도 어려운 코드가 좋다고 생각했습니다. 멋있게 보이기도 하였고요. 하지만 시간이 지나면서 이런 시각은 상당히 많이 바뀌었습니다. 지금 생각에는 “자가설명적(self-describing) 코드”를 작성할 수 있다면 좋지 않을까 생각합니다. 추가적인 문서가 없이도 코드만 살펴보아도 코드의 작성 의도가 한눈에 읽히는 그런 코드가 좋은 것 같아요. 물론 이렇게 작성하는 것이 쉬운 것은 아니겠지요. 말을 잘 하는 사람이란, 쉬운 단어로 정확히 내용을 전달하는 사람이라 하더군요. 저는 소스 코드 또한 그래야 한다고 생각합니다. 현학적인 코드 보다는 쉬운 코드가 훨씬 더 낫다고 생각합니다.
김명신: 쉬운 코드가 좋다라는 의견에는 저도 상당부문 동의하는 부분입니다. 하지만 실제로 다양한 분야의 개발자 분들을 만나 보면, IT의 활용도만큼이나 개발 자체를 바라보는 시각도 다양한 것 같습니다. 국내 개발자 분들에게 전하고 싶은 말씀이 있으실까요?
김희준: 저도 개발을 바라보는 다양한 시각이 있다는 것을 알고 있습니다. 실제로 최근에 어떤 모임에 참가하여 중견 개발자분이 하시는 이야기를 듣고 깜짝 놀란적이 있는데요. 코드는 지금 당장 돌아갈 수 있도록 짜면 그만이다라고 말씀하시더라고요. 저는 이러한 시각에는 동의할 수 없습니다. 국내 솔루션들이 대부분 버전 1.0이 나오고는 발전하는 못하는 이유가 당면한 문제 해결을 위해서 단기적인 시각으로 문제를 바라보기 때문이 아닐까 합니다. 문제 해결의 방법은 상당히 다양할 수 있기 때문에, 여러 가능성을 열어두고, 장/단기적인 대응 방안을 비교 분석하여 올바른 방향성을 모색해야 한다고 생각합니다. 단기적인 처방만으로는 발전을 도모하기 어렵다고 생각합니다.
김명신: 오늘 말씀 감사합니다. 인터뷰를 하다 보니, 발표하실 세션이 더욱 기대가 되는군요.
김희준: 제 세션에서는 C++11의 새로운 규격을 설명하기 보다는, 그러한 규격을 어떻게 활용할 수 있는가에 대한 실용적인 측면을 다루고자 합니다. 아직 준비가 많이 부족합니다. 열심히 준비해야 할 것 같습니다.
김명신: 감사합니다. 수고 많으셨습니다.