Files
ruby-examples/docs/06_CSV, JSON, YAML 파일 처리 및 네트워크 요청.md

5.4 KiB

Ruby에서 CSV, JSON, YAML 파일 처리 및 네트워크 요청 보내기

현대 프로그래밍에서 데이터는 다양한 포맷으로 저장되며, 네트워크를 통해 주고받는 일이 많다. Ruby에서는 CSV, JSON, YAML 같은 파일을 쉽게 다룰 수 있고, HTTP 요청을 통해 웹 API와 데이터를 주고받을 수도 있다. 이번 글에서는 이러한 작업을 어떻게 수행하는지 설명한다.


1. CSV 파일 다루기 (csv 라이브러리)

CSV(Comma-Separated Values)는 데이터를 테이블 형식으로 저장하는 파일 포맷이다. Ruby에서는 csv 라이브러리를 사용해 CSV 파일을 읽고 쓸 수 있다.

1.1. CSV 파일 쓰기

require "csv"

CSV.open("data.csv", "w") do |csv|
  csv << ["이름", "나이", "직업"]
  csv << ["홍길동", 30, "개발자"]
  csv << ["김철수", 25, "디자이너"]
end

출력 (data.csv):

이름,나이,직업
홍길동,30,개발자
김철수,25,디자이너

1.2. CSV 파일 읽기

CSV.foreach("data.csv", headers: true) do |row|
  puts "#{row["이름"]} (#{row["나이"]}세) - #{row["직업"]}"
end

출력:

홍길동 (30세) - 개발자
김철수 (25세) - 디자이너

2. JSON 파일 다루기 (json 라이브러리)

JSON(JavaScript Object Notation)은 웹 API에서 데이터를 주고받을 때 가장 많이 쓰이는 포맷이다.

2.1. JSON 파일 쓰기

require "json"

data = [
  { name: "홍길동", age: 30, job: "개발자" },
  { name: "김철수", age: 25, job: "디자이너" }
]

File.write("data.json", JSON.pretty_generate(data))

출력 (data.json):

[
  {
    "name": "홍길동",
    "age": 30,
    "job": "개발자"
  },
  {
    "name": "김철수",
    "age": 25,
    "job": "디자이너"
  }
]

2.2. JSON 파일 읽기

json_data = File.read("data.json")
data = JSON.parse(json_data)

data.each do |person|
  puts "#{person["name"]} (#{person["age"]}세) - #{person["job"]}"
end

출력:

홍길동 (30세) - 개발자
김철수 (25세) - 디자이너

3. YAML 파일 다루기 (yaml 라이브러리)

YAML(YAML Ain't Markup Language)은 사람이 읽기 쉬운 데이터 포맷으로, 설정 파일 등에 많이 사용된다.

3.1. YAML 파일 쓰기

require "yaml"

data = [
  { "name" => "홍길동", "age" => 30, "job" => "개발자" },
  { "name" => "김철수", "age" => 25, "job" => "디자이너" }
]

File.write("data.yaml", data.to_yaml)

출력 (data.yaml):

---
- name: 홍길동
  age: 30
  job: 개발자
- name: 김철수
  age: 25
  job: 디자이너

3.2. YAML 파일 읽기

yaml_data = File.read("data.yaml")
data = YAML.load(yaml_data)

data.each do |person|
  puts "#{person["name"]} (#{person["age"]}세) - #{person["job"]}"
end

출력:

홍길동 (30세) - 개발자
김철수 (25세) - 디자이너

4. 네트워크 요청 보내기 (net/http 라이브러리)

웹 서버와 데이터를 주고받으려면 HTTP 요청을 사용해야 한다. Ruby에서는 net/http 라이브러리를 이용하면 간단하게 요청을 보낼 수 있다.

4.1. GET 요청 보내기

require "net/http"
require "json"

url = URI("https://jsonplaceholder.typicode.com/posts/1")
response = Net::HTTP.get(url)

data = JSON.parse(response)
puts "제목: #{data["title"]}"
puts "내용: #{data["body"]}"

출력 (샘플 API 응답):

제목: sunt aut facere repellat provident occaecati excepturi optio reprehenderit
내용: quia et suscipit suscipit...

4.2. POST 요청 보내기

require "net/http"
require "json"

url = URI("https://jsonplaceholder.typicode.com/posts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true  # HTTPS 요청

request = Net::HTTP::Post.new(url, { "Content-Type" => "application/json" })
request.body = { title: "새 글", body: "내용입니다.", userId: 1 }.to_json

response = http.request(request)
puts response.body

출력 (샘플 API 응답):

{
  "title": "새 글",
  "body": "내용입니다.",
  "userId": 1,
  "id": 101
}

5. HTTP 요청을 쉽게 하는 http 라이브러리

net/http보다 더 편리한 HTTP 클라이언트 라이브러리로 http를 사용할 수도 있다.

require "http"

response = HTTP.get("https://jsonplaceholder.typicode.com/posts/1")
data = response.parse
puts "제목: #{data["title"]}"

POST 요청도 매우 간단하다.

response = HTTP.post("https://jsonplaceholder.typicode.com/posts", json: { title: "새 글", body: "내용입니다.", userId: 1 })
puts response.parse

6. 마무리

이번 글에서는 Ruby에서 CSV, JSON, YAML 파일을 다루는 방법네트워크 요청을 보내는 방법을 살펴보았다.

  • CSV 파일CSV.open, CSV.foreach
  • JSON 파일JSON.parse, JSON.pretty_generate
  • YAML 파일YAML.load, data.to_yaml
  • HTTP 요청 (net/http)
    • Net::HTTP.get(url) → GET 요청
    • Net::HTTP::Post.new(url, headers) → POST 요청
  • 더 쉬운 HTTP 요청 (http 라이브러리)HTTP.get(url), HTTP.post(url, json: {})

이제 Ruby에서 다양한 데이터 포맷을 다루고, 웹 API와 상호작용하는 프로그램을 쉽게 만들 수 있다!