제5장

2단계: API 인터페이스

표준화된 데이터를 프로그래밍 방식으로 접근. RESTful API, WebSocket 스트리밍, SDK로 전 세계 핵융합 시설을 하나의 네트워크로 연결합니다.

API의 필요성

표준 데이터 형식이 있다면, 다음 단계는 이 데이터에 접근하는 표준 방법입니다. 과거에는 각 핵융합 시설에 방문하거나, 특수 소프트웨어를 설치하거나, 개인 연락처를 통해 데이터를 요청해야 했습니다. 이는 비효율적이고 확장 불가능하며 협업을 저해했습니다.

WIA-FUSION API는 이 모든 것을 변화시킵니다. 이제 연구자는 어디서나, 어떤 프로그래밍 언어로든, 표준 HTTP 요청으로 KSTAR, JET, DIII-D, ITER의 데이터에 접근할 수 있습니다.

아키텍처 개요

WIA-FUSION API는 3가지 접근 방식을 제공합니다:

1. REST API (과거 데이터, 쿼리, 분석) 2. WebSocket (실시간 데이터 스트리밍) 3. SDK (라이브러리 래퍼)

REST API 엔드포인트

인증 및 시작

POST /auth/token

API 키로 JWT 토큰을 발급받습니다.

// 요청
POST https://api.fusion.wia.live/v1/auth/token
Content-Type: application/json

{
  "api_key": "wia_fusion_live_abc123...",
  "facility": "KSTAR"
}

// 응답
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expires_in": 3600,
  "facility": "KSTAR",
  "permissions": ["read", "stream"]
}

플라즈마 데이터 조회

GET /plasma/shots

샷 목록을 조회합니다.

// 요청
GET /v1/plasma/shots?facility=KSTAR&date_from=2023-01-01&date_to=2023-12-31&limit=100
Authorization: Bearer <token>

// 응답
{
  "total": 2450,
  "page": 1,
  "shots": [
    {
      "shot_id": "KSTAR-2023-12-15-24501",
      "timestamp": "2023-12-15T09:23:45.250Z",
      "duration_s": 102.3,
      "peak_temperature_keV": 8.6,
      "peak_density_1e20m3": 0.85,
      "disruption": false
    },
    ...
  ]
}
GET /plasma/shots/{shot_id}

특정 샷의 상세 데이터를 가져옵니다.

POST /plasma/query

복잡한 조건으로 데이터를 검색합니다.

// 요청
POST /v1/plasma/query
{
  "facility": ["KSTAR", "JET"],
  "temperature_keV": {"min": 5, "max": 15},
  "beta_percent": {"min": 2},
  "disruption": false,
  "date_range": {
    "from": "2022-01-01",
    "to": "2023-12-31"
  },
  "limit": 1000
}

// 응답
{
  "matches": 1247,
  "shots": [...]
}

AI 예측 서비스

POST /ai/predict/disruption

현재 플라즈마 상태에서 붕괴 확률을 예측합니다.

// 요청
POST /v1/ai/predict/disruption
{
  "plasma_state": {
    "temperature_keV": 10.0,
    "density_1e20m3": 1.2,
    "plasma_current_ma": 15,
    "beta_percent": 2.8,
    "mhd_amplitude": 0.25
  },
  "model": "KAIST-DNN-v3.2"
}

// 응답
{
  "prediction": {
    "disruption_probability": 0.72,
    "time_to_disruption_ms": 350,
    "confidence": 0.94,
    "recommended_actions": [
      {
        "action": "reduce_heating_power",
        "target": "NBI",
        "amount_percent": -30,
        "urgency": "high"
      },
      {
        "action": "activate_elm_mitigation",
        "method": "RMP_coils",
        "urgency": "medium"
      }
    ],
    "model_version": "KAIST-DNN-v3.2",
    "training_data": "KSTAR+JET+DIII-D (2018-2023)"
  }
}

WebSocket 실시간 스트리밍

실시간 플라즈마 모니터링과 제어를 위해 WIA-FUSION은 WebSocket 프로토콜을 지원합니다. KSTAR는 최대 10 kHz로 70개 이상의 진단 채널을 스트리밍합니다.

연결 및 구독

// JavaScript/TypeScript 예시
const ws = new WebSocket('wss://api.fusion.wia.live/v1/stream/plasma');

