기본 콘텐츠로 건너뛰기

여러가지 언어와 프레임워크들을 써오며 느꼈던 단상

여러가지 언어와 프레임워크들을 써오며 느꼈던 단상

여러가지 언어와 프레임워크들을 써오며 느꼈던 단상

현 상태를 말하자면 이렇다. 나는 국비학원에서 프로그래밍을 처음 접했고 교육 커리큘럼은 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를 차용한 점은 스프링이 우월한 이유가 될 수 없다고 말하고 있는 것이다.

정답은 없다

정답은 없다. 지구에 사는 사람 수만큼 다른 종류의 생각이 존재하고 그 사람들이 생각하는 문제해결방안 만큼의 로직이 존재한다. 그 규모 또한 천차만별이고 언어나 도구를 선택하는 사람의 기호 또한 가늠할 수 없다. 물론 먹고 사는 문제와 결부시키면 가장 보편적인 가치를 추구하는 게 올바른 방향이겠지만 보편성이 올바름을 의미하진 않는다. 옛날에는 노예와 마녀를 당연시 여겼던 것처럼 말이다. 그래도 괄목할 수 있는 건 세상은 항상 좀 더 좋은 방향으로 움직이고 있다는 것이고 우리는 그 혜택을 이용할 수 있다는 점이다. 그냥 언어나 프레임워크의 우위를 논하는 게 우습고 개탄스러워서 구구절절 적어봤다. 그리고 이 글은 진리도 아니고 내 생각일 뿐더러 싸우자고 적은 게 아니다.

from http://this-programmer.com/247 by ccl(S)

댓글

이 블로그의 인기 게시물

Coupang CS Systems 채용 정보: 쿠팡 운용 관리 시스템을 구축 하고...

Coupang CS Systems 채용 정보: 쿠팡 운용 관리 시스템을 구축 하고... Global Operation Technology는 상품을 고객에게 지연 없이 전달 될 수 있도록 하는 조직입니다. 1997년, 초창기 아마존에 입사한다고 상상해보세요. 그 당시 누구도 e-commerce 산업이, 아마존이라는 회사가 지금처럼 성장하리라고는 생각하지 못했을 것입니다. 하지만, 그 당시 아마존을 선택한 사람들은 e-commerce 산업을 개척했고, 아마존을 세계적인 회사로 성장시켰습니다. 2016년 '아시아의 아마존'으로 성장하고 있는 쿠팡, 당신에게 매력적인 선택이 아닐까요? Global Operation Technology: eCommerce에서 주문을 한 뒤 벌어지는 상황에 대해서 호기심을 가져보신 적이 있나요? Global Operation Technology는 상품을 고객에게 지연 없이 전달 될 수 있도록 하는 조직입니다. 매일 최첨단 소프트웨어 기술을 이용해 고객의 주문을 받고 상품을 어느 창고에서 출고 시킬지, 포장을 하나의 박스 또는 여러 개로 나눌 것인지, 어떤 배송 루트를 선택하고 어떻게 고객에게 배송 상태를 보여줄지 결정하는 시스템과 서비스를 개발 합니다. What Global Operations Technology does: CS and C-Returns System 적극적 고객서비스를 바탕으로 고객의 목소리를 통해 끊임없이 고객 에게 서비스를 제공하고 Andon 메커니즘을 통해 고객의 목소리를 회사 전체와 공유합니다. 그리고 고객 문제 해결과 구매 이후 벌어질 수 있는 고객 문제를 사전에 예방하기 위한 시스템 개발을 통해 미래의 상황을 예측 합니다. Tranportation System TSP (Traveling Salesman Problem) 와 같은 CS 최적화 관리 문제를 다룹니다.배송 물품의 실시간 추적, 3P 하드웨어와 소프트웨어를 통합, 각 배송 루트에 할당되는 물량 예측하고 T...

스프링 프레임워크(Spring Framework)란?

