170 lines
3.2 KiB
Markdown
170 lines
3.2 KiB
Markdown
## **Ruby API 서버 예제 (Sinatra 사용)**
|
|
|
|
Ruby로 간단한 **API 서버**를 만들기 위해 **Sinatra** 프레임워크를 사용할 것이다.
|
|
|
|
---
|
|
|
|
### **1. 사전 준비**
|
|
|
|
#### **Sinatra 설치**
|
|
Sinatra는 가볍고 사용하기 쉬운 웹 프레임워크이다. 먼저 Sinatra를 설치하자.
|
|
|
|
```sh
|
|
gem install sinatra
|
|
```
|
|
|
|
또는 `Gemfile`을 사용한다면 다음을 추가한 후 `bundle install`을 실행하자.
|
|
|
|
```ruby
|
|
gem 'sinatra'
|
|
gem 'json'
|
|
```
|
|
|
|
---
|
|
|
|
### **2. API 서버 코드**
|
|
|
|
`app.rb` 파일을 만들고 아래 코드를 작성하자.
|
|
|
|
```ruby
|
|
require 'sinatra'
|
|
require 'json'
|
|
|
|
# 서버 기본 설정
|
|
set :port, 4567
|
|
set :bind, '0.0.0.0'
|
|
|
|
# 샘플 데이터 (가상의 사용자 목록)
|
|
users = [
|
|
{ id: 1, name: "Alice", age: 30 },
|
|
{ id: 2, name: "Bob", age: 25 },
|
|
{ id: 3, name: "Charlie", age: 35 }
|
|
]
|
|
|
|
# 1. 모든 사용자 조회 (GET /users)
|
|
get '/users' do
|
|
content_type :json
|
|
{ users: users }.to_json
|
|
end
|
|
|
|
# 2. 특정 사용자 조회 (GET /users/:id)
|
|
get '/users/:id' do
|
|
content_type :json
|
|
user = users.find { |u| u[:id] == params[:id].to_i }
|
|
if user
|
|
user.to_json
|
|
else
|
|
status 404
|
|
{ error: "User not found" }.to_json
|
|
end
|
|
end
|
|
|
|
# 3. 사용자 추가 (POST /users)
|
|
post '/users' do
|
|
content_type :json
|
|
request_payload = JSON.parse(request.body.read) rescue {}
|
|
|
|
if request_payload["name"] && request_payload["age"]
|
|
new_user = {
|
|
id: users.size + 1,
|
|
name: request_payload["name"],
|
|
age: request_payload["age"]
|
|
}
|
|
users << new_user
|
|
status 201
|
|
new_user.to_json
|
|
else
|
|
status 400
|
|
{ error: "Invalid data" }.to_json
|
|
end
|
|
end
|
|
|
|
# 4. 사용자 삭제 (DELETE /users/:id)
|
|
delete '/users/:id' do
|
|
content_type :json
|
|
user = users.find { |u| u[:id] == params[:id].to_i }
|
|
|
|
if user
|
|
users.delete(user)
|
|
{ message: "User deleted" }.to_json
|
|
else
|
|
status 404
|
|
{ error: "User not found" }.to_json
|
|
end
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
### **3. 실행 방법**
|
|
|
|
터미널에서 다음 명령어를 실행하자.
|
|
|
|
```sh
|
|
ruby app.rb
|
|
```
|
|
|
|
서버가 `http://localhost:4567`에서 실행된다.
|
|
|
|
---
|
|
|
|
### **4. API 테스트**
|
|
|
|
#### **모든 사용자 조회**
|
|
```sh
|
|
curl http://localhost:4567/users
|
|
```
|
|
**응답:**
|
|
```json
|
|
{
|
|
"users": [
|
|
{ "id": 1, "name": "Alice", "age": 30 },
|
|
{ "id": 2, "name": "Bob", "age": 25 },
|
|
{ "id": 3, "name": "Charlie", "age": 35 }
|
|
]
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
#### **특정 사용자 조회**
|
|
```sh
|
|
curl http://localhost:4567/users/1
|
|
```
|
|
**응답:**
|
|
```json
|
|
{ "id": 1, "name": "Alice", "age": 30 }
|
|
```
|
|
|
|
---
|
|
|
|
#### **새로운 사용자 추가**
|
|
```sh
|
|
curl -X POST http://localhost:4567/users -H "Content-Type: application/json" -d '{"name": "David", "age": 40}'
|
|
```
|
|
**응답:**
|
|
```json
|
|
{ "id": 4, "name": "David", "age": 40 }
|
|
```
|
|
|
|
---
|
|
|
|
#### **사용자 삭제**
|
|
```sh
|
|
curl -X DELETE http://localhost:4567/users/2
|
|
```
|
|
**응답:**
|
|
```json
|
|
{ "message": "User deleted" }
|
|
```
|
|
|
|
---
|
|
|
|
### **5. 결론**
|
|
|
|
이제 Sinatra를 이용하여 간단한 RESTful API 서버를 만들 수 있다.
|
|
✅ **GET, POST, DELETE 요청 처리**
|
|
✅ **JSON 데이터 반환**
|
|
✅ **간단한 데이터 저장 및 관리**
|
|
|
|
Sinatra는 **가볍고 배우기 쉬운 프레임워크**이므로, 빠르게 API 서버를 구축할 때 유용하다! |