// 인증
ws.onopen = () => {
  ws.send(JSON.stringify({
    action: 'auth',
    token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
  }));

  // 채널 구독
  ws.send(JSON.stringify({
    action: 'subscribe',
    facility: 'KSTAR',
    shot_id: 'KSTAR-2024-01-15-24600',
    channels: [
      'plasma_state',      // 플라즈마 상태 (10 Hz)
      'thomson_scattering',// Thomson 산란 (100 Hz)
      'ece',               // 전자 사이클로트론 (1 kHz)
      'magnetics',         // 자기 신호 (10 kHz)
      'ai_predictions'     // AI 예측 (1 Hz)
    ],
    sample_rate_hz: 100    // 최대 샘플링 레이트
  }));
};

// 데이터 수신
ws.onmessage = (event) => {
  const data = JSON.parse(event.data);

  if (data.channel === 'plasma_state') {
    console.log(`온도: ${data.temperature_keV.ion} keV`);
    console.log(`밀도: ${data.density_1e20m3} × 10²⁰/m³`);
    console.log(`베타: ${data.beta_percent}%`);
    updateDashboard(data);
  }

  if (data.channel === 'ai_predictions') {
    if (data.disruption_probability > 0.7) {
      console.warn('⚠️ 붕괴 위험 높음!', data);
      triggerAlert(data);
    }
  }
};

// 오류 처리
ws.onerror = (error) => {
  console.error('WebSocket 오류:', error);
};

// 재연결
ws.onclose = () => {
  console.log('연결 종료, 5초 후 재연결...');
  setTimeout(connectWebSocket, 5000);
};

KSTAR 실시간 API 구현

국가핵융합연구소(KFE)는 2024년 KSTAR에 완전한 WIA-FUSION API를 구축했습니다. 이는 세계 최초의 PLATINUM 인증 API입니다.

구성 요소 기술 스택 성능 가용성
API 게이트웨이 Kong + Kubernetes 10,000 req/s 99.99%
REST 서버 Node.js + Express <5 ms 지연 99.95%
WebSocket 서버 Go + gorilla/websocket 10 kHz 스트리밍 99.9%
데이터베이스 PostgreSQL + TimescaleDB 100 TB 저장 99.99%
캐시 Redis Cluster <1 ms 응답 99.99%
AI 추론 NVIDIA Triton + TensorRT <10 ms 예측 99.9%

SDK 사용 예시

TypeScript SDK

import { FusionClient } from '@wia/fusion-sdk';

// 클라이언트 초기화
const client = new FusionClient({
  apiKey: process.env.WIA_FUSION_API_KEY,
  facility: 'KSTAR',
  baseURL: 'https://api.fusion.wia.live/v1'
});

// 샷 조회
const shots = await client.plasma.getShots({
  dateFrom: '2023-01-01',
  dateTo: '2023-12-31',
  temperatureMin: 5,
  disruptionOnly: false
});

console.log(`${shots.total}개 샷 발견`);

// 특정 샷 상세 정보
const shot = await client.plasma.getShot('KSTAR-2023-12-15-24501');
console.log(`최고 온도: ${shot.peak_temperature_keV} keV`);
console.log(`지속 시간: ${shot.duration_s}초`);

// AI 붕괴 예측
const prediction = await client.ai.predictDisruption({
  temperature_keV: 10.0,
  density_1e20m3: 1.2,
  beta_percent: 2.8
});

if (prediction.disruption_probability > 0.7) {
  console.warn('⚠️ 붕괴 위험!');
  console.log(`예상 시간: ${prediction.time_to_disruption_ms}ms`);
  console.log('권장 조치:', prediction.recommended_actions);
}

// 실시간 스트리밍
const stream = client.stream.connect('KSTAR-2024-01-15-24600');

stream.subscribe(['plasma_state', 'ai_predictions'], (data) => {
  console.log('실시간 데이터:', data);
});

stream.on('disruption_warning', (warning) => {
  console.error('🚨 붕괴 경고!', warning);
});

Python SDK

from wia_fusion import FusionClient
import asyncio

# 클라이언트 초기화
client = FusionClient(
    api_key=os.getenv("WIA_FUSION_API_KEY"),
    facility="KSTAR"
)

# 샷 조회 (동기)
shots = client.plasma.get_shots(
    date_from="2023-01-01",
    date_to="2023-12-31",
    temperature_min=5
)

print(f"{shots.total}개 샷 발견")

# AI 예측 (동기)
prediction = client.ai.predict_disruption(
    temperature_keV=10.0,
    density_1e20m3=1.2,
    beta_percent=2.8
)

if prediction.disruption_probability > 0.7:
    print("⚠️ 붕괴 위험!")
    print(f"확률: {prediction.disruption_probability * 100}%")

