scala언어에 대한 개인적 견해
개발 커뮤니티에서 우연히 scala 관련 토론 글을 보고 개인적인 생각을 한번 적어 봅니다. scala 언어가 과연 java를 넘어서 대세가 될 수 있을것이냐 대한 토론이였습니다.
혁신은 항상 기존 기술이 한계상황까지 갔을때 온다.
이는 제가 생각하는 혁신의 법칙입니다. 풀어서 말하면 혁신은 항상 그전의 상태의 문제에 대해서 모두가 이해하고 있으며, 모두가 해결책을 원하지만 답을 찾지 못하고 있는 단계까지 가야지만 혁신이 이루어진다는 것입니다. (여담이지만 왜 혁신이 제때 오지 못하냐면 기존의 상태에 만족하는 기득권 세력이 혁신을 원하지 않기 때문입니다.) 이런 현상은 어디든지 있습니다만 소프트웨어 개발의 세계에서 한번 따져보면 C언어의 포인터와 메모리 수동 관리의 한계가 오면서 java가 나왔고 java에서도 EJB의 한계를 느끼고 spring이 나왔으며, xml 설정 지옥 문제가 생기자 java config가 나왔습니다. persistence 영역의 코딩이 지루하게 개발자의 시간을 잡아먹는다고 느끼자 hibernate가 나왔으며, 서버 간 통신에도 xml 통신에 애로사항 때문에 현재는 json 통신이 대세가 되었습니다. 향후 json에도 단점이 인식되기 시작하면 그 후에는 어떤 방식이 또 대세가 될지 알 수 없겠죠. 이렇게 처음에는 좋아 보였지만 점점 해당 기술에 익숙해지고 요구사항이 점점 복잡해지면서 기존 기술로는 문제 해결이 어렵고 밤을 새우는 일이 많아지면 사람들은 대안을 찾기 시작하고 그중에 정말 의미 있는 생산성 향상이 이루어지는 기술들이 대세가 되면서 혁신이 이루어진다고 생각합니다. 이런 흐름을 이해하면 향후에는 어떤 기술이 대세가 될지도 예측을 해볼 수 있습니다.
현재 개발의 흐름을 보면 예전에 비해 초 대용량의 데이터를 다루고 초 대량의 요청 처리가 많이 지고 있습니다. 초대량의 요청 처리라는 측면에서 보면 현재 spring에서는 아직 관련 솔루션이 나와있지 않아 제대로 된 대응이 어렵다고 생각합니다. 그래서 vert.x, akka 등 분산 환경에서 동시성 문제가 최소화된 형태의 솔루션이 대안으로 주목받고 있습니다. scala를 포함한 함수형 프로그래밍 언어는 바로 이 초 대용량 처리를 위한 분산 환경처리, 동시성 문제 해결 등에 언어 레벨에서의 지원이 있기 때문에 향후 java의 대안으로 인식되고 있다고 봅니다. 다른 이유가 없이 단지 코드가 우아해 보여서 유행을 타는 게 아니라는 것이죠. spring의 창시자인 로드존슨이 scala 언어 솔루션 개발로 넘어간 이유나 트위터 등 대용량 데이터 처리 업체에서 scala를 도입하고 있는 이유도 다 여기에 있다고 봅니다.
다만 우리나라 소프트웨어 개발업계의 독특한 특성상 scala 등 함수형 언어가 빠르게 퍼지지는 않을 것으로 예상됩니다. 개인적으로는 한국의 소프트웨어 개발은 기존의 개발 스타일을 계속 유지하는 업체와 새로운 기술을 빠르게 받아들이는 업체로, 적어도 한동한은 이렇게 두 방향으로 양극화가 될 것이라고 봅니다. 대기업에서 많은 사용자를 대상으로 하는 서비스를 개발하거나 중소업체라도 성공적인 글로벌 서비스를 만들지 않는 이상 요즘의 빅데이터 솔루션이나 대규모의 실시간 통신이 이루어지는 서버를 만들일은 많아 보이지 않기 때문입니다. 대규모 서비스를 만드는 몇몇 업체에서는 넘치는 접속량으로 계속해서 새로운 도전에 직면하고 새로운 개념의 기술들로 갈아탈것이 예상되지만, 평범한 업체들은 작은 우리나라만을 시장으로 하기 때문에 이런 새로운 기술들이 필요 없습니다. 위에서 말했지만 혁신이 이루어 질려면 기존의 기술이 한계상황까지 가야 되는데 아직 spring으로 개발하는 것에 특별한 불만들이 없기 때문이죠. spring이 최근 spring-boot로 또 한 번 업그레이드하면서 당분간은 spring 천하가 계속 유지될 것으로 봅니다.
spring으로 해결이 어려운 분산 환경 대응 대용량 서비스를 개발하는 업체는 scala나 node.js 등 새로운 개념의 기술로 이전이 가속화될 것이고, 평범한 서비스 개발이나 SI개발업계에서는 기존의 spring 방식이 당분간은 계속 유지될 것이다.
이것이 제가 생각하는 scala 언어 전망입니다. ㅎㅎ