본문 바로가기

소프트웨어 이야기/장고와 루비온레일즈

Django VS Ruby On Rails

Django가 루비온레일즈를 보고 만들었다고 하는데, 어떤 점이 같고 다른지 정리해보고자 한다.


공통점

1. 마이그레이트 파일로 테이블을 관리한다. 

   

레일즈가 schema_migrations 테이블에 마이그레이트 코드를 관리한다면,


 

장고는 애플리케이션이름과 마이그레이트 파일명 단위로 마이그레이트 코드를 관리한다. 

2. 기타 등등

* 마이그레이트로 테이블을 만들면, 자동으로 id 필드를 추가해준다.  

* 모델의 CRUD 페이지를 자동으로 만들어주는 어드민 기능이 루비온레일즈의 스캐폴드 기능이랑 유사하다. 

* 루비온레일즈에서 레코드가 추가/수정된 시각을 created_at, updated_at에 저장하는 것 처럼, 장고도 비슷한 개념이 있다. 


다른점

1. 루비온레일즈는 MVC 모델을 기반으로 작성된다. 그런데 Django는 MTV 모델로 작성된다. 

   루비온레일즈에서 이야기하는 View는 Django에서 Template이다. 

   그리고 루비온레일즈에서 하는 Controller 역할을 Django에서는 View에서 한다.

2. Django는 앱별로 도메인을 관리한다.

     

     왼쪽이 레일즈라면, 장고는 오른쪽 이미지 같은 느낌이다. 참고 

    루비온레일즈는 가벼운 애플리케이션을 만들때 좋은것 같다. 반면 코드양이 많아지면, 관리가 어렵고, 나누기도 어렵다.

    그런데 Django는 하나의 프로젝트 안에 여러 애플리케이션이 있는 개념이다. 그래서 나중에 애플리케이션을 떼낼때 편할 것 같다. 

    레일즈 엔진으로 애플리케이션을 컴포넌트화해서 붙이는 개념이 Django에서는 일반 프로젝트로 사용되는 개념인거같다. 

3. Django에는 Form Object 개념이 기본으로 내장되어 있다.   

   예전에 루비온레일즈를 리팩토링 하는 방법을 찾아보다가, Form Object라는 개념을 알게되었다. 

   루비온레일즈에서 form object를 사용하려면, reform 같은 gem을 사용해야한다. 

   그런데 django에서는 그냥.. Form Class를 가져다 쓰면 된다. 


생각

루비온레일즈는 장고보다 이해하기 더 쉽고, 간단하다는게 장점이다. 스캐폴드도 편하고, 설정도 편하고, 더 직관적인 것 같다. 반면, 프로젝트의 규모가 커지면, 코드가 복잡해지고, 코드를 분리해내기 어렵다는게 아쉬운 점이다. 

그래서 장고는 루비온레일즈의 장점만 가져오고, 약점은 보강하려고 했던것 같다. 

한 프로젝트 안에서 여러 도메인을 애플리케이션 별로 관리하고, Form Class 등을 적용한걸 보면, 코드의 복잡도를 낮추려고 신경쓴거같다. 


참고