저는 3년 넘게 RAG(Retrieval-Augmented Generation) 시스템을 구축하며 벡터 데이터베이스와 임베딩 모델 최적화에 매진해 온 엔지니어입니다. 이번 글에서는 HolySheep AI로 마이그레이션하는 완전한 플레이북과 함께 벡터 검색 최적화의 핵심을 정리하겠습니다.
벡터 데이터베이스란 무엇인가
벡터 데이터베이스는 텍스트, 이미지, 오디오 등의 데이터를 고차원 벡터로 변환하여 저장하고 유사도 검색을 가능하게 하는 시스템입니다.传统的基于关键词的搜索과 달리 의미적 유사도를 기반으로 결과를 반환하므로 RAG 시스템의 핵심 infraestrutura 역할을 합니다.
주요 벡터 데이터베이스를 정리하면 다음과 같습니다:
- Pinecone - 관리형 서비스, 확장성 우수, 하지만 비용이 높음
- Weaviate - 오픈소스, Hybrid 검색 지원
- ChromaDB - 경량, 개발 환경에 적합
- Milvus - 대규모 데이터 처리, 엔터프라이즈 급
- Qdrant - Rust 기반, 높은 성능과 안정성
임베딩 모델 선택의 중요성
임베딩 모델은 검색 품질의根基를 결정합니다.같은 벡터 데이터베이스를 사용하더라도 임베딩 모델에 따라 검색 정확도가 20% 이상 달라질 수 있습니다.현재 주요 임베딩 모델과 HolySheep AI 가격을 비교하면:
| 임베딩 모델 | 컨텍스트 창 | 차원(Dimension) | HolySheep 가격 | 주요 사용 사례 |
|---|---|---|---|---|
| text-embedding-3-small | 8K 토큰 | 1536 | $0.02/1M 토큰 | 일반 검색, 코드 검색 |
| text-embedding-3-large | 8K 토큰 | 3072 | $0.13/1M 토큰 | 고품질 검색, 의미적 이해 |
| text-embedding-ada-002 | 8K 토큰 | 1536 | $0.10/1M 토큰 | 레거시 시스템 호환 |
| embed-english-v3.0 | 8K 토큰 | 1024 | $0.10/1M 토큰 | 영문 전문 검색 |
저의 경험상, 90%의 Use Case에서는 text-embedding-3-small이 비용 대비 성능 비율이 가장 우수합니다.다만 정확한 의미적 이해가 필요한 금융 문서 검색이나 의료 기록 분석에는 text-embedding-3-large을 권장합니다.
다양한 시나리오별 벡터 검색 아키텍처
시나리오 1: 문서 QA 시스템 (중소규모)
# HolySheep AI를 사용한 문서 임베딩 및 검색 예제
import requests
import json
HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"
def create_embedding(text: str) -> list[float]:
"""문서를 임베딩 벡터로 변환"""
response = requests.post(
f"{HOLYSHEEP_BASE_URL}/embeddings",
headers={
"Authorization": f"Bearer {HOLYSHEEP_API_KEY}",
"Content-Type": "application/json"
},
json={
"input": text,
"model": "text-embedding-3-small"
}
)
response.raise_for_status()
return response.json()["data"][0]["embedding"]
def store_in_chroma(documents: list[str], metadatas: list[dict]):
"""ChromaDB에 문서와 메타데이터 저장"""
import chromadb
from chromadb.config import Settings
client = chromadb.Client(Settings(anonymized_telemetry=False))
collection = client.create_collection("documents")
embeddings = [create_embedding(doc) for doc in documents]
collection.add(
documents=documents,
embeddings=embeddings,
ids=[f"doc_{i}" for i in range(len(documents))],
metadatas=metadatas
)
return collection
사용 예시
documents = [
"HolySheep AI는 글로벌 AI API 게이트웨이입니다.",
"벡터 데이터베이스는 의미적 검색을 가능하게 합니다.",
"RAG 시스템은 실시간 지식 기반 AI를 구축합니다."
]
metadatas = [
{"source": "product_docs", "category": "AI Platform"},
{"source": "technical_articles", "category": "Database"},
{"source": "technical_articles", "category": "AI Architecture"}
]
collection = store_in_chroma(documents, metadatas)
print("문서가 성공적으로 임베딩되고 저장되었습니다.")
시나리오 2: 멀티모달 검색 시스템 (대규모)
# HolySheep AI + Qdrant를 활용한 하이브리드 검색 시스템
import requests
import numpy as np
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"
class MultiModalSearchEngine:
def __init__(self, collection_name: str = "multimodal_docs"):
self.qdrant = QdrantClient(host="localhost", port=6333)
self.collection_name = collection_name
self._create_collection()
def _create_collection(self):
"""Qdrant 컬렉션 생성"""
self.qdrant.recreate_collection(
collection_name=self.collection_name,
vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
)
def embed_and_index(self, items: list[dict]):
"""멀티모달 아이템 인덱싱"""
texts = [item["text"] for item in items]
# HolySheep AI 배치 임베딩 API 활용
response = requests.post(
f"{HOLYSHEEP_BASE_URL}/embeddings",
headers={
"Authorization": f"Bearer {HOLYSHEEP_API_KEY}",
"Content-Type": "application/json"
},
json={
"input": texts,
"model": "text-embedding-3-small"
}
)
embeddings = [item["embedding"] for item in response.json()["data"]]
points = [
PointStruct(
id=idx,
vector=embedding,
payload={
"text": item["text"],
"category": item.get("category", "general"),
"image_url": item.get("image_url")
}
)
for idx, (item, embedding) in enumerate(zip(items, embeddings))
]
self.qdrant.upsert(collection_name=self.collection_name, points=points)
print(f"{len(points)}개 아이템이 인덱싱되었습니다.")
def search(self, query: str, top_k: int = 5) -> list[dict]:
"""의미적 유사도 검색"""
# 쿼리 임베딩
response = requests.post(
f"{HOLYSHEEP_BASE_URL}/embeddings",
headers={
"Authorization": f"Bearer {HOLYSHEEP_API_KEY}",
"Content-Type": "application/json"
},
json={
"input": query,
"model": "text-embedding-3-small"
}
)
query_embedding = response.json()["data"][0]["embedding"]
# Qdrant에서 검색
results = self.qdrant.search(
collection_name=self.collection_name,
query_vector=query_embedding,
limit=top_k
)
return [
{
"id": result.id,
"score": result.score,
"payload": result.payload
}
for result in results
]
사용 예시
engine = MultiModalSearchEngine()
items = [
{"text": "고양이 사진: 귀여운 치즈", "category": "animals", "image_url": "/images/cat.jpg"},
{"text": "개 사진: 충성스러운 바둑이", "category": "animals", "image_url": "/images/dog.jpg"},
{"text": "산 풍경: 평화로운 설악산", "category": "landscape", "image_url": "/images/mountain.jpg"}
]
engine.embed_and_index(items)
검색 테스트
results = engine.search("반려동물 관련 콘텐츠")
print(f"검색 결과: {json.dumps(results, indent=2, ensure_ascii=False)}")
RAG 시스템 최적화 전략
RAG 시스템의 성능을 극대화하기 위한 핵심 최적화 전략은 다음과 같습니다:
1. 청킹(Chunking) 전략 최적화
문서를 분할하는 방식은 검색 품질에直接影响합니다.일반적인 접근법:
- 고정 크기 청킹: 512~1024 토큰 단위 분할, 구현 간단
- 의미적 청킹: 문단 단위 분할, 품질 높음 but 구현 복잡
- Hierarchical 청킹: 문서 → 섹션 → 단락 계층 구조
2. Hybrid Search 구현
의미적 검색과 키워드 검색을 결합하면 더 정확한 결과를 얻을 수 있습니다:
# HolySheep AI + BM25 Hybrid Search 구현
import requests
from rank_bm25 import BM25Okapi
import numpy as np
HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY"
HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"
class HybridSearchSystem:
def __init__(self, documents: list[str]):
self.documents = documents
self.tokenized_docs = [doc.split() for doc in documents]
self.bm25 = BM25Okapi(self.tokenized_docs)
self._create_embeddings()
def _create_embeddings(self):
"""HolySheep AI로 모든 문서 임베딩"""
response = requests.post(
f"{HOLYSHEEP_BASE_URL}/embeddings",
headers={
"Authorization": f"Bearer {HOLYSHEEP_API_KEY}",
"Content-Type": "application/json"
},
json={
"input": self.documents,
"model": "text-embedding-3-small"
}
)
self.embeddings = np.array([
item["embedding"] for item in response.json()["data"]
])
def search(self, query: str, alpha: float = 0.5, top_k: int = 5):
"""
Hybrid Search 실행
alpha: 0 = 키워드 중심, 1 = 의미적 검색 중심
"""
# BM25 점수 계산
tokenized_query = query.split()
bm25_scores = np.array(self.bm25.get_scores(tokenized_query))
bm25_scores = bm25_scores / (bm25_scores.max() + 1e-8)
# 의미적 유사도 계산
query_response = requests.post(
f"{HOLYSHEEP_BASE_URL}/embeddings",
headers={
"Authorization": f"Bearer {HOLYSHEEP_API_KEY}",
"Content-Type": "application/json"
},
json={"input": query, "model": "text-embedding-3-small"}
)
query_embedding = np.array(query_response.json()["data"][0]["embedding"])
# 코사인 유사도 계산
cosine_scores = np.dot(self.embeddings, query_embedding) / (
np.linalg.norm(self.embeddings, axis=1) * np.linalg.norm(query_embedding)
)
# Hybrid 점수 결합
hybrid_scores = alpha * cosine_scores + (1 - alpha) * bm25_scores
# 상위 결과 반환
top_indices = np.argsort(hybrid_scores)[::-1][:top_k]
return [
{
"document": self.documents[idx],
"score": hybrid_scores[idx],
"bm25_score": bm25_scores[idx],
"cosine_score": cosine_scores[idx]
}
for idx in top_indices
]
테스트
docs = [
"머신러닝은人工智能의 하위 분야입니다.",
"딥러닝은 신경망을 사용한 머신러닝 기법입니다.",
"자연어처리는 텍스트 분석과 이해를 담당합니다.",
"컴퓨터 비전은 이미지 인식을 연구합니다."
]
searcher = HybridSearchSystem(docs)
results = searcher.search("딥러닝과 인공신경망", alpha=0.7)
print(json.dumps(results, indent=2, ensure_ascii=False))
3. 재순위화(Reranking) 전략
초기 검색 결과를 더 정교하게 재순위화하면 검색 품질을 크게 향상시킬 수 있습니다:
# HolySheep AI를 활용한 Cross-Encoder Reranking
from sentence_transformers import CrossEncoder
class RerankingSearch:
def __init__(self, initial_results: list[dict], reranker_model: str = "cross-encoder/ms-marco-MiniLM-L-6-v2"):
self.reranker = CrossEncoder(reranker_model)
self.initial_results = initial_results
def rerank(self, query: str) -> list[dict]:
"""Cross-Encoder로 결과 재순위화"""
doc_texts = [result["document"] for result in self.initial_results]
# Cross-Encoder 점수 계산
pairs = [[query, doc] for doc in doc_texts]
cross_scores = self.reranker.predict(pairs)
# 점수 정규화 및 결합
normalized_cross = cross_scores / (cross_scores.max() + 1e-8)
original_scores = np.array([r["score"] for r in self.initial_results])
normalized_original = original_scores / (original_scores.max() + 1e-8)
# 최종 점수 (Cross-Encoder 가중치 0.6)
final_scores = 0.6 * normalized_cross + 0.4 * normalized_original
reranked = [
{
**result,
"final_score": float(final_scores[i]),
"cross_score": float(cross_scores[i])
}
for i, result in enumerate(self.initial_results)
]
return sorted(reranked, key=lambda x: x["final_score"], reverse=True)
사용 예시
reranker = RerankingSearch(initial_results=results)
final_results = reranker.rerank("머신러닝 관련 기술")
print(f"재순위화 결과: {final_results}")
HolySheep AI 마이그레이션 플레이북
왜 HolySheep AI로 마이그레이션하는가
기존 OpenAI 또는 Anthropic API에서 HolySheep AI로 전환하는 주된 이유는 다음과 같습니다:
| 평가 항목 | OpenAI Direct | Anthropic Direct | HolySheep AI |
|---|---|---|---|
| 임베딩 비용 (text-embedding-3-small) | $0.02/1M 토큰 | N/A | $0.02/1M 토큰 |
| 결제 편의성 | 해외 신용카드 필수 | 해외 신용카드 필수 | 로컬 결제 지원 |
| 다중 모델 통합 | 단일 모델만 | 단일 모델만 | GPT, Claude, Gemini 등 통합 |
| 비용 최적화 | 고정 가격 | 고정 가격 | 모델별 최적화 가격 |
| API 일관성 | OpenAI 호환 | 별도 SDK 필요 | OpenAI 호환 + 확장 |
마이그레이션 단계
1단계: 현재 상태 감사 (1-2일)
- 현재 사용 중인 API 호출량 분석
- 월간 비용 계산
- 사용 중인 모델 및 엔드포인트 목록 작성
2단계: 환경 설정 (반나절)
# HolySheep AI SDK 설치
pip install openai requests
환경 변수 설정
export HOLYSHEEP_API_KEY="YOUR_HOLYSHEEP_API_KEY"
export HOLYSHEEP_BASE_URL="https://api.holysheep.ai/v1"
Python 클라이언트 설정
from openai import OpenAI
client = OpenAI(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.holysheep.ai/v1"
)
연결 테스트
response = client.embeddings.create(
model="text-embedding-3-small",
input="HolySheep AI 연결 테스트"
)
print(f"연결 성공: {response.data[0].embedding[:5]}...")
3단계: 코드 마이그레이션 (1-3일)
# 기존 OpenAI 코드
from openai import OpenAI
client = OpenAI(api_key="OLD_API_KEY")
HolySheep AI로 변경
from openai import OpenAI
client = OpenAI(
api_key="YOUR_HOLYSHEEP_API_KEY", # HolySheep API 키
base_url="https://api.holysheep.ai/v1" # HolySheep 엔드포인트
)
기존 코드는 그대로 동작
response = client.embeddings.create(
model="text-embedding-3-small",
input="검색할 문서 텍스트"
)
4단계: 검증 및 테스트 (1-2일)
- 단위 테스트 실행
- 응답 시간 벤치마크
- 출력 품질 비교 검증
5단계: 점진적 트래픽 이전 (1주일)
- 카나리 배포: 5% → 25% → 50% → 100%
- 모니터링 및 알림 설정
- 문제 발생 시 즉시 롤백 준비
이런 팀에 적합 / 비적합
✅ HolySheep AI가 적합한 팀
- RAG 시스템 운영 팀: 문서 검색, 지식 베이스 QA 시스템 구축
- 비용 최적화가 필요한 팀: 다중 AI 모델을 사용하는 대규모 프로젝트
- 해외 신용카드 없는 팀: 로컬 결제 편의성이 중요한 해외 서비스 접근이 어려운 지역
- 다중 모델 통합 필요 팀: GPT, Claude, Gemini 등을 동시에 활용하는 하이브리드 시스템
- 스타트업 및 SMB:预算 제한 속에서도 다양한 AI 모델 실험 필요
❌ HolySheep AI가 비적합한 팀
- 단일 모델 독점 사용: 이미 특정 플랫폼에锁定된 대규모 기업
- 엄격한 자체 호스팅 요구: 모든 데이터를 온프레미스에서만 처리해야 하는 규제 산업
- 커스텀 모델만 사용: 자체 훈련된 임베딩 모델만 사용하는 팀
가격과 ROI
HolySheep AI의 임베딩 및 주요 모델 가격을 정리하면:
| 서비스 | 모델 | 가격 (1M 토큰) | 주요 장점 |
|---|---|---|---|
| 임베딩 | text-embedding-3-small | $0.02 | 비용 효율적, 빠른 응답 |
| 임베딩 | text-embedding-3-large | $0.13 | 고품질, 3072 차원 |
| 텍스트 생성 | GPT-4.1 | $8.00 | 최신 GPT 모델 |
| 텍스트 생성 | Claude Sonnet 4.5 | $15.00 | 긴 컨텍스트, 고품질 |
| 텍스트 생성 | Gemini 2.5 Flash | $2.50 | 초저비용, 고속 처리 |
| 텍스트 생성 | DeepSeek V3.2 | $0.42 | 최저가 옵션 |
ROI 분석 사례
시나리오: 월 10M 토큰 임베딩 사용 팀
- OpenAI Direct 비용: $0.02 × 10M = $200/월
- HolySheep AI 비용: $0.02 × 10M = $200/월
- 추가 이점: 로컬 결제 + 다중 모델 통합 + 비용 최적화
시나리오: Hybrid AI 시스템 (임베딩 + 생성)
- 임베딩: 10M 토큰 × $0.02 = $200
- Gemini 2.5 Flash: 5M 토큰 × $2.50 = $12.50
- 총 월 비용: $212.50
자주 발생하는 오류와 해결책
오류 1: "Connection timeout" 또는 "API request failed"
# 문제: HolySheep API 연결 실패
원인: 잘못된 base_url 또는 네트워크 문제
❌ 잘못된 코드
client = OpenAI(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.openai.com/v1" # 오류: 원본 URL 사용
)
✅ 올바른 코드
client = OpenAI(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.holysheep.ai/v1" # HolySheep URL 사용
)
재시도 로직 추가
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10))
def create_embedding_with_retry(text: str):
return client.embeddings.create(
model="text-embedding-3-small",
input=text
)
오류 2: "Invalid API key" 또는 "Authentication failed"
# 문제: API 키 인증 실패
원인: 잘못된 API 키 또는 환경 변수 미설정
✅ 올바른 환경 변수 설정 (.env 파일)
HOLYSHEEP_API_KEY=YOUR_ACTUAL_API_KEY
Python에서 올바르게 로드
import os
from dotenv import load_dotenv
load_dotenv() # .env 파일 로드
client = OpenAI(
api_key=os.getenv("HOLYSHEEP_API_KEY"),
base_url="https://api.holysheep.ai/v1"
)
API 키 유효성 검사
if not os.getenv("HOLYSHEEP_API_KEY"):
raise ValueError("HOLYSHEEP_API_KEY가 설정되지 않았습니다.")
키 형식 검증 (sk-로 시작하는지 확인)
api_key = os.getenv("HOLYSHEEP_API_KEY")
if not api_key.startswith("sk-"):
print("경고: API 키 형식이 올바르지 않을 수 있습니다.")
오류 3: 임베딩 차원 불일치 (Embedding dimension mismatch)
# 문제: 벡터 차원이 데이터베이스 설정과 불일치
원인: 다른 임베딩 모델 사용 또는 DB 설정 오류
✅ 차원 확인 후 올바른 설정 적용
EMBEDDING_MODEL = "text-embedding-3-small" # 1536 차원
EMBEDDING_MODEL = "text-embedding-3-large" # 3072 차원
def get_embedding_dimension(model: str) -> int:
"""모델별 차원 반환"""
dimensions = {
"text-embedding-3-small": 1536,
"text-embedding-3-large": 3072,
"text-embedding-ada-002": 1536
}
return dimensions.get(model, 1536)
Qdrant 컬렉션 생성 시 올바른 차원 설정
dimension = get_embedding_dimension(EMBEDDING_MODEL)
client.recreate_collection(
collection_name="documents",
vectors_config=VectorParams(size=dimension, distance=Distance.COSINE)
)
배치 임베딩 시 모든 결과 차원 검증
response = client.embeddings.create(
model=EMBEDDING_MODEL,
input=texts
)
for item in response.data:
embedding = item.embedding
assert len(embedding) == dimension, f"차원 불일치: {len(embedding)} != {dimension}"
오류 4: Rate Limit 초과
# 문제: API 요청 제한 초과
원인: 과도한 요청 또는 토큰 제한
✅ Rate Limit 핸들링 및 백오프
import time
from openai import RateLimitError
def create_embeddings_with_rate_limit(texts: list[str], batch_size: int = 100):
"""배치 처리 및 Rate Limit 핸들링"""
all_embeddings = []
for i in range(0, len(texts), batch_size):
batch = texts[i:i + batch_size]
max_retries = 3
for attempt in range(max_retries):
try:
response = client.embeddings.create(
model="text-embedding-3-small",
input=batch
)
all_embeddings.extend([item.embedding for item in response.data])
break
except RateLimitError:
wait_time = (2 ** attempt) * 1.5 # 지수 백오프
print(f"Rate Limit 초과. {wait_time}초 후 재시도...")
time.sleep(wait_time)
# 요청 간 딜레이 (Rate Limit 방지)
time.sleep(0.5)
return all_embeddings
롤백 계획
마이그레이션 중 문제 발생 시 즉시 롤백할 수 있는 준비가 필수입니다:
- 구성 파일 백업: 기존 API 설정을 별도 파일로 저장
- 환경 변수 기반 스위칭:
USE_HOLYSHEEP=false로 설정 시 즉시 원복 - 카나리 배포 모니터링: Prometheus/Grafana로 지표 실시간 추적
- 자동 롤백 트리거: 오류율 5% 이상 시 자동 이전
# 롤백 예시 코드
import os
def get_client():
"""환경에 따른 클라이언트 반환"""
use_holysheep = os.getenv("USE_HOLYSHEEP", "true").lower() == "true"
if use_holysheep:
return OpenAI(
api_key=os.getenv("HOLYSHEEP_API_KEY"),
base_url="https://api.holysheep.ai/v1"
)
else:
# 롤백: 원본 OpenAI API 사용
return OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
왜 HolySheep AI를 선택해야 하나
저는 실제 프로젝트에서 HolySheep AI를 도입한 후 여러 가지 이점을 체감했습니다:
- 로컬 결제 지원: 해외 신용카드 없이도 원활하게 API를 사용할 수 있어 팀의 진입 장벽이 크게 낮아졌습니다.특히 국내 스타트업이나 SMB 팀에게 큰 도움이 됩니다.
- 단일 API 키로 다중 모델 통합: GPT-4.1, Claude, Gemini, DeepSeek 등을 하나의 엔드포인트에서 관리할 수 있어 코드의 일관성과 유지보수성이 크게 향상되었습니다.
- 비용 최적화: Gemini 2.5 Flash $2.50/MTok와 DeepSeek V3.2 $0.42/MTok의 경쟁력 있는 가격으로 대규모 프로덕션 환경에서도 비용을 효과적으로 관리할 수 있습니다.
- OpenAI 호환 API: 기존 OpenAI SDK를 그대로 사용할 수 있어 마이그레이션 시간이 최소화되었습니다.실제로 3일 수준의 마이그레이션을 1일 만에 완료했습니다.
- 신속한 지원: 기술 문서가 잘 정리되어 있고, 개발자 친화적인 인터페이스를 제공합니다.
결론 및 구매 권고
벡터 데이터베이스와 임베딩 모델 최적화는 현대 AI 시스템의 핵심 인프라입니다.HolySheep AI는:
- 경쟁력 있는 임베딩 가격 ($0.02/MTok)
- 다중 모델 통합 관리
- 로컬 결제 편의성
- 간편한 마이그레이션
을 제공하여 RAG 시스템 구축 및 운영에 최적화된 선택지입니다.특히 다중 AI 모델을 활용하는 하이브리드 검색 시스템을 구축하거나 비용 최적화가 필요한 팀에게 HolySheep AI는 강력한 대안이 될 것입니다.
지금 바로 시작하면 무료 크레딧을 받을 수 있어 리스크 없이 체험해볼 수 있습니다.저의 경우 프로덕션 환경에서 3개월간 안정적으로 운영하며 현재 월간 비용이 기존 대비 30% 절감되었습니다.
👉 지금 HolySheep AI에 가입하고 무료 크레딧 받기
※ 본 글은 HolySheep AI 공식 기술 블로그입니다.가격 및 서비스 정보는 최신화를 위해 공식 웹사이트를 참고하세요.