Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,13 @@ class Settings(BaseSettings):
azure_container_name: str = "simulator-data"
azure_press_defect_path: str = "press-defect"

# 모델 서비스 설정
# 🆕 Spring Boot 서비스 설정 (NEW!)
spring_boot_service_url: str = os.getenv("SPRING_BOOT_SERVICE_URL", "http://localhost:8092")
spring_boot_raw_data_endpoint: str = "/api/press-defect/raw-data"
spring_boot_health_endpoint: str = "/api/press-defect/health"
spring_boot_timeout: int = 300 # 5분

# 모델 서비스 설정 (기존 - 백업용으로 유지)
model_service_url: str = os.getenv("MODEL_SERVICE_URL", "http://127.0.0.1:8000")
model_service_predict_endpoint: str = "/predict/inspection"
model_service_health_endpoint: str = "/health"
Expand Down Expand Up @@ -49,12 +55,16 @@ class Settings(BaseSettings):
successful_simulations: int = 0
failed_simulations: int = 0

# 🆕 아키텍처 모드 설정 (NEW!)
architecture_mode: str = os.getenv("ARCHITECTURE_MODE", "event_driven") # "direct" or "event_driven"

# 개발/운영 모드
debug_mode: bool = os.getenv("DEBUG", "false").lower() == "true"

class Config:
case_sensitive = False
env_file = ".env"
extra = 'ignore'

# 전역 설정 인스턴스
settings = Settings()
Expand All @@ -73,16 +83,27 @@ def get_settings_summary():
"press_defect_path": settings.azure_press_defect_path,
"connection_configured": bool(settings.azure_connection_string)
},
"spring_boot_service": {
"url": settings.spring_boot_service_url,
"raw_data_endpoint": settings.spring_boot_raw_data_endpoint,
"timeout": settings.spring_boot_timeout,
"enabled": settings.architecture_mode == "event_driven"
},
"model_service": {
"url": settings.model_service_url,
"predict_endpoint": settings.model_service_predict_endpoint,
"timeout": settings.model_service_timeout
"timeout": settings.model_service_timeout,
"enabled": settings.architecture_mode == "direct"
},
"scheduler": {
"interval_seconds": settings.scheduler_interval_seconds,
"max_inspection_count": settings.max_inspection_count,
"enabled": settings.simulation_enabled
},
"architecture": {
"mode": settings.architecture_mode,
"description": "event_driven: Spring Boot + Kafka, direct: FastAPI 직접 호출"
},
"logging": {
"level": settings.log_level,
"directory": settings.log_dir,
Expand All @@ -98,15 +119,21 @@ def validate_settings():
if not settings.azure_connection_string:
errors.append("AZURE_CONNECTION_STRING이 설정되지 않았습니다.")

if not settings.model_service_url:
if settings.architecture_mode == "direct" and not settings.model_service_url:
errors.append("MODEL_SERVICE_URL이 설정되지 않았습니다.")

if settings.architecture_mode == "event_driven" and not settings.spring_boot_service_url:
errors.append("SPRING_BOOT_SERVICE_URL이 설정되지 않았습니다.")

if settings.scheduler_interval_seconds < 10:
errors.append("스케줄러 간격은 최소 10초 이상이어야 합니다.")

if settings.max_inspection_count < 1:
errors.append("inspection 개수는 최소 1개 이상이어야 합니다.")

if settings.architecture_mode not in ["direct", "event_driven"]:
errors.append("ARCHITECTURE_MODE는 'direct' 또는 'event_driven'이어야 합니다.")

return errors

# 설정 업데이트 함수들
Expand Down Expand Up @@ -138,5 +165,6 @@ def get_simulation_stats():
"failed_simulations": settings.failed_simulations,
"success_rate": round(success_rate, 2),
"current_inspection_id": settings.current_inspection_id,
"simulation_enabled": settings.simulation_enabled
"simulation_enabled": settings.simulation_enabled,
"architecture_mode": settings.architecture_mode
}
15 changes: 8 additions & 7 deletions services/press-defect-data-simulator-service/app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
import signal
import sys

from config.settings import settings, validate_settings, get_settings_summary
from utils.logger import simulator_logger
from services.azure_storage import azure_storage_service
from services.model_client import model_service_client
from services.scheduler_service import scheduler_service
from routers import connection_test_router, simulator_router
from app.config.settings import settings, validate_settings, get_settings_summary
from app.utils.logger import simulator_logger
from app.services.azure_storage import azure_storage_service
from app.services.model_client import model_service_client
from app.services.scheduler_service import scheduler_service
from app.routers import connection_test_router, simulator_router

# 애플리케이션 생명주기 관리
@asynccontextmanager
Expand Down Expand Up @@ -49,7 +49,8 @@ async def lifespan(app: FastAPI):
simulator_logger.logger.info("🔍 외부 서비스 연결 확인 중...")

# Azure Storage 연결 테스트
azure_available = await azure_storage_service.test_connection()
azure_available = await azure_storage_service.initialize() # 먼저 초기화
azure_available = await azure_storage_service.test_connection() # 그다음 연결 테스트
if azure_available:
simulator_logger.logger.info("✅ Azure Storage 연결 확인 완료")
else:
Expand Down
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
from typing import Dict, Any
import asyncio

from services.azure_storage import azure_storage_service
from services.model_client import model_service_client
from utils.logger import simulator_logger
from app.services.azure_storage import azure_storage_service
from app.services.model_client import model_service_client
from app.utils.logger import simulator_logger

router = APIRouter(prefix="/connection", tags=["Connection Test"])

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
from typing import Dict, Any, Optional, List
from pydantic import BaseModel

from services.scheduler_service import scheduler_service
from config.settings import get_simulation_stats, get_settings_summary
from utils.logger import simulator_logger
from app.services.scheduler_service import scheduler_service
from app.config.settings import get_simulation_stats, get_settings_summary
from app.utils.logger import simulator_logger

router = APIRouter(prefix="/simulator", tags=["Simulator Control"])

Expand Down
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
import asyncio
from PIL import Image

from config.settings import settings
from utils.logger import simulator_logger
from app.config.settings import settings
from app.utils.logger import simulator_logger

class AzureStorageService:
"""Azure Blob Storage 서비스"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
from typing import Dict, List, Optional, Tuple, Any
import json

from config.settings import settings
from utils.logger import simulator_logger
from app.config.settings import settings
from app.utils.logger import simulator_logger

class ModelServiceClient:
"""FastAPI 모델 서비스 클라이언트"""
Expand Down
Loading