제5장

2단계 - API 인터페이스

이 장은 폐기물 추적, 수거 관리, 재활용 시설 연동, 자재 회수 문서화를 위한 RESTful API 설계 사양과, 전자폐기물 관리 생태계 전반에서 시스템 상호 운용성을 가능하게 하는 기술 인터페이스를 다룬다.

데이터에서 시스템 통합으로

1단계 데이터 형식은 어떤 정보를 교환해야 하는지를 정한다. 2단계 API 사양은 시스템들이 그 정보를 어떻게 교환하는지를 정의한다. 표준화된 API가 없으면 조직은 협력사마다 맞춤형 연동을 개발해야 하며, 네트워크가 커질수록 복잡도가 기하급수적으로 늘어난다. 재활용 시설 열 곳과 거래하는 수거업체라면 서로 다른 연동 방식 열 가지가 필요하다. 여러 수거·처리 조직을 거치는 제품을 추적하는 제조업체도 비슷한 복잡도 증가에 직면한다.

RESTful API는 모든 당사자가 구현하는 균일한 인터페이스를 제공함으로써 이 문제를 해결한다. 시스템이 일단 WIA 전자폐기물 관리 API를 지원하면, 맞춤 개발 없이도 다른 모든 준수 시스템과 연동할 수 있다. 이러한 상호 운용성은 연동 비용을 획기적으로 줄이는 동시에, 대규모의 효과적인 전자폐기물 관리에 필요한 네트워크 차원의 조정을 가능하게 한다.

REST 아키텍처 원칙

WIA API는 REST(Representational State Transfer) 아키텍처 원칙을 따르며, HTTP 메서드와 상태 코드를 활용하여 명확하고 예측 가능한 상호작용을 구현한다. RESTful 설계는 전자폐기물 관리에 다음과 같은 여러 이점을 제공한다.

HTTP 메서드의 의미

API는 표준 HTTP 메서드를 일관된 의미로 사용한다.

메서드 목적 멱등성 주요 사용 사례
GET 리소스 조회 예 기기 정보 조회, 수거 기록 질의
POST 새 리소스 생성 아니요 기기 등록, 수거 이벤트 기록
PUT 리소스 갱신/교체 예 기기 상태 갱신, 시설 정보 수정
PATCH 부분 갱신 아니요 생애주기 이벤트 추가, 특정 필드 갱신
DELETE 리소스 삭제 예 접근 권한 철회, 테스트 데이터 삭제

핵심 API 엔드포인트

이 표준은 기기 관리, 폐기물 추적, 수거 운영, 처리 문서화, 자재 회수, 규정 준수 보고를 포괄하는 엔드포인트 범주를 정의한다. 각 범주는 관련 작업을 공통 경로 접두사 아래에 묶는다.

기기 관리 API

기기 등록과 정보 조회는 추적 시스템의 토대이다. 이 엔드포인트를 통해 제조업체는 제품을 등록하고, 권한이 있는 당사자는 정보를 조회하며, 시스템은 생애주기 전반에 걸쳐 기기 상태를 갱신한다.

POST /api/v1/devices
제조업체 선언과 함께 신규 기기 등록
요청 본문: 1단계 스키마에 따른 Device 객체
응답: 201 Created, device_id 및 QR 코드 URL 포함

GET /api/v1/devices/{device_id}
기기 정보 전체 조회
응답: 200 OK, 이력을 포함한 전체 device 객체

GET /api/v1/devices?manufacturer={mfr}&model={model}
조건별 기기 질의
응답: 200 OK, 조건에 맞는 기기 배열

PATCH /api/v1/devices/{device_id}/status
기기 생애주기 상태 갱신
요청 본문: {"status": "collected", "timestamp": "..."}
응답: 200 OK, 갱신된 device 객체

GET /api/v1/devices/{device_id}/materials
재료 구성 선언 조회
응답: 200 OK, 1단계 스키마에 따른 자재 명세서(BOM)

수거 및 추적 API

