제4장: 폐기물 추적 API 및 데이터 표준
弘益人間 · 널리 인간을 이롭게 하라
개요
현대 폐기물 관리 시스템은 다양한 공급업체의 하드웨어, 소프트웨어, 서비스를 통합합니다. 스마트 쓰레기통, 수거 차량,
분류 시설, 처리 플랜트, 행정 시스템이 모두 원활하게 통신해야 합니다. 이러한 상호 운용성은 표준화된 API(Application Programming Interface)와
데이터 형식을 통해서만 달성할 수 있습니다.
WIA-ENE-022 표준은 폐기물 관리 생태계를 위한 포괄적인 API 사양과 데이터 표준을 정의합니다. 이 장에서는 RESTful API 엔드포인트,
데이터 스키마, 인증 메커니즘, 블록체인 통합, 지자체 간 데이터 교환 프로토콜을 상세히 다룹니다.
WIA-ENE-022 API 아키텍처
1. RESTful API 설계 원칙
WIA-ENE-022 API는 REST(Representational State Transfer) 아키텍처 스타일을 따릅니다. 이는 웹 기반 시스템에서
가장 널리 채택된 접근 방식으로, 다음과 같은 이점을 제공합니다:
- 무상태성: 각 요청은 독립적이며 서버는 세션 상태를 유지하지 않아 확장성이 향상됩니다.
- 캐시 가능성: 응답을 캐시할 수 있어 네트워크 부하와 지연 시간이 감소합니다.
- 계층화: 프록시, 로드 밸런서, 게이트웨이를 투명하게 추가할 수 있습니다.
- 일관된 인터페이스: 표준 HTTP 메서드(GET, POST, PUT, DELETE)를 사용합니다.
2. API 엔드포인트 구조
WIA-ENE-022 API는 계층적 리소스 구조로 조직됩니다:
https://api.wia-ene-022.org/v1/
├── /bins # 쓰레기통 관리
│ ├── GET /bins # 모든 쓰레기통 조회
│ ├── POST /bins # 새 쓰레기통 등록
│ ├── GET /bins/{id} # 특정 쓰레기통 조회
│ ├── PUT /bins/{id} # 쓰레기통 정보 업데이트
│ └── DELETE /bins/{id} # 쓰레기통 삭제
├── /collections # 수거 작업 관리
│ ├── GET /collections # 수거 기록 조회
│ ├── POST /collections # 수거 완료 기록
│ └── GET /collections/{id}# 특정 수거 상세 정보
├── /routes # 경로 최적화
│ ├── GET /routes # 모든 경로 조회
│ ├── POST /routes/optimize# 최적 경로 계산
│ └── GET /routes/{id} # 특정 경로 조회
├── /facilities # 처리 시설 관리
│ ├── GET /facilities # 모든 시설 조회
│ ├── POST /facilities # 새 시설 등록
│ └── GET /facilities/{id} # 특정 시설 조회
└── /analytics # 분석 및 보고
├── GET /analytics/waste-generation # 폐기물 발생 통계
├── GET /analytics/recycling-rate # 재활용률 조회
└── GET /analytics/predictions # 예측 분석 결과
데이터 모델 및 스키마
1. 쓰레기통(Bin) 데이터 모델
각 쓰레기통은 고유 식별자, 위치 정보, 센서 데이터, 메타데이터를 포함하는 JSON 객체로 표현됩니다:
{
"binId": "BIN-Seoul-2024-001234",
"location": {
"latitude": 37.5665,
"longitude": 126.9780,
"address": "서울특별시 중구 세종대로 110",
"district": "중구",
"installationDate": "2024-01-15T09:00:00Z"
},
"specifications": {
"type": "smart-bin",
"capacity": 240,
"unit": "liters",
"wasteCategory": "general",
"manufacturer": "SmartWaste Inc.",
"model": "SW-240-IoT"
},
"sensors": {
"fillLevel": {
"value": 67,
"unit": "percent",
"timestamp": "2024-12-28T14:30:00Z",
"sensorType": "ultrasonic"
},
"weight": {
"value": 45.3,
"unit": "kg",
"timestamp": "2024-12-28T14:30:00Z"
},
"temperature": {
"value": 18.5,
"unit": "celsius",
"timestamp": "2024-12-28T14:30:00Z"
}
},
"communication": {
"protocol": "LoRaWAN",
"deviceEUI": "0018B2000000ABCD",
"lastSeen": "2024-12-28T14:30:00Z",
"signalStrength": -85,
"batteryLevel": 78
},
"maintenance": {
"lastService": "2024-11-01T10:00:00Z",
"nextService": "2025-02-01T10:00:00Z",
"status": "operational",
"alerts": []
}
}
2. 수거(Collection) 데이터 모델
수거 작업은 시간, 위치, 수거된 폐기물, 담당 차량 정보를 기록합니다:
{
"collectionId": "COL-20241228-0234",
"timestamp": "2024-12-28T14:45:00Z",
"binId": "BIN-Seoul-2024-001234",
"vehicleId": "VEH-Seoul-042",
"collectedWaste": {
"weight": 42.8,
"unit": "kg",
"volume": 158,
"volumeUnit": "liters",
"category": "general"
},
"operator": {
"id": "OP-1234",
"name": "김수거",
"license": "WM-2024-5678"
},
"verification": {
"method": "RFID",
"tagId": "RFID-001234-20241228",
"photoEvidence": "https://storage.wia/evidence/COL-20241228-0234.jpg",
"gpsCoordinates": {
"latitude": 37.5665,
"longitude": 126.9780
}
},
"blockchain": {
"transactionHash": "0x7d5a99f603f231d53a4f39d1521f98d2e8bb279cf2",
"blockNumber": 15234567,
"network": "Ethereum-Polygon"
}
}
인증 및 보안
| 보안 계층 |
기술 |
목적 |
구현 방법 |
| 전송 암호화 |
TLS 1.3 |
네트워크 통신 보호 |
모든 API 엔드포인트는 HTTPS 필수, HTTP는 거부 |
| 인증 |
OAuth 2.0 + JWT |
사용자/기기 식별 |
클라이언트 자격증명 또는 인증 코드 플로우 |
| 권한 부여 |
RBAC (역할 기반) |
접근 제어 |
관리자, 운영자, 읽기 전용 등 역할별 권한 |
| API 키 |
UUID v4 |
애플리케이션 식별 |
X-API-Key 헤더로 전송, 요청 속도 제한 적용 |
| 데이터 암호화 |
AES-256-GCM |
저장 데이터 보호 |
민감한 정보는 데이터베이스에 암호화하여 저장 |
인증 흐름 예시
# 1. 액세스 토큰 요청
POST https://api.wia-ene-022.org/v1/auth/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=seoul-municipality-2024
&client_secret=SECRET_KEY_HERE
&scope=bins:read bins:write collections:write
# 2. 응답 (액세스 토큰)
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "bins:read bins:write collections:write"
}
# 3. API 호출 시 토큰 사용
GET https://api.wia-ene-022.org/v1/bins?district=중구
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
X-API-Key: a1b2c3d4-e5f6-4g7h-8i9j-0k1l2m3n4o5p
블록체인 통합
1. 왜 블록체인인가?
블록체인 기술은 폐기물 관리에 다음과 같은 이점을 제공합니다:
- 불변성: 기록된 데이터는 변조할 수 없어 감사 추적이 보장됩니다.
- 투명성: 모든 이해관계자가 동일한 정보를 볼 수 있습니다.
- 탈중앙화: 단일 실패 지점이 없어 시스템 견고성이 향상됩니다.
- 스마트 계약: 자동화된 규칙 실행(예: 수거 완료 시 자동 지불)이 가능합니다.
2. 하이브리드 아키텍처
모든 데이터를 블록체인에 저장하는 것은 비용과 성능 측면에서 비현실적입니다. WIA-ENE-022는 하이브리드 접근 방식을 채택합니다:
하이브리드 데이터 저장 전략
- 오프체인 (전통적 데이터베이스): 센서 데이터, 실시간 위치, 임시 로그 등 대량의 고빈도 데이터는
PostgreSQL, MongoDB 같은 전통적 데이터베이스에 저장됩니다. 빠른 쿼리와 분석이 가능합니다.
- 온체인 (블록체인): 중요한 거래와 이벤트만 블록체인에 기록됩니다:
- 수거 완료 및 검증 (누가, 언제, 어디서, 얼마나)
- 처리 시설 입고 기록
- 재활용 인증서 발급
- 탄소 크레딧 생성
- 규정 준수 보고
- 해시 앵커링: 대량 데이터의 암호학적 해시(SHA-256)만 블록체인에 저장하고, 실제 데이터는 오프체인에
보관합니다. 이를 통해 데이터 무결성을 검증하면서 블록체인 비용을 절감합니다.
3. 스마트 계약 예시
스마트 계약은 조건이 충족되면 자동으로 실행되는 코드입니다. 예를 들어, 수거 확인 스마트 계약:
// Solidity 스마트 계약 예시 (간소화됨)
pragma solidity ^0.8.0;
contract WasteCollection {
struct Collection {
string binId;
string vehicleId;
uint256 weight;
uint256 timestamp;
address operator;
bool verified;
}
mapping(string => Collection) public collections;
event CollectionRecorded(
string indexed collectionId,
string binId,
uint256 weight,
uint256 timestamp
);
function recordCollection(
string memory collectionId,
string memory binId,
string memory vehicleId,
uint256 weight
) public {
require(weight > 0, "Weight must be positive");
collections[collectionId] = Collection({
binId: binId,
vehicleId: vehicleId,
weight: weight,
timestamp: block.timestamp,
operator: msg.sender,
verified: true
});
emit CollectionRecorded(collectionId, binId, weight, block.timestamp);
}
function verifyCollection(string memory collectionId)
public view returns (bool) {
return collections[collectionId].verified;
}
}
지자체 간 데이터 교환
1. 상호 운용성 요구 사항
폐기물은 행정 구역을 넘어 이동합니다. 한 지자체에서 수거된 폐기물이 다른 지자체의 재활용 센터나 소각장에서 처리될 수 있습니다.
따라서 지자체 간 데이터 교환은 필수적입니다.
| 데이터 교환 시나리오 |
교환되는 정보 |
목적 |
| 폐기물 이송 |
유형, 양, 출발지, 목적지, 운송업체 |
추적 연속성, 비용 정산 |
| 처리 용량 공유 |
시설 가용성, 예약 상태, 처리 비용 |
자원 최적화, 비용 절감 |
| 재활용 자재 거래 |
재료 유형, 품질, 가격, 거래 조건 |
순환 경제 촉진 |
| 규제 보고 |
발생량, 처리 방법, 배출 데이터 |
중앙 정부 보고, 환경 규정 준수 |
| 공동 구매 |
장비 사양, 수량, 납품 일정 |
규모의 경제, 비용 절감 |
2. 페더레이션 API 아키텍처
각 지자체는 자체 WIA-ENE-022 호환 API 서버를 운영하면서, 페더레이션 프로토콜을 통해 다른 지자체와 통신합니다.
이는 이메일 시스템과 유사하게, 각 조직이 자체 서버를 관리하지만 표준 프로토콜(SMTP)을 통해 상호 운용됩니다.
페더레이션 데이터 교환 흐름
- 서비스 디스커버리: 중앙 레지스트리에서 다른 지자체의 API 엔드포인트를 찾습니다.
- 상호 인증: OAuth 2.0 클라이언트 자격증명 플로우로 서로를 인증합니다.
- 데이터 요청: 표준 API 엔드포인트를 통해 데이터를 요청합니다.
- 데이터 검증: 수신 데이터의 스키마를 검증하고 서명을 확인합니다.
- 블록체인 기록: 중요한 교환은 블록체인에 기록하여 감사 추적을 보장합니다.
실시간 데이터 스트리밍
1. WebSocket API
RESTful API는 클라이언트가 서버에 요청하는 풀(pull) 모델입니다. 그러나 실시간 모니터링 대시보드는 서버가 클라이언트에
업데이트를 푸시(push)하는 것이 더 효율적입니다. WIA-ENE-022는 WebSocket 프로토콜을 지원하여 양방향 실시간 통신을 가능하게 합니다.
// WebSocket 연결 예시
ws://api.wia-ene-022.org/v1/stream
// 구독 메시지
{
"action": "subscribe",
"channel": "bins",
"filter": {
"district": "중구",
"fillLevel": { "min": 70 }
}
}
// 서버에서 실시간 푸시
{
"event": "bin-fill-level-update",
"data": {
"binId": "BIN-Seoul-2024-001234",
"fillLevel": 82,
"timestamp": "2024-12-28T15:30:00Z",
"alert": "approaching-full"
}
}
핵심 요점
- RESTful 아키텍처의 우수성: WIA-ENE-022 API는 REST 원칙을 따라 무상태성, 캐시 가능성, 일관된 인터페이스를 제공하며, 표준 HTTP 메서드로 쓰레기통, 수거, 경로, 시설, 분석 리소스를 관리합니다.
- 포괄적인 데이터 모델: 쓰레기통과 수거 데이터는 위치, 센서, 통신, 유지보수, 블록체인 검증 정보를 포함하는 상세한 JSON 스키마로 표현되어 완전한 추적성을 보장합니다.
- 다층 보안: TLS 1.3 전송 암호화, OAuth 2.0/JWT 인증, RBAC 권한 부여, API 키, AES-256 데이터 암호화를 결합하여 엔터프라이즈급 보안을 제공합니다.
- 하이브리드 블록체인: 대량 데이터는 오프체인에, 중요 거래는 온체인에 저장하는 하이브리드 접근으로 블록체인의 불변성과 투명성 이점을 유지하면서 비용을 절감합니다. 스마트 계약이 자동화된 검증과 지불을 가능하게 합니다.
- 지자체 간 상호 운용성: 페더레이션 API 아키텍처를 통해 각 지자체가 자율성을 유지하면서 표준 프로토콜로 데이터를 교환하고, 폐기물 이송, 처리 용량 공유, 재활용 자재 거래를 촉진합니다.
- 실시간 스트리밍: WebSocket API는 풀 모델의 RESTful API를 보완하여 실시간 대시보드와 모니터링 애플리케이션에 즉각적인 업데이트를 푸시하고, 이벤트 기반 아키텍처를 가능하게 합니다.
복습 질문
- REST 아키텍처의 네 가지 주요 원칙(무상태성, 캐시 가능성, 계층화, 일관된 인터페이스)을 설명하고, 각 원칙이 폐기물 관리 API에 어떤 이점을 제공하는지 논의하십시오.
- WIA-ENE-022 API 엔드포인트 구조를 분석하십시오. /bins, /collections, /routes, /facilities, /analytics 리소스가 각각 어떤 기능을 제공하며, 이들이 어떻게 통합되어 완전한 폐기물 관리 시스템을 구성하는지 설명하십시오.
- 쓰레기통 데이터 모델의 JSON 스키마를 검토하십시오. location, specifications, sensors, communication, maintenance 섹션이 각각 어떤 정보를 포함하며, 왜 이러한 상세한 메타데이터가 필요한지 논의하십시오.
- API 보안의 다섯 가지 계층(전송 암호화, 인증, 권한 부여, API 키, 데이터 암호화)을 설명하십시오. 각 계층이 해결하는 위협과 구현 방법을 포함하십시오. OAuth 2.0 + JWT 인증 흐름을 단계별로 설명하십시오.
- 블록체인이 폐기물 관리에 제공하는 네 가지 주요 이점(불변성, 투명성, 탈중앙화, 스마트 계약)을 논의하십시오. 하이브리드 아키텍처가 왜 모든 데이터를 온체인에 저장하는 것보다 실용적인지 설명하십시오.
- 하이브리드 데이터 저장 전략에서 오프체인과 온체인에 각각 저장되는 데이터 유형을 구분하십시오. 해시 앵커링이 무엇이며, 어떻게 데이터 무결성을 검증하면서 블록체인 비용을 절감하는지 설명하십시오.
- 지자체 간 데이터 교환의 다섯 가지 시나리오(폐기물 이송, 처리 용량 공유, 재활용 자재 거래, 규제 보고, 공동 구매)를 설명하고, 각 시나리오에서 교환되는 정보와 목적을 논의하십시오.
- 페더레이션 API 아키텍처의 다섯 단계(서비스 디스커버리, 상호 인증, 데이터 요청, 데이터 검증, 블록체인 기록)를 설명하십시오. RESTful API와 WebSocket API의 차이점을 비교하고, 각각이 적합한 사용 사례를 제시하십시오.