맨위로가기

루비 온 레일즈

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

루비 온 레일즈(Ruby on Rails)는 데이비드 하이네마이어 한슨이 개발한 웹 애플리케이션 프레임워크로, 루비 프로그래밍 언어를 기반으로 한다. 2004년 오픈 소스로 처음 공개되었으며, 설정보다 관례(CoC)와 반복 금지(DRY) 원칙을 강조한다. MVC(Model-View-Controller) 패턴을 사용하며, ActiveRecord, 액션 팩 등의 패키지로 구성된다. 2004년 이후 PHP의 CakePHP, Node.js의 YEOMAN 등 여러 프레임워크에 영향을 미쳤다. 버전 7.0부터 Hotwire JavaScript 라이브러리 제품군을 기본적으로 제공하며, HTML, XML, CSS, 웹 서비스 기능 등을 지원한다. 확장성, 보안 문제에 대한 비판도 있었지만, 에어비앤비, 깃허브 등 많은 웹사이트에서 사용되고 있다.

더 읽어볼만한 페이지

  • 고속 개발 도구 - 크로스 플랫폼
    크로스 플랫폼은 소프트웨어나 애플리케이션이 다양한 운영 체제, 하드웨어 플랫폼 또는 이들의 조합에서 동작할 수 있도록 하는 기술을 의미하며, 웹 애플리케이션 형태로 구현되거나 플랫폼 연동을 통해 하드웨어 경계를 넘어 콘텐츠를 즐길 수 있도록 한다.
  • 고속 개발 도구 - LabVIEW
    LabVIEW는 내쇼날 인스트루먼트에서 개발한 그래픽 기반 프로그래밍 환경으로, 시각적인 블록 다이어그램을 사용하여 데이터 수집, 계측기 제어, 자동화 시스템 구축 등에 활용되며 사용자 인터페이스 생성 통합, 병렬 프로그래밍 지원, 다양한 디자인 패턴 제공을 통해 복잡한 애플리케이션 개발을 돕는다.
  • 루비로 작성된 자유 소프트웨어 - Travis CI
    Travis CI는 소프트웨어 프로젝트의 지속적인 통합 및 제공을 위한 서비스로, `.travis.yml` 파일로 구성되며 GitHub와 연동하여 빌드를 실행하고 테스트 결과를 제공한다.
  • 루비로 작성된 자유 소프트웨어 - 마스토돈 (소프트웨어)
    마스토돈은 ActivityPub 표준을 사용하여 서버 간 통신을 구현하는 분산형 소셜 네트워크 소프트웨어이며, 공개, 비공개 등 다양한 개인 정보 보호 기능을 제공하고 Affero GPL 라이선스 하에 자유 및 오픈 소스로 배포된다.
  • 웹 프레임워크 - 드루팔
    드루팔은 드리스 바이테르트가 개발하여 2001년 공개된 PHP 기반의 오픈 소스 콘텐츠 관리 시스템으로, 모듈과 테마를 통해 기능 확장이 가능하며 다양한 기관에서 활용되고 활발한 커뮤니티를 가지고 있다.
  • 웹 프레임워크 - 실버스트라이프 CMS
    실버스트라이프 CMS는 PHP로 제작된 오픈 소스 콘텐츠 관리 시스템으로, 웹사이트 및 웹 애플리케이션을 개발하고 관리하는 데 사용되며, MVC 패턴과 Sapphire ORM 프레임워크를 활용하여 사용자 친화적이고 확장 가능한 플랫폼을 제공한다.
루비 온 레일즈 - [IT 관련 정보]에 관한 문서
개요
루비 온 레일즈 로고
루비 온 레일즈 로고
종류웹 애플리케이션 프레임워크
개발자데이비드 하이네마이어 한슨
최초 릴리스2004년 7월
최신 버전8.0.0.1
최신 릴리스 날짜2024년 12월 10일
프로그래밍 언어루비
라이선스MIT 라이선스
웹사이트루비 온 레일즈 공식 웹사이트

2. 역사

덴마크의 프로그래머 데이비드 하이네마이어 한슨이 프로젝트 관리 도구인 Basecamp 개발 과정에서 얻은 코드와 지식을 바탕으로 루비 온 레일즈를 만들었다.[7][91] 2004년 7월 오픈 소스로 처음 공개되었으며, 이후 웹 개발 분야에서 빠르게 주목받기 시작했다. 2006년에는 애플이 Mac OS X Leopard에 루비 온 레일즈를 기본 탑재하기로 발표하면서 중요한 전환점을 맞았다.[8]

루비 온 레일즈는 지속적인 업데이트를 통해 발전해왔다. 주요 버전 릴리스는 다음과 같다.


  • 2004년 7월: 첫 번째 버전 공개
  • 2005년 12월 13일: 버전 1.0 릴리스[31]
  • 2007년 12월 7일: 버전 2.0 릴리스[33]
  • 2010년 8월 29일: 버전 3.0 릴리스 (이때 Merb 프레임워크와 통합됨)[10][11][12][37]
  • 2013년 6월 25일: 버전 4.0 릴리스[40]
  • 2016년 6월 30일: 버전 5.0 릴리스[20]
  • 2019년 8월 16일: 버전 6.0 릴리스[24]
  • 2021년 12월 15일: 버전 7.0 릴리스[26]
  • 2024년 11월 7일: 버전 8.0 릴리스[43]


