# **Ruby에서 CSV, JSON, YAML 파일 처리 및 네트워크 요청 보내기** 현대 프로그래밍에서 데이터는 다양한 포맷으로 저장되며, 네트워크를 통해 주고받는 일이 많다. Ruby에서는 **CSV, JSON, YAML** 같은 파일을 쉽게 다룰 수 있고, **HTTP 요청**을 통해 웹 API와 데이터를 주고받을 수도 있다. 이번 글에서는 이러한 작업을 어떻게 수행하는지 설명한다. --- ## **1. CSV 파일 다루기 (`csv` 라이브러리)** CSV(Comma-Separated Values)는 데이터를 테이블 형식으로 저장하는 파일 포맷이다. Ruby에서는 `csv` 라이브러리를 사용해 CSV 파일을 읽고 쓸 수 있다. ### **1.1. CSV 파일 쓰기** ```ruby require "csv" CSV.open("data.csv", "w") do |csv| csv << ["이름", "나이", "직업"] csv << ["홍길동", 30, "개발자"] csv << ["김철수", 25, "디자이너"] end ``` 출력 (`data.csv`): ``` 이름,나이,직업 홍길동,30,개발자 김철수,25,디자이너 ``` ### **1.2. CSV 파일 읽기** ```ruby 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 파일 쓰기** ```ruby require "json" data = [ { name: "홍길동", age: 30, job: "개발자" }, { name: "김철수", age: 25, job: "디자이너" } ] File.write("data.json", JSON.pretty_generate(data)) ``` 출력 (`data.json`): ```json [ { "name": "홍길동", "age": 30, "job": "개발자" }, { "name": "김철수", "age": 25, "job": "디자이너" } ] ``` ### **2.2. JSON 파일 읽기** ```ruby 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 파일 쓰기** ```ruby require "yaml" data = [ { "name" => "홍길동", "age" => 30, "job" => "개발자" }, { "name" => "김철수", "age" => 25, "job" => "디자이너" } ] File.write("data.yaml", data.to_yaml) ``` 출력 (`data.yaml`): ```yaml --- - name: 홍길동 age: 30 job: 개발자 - name: 김철수 age: 25 job: 디자이너 ``` ### **3.2. YAML 파일 읽기** ```ruby 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 요청 보내기** ```ruby 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 요청 보내기** ```ruby 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 응답): ```json { "title": "새 글", "body": "내용입니다.", "userId": 1, "id": 101 } ``` --- ## **5. HTTP 요청을 쉽게 하는 `http` 라이브러리** `net/http`보다 더 편리한 HTTP 클라이언트 라이브러리로 `http`를 사용할 수도 있다. ```ruby require "http" response = HTTP.get("https://jsonplaceholder.typicode.com/posts/1") data = response.parse puts "제목: #{data["title"]}" ``` POST 요청도 매우 간단하다. ```ruby 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와 상호작용하는 프로그램을 쉽게 만들 수 있다!