기기가 재활용 흐름에 들어오면 수거 이벤트를 기록해야 한다. 이 엔드포인트는 소매점 회수, 지자체 거점 배출, 기업 ITAD, 전문 유해폐기물 수거 등 다양한 수거 방식을 지원한다.

POST /api/v1/collections
새 수거 이벤트 생성
요청 본문: {
  "device_ids": ["uuid1", "uuid2", ...],
  "collection_method": "retail_takeback",
  "collector_id": "COL-12345",
  "location": {...},
  "timestamp": "2025-11-08T10:30:00Z",
  "condition_assessments": [...]
}
응답: 201 Created, collection_id 포함

GET /api/v1/collections/{collection_id}
수거 이벤트 상세 조회
응답: 200 OK, collection 객체

GET /api/v1/collections?facility={fac_id}&date_range={range}
조건별 수거 기록 질의
응답: 200 OK, collection 배열

POST /api/v1/collections/{collection_id}/devices
기존 수거 배치에 기기 추가
요청 본문: {"device_ids": ["uuid3", "uuid4"]}
응답: 200 OK, 갱신된 collection

처리 및 회수 API

처리 시설은 재활용 작업의 각 단계를 문서화한다. 이 엔드포인트는 해체, 파쇄, 선별, 정련, 자재 회수 활동을 기록하여 완전한 처리 감사 추적을 만든다.

POST /api/v1/processing/stages
처리 단계 완료 문서화
요청 본문: {
  "stage_type": "dismantling",
  "input_devices": ["uuid1", "uuid2", ...],
  "facility_id": "RC-US-CA-001",
  "timestamp": "2025-11-10T14:00:00Z",
  "outputs": [
    {
      "component_type": "battery",
      "quantity": 250,
      "total_weight_kg": 3.2,
      "disposition": "battery_recycler"
    }
  ]
}
응답: 201 Created, stage_id 포함

POST /api/v1/recovery/materials
자재 회수 결과 보고
요청 본문: {
  "source_devices": ["uuid1", "uuid2", ...],
  "facility_id": "RC-US-CA-001",
  "recovery_date": "2025-11-15",
  "recovered_materials": [
    {
      "material": "Copper",
      "cas_number": "7440-50-8",
      "weight_kg": 12.5,
      "purity_percentage": 95.2,
      "destination_facility": "SM-US-PA-001"
    }
  ]
}
응답: 201 Created, recovery_report_id 포함

GET /api/v1/recovery/reports/{report_id}
회수 보고서 조회
응답: 200 OK, 전체 회수 문서

인증과 권한 부여

전자폐기물 데이터에는 상업적으로 민감한 정보, 개인정보, 규정 준수 문서가 포함되어 있어 접근 통제가 필요하다. API는 인증에 OAuth 2.0을, 권한 부여에 역할 기반 접근 제어(RBAC)를 사용한다.

OAuth 2.0 구현

이 표준은 다양한 연동 시나리오에 대응하기 위해 여러 OAuth 2.0 흐름을 지원한다.

POST /api/v1/oauth/token
액세스 토큰 요청
요청 본문: {
  "grant_type": "client_credentials",
  "client_id": "recycler_12345",
  "client_secret": "secret_xyz...",
  "scope": "devices:read collections:write"
}
응답: {
  "access_token": "eyJhbG...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "devices:read collections:write"
}

사용 예:
GET /api/v1/devices/abc-123
Authorization: Bearer eyJhbG...

역할 기반 접근 제어

이 표준은 이해관계자 역할과 그에 따른 권한을 다음과 같이 정의한다.

역할 권한 대표 조직
제조업체 기기 등록, 재료 선언, 자사 제품 조회 전자제품 제조업체, OEM
수거업체 수거 기록 생성, 기기 위치 갱신, 기기 조회 소매업체, 지자체 프로그램, ITAD
처리업체 처리 문서화, 회수 보고, 기기 재료 조회 재활용 시설, 정련업체
규제기관 전체 데이터 조회, 보고서 생성, 규정 준수 감사 EPA, EU 당국, 지방 기관
소비자 자기 기기 추적, 데이터 삭제 확인 개인 기기 소유자

