웹 서비스를 혼자 개발하고 운영하다 보면 가장 큰 고민은 "복잡도를 어떻게 관리할 것인가"입니다. 너무 거창한 인프라는 관리 비용을 높이고, 너무 단순하면 확장성이 떨어집니다.오늘은 제 사이트(CharlieK)를 지탱하고 있는 Modern Rails 아키텍처를 소개합니다. Ruby on Rails의 핵심 철학인 MVC 패턴을 기반으로, Fly.io와 SQLite를 결합하여 비용과 성능 두 마리 토끼를 잡은 구조입니다.이 아키텍처는 전통적인 Monolithic(모놀리식) 구조의 장점을 극대화했습니다. 복잡한 마이크로서비스 대신, 하나의 Rails 앱이 MVC 패턴을 통해 비즈니스 로직과 데이터를 효율적으로 처리합니다.상세 기술 스택과 데이터 흐름은 다음과 같습니다.1. Core Logic: Rails (The MVC Pattern)시스템의 중심에는 Ruby on Rails가 있습니다. 다이어그램 중앙의 파란색 박스는 Rails 앱이 구동되는 컨테이너이며, 내부적으로 철저한 MVC(Model-View-Controller) 패턴을 따릅니다.Model (모델): 데이터와 비즈니스 로직을 담당합니다. Active Record를 통해 로컬 파일 시스템에 위치한 SQLite DB와 직접 통신하며 데이터를 읽고 씁니다.View (뷰): 사용자에게 보여지는 UI입니다. 서버 사이드 렌더링(SSR)을 통해 빠르게 HTML을 생성하여 브라우저로 전송합니다.Controller (컨트롤러): 사용자의 요청(Request)을 받아 Model에서 데이터를 꺼내오고, 적절한 View를 선택해 응답(Response)하는 사령탑 역할을 합니다.2. Database: SQLite (Production Ready)"서버용 DB로 SQLite를?"이라는 의문이 드실 수 있습니다. 하지만 모던 웹 개발 환경, 특히 Rails 7.1 이상부터는 SQLite가 강력한 프로덕션 옵션으로 떠올랐습니다.Zero Network Latency: 별도의 DB 서버를 경유하지 않고, 애플리케이션과 동일한 디스크(Volume) 내에서 I/O가 발생하기 때문에 응답 속도가 비약적으로 빠릅니다.Operational Simplicity: 복잡한 권한 설정이나 커넥션 풀 관리가 필요 없습니다. 단 하나의 파일이 곧 데이터베이스입니다.비용 효율: 고가의 RDS(Managed DB) 비용을 0원으로 만들었습니다.3. Storage: Tigris (S3 Compatible Object Storage)텍스트 데이터는 SQLite가 처리하지만, 이미지나 파일 같은 비정형 데이터는 분리해야 합니다. 이를 위해 Tigris를 도입했습니다.MVC와의 연동: Rails의 Active Storage 기능을 통해 모델(Model)에서 투명하게 파일을 업로드하고 관리합니다.Global Distribution: S3 호환 API를 제공하며, 전 세계에 분산 저장되어 사용자가 어디서 접속하든 빠르게 미디어 파일을 로딩합니다.4. Infrastructure: Fly.io이 모든 MVC 구조가 돌아가는 무대는 Fly.io입니다.Docker 기반 배포: 로컬(Local Server)에서 개발된 코드는 Docker 이미지로 빌드되어 Fly.io로 배포(Deploy)됩니다.Edge Computing: 사용자와 가장 가까운 리전에서 앱이 실행되므로, 물리적인 거리에 의한 지연 시간을 최소화했습니다.💡 마치며: 기술적 미니멀리즘 (Technical Minimalism)이 아키텍처의 핵심은 "불필요한 레이어를 제거하는 것"입니다.복잡한 클라우드 설정 대신 Fly.io를, 무거운 DB 서버 대신 SQLite를 선택함으로써, 저는 인프라 관리가 아닌 '서비스 본질(코드와 콘텐츠)'에 집중할 수 있게 되었습니다.이 사이트는 이러한 기술적 토대 위에서 운영되고 있습니다. 앞으로 블로그를 통해 Rails 개발과 관련된 더 깊이 있는 이야기들을 공유하겠습니다.
[1인 개발] 초경량 Rails MVP 아키텍처 설계 (SQLite + Fly.io + Tigris)
2026년 02월 04일 15:50
141
0
0
관련 글 보기
이 글의 주소가 복사되었습니다