친구 과제 훈수썰

친구가 이번 학기에 데이터베이스 수업을 듣는다.

나도 학부 때 들었던 수업이거니와 우리 연구실에서 수업/조교하는 과목이기도 하다.  최근 이 수업을 악명높게 만드는 마지막 프로젝트가 나갔는데, 짧게 말하자면 웹사이트 만들라는 얘기다. 회원가입, 로그인, 게시글 작성 등의 기본적인 기능이 있는 웹사이트를 ORM 없이 RAW SQL을 날려서 조작하는 것으로 학생들의 ERD 설계와 SQL 능력을 시험하기 위함 (…) 이라고는 하지만, 확실히 싫어할만한 요소가 많다. 대충 종합해보자면 SQL이 비단 웹에서만 쓰이는 건 아니니, 웹 말고도 다른 주제로도 충분히 가능하지 않냐는 것.

과제는 이미 정해졌으니, 이 과제엔 다루기 쉬운 것으로 유명한 Node.js가 제격이라고 생각했다. 잘못 다루기 쉬운 것으로도 매우 유명한 악명높은 언어를 사용하지만, 웹 개발에 이보다 더 괜찮은 언어가 있을까. 복잡한 스레드 관리도 없고, I/O Bound Job이 많은 웹 서비스 특성 상 꽤나 읽기 쉬운 코드가 나온다고 생각했다.

마침 연구실에서도 Node.js를 SQL Script로 많이 쓰고 있고, 연구실 내의 프로젝트끼리 통신이 필요할 때 TCP보다 HTTP JSON을 더 선호하다보니 연구실에서 자주 쓰이는, 그리고 내가 선호하는 라이브러리를 추천해줬다. express보다는 koa를, ejs보다는 mustache를.

그렇게 잘 추천해줬다 싶었는데 친구의 다른 팀원들이 Vue.js를 쓰는게 낫지 않겠냐며 아직 프로젝트 스택에 대한 의견이 좁혀지지 않은 것 같았다. Node-only 프로젝트와, Vue + Node 프로젝트의 장단점을 명확하게 이해시키는 작업이 필요했다.


Vue + Node로 시작하면 할 일이 많이 늘어난다는 것에 나머지 두 명이 이해하지 못하는 상황이였다.  그리고 해당 팀원들 모두 Vue.js에 대한 깊은 이해나, 높은 흥미를 보이는 것도 아니였으며, 그냥 큰 일 만들지 말고 스펙만 맞춰서 과제를 제출하고 털어버리는 것에 더 집중하는 것으로 뜻이 모여져 있었는데도 Vue.js를 쓰겠다는 소리에 너무나 답답했다.

그 쪽에서 주장하는 바는 다음과 같다. Vue의 학습비용이 존재한다는 것은 알고 있다. 하지만, 요즘 유행하는 기술이기도 하고 프로젝트 구조도 깔끔하게 나올 수 있다면, 프로젝트 코드 또한 깔끔해져서 더 적은 스트레스로, 더 빠른 시간에 구현할 수 있지 않겠냐는 것.

Vue 쉽다. React보다 쉽다. Angular보다는 훨~씬 쉽다. Angular는 All-in-one이라서 이것 저것 배울 것이 많아서 힘들고, 언어도 조금 장벽이 있는 경우라 친다면, React는 Vue와 비슷하지만 JSX에서 오는 장벽이 있겠다. Vue는 올인원도 아니고, JSX도 보통은 쓰지 않으니 훨씬 쉽다. 하지만, 웹프론트엔드에 대한 이해가 거의 전무한 상태에서 Vue를 접하고, Webpack, vue-router, vuex, axios 등의 라이브러리에 대한 러닝커브까지 합한다면 koa + mustache가 훨씬 낫다고 생각했다. 아니 애초에. 어떤 변태가 (프론트엔드에 대한 흥미도 없이) 데이터베이스 수업에 프론트엔드를 따로 짜냐고… 그런다고 추가 점수가 있는 것도 아닌데!

정말 처음에는, 간단히 유저 → 노드 → 유저의 구조에서 유저 → 뷰 → 노드 → 뷰 → 노드로 레이어가 생긴다. 프론트에서 백엔드에 요청을 보내는 부분, 그리고 백엔드의 응답을 처리하는 부분이 추가적으로 생기는데 왜 굳이 그 어려운 길을 가려고 하냐며 설득했지만 실패했다. 그래서 너희들이 원하는 Vue를 채택함으로써 얻을 수 있을 거라 기대하는 구조적 깔끔함은 Vue 말고도 여러 라이브러리를 조합해야 가능하다는 것을 어필했다.

결국 천구들을 설득했다. 성공했다. Promise, String interpolation, async/await 등의 키워드를 제시하고 공부하는 정도로 오지랖을 그만두기로 했다. PHP로 짜겠다는 사람이 없어서 오히려 설득이 쉬운 편에 속하지 않나 싶다.