Brut 프레임워크는 개발의 복잡성을 줄이고 생산성을 높이는 데 중점을 둡니다. 주요 특징으로는 내장된 OpenTelemetry 기반의 계측 기능과 Sequel 기반의 강력한 데이터 접근 계층을 들 수 있습니다. 또한, OptionParser를 활용한 커맨드라인 앱을 통해 개발 자동화를 지원하여, 사용자가 Ruby를 설치할 필요 없이 Docker를 통해 몇 분 만에 앱을 구축하고 실행할 수 있도록 합니다. 이는 개발 환경 설정에 드는 시간을 대폭 줄여줍니다.
Brut의 핵심 설계는 클래스를 인스턴스화하고 그 위에 메서드를 호출하는 객체 지향적 방식에 기반합니다. 이는 과도한 include
호출을 지양하고, 세션, 플래시 메시지, 폼 파라미터 등 모든 데이터가 명확하게 정의된 클래스 및 데이터 타입으로 관리되도록 합니다. 동적으로 정의되는 메서드나 method_missing
의 의존성을 최소화하여 코드의 가독성과 예측 가능성을 높였습니다.
현대 웹 플랫폼의 장점을 적극적으로 활용하는 Brut은 클라이언트 측과 서버 측 폼 유효성 검사를 통합하여 일관된 사용자 경험을 제공합니다. 또한, 자체 개발된 BrutJS 라이브러리는 웹 컴포넌트(autonomous custom elements)를 통해 HTML을 점진적으로 개선하며, esbuild를 사용하여 CSS를 즉시 패키징, 축소, 해싱 처리하여 PostCSS나 SASS와 같은 추가 도구 없이도 효율적인 스타일 관리가 가능합니다.
Brut은 좋은 개발 관행을 기본 설정으로 제공합니다. 예를 들어, 합리적인 콘텐츠 보안 정책을 기본으로 적용하며, 데이터베이스 컬럼은 기본적으로 NULL을 허용하지 않고, 외래 키는 항상 존재하며 인덱싱되고 NULL을 허용하지 않도록 설정됩니다. 또한, Brut의 Clock을 통해 제공되는 시간은 항상 시간대를 인식하며, 지역화 기능도 쉽게 구현할 수 있도록 지원합니다.
프레임워크는 RSpec, Faker, FactoryBot과 같은 검증된 Ruby gem들을 적극적으로 활용하여 테스트 작성 및 개발 데이터 설정을 용이하게 합니다. HTML 생성에는 Phlex를 사용하며, HAML은 지원하지 않습니다. 특히 주목할 점은 YAML 기반 설정을 최소화했다는 것입니다. 국제화(I18n)는 Ruby Hash를, 동적 설정은 환경 변수를 사용하며, docker-compose.dx.yml 파일을 제외하고는 YAML 사용을 극도로 제한합니다.
Brut은 불필요한 추상화를 만들지 않으려는 철학을 가지고 있습니다. 예를 들어, 웹 페이지는 명확하게 WidgetsPage
와 같이 명명되고 /widgets
와 같은 직관적인 URL에 매핑됩니다. 데이터베이스 접근 로직과 도메인 로직을 명확히 분리하여 DB::Widget
이 데이터만 처리하고, 비즈니스 로직은 별도의 클래스나 서비스에서 관리하도록 권장합니다. 기존 프레임워크에서 흔히 발생하는 컨트롤러 관련 논쟁이나 복잡한 라우팅 규칙 없이, 개발자는 오직 필요한 기능 구현에 집중할 수 있습니다. 이는 Rails 앱의 상투적인 코드, 끝없는 유연성, 지속적인 아키텍처 결정, 그리고 불필요한 논쟁에 지친 개발자들에게 새로운 대안을 제시하며, Ruby와 HTML, 그리고 브라우저의 강력한 기능을 활용하여 웹 앱 개발의 즐거움을 되찾는 데 초점을 맞추고 있습니다.