IMCAT.DEV
로그인 가입
Ruby 고급 프로젝트

Ruby RESTful API 설계

Ruby RESTful API 설계 — 고급

RESTful API 설계

1. 도입 (왜 배워야 하는가)

RESTful API는 현대 웹 애플리케이션에서 데이터를 교환하는 데 필수적인 구조입니다. 이는 다양한 클라이언트(웹, 모바일 등)와 서버 간의 통신을 원활하게 해주며, 특히 마이크로서비스 아키텍처에서 중요한 역할을 합니다. RESTful API를 잘 설계하지 않으면 클라이언트와 서버 간의 데이터 전송에 많은 문제가 발생할 수 있습니다. 예를 들어, 성능 저하, 데이터 불일치, 유지보수의 어려움 등이 있습니다. 따라서 RESTful API 설계를 배우는 것은 실무에서 효율적인 시스템을 구축하기 위해 반드시 필요합니다.

2. 핵심 개념 설명

REST(Representational State Transfer)는 자원(resource)을 URI로 표현하고, HTTP 메서드를 통해 자원에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행하는 아키텍처 스타일입니다. 쉽게 말해, 웹에서 정보를 주고받는 규칙이라고 할 수 있습니다.

관련 용어 정리

용어설명
URI자원의 위치를 나타내는 고유한 주소
HTTP 메서드서버와 클라이언트 간의 요청 방식(예: GET, POST, PUT, DELETE)
JSON데이터 교환 형식으로, 사람이 읽기 쉬운 형식

3. 기본 코드 예제

다음은 Ruby on Rails에서 RESTful API를 구현하는 간단한 예제입니다.

# routes.rb
Rails.application.routes.draw do
  resources :products
end

# products_controller.rb
class ProductsController < ApplicationController
  def index
    @products = Product.all
    render json: @products
  end
end

# product.rb (모델)
class Product < ApplicationRecord
  # 데이터베이스의 products 테이블에 대응
end

실행 결과

[
  { "id": 1, "name": "Product A", "price": 100 },
  { "id": 2, "name": "Product B", "price": 150 }
]

코드 한 줄씩 동작 설명

  1. resources :products - products 자원에 대한 RESTful 경로를 자동으로 생성합니다.
  2. class ProductsController < ApplicationController - ProductsController 클래스를 정의하며, 기본 컨트롤러인 ApplicationController를 상속합니다.
  3. def index - 제품 목록을 가져오는 메서드를 정의합니다.
  4. @products = Product.all - 데이터베이스에서 모든 제품을 가져옵니다.
  5. render json: @products - 제품 목록을 JSON 형식으로 클라이언트에 응답합니다.
  6. 4. 실전 활용 예제

    1. 쇼핑몰에서 장바구니를 구현할 때

    장바구니에 제품을 추가하고, 삭제하는 API를 설계할 수 있습니다. 예를 들어, 사용자가 제품을 장바구니에 추가할 때 POST /cart API를 호출하여 제품 정보를 전송합니다.

    2. 사용자 인증 시스템

    사용자가 로그인할 때 POST /login API를 호출하고, JWT 토큰을 반환받아 이후 요청에 사용합니다.

    3. 주문 처리

    주문을 생성하는 API를 POST /orders로 설정하여, 사용자가 장바구니의 제품을 주문할 수 있도록 구현합니다.

    5. 흔한 실수와 주의사항

    실수 1: HTTP 메서드 혼용

    • 잘못된 코드:
    • # 제품 삭제를 GET 요청으로 처리하려고 할 때
      def destroy
        Product.find(params[:id]).destroy
      end
    • 올바른 코드:
    • # 제품 삭제는 DELETE 메서드로 처리해야 함
      def destroy
        Product.find(params[:id]).destroy
      end

      실수 2: URI 설계 미비

    • 잘못된 코드:
    • /products/1/edit
    • 올바른 코드:
    • /products/1
    • RESTful API에서는 /edit와 같은 동사형 URI를 사용하는 것이 아니라 자원 자체를 표현하는 것이 중요합니다.
    • 6. 정리

    • RESTful API는 클라이언트와 서버 간의 효율적인 데이터 교환을 위해 필수적입니다.
    • URI와 HTTP 메서드를 이용해 자원에 대한 CRUD 작업을 정의합니다.
    • 위반하면 성능 저하 및 유지보수 어려움이 발생할 수 있습니다.
    • 다음에 학습하면 좋은 주제:

    • GraphQL: REST 대신 데이터 쿼리를 최적화하는 방법
    • API 인증 및 보안: 사용자 인증 및 권한 관리 방법
    • OpenAPI: API 문서를 자동화하고 표준화하는 방법