NEGABARO Rails

Rails 개발에 필요한 핵심 개념들을 정리한 백과사전입니다.

🗄️ Models & Database

💎

ActiveRecord

ORM — 객체로 데이터베이스를 조작

Object-Relational Mapping. Ruby 객체와 DB 테이블을 자동 매핑하여, SQL을 직접 작성하지 않고 Ruby 메서드로 데이터를 CRUD합니다.

📦

Migrations (마이그레이션)

코드로 데이터베이스 스키마를 버전 관리

Ruby 코드로 DB 테이블 생성/수정/삭제를 정의하고, 시간순으로 실행하여 스키마를 버전 관리합니다. Git처럼 DB 변경 이력을 추적하고 롤백할 수 있습니다.

🔗

Associations (관계)

has_many, belongs_to — 모델 간 관계 설정

belongs_to, has_many, has_one, has_many :through 등으로 모델 간 관계를 선언적으로 정의합니다. 외래키 규약을 따르면 자동으로 연결됩니다.

✅

Validations (유효성 검사)

Model 레벨에서 데이터 무결성 보장

validates 매크로로 모델에 유효성 검사를 선언합니다. presence, uniqueness, length, format 등 다양한 검증을 DB 저장 전에 수행합니다.

🪝

Model Callbacks

저장/삭제 전후에 자동 실행되는 훅

before_save, after_create, before_destroy 등 모델 라이프사이클 이벤트에 훅을 걸어, 특정 시점에 자동으로 로직을 실행합니다.

🔎

Scopes & Query Interface

재사용 가능한 쿼리를 이름 붙여 관리

scope 매크로로 자주 쓰는 쿼리 조건에 이름을 붙여 재사용합니다. 체이닝이 가능하여 복잡한 쿼리도 가독성 있게 작성할 수 있습니다.

⚠️

N+1 쿼리 문제

성능의 적 — includes로 해결하는 방법

연관 데이터를 반복문에서 개별 조회하면 1(목록) + N(각 항목의 연관) 번 쿼리가 발생합니다. includes/preload/eager_load로 2번의 쿼리로 줄일 수 있습니다.

🧩

jsonb와 store_accessor

PostgreSQL의 jsonb 컬럼을 모델 속성처럼 다루기

jsonb는 JSON을 바이너리로 저장하는 PostgreSQL 컬럼 타입. store_accessor를 쓰면 jsonb 컬럼 하나에 여러 값을 넣고 일반 컬럼처럼 읽고 쓴다.

🔀

find_or_initialize_by vs create_or_find_by

RecordNotUnique가 터지는 이유 — 찾기와 만들기의 순서

두 메서드는 찾기와 만들기의 순서가 반대다. find_or_initialize_by는 SELECT 먼저, create_or_find_by는 INSERT 먼저. 동시 요청에서 RecordNotUnique가 난다면 후자로 바꿀 때다.

🚀 Advanced

⏳

Background Jobs

Active Job + Sidekiq — 무거운 작업을 비동기로 처리

이메일 발송, 파일 처리, 외부 API 호출 등 시간이 걸리는 작업을 백그라운드 큐에 넣어 비동기로 처리합니다. 사용자는 즉시 응답을 받습니다.

💀

Sidekiq: 릴리스와 비동기 잡의 함정

SIGTERM/SIGKILL — 긴 Sidekiq 잡이 배포 때마다 죽는 이유

비동기 잡이 배포 타이밍에 따라 통째로 사라지거나 status가 영원히 \"실행중\" 으로 고착될 수 있다. SIGTERM(우아한 종료)과 SIGKILL(강제 종료)의 차이, Sidekiq의 graceful shutdown 동작, OSS의 한계를 이해하면 왜 이런 사고가 나는지 보인다.

📡

Action Cable

Rails 내장 WebSocket — 실시간 기능 구현

Rails에 내장된 WebSocket 프레임워크로, 서버에서 클라이언트로 실시간 데이터를 푸시합니다. 채팅, 알림, 실시간 업데이트에 활용.

💨

Caching (캐싱)

반복 연산을 줄여 응답 속도를 극적으로 향상

Fragment Caching, Russian Doll Caching, Low-Level Caching 등으로 DB 쿼리와 뷰 렌더링 결과를 캐시하여 응답 속도를 수십 배 향상시킵니다.

📦

Asset Pipeline & Vite

JavaScript, CSS, 이미지 등 프론트엔드 에셋 관리

Sprockets(전통), Webpacker(폐지), Vite(최신)로 JavaScript/CSS/이미지를 번들링하고, 핑거프린팅으로 캐시 최적화합니다.

🚢

Kamal 배포

Rails 공식 배포 도구 — Docker 기반 제로 다운타임 배포

DHH가 만든 Rails 공식 배포 도구. Docker 컨테이너로 어떤 VPS에든 배포 가능. DigitalOcean 등 소규모 서버에서는 로컬 빌드 후 레지스트리에 push하는 방식을 권장합니다.

🖼️

background-removal-js — 브라우저에서 AI로 배경을 제거하는 원리

IS-Net 모델 + ONNX Runtime Web + WebGPU, 서버 없이 클라이언트에서 세그멘테이션

imgly/background-removal-js는 브라우저에서 서버 없이 AI로 이미지 배경을 제거한다. IS-Net(U-Net 계열) 모델을 ONNX Runtime Web으로 실행하며, WebGPU 가속도 지원한다. 이미지를 1024×1024로 리사이즈 → 모델이 알파마스크 출력 → 원본에 적용하는 구조.