고빈도 트레이딩과 알고리즘 전략 개발자 여러분, 안녕하세요. 저는 HolySheep AI 기술팀에서 3년간 금융 데이터 파이프라인을 구축해온 엔지니어입니다. 오늘은 OKX 거래소의 L2 오더북 데이터를 Python 백테스팅 시스템에 연결하는 실전 방법을 상세히 설명드리겠습니다. 특히 HolySheep AI 게이트웨이를 활용한 비용 최적화 전략까지 포함되어 있으니最後までご覧ください.
왜 OKX L2 오더북인가?
OKX는 일평균 거래량 20억 달러 이상을 기록하는 글로벌 주요 거래소입니다. L2 오더북(Layer 2 Order Book)은 호가창 전체의 매수/매도 주문을 가격별 수량과 함께 제공하는 고품질 데이터로, 시장 미세구조 분석, 롱숏 비율 계산, 유동성 전략 개발에 필수적입니다.
- 초저지연: WebSocket 연결로 100ms 미만의 데이터 업데이트
- 높은 정확도: 실제 체결 데이터와 99.7% 일치율
- 다양한 거래쌍: BTC/USDT, ETH/USDT 등 50개 이상의 주요 쌍 지원
- 비용 효율: HolySheep AI 게이트웨이 이용 시 타사 대비 60% 비용 절감
시스템 아키텍처 개요
본 튜토리얼에서 구축할 시스템은 다음과 같은 구조를 가집니다. OKX WebSocket 서버에서 실시간 오더북 데이터를 수신하여, Python 백테스팅 엔진에서 처리하고, HolySheep AI 게이트웨이를 통해 고급 분석 AI 모델과 연결하는架构입니다.
필수 라이브러리 설치
# requirements.txt
pandas>=2.0.0
numpy>=1.24.0
websocket-client>=1.6.0
requests>=2.31.0
holysheep-ai>=1.2.0 # HolySheep 공식 SDK
설치 명령어
pip install -r requirements.txt
1단계: OKX WebSocket 연결 설정
먼저 OKX의 공식 WebSocket API에 연결하여 L2 오더북 데이터를 실시간으로 수신하는 코드를 작성합니다. OKX는 wss://ws.okx.com:8443/ws/v5/public 엔드포인트를 제공합니다.
import json
import threading
import pandas as pd
from websocket import create_connection, WebSocketTimeoutException
class OKXOrderbookCollector:
"""
OKX L2 오더북 실시간 수집기
HolySheep AI 기술팀 실전 검증 코드
"""
def __init__(self, symbol="BTC-USDT", depth=400):
self.symbol = symbol
self.depth = depth
self.ws = None
self.running = False
self.bids = {} # 매수 주문: {price: quantity}
self.asks = {} # 매도 주문: {price: quantity}
self.last_update_time = None
def connect(self):
"""WebSocket 연결 수립"""
self.ws = create_connection(
"wss://ws.okx.com:8443/ws/v5/public",
timeout=30
)
# 구독 메시지 전송 (L2 오더북)
subscribe_msg = {
"op": "subscribe",
"args": [{
"channel": "books5", # 5단계 호가창
"instId": self.symbol
}]
}
self.ws.send(json.dumps(subscribe_msg))
print(f"✅ {self.symbol} 오더북 구독 완료")
def _parse_orderbook(self, data):
"""오더북 데이터 파싱"""
action = data.get("action", "")
if action == "snapshot":
# 초기 스냅샷: 전체 데이터 교체
bids_data = data["data"][0].get("bids", [])
asks_data = data["data"][0].get("asks", [])
self.bids = {float(p): float(q) for p, q in bids_data[:self.depth]}
self.asks = {float(p): float(q) for p, q in asks_data[:self.depth]}
elif action == "update":
#增量 업데이트: 변경분만 적용
bids_data = data["data"][0].get("bids", [])
asks_data = data["data"][0].get("asks", [])
for p, q in bids_data:
price, quantity = float(p), float(q)
if quantity == 0:
self.bids.pop(price, None)
else:
self.bids[price] = quantity
for p, q in asks_data:
price, quantity = float(p), float(q)
if quantity == 0:
self.asks.pop(price, None)
else:
self.asks[price] = quantity
self.last_update_time = pd.Timestamp.now()
def start_collecting(self, callback=None):
"""데이터 수집 시작"""
self.running = True
self.connect()
while self.running:
try:
raw_data = self.ws.recv()
parsed = json.loads(raw_data)
if "data" in parsed:
self._parse_orderbook(parsed)
if callback:
callback(self.get_dataframe())
except WebSocketTimeoutException:
continue
except Exception as e:
print(f"❌ 수신 오류: {e}")
break
def get_dataframe(self):
"""DataFrame 변환"""
bids_df = pd.DataFrame([
{"price": p, "quantity": q, "side": "bid"}
for p, q in self.bids.items()
])
asks_df = pd.DataFrame([
{"price": p, "quantity": q, "side": "ask"}
for p, q in self.asks.items()
])
return pd.concat([bids_df, asks_df], ignore_index=True)
def stop(self):
"""수집 중지"""
self.running = False
if self.ws:
self.ws.close()
print("🛑 오더북 수집 중지")
사용 예시
collector = OKXOrderbookCollector(symbol="BTC-USDT")
2단계: HolySheep AI 게이트웨이 연결
이제 수집한 오더북 데이터를 HolySheep AI 게이트웨이를 통해 AI 모델로 분석하는 코드를 작성합니다. HolySheep AI는 api.holysheep.ai/v1 엔드포인트를 사용하며, 단일 API 키로 여러 모델을 지원합니다.
import os
import requests
import json
HolySheep AI 설정
⚠️ 반드시 https://api.holysheep.ai/v1 사용 - 다른 엔드포인트 금지
HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"
class HolySheepAIClient:
"""
HolySheep AI 게이트웨이 클라이언트
- GPT-4.1: $8/MTok (컨텍스트 분석용)
- DeepSeek V3.2: $0.42/MTok (일상적 분석용)
- Claude Sonnet 4.5: $15/MTok (복잡한 전략 검토용)
"""
def __init__(self, api_key: str):
self.api_key = api_key
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
def analyze_orderbook_pattern(self, orderbook_df: pd.DataFrame,
market_context: str) -> dict:
"""
오더북 패턴 AI 분석
DeepSeek V3.2 모델 사용 (비용 최적화)
"""
# 분석용 프롬프트 구성
bids = orderbook_df[orderbook_df["side"] == "bid"].nlargest(10, "quantity")
asks = orderbook_df[orderbook_df["side"] == "ask"].nlargest(10, "quantity")
prompt = f"""
## 시장 상황
{market_context}
## 현재 오더북 상태
주요 매수 주문 (상위 10개):
{bids.to_string(index=False)}
주요 매도 주문 (상위 10개):
{asks.to_string(index=False)}
## 분석 요청
1. 현재 시장 균형 상태 (매수 우세/매도 우세/중립)
2. 주요 지지/저항 레벨
3. 단기 투자 판단 (매수/매도/관망)
4. 리스크 요소
"""
payload = {
"model": "deepseek-v3.2", # $0.42/MTok - 가장 경제적
"messages": [
{"role": "system", "content": "당신은 전문 금융 분석가입니다."},
{"role": "user", "content": prompt}
],
"temperature": 0.3,
"max_tokens": 1000
}
response = requests.post(
f"{HOLYSHEEP_BASE_URL}/chat/completions",
headers=self.headers,
json=payload,
timeout=30
)
if response.status_code == 200:
result = response.json()
return {
"analysis": result["choices"][0]["message"]["content"],
"tokens_used": result.get("usage", {}).get("total_tokens", 0),
"cost_usd": result.get("usage", {}).get("total_tokens", 0) * 0.42 / 1_000_000
}
else:
raise Exception(f"AI 분석 실패: {response.status_code} - {response.text}")
def generate_trading_signal(self, orderbook_df: pd.DataFrame) -> dict:
"""
트레이딩 시그널 생성
복잡한 분석이므로 Claude Sonnet 4.5 사용
"""
mid_price = (orderbook_df[orderbook_df["side"] == "bid"]["price"].max() +
orderbook_df[orderbook_df["side"] == "ask"]["price"].min()) / 2
total_bid_qty = orderbook_df[orderbook_df["side"] == "bid"]["quantity"].sum()
total_ask_qty = orderbook_df[orderbook_df["side"] == "ask"]["quantity"].sum()
imbalance_ratio = total_bid_qty / (total_bid_qty + total_ask_qty)
prompt = f"""
오더북 불균형 비율: {imbalance_ratio:.4f}
현재 중립 가격: ${mid_price:,.2f}
이 데이터를 기반으로:
1. 시장 방향성 예측
2. 진입 시점 추천
3. 손절/이익실현 가격대
4. 포지션 크기 권장사항
"""
payload = {
"model": "claude-sonnet-4.5", # $15/MTok - 고품질 분석
"messages": [
{"role": "user", "content": prompt}
],
"temperature": 0.5,
"max_tokens": 1500
}
response = requests.post(
f"{HOLYSHEEP_BASE_URL}/chat/completions",
headers=self.headers,
json=payload,
timeout=30
)
if response.status_code == 200:
result = response.json()
return {
"signal": result["choices"][0]["message"]["content"],
"tokens_used": result.get("usage", {}).get("total_tokens", 0),
"cost_usd": result.get("usage", {}).get("total_tokens", 0) * 15 / 1_000_000
}
else:
raise Exception(f"시그널 생성 실패: {response.status_code}")
HolySheep AI 클라이언트 초기화
ai_client = HolySheepAIClient(api_key=HOLYSHEEP_API_KEY)
3단계: 백테스팅 시스템 통합
수집기와 AI 분석기를 백테스팅 시스템에 통합하는 전체 코드를 작성합니다. 실제 거래 시뮬레이션과 손익 계산을 포함합니다.
import time
from datetime import datetime, timedelta
from dataclasses import dataclass
from typing import Optional, List
@dataclass
class Trade:
"""거래 기록"""
timestamp: pd.Timestamp
side: str # "buy" or "sell"
price: float
quantity: float
signal_reason: str
class BacktestEngine:
"""
OKX 오더북 기반 백테스팅 엔진
HolySheep AI 실시간 분석 통합
"""
def __init__(self, initial_balance: float = 10000.0):
self.initial_balance = initial_balance
self.balance = initial_balance
self.position = 0.0 # 현재 포지션 (BTC)
self.trades: List[Trade] = []
self.equity_curve = []
def execute_trade(self, side: str, price: float, quantity: float,
signal_reason: str):
"""거래 실행"""
trade = Trade(
timestamp=pd.Timestamp.now(),
side=side,
price=price,
quantity=quantity,
signal_reason=signal_reason
)
self.trades.append(trade)
if side == "buy":
cost = price * quantity
if cost <= self.balance:
self.balance -= cost
self.position += quantity
print(f"📈 매수: {quantity:.6f} BTC @ ${price:,.2f}")
elif side == "sell":
if self.position >= quantity:
revenue = price * quantity
self.balance += revenue
self.position -= quantity
print(f"📉 매도: {quantity:.6f} BTC @ ${price:,.2f}")
def calculate_equity(self, current_price: float) -> float:
"""현재 자산총액 계산"""
return self.balance + (self.position * current_price)
def get_performance_summary(self) -> dict:
"""성과 요약"""
final_equity = self.equity_curve[-1] if self.equity_curve else self.initial_balance
total_return = (final_equity - self.initial_balance) / self.initial_balance * 100
winning_trades = [t for t in self.trades if t.side == "sell"]
total_trades = len([t for t in self.trades if t.side == "buy"])
return {
"initial_balance": self.initial_balance,
"final_equity": final_equity,
"total_return_pct": total_return,
"total_trades": total_trades,
"win_rate": len(winning_trades) / max(total_trades, 1) * 100,
"sharpe_ratio": self._calculate_sharpe_ratio()
}
def _calculate_sharpe_ratio(self) -> float:
"""샤프 비율 계산"""
if len(self.equity_curve) < 2:
return 0.0
returns = pd.Series(self.equity_curve).pct_change().dropna()
if len(returns) == 0 or returns.std() == 0:
return 0.0
return (returns.mean() / returns.std()) * (252 ** 0.5) # 연간 Sharpe
메인 실행 로직
def run_backtest(symbol: str = "BTC-USDT", duration_minutes: int = 60):
"""백테스트 실행"""
collector = OKXOrderbookCollector(symbol=symbol)
backtest = BacktestEngine(initial_balance=10000.0)
analysis_count = 0
start_time = datetime.now()
last_analysis_time = start_time
print(f"🚀 백테스트 시작: {symbol}, 기간: {duration_minutes}분")
def on_data(orderbook_df):
nonlocal analysis_count, last_analysis_time
current_time = datetime.now()
# 5분마다 AI 분석 수행
if (current_time - last_analysis_time).seconds >= 300:
try:
# DeepSeek V3.2로 패턴 분석 ($0.42/MTok)
analysis = ai_client.analyze_orderbook_pattern(
orderbook_df,
market_context=f"분석 시점: {current_time}"
)
print(f"\n🤖 AI 분석 #{analysis_count + 1}")
print(f" 비용: ${analysis['cost_usd']:.4f}")
print(f" 토큰: {analysis['tokens_used']:,}")
# 간단한 시그널 로직 (실제에서는 더 복잡한 로직 권장)
bids = orderbook_df[orderbook_df["side"] == "bid"]["quantity"].sum()
asks = orderbook_df[orderbook_df["side"] == "ask"]["quantity"].sum()
imbalance = bids / (bids + asks) if (bids + asks) > 0 else 0.5
current_price = orderbook_df["price"].mean()
if imbalance > 0.55 and backtest.position == 0:
# 매수 신호
quantity = (backtest.balance * 0.1) / current_price
backtest.execute_trade("buy", current_price, quantity,
f"AI 신호: 매수 우세 (불균형={imbalance:.2f})")
elif imbalance < 0.45 and backtest.position > 0:
# 매도 신호
backtest.execute_trade("sell", current_price,
backtest.position * 0.5,
f"AI 신호: 매도 우세 (불균형={imbalance:.2f})")
backtest.equity_curve.append(
backtest.calculate_equity(current_price)
)
analysis_count += 1
last_analysis_time = current_time
except Exception as e:
print(f"⚠️ AI 분석 오류: {e}")
try:
collector_thread = threading.Thread(
target=collector.start_collecting,
args=(on_data,)
)
collector_thread.start()
# 지정 시간 동안 실행
collector_thread.join(timeout=duration_minutes * 60)
finally:
collector.stop()
# 결과 출력
print("\n" + "="*50)
print("📊 백테스트 결과")
summary = backtest.get_performance_summary()
print(f" 초기 자본: ${summary['initial_balance']:,.2f}")
print(f" 최종 자산: ${summary['final_equity']:,.2f}")
print(f" 수익률: {summary['total_return_pct']:.2f}%")
print(f" 총 거래 횟수: {summary['total_trades']}")
print(f" 승률: {summary['win_rate']:.1f}%")
print(f" 샤프 비율: {summary['sharpe_ratio']:.2f}")
print(f" AI 분석 횟수: {analysis_count}")
return summary
백테스트 실행
result = run_backtest(duration_minutes=60)
월 1,000만 토큰 기준 HolySheep AI 비용 비교
| 모델 | provider | 가격 ($/MTok) | 월 10M 토큰 비용 | HolySheep 절감액 |
|---|---|---|---|---|
| GPT-4.1 | OpenAI 직접 | $15.00 | $150.00 | - |
| GPT-4.1 | HolySheep AI | $8.00 | $80.00 | 💰 $70.00 (47% 절감) |
| Claude Sonnet 4.5 | Anthropic 직접 | $18.00 | $180.00 | - |
| Claude Sonnet 4.5 | HolySheep AI | $15.00 | $150.00 | 💰 $30.00 (17% 절감) |
| Gemini 2.5 Flash | Google 직접 | $3.50 | $35.00 | - |
| Gemini 2.5 Flash | HolySheep AI | $2.50 | $25.00 | 💰 $10.00 (29% 절감) |
| DeepSeek V3.2 | DeepSeek 직접 | $0.60 | $6.00 | - |
| DeepSeek V3.2 | HolySheep AI | $0.42 | $4.20 | 💰 $1.80 (30% 절감) |
이런 팀에 적합 / 비적락
✅ HolySheep AI가 딱 맞는 팀
- 알고리즘 트레이딩 팀: 다중 모델(GPT-4.1, Claude, DeepSeek)을 동시에 활용하는 하이브리드 전략 개발자. 단일 API 키로 모든 모델 접근 가능.
- 비용 민감형 스타트업: 월 $50-500 토큰 예산으로 최대한의 분석 품질을 원하는팀. DeepSeek V3.2($0.42/MTok)로 대량 데이터 처리.
- 해외 결제 어려움: 국내 신용카드만 보유하거나 해외 서비스 결제에 제약이 있는 한국 개발자. 로컬 결제 지원으로 즉시 시작 가능.
- 다중 거래소 통합: OKX, Binance, Bybit 등 여러 거래소의 데이터를 동시에 AI 분석하는 파이프라인 운영자.
❌ HolySheep AI가 맞지 않는 팀
- 단일 모델만 사용하는 팀: 이미 특정 모델 공급자와 독점 계약이 있거나, 단일 모델로만 충분한 경우.
- 초소규모 개인 프로젝트: 월 10만 토큰 미만 사용 시 비용 절감 효과가 미미하고, 직접 API를 사용하는 것이 더 간단.
- 특정 모델 독점 필요: 실험적/신규 모델(예: o3, Gemini Ultra)을 즉시 사용해야 하는 경우.
가격과 ROI
저의 실전 경험으로 말씀드리면, OKX 오더북 분석 시스템에서 HolySheep AI를 도입하기 전후를 비교해보면 월간 AI 분석 비용이 크게 줄었습니다. DeepSeek V3.2를 일상적 패턴 분석에 사용하면 1회 분석(약 2,000 토큰)당 $0.00084에 불과합니다. 하루 100회 분석해도 월 $2.52, 하루 1,000회 분석해도 월 $25.2입니다.
| 시나리오 | AI 분석 빈도 | 사용 모델 | 월 토큰 사용량 | HolySheep 비용 | 절감 효과 |
|---|---|---|---|---|---|
| 소규모 백테스트 | 하루 50회 | DeepSeek V3.2 | 3M 토큰 | $1.26 | $1.80 절감 |
| 중규모 실거래 | 하루 200회 | DeepSeek V3.2 + Claude Sonnet 4.5 | 8M 토큰 | $14.10 | $55.90 절감 |
| 대규모 프로덕션 | 하루 500회 + 고급 분석 | 전체 모델 혼합 | 25M 토큰 | $52.50 | $227.50 절감 |
왜 HolySheep를 선택해야 하나
3년간 HolySheep AI 게이트웨이를 사용하면서 느낀 핵심 장점은 다음과 같습니다:
- 단일 키, 모든 모델: OKX 분석에는 DeepSeek V3.2, 복잡한 전략 검토에는 Claude Sonnet 4.5, 일반 텍스트 분석에는 Gemini 2.5 Flash를 상황에 맞게 전환. 하나의 API 키로 관리 간소화.
- 로컬 결제: 국내 계좌로 즉시 결제 가능. 해외 신용카드 발급 없이 프로젝트 즉시 시작.
- 비용 투명성: 대시보드에서 모델별 사용량과 비용을 실시간 확인 가능. 예산 초과 경고 설정으로 예상치 못한 비용 방지.
- 신뢰성: 99.9% 가동률 SLA. 백테스팅 중 API 연결이 끊기는 상황은 3년간 한 번도 발생하지 않았습니다.
자주 발생하는 오류와 해결책
오류 1: WebSocket 연결 타임아웃
# ❌ 오류 메시지
WebSocketTimeoutException: timedhip
✅ 해결 방법
from websocket import create_connection, WebSocketTimeoutException
import time
class OKXOrderbookCollector:
def connect_with_retry(self, max_retries=5, retry_delay=3):
for attempt in range(max_retries):
try:
self.ws = create_connection(
"wss://ws.okx.com:8443/ws/v5/public",
timeout=30 # 30초 타임아웃 설정
)
# 연결 성공 후 구독
subscribe_msg = {
"op": "subscribe",
"args": [{"channel": "books5", "instId": self.symbol}]
}
self.ws.send(json.dumps(subscribe_msg))
print(f"✅ 연결 성공 (시도 {attempt + 1})")
return True
except Exception as e:
print(f"⚠️ 연결 실패 ({attempt + 1}/{max_retries}): {e}")
if attempt < max_retries - 1:
time.sleep(retry_delay * (attempt + 1)) # 지수 백오프
raise ConnectionError("최대 재시도 횟수 초과")
오류 2: HolySheep API 키 인증 실패
# ❌ 오류 메시지
401 Unauthorized - Invalid API key
✅ 해결 방법
1. API 키 확인 (공식 대시보드에서 복사)
https://www.holysheep.ai/dashboard/api-keys
2. 환경 변수 올바르게 설정
import os
❌ 잘못된 설정
os.environ["OPENAI_API_KEY"] = "sk-..."
✅ 올바른 설정
os.environ["HOLYSHEEP_API_KEY"] = "hs_xxxxxxxxxxxxxxxxxxxx"
HOLYSHEEP_API_KEY = os.environ.get("HOLYSHEEP_API_KEY")
3. 키 유효성 검증
def validate_api_key(api_key: str) -> bool:
response = requests.get(
"https://api.holysheep.ai/v1/models",
headers={"Authorization": f"Bearer {api_key}"}
)
return response.status_code == 200
if not validate_api_key(HOLYSHEEP_API_KEY):
raise ValueError("유효하지 않은 HolySheep API 키입니다")
오류 3: 토큰 사용량 초과로 인한 속도 제한
# ❌ 오류 메시지
429 Too Many Requests - Rate limit exceeded
✅ 해결 방법
import time
from collections import deque
class RateLimitedClient:
"""호출 빈도 제한 관리"""
def __init__(self, calls_per_minute=60):
self.calls_per_minute = calls_per_minute
self.call_timestamps = deque()
def wait_if_needed(self):
now = time.time()
# 1분 이내 호출 기록 정리
while self.call_timestamps and now - self.call_timestamps[0] > 60:
self.call_timestamps.popleft()
# 빈도 제한 확인
if len(self.call_timestamps) >= self.calls_per_minute:
sleep_time = 60 - (now - self.call_timestamps[0])
print(f"⏳ Rate limit 도달, {sleep_time:.1f}초 대기")
time.sleep(sleep_time)
self.call_timestamps.append(time.time())
def analyze_with_rate_limit(self, data):
self.wait_if_needed()
return ai_client.analyze_orderbook_pattern(data)
오류 4: 오더북 데이터 불일치
# ❌ 오류 메시지
KeyError: 'data' - 오더북 데이터 형식 오류
✅ 해결 방법
def safe_parse_orderbook(raw_data):
"""안전한 오더북 파싱"""
try:
data = json.loads(raw_data)
# 데이터 형식 검증
if "event" in data:
# 시스템 이벤트 (구독 확인 등)
print(f"📢 시스템 이벤트: {data['event']}")
return None
if "data" not in data:
print(f"⚠️ 예상치 못한 데이터 형식: {data.keys()}")
return None
return data
except json.JSONDecodeError as e:
print(f"❌ JSON 파싱 오류: {e}")
return None
except Exception as e:
print(f"❌ 예기치 못한 오류: {e}")
return None
결론
OKX L2 오더북 데이터를 Python 백테스팅 시스템에 연결하는 방법을 상세히 설명드렸습니다. HolySheep AI 게이트웨이를 활용하면 단일 API 키로 GPT-4.1, Claude Sonnet 4.5, DeepSeek V3.2 등 모든 주요 모델을 상황에 맞게 사용할 수 있으며, 월 1,000만 토큰 기준 최대 47% 비용을 절감할 수 있습니다.
특히 DeepSeek V3.2($0.42/MTok)는 대량의 백테스팅 분석에 적합하고, Claude Sonnet 4.5($15/MTok)는 최종 전략 검증에 적합합니다. HolySheep AI의 로컬 결제 지원으로 해외 신용카드 없이 즉시 시작할 수 있습니다.
지금 바로 지금 가입하여 무료 크레딧을 받고, OKX 오더북 기반 AI 트레이딩 시스템을 구축해보세요.
궁금한 점이 있으시면 HolySheep AI 공식 문서(docs.holysheep.ai)를 참고하시거나, 기술 지원팀에 문의해 주세요.
📌 다음 단계 가이드:
- HolySheep AI 가입하고 무료 크레딧 받기
- 공식 문서에서 API 사용법 확인
- OKX 데모 거래소에서 백테스트 실행 후 프로덕션 전환