블랙보드 패턴은 다양한 독립 모듈(컴포넌트)이 공유 데이터 저장소(블랙보드)를 통해 협력하여 문제를 해결하는 아키텍처 패턴이다.
주로 복잡한 문제를 해결하기 위해 인공지능(AI), 음성 인식, 패턴 인식 등과 같은 분야에서 사용된다.
블랙보드 패턴은 다음과 같은 상황에서 유용하다:
음성 인식 시스템에서는 음성 데이터를 분석하기 위해 여러 모듈이 단계별로 작업을 수행한다.
블랙보드 패턴은 이 과정에서 각 모듈 간의 데이터 공유와 협업을 지원한다.
블랙보드 패턴은 다음 세 가지 주요 컴포넌트로 구성된다:
[Knowledge Source 1] [Knowledge Source 2]
\ /
--------[Blackboard]--------
|
[Control Component]
아래는 블랙보드 패턴을 활용해 간단한 데이터 분석 작업을 구현한 Python 코드이다.
class Blackboard:
def __init__(self):
self.data = {} # 공유 데이터 저장소
def read(self, key):
return self.data.get(key)
def write(self, key, value):
self.data[key] = value
def display(self):
print("Blackboard Data:", self.data)
class KnowledgeSource:
def analyze(self, blackboard):
raise NotImplementedError("Subclass must implement analyze method")
class DataNormalizer(KnowledgeSource):
def analyze(self, blackboard):
raw_data = blackboard.read("raw_data")
if raw_data:
normalized_data = [x / max(raw_data) for x in raw_data]
blackboard.write("normalized_data", normalized_data)
print("DataNormalizer: 데이터 정규화 완료")
class DataAnalyzer(KnowledgeSource):
def analyze(self, blackboard):
normalized_data = blackboard.read("normalized_data")
if normalized_data:
analysis_result = sum(normalized_data) / len(normalized_data)
blackboard.write("analysis_result", analysis_result)
print("DataAnalyzer: 데이터 분석 완료")
class ControlComponent:
def __init__(self, blackboard, knowledge_sources):
self.blackboard = blackboard
self.knowledge_sources = knowledge_sources
def run(self):
for ks in self.knowledge_sources:
ks.analyze(self.blackboard)
self.blackboard.display()
# 초기 데이터
blackboard = Blackboard()
blackboard.write("raw_data", [10, 20, 30, 40, 50])
# 지식 소스 설정
knowledge_sources = [DataNormalizer(), DataAnalyzer()]
# 제어 컴포넌트 실행
controller = ControlComponent(blackboard, knowledge_sources)
controller.run()
DataNormalizer: 데이터 정규화 완료
DataAnalyzer: 데이터 분석 완료
Blackboard Data: {'raw_data': [10, 20, 30, 40, 50], 'normalized_data': [0.2, 0.4, 0.6, 0.8, 1.0], 'analysis_result': 0.6}
블랙보드 패턴은 복잡한 문제 해결을 위해 각기 다른 모듈이 협력해야 할 때 적합한 패턴이다.
특히 AI와 패턴 인식 시스템에서 매우 유용하게 활용된다.
아래 글에서 다른 아키텍쳐 패턴들을 확인할 수 있다.
아키텍처 패턴 모음