본문 바로가기

Dev. 개발 이야기

프로그래밍 언어 뜨는 해와 지는 해


프로그래밍 언어 연구의 선구자 중 한 사람인 영국의 피터 란딘이 1965년 발표한 ‘차세대 프로그래밍 언어 700 (The next 700 programming languages)’라는 제목의 유명한 논문이 있다. 

프로그래밍 언어는 다양하게 많지만 궁극적으로 원리는 하나라는 관점을 가지고 언어의 실행의미를 논리적으로 기술한 최초의 논문이다. 후세에 미친 영향이 지대한 논문 치고는 제목이 다소 엉뚱한 점이 없지 않은데, 그 당시 시중에서 사용되고 있던 프로그래밍 언어가 700개라는 글을 한 전문잡지에서 읽고 제목을 정했다고 한다. 오늘날 소프트웨어 개발에 사용하고 있는 프로그래밍 언어가 몇 개나 있는지 위키피디아에서 찾아 세보니 공교롭게도 698개이다.

50년이 지난 지금도 사용하고 있는 프로그래밍 언어의 개수가 거의 변함이 없음이 놀랍다. 새로 탄생해 세상에 나온 프로그래밍 언어가 오랜 세월을 지나면서 수없이 많았을 것이다. 그렇다면 사장돼 없어진 언어도 그만큼 있었다는 얘기가 아니겠는가? 피터 란딘이 이 논문을 발표할 즈음부터 시작해 프로그래밍 언어의 설계와 구현에 대한 연구는 50여 년 동안 꾸준히 진행, 발전해왔다. 

수많은 실험적인 언어가 대학 및 연구소에서 개발됐으며, 이를 통해 쌓아온 다양한 노하우가 이제는 산업체에서 실전에 사용하는 언어에 서서히 하나씩 장착돼 좀 더 안전하고 효율적이며 유지보수하기 쉬운 언어로 개량되고 있다. 오랫동안 사용해오던 언어의 단점 극복이 개량만으로 완벽하게 해소되지 않을 수 있으니, 이를 원천적으로 제거한 새로운 언어도 속속 등장해왔다. 어떤 언어는 개발자를 많이 확보한 주류 언어로 등극하는가 하면, 어떤 언어는 소수 추종자만 보유한 채 명맥만 유지하거나 아예 사라져버리기도 한다.

웹 애플리케이션 시대에서 시작해 모바일 애플리케이션 시대에 이르기까지 꽤 오랜 기간 가장 많이 사용되고 있는 언어의 영예를 누려오던 ‘자바(Java)’의 인기가 주춤해질 위기에 처해있다. 오라클이 갖고 있는 자바 API(Application Programming Interface) 구조를 구글이 안드로이드 운영체제에 쓰고 있는 것과 관련해 벌이고 있는저작권 및 특허에 대한 법정 분쟁이 기점이 되고 있는 것 같기도 하다. 


주춤하는 ‘자바’의 인기
자바 API 구조는 저작권으로 보호받을 수 없으므로 구글의 안드로이드 운영체제는 오라클의 특허를 위반하지 않았다는 판결이 2012년에 미국 법정에서 났다. 하지만, 올해 초 항소재판에서 자바 API 구조도 저작권 보호를 받을 수 있다고 판결이 뒤집어짐으로써 이 법정투쟁은 점입가경이 돼가고 있다. 

이 사건에 자극받은 때문인지 구글은 자체개발 언어 ‘고(Go)’를 강력하게 지지하고 있으며 최근 들어 가파른 점유율 상승으로 이어지고 있다. 드디어 고 언어만 사용해 안드로이드 앱 개발이 가능한 버전이 최근 등장했다. 구글이 차지하고 있는 영향력을 고려하면 고 언어가 안드로이드 앱 개발의 주류 언어가 되는 건 시간문제인 것 같아 보인다.

애플은 OS X용 데스크톱 애플리케이션 개발 플랫폼과 iOS용 모바일 앱 개발 플랫폼에서 주로 사용하는 언어인 ‘오브젝티브-C(Objective-C)’의 대안으로 최근 ‘스위프트(Swift)’를 내놓았다. 오브젝티브-C는 C언어가 기본적으로 갖고 있던 단점을 고스란히 갖고 있어 목표로 하고 있는 소프트웨어의 안전성, 개발용이성의 보장에 한계를 느꼈기 때문으로 보인다. 

상이한 패러다임을 융합해 수용하고 문법을 간결하게 함으로써 기존의 스크립트 언어 개발자들까지 끌어들이겠다는 속셈이 깔려있다. 

오브젝티브-C도 1990년대 후반 마이크로소프트가 새로 구축한 ‘닷넷(.NET)’ 플랫폼에 ‘C#’를 새로 내놓고 강력하게 지지하는 바람에 서서히 점유율이 떨어지고 있는 ‘C++’의 전철을 밟게 되지 않을까 여겨진다. 

웹 애플리케이션 개발 용도로 설계한 스크립트 언어의 경쟁도 치열하다. ‘PHP’, ‘파이썬(Python)’, ‘루비(Ruby)’가 각기 고유의 웹 프레임워크와 함께 선두를 이끌고 있다. 초반에는 PHP가 우세했으나 파이썬은 교육계와 리눅스 커뮤니티의 지원으로 급성장했고, 루비는 웹 개발의 간편함을 앞세워 무섭게 점유율을 끌어올리고 있다. 이 여세는 한동안 계속될 것으로 예측된다. 

