이벤트 기반 접근 방식

이벤트 기반 접근 방식은 소프트웨어 아키텍처에 대해 생각하는 방식입니다. 절차 및 기능 패러다임을 생각하면서 상당한 거래 응용 프로그램을 개발하고 유지하는 것은 비효율적이며 심지어 불가능할 수도 있습니다.



우리는 거래 소프트웨어를 현실 세계의 임의의 사건에 반응하는 시스템으로 생각할 수 있습니다. 시장에서 어떤 일이 발생합니다. 가격 변동, 이벤트입니다. 시스템 내에서 이를 처리하고 다른 이벤트, 예를 들어 조건이 충족되는 주문을 생성할 수 있습니다. 필요에 따라 로깅 또는 알림 이벤트를 생성할 수도 있습니다.

이벤트 기반 접근 방식은 시스템 내부에서 일어나는 일을 더 잘 이해하고 제어를 유지하며 보다 명확하고 효율적인 소프트웨어 아키텍처를 지원하는 데 도움이 됩니다.

이벤트는 Google 아키텍처의 기본 요소입니다. 이벤트를 데이터 클래스 또는 데이터 구조로 생각할 수 있습니다. 이벤트 유형, 타임스탬프, 특정 데이터 등과 같은 많은 정보를 포함할 수 있습니다.

예시:



class Event(object):
    #base class
    pass





class AccountUpdateEvent(Event):
    def __init__(self, timestamp, username, total):
        self.type = 'ACCOUNT_UPDATE'
        self.timestamp = timestamp
        self.username = username
        self.total = float(total)


이제 100줄 미만의 Python 코드로 이벤트를 생성하고 처리할 수 있는 간단한 애플리케이션을 빌드할 것입니다!

첫 번째 모듈은 API를 호출하고 이벤트를 생성합니다.

예제 코드(전체 클래스는 my GitHub repo에서 사용 가능):



class GetAccountData:
    def create_event(self, timestamp, username, total):
        self.events.put(AccountUpdateEvent(timestamp=timestamp, username=username, total=total))



두 번째 모듈은 이벤트를 처리합니다.

예제 코드(전체 클래스는 my GitHub repo에서 사용 가능):



class ProcessAccountData:
    def update_account_data(self, event):
        print('Account update received at: ', event.timestamp, 'Username: ', event.username, 'Total balance: ', event.total)


그리고 마지막으로 우리의 앱입니다. 여기에는 GetAccountData 및 ProcessAccountData와 이벤트 대기열이 모두 포함됩니다.

예제 코드(전체 클래스는 my GitHub repo에서 사용 가능):



class App:
    def __init__(self):
        self.events = Queue()
        self.get_data_account = GetAccountData(self.events)
        self.process_data_account = ProcessAccountData()



이 앱에는 이벤트를 처리하는 루프가 포함되어 있습니다. 새 이벤트가 대기열에 있으면 이를 꺼내서 처리합니다.

예제 코드(전체 클래스는 my GitHub repo에서 사용 가능):



def event_loop(self):
       while True:
            try:
                event = self.events.get(False)
            except Exception as e:
                time.sleep(1)
                break

            else:
                try:
                    if event is not None:
                        if event.type == 'ACCOUNT_UPDATE':
                            self.process_data_account.update_account_data(event)

                except Exception as e:
                    print('event_loop error:', e)




이것은 간단한 이벤트 기반 애플리케이션의 예입니다. my GitHub repo에서 소스 코드를 찾을 수 있습니다.

좋은 웹페이지 즐겨찾기