자바 커뮤니티에서 스칼라가 쇠퇴하고 있다는 인식이 왜 생겼는지, 그 배경과 원인을 정리하고 스칼라가 남긴 유산과 앞으로의 가능성을 살펴본다.
자바 커뮤니티에는 스칼라(Scala) 프로그래밍 언어가 이미 내리막길에 들어섰다는 공감대가 있는 듯합니다. 저는 이 점이 아쉽습니다. 저는 늘 스칼라로 프로그래밍하는 것을 즐겼거든요. 사실 저는 스칼라 같은 대안 JVM 언어를 지원하려고 이 블로그를 시작하기도 했습니다. 하지만 시장은 다른 결정을 내렸습니다. Moshe Kranc가 스칼라의 흥망성쇠에 대해 훌륭한 분석 글을 썼습니다. 저는 Moshe의 글이 충분히 흥미로워서, 내용을 요약하고 제 생각을 몇 가지 덧붙이고자 합니다.
다만 Moshe의 글에 달린 169개 댓글 중 일부도 읽었기 때문에, 그에 대해서도 몇 마디 덧붙이려 합니다. 무엇보다 저는 스칼라라는 언어를 정말 좋아합니다. 저는 반(反)스칼라 글을 쓰려는 게 아닙니다. 오히려 그 반대입니다. 저는 그루비(Groovy)와 스칼라의 행보를 10년 넘게 지켜봤는데, 업계가 왜 이들 언어 중 하나라도 채택하지 않는지 여전히 의아합니다. 여러 측면에서 두 언어 모두 자바보다 확실히 낫다고 생각하거든요.
그루비는 ‘스테로이드를 맞은 자바’입니다. 자바와 99% 호환을 유지하면서도 유용한 기능을 잔뜩 제공합니다. 사실 모든 자바 개발자는 유능한 그루비 개발자입니다. 본인들이 그걸 모를 뿐이죠.
스칼라는 조금 다릅니다. 스칼라는 자바와의 호환을 목표로 하지 않습니다. 물론 바이트코드 레벨에서는 (다소 제한적이긴 하지만) 호환성과 상호 운용이 가능합니다. 하지만 소스 코드는 눈에 띄게 다르게 보입니다. 그러나 더 유연한 문법, 강력한 타입 추론 등 여러 장점을 얻기 위해 치러야 하는 대가가 바로 이것입니다. 역사적 관점에서 보면 자바는 C++를 급진적으로 단순화한 방언(dialect)이라고 할 수 있습니다. 초기부터 자바 언어 코어 팀은 제네릭 타입, 람다 표현식 등 다양한 기능을 추가해 왔습니다. 스칼라는 이 중 많은 기능을 먼저 선보인 선구자였습니다. 게다가 스칼라는 학계에서 새로 시작한 그린필드(greenfield) 프로젝트로 만들어졌습니다. 저는 그 결과가 꽤 설득력 있다고 봅니다. 예를 들어, 잘 다듬어진 언어 설계 덕분에 강력한 타입 추론이 가능해졌습니다.
그렇다면 왜 업계는 그루비도 스칼라도 널리 채택하지 않았을까요?
몇 년 전 저는 학생과 견습생에게 첫 프로그래밍 언어로 스칼라를 쓰자고 제안한 적도 있습니다. 하지만 현실은 그렇게 흘러가지 않았습니다. 제 일상에서 스칼라는 큰 영향력을 발휘하지 못했습니다. 스칼라는 스파크(Spark), 아카(Akka), 갓틀링(Gatling), 빅데이터 같은 특정 영역에 제한된 듯합니다. 말할 필요도 없이 이런 니치(niche)들은 중요하지만, 제 인상으로는 대다수 개발자는 여전히 자바에 머뭅니다. 어떤 이들은 자바를 JVM 세계의 어셈블리 언어라고 부르기도 했는데, 이런 상황은 조금 놀랍습니다. 자바는 빠르고, 매우 견고하며, 그리고… 지루합니다. 자바는 지나치게 의식적(보일러플레이트가 많은)인 언어라서 스칼라보다 개발 생산성이 낮습니다. 그런데도 말이죠. 최근에는 스칼라가 다시 쇠퇴하고 있다는 트윗을 여러 개 읽었습니다. 이유가 뭘까요? Moshe의 글은 좋은 출발점입니다.
Moshe의 핵심 포인트를 제 생각과 함께 요약해 보겠습니다.
또 하나 자주 듣는 불만은 컴파일러 속도입니다. 스칼라를 도입하는 목적은 개발 생산성을 높이는 것인데, 느린 컴파일러가 그 향상의 상당 부분을 잡아먹곤 합니다. 가파른 학습 곡선과 결합되면 사용자 경험은 좌절스럽습니다. 시간이 지나며 컴파일러는 많이 개선됐으니, 컴파일 속도가 예전만큼 큰 문제인지 여부는 저는 잘 모르겠습니다.
다음은 제가 한 번 이상 목격한 지점이지만, 제가 스칼라를 충분히 자주 쓰지 않아서 확신하기는 어렵습니다. 만약 여러분이 StackOverflow에서 초보자들을 돕기 위해 애쓰는 스칼라 개발자라면, 다음 문장은 다소 날카롭게 들릴 수도 있습니다. 스칼라 개발자 커뮤니티는 매우 활동적이지만, 열성적인 스칼라 옹호자 중 일부는 자기 언어에 대한 확신이 지나치게 강해 성가신 경향이 있습니다. 제 기억으로는, 초보자에게 커뮤니티 지원이 부족하다는 불평을 담은 글을 여러 번 읽었습니다. 반면 자바는 이런 면에서 강점이 있습니다. StackOverflow나 Java CodeRanch 같은 곳을 예로 들 수 있죠. 최근에는 상황이 악화되고 있지만, 오랫동안은 심지어 ‘바보 같은 질문’[1]도 빠르고 친절하게 답변을 받을 수 있었습니다. 제 인상으로는 스칼라 커뮤니티는 언어의 우월함에 너무 취해 있어서, 그 도취감이 포럼에서 오만함으로 비치기도 합니다. 솔직히 말하면, 자바 커뮤니티도 초창기에는 같은 실수를 했습니다. C로 몇 년 개발하다가 자바를 도입하면 생산성이 크게 향상되는데, 그러면 C나 C++ 개발자들에게 동정 섞인 시선을 보내지 않기가 어렵습니다. 파란 화면(블루 스크린) 없이 프로그램을 만드는 일이 얼마나 어려웠는지 상상이나 되나요? 요즘 블루 스크린은 거의 역사 속으로 사라졌습니다. 컴퓨터가 다운됐다는 이미지와 연결되기보다는, 영화 제작을 떠올리는 사람이 더 많을 정도니까요.
또 다른 중요한 점이 최소 하나는 더 있다고 봅니다. 스칼라가 성장하기 시작했을 때, 자바는 이미 임계 질량(critical mass)에 도달해 있었습니다. 어떤 회사도 전체 코드베이스를 다시 구현하고 싶어하지 않습니다. 스칼라의 약속은 JVM 위에서 돌고 자바와 평화롭게 공존하니 그럴 필요가 없다는 것입니다. 하지만 불행히도 이런 말은 관리자들이 커리어 내내 너무 많이 들어왔기 때문에, (완곡하게 말해) 지나치게 낙관적인 이야기로 받아들이곤 합니다. 이 경우 마케팅 문구는 대체로 사실에 가깝지만, 관리자 관점에서는 안전한 쪽으로 판단하는 게 낫습니다.
참고로 윈도우 데스크톱 PC와 노트북에도 비슷한 임계 질량이 있습니다. 제 기억이 맞다면, 게임을 제외하면 윈도우용 소프트웨어의 대다수는 마이크로소프트 언어와 IDE로 작성됩니다. 또 다른 임계 질량의 예로는 웹 디자이너에게 PHP가 있습니다. 얼마나 저렴한 서버든 대부분 PHP를 실행할 수 있습니다. 그 결과 인터넷의 상당 부분은 PHP 페이지로 이루어져 있습니다.
엔터프라이즈에서 자바가 갖는 보편성은, 패러다임 전환(paradigm shift)이 없는 한 자바가 새 언어로 대체되지 않을 것임을 의미합니다. 함수형 프로그래밍은 패러다임 전환이었지만, 너무 학술적이어서 폭넓게 받아들여지기에는 어려웠습니다. 하지만 우리는 지금 또 하나의 큰 패러다임 전환의 시대에 살고 있습니다. 브라우저가 실행 환경으로 점점 더 중요해지고 있습니다. 브라우저가 탑재된 기기가 얼마나 많은지 놀라울 정도입니다. 스마트폰과 태블릿 PC는 빙산의 일각일 뿐이죠. 그래서 저는 백엔드 쪽에서 큰 변화가 일어날 거라고는 기대하지 않습니다. 코틀린(Kotlin) 같은 언어가 다음 큰 흐름이 될 수도 있겠지만, 저는 회의적입니다. 반면 프런트엔드 프로그래밍은 빠르게 바뀌고 있습니다. 지금 가장 뜨거운 언어는 사실 매우 오래된 언어인 자바스크립트(JavaScript)입니다. 저는 자바스크립트가 TypeScript 같은 언어로 대체되길 바라지만, 이 역시 회의적입니다. 자바스크립트는 이미 어디에나 있습니다. 간단한 에디터만 있으면 자바스크립트 프로그램을 작성할 수 있죠. 반면 TypeScript는 먼저 여러 프로그램을 설치해야 합니다. 컴파일러가 필요하고, 컴파일러를 설치하려면 node.js와 npm을 먼저 설치해야 하니까요. 대부분의 자바스크립트 개발자는 이런 과정을 기꺼이 받아들이는 듯하지만, 그럼에도 TypeScript의 보편성을 제한합니다.
참고로 TypeScript와 JavaScript는 모두 함수형 프로그래밍 언어이며, 이 언어들에서는 함수형 스타일을 채택하는 것이 자연스럽게 느껴집니다. 어쩌면 이것이 스칼라의 유산일지도 모릅니다. 스칼라는 신선한 자극과 새로운 아이디어를 제공했고, 몇 년 뒤 자바 언어에도 영향을 미쳤습니다.
Moshe에 따르면 스칼라는 적어도 특정 니치에서는 살아남을 것입니다. 스칼라는 많은 빅데이터 문제에서 선택받는 언어이고, 맞춤형 DSL을 작성하는 데도 훌륭합니다. 문법의 놀라운 유연성은 DSL 설계에 큰 자유를 줍니다. 다소 부자연스럽긴 해도, 거의 자연어 영어처럼 읽히는 DSL도 작성할 수 있습니다. 이는 자바로는 분명 불가능합니다. 자바 DSL을 만들면 마침표, 괄호, 세미콜론을 많이 쓰지 않게 하기는 어렵습니다. 그리고 이는 그런 DSL을 비즈니스 부서와의 소통에 사용하기 어렵다는 뜻이기도 합니다.
스칼라는 자바 및 JVM 언어의 진화에 중요한 역할을 해왔지만, 최근 여러 이유로 스칼라의 인기가 시들해 보입니다. 남는 것은 스칼라의 중요한 유산입니다. 또한 스칼라는 특정한, 심지어 중요한 니치에서 지속될 것입니다. 그리고 누가 알겠습니까? 언젠가 미래에 그런 니치에서 다시 부상할지도요.
특히 갓틀링(Gatling)은 스칼라에 대한 호기심을 다시 불러일으킬 수 있습니다. 자바에서 스칼라로 비즈니스 로직을 포팅할 필요 없이, 스칼라에 익숙해질 기회가 되니까요. 미래는 열려 있습니다!
앞서 말했듯이, 이 블로그 글을 쓰게 만든 원문도 읽어보시길 권합니다:
Moshe Kranc의 the rise and fall of Scala