API 서버로서의 Rails — Rails + React/Vue 조합 만들기

2025. 8. 14. 09:00·Ruby On Rails
728x90
반응형

최근 웹 개발은 백엔드와 프론트엔드의 완전 분리가 일반적인 구조가 되었습니다.
이제는 Rails가 전체 HTML을 렌더링하는 대신, JSON API만 제공하는 서버 역할을 하는 경우가 많죠.
이런 조합에서는 프론트엔드는 React, Vue 등으로 구축하고, Rails는 API 서버로만 동작</strong합니다.

이번 글에서는 Rails를 API 모드로 설정하고, React 또는 Vue 프론트엔드와 함께 동작시키는 전체 구조를 다뤄봅니다.


🧱 1. Rails API 모드로 새 프로젝트 생성

$ rails new backend-api --api

--api 옵션을 주면 Rails는 다음과 같은 변경 사항이 적용된 상태로 시작됩니다:

  • 뷰 렌더링 미사용 (ERB 등 제외)
  • 세션/쿠키 비활성화
  • ActionController::API 기반으로 가벼운 컨트롤러 구성

🛠️ 2. CORS 설정 (Cross-Origin Resource Sharing)

프론트엔드 앱에서 Rails API에 요청을 보내려면 CORS 설정이 필요합니다.

# Gemfile
gem 'rack-cors'

# config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins 'http://localhost:3000'  # 프론트엔드 주소
    resource '*',
      headers: :any,
      methods: [:get, :post, :put, :patch, :delete, :options]
  end
end

React는 기본적으로 3000 포트에서 실행되기 때문에, 로컬 개발 시 CORS 허용이 꼭 필요합니다.


🔌 3. API 컨트롤러 구성

기본 컨트롤러는 ApplicationController < ActionController::API를 상속합니다.


# app/controllers/api/posts_controller.rb
module Api
  class PostsController < ApplicationController
    def index
      posts = Post.all
      render json: posts
    end
  end
end

📂 routes.rb 설정


# config/routes.rb
namespace :api do
  resources :posts
end

API 전용 경로는 /api/posts 형태로 만들어집니다.


⚛️ 4. React or Vue 프론트엔드 연결

React 예시


useEffect(() => {
  fetch('http://localhost:3001/api/posts')
    .then(res => res.json())
    .then(data => setPosts(data));
}, []);

Vue 예시


mounted() {
  fetch('http://localhost:3001/api/posts')
    .then(res => res.json())
    .then(data => {
      this.posts = data;
    });
}

Axios를 사용하는 것도 가능하며, 토큰 인증 등은 이후 확장 가능합니다.


🔐 5. 인증 추가 (선택)

API 서버는 보통 JWT(Json Web Token) 기반 인증을 많이 사용합니다.

# Gemfile
gem 'jwt'

토큰 발급 및 검증은 Authorization 헤더를 사용하여 구현합니다. 자세한 인증 로직은 이후 별도 글에서 다룰 예정입니다 🔐


📦 6. 배포 구조

API 서버와 프론트엔드를 분리 배포하는 구조는 다음과 같습니다:

  • Rails API 서버: Heroku, Render, EC2 등에 배포
  • React/Vue 앱: Netlify, Vercel, S3 등에 배포
  • 두 앱은 HTTP 요청을 통해 통신 (REST API or GraphQL)

🎯 마치며

Rails는 오래된 프레임워크처럼 보일 수 있지만, API 서버로 사용하면 가볍고 빠르며 강력한 백엔드가 됩니다.
React나 Vue와의 조합은 현대적인 웹 개발에서 매우 흔하고, 실전에서도 안정적으로 운영되고 있어요.

728x90
반응형

'Ruby On Rails' 카테고리의 다른 글

Rails 캐싱 전략 — 페이지, 프래그먼트, 러시아 인형 캐시  (2) 2025.08.12
Rails에서 환경변수 관리 — dotenv와 secrets.yml  (3) 2025.08.07
Capistrano로 자동 배포 파이프라인 만들기  (2) 2025.08.05
Heroku로 Rails 앱 배포하기 — 빠르고 간단한 클라우드 배포  (2) 2025.07.31
Rails 앱 보안 점검 — CSRF, SQL Injection 막기  (2) 2025.07.29
'Ruby On Rails' 카테고리의 다른 글
  • Rails 캐싱 전략 — 페이지, 프래그먼트, 러시아 인형 캐시
  • Rails에서 환경변수 관리 — dotenv와 secrets.yml
  • Capistrano로 자동 배포 파이프라인 만들기
  • Heroku로 Rails 앱 배포하기 — 빠르고 간단한 클라우드 배포
코드를 걷는 사람
코드를 걷는 사람
devwanderer 님의 블로그 입니다.
  • 코드를 걷는 사람
    터미널 밖으로 나온 개발자
    코드를 걷는 사람
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Flutter
        • Flutter 게시판 앱 만들기
        • Flutter 뉴스 앱 만들기
        • Flutter 메모 앱 만들기
        • Flutter 캘린더 앱 만들기
        • Flutter 날씨 앱 만들기
      • Next.js
      • Ruby On Rails N
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    openweather
    뉴스앱
    flutterui
    ActiveRecord
    rails보안
    RubyOnRails
    다크모드
    flutter기초
    모바일앱개발
    Flutter
    Nextjs
    table_calendar
    flutter상태관리
    감성앱
    북마크기능
    flutter개발
    flutter앱개발
    Firebase
    백엔드개발
    UIUX
    fluttertips
    캘린더앱
    정적사이트
    코드를걷는사람
    flutter디자인
    UI디자인
    날씨앱
    flutter게시판
    개발블로그
    메모앱
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
코드를 걷는 사람
API 서버로서의 Rails — Rails + React/Vue 조합 만들기
상단으로

티스토리툴바