모바일 웹 개발을 위해 Ruby on Rails 선택하다

다시 Ruby on Rails를 만나다.

오랫만에 블로그에 글을 포스팅하는 것 같다.

한동안 하이브리드 앱에 관련된 연구와 개발을 하다 다시 웹 개발 연구를 하게 되었다. 하이브리드 앱을 개발할 때 HTML5 기반의 지식을 가지고 모바일 웹을 만드는 프로젝트에 참여하게 된 것이다.

우리는 기존 시스템에서 **API Gateway** 를 사용하여 [microservice](http://microservices.io/patterns/microservices.html) 구조로 설계를 변경하였다. 이러한 이유로 여러가지 API를 가지고 모바일 웹을 개발하게 되었고 빠른 시간에 개발을 해야하는 미션을 받게 되었다.

전체 시스템은 자바기반 프로젝트로 운영되고 있었지만 빠른 프로토타이핑이 필요하게 되었고, 혼자서 모바일 웹을 개발하기 위한 빠른 도구들이 필요하게 되었다.

  1. Spring Framework:

    가장 익숙하고, 안정성도 높고 많은 참고 자료가 있는 Spring은 자바기반 서비스 개발을 할 때 장점이 많다. 하지만 우선 Spring 은 제외했다. 자바기반의 프로젝트를 만들면 이후 다른 시스템과 라이브러리 공유를 할 수 있는 장점이 있긴 했지만 혼자서 빠르게 개발하기 위해서는 어울리지 않는 환경이라 판단했다.

  2. Spring Boot:

    Spring Framework보다 빠르게 개발할 수 있는 Spring Boot는 최근에 보고 있는 프레임워크 중에서 가장 흥미로운 프레임워크였다. 실제 다른 토이프로젝트에 Spring Boot를 주력으로 사용하여 개발을 하고 있다. 하지만 Spring Boot의 가장 큰 불편함은 컴파일 속도이다. Node.js 프로젝트를 경험하고 난 이후, Gradle 기반으로 프로젝트를 빌드하는 시간이 여간 길게 느껴지는 것이 아니였다. 좀 더 즉각적으로 개발할 수 있는 환경이 필요했기 때문에 다른 환경을 검토하게 되었다.

  3. Node.js:

    구체적으로 말하자면 Express를 사용하여 개발하는 방법을 검토했지만 Node.js에서 가장 아쉬운 부분이 Full Stack Framework가 없다는 것이다. Express.js는 유연하게 설계가 되어서 다양한 미들웨어를 설치할 수 있지만 하나의 풀 스택이 환경이 없다는 것은 서비스 안정성과 연관이 있기 때문에 디버깅하거나 환경을 맞추기 어렵다고 판단했다. Node.js 환경을 좋아해서 대부분 Node.js 기반으로 개인 프로젝트를 하고 있지만 좀 더 안정적인 환경이 필요하다 판단했다. 뿐만 아니라 이미 Java 기반 코드에 익숙한 팀원들이 함수기반 Async 기반의 코드를 함께 이해하는데 시간이 필요할 것으로 생각했다. 그리고 여러가지 view templates들이 존재하지만 RoR의 템플릿처럼 가독성이 좋고 부분 개발을 할 수 있는 마음에 드는 템플릿이 없었다. MEAN 스택이 있지만 IE 고객을 고려하는 부분에서 AngularJS는 아직 서비스에 도입하기에는 무리가 있어 아쉽지만 Node.js 기반 환경을 선택하지 않았다

  4. Ruby on Rails:

    공대 3학년 프로그래밍 언어 수업시간에 새로운 언어에 관한 자료 연구 발표 이후 계속 사용하고 있는 RoR은 가장 사랑하는 웹 개발 프레임워크이다. 몇몇 사람은 성능문제를 이야기하지만 RoR만큼 안정적으로 빠르게 개발해서 서비스로 디플로이 시킬 수 있는 프레임워크는 아직 없는것 같다. 우선 MVC 개발 환경을 보장해주고 시스템 구조상 코드 관리가 쉽다. 또한 특별한 미들웨어 없이 완벽한 view template을 사용할 수 있고, ORM을 사용하여 쿼리 작성시간을 줄이고 객체 관계에 집중할 수 있다. 뿐만 아니라 gem을 사용하여 많은 라이브러리를 얻을 수 있기 때문에 복잡하거나 시간이 오래걸리는 코드 작성을 줄일 수 있다. 스타일 개발을 위해 sass를 사용하는데 RoR에서는 기본적으로 sass를 지원하기 때문에 pre-compile을 할 필요가 없다. 그리고 프레임워크에서 coffeescript를 지원하기 때문에 안전한 JavaScript 코드를 작성할 수 있으며 pre-compile을 하지 않고 발로 적용할 수 있다. assets 기능과 tubolink 기능은 개발 속도와 시스템 속도를 향상시켜준다. 그리고 Ruby가 사람이 읽기 쉬운 코드를 작성하기에 코드자체 의미를 높일 수 있는 장점이 있다. 그리고 RoR을 생각하면서 가장 매력적이고 중요한 것이 바로 Agile 개발을 할 수 있다는 것이다.

이런 이유로 Ruby on Rails를 가지고 다시 서비스 개발을 진행하게 되었다. 물론 RoR에도 여러가지 단점이 있고 고려해야할 사항들이 많지만, 이번 프로젝트는 빠르게 모바일 웹을 개발하는데 포커스를 맞추었기 때문에 RoR을 선택했다.

국내는 Node.js의 열풍이 한창이고 RoR은 뜨거운 감자로 생각하는 사람들도 있을지 모르겠다. 하지만 서비스 개발이라는 것이 필요에 따라 나에게 가장 적합한 환경을 가지고 개발하는 것이 좋다고 생각한다. Node.js나 Spring보다 RoR이 더 좋다고 말하고 싶지 않다. 모든 프레임워크는 장단점이 존재하고 이번 프로젝트에 RoR이 더 적합하다고 생각했을 뿐이다. 개인적으로 Node.js를 사용하여 프로젝트를 많이 진행하고 있음에도 불구하고 RoR을 선택하게 된 이유는 앞으로 블로그를 통해서 자세하게 이야기할 것이다. Node.js와 Spring으로 프로젝트를 진행하는 동안 RoR도 많은 변화가 있었다. 기존의 RoR에는 볼 수 없었던 다양한 기능이 추가 되었는데 이것은 프로젝트를 진행하면서 포스팅을 진행할 예정이다.

하이브리드 앱에 관한 연구는?

하이브리드 앱은 HTML5 기술을 사용을 한다. 이번 프로젝트는 RoR 기반에서 HTML5를 사용하여 개발을 진행하는 것에 대해서 중점적으로 연구한다. 이런 이유에서 모바일 웹은 하이브리드 앱과 긴밀한 연관성이 있다. 이런 부분에 관해서 당분간 포스팅을 진행할 것이다. 또한 하이브리드 앱에 관한 연구는 계속해서 함께 연구해갈 것이다. 이미 하이브리드 앱으로 개발한 서비스에 대한 관리도 필요하고 모바일 웹과 앱의 모호한 경계선을 넘으며 서비스를 해야하기 때문에 하이브리드 앱과 모바일 웹에 관한 연구는 계속될 것으로 기대된다.