스프링 프레임워크(Spring Framework)란? "코드로 배우느 스프링 웹 프로젝트"책을 개인 공부 후 자료를 남기기 위한 목적이기에 내용 상에 오류가 있을 수 있습니다. '스프링 프레임워크'가 무엇인지 말 할 수 있고, 해당 프레임워크의 특징 및 장단점을 설명할 수 잇는 것을 목표로합니다. 1. 프레임워크란? 2. 스프링 프레임워크 "뼈대나 근간을 이루는 코드들의 묶음" Spring(Java의 웹 프레임워크), Django(Python의 웹 프레임워크), Flask(Python의 마이크로 웹 프레임워크), Ruby on rails(Ruby의 웹 프레임워크), .NET Framework, Node.js(Express.js 프레임워크) 등등. 프레임워 워크 종류 : 3. 개발 시간을 단축할 수 있다. 2. 일정한 품질이 보장된 결과물을 얻을 수 있다. 1. 실력이 부족한 개발자라 허다러도 반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다. 프레임워크를 사용하면 크게 다음 3가지의 장점 이 있습니다. 프레임워크 이용 한다는 의미 : 프로그램의 기본 흐름이나 구조를 정하고, 모든 팀원이 이 구조에 자신의 코드를 추가하는 방식으로 개발 한다. => 이러한 상황을 극복하기 위한 코드의 결과물이 '프레임워크' 입니다. 개발자는 각 개개인의 능력차이가 크고, 따라서 개발자 구성에 따라서 프로젝트의 결과 차이가 큽니다. 2. 스프링 프레임워크(Spring Framework) 자바 플랫폼을 위한 오픈 소스 애플리케이션 스프링의 다른 프레임워크와 가장 큰 차이점은 다른 프레임워크들의 포용 입니다. 이는 다시말해 기본 뼈대를 흔들지 않고, 여러 종류의 프레임워크를 혼용해서 사용할 수 있다는 점입니다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크 이다. 여러 프레임워크들 중 자바(JAV...

Flask 18. jQuery와 ajax

Flask 18. jQuery와 ajax 현재 우리는 api를 만들고 있다. api를 사용하기 위해서는 ajax를 사용해야한다. 그리고 ajax를 편하게 쓸 수 있도록 도와주는 것이 jquery라이브러리이다. ajax는 비동기로 서버에 요청할 수 있다. 브라우저에 XMLHttpRequest객체가 있어서 이것을 사용해서 서버에 데이터를 요청할 수 있다. 기존에는 웹에 접근할 때 주소에다가 서버의 주소를 씀으로써 데이터(페이지)를 요청할 수 있고, form을 만드는 방법이 있다. 이러한 방법들은 페이지 이동이 일어나서 서버에서 무조건 응답으로 웹페이지를 만들어서 응답해야하는 단점이 있었다 그러나 api를 사용하면 리소스 중심으로 데이터의 이동만 일어난다. 클라이언트는 데이터만 받기 때문에 데이터로 웹을 만들어야한다. 화면은 이미 만들어져있는 상태에서 비동기로 화면을 전환하지 않고, 서버에 데이터 요청을 한 후 그 데이터를 기반으로 웹에 그 데이터를 반영하는 것이다. 이것들은 백그라운드에서 일어난다. 이것을 위해서는 자바스크립트를 이용해야하고 jquery를 이용할 것이다. jquery는 여러 셀렉터를 사용할 수 있어서 편하다. 자바스크립트 작업을 좀더 생산성 좋게 작업할 수 있도록 해준다. 가장 큰 특징은 ajax요청을 아주 쉽게 할 수 있다. 정리 비동기 요청을 위해서 ajax를 사용할 것이고, 그러나 순수자바스크립트는 어렵기 때문에 jquery를 사용할 것이다. 공유하기 글 요소 저작자표시 from http://ohdowon064.tistory.com/134 by ccl(A) rewrite - 2020-03-24 10:54:10