시스템 소프트웨어와 임베디드 소프트웨어를 구축하는 주류 언어인 ‘C’의 아성은 무너지지 않을 것이다. 하드웨어를 직접 조작할 수 있다는 장점 때문에 대체할 수 있는 언어가 사실상 없다. C의 치명적인 단점인 안전 및 보안 취약성에 대한 보완은 개발자의 부담으로 돌아올 수밖에 없을 것이다. 남은 희망은 취약성을 개발 단계에서 조기에 발견할 수 있도록 개발자에 대해 시큐어 코딩 훈련을 강화하고 안전성을 자동으로 검사하는 도구를 지원하는 정도일 것이다. 

사용가능한 프로그래밍 언어가 700개나 되는데 새로운 언어가 지속적으로 생기는 이유는 뭘까? 피터 란딘이 밝혔듯이 원리는 모두 같은데 말이다. 해답은 사용성에 있다. 


주요 프로그래밍 언어의 점유율 추이 (출처 : PYPL)

소프트웨어는 단순히 요구된 기능만 잘 작동한다고 우량 제품이 되는 건 아니다. 시간에 따라 변하는 요구사항에 신속히 대처할 수 있어야 하므로 수정 및 유지관리가 쉬워야 한다. 또 예기치 못한 상황 발생에 잘 대비할 수 있고, 침입이나 노출에 취약하지 않게 안전성을 충분히 고려해 제작할 수 있어야 한다. 

이를 달성하기 위해 객체지향형, 함수형 등 다양한 패러다임이 제안됐으며, 특정 패러다임별로 다양한 프로그래밍 언어가 등장해왔던 것이다. 

지금은 객체지향 패러다임으로 소프트웨어를 제작하는 것이 대세인데, 비교적 최근에 등장한 고, 스위프트, ‘스칼라(Scala)’ 같은 언어들은 객체지향 패러다임에 함수형 패러다임을 융합해 양쪽의 장점을 모두 수용하고 있다. 객체지향 패러다임은 프로그램의 체계적인 설계, 유지관리에 강점을 보이고 있고, 함수형 패러다임은 간결함과 동시 프로그램의 용이성에 강점이 두드러져서, 이 장점을 모두 수용하는 쪽으로 프로그래밍 언어가 진화하고 있는 것이다. 

이와 같이 최근 언어들은 모두 강력한 타입 시스템을 제공해 안전성을 강화하고 있다는 공통점도 있다. 

‘코볼(COBOL)’이 그랬듯이 한번 대세를 잡은 언어는 생명이 길 수밖에 없다. 하지만 태생적으로 단점을 지니고 있는 구시대 언어는 서서히 사라질 것이며, 새로운 기능과 다양한 장점으로 무장한 새 프로그래밍 언어들이 지속적으로 탄생해 무대의 판도를 천천히 바꿀 것이다. 

자바와 같이 태어날 때부터 지니고 있어서 비판을 면치 못했던 몇 가지 단점이 긴 시간동안 개선을 통해 일부 보완되기도 한다. 심지어 자바8은 함수형 패러다임도 도입했다. 장수하기 위한 보약을 먹고 있는 게 아닐까?


멀티링구얼이 되자
해가 바뀌기 무섭게 새 언어와 개발 플랫폼이 속속 등장하는데 개발자로서 이걸 모두 배워야 하는지 궁금해 할지도 모르겠다. 

특정한 프로그래밍 패러다임을 매끄럽게 맞춰 구사할 수 있는 언어가 다양한 양상으로 새로 등장하는 건 경제성과 효율성, 보안성 향상을 실현하기 위한 인간의 부단한 노력의 결실이다. 

좋은 프로그래밍 언어를 사용하면 양질의 소프트웨어가 만들어질 가능성이 높아진다. 좋은 프로그래밍 언어는 양질의 코드가 만들어지게끔 유도하는 기능들이 장착돼 있기 때문이다. 개발자로서 더 나은 소프트웨어를 더 손쉽게 만들 수 있다면 마다할 이유가 없지 않겠는가? 

그런데 일반적으로 새로운 언어를 배워 익힌다는 것이 상당히 부담스러울 수 있다. 내가 익숙해 잘 구사할 수 있는 프로그래밍 언어가 있는데 굳이 새로운 언어를 배우는 노력이 가치가 있는 건지 의문을 제기할는지도 모르겠다. 

그렇지만 진정한 개발자라면 더 유리하다는 확신이 서는 경우 자신에게 익숙한 언어를 과감히 버리고 갈아탈 수 있는 용기와 능력이 있어야 한다. 개발하려는 목적물에 따라 언어를 선택할 수 있는 여지가 없는 경우는 모르겠지만, 그렇지 않은 경우 맞는 언어를 선택할 수 있는 역량도 있어야 한다.

피터 란딘이 관찰해 제시한대로 프로그래밍 언어가 다양하더라도 이를 받치고 있는 원리는 모두 같다. 따라서 프로그래밍 언어의 원리를 제대로 파악하고 다양한 패러다임의 설계 원칙을 근본적으로 이해하는 것이 무엇보다 중요하다. 

일단 원리를 터득하게 되면 각 새로운 언어의 새로운 기능과 구조들이 왜 생겨나게 됐는지 근본적으로 이해할 수 있어 새로운 프로그래밍 언어에 쉽게 적응할 수 있기 때문이다.

자연어는 여러 언어를 자유자재로 구사하는 능력을 키우기가 매우 어렵지만, 상대적으로 프로그래밍 언어는 그렇지 않다. 바야흐로 프로그래밍 언어의 원리를 제대로 이해하고 패러다임 별 설계 원칙을 터득한 다중 프로그래밍 언어 개발자가 필요한 시대이다. 

<본 기사는 테크M 제31호(2015년11월) 기사입니다>