요청 속도 제한과 성능

API 구현은 남용을 막으면서 다양한 부하 수준을 처리해야 한다. 이 표준은 안정적인 서비스를 보장하기 위해 요청 속도 제한 정책과 성능 기대치를 규정한다.

요청 속도 제한 정책

요청 한도는 서비스 등급에 따라 표준(standard) 등급은 시간당 1,000건, 엔터프라이즈(enterprise) 등급은 시간당 10,000건이다. 한도 정보는 HTTP 헤더로 전달되며, 한도를 넘으면 HTTP 429를 반환한다.

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 1731072000

HTTP 429 Too Many Requests
한도 초과 시 응답:
{
  "error": "rate_limit_exceeded",
  "message": "Rate limit of 1000 requests/hour exceeded",
  "retry_after": 1847
}

성능 기대치

이 표준은 API 구현에 대해 다음과 같은 성능 목표를 규정한다.

오류 처리와 상태 코드

일관된 오류 응답은 클라이언트가 실패를 원활하게 처리할 수 있게 한다. API는 표준 HTTP 상태 코드와 함께 상세 정보를 담은 구조화된 오류 본문을 사용한다.

상태 코드 의미 주요 상황
200 OK 성공 GET 요청 성공, 리소스 갱신됨
201 Created 리소스 생성됨 기기 등록됨, 수거 기록됨
400 Bad Request 잘못된 요청 스키마 검증 실패, 필수 필드 누락
401 Unauthorized 인증 실패 유효하지 않은 토큰, 토큰 만료
403 Forbidden 권한 부여 실패 작업에 필요한 권한 부족
404 Not Found 리소스가 존재하지 않음 잘못된 device_id, 수거 기록을 찾을 수 없음
409 Conflict 상태 충돌 이미 등록된 기기, 중복 수거
429 Too Many Requests 요청 한도 초과 제한 시간 창 내 요청 과다
500 Server Error 서버 장애 데이터베이스 오류, 내부 처리 실패
HTTP 400 Bad Request
{
  "error": "validation_error",
  "message": "Request body failed schema validation",
  "details": [
    {
      "field": "device.weight_kg",
      "error": "must be positive number",
      "value": -0.5
    },
    {
      "field": "device.weee_category",
      "error": "must be one of WEEE-1 through WEEE-6",
      "value": "WEEE-7"
    }
  ]
}

버전 관리 전략

API는 기존 연동과의 하위 호환성을 유지하면서 발전해야 한다. 이 표준은 명확한 지원 중단 정책과 함께 URL 기반 버전 관리를 채택한다.

버전 생애주기

API 버전은 다음과 같은 체계적인 생애주기를 따른다.

/api/v1/devices  - 현행 버전 (v1.0)
/api/v2/devices  - 향후 버전 (개발 중)

응답 헤더의 버전 정보:
X-API-Version: 1.0.0
X-API-Deprecated: false
X-API-Sunset-Date: null

웹훅 알림

실시간 연동을 위해 API는 폴링 없이 구독자에게 이벤트를 알리는 웹훅을 지원한다. 조직은 웹훅 엔드포인트를 등록하여 기기 상태 변경, 수거 이벤트, 처리 완료에 관한 알림을 받는다.

POST /api/v1/webhooks
웹훅 엔드포인트 등록
요청 본문: {
  "url": "https://recycler.example.com/wia-webhook",
  "events": ["device.collected", "processing.complete"],
  "secret": "webhook_secret_xyz"
}
응답: 201 Created, webhook_id 포함

웹훅 전달(등록된 URL로 전송):
POST https://recycler.example.com/wia-webhook
X-WIA-Event: device.collected
X-WIA-Signature: sha256=abc123...
{
  "event_type": "device.collected",
  "event_id": "evt_xyz",
  "timestamp": "2025-11-08T10:30:00Z",
  "data": {
    "device_id": "550e8400-e29b-41d4-a716-446655440000",
    "collection_id": "col_123",
    "collector_id": "COL-12345"
  }
}

