1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
| # 42jerrykim.github.io에서 더 많은 정보를 확인 할 수 있다
from abc import ABC, abstractmethod
from enum import Enum
from typing import Optional
class Priority(Enum):
LOW = 1 # 일반 문의
MEDIUM = 2 # 기술 지원
HIGH = 3 # 긴급 장애
CRITICAL = 4 # 보안 이슈
class SupportRequest:
def __init__(self, title: str, priority: Priority, description: str):
self.title = title
self.priority = priority
self.description = description
# Handler 추상 클래스
class SupportHandler(ABC):
def __init__(self):
self._next_handler: Optional[SupportHandler] = None
def set_next(self, handler: 'SupportHandler') -> 'SupportHandler':
self._next_handler = handler
return handler
def handle(self, request: SupportRequest) -> str:
if self.can_handle(request):
return self.process(request)
elif self._next_handler:
return self._next_handler.handle(request)
else:
return f"⚠ 요청을 처리할 수 있는 담당자가 없습니다: {request.title}"
@abstractmethod
def can_handle(self, request: SupportRequest) -> bool:
pass
@abstractmethod
def process(self, request: SupportRequest) -> str:
pass
# ConcreteHandler - 일반 상담원
class FrontDeskSupport(SupportHandler):
def can_handle(self, request: SupportRequest) -> bool:
return request.priority == Priority.LOW
def process(self, request: SupportRequest) -> str:
return f"📞 [일반 상담원] '{request.title}' 처리 완료 - FAQ 안내"
# ConcreteHandler - 기술 지원팀
class TechSupport(SupportHandler):
def can_handle(self, request: SupportRequest) -> bool:
return request.priority == Priority.MEDIUM
def process(self, request: SupportRequest) -> str:
return f"🔧 [기술 지원팀] '{request.title}' 처리 완료 - 원격 지원"
# ConcreteHandler - 시스템 엔지니어
class SystemEngineer(SupportHandler):
def can_handle(self, request: SupportRequest) -> bool:
return request.priority == Priority.HIGH
def process(self, request: SupportRequest) -> str:
return f"⚙️ [시스템 엔지니어] '{request.title}' 긴급 대응 완료"
# ConcreteHandler - 보안 전문가
class SecurityExpert(SupportHandler):
def can_handle(self, request: SupportRequest) -> bool:
return request.priority == Priority.CRITICAL
def process(self, request: SupportRequest) -> str:
return f"🔒 [보안 전문가] '{request.title}' 보안 조치 완료"
# 사용 예제
if __name__ == "__main__":
# 체인 구성
front_desk = FrontDeskSupport()
tech_support = TechSupport()
engineer = SystemEngineer()
security = SecurityExpert()
front_desk.set_next(tech_support).set_next(engineer).set_next(security)
# 다양한 요청 처리
requests = [
SupportRequest("비밀번호 재설정 방법", Priority.LOW, "비밀번호 변경"),
SupportRequest("프린터 연결 오류", Priority.MEDIUM, "네트워크 프린터"),
SupportRequest("서버 다운", Priority.HIGH, "메인 서버 응답 없음"),
SupportRequest("데이터 유출 의심", Priority.CRITICAL, "비정상 접근 감지"),
]
print("=== 기술 지원 요청 처리 ===\n")
for req in requests:
result = front_desk.handle(req)
print(f"{result}\n")
|