# 실시간 스트리밍 (비동기)
async def stream_data():
    async with client.stream.connect("KSTAR-2024-01-15-24600") as stream:
        await stream.subscribe(["plasma_state", "ai_predictions"])

        async for data in stream:
            print(f"온도: {data.temperature_keV} keV")

            if data.channel == "ai_predictions":
                if data.disruption_probability > 0.7:
                    print("🚨 붕괴 경고!")

# 실행
asyncio.run(stream_data())

한국 대학의 API 활용

서울대학교 (SNU) - 글로벌 플라즈마 비교 도구:
SNU는 WIA-FUSION API를 사용하여 KSTAR, JET, DIII-D, EAST의 데이터를 실시간으로 비교하는 웹 애플리케이션을 개발했습니다. 연구자들은 동일한 플라즈마 조건을 서로 다른 토카막에서 어떻게 달성했는지 비교할 수 있습니다. 이 도구는 매달 2,000명 이상의 연구자가 사용합니다.

KAIST - 자동 실험 최적화:
KAIST는 API를 통해 KSTAR 제어 시스템과 통합된 강화 학습 에이전트를 개발했습니다. 이 AI는 실시간 데이터를 받아 최적의 가열 및 전류 프로파일을 제안하며, 운영자는 API를 통해 이 제안을 검토하고 적용할 수 있습니다. 2024년 테스트에서 이 시스템은 H-모드 가둠 시간을 평균 15% 향상시켰습니다.

POSTECH - 교육용 대시보드:
POSTECH은 WIA-FUSION API를 사용하여 학부생들이 실시간 KSTAR 데이터를 볼 수 있는 교육용 대시보드를 만들었습니다. 학생들은 플라즈마 물리학 이론을 실제 데이터와 연결하여 학습할 수 있으며, API 사용법도 배웁니다. 이 프로그램은 한국의 10개 대학으로 확장되었습니다.

보안 및 접근 제어

핵융합 시설은 민감한 국가 인프라입니다. WIA-FUSION API는 다층 보안을 제공합니다:

보안 계층 메커니즘 목적
인증 API 키 + JWT 토큰 사용자 신원 확인
인가 역할 기반 접근 제어 (RBAC) 권한 관리 (read/write/admin)
전송 TLS 1.3 암호화 데이터 전송 보호
속도 제한 토큰 버킷 알고리즘 남용 방지 (1,000 req/min)
감사 모든 요청 로깅 추적성 및 컴플라이언스

접근 레벨

레벨 권한 대상 승인 과정
PUBLIC 요약 데이터 읽기 모든 사용자 자동 (이메일 확인)
RESEARCHER 전체 데이터 읽기 학술 연구자 소속 기관 확인 (1-3일)
OPERATOR 읽기 + 제어 제안 시설 운영자 KFE 직접 승인 (1주)
ADMIN 전체 제어 시설 관리자 KFE 이사회 승인

성능 최적화

KSTAR API는 다음 기술로 고성능을 달성합니다:

1. 계층적 캐싱: 2. 데이터베이스 최적화: 3. 압축 및 스트리밍:

弘益人間: API를 통한 글로벌 협력

弘益人間

접근성을 통한 인류의 이익

WIA-FUSION API는 弘益人間 정신을 실천합니다:

핵심 요약

복습 질문

  1. WIA-FUSION API의 3가지 접근 방식과 각각의 용도는?
  2. JWT 토큰을 발급받는 과정과 유효 기간은?
  3. 복잡한 플라즈마 데이터 검색을 위한 POST /plasma/query의 예시는?
  4. AI 붕괴 예측 API가 반환하는 recommended_actions의 의미는?
  5. WebSocket으로 KSTAR 실시간 데이터를 구독하는 방법은?
  6. KSTAR API의 기술 스택과 성능 지표는?
  7. KAIST의 강화 학습 에이전트가 달성한 성과는?
  8. WIA-FUSION API의 4가지 접근 레벨과 승인 과정은?
  9. API 성능 최적화를 위한 캐싱 전략은?

다음 장 미리보기

제6장: 3단계 - 프로토콜

데이터와 API로 기술적 상호운용성을 달성했으니, 이제 운영 표준으로 넘어갑니다. 제6장에서는 플라즈마 시작 시퀀스, 정상 상태 제어, 안전한 종료, 비상 대응 프로토콜을 배웁니다. KSTAR가 어떻게 AI로 1억 °C 플라즈마를 102초간 유지하는지, 그리고 이 운영 지식을 어떻게 표준화하여 ITER와 공유하는지 살펴봅니다.