이벤트(키보드/마우스 클릭, 스크린 터치 등)가 발생하면 구독 시스템에게 전송하여 이벤트를 처리하는 방식
느슨한 결합을 위해 비동기 방식으로 메시지를 전달
구성 요소: Event Generator(이벤트 생성), Event Channel(이벤트 전달), Event Processing Engine(이벤트 처리)
동작 방식
1. 이벤트 발생
2. 구독한 시스템에 이벤트 전달(구독 시스템: 발생한 이벤트를 처리해야하는 시스템을 말함)
3. 구독한 시스템에서 이벤트 처리
장점
- 시스템간 느슨한 결합
- 확장성, 탄력성이 좋음
단점
- 메시지 브로커(이벤트 전달 매개체)가 다운되면 전체 시스템 다운
모델, 뷰, 컨트롤러로 구성요소를 나누어 역할을 구분한 패턴
모델(Model)
- 데이터 부분을 담당
- 컨트롤러에게 받은 데이터를 가공/저장하는 역할
뷰(View)
- 화면을 담당
- 컨트롤러를 통해 받은 데이터를 시각적으로 표현하는 역할
컨트롤러(Controller)
- 모델과 뷰 사이를 제어하는 역할(중재자)
- 즉, 데이터를 전달하는 역할
동작 방식
1. 유저가 특정 데이터 요청
2. 컨트롤러는 해당 요청을 모델에게 전달
3. 모델은 로직을 통해 데이터를 가공하고 결과를 반환
4. 반환된 데이터를 컨트롤러가 뷰로 전달
5. 뷰에서 해당 데이터를 웹페이지에 렌더링
장점
- 각 역할로 분리되어 있기 때문에 결합도가 낮음
- 코드의 재사용성/확장성 향상
단점
- 대규모 소프트웨어의 경우, 컨트롤러의 부담이 높아져 재사용성/확장성/유지보수성이 저하될 수 있음 (Massive-View-Controller)
소프트웨어 아키텍처 패턴은 매우 다양하며 요구사항과 개발 목적/특성 등에 따라 적절한 패턴 적용이 중요하다고 생각된다.
또한, 적용할/적용될 패턴에 대해서 공부하고 깊은 이해를 통해 적절한 개발/유지보수 등을 하는 것이 성능 향상에 도움이 될 것이라고 본다.
그리고.. 글을 다쓰고 포스팅을 하려던 순간.. 글이 다 사라지는 매직을 경험하였다..
이후 다시 쓰다보니 이전보다 정성스럽게는 쓰지못한거 같다..
하지만 다시한번 내용을 작성하면서 복기할 수 있었다고 위안을 삼는다.. ㅠ