과거 Ruby는 메모리 관리, GVL(Global VM Lock) 및 그린 스레드와 같은 제약으로 인해 확장성 및 동시성 문제에 직면했습니다. 이로 인해 많은 기업이 마이크로서비스 아키텍처로 전환하거나 JRuby와 같은 대안을 모색했습니다. JRuby는 실제 스레드와 Java 라이브러리 접근성을 제공했지만, Java 스타일 Ruby 코드 작성, 라이브러리 불일치(예: syck
파서 문제), 그리고 GVL 없는 환경에서의 스레드 안전성 문제와 같은 새로운 복잡성을 야기했습니다.
현대 Ruby의 변화와 모놀리스의 재조명
- 마이크로서비스 재고: 연사는 마이크로서비스가 복잡성을 분산시킬 뿐 제거하지 못하며, 배포 및 테스트 오버헤드를 증가시킨다고 주장합니다. Packwerk와 같은 도구는 모놀리스 내 모듈성 강화를 돕습니다.
- 확장성 개선: 클라우드(Kubernetes)의 수평적 확장 용이성과 자체 호스팅 툴링의 발전(예: DHH의 AWS 탈출)은 특정 언어의 성능 제약을 완화합니다.
- 이벤트 소싱 도입: Kafka와 같은 이벤트 소싱은 ETL 패러다임을 푸시 기반으로 전환하여 DB 부하를 줄이고 배치 처리를 단순화합니다. Kafka 컨슈머는 모놀리스에 통합되어 기존 비즈니스 로직을 재활용할 수 있습니다.
- C Ruby의 발전: YJIT, Concurrent Ruby, Ractor 등 현대 C Ruby는 훨씬 빨라지고 동시성 친화적으로 진화했습니다. Karafka 문서의 동시성 강조는 Ruby 커뮤니티의 성숙도를 보여줍니다.