이미지 파일 및 설정 파일 삭제, 새로운 CLI 및 문서 추가
This commit is contained in:
231
docs/06_CSV, JSON, YAML 파일 처리 및 네트워크 요청.md
Normal file
231
docs/06_CSV, JSON, YAML 파일 처리 및 네트워크 요청.md
Normal file
@@ -0,0 +1,231 @@
|
||||
# **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와 상호작용하는 프로그램을 쉽게 만들 수 있다!
|
||||
Reference in New Issue
Block a user