모드감지

# shared_kernel/middleware/mode_detector.py

import threading

class ModeDetector:
    _mode = threading.local()

    @classmethod
    def set_mode(cls, is_online):
        cls._mode.is_online = is_online

    @classmethod
    def is_online(cls):
        return getattr(cls._mode, 'is_online', False)

class ModeDetectorMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 여기서 온라인 상태를 확인하는 로직을 구현
        # 예를 들어, 서버와의 연결 상태를 체크
        is_online = self.check_online_status()
        ModeDetector.set_mode(is_online)

        response = self.get_response(request)
        return response

    def check_online_status(self):
        # 실제 구현에서는 서버와의 연결을 확인하는 로직 필요
        return True  # 예시로 항상 온라인이라고 가정

  1. ModeDetector는 현재 모드(온라인/오프라인)를 저장하고 확인하는 클래스.
  2. ModeDetectorMiddleware는 각 요청마다 온라인 상태를 확인하고 설정.
  3. threading.local()을 사용해서 각 요청마다 독립적으로 모드를 관리.

요청처리

# shared_kernel/decorators/mode_specific.py

from functools import wraps
from shared_kernel.middleware.mode_detector import ModeDetector

def mode_specific(view_func):
    @wraps(view_func)
    def wrapper(*args, **kwargs):
        if ModeDetector.is_online():
            # 온라인 모드: 서버 로직 사용
            return view_func(*args, **kwargs)
        else:
            # 오프라인 모드: 로컬 로직 사용
            return offline_handler(*args, **kwargs)
    return wrapper

def offline_handler(*args, **kwargs):
    # 오프라인 모드에서의 처리 로직
    # 예: 로컬 데이터베이스 사용, 제한된 기능 제공 등
    pass

  1. mode_specific 데코레이터는 뷰 함수를 래핑.
  2. 현재 모드를 확인해서 온라인이면 기능 위임 함수를 실행하고, 오프라인이면 offline_handler를 실행.
# information_registration/presentation/views.py

from shared_kernel.decorators.mode_specific import mode_specific
from django.http import JsonResponse

@mode_specific
def register_information(request):
    # 온라인 모드에서의 정보 등록 로직
    # 이 함수는 온라인 모드에서만 실행됨
    data = request.POST.get('data')
    # 데이터 처리 로직...
    return JsonResponse({"status": "success", "message": "정보가 등록되었습니다."})

# offline_handler 함수는 shared_kernel/decorators/mode_specific.py에 정의되어 있음
# 오프라인 모드에서는 이 함수가 대신 실행됨

  1. 각 뷰 함수에 @mode_specific 데코레이터를 붙여서 사용.
  2. 온라인 모드에서는 서버에 기능을 위임해 서버에서 응답값을 받음.
  3. 오프라인 모드에서는 offline_handler가 대신 실행되어 독립적으로 구동.