GraphQL with Rails — REST를 넘어서

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

전통적인 REST API는 여전히 강력하지만, 프론트엔드가 복잡해지고 데이터 요구가 다양해질수록 한계가 드러납니다.
이제는 하나의 요청으로 필요한 데이터만 정확하게 가져오는 GraphQL이 주목받고 있죠.
Rails에서도 graphql-ruby를 통해 쉽게 GraphQL 서버를 구축할 수 있습니다.

이번 글에서는 Rails에 GraphQL을 적용해보고, REST와의 차이점과 실전 구현 예시까지 소개할게요.


🌐 GraphQL이란?

GraphQL은 Facebook이 개발한 데이터 질의 언어로, “필요한 데이터를 정확하게 요청”할 수 있게 해줍니다.

  • 하나의 요청으로 다양한 리소스를 조회할 수 있음
  • 오버페칭(over-fetching), 언더페칭(under-fetching) 문제 해결
  • 엄격한 타입 시스템 기반으로 자동 문서화 및 검증

🚀 1. Rails에 GraphQL 설치

$ bundle add graphql
$ bin/rails generate graphql:install

이 명령으로 GraphQLController, app/graphql 디렉토리, 그리고 /graphql 엔드포인트가 생성됩니다.


📄 2. 타입 정의 및 쿼리 만들기

Post 타입 만들기

$ bin/rails generate graphql:object Post

# app/graphql/types/post_type.rb
module Types
  class PostType < Types::BaseObject
    field :id, ID, null: false
    field :title, String, null: false
    field :content, String, null: true
  end
end

쿼리 정의하기


# app/graphql/types/query_type.rb
field :posts, [Types::PostType], null: false

def posts
  Post.all
end

🧪 3. GraphiQL로 테스트하기

개발 모드에서는 http://localhost:3000/graphql에서 GraphiQL IDE를 사용할 수 있어요.

예시 쿼리


query {
  posts {
    id
    title
  }
}

REST에서는 /posts로 호출하고, 응답 전체를 받아야 했지만
GraphQL에서는 원하는 필드만 명시적으로 지정해서 받습니다.


🆚 REST와 GraphQL 비교

기준 REST GraphQL
요청 구조 엔드포인트별 고정 하나의 /graphql 엔드포인트
데이터 양 조절 불가능 (모든 필드 수신) 가능 (필드 선택 가능)
네트워크 요청 수 여러 번 필요 한 번에 여러 리소스 요청 가능
버전 관리 v1, v2로 API 분리 필드 단위 변경 가능

🧩 4. Mutation 예시 (데이터 생성)

$ bin/rails generate graphql:mutation CreatePost

# app/graphql/mutations/create_post.rb
module Mutations
  class CreatePost < BaseMutation
    argument :title, String, required: true
    argument :content, String, required: false

    type Types::PostType

    def resolve(title:, content:)
      Post.create(title: title, content: content)
    end
  end
end

GraphQL 쿼리


mutation {
  createPost(input: { title: "GraphQL", content: "It's awesome" }) {
    id
    title
  }
}

📦 실전 팁

  • graphql-ruby는 batch loading, pagination도 지원
  • relay 지원도 가능
  • API 문서 없이도 스키마 기반으로 자동 문서화됨

🎯 마치며

GraphQL은 초기에는 약간 생소할 수 있지만, 일단 익숙해지면 매우 강력한 도구가 됩니다.
특히 프론트엔드와 협업할 때 유연성과 효율이 극대화되죠.
Rails에서도 공식적으로 강력한 지원을 하고 있으니, 꼭 한 번 실험적으로라도 도입해보세요.

728x90
반응형

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

ElasticSearch를 이용한 고급 검색 기능 구현하기  (0) 2025.08.21
API 서버로서의 Rails — Rails + React/Vue 조합 만들기  (2) 2025.08.14
Rails 캐싱 전략 — 페이지, 프래그먼트, 러시아 인형 캐시  (3) 2025.08.12
Rails에서 환경변수 관리 — dotenv와 secrets.yml  (3) 2025.08.07
Capistrano로 자동 배포 파이프라인 만들기  (2) 2025.08.05
'Ruby On Rails' 카테고리의 다른 글
  • ElasticSearch를 이용한 고급 검색 기능 구현하기
  • API 서버로서의 Rails — Rails + React/Vue 조합 만들기
  • Rails 캐싱 전략 — 페이지, 프래그먼트, 러시아 인형 캐시
  • Rails에서 환경변수 관리 — dotenv와 secrets.yml
코드를 걷는 사람
코드를 걷는 사람
devwanderer 님의 블로그 입니다.
  • 코드를 걷는 사람
    터미널 밖으로 나온 개발자
    코드를 걷는 사람
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Flutter
        • Flutter 게시판 앱 만들기
        • Flutter 뉴스 앱 만들기
        • Flutter 메모 앱 만들기
        • Flutter 캘린더 앱 만들기
        • Flutter 날씨 앱 만들기
      • Next.js
      • Ruby On Rails
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
코드를 걷는 사람
GraphQL with Rails — REST를 넘어서
상단으로

티스토리툴바