Rails 1.0의 코드 구조 및 핵심 요소 분석
1. Rails 1.0 개요 및 통계
-
출시: 20년 전, 다운로드 수 약 7,000회.
-
코드 규모: Rails 8의 35만 라인 대비, Rails 1.0은 5만 2천 라인으로 약 7배 작습니다.
-
핵심 구성 요소: ActionMailer, ActionPack, ActiveRecord, ActiveSupport, Railties 등 5가지 핵심 구성 요소가 Rails 1.0부터 현재까지 유지되고 있습니다. MVC 패턴을 처음부터 따랐으며, ActiveModel은 없었지만 ActiveRecord가 모델 역할을 했습니다.
2. ActiveSupport: Ruby 확장
blank?메서드:Object,TrueClass,FalseClass,String클래스에 대한 오픈 클래스(Monkey Patch)로 구현되었습니다. 현재와 유사하지만 `String
blank?`는 더 정교해졌습니다.
-
Inflector: ‘설정보다 관례(Conventions over Configuration)’ 개념을 구현하는 핵심 모듈입니다.pluralize,singularize,camelize,underscore등의 메서드가 단순한 배열 기반 로직으로 구현되어 있었습니다. -
특징:
present?메서드는 존재하지 않았습니다. Ruby의 강력한 코어 확장 기능을 활용했습니다.
3. Railties: 코드 생성기
-
scaffold생성기:RailsGenerator::NamedBase를 상속받아 컨트롤러, 헬퍼, 뷰,TestFunctional파일을 생성했습니다. 20년 전임에도 불구하고 완전한 자동화 기능을 제공했습니다. -
기능 테스트: ERB 템플릿을 사용하여
Test::Unit::TestCase를 상속받는 기능 테스트 코드를 생성했습니다. 이는 당시로서는 매우 인상적인 기능이었습니다.
4. ActiveRecord: 데이터베이스 추상화
-
where메서드의 부재: Rails 1.0에는 현재 필수적인where메서드가 없었습니다. -
find메서드:first,all,order,include등 다양한 목적을 포괄하는 다기능 메서드였습니다. SQL 문자열을 직접 조합하는 방식으로 동작하여 현재보다 추상화 계층이 적었습니다. -
다이나믹 파인더:
find_by_email_and_name과 같은 메서드는method_missing을 사용하여 구현되었습니다. 속성과 조건을 추출하여find메서드를 호출하는 방식으로 동작했습니다. -
파일 구조:
find메서드,method_missing을 포함한 대부분의 ActiveRecord 로직이base.rb단일 파일에 집중되어 있었습니다. -
연관 관계 (
associations):has_many와 같은 연관 관계는define_method,instance_variable_get/set등 메타 프로그래밍을 활용하여 많은 메서드를 동적으로 정의했습니다.Inflector가 핵심적으로 사용되었습니다. -
유효성 검사 (
validations):validate_uniqueness_of,validate_presence_of등은 SQL 문자열을 구성하고send메서드를 사용하여 유효성 검사 로직을 구현했습니다. 현재의 ‘섹시한’ 유효성 검사 DSL과는 달랐지만, 코드는 매우 읽기 쉬웠습니다.