myproject/
├── manage.py
├── myproject/
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── information_registration/
│ ├── domain/
│ │ ├── models.py
│ │ ├── value_objects.py
│ │ └── services.py
│ ├── application/
│ │ ├── use_cases.py
│ │ └── admin_use_cases.py
│ ├── infrastructure/
│ │ ├── repositories.py
│ │ └── serializers.py
│ ├── presentation/
│ │ ├── views.py
│ │ ├── admin_views.py
│ │ └── urls.py
│ └── admin.py
├── information_query/
│ ├── ... (비슷한 구조)
├── image_management/
│ ├── ... (비슷한 구조)
├── shared_kernel/
│ ├── domain/
│ │ └── base_models.py
│ ├── utils/
│ │ ├── online_offline_switch.py
│ │ └── data_sync.py
│ ├── middleware/
│ │ └── mode_detector.py
│ └── decorators/
│ └── mode_specific.py
├── client/
│ ├── offline_handler.py
│ └── local_storage.py
├── server/
│ ├── online_handler.py
│ └── central_storage.py
└── api/
├── urls.py
└── views.py
- 각 도메인(정보 등록, 정보 조회, 이미지 관리)에 어드민 기능 추가:
- admin_use_cases.py: 어드민 특화 유스케이스
- admin_views.py: 어드민 API 뷰
- admin.py: 장고 기본 어드민 인터페이스 설정
- shared_kernel에 모드 관련 기능 강화:
- online_offline_switch.py: 모드 전환 로직
- mode_detector.py: 현재 실행 모드 감지
- mode_specific.py: 모드에 따라 다르게 동작하는 데코레이터
- client와 server 분리:
- client/offline_handler.py: 오프라인 모드에서의 처리 로직
- server/online_handler.py: 온라인 모드에서의 처리 로직
기본 동작 룰
- 모드 감지:
- shared_kernel/middleware/mode_detector.py가 현재 온/오프라인 상태를 체크.
- 요청 처리:
- API 요청이 들어오면 mode_specific 데코레이터가 현재 모드에 따라 적절한 핸들러로 라우팅.
- 온라인 모드: server/online_handler.py가 서버에 기능 위임.
- 오프라인 모드: client/offline_handler.py가 클라이언트가 서비스 처리후 로컬 데이터 저장.
- 어드민 기능:
- 각 도메인의 admin_views.py에서 어드민 기능 제공.
- 온라인 모드: 서버의 어드민 기능 사용
- 오프라인 모드: 로컬에서 제한된 어드민 기능 제공
- 데이터 동기화:
- 온라인으로 전환 시 shared_kernel/utils/data_sync.py가 로컬 데이터를 서버와 동기화 후 삭제.
레퍼런스