문제 › 099

099. 이벤트 버스

Hard 바이브코딩 MCPEventPattern
문제 설명
[문제] 발행-구독(Pub-Sub) 방식의 이벤트 버스 MCP 서버를 구현한다. 이벤트 버스란 "누가 어떤 이벤트에 관심 있는지"를 등록해 두고(구독), 그 이벤트가 발생하면(발행) 관심 있는 모두에게 알림을 보내는 중개 장치다. 예를 들어 구독자 s1이 "e" 이벤트를 구독해 두면, 누군가 "e"를 발행할 때 s1이 알림을 받는다. 서버는 이벤트 이름 -> 구독자 ID 집합 매핑을 유지한다. 같은 구독자가 같은 이벤트를 여러 번 구독해도 한 번만 등록된다(집합이므로 중복 없음). 서버 시작 시 매핑은 비어 있다. [구현할 함수] - subscribe(event_name: str, subscriber_id: str) -> int 구독자를 해당 이벤트에 등록한다. 등록 후 그 이벤트의 구독자 수를 반환한다. - publish(event_name: str, data: dict) -> int 이벤트를 발행하여 알림을 받은(=그 이벤트의 구독자) 수를 반환한다. 구독자가 없거나 존재하지 않는 이벤트면 0. - unsubscribe(event_name: str, subscriber_id: str) -> bool 해당 구독을 취소한다. 실제로 구독 중이던 것을 취소했으면 True, 그런 구독이 없었으면 False. - get_subscribers(event_name: str) -> 문자열 배열 해당 이벤트의 구독자 ID 배열을 반환한다. 없으면 빈 배열. [입력·상태] 이벤트 이름·구독자 ID는 문자열, data는 임의의 키-값 객체(내용은 사용하지 않는다)다. 매핑은 호출 간에 유지된다. [제약] - 구독한 적 없는 (이벤트, 구독자)에 대한 unsubscribe는 False를 반환한다. - 구독자가 없는 이벤트의 publish·get_subscribers는 각각 0·빈 배열을 반환한다. [예시] subscribe("e", "s1"), get_subscribers("e") -> ["s1"] subscribe("e", "s1"), publish("e", {}) -> 1 subscribe("e", "s1"), unsubscribe("e", "s1") -> true (빈 상태) publish("e", {}) -> 0 (빈 상태) unsubscribe("e", "s1") -> false (빈 상태) get_subscribers("e") -> []
로그인하고 풀기 AI가 자동 채점하고 즉시 정답·해설을 알려줘요. 무료.