PYTHON · 디자인패턴
플러그인 아키텍처
플러그인 시스템으로 애플리케이션을 확장 가능하게 설계합니다.
디자인패턴고급plugin플러그인확장아키텍처
핵심 설명
플러그인 시스템으로 애플리케이션을 확장 가능하게 설계합니다.
Python code
from abc import ABC, abstractmethod
from typing import Type
class Plugin(ABC):
@property
@abstractmethod
def name(self) -> str: ...
@abstractmethod
def execute(self, data: dict) -> dict: ...
class PluginManager:
def __init__(self):
self._plugins: dict[str, Plugin] = {}
def register(self, plugin: Plugin):
self._plugins[plugin.name] = plugin
print(f" 플러그인 등록: {plugin.name}")
def unregister(self, name: str):
self._plugins.pop(name, None)
def execute_all(self, data: dict) -> dict:
result = data.copy()
for name, plugin in self._plugins.items():
result = plugin.execute(result)
return result
def list_plugins(self) -> list[str]:
return list(self._plugins.keys())
# 플러그인 구현
class UpperCasePlugin(Plugin):
@property
def name(self): return "uppercase"
def execute(self, data):
if "text" in data:
data["text"] = data["text"].upper()
return data
class TimestampPlugin(Plugin):
@property
def name(self): return "timestamp"
def execute(self, data):
from datetime import datetime
data["processed_at"] = datetime.now().isoformat()
return data
class ValidatorPlugin(Plugin):
@property
def name(self): return "validator"
def execute(self, data):
data["is_valid"] = bool(data.get("text"))
return data
# 사용
manager = PluginManager()
manager.register(ValidatorPlugin())
manager.register(UpperCasePlugin())
manager.register(TimestampPlugin())
result = manager.execute_all({"text": "hello world"})
print(f"결과: {result}")
print(f"플러그인 목록: {manager.list_plugins()}")학습 팁
importlib과 entry_points를 활용하면 외부 패키지에서 플러그인을 자동 발견할 수 있습니다.
주의할 점
플러그인 실행 순서에 의존하면 취약합니다. 명시적 우선순위 시스템을 구현하세요.
자주 묻는 질문
플러그인 아키텍처란 무엇인가요?
플러그인 시스템으로 애플리케이션을 확장 가능하게 설계합니다.
플러그인 아키텍처 학습 시 주의할 점은 무엇인가요?
플러그인 실행 순서에 의존하면 취약합니다. 명시적 우선순위 시스템을 구현하세요.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.