Rails Insights

루비에서 HTTP 요청 수행하기

루비는 간결하고 읽기 쉬운 문법 덕분에 많은 개발자들에게 사랑받는 프로그래밍 언어입니다. 웹 개발에서 HTTP 요청을 수행하는 것은 매우 일반적인 작업이며, 루비에서도 이를 쉽게 처리할 수 있습니다. 이 글에서는 루비에서 HTTP 요청을 수행하는 방법에 대해 알아보겠습니다.

HTTP 요청이란?

HTTP(하이퍼텍스트 전송 프로토콜)는 웹에서 데이터를 전송하는 데 사용되는 프로토콜입니다. 클라이언트(예: 웹 브라우저)가 서버에 요청을 보내고, 서버가 그 요청에 대한 응답을 반환하는 방식으로 작동합니다. HTTP 요청은 주로 다음과 같은 메서드를 사용합니다:

  • GET: 서버에서 데이터를 요청합니다.
  • POST: 서버에 데이터를 전송합니다.
  • PUT: 서버의 데이터를 업데이트합니다.
  • DELETE: 서버의 데이터를 삭제합니다.

루비에서 HTTP 요청을 수행하는 방법

루비에서 HTTP 요청을 수행하기 위해 가장 많이 사용되는 라이브러리는 Net::HTTP입니다. 이 라이브러리는 루비 표준 라이브러리에 포함되어 있어 별도의 설치 없이 사용할 수 있습니다. 또한, HTTPartyRestClient와 같은 외부 라이브러리도 많이 사용됩니다. 이 글에서는 기본적으로 Net::HTTP를 사용하여 HTTP 요청을 수행하는 방법을 설명하겠습니다.

1. Net::HTTP 사용하기

먼저, Net::HTTP를 사용하여 GET 요청을 보내는 방법을 살펴보겠습니다.

require 'net/http'
require 'uri'

uri = URI.parse("http://www.example.com")
response = Net::HTTP.get_response(uri)

puts response.body

위의 코드는 http://www.example.com에 GET 요청을 보내고, 응답 본문을 출력합니다. URI.parse 메서드를 사용하여 URL을 URI 객체로 변환한 후, Net::HTTP.get_response 메서드를 사용하여 요청을 보냅니다.

2. POST 요청 보내기

이제 POST 요청을 보내는 방법을 살펴보겠습니다. POST 요청은 데이터를 서버에 전송할 때 사용됩니다.

require 'net/http'
require 'uri'

uri = URI.parse("http://www.example.com/api")
http = Net::HTTP.new(uri.host, uri.port)

# HTTPS를 사용하는 경우
# http.use_ssl = true

request = Net::HTTP::Post.new(uri.path)
request.content_type = "application/json"
request.body = '{"key": "value"}'

response = http.request(request)

puts response.body

위의 코드는 http://www.example.com/api에 JSON 형식의 데이터를 포함한 POST 요청을 보냅니다. Net::HTTP::Post 클래스를 사용하여 요청을 생성하고, content_typebody를 설정합니다.

3. GET 요청에 쿼리 파라미터 추가하기

GET 요청을 보낼 때 쿼리 파라미터를 추가하는 방법도 알아보겠습니다.

require 'net/http'
require 'uri'

uri = URI.parse("http://www.example.com/search")
params = { query: "ruby", page: 1 }
uri.query = URI.encode_www_form(params)

response = Net::HTTP.get_response(uri)

puts response.body

위의 코드는 http://www.example.com/search?query=ruby&page=1에 GET 요청을 보냅니다. URI.encode_www_form 메서드를 사용하여 쿼리 파라미터를 인코딩합니다.

4. 응답 처리하기

HTTP 요청을 보낸 후, 서버의 응답을 처리하는 방법도 중요합니다. 응답 객체는 상태 코드, 헤더, 본문 등을 포함하고 있습니다.

require 'net/http'
require 'uri'

uri = URI.parse("http://www.example.com")
response = Net::HTTP.get_response(uri)

puts "상태 코드: #{response.code}"
puts "헤더: #{response.each_header.to_h}"
puts "본문: #{response.body}"

위의 코드는 응답의 상태 코드, 헤더, 본문을 출력합니다. response.code를 사용하여 상태 코드를 가져오고, response.each_header.to_h를 사용하여 헤더를 해시 형태로 변환합니다.

외부 라이브러리 사용하기

루비에서 HTTP 요청을 수행할 때 Net::HTTP 외에도 다양한 외부 라이브러리를 사용할 수 있습니다. 여기서는 HTTPartyRestClient를 간단히 소개하겠습니다.

1. HTTParty

HTTParty는 간단하고 직관적인 API를 제공하는 HTTP 클라이언트 라이브러리입니다. 설치는 다음과 같이 진행합니다:

gem install httparty

HTTParty를 사용하여 GET 요청을 보내는 예시는 다음과 같습니다.

require 'httparty'

response = HTTParty.get("http://www.example.com")
puts response.body

POST 요청도 간단하게 보낼 수 있습니다.

response = HTTParty.post("http://www.example.com/api", body: { key: "value" }.to_json, headers: { 'Content-Type' => 'application/json' })
puts response.body

2. RestClient

RestClient는 RESTful API와의 상호작용을 쉽게 만들어주는 라이브러리입니다. 설치는 다음과 같이 진행합니다:

gem install rest-client

RestClient를 사용하여 GET 요청을 보내는 예시는 다음과 같습니다.

require 'rest-client'

response = RestClient.get("http://www.example.com")
puts response.body

POST 요청도 다음과 같이 보낼 수 있습니다.

response = RestClient.post("http://www.example.com/api", { key: "value" }.to_json, { content_type: :json, accept: :json })
puts response.body

결론

루비에서 HTTP 요청을 수행하는 방법에 대해 알아보았습니다. Net::HTTP를 사용하여 GET 및 POST 요청을 보내는 기본적인 방법을 살펴보았고, HTTPartyRestClient와 같은 외부 라이브러리도 소개했습니다. 이러한 도구들을 활용하여 웹 API와 상호작용하는 애플리케이션을 쉽게 개발할 수 있습니다.

루비의 강력한 HTTP 요청 기능을 활용하여 다양한 웹 서비스와 통신해 보세요!

Published: August 13, 2024

© 2024 RailsInsights. All rights reserved.