규도자 개발 블로그
여러가지 언어와 프레임워크들을 써오며 느꼈던 단상 본문
여러가지 언어와 프레임워크들을 써오며 느꼈던 단상
현 상태를 말하자면 이렇다. 나는 국비학원에서 프로그래밍을 처음 접했고 교육 커리큘럼은 C와 Java로 시작해서 학원 수행과제로 Java로 네이티브 앱을 만든 다음 PHP를 이용해 웹 프로젝트를 만들고 해당 결과물을 포트폴리오로 하여 PHP와 워드프레스를 주로 사용하는 회사에 취직했다. 개인적으로는 Python과 Django Rest Framework를 백엔드로, React와 Next를 프론트엔드로 사용하는 프로젝트를 진행 중이며 회사에서는 그간 PHP코드로 쌓아왔던 레거시 코드들을 Java Spring으로 컨버전하는 과정을 겪고 있다. 이러한 과정들 속에서 많은 걸 느꼈고 혹시 언어나 도구를 선택하려는 프로그래머, 프로그래밍을 시작하려는 학생 등에게 도움이 됐으면 하는 바람으로 글을 남긴다. 이건 업계에 몸을 담고 있으면서 체득한 것들이라 무엇인가 결정하려는 단계에 있는 사람들에게는 어느정도 도움이 될 것이다. 그리고 나는 웹 개발자이므로 웹 프레임워크 위주로 설명하겠다.
먼저 PHP
좋은 언어이다. 하지만 한국에서의 대접이 박하다. 그 이유를 추적해보자면, 많은 프로그래머를 배출해내고 있는 지금의 국비교육 학원들은 당장에 코드를 수정하고 결과물을 만들어낼 수 있는 인력을 만들기 위해 올바른 PHP사용법보다는 쉬운PHP사용법을 가르쳐서 산업일선에 투입시키는 경우가 부지기수일 뿐더러(내 얘기다) 결과물을 빨리빨리 보고 싶어 하는 한국 산업구조의 특성 상 PHP로 짠 코드는 로직과 뷰가 마구잡이로 뒤섞인 끔찍한 혼종일 확률이 높다. (내가 짠 코드도 이러하다)
이로 인해 PHP는 구리다는 인식이 넓게 퍼졌다. PHP가 구리다고 설파하는 사람들 중에 PHP의 탄생배경을 들먹이는 사람이 있는데(프로그래밍보단 문제해결에 치중을 둔 언어철학) 과연 JS도 탄생배경을 들먹이며 JS는 구리다고 말할 사람이 있을까? 당연히 있기 마련이다. 구린 것도 사실이긴 하다. 하지만 프로그래밍에 그 미묘한 "미적인 언어구조의 가치"를 들먹인다면 세상에 구리지 않은 언어가 어디있을까. 언어는 수단이지 추구의 대상이 아니다. 그저 PHP는 낮은 학습곡선과 워드프레스라는 강력한 엔진을 통한 높은 보급률. 그에 따른 저품질 코드 양산으로 인해서 "구리다"는 인식이 생긴 것이다. 유독 완장을 중시하는 한국에서 심하게 말이다.
PHP의 프레임워크에 대해서 말하자면 대표적으로 코드이그나이터와 라라벨을 들 수 있다. 코드이그나이터는 제하더라도 라라벨은 외국에서 엄청난 인기를 구가한다. 다루긴 쉬워도 속도가 떨어지긴 하지만 유독 한국에서는 평가가 박하다. 왜냐. 한국 생태계를 지배하고 있는 Java라는 언어와 Spring Framework가 있기 때문이다.
Java와 Spring Framework
가히 한국을 점령하고 있다고 해도 누구도 부인하지 못할 거대한 산이다. 검증과 안정을 최고로 중시하는 정부에서 전자정부프레임워크라는 이름으로 모든 정부 사이트를 제작해야할 기준프레임워크를 규정하고 있는데 그것이 Spring3.0을 기반으로 하고 있다. 돈 떼먹을 일 없고 예산도 넉넉한 국내 프로젝트를 따기 위해선 Spring은 IT기업들이 필수로 가져가야 할 기술스택이 되었고, 그렇게 Spring에 대한 노하우, 라이브러리, 교육자료 등은 기하급수적으로 늘어나기 시작한다. 그렇게 Spring은 한국 웹 표준이 되었다.
스프링을 그저 정부 때문에 표준이 된 운 좋은 프레임워크라고 까는 게 아니다. 스프링은 실로 훌륭하고 멋진 프레임워크이다. 프레임워크마다 추구하는 가치가 있는데 스프링은 의존성주입과 제어역전, 관점지향 프로그램을 통해 대규모 웹 어플리케이션을 만드는 데에 최적화돼있다. 동시에 작업하기도 편하고 테스트 주도 개발하는 데에도 장점이 있으며 부하를 분산하는 데에 있어도 커다란 장점이 있다. 생산성이 낮다는 단점이 있지만 인프라가 넉넉하다면 선택하지 않을 이유가 없다. 하지만 너무 편중돼있다. 실로 IT대기업이라고 할 수 있는 회사의 구인글을 보면 대부분의 서비스가 Java, Spring으로 제작됐다는 걸 알 수 있을 것이다.
대기업에 들어가고 싶다? Java와 Spring은 필수이다. 그렇다고 규모가 작은 데서는 안 쓰는 것도 아니다. 지금도 계속해서 관련 노하우와 기술스택이 쌓이고 있으므로 Java와 Spring을 할 줄 안다면 한국에서 개발자로 먹고살기에는 부족하지 않을 것이다. 다소 엄격한 문법과 컴파일언어라는 특징 때문에 반강제적으로 코딩스타일이 깔끔해질 수밖에 없다. 한국어로 된 관련 자료가 많아서 레퍼런스를 찾는 데에 굉장히 편하다. 단적인 예로 django를 위해서는 거진 외국 웹을 뒤졌는데 Spring을 위해서는 한국 웹에서도 수월하다.
Pytohn
코딩교육과 딥러닝. 텐서플로우와 구글의 푸시로 많은 관심을 갖고 있는 언어이다. 나도 비슷한 연유로 관심을 갖게 됐다가 간단하고 술술 읽히는 문법에 사로잡혀서 계속 공부하고 개인프로젝트도 진행하고 있는 언어이기도 하다. 그리고 무엇보다 요즘 청소년들 코딩교육이 파이썬으로 이뤄지고 있으니 나중에 인력수급에도 장점을 가질 수 있게 되지 않을까 하는 기대도 있다.
DRF(Django Rest Framework)라는 멋진 프레임워크로 쉽게 Restful API를 구현할 수 있다. 전통적인 html코드를 통한 뷰에서 JS를 통한 Virtual DOM을 빠르게 생성 및 파괴하여 동적인 화면을 그려주는 라이브러리나 프레임워크들, 그러니까 React, Angular, Vue등으로 넘어가는 과도기인 지금 최고의 생산성을 보장할 수 있는 언어와 프레임워크가 아닌가 하는 생각이다. 그 생각 때문에 나조차도 그것으로(DRF, React) 플랫폼을 작업하고 있다.
선입견과 싸우는 개발자들
자바가 아닌 다른 언어에 대해서 미간을 찌푸리는 경우를 많이 봐왔다. 생산성을 중시하여서 PHP로 만들었던 플랫폼을 회사가 자리잡고 나서 Java와 Spring으로 컨버전하는 것도 많이 봐왔다. 나름 왜 이렇게 한국이 자바에 열광하는지에 대한 납득이 필요했다. 그래서 많이 찾아보고 배워보고 만들어봤는데 결과는 자바와 스프링에 대한 수많은 장점으로 충족됐다. 개인적으로 좋아하는 언어와 프레임워크이기도 하다. 하지만 그, 기준이 아닌 것들에 대한 안좋은 선입견은 지양해야하는 바가 아닌가 싶다.
위에도 말했다시피 언어와 프레임워크는 문제해결을 위한 도구이다. 정형화된 문제해결을 위해 다른 대안들이 제시되었고 지금도 제시되고 있다. 그것은 php, java, python, go, js... 등등으로 분화되고 또 그 안에서 codeigniter, laravel, spring, django, flask, nextJS, react, expressJS...등등 수많은 방법으로 분화되었다. 이들 사이에 우위가 존재할까? 완전히 사장되어 언급되지 않게 될 정도의 기술이 아니라면 그건 아직 아무도 모른다는 게 정답일 것이다.
생산성을 중시한다면 python이나 php를 선택할 수 있다. 그중에서도 어느정도 정형화돼있는 형태에서 비지니스로직에 대한 고민을 중점에 두고 해결해나가고 싶다면 laravel, 혹은 django를 선택할 수 있다. 좀 더 상상의 나래를 펼처가고 싶다면 codeigniter나 flask를 이용할수도 있고 말이다. 퍼포먼스에 중점을 둔다면 컴파일언어를 인터프리터가 이길 수 없으니 자바를 선택하게 될 것이다. 각을 다투는 금융권 인프라라면 C나 C#등 보다 저수준 접근이 가능한 언어를 쓸 것이다. 어찌됐든 인터프리터언어와 컴파일언어는 태생적 한계가 있으니 말이다. 확장성은 설계의 문제이나 스프링의 DI는 굉장한 장점이다. 하지만 이것도 개발자 나름인게 Spring을 쓰면서 활용을 안 할 수도 있는 부분이다. 그리고 DI와 IOC개념 자체도 여러 프레임워크를 써본 사람은 알겠지만 굉장히 많은 프레임워크에서 차용하고 있는 방식이기도 하고 알게모르게 접해왔을 것이다. (Sping의 어노테이션, 워드프레스의 액션과 훅, Django에서 데코레이터를 이용한 방법 등) AOP또한 django의 context processor라는 이름으로 찾아볼 우 있다. DI와 IOC, AOP를 차용한 점은 스프링이 우월한 이유가 될 수 없다고 말하고 있는 것이다.
정답은 없다
정답은 없다. 지구에 사는 사람 수만큼 다른 종류의 생각이 존재하고 그 사람들이 생각하는 문제해결방안 만큼의 로직이 존재한다. 그 규모 또한 천차만별이고 언어나 도구를 선택하는 사람의 기호 또한 가늠할 수 없다. 물론 먹고 사는 문제와 결부시키면 가장 보편적인 가치를 추구하는 게 올바른 방향이겠지만 보편성이 올바름을 의미하진 않는다. 옛날에는 노예와 마녀를 당연시 여겼던 것처럼 말이다. 그래도 괄목할 수 있는 건 세상은 항상 좀 더 좋은 방향으로 움직이고 있다는 것이고 우리는 그 혜택을 이용할 수 있다는 점이다. 그냥 언어나 프레임워크의 우위를 논하는 게 우습고 개탄스러워서 구구절절 적어봤다. 그리고 이 글은 진리도 아니고 내 생각일 뿐더러 싸우자고 적은 게 아니다.
'잡설' 카테고리의 다른 글
$(달러) 위치를 외우는 재미있는 방법 (0) | 2019.06.28 |
---|---|
삶의 기본 값은 false이다. (0) | 2019.06.28 |
도메인을 등록했더니 투데이가 줄었다. (0) | 2019.05.24 |
프로그래밍에 있어서 추론과정의 가치 (0) | 2019.05.11 |
알고리즘 문제들을 풀면서 느꼈던 단상 (0) | 2019.04.09 |