본 강연은 Rails 개발자로서 10년간의 경험을 바탕으로 'Rails Way'의 본질적인 의미를 탐구하고, Rails 애플리케이션이 성장함에 따라 직면하는 도전 과제와 이를 효과적으로 극복하기 위한 '확장된 Rails Way'의 중요성을 강조합니다. 강연자는 Rails Way가 단순히 코딩 규칙이나 기술적 세부 사항을 넘어, 개발자의 생산성과 행복을 최적화하는 방법론이자 심오한 철학임을 역설합니다. 이는 Rails가 단지 프레임워크를 넘어 소프트웨어 개발에 대한 사고방식 자체를 변화시킨다는 관점을 제시합니다.
Rails Way는 생산성과 행복의 최적화, 의사결정의 자유, 그리고 확장성을 위한 설계라는 세 가지 핵심 아이디어에 기반합니다. 이는 Ruby, MVC 패러다임, Convention over Configuration(CoC), 그리고 Complexity Compression 원칙을 통해 구현되며, 특히 Rails 8은 ‘0에서 1’로, 즉 아이디어를 최소한의 장벽으로 빠르게 구현하는 데 초점을 맞춥니다. 그러나 애플리케이션이 ‘1’을 넘어 성장하고 비즈니스 로직이 복잡해지면, 기본 MVC 구조만으로는 모든 로직을 담기 어려워 ‘괴물 같은 코드베이스’로 변질될 위험이 있습니다. 이는 개발자들이 Rails Way를 오해하거나, 프레임워크의 의도를 고려하지 않고 외부의 패턴이나 젬(Gem)을 무분별하게 도입할 때 발생합니다.
강연자는 이러한 문제를 해결하기 위해 Rails를 깊이 이해하고(Master Rails), 프레임워크와 조화롭게 확장하는(Extend Rails) ‘확장된 Rails Way’를 제시합니다. Rails를 숙달하는 것은 프레임워크의 내부 작동 방식, 디자인 원칙, 확장성 등을 이해하는 것을 의미합니다. 그리고 Rails를 확장하는 것은 프레임워크 개발자가 새로운 기능을 추가하듯이, 기존 Rails의 철학을 따르는 새로운 추상화를 도입하는 것을 의미합니다.
이를 위한 네 가지 원칙은 다음과 같습니다: 1. Rails와 유사한 인터페이스 및 개발자 경험 제공: 새로운 추상화는 Rails의 기존 컴포넌트와 호환되며, 마치 Rails 자체의 일부인 것처럼 느껴지도록 설계해야 합니다. 2. 계층형 아키텍처 원칙 준수: 추상화 계층 간의 명확한 경계를 설정하고, 데이터 흐름이 상위 계층에서 하위 계층으로만 흐르도록 하여 코드의 낮은 결합도(Loose Coupling)를 확보해야 합니다. 3. 코드베이스에서 추상화 추출 선호: 외부에서 가져온 ‘멋진 패턴’을 맹목적으로 적용하기보다, 실제 비즈니스 로직 내에서 의미 있는 추상화를 발견하고 이를 추출하는 데 집중해야 합니다. 4. 책임과 복잡도 수준 분리: 서로 다른 수준의 복잡도를 가진 코드를 한 곳에 혼합하지 않고 분리해야 합니다. 이는 특히 경험이 적은 개발자들이 코드베이스를 이해하고 작업하는 데 큰 도움이 됩니다.
강연자는 복잡한 다단계 폼(Multi-step Form) 기능을 예시로 들어 이러한 원칙들을 적용하는 방법을 상세히 설명합니다. 기존 모델과 컨트롤러에 비즈니스 로직과 UI 상태 관리 로직이 혼재되어 복잡해지는 문제를 해결하기 위해, Form Object
와 Workflow Object
(상태 머신)라는 새로운 추상화를 도입합니다. Form Object
는 폼 데이터 처리, 유효성 검사, UI-DB 매핑 등을 담당하며, Workflow Object
는 다단계 폼의 상태 전환 로직을 관리합니다. 이들 추상화는 ApplicationForm
과 같은 기본 클래스를 통해 ActiveModel
및 ActiveSupport
와 같은 Rails의 빌딩 블록을 활용하여 Rails의 폼 헬퍼와도 완벽하게 연동되도록 구현됩니다. 이처럼 새로운 워크스테이션을 도입하고 책임을 분리함으로써, 애플리케이션은 더욱 모듈화되고 유지보수하기 쉬워지며, 지속적인 성장이 가능해집니다.
결론적으로, Rails와 함께 성공적으로 성장하기 위한 핵심은 프레임워크와 대립하는 것이 아니라, 이를 포용하고 능동적으로 확장하는 데 있습니다. Rails를 마스터하여 그 내재된 원리와 디자인을 이해하고, 제시된 네 가지 추상화 원칙을 적용하여 애플리케이션의 각 부분이 마치 퍼즐 조각처럼 완벽하게 맞아떨어지도록 설계해야 합니다. 이러한 접근 방식은 지속적인 생산성을 유지하고, 대규모 Rails 애플리케이션에서도 개발자의 행복을 보장하는 길임을 강연자는 강조합니다.