루비 온 레일즈 기반 빌딩 모니터링 서비스 개발 방법
BIM 칼럼니스트 강태욱의 이슈 & 토크
루비 온 레일즈(Ruby on Rails)는 루비(Ruby) 프로그래밍 언어로 작성된 서버 측 웹 애플리케이션 프레임워크이다. 일반적으로 ‘레일즈(Rails)’로 줄여 부르며, 2004년 데이비드 하이네마이어 한손(David Heinemeier Hansson)에 의해 처음 공개되었다.
이번 호에서는 루비 온 레일즈의 설치 및 개발 방법을 정리하고, 이를 기반으로 개발된 빌딩 모니터링 구현 결과를 설명한다.
■ 강태욱
건설환경 공학을 전공하였고 소프트웨어 공학을 융합하여 세상이 돌아가는 원리를 분석하거나 성찰하기를 좋아한다. 건설과 소프트웨어 공학의 조화로운 융합을 추구하고 있다. 팟캐스트 방송을 통해 이와 관련된 작은 메시지를 만들어 나가고 있다. 현재 한국건설기술연구원에서 BIM/ GIS/FM/BEMS/역설계 등과 관련해 연구를 하고 있으며, 연구위원으로 근무하고 있다.
페이스북 | www.facebook.com/laputa999
블로그 | https://daddynkidsmakers.blogspot.com
홈페이지 | https://dxbim.blogspot.com
팟캐스트 | www.facebook.com/groups/digestpodcast
그림 1
루비는 베이스캠프(Basecamp)란 곳을 시작으로, 세계 최대의 코드 호스팅 플랫폼 깃허브(GitHub), 글로벌 이커머스 설루션 쇼피파이(Shopify), 숙박 공유 서비스 에어비앤비(Airbnb), 그리고 트위치(Twitch) 등이 레일즈를 기반으로 탄생하고 성장했다. 국내에서도 빠른 서비스 출시와 성장이 핵심인 스타트업 신을 중심으로 널리 사용되었다. 대표적으로 지역 기반 커뮤니티 당근, 온라인 동영상 서비스(OTT) 왓챠 등이 초기부터 레일즈를 활용해 서비스를 구축하고 확장해온 대표 사례로 꼽힌다.
레일즈의 핵심 개발 철학은 ‘설정보다 관례(Convention over Configuration : CoC)’와 ‘반복하지 마라(Don’t Repeat Yourself : DRY)’이다. 이는 개발자가 반복적인 설정 작업에서 벗어나 비즈니스 로직에 집중하게 함으로써, 웹 개발의 생산성을 획기적으로 향상시키는 것을 목표로 한다.
배경 및 핵심 개념
레일즈는 MVC(Model – View – Controller) 아키텍처 패턴을 근간으로 설계되었다. 이는 애플리케이션의 구성 요소를 세 가지 역할로 명확히 분리하여 코드의 구조를 체계적으로 관리하는 방식이다.
모델(Model) : 애플리케이션의 데이터와 비즈니스 로직을 담당한다. 데이터베이스 테이블에 직접 대응되며, 데이터의 유효성 검사, 처리, 저장 등의 역할을 수행한다.
뷰(View) : 사용자에게 보여지는 UI(사용자 인터페이스)를 생성하는 할을 한다. HTML, CSS, 자바스크립트(JavaScript) 코드를 동적으로 생성하여 웹 브라우저에 표시할 최종 결과물을 만든다.
컨트롤러(Controller) : 모델과 뷰 사이의 중재자 역할을 한다. 사용자의 요청(HTTP request)을 받아 분석하고, 필요한 모델을 호출하여 데이터를 처리한 뒤, 그 결과를 다시 뷰에 전달하여 사용자에게 응답(HTTP response)을 보낸다. 이러한 구조 덕분에 개발자는 데이터, 로직, 화면 표시 코드를 분리하여 유지보수가 용이하고 확장성 높은 애플리케이션을 구축할 수 있다.
장점 및 단점
레일즈의 장점은 다음과 같다.
높은 생산성과 개발 속도 : CoC 철학과 스캐폴딩(scaffolding) 같은 강력한 코드 자동 생성 기능은 CRUD(생성, 읽기, 갱신, 삭제) 기반의 기능을 매우 빠르게 구현하게 해준다.
거대하고 활발한 생태계 : ‘젬(Gem)’이라고 불리는 수많은 오픈소스 라이브러리가 존재하여 인증, 결제, 파일 업로드 등 다양한 기능을 몇 줄의 코드로 손쉽게 추가할 수 있다.
가독성 및 유지보수성 : 루비 언어 자체의 간결하고 우아한 문법과 레일즈의 잘 정립된 관례는 코드의 가독성을 높여 팀 단위 협업과 장기적인 유지보수를 용이하게 한다.
한편, 단점은 다음과 같다.
상대적으로 느린 실행 속도 : 인터프리터 언어인 루비의 특성상, Go나 Java와 같은 컴파일 언어 기반의 프레임워크에 비해 요청 처리 속도가 느릴 수 있다.
초기 학습 곡선 : 레일즈의 많은 부분이 ‘마법’처럼 자동으로 동작하기 때문에, 내부 동작 원리를 깊이 이해하기 전까지는 문제 발생 시 원인을 파악하고 디버깅하는 데 어려움을 겪을 수 있다.
제한적인 유연성 : 레일즈가 제시하는 강력한 관례는 대부분의 웹 애플리케이션 개발에 최적화되어 있지만, 매우 특수하거나 비표준적인 구조를 가진 시스템을 개발할 때는 오히려 제약이 될 수 있다.
젬은 현재 인공지능 기술 스택을 고려해 발전 중이다. 루비 생태계의 중심에는 ‘루비젬스(RubyGems)’라는 강력한 패키지 관리 시스템이 자리 잡고 있다. 이는 전 세계의 루비 개발자들이 만든 수많은 라이브러리를 젬이라는 표준화된 패키지 형태로 공유하고 재사용할 수 있도록 하는 핵심 기반이다. 개발자는 젬을 통해 인증, 데이터베이스 연동, 웹 서버 구동과 같은 복잡한 기능을 직접 구현할 필요 없이, 이미 검증된 코드를 자신의 프로젝트에 손쉽게 통합하여 개발 생산성을 극대화할 수 있다.
이러한 의존성을 체계적으로 관리하는 도구가 바로 ‘번들러(Bundler)’이다. 프로젝트의 Gemfile에 필요한 젬의 이름과 버전을 명시하면, 번들러는 해당 젬뿐만 아니라 그 젬이 의존하는 다른 모든 젬까지 정확한 버전으로 설치하여 개발 환경의 일관성을 보장한다.
이는 여러 개발자가 협업하는 환경에서 발생할 수 있는 잠재적인 충돌을 방지하고 안정적인 애플리케이션 운영을 가능하게 하는 필수 과정이다. 최근 인공지능, 특히 거대 언어 모델(LLM)이 기술의 새로운 패러다임으로 부상하면서 루비 커뮤니티 역시 이러한 변화에 발 빠르게 대응하고 있다. 루비의 강점인 뛰어난 가독성과 개발 편의성을 바탕으로, 복잡한 AI 기능을 애플리케이션에 통합하기 위한 다양한 젬들이 활발하게 개발되는 중이다.
가장 대표적인 것은 ruby-openai 젬으로, 오픈AI (OpenAI)가 제공하는 GPT, 달리(DALL-E)와 같은 강력한 모델의 API를 루비 코드 내에서 직관적으로 호출할 수 있게 해준다. 이를 통해 개발자는 손쉽게 챗봇, 콘텐츠 생성, 이미지 생성과 같은 최신 AI 기능을 자신의 서비스에 접목할 수 있다. 여기서 한 걸음 더 나아가, langchainrb는 LLM을 활용한 고수준의 애플리케이션을 구축하기 위한 프레임워크를 제공한다. 이는 단순히 API를 한 번 호출하는 것을 넘어, 여러 단계의 프롬프트를 연결하는 ‘체인’이나 LLM이 특정 도구를 사용하도록 만드는 ‘에이전트’와 같은 복잡한 로직을 구조적으로 설계할 수 있도록 돕는다.
■ 자세한 기사 내용은 PDF로 제공됩니다.
작성일 : 2026-05-06