97 lines
2.8 KiB
Markdown
97 lines
2.8 KiB
Markdown
## **Ruby CLI(Command Line Interface) 툴 예제**
|
|
|
|
Ruby로 간단한 **CLI(Command Line Interface) 툴**을 만들어보자. 이 예제에서는 사용자가 입력한 도시의 **현재 날씨를 출력하는 CLI 프로그램**을 작성한다.
|
|
|
|
---
|
|
|
|
### **1. 사전 준비**
|
|
|
|
이 프로젝트에서는 `httparty` 라이브러리를 사용하여 **API 요청**을 보낼 것이다. 먼저 라이브러리를 설치하자.
|
|
|
|
```sh
|
|
gem install httparty
|
|
```
|
|
|
|
그리고 **무료 날씨 API**인 [OpenWeatherMap](https://openweathermap.org/)에서 API 키를 발급받아야 한다.
|
|
|
|
---
|
|
|
|
### **2. CLI 툴 코드**
|
|
|
|
`weather_cli.rb` 파일을 생성하고 다음 코드를 작성한다.
|
|
|
|
```ruby
|
|
#!/usr/bin/env ruby
|
|
|
|
require 'httparty'
|
|
require 'json'
|
|
|
|
API_KEY = "YOUR_OPENWEATHERMAP_API_KEY" # 여기에 API 키 입력
|
|
BASE_URL = "https://api.openweathermap.org/data/2.5/weather"
|
|
|
|
def fetch_weather(city)
|
|
url = "#{BASE_URL}?q=#{city}&appid=#{API_KEY}&units=metric"
|
|
response = HTTParty.get(url)
|
|
|
|
if response.code == 200
|
|
data = JSON.parse(response.body)
|
|
temperature = data["main"]["temp"]
|
|
description = data["weather"].first["description"]
|
|
puts "🌤️ #{city}의 현재 기온: #{temperature}°C (#{description})"
|
|
else
|
|
puts "⚠️ 도시 정보를 가져오지 못했습니다. 도시 이름을 확인하세요!"
|
|
end
|
|
end
|
|
|
|
if ARGV.empty?
|
|
puts "사용법: ruby weather_cli.rb <도시명>"
|
|
else
|
|
city = ARGV.join(" ")
|
|
fetch_weather(city)
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### **3. 코드 설명**
|
|
|
|
1. **라이브러리 로드**
|
|
- `httparty` : API 요청을 보낼 때 사용
|
|
- `json` : JSON 응답을 파싱
|
|
|
|
2. **날씨 정보 가져오기 (`fetch_weather` 메서드)**
|
|
- `HTTParty.get(url)`을 사용하여 OpenWeatherMap API에 요청을 보낸다.
|
|
- 응답이 정상(`code == 200`)이면 JSON 데이터를 파싱하고 온도 및 날씨 정보를 출력한다.
|
|
- 오류가 발생하면 메시지를 출력한다.
|
|
|
|
3. **사용자 입력 처리 (`ARGV`)**
|
|
- 사용자가 도시명을 입력하면 `ARGV.join(" ")`으로 받아서 API 요청을 보낸다.
|
|
- 입력이 없으면 사용법을 출력한다.
|
|
|
|
---
|
|
|
|
### **4. 실행 방법**
|
|
|
|
터미널에서 실행 권한을 부여하고 실행하면 된다.
|
|
|
|
```sh
|
|
chmod +x weather_cli.rb
|
|
./weather_cli.rb Seoul
|
|
```
|
|
|
|
**출력 예시:**
|
|
```sh
|
|
🌤️ Seoul의 현재 기온: 15°C (clear sky)
|
|
```
|
|
|
|
---
|
|
|
|
### **5. 확장 가능성**
|
|
|
|
이 CLI 툴은 간단하지만 다음과 같은 기능을 추가하여 확장할 수 있다.
|
|
|
|
✅ **다른 API 연동** (예: 뉴스, 주가, 환율 정보)
|
|
✅ **파일 입력/출력 지원** (예: 여러 도시의 날씨를 한 번에 조회)
|
|
✅ **사용자 옵션 추가** (`--unit metric` 같은 옵션 지원)
|
|
|
|
이제 Ruby로 CLI 프로그램을 쉽게 만들 수 있다! |