Ruby on Rails 아키텍처 가이드
비개발자도 이해할 수 있는 웹 애플리케이션의 구조와 동작 원리
1 전체 구조: 사용자 요청부터 응답까지
요청 흐름 설명
- 1 사용자가 브라우저에서 heyjames.ai 주소를 입력합니다
- 2 DNS가 도메인을 서버 IP 주소(예: 123.45.67.89)로 변환합니다
- 3 서버가 요청을 받아 Docker 컨테이너 안의 Rails 앱으로 전달합니다
- 4 Rails가 요청을 처리하고 HTML 페이지를 만들어 사용자에게 돌려줍니다
2 Ruby와 Rails의 관계
Ruby
프로그래밍 언어
Ruby는 프로그래밍 언어입니다. 사람이 읽기 쉽고 직관적인 문법을 가지고 있어 "개발자의 행복"을 추구합니다.
Ruby 코드 예시:
puts "안녕하세요!"
Rails
웹 프레임워크
Rails는 Ruby로 만들어진 웹 프레임워크입니다. 웹사이트를 빠르게 만들 수 있도록 미리 준비된 도구와 규칙을 제공합니다.
Rails가 제공하는 것:
MVC 구조, 라우팅, 보안, DB 연결 등
쉬운 비유
Ruby = 한국어
의사소통을 위한 언어 그 자체
Rails = 계약서 양식
한국어로 계약서를 빠르게 작성할 수 있도록 미리 만들어진 템플릿
3 Gem: 레고 블록처럼 조립하는 라이브러리
Gem이란?
Ruby 라이브러리 패키지
Gem은 다른 개발자들이 만들어 놓은 코드 묶음입니다. 필요한 기능을 직접 만들지 않고, Gem을 설치해서 바로 사용할 수 있습니다.
Gemfile에 추가:
gem "bcrypt" # 비밀번호 암호화
자주 사용하는 Gem 예시
비밀번호 암호화
이미지 크기 조절, 변환
이메일 발송
페이지네이션 (1, 2, 3 페이지)
Gemfile = 쇼핑 목록
프로젝트에서 사용할 모든 Gem을 Gemfile에 적어둡니다.
bundle install 명령어로 한 번에 설치합니다.
# Gemfile
gem "rails", "~> 8.0"
gem "bcrypt"
gem "tailwindcss-rails"
4 Routes: URL 교통 정리
Routes란?
URL과 Controller 연결
사용자가 특정 URL에 접속했을 때, 어떤 Controller의 어떤 동작을 실행할지 정의합니다. 웹사이트의 교통 안내판 역할을 합니다.
Routes 예시
# config/routes.rb
URL 요청 처리 흐름
사용자
/courses 접속
Routes
경로 확인
Controller
courses#index
View
HTML 응답
5 Rails MVC 아키텍처
Model
데이터 & 비즈니스 로직데이터베이스와 소통하는 역할을 합니다. 사용자 정보, 강의 정보 등 모든 데이터를 저장하고 불러옵니다.
# app/models/user.rb
사용자의 이름, 이메일, 비밀번호 등을 관리
View
화면 & 사용자 인터페이스사용자에게 보여지는 화면을 만듭니다. HTML, CSS로 구성된 웹페이지를 생성합니다.
# app/views/home/index.html.erb
홈페이지의 레이아웃과 디자인을 담당
Controller
요청 처리 & 중재자사용자 요청을 받아 적절한 Model에서 데이터를 가져오고, View에 전달해 화면을 만듭니다.
# app/controllers/courses_controller.rb
강의 목록 보기, 수강 신청 등 처리
MVC 동작 흐름
사용자 요청
/courses 접속
Controller
요청 분석
Model
데이터 조회
View
HTML 생성
응답
화면 표시
6 Migration과 Model: 데이터 구조 관리
Migration
데이터베이스 설계도
Migration은 데이터베이스의 테이블 구조를 정의합니다. 어떤 테이블에 어떤 컬럼(필드)이 있는지 설계도처럼 작성합니다.
# db/migrate/create_users.rb
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
Model
데이터 조작 담당
Model은 데이터베이스와 실제로 소통합니다. 데이터 저장, 조회, 수정, 삭제와 유효성 검사를 담당합니다.
# app/models/user.rb
class User < ApplicationRecord
validates :email, presence: true
has_many :enrollments
end
왜 Migration과 Model을 분리했나?
버전 관리
Migration은 데이터베이스 변경 이력을 기록합니다. 언제 어떤 컬럼이 추가되었는지 추적할 수 있습니다.
팀 협업
여러 개발자가 동시에 작업해도, Migration 파일로 데이터베이스 구조를 동기화할 수 있습니다.
Migration → Database → Model 흐름
Migration
구조 정의
rails db:migrate
Database
테이블 생성
데이터 조작
Model
CRUD 작업
7 프론트엔드: 사용자가 보는 화면
ERB Views
HTML + Ruby 템플릿
HTML 안에 Ruby 코드를 넣을 수 있는 템플릿입니다.
<%= user.name %>처럼
동적인 데이터를 화면에 표시합니다.
예시: 사용자 이름 표시
안녕하세요, <%= @user.name %>님!
Hotwire
빠른 페이지 업데이트
페이지 전체를 다시 불러오지 않고 필요한 부분만 빠르게 업데이트합니다. 앱처럼 부드러운 사용자 경험을 제공합니다.
Tailwind CSS
유틸리티 기반 스타일링
미리 정의된 클래스를 조합해 디자인합니다.
bg-blue-500처럼
직관적인 이름으로 스타일을 적용합니다.
예시:
class="bg-red-500 text-white p-4 rounded-lg"
8 데이터베이스: 정보 저장소
SQLite
파일 기반 데이터베이스
모든 데이터가 하나의 파일에 저장됩니다. 별도 서버가 필요 없어 간편하고, 소규모~중규모 서비스에 적합합니다.
저장 위치:
storage/production.sqlite3
데이터 구조 예시
id, name, email, password, created_at
id, title, description, price, instructor_id
id, user_id, course_id, progress, completed_at
9 Solid 시리즈: Rails 8의 통합 인프라
Solid Queue
백그라운드 작업 처리
이메일 발송, 이미지 처리 등 시간이 오래 걸리는 작업을 뒤에서 처리합니다.
예시 작업:
- • 회원가입 환영 이메일 발송
- • 동영상 인코딩
- • 결제 완료 알림
Solid Cache
데이터 캐싱
자주 조회되는 데이터를 저장해두고 빠르게 제공합니다. 서버 부하를 줄여줍니다.
캐싱 대상:
- • 강의 목록 페이지
- • 사용자 세션 정보
- • API 응답 데이터
Solid Cable
실시간 통신
서버와 브라우저 간 실시간 양방향 통신을 지원합니다. WebSocket 기반입니다.
활용 예시:
- • 실시간 채팅
- • 알림 푸시
- • 라이브 업데이트
Solid 시리즈 연결 구조
SQLite
모든 Solid 시리즈는 SQLite 데이터베이스를 저장소로 사용합니다. 별도의 Redis나 외부 서비스 없이 하나의 데이터베이스로 모든 기능을 처리합니다.
10 배포: 코드를 서버에 올리기
Docker
컨테이너 기술
애플리케이션을 "컨테이너"라는 격리된 환경에 담아 실행합니다. 어떤 서버에서든 동일하게 동작하도록 보장합니다.
컨테이너에 포함된 것:
Kamal
배포 자동화 도구
Docker 컨테이너를 서버에 배포하는 과정을 자동화합니다. 한 줄 명령어로 새 버전을 서버에 올릴 수 있습니다.
배포 명령어:
kamal deploy
배포 과정
코드 작성
Docker
배포
11 도메인, IP, 서버의 관계
쉬운 비유로 이해하기
도메인 = 집 주소
"서울시 강남구 123번지"
heyjames.ai
IP = GPS 좌표
"37.5665, 126.9780"
123.45.67.89
서버 = 실제 건물
"데이터센터의 컴퓨터"
AWS / Vultr
DNS: 도메인을 IP로 변환
사용자가 입력
heyjames.ai
서버 IP 주소
123.45.67.89
Rails 앱 응답
12 클라이언트-서버 통신 구조
HTTP 요청 (Request)
강의 목록 페이지 요청
로그인 정보 전송
프로필 정보 수정
댓글 삭제
HTTP 응답 (Response)
요청 성공, HTML 페이지 반환
다른 페이지로 이동
페이지를 찾을 수 없음
서버 내부 오류
전체 통신 흐름
클라이언트
브라우저 / 앱
Rails 서버
heyjames.ai
Database
SQLite
13 Hotwire Native: 웹에서 앱스토어까지
하나의 코드로 웹 + 앱
Hotwire Native (iOS/Android)
Rails로 개발한 웹 서비스를 네이티브 앱으로 감싸 App Store와 Google Play에 출시할 수 있습니다. 별도의 앱 개발 없이 웹 코드를 그대로 활용합니다.
네이티브 기능 연동
FCM/APNs 연동
IoT 기기 연결
사진/동영상 촬영 및 업로드
GPS 기반 서비스
웹 → 앱 변환 구조
Rails 웹앱
HTML/CSS/JS
Hotwire Native
웹뷰 + 브릿지
iOS
Android
네이티브 기능이 필요한 부분만 Swift/Kotlin으로 작성하고, 나머지는 웹 코드를 그대로 사용