규정 준수 보고 API

자동화된 규정 준수 보고는 행정 부담을 줄이는 동시에 데이터 품질을 높인다. 이 엔드포인트는 표준화된 추적 데이터로부터 다양한 규제 요건에 맞는 보고서를 생성한다.

GET /api/v1/compliance/reports/epr
생산자책임재활용(EPR) 보고서 생성
매개변수:
  - jurisdiction (EU, California, Japan 등)
  - period (2025-Q1, 2025-annual)
  - format (JSON, PDF, XML)
응답: 관할 지역별 EPR 보고서

GET /api/v1/compliance/reports/basel
바젤협약 문서 생성
매개변수:
  - shipment_id
  - export_country
  - import_country
응답: 사전통보동의(PIC) 문서

GET /api/v1/compliance/certificates/{device_id}
기기의 재활용 인증서 조회
응답: 회수 문서가 포함된 PDF 인증서

장 요약

2단계 API 사양은 모든 전자폐기물 관리 작업에 대한 RESTful 엔드포인트를 정의함으로써 시스템 통합을 가능하게 한다. 표준화된 인증, 일관된 오류 처리, 명확한 버전 관리 정책을 통해 조직은 이해관계자 네트워크 전반의 협력적 폐기물 관리를 뒷받침하는 신뢰성 높은 연동을 구축할 수 있다.

핵심 요점

  • 표준 HTTP 메서드를 사용하는 RESTful 아키텍처는 플랫폼과 프로그래밍 언어를 가리지 않고 작동하는 단순하고 확장 가능한 연동을 제공한다
  • OAuth 2.0 인증과 역할 기반 접근 제어는 상업적으로 민감한 정보와 개인정보를 보호하면서 안전한 데이터 공유를 보장한다
  • 기기 관리, 수거 추적, 처리 문서화, 규정 준수 보고에 이르는 포괄적인 엔드포인트는 생애주기 전체의 관리를 지원한다
  • 구조화된 오류 응답과 표준 상태 코드는 조직 경계를 넘나드는 원활한 실패 처리와 디버깅을 가능하게 한다
  • 웹훅 알림과 자동화된 규정 준수 보고는 폴링 부담과 행정 부담을 줄이면서 실시간 조정을 가능하게 한다

복습 문제

  1. RESTful API가 맞춤형 연동에 비해 연동 복잡도를 어떻게 줄이는지 설명하라. API 표준화는 구체적으로 어떤 비용을 없애는가?
  2. OAuth 2.0 클라이언트 자격 증명 흐름을 설명하라. 이 흐름이 재활용업체와 제조업체 간 서버 간 연동에 적합한 이유는 무엇인가?
  3. GET과 POST 메서드의 의미를 비교하라. GET은 멱등성이 요구되는 반면 POST는 그렇지 않은 이유는 무엇인가? 이것이 API 설계에 어떤 함의를 갖는가?
  4. 이벤트 갱신을 받을 때 웹훅 알림은 폴링과 어떻게 다른가? 각 방식의 장점과 과제는 무엇인가?
  5. API 버전 생애주기를 논하라. 기업 연동에서 2년 지원 보장이 중요한 이유는 무엇인가?
  6. 규정 준수 보고 API가 요건이 서로 다른 여러 관할 지역을 어떻게 지원하는지 설명하라. 이러한 유연성에서 API 매개변수는 어떤 역할을 하는가?

다음 장 미리보기

데이터 형식과 API가 확립되었으므로, 제6장에서는 3단계인 프로토콜 사양을 살펴본다. 이 프로토콜은 각 처리 단계에서 전자폐기물을 물리적으로 어떻게 취급해야 하는지를 정의하여 안전을 확보하고, 회수를 극대화하며, 규정 준수를 유지한다.