여러 개발 언어를 안다는 것의 유용성 – 다양한 관점

특정 언어에는 지배적인 사고방식이 있습니다. 한 언어만 사용하면 그 언어를 지배하는 사고방식에 익숙해집니다. 이 자체가 문제는 아닙니다.

그런데 어떤 문제는 늘상 쓰던 방식이 아니라 다른 방식으로 접근하는 것이 더 효율적인 경우가 있습니다. 이럴 때 다른 방식이 존재한다는 사실 자체를 모른다면 비효율적인 수단을 선택할 수밖에 없게 됩니다. 만약 다양한 방식에 대해 알고 있다면 더 효율적인 수단을 선택할 수 있게 되는 것이죠.

여러 언어와 라이브러리에 대해서 깊이 있게 알지 못하더라도, 어느 정도 언어의 느낌을 알 수 있는 정도만 사용해 보는 것만으로도 도움을 받을 수 있습니다.

몇 가지 사례가 떠올라서 적어 봅니다.

다양한 시각을 보유하는 것은 장점이 있습니다. 사진은 외국인의 눈으로 본 한국. ©Mike Swigunski

자바스크립트 함수

예컨대 자바스크립트에서 함수를 다른 객체들과 마찬가지로 취급하죠. 그 결과로, 예를 들면 자바스크립트에서는 함수를 변수에 할당할 수 있습니다. PHP와 자바부터 공부했던 저에게 이 개념은 매우 낯선 것이었습니다.

그러나 이 개념에 익숙해지고 나니 PHP의 대표 CMS인 워드프레스의 필터와 액션 개념을 이해하는 것이 몹시도 편했습니다. 필터와 액션도 특정 이벤트에 함수를 탈부착합니다(PHP 5.2까지는 함수를 직접 넘기지 못했고, 함수명을 넘겨야 했습니다).

요즘은 PHP나 자바도 익명함수를 파라미터로 넘기는 게 가능하죠. 다른 언어의 장점을 수용하는 일이 많아진 것 같습니다.

파이썬의 웹서버

또 하나의 사례는 파이선 웹서버를 세팅하면서 배운 것입니다. 파이썬을 공부하고 실험 프로젝트를 진행해 출시한 적이 있습니다.

그런데 이 프로젝트에서 가장 당황스러웠던 점은 생소한 문법과 개념이 아니라 웹서버 연동 부분이었습니다. PHP는 아파치를 쓰면 되고 자바는 톰캣을 쓰면 되는데 파이썬에는 그런 게 없었던 거죠. 파이썬은 웹서버 선택지가 많았고 저에겐 모두 생소했습니다.

그래서 그냥 익숙한 아파치 cgi에 연동했는데요. 세상에 이렇게 느릴 수가. 그제서야 제가 뭔가 선택을 잘못했다는 것을 알았습니다.

웹개발에서 시야가 넓어지는 경험이었다고 할 수 있는데요. 웹서버를 구현하는 방법이 실질적으로 다양할 수 있다는 것을 그제서야 알게 됐습니다.

이런 일을 겪고 나서 저는 웹서버와 웹 어플리케이션 서버(WAS)가 개념적으로 구분되는 이유를 이해할 수 있었습니다. 웹서버는 앞단에서 HTTP 요청을 처리하고, 뒷단에서 웹 어플리케이션 서버가 PHP나 파이썬 같은 동적 언어의 해석을 맡는 것이었죠! PHP만 할 때는 아파치가 두 역을 다 하고 있었으니 이런 구분이 왜 있는지 굳이 생각할 필요가 없었습니다.

이런 점을 이해하고 나자 나중에 PHP 서버를 nginx와 php-fpm으로 구성할 때 개념을 이해하는 데 도움이 됐습니다. 이 경우는 웹서버와 웹 어플리케이션 서버가 구분됐으니까요.

자바 맵과 PHP 배열

이번에는 고생 끝에 언어의 설계 철학과 사고방식을 따르는 것이 유리하다는 것을 느낀 사례입니다.

PHP는 배열로 거의 모든 것을 처리합니다. 그런데 자바에는 ArrayList도 있고, HashMap도 있고, 여하간 이런 자료 구조가 엄청 많죠. 따라서 PHP와 달리 자바에서는 용도에 따라 자료 구조를 골라 써야 합니다.

PHP의 배열에 익숙했던 저는 자바에서도 Map을 PHP의 배열처럼 이용하려고 애썼습니다. 디비 결과값도 Map으로 받으려고 하고, 객체 간 넘겨 주는 데이터도 Map으로 처리하려고 애썼습니다.

그러나 뜻대로 되지 않았고 오히려 효율은 매우 낮아졌습니다.

한참을 애쓰다가 자바에서는 그냥 클래스를 이용하는 것이 더 간편한 방법이라는 것을 깨닫게 됐습니다. 언어의 패러다임에 따라 다른 많은 기능들이 클래스를 이용하는 것에 맞춰져 있는데 저는 그런 환경에 어긋나는 선택을 했던 것이죠.

해당 언어의 설계 철학과 사고방식을 따르는 것이 실질적인 이득이 있다는 것을 이 때 알게 됐습니다.

결론

주력이 아닌 언어들을 몇 개 건드려 보기는 했습니다만 대체로 까먹었습니다. 그러나 배우고 느낀 게 남아 있다는 점이 중요한 것 같습니다. 이런 지식은 시야가 넓어지는 데 도움이 됐습니다.

꼭 깊이 알아야만 도움을 얻는 것은 아닙니다. 그보다는 새로운 언어를 배울 때는 그 언어만의 설계 철학과 사고방식이 무엇인지 잘 살피면서 학습하려고 노력하는 편이 좋다고 봅니다. 그래서 어떤 느낌을 얻으면 그것을 통해 발전을 이룰 수 있는 것 같습니다.

한 가지만 더 이야기하자면, 이는 언어에만 국한되는 것은 아니고 프레임워크와 라이브러리를 사용할 때도 해당하는 이야기입니다.

👇 카테고리 글 목록

대표글

댓글 남기기