남들이 쓴다고 하면 뜯어 말리는 기술 RoR

생태계가 맛이 갔다

개발자가 다 떠나고 있는건지 Archive된 리포지터리가 상당히 많이 보인다.

Rails운영동력 꺼짐

RoR의 장점을 흡수해서 다른 기술들은 계속 발전하고 있는데
RoR는 10년째 제자리다.

디렉토리 구조도 새로운 기능 추가도…

최신버전인 7.0에서 어떤 기술을 표준으로 사용할지도 조금 애매한 모양이다. js관리 라이브러리도 서너개가 동시에 따로 개발되고 있는 것 같다. 안그래도 버전업이느린데…. 세개로 화력을 분산까지?

인터페이스가 없다보니 하위 라이브러리들 구현이 지좆대로임

Devise의 Omniauth를 보면

google, facebook, github, gitlab, keycloak 죄다 생긴게 다름
openid와 oauth2차이때문에 다른게 아니라 그냥 구조 자체가 다름

자바계열 주로 하다가 와보니 이런 문제가 있네
언어 자체의 문제이기도 하지만…
커뮤니티 리더가 표준을 제시 해 주면 따를텐데 그렇게 하지 못하고 있음

프로젝트 구조가 망가지고 있다.

js 폴더는 어디일까?

  • /app/javascripts
  • /app/assets/javscripts

왜 두개가 같이 돌아가고 있는걸까
sprocket와 importmap, jsbundling, cssbundling …

루비는 애초에 자유로운 프레임워크가 아니다.
구동 속도도 빠르지 않고…

쉽고 빠르게 개발하기 위해 사용하는 기술인데 … 이렇게 복잡해진다???

내 라이브러리는 어디다가 넣어야하나

커뮤니티에 봐도 명확한 답을 가진 사람은 없음

/app/lib? /lib? /app/libs

새로 추가한 라이브러리는 include 해서 써야되는데 불편…
include ‘../.././libs/ ~~

Active Record migration

active record의 migration이 예전에는 루비만의 장점이었지만 이젠 아니다.
spring도 flyway가 있고 다른언어도 비슷한게 다 나왔다.


솔루션의 시대에서 서비스의 시대로 넘어오면서 마이그레이션의 역할이 축소됐다. 서비스 시작부터 모든 히스토리를 가지고 있을 필요가 없어졌다.
오히려 배포 후 롤백의 필요가 없어진 시점에서 코드베이스에서 사라지는게 좋다.

gitlab처럼 고객마다 다른 버전(6.0, 7.5 9.3, 11.5, 13.3, 15.1 …)이 있는 경우 히스토리가 모두 필요하긴 하다. 대부분의 서비스 회사에서는 1가지 버전만 운영된다.

마이그레이션 코드가 설계될 때 up-down 양방향으로 사용되도록 설계되어 있는데 이것도 문제다. 사실 데이터가 들어간 시점부터 서버 버전이 양방향으로 자유롭게 왔다갔다 할 수가 없다.

1.0 -> 2.0 -> 1.0은 가능
1.0 -> 데이터입력 -> 마이그레이션 -> 2.0 -> 1.0은 가능
1.0 -> 데이터입력 -> 마이그레이션 -> 2.0 -> 데이터입력 -> 1.0은 불가능..가끔 가능

그리고 단방향의 업데이트도 변경이 큰 경우에 가끔 오류가 난다.
gitlab도 12 to 15 업그레이드시에 문제가 발생한 사례가 많다.

이제 다른데서도 다 되는 레일즈의 장점

  • active record 마이그레이션
  • active record orm
  • 관용적 설정
  • active admin

이런데도 바득바득 쓴다고?

예전부터 RoR을 써온 사람들에게는 생산성 높은 기술일 것 같다.
하지만 그 사람들이 node로 전향하면 더 생산성이 높아지겠지…

RoR로 만든 서비스들 (초기서비스만 한 경우도 많음)
-> 대부분 전환 완료 또는 전환

글로벌

twitter, github, gitlab 등등 많은 회사가 사용중?? 사용했었나?
gitlab은 아직 쓰는데

국내

  • 잡플래닛
  • 마이리얼트립
  • 당근마켓
  • 왓챠
  • 업비트
  • 리멤버

대체재

react-next, nest, svelte 등등

RoR 생태계 서열정리 안하냐 – 2023 rails7

RubyOnRails를 쓴다면 이유는?

  • 그냥 프로젝트에 한번 써볼라고
  • ERB 서버사이드 렌더링과 모듈별 리프레시장점을 쓰려고
  • active record + active admin 자동 생성되는거 쓰려고
  • 대충 편하게 되는게 많아서

RoR 생태계 서열문제

리소스 관리기능이 이것저것 너무 난립 해 있고 메이저가 없어서
프로젝트 처음 생성할 때 너무 혼란스럽다.

css는 sprockets로 하고 js는 webpacker로 하라고?
아닌가 js는 importmap으로 하라고?

sprokets, importmap, webpacker, … 또 많이 있는데…

rails7에서 rails/webpacker가 retirement??
하지만 커뮤니티에서 유지되는 shakacode/shakapacker??

SSIBAL
디렉토리 구조는 왜 이런걸까

sprockets는 (js, css)
app/assets/stylesheets
app/assets/javascripts
package.json

webpacker는 (js)
app/javascript
package.json

importmap은 (js)
pin

커뮤니티는 별 수 없지만 rails 재단에서는 한쪽만 밀어야하는거 아닌가
rails7에서  공식으로 뭘 쓸지(프로젝트 생성할 때 포함될것들)

최종(이면 좋겠다)

rails/cssbundling-rails
rails/jsbundling-rails

후기

이번에 시작한건 계속 이걸로 가겠지만(?) 간단한 프로젝트를 새로 할거면 node계열로 하는게 낫겠다.