루비 온 레일즈는 등장 이후 다른 웹 프레임워크 개발에도 큰 영향을 미쳤다. 대표적으로 PHP의 CakePHP와 Symfony, Perl의 Catalyst, groovy의 Grails, Node.js의 YEOMAN 등이 루비 온 레일즈의 개념과 구조에 영향을 받았다. 2024년 10월에는 새로운 유지 관리 정책이 시행되었다.[44][45]

2. 1. 개발 배경

덴마크 출신의 프로그래머인 데이비드 하이네마이어 한슨은 웹 애플리케이션 회사인 베이스캠프(구 37signals)에서 프로젝트 관리 도구인 베이스캠프 작업을 진행하면서 얻은 코드와 지식을 바탕으로 루비 온 레일즈 프레임워크를 만들었다.[7][91] 한슨은 2004년 7월에 레일즈를 처음 오픈 소스로 공개했지만, 2005년 2월까지는 프로젝트에 대한 커밋 권한을 다른 개발자들과 공유하지 않았다. 2006년 8월, 애플이 Mac OS X Leopard 운영체제에 루비 온 레일즈를 기본 탑재할 것이라고 발표하면서 중요한 이정표를 세웠으며,[8] 이는 2007년 10월에 정식 출시되었다.

2. 2. 버전 역사

데이비드 하이네마이어 한손이 프로젝트 관리 툴인 베이스캠프 클래식 작업을 하면서 추출하여 2004년 7월 오픈 소스로 처음 공개했다.[7][91] 2005년 12월 13일 버전 1.0이 릴리스되었다.[31] 2006년 8월, 애플이 Mac OS X v10.5 "Leopard"에 루비 온 레일즈를 포함하여 제공할 것이라고 발표하면서 중요한 이정표를 세웠다.[8]

  • 버전 2.0: HTML, XML 표준 출력 형식을 제공하고 RESTful 웹 서비스 기능을 추가했다.[33]
  • 버전 2.3: 템플릿, 엔진, Rack 지원, 중첩 모델 폼 등 주요 기능이 추가되었다. 템플릿은 사용자 지정 과 구성을 갖춘 스켈레톤 애플리케이션 생성을 가능하게 했고, 엔진은 라우트, 뷰 경로, 모델을 포함한 애플리케이션 조각의 재사용을 지원했다. Rack 웹 서버 인터페이스와 Metal은 액션 컨트롤러(Action Controller)를 우회하는 최적화된 코드 작성을 가능하게 했다.[9][36]
  • 버전 3.0: Merb 프로젝트와의 통합이 이루어졌다. 2008년 12월, 루비 온 레일즈 팀은 Merb 프로젝트와 협력하여 Merb의 아이디어를 Rails 3에 도입하고 커뮤니티 간의 중복을 줄이겠다고 발표했으며,[10] Merb는 Rails 3.0 릴리스의 일부로 병합되었다.[11][12][37]
  • 버전 3.1: 가역적 데이터베이스 마이그레이션, 에셋 파이프라인, 스트리밍 기능이 추가되었다. 기본 자바스크립트 라이브러리로 jQuery가 도입되었고, CoffeeScript와 Sass가 새롭게 지원되기 시작했다.[13][38]
  • 버전 3.2: 개발 모드와 라우팅 엔진(Journey 엔진)이 개선되어 속도가 향상되었고, 자동 쿼리 설명 및 태그 로깅 기능이 추가되었다.[14][39] 이 버전은 Ruby 1.8.7을 지원하는 마지막 버전이다.[15] (3.2.12 버전은 Ruby 2.0을 지원한다.[16])
  • 버전 4.0: 러시아 인형 캐싱, Turbolinks, 라이브 스트리밍 기능이 도입되었다. Active Resource, Active Record Observer 등 일부 구성 요소는 젬(gem)으로 분리되어 선택적으로 사용할 수 있게 되었다.[17][40]
  • 버전 4.1: Spring preloader, Variants, Enums, 메일러 미리보기, secrets.yml 파일(애플리케이션 비밀 정보 관리) 기능이 추가되었다.[18]
  • 버전 4.2: Active Job(백그라운드 작업 처리), 비동기 이메일 발송, Adequate Record(데이터베이스 쿼리 최적화), 웹 콘솔, 외래 키 지원 기능이 도입되었다.[19]
  • 버전 5.0: WebSocket을 활용한 실시간 통신 기능인 Action Cable, API 모드(API 전용 애플리케이션 개발 지원), Turbolinks 5가 도입되었다.[20] Rake 대신 Rails CLI를 독점적으로 사용하며, Ruby 버전 2.2.2 이상을 지원한다.
  • 버전 5.1: 자바스크립트 통합 방식이 변경되어 Yarn을 통한 NPM 종속성 관리, Webpack을 이용한 선택적 컴파일이 가능해졌다. Rails UJS는 jQuery 의존성을 제거하고 순수 자바스크립트로 재작성되었다. Capybara를 사용한 시스템 테스트, 암호화된 비밀 정보 관리, 매개변수화된 메일러, 직접 및 해결된 경로, 통합된 `form_with` 헬퍼(기존 `form_tag`/`form_for` 대체) 등이 도입되었다.[21]
  • 버전 5.2: 파일 업로드 및 관리를 위한 ActiveStorage, 내장 Redis 캐시 스토어, 업데이트된 Rails 자격 증명 관리, 콘텐츠 보안 정책(CSP) 구성을 위한 새로운 DSL 등이 추가되었다.[22]
  • 버전 6.0: Webpack이 기본 자바스크립트 번들러로 설정되었고, 메일함 라우팅, 기본 온라인 서식 있는 텍스트 편집기(Action Text), 병렬 테스트 실행, 다중 데이터베이스 지원, 메일러 라우팅, 새로운 자동 로더(Zeitwerk) 기능이 추가되었다.[24]
  • 버전 6.1: 데이터베이스별 연결 전환, 수평 데이터베이스 샤딩, 모든 연관 관계의 즉시 로딩(eager loading), 단일 테이블 상속(STI)의 대안인 위임된 유형(delegated types), 연관 관계의 비동기 삭제, 오류 객체 개선 등이 이루어졌다.[25]
  • 버전 7.0: 기본 자바스크립트 관리 방식이 Node.js와 Webpack 대신 가져오기 맵(Import Maps)으로 변경되었고, Turbolinks는 Turbo와 Stimulus 프레임워크 조합으로 대체되었다. Active Record에 작업 중 암호화 기능이 추가되었으며, 코드 로딩에는 Zeitwerk가 독점적으로 사용된다.[26]
  • 버전 7.1: 애플리케이션 배포 도구인 Kamal을 사용하는 Dockerfiles 지원, 인증 기능 개선, bun 지원이 추가되었다.[27][41]
  • 버전 8.0: 개별 개발자가 서비스형 플랫폼 없이 독립적으로 애플리케이션을 호스팅하고 관리할 수 있도록 지원하는 데 중점을 둔 업데이트가 이루어졌다. 단일 개발자가 애플리케이션 배포 및 관리의 모든 측면을 처리할 수 있도록 지원한다.[28][43]


2024년 10월에는 개정된 유지 관리 정책이 시행되었다.[44][45]

버전 기록
버전출시일호환 가능한 루비 버전[29][30]
1.0[31]2005년 12월 13일1.8.6
1.2[32]2007년 1월 19일1.8.6
2.0[33]2007년 12월 7일1.8.6
2.1[34]2008년 5월 31일1.8.6
2.2[35]2008년 11월 21일1.8.7 권장; 1.8.6 가능
2.3[36]2009년 3월 16일1.8.7 권장; 1.8.6 및 1.9.1 가능
3.0[37]2010년 8월 29일1.9.3 권장; 1.8.7 및 1.9.2 가능
3.1[38]2011년 8월 31일1.9.3 권장; 1.8.7 및 1.9.2 가능
3.2[39]2012년 1월 20일1.9.3 권장; 1.8.7 및 1.9.2 가능
4.0[40]2013년 6월 25일2.0 선호; 1.9.3 이상 필수
4.1[18]2014년 4월 8일2.0 선호; 1.9.3 이상 필수
4.2[19]2014년 12월 19일2.0 선호; 1.9.3 이상 필수
5.0[20]2016년 6월 30일2.2.2 이상
5.1[21]2017년 5월 10일2.2.2 이상
5.2[22]2018년 4월 9일2.2.2 이상
6.0[24]2019년 8월 16일2.5.0 이상
6.1[25]2020년 12월 9일2.5.0 이상
7.0[26]2021년 12월 15일2.7.0 이상
7.1[41]2023년 10월 5일2.7.0 이상
7.2[42]2024년 8월 10일3.1.0 이상
8.0[43]2024년 11월 7일3.2.0 이상


3. 철학 및 설계

루비 온 레일즈는 개발 생산성을 높이기 위한 몇 가지 핵심 철학과 설계 원칙을 기반으로 한다. 주요 원칙으로는 설정보다 관례(Convention over Configuration, CoC)반복 금지(Don't Repeat Yourself, DRY)가 있으며, 이는 모델-뷰-컨트롤러(MVC) 아키텍처 패턴 구현의 핵심이다. [https://rubyonrails.org/doctrine/ 레일즈 독트린](The Rails Doctrine)은 이러한 프레임워크의 철학, 설계, 구현을 안내하는 지속적인 원칙들을 제시한다.
설정보다 관례(CoC)는 개발자가 애플리케이션의 일반적이지 않은 측면만 명시적으로 설정하면 된다는 원칙이다.[46] 프레임워크가 미리 정의된 규칙(관례)을 제공하므로, 개발자는 반복적인 설정 작업을 줄일 수 있다. 예를 들어, 모델 클래스 이름이 'Sale'이라면, 별도의 설정 없이도 데이터베이스의 해당 테이블 이름은 기본적으로 'sales'로 간주된다. 만약 'products_sold'처럼 다른 이름을 사용하고 싶을 때만 관련 코드를 작성하면 된다. 이러한 관례를 따름으로써 코드가 간결해지고 반복 작업이 줄어드는 효과가 있다.[54] 마찬가지로, ''User'' 모델 클래스는 기본적으로 `app/models` 디렉토리의 `user.rb` 파일에 정의되며, 데이터베이스의 `users` 테이블과 연결된다.
반복 금지(DRY)는 모든 정보 조각은 시스템 내에서 단일하고, 명확하며, 신뢰할 수 있는 표현을 가져야 한다는 원칙이다.[80] 즉, 동일한 정보나 로직이 여러 곳에 중복되어서는 안 된다. 예를 들어, 레일즈의 ORM 라이브러리인 ActiveRecord를 사용하면, 모델 클래스를 정의할 때 데이터베이스 테이블의 각 열(column) 이름을 일일이 지정할 필요가 없다. ActiveRecord는 모델 클래스 이름과 데이터베이스 스키마를 바탕으로 필요한 정보를 자동으로 파악하여 중복 정의를 피하게 해준다.
"뚱뚱한 모델, 마른 컨트롤러" 원칙은 애플리케이션의 핵심 비즈니스 로직 대부분을 모델(Model) 계층에 집중시키고, 컨트롤러(Controller)는 가능한 한 가볍게 유지해야 한다는 설계 지침이다. 컨트롤러는 주로 사용자의 요청을 받아 모델과 뷰(View) 사이를 중개하는 역할에 집중하고, 복잡한 로직 처리는 모델이 담당하도록 권장한다.

레일즈는 개발 편의성을 높이기 위해 스캐폴딩과 같은 도구를 제공하여 기본적인 모델, 뷰, 컨트롤러 코드를 자동으로 생성할 수 있게 한다.[47] 또한, WEBrick 웹 서버나 Rake 빌드 시스템 등을 포함하여 기본적인 개발 환경을 쉽게 구축할 수 있도록 지원한다. 최근 레일즈 7.0에서는 HTML Over The Wire (Hotwire),[55][56] 개념적 압축,[57][58] 강력한 보안[59] 등을 통해 'One person framework' 접근 방식을 강조하며 생산성을 더욱 높이고 있다.

4. 기술적 개요

루비 온 레일즈는 새로운 버전을 출시할 때마다 획기적으로 발전하며, 새로운 기술 사용을 탐구하고 인터넷의 새로운 표준을 채택한다. 일부 기능은 루비 온 레일즈에서 매우 안정적으로 유지되는 반면, 새로운 기술을 선호하여 일부 기능은 대체되기도 한다.

4. 1. [[모델-뷰-컨트롤러]](MVC) 패턴

모델-뷰-컨트롤러 (MVC) 패턴은 애플리케이션 프로그래밍을 구성하는 기본 구조이다.

기본 구성에서 루비 온 레일즈 프레임워크의 모델(Model)데이터베이스의 테이블 및 루비 파일에 매핑된다. 예를 들어, 'User' 모델 클래스는 일반적으로 `app/models` 디렉토리의 `user.rb` 파일에 정의되며, 데이터베이스의 'users' 테이블에 연결된다. 개발자는 이 규칙을 따르지 않고 모델, 파일, 데이터베이스 테이블에 다른 이름을 선택할 수도 있지만, 이는 일반적인 방식이 아니며 관례 우선 철학에 따라 권장되지 않는다.[46] 데이터베이스 기반의 MVC 웹 애플리케이션에서 모델은 RDBMS의 테이블을 나타내는 클래스를 의미하며, 레일즈에서는 액티브 레코드를 통해 모델 클래스를 다룬다. 일반적으로 프로그래머는 `ActiveRecord::Base` 클래스의 서브클래스를 생성하며, 이를 통해 사용할 RDBMS 테이블과 칼럼을 자동으로 결정한다.
컨트롤러(Controller)웹 서버에서 애플리케이션으로 들어오는 외부 요청에 응답하는 레일즈의 서버 측 구성 요소로, 렌더링할 뷰 파일을 결정한다. 컨트롤러는 정보를 얻기 위해 하나 이상의 모델을 조회하고 그 결과를 뷰에 전달해야 할 수도 있다. 예를 들어, 항공 예약 시스템에서 항공편 검색 기능을 구현하는 컨트롤러는 검색 조건과 일치하는 항공편을 찾기 위해 개별 항공편 모델을 조회하고, 관련 정보를 위해 공항 및 항공사 모델을 추가로 조회할 수 있다. 그런 다음 컨트롤러는 이 항공편 데이터를 뷰에 전달하여, 각 항공편 정보를 테이블 형태로 보여주는 HTML 문서를 생성하게 된다. 컨트롤러는 하나 이상의 액션(Action)을 제공할 수 있는데, 레일즈에서 액션은 특정 외부 웹 브라우저 요청에 응답하는 방법을 정의하는 기본 단위이다. 컨트롤러와 액션은 라우트(route)가 매핑된 경우에만 외부 웹 요청에 접근할 수 있다. 레일즈는 개발자가 `create`, `new`, `edit`, `update`, `destroy`, `show`, `index`와 같은 액션을 포함하는 RESTful 라우트를 사용하도록 권장한다. 들어오는 요청/라우트와 컨트롤러 액션 간의 매핑은 `routes.rb` 구성 파일에서 설정할 수 있다. MVC에서 컨트롤러는 레일즈의 Action Pack에 포함된 애플리케이션 컨트롤러 클래스에 의해 처리되며, 웹 기반 MVC 애플리케이션에서는 웹 브라우저를 조작하는 사용자에 의해 컨트롤러의 메서드가 실행된다.

레일즈의 기본 구성에서 뷰(View)는 런타임에 평가되어 HTML로 변환되는 erb 파일이다. 또는 뷰에 다른 많은 템플릿 시스템을 사용할 수도 있다. MVC에서 뷰는 표시를 위한 로직이며, 컨트롤러 클래스로부터 받은 데이터를 어떻게 표시할지를 규정한다. 웹 애플리케이션에서는 주로 HTML 내에 약간의 코드를 포함시키는 방식으로 구현된다. Rails 3.1 버전부터는 표준 CSS 템플릿으로 Sass를 도입했다.

루비 온 레일즈는 기본적인 웹사이트에 필요한 일부 모델과 뷰를 자동으로 구성할 수 있는 스캐폴딩과 같이 일반적인 개발 작업을 쉽게 처리할 수 있는 도구를 포함한다.[47] 또한 루비와 함께 배포되는 간단한 루비 웹 서버인 WEBrick와 Rake 빌드 시스템이 으로 배포되어 기본적인 개발 환경을 제공한다. 레일즈는 웹 애플리케이션 프레임워크 전체에서 동작하는 기술들을 통합하는 지점을 제공하며, 주요 통합 대상은 웹 서버 인터페이스, MVC 모델 레이어, MVC 뷰 레이어, 컨트롤러 확장 및 애드온이다. 기본 애플리케이션 스택은 모델 레이어에서 데이터 매퍼 패턴, 뷰 레이어에서 ERB, 웹 서버 레이어에서는 Rack과 Mongrel 등을 각각 통합하고 있다.[88][89]

4. 2. HTTP 서버

루비 온 레일즈는 일반적으로 인터넷에 직접 연결되지 않고, 프런트 엔드 웹 서버를 통해 서비스된다. 초기에는 몽그렐이 주로 사용되었으나, 2008년부터 Phusion Passenger가 몽그렐을 대체하여 가장 널리 사용되는 웹 서버가 되었다.[48]

이 외에도 Lighttpd, 아파치, 체로키, 히아와타, Nginx 등 다양한 웹 서버 환경에서 실행될 수 있다. 특히 Nginx의 경우, Phusion Passenger와 같은 모듈을 사용하거나 CGI, FastCGI, mod ruby 등을 통해 연동할 수 있다.

루비는 IBM i 운영 체제에서도 기본적으로 지원된다.[49]

4. 3. JavaScript

루비 온 레일즈는 JavaScript 라이브러리인 Prototype와 Script.aculo.us를 사용하여 Ajax 작업을 스크립팅하는 것으로도 알려져 있다.[50] 루비 온 레일즈 3.0에서는 페이지의 마크업(페이지 구조 정의)과 스크립팅(페이지 기능 또는 로직 결정)을 분리했다. 버전 7.0부터는 새로운 루비 온 레일즈 애플리케이션에 [https://hotwired.dev/ Hotwire] JavaScript 라이브러리 제품군이 기본적으로 설치되어 제공된다.

4. 4. 웹 서비스

루비 온 레일즈는 2.0 버전부터 HTMLXML을 표준 출력 형식으로 제공한다. 특히 XML 형식은 RESTful 웹 서비스 기능을 지원하기 위한 것이다.

4. 5. 프레임워크 구조

루비 온 레일즈는 여러 패키지로 구성된다. 주요 패키지로는 데이터베이스 접근을 위한 객체-관계 매핑 시스템인 ActiveRecord, 액션 팩, 액티브 서포트, 액션 메일러 등이 있다. 2.0 버전 이전에는 액션 웹 서비스 패키지도 포함되었으나, 현재는 액티브 리소스가 그 기능을 대체한다.

이러한 표준 패키지 외에도 개발자는 플러그인을 만들어 기존 패키지의 기능을 확장할 수 있다. 초기 레일즈는 자체적인 방식으로 플러그인을 지원했지만, 3.2 버전부터는 표준 루비 "젬(gem)" 방식을 선호하게 되면서 기존 방식의 플러그인 지원은 중단되었다.[52]

5. 레일즈 기반 프로젝트 (한국)

6. 비판 및 논란

루비 온 레일즈는 개발 생산성 향상이라는 장점에도 불구하고 몇 가지 비판과 논란에 직면해 왔다. 특히 과거에는 확장성 문제가 주요 쟁점으로 부각되었으며, 여러 차례 보안 취약점이 발견되어 논란이 되기도 했다.

6. 1. 확장성

과거에는 Matz의 루비 인터프리터(루비의 ''사실상'' 표준 인터프리터)에서 실행되는 레일즈는 확장성 문제로 비판을 받았다.[66] 이러한 비판은 주로 2007년과 2008년에 발생한 여러 트위터 서비스 중단 사태를 근거로 제기되었다. 이 문제로 인해 트위터는 큐 시스템 및 기타 미들웨어를 위해 스칼라(Java 가상 머신에서 실행)를 부분적으로 도입하게 되었다.[67][68] 트위터 사이트의 사용자 인터페이스는 2011년까지 루비 온 레일즈를 계속 사용했지만, 성능 문제로 인해 결국 다른 기술로 교체되었다.[70]

그러나 많은 레일즈 기반 서비스 개발자들은 데이터베이스 엔진 선택, 캐시 구성 최적화, 서버 아키텍처 개선 등 시스템 아키텍처 설계를 통해 확장성 문제를 해결해왔다. 레일즈의 창시자인 데이비드 하이네마이어 핸슨은 트위터의 확장성 문제는 레일즈 자체의 결함이 아니라, 트위터의 아키텍처 설계 오류에서 비롯된 것이라고 반박했다. 그는 프레임워크 발전에 기여하지 않으면서 레일즈를 비판하는 것은 부당하다고 주장했다.[71]

2011년 가트너 리서치는 이러한 비판과 자바와의 비교에도 불구하고, 많은 유명 소비자 웹 기업들이 확장 가능한 웹 애플리케이션을 구축하기 위해 루비 온 레일즈를 성공적으로 사용하고 있다고 보고했다. 루비 온 레일즈를 사용하는 대표적인 대규모 사이트로는 에어비앤비, 쿡패드, 깃허브, GitLab,[72] 스크립드, 쇼피파이, 그리고 Basecamp 등이 있다.[73] 2016년 1월 기준으로, 120만 개 이상의 웹 사이트가 루비 온 레일즈를 기반으로 운영되는 것으로 추정된다.[74][75]

6. 2. 보안

2012년 3월, 보안 연구원 예고르 호마코프는 특정 레일스 애플리케이션을 원격으로 악용할 수 있는 대량 할당 취약점을 발견했다. 그는 이전에 책임감 있는 공개를 시도했으나 받아들여지지 않자, 깃허브(GitHub)를 비악의적으로 해킹하여 취약점을 시연했다.[76]

2013년 9월 24일에는 세션 쿠키 지속성 관련 보안 결함이 보고되었다. 기본 설정인 ''CookieStore'' 방식은 전체 세션 정보를 쿠키 안에 저장하기 때문에, 인증된 세션 쿠키를 확보하면 언제든 해당 사용자로 로그인할 수 있는 문제가 있었다. 이 문제를 해결하기 위해 관리자에게는 ''ActiveRecordStore''와 같이 세션 정보를 서버에 저장하는 방식을 사용하도록 권장되었다.[77]

연구원 다니엘 잭슨과 조셉 니어는 레일스 프로그램의 데이터 접근을 분석하고 접근 제한 규칙 준수 여부를 확인하는 "스페이스"(Space)라는 데이터 디버거를 개발했다. 2016년 4월 15일, 니어는 스페이스를 이용해 50개의 인기 웹 애플리케이션을 분석한 결과, 기존에 알려지지 않았던 23개의 보안 결함을 발견했다고 발표했다.[78]

참조

[1] 웹사이트 "[ANN] Rails 0.5.0: The end of vaporware!" https://rubytalk.org[...] 2004-07-24
[2] 웹사이트 Release v6.0.3.4 · rails/rails · GitHub https://github.com/r[...] 2019-12-16
[3] 웹사이트 Getting Started with Rails: What Is Rails? http://guides.rubyon[...] 2014-08-10
[4] 웹사이트 Django vs Ruby on Rails – The Choice for Mobile App Development https://appsearch.or[...] 2020-11-28
[5] 웹사이트 Episode 471: Jason Meller on Choosing the Right Tech Stack for a Greenfield Project https://www.se-radio[...] IEEE 2021-08-03
[6] 웹사이트 Breaking the Monolith at Twitch: Part One https://blog.twitch.[...]
[7] 웹사이트 Interview with David Heinemeier Hansson from Ruby on Rails http://dev.mysql.com[...] MySQL AB 2006-02-00
[8] 웹사이트 Ruby on Rails will ship with OS X 10.5 (Leopard) http://weblog.rubyon[...] 2006-08-07
[9] 웹사이트 Rails 2.3: Templates, Engines, Rack, Metal, much more! http://weblog.rubyon[...] 2009-03-16
[10] 웹사이트 The day Merb joined Rails http://rubyonrails.o[...] 2008-12-27
[11] 웹사이트 Ruby on Rails 3.0 Release Notes — Ruby on Rails Guides http://edgeguides.ru[...] 2017-05-24
[12] 웹사이트 Ruby on Rails 3.0 goes modular http://www.sdtimes.c[...] sdtimes.com 2010-08-06
[13] 웹사이트 Ruby on Rails 3.1 Release Notes http://guides.rubyon[...] 2012-09-03
[14] 웹사이트 Ruby on Rails 3.2 Release Notes http://guides.rubyon[...] 2012-09-01
[15] 웹사이트 Rails/master is now 4.0.0.beta http://weblog.rubyon[...] 2012-09-03
[16] 웹사이트 Rails 3.2.x is now compatible with Ruby 2.0.0 by sikachu · Pull Request #9406 · rails/rails · GitHub https://github.com/r[...] 2014-05-30
[17] 웹사이트 Rails 4.0: Final version released! http://weblog.rubyon[...] 2013-06-25
[18] 웹사이트 Rails 4.1.0: Spring, Variants, Enums, Mailer previews, secrets.yml http://weblog.rubyon[...] 2014-04-08
[19] 웹사이트 Rails 4.2: Active Job, Asynchronous Mails, Adequate Record, Web Console, Foreign Keys http://weblog.rubyon[...] 2015-12-05
[20] 웹사이트 Rails 5.0: Action Cable, API mode, and so much more http://weblog.rubyon[...] 2016-11-19
[21] 웹사이트 Rails 5.1: Loving JavaScript, System Tests, Encrypted Secrets, and more http://weblog.rubyon[...] 2017-05-10
[22] 웹사이트 Rails 5.2.0 FINAL: Active Storage, Redis Cache Store, HTTP/2 Early Hints, CSP, Credentials https://weblog.rubyo[...] 2018-04-09
[23] 웹사이트 Rails 5.2.2 has been released! https://weblog.rubyo[...] 2019-01-04
[24] 웹사이트 Rails 6.0: Action Mailbox, Action Text, Multiple DBs, Parallel Testing, Webpacker by default, and Zeitwerk https://weblog.rubyo[...] 2019-11-12
[25] 웹사이트 Rails 6.1: Horizontal Sharding, Multi-DB Improvements, Strict Loading, Destroy Associations in Background, Error Objects, and more! https://weblog.rubyo[...] 2020-12-28
[26] 웹사이트 Rails 7.0: Fulfilling a vision https://rubyonrails.[...] 2021-12-16
[27] 웹사이트 Rails 7.1: Dockerfiles, BYO Authentication, More Async Queries, and more! https://rubyonrails.[...] 2023-10-08
[28] Youtube Rails 8.0 Released: Empowering Developers to Self-Host https://www.youtube.[...] 2024-11-08
[29] 웹사이트 Ruby/Rails Compatibility Matrix https://devalot.com/[...] 2021-03-05
[30] 웹사이트 Upgrading Ruby on Rails https://edgeguides.r[...] 2021-03-05
[31] 웹사이트 Rails 1.0: Party like it's one oh oh! http://weblog.rubyon[...] 2010-06-09
[32] 웹사이트 Rails 1.2: REST admiration, HTTP lovefest, and UTF-8 celebrations http://weblog.rubyon[...] 2010-06-09
[33] 웹사이트 "Rails 2.0: It's done!" http://weblog.rubyon[...] 2010-06-09
[34] 웹사이트 Rails 2.1: Time zones, dirty, caching, gem dependencies, caching, etc http://weblog.rubyon[...] 2010-06-09
[35] 웹사이트 Rails 2.2: i18n, HTTP validators, thread safety, JRuby/1.9 compatibility, docs http://weblog.rubyon[...] 2010-06-09
[36] 웹사이트 "Rails 2.3: Templates, Engines, Rack, Metal, much more!" http://weblog.rubyon[...] 2010-06-09
[37] 웹사이트 "Rails 3.0: It's ready!" http://weblog.rubyon[...] 2010-08-30
[38] 웹사이트 bumping to 3.1.0 https://github.com/r[...] 2011-08-31
[39] 웹사이트 Preparing for 3.2.0 release https://github.com/r[...] 2012-01-22
[40] 웹사이트 Rails 4 in 30' http://blog.wyeworks[...] 2012-12-15
[41] 웹사이트 Rails 7.1: Dockerfiles, BYO Authentication, More Async Queries, and more! https://rubyonrails.[...] 2023-10-05
[42] 웹사이트 Development of Rails 7.2 starts now https://github.com/r[...] 2023-09-26
[43] 웹사이트 https://rubyonrails.org/2024/11/7/rails-8-no-paas-required https://rubyonrails.[...]
[44] 웹사이트 https://rubyonrails.org/maintenance https://rubyonrails.[...]
[45] 웹사이트 https://rubyonrails.org/2024/10/15/new-maintenance-policy-and-eol-annouments https://rubyonrails.[...]
[46] 웹사이트 The Rails Doctrine https://rubyonrails.[...] 2024-06-07
[47] 웹사이트 fairleads: Rails 2.0 and Scaffolding Step by Step http://fairleads.blo[...] 2007-12-15
[48] 웹사이트 Ruby on Rails: Deploy http://rubyonrails.o[...] 2012-12-03
[49] 웹사이트 PowerRuby Brings Enterprise Ruby on Rails Support to IBM i http://iprodeveloper[...] iPro Developer 2014-05-09
[50] 웹사이트 ActionView::Helpers::JavaScriptHelper http://api.rubyonrai[...] 2017-05-24
[51] 웹사이트 Rails 3.0: It's ready! http://weblog.rubyon[...] 2010-08-29
[52] 웹사이트 Rails 3.2.0.rc2 has been released! http://weblog.rubyon[...] 2012-09-01
[53] 웹사이트 Ruby on Rails: Download http://rubyonrails.o[...]
[54] 웹사이트 Getting Started with Rails http://guides.rubyon[...] 2014-03-10
[55] 웹사이트 The time is right for Hotwire https://world.hey.co[...] 2021-12-20
[56] 웹사이트 Rails 7 will have three great answers to JavaScript in 2021+ https://world.hey.co[...] 2021-12-20
[57] 웹사이트 Conceptual compression means beginners don’t need to know SQL — hallelujah! https://m.signalvnoi[...] 2021-12-20
[58] Youtube RailsConf 2018: Opening Keynote: FIXME by David Heinemeier Hansson https://www.youtube.[...] 2021-12-20
[59] 웹사이트 Serious security https://www.hey.com/[...] 2021-12-26
[60] 웹사이트 Ruby on Rails Creator Touts 7.0 as One-Person Framework, 'The Way It Used To Be' https://developers.s[...] 2021-12-20
[61] 웹사이트 "Ruby on Rails" Trademark Status http://tarr.uspto.go[...] USPTO 2021-12-15
[62] 웹사이트 "Rails" Trademark Status http://tarr.uspto.go[...] USPTO 2021-12-15
[63] 웹사이트 Rails Logo Trademark Status http://tarr.uspto.go[...] USPTO 2021-12-15
[64] 웹사이트 Beginning Rails: From Novice to Professional http://rethink.unspa[...] 2007-07-23
[65] 웹사이트 David Heinemeier Hansson says No to Use of Rails Logo http://www.rubyinsid[...] 2007-07-24
[66] 웹사이트 5 Question Interview with Twitter Developer Alex Payne http://www.radicalbe[...] radicalbehavior.com 2007-03-29
[67] 웹사이트 Twitter on Scala http://www.artima.co[...] artima.com 2009-04-03
[68] 웹사이트 Twitter jilts Ruby for Scala https://www.theregis[...] theregister.co.uk 2009-04-01
[69] 웹사이트 Twitter on Ruby http://blog.evanweav[...] Evan Weaver 2009-09-25
[70] 웹사이트 Twitter Search is Now 3x Faster https://blog.twitter[...] Twitter 2014-06-06
[71] 웹사이트 I won't let you pay me for my open source https://world.hey.co[...] 2021-12-15
[72] 뉴스 Why we're sticking with Ruby on Rails https://about.gitlab[...] 2022-08-29
[73] 웹사이트 Here's Why Ruby On Rails Is Hot https://web.archive.[...] Business Insider 2012-02-10
[74] 웹사이트 Ruby on Rails Usage Statistics http://trends.builtw[...] 2016-01-04
[75] 웹사이트 Ruby on Rails Token Usage Statistics http://trends.builtw[...] 2016-01-04
[76] 웹사이트 How GitHub handled getting hacked https://www.zdnet.co[...] 2017-05-24
[77] 뉴스 Security Issue in Ruby on Rails Could Expose Cookies http://threatpost.co[...] The Kaspersky Lab Security News Service 2013-09-25
[78] 웹사이트 Patching up Web applications https://news.mit.edu[...] 2016-04-15
[79] 웹사이트 Rails Versions 7.0.8.7, 7.1.5.1, 7.2.2.1, and 8.0.0.1 have been released! https://rubyonrails.[...] rubyonrails.org 2024-12-10
[80] 문서 重複したコードを書かない意味もある
[81] URL https://github.com/m[...]
[82] 간행물 ANN: Merb, Mongrel+Erb http://osdir.com/ml/[...] 2006-10-18
[83] URL Ruby on Rails 3.0 Release Notes http://edgeguides.ru[...]
[84] 간행물 Rails/Merb performance comparison (on mongrel, jruby, tomcat, glassfish) http://www.mindbucke[...] 2008-09-18
[85] 간행물 Merb *is* Rails http://brainspl.at/a[...] 2008-12-23
[86] 간행물 Merb gets merged into Rails 3! http://weblog.rubyon[...] 2008-12-23
[87] 간행물 Rails and Merb Merge http://yehudakatz.co[...] 2008-12-23
[88] 간행물 merb-core gem dependencies http://rubygems.org/[...] 2010-03-23
[89] 간행물 merb gem dependencies http://rubygems.org/[...] 2010-03-23
[90] 웹인용 Rails 1.0: Party like it's one oh oh! http://weblog.rubyon[...] 2017-03-01
[91] 웹인용 MySQL :: Interview with David Heinemeier Hansson from Ruby on Rails http://dev.mysql.com[...] 2013-02-25



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com