패턴
- 구현, 설계하는 도구 (업계에서 통용되는 언어)
- 패턴은
- Interface + Concrete class 형태로 구성되어 있음
- 이런 패턴들이 여러가지가 있어 -> 생성시 사용되면 Factory pattern 등
- 여러개의 패턴이 뭉쳐서 움직인다
- 팀 내 의사 소통의 수단이 되기 위해선, 팀원들의 이해가 필요한다
- 패턴의 남용
- 리소스 제약이 심한 시스템에 유연성 추가하기?
-> 성능상에 문제가 발생하는 경우 - 패턴의 Side-effect가 굉장히 크기 때문에 이에 대한 부분을 확인을 해야 함
- 리소스 제약이 심한 시스템에 유연성 추가하기?
- Interface + Concrete class 형태로 구성되어 있음
- 추천
- 알기쉬운 디자인 패턴
- Head First Design Pattern
- Java 언어로 배우는 디자인 패턴 입문
- POSA 1
- 거대한 구조를 잡을 때 쓰는 패턴
- Layer, Pipe & Filter, Broker, Master Slave, Client-Dispatcher, Forwarder-Receiver, MVC
- POSA 2 **
- 서버, 네트워크를 만드는 패턴
- POSA 3
- 리소스를 관리하는 패턴
- Patterns for fault tolerent software
POSA 1 - 아키텍처 패턴 (아키텍처를 다루는 패턴 / 현업에서 사용중인 패턴의 동작방식을 이해가 필요)
- Layer (의존성관리)
- Dependency를 잘 관리하기 위해서 만들었다
하나의 Layer가 변경이 되면 그 상위 Layer에서만 영향을 흡수한다 - 과도한 계층 통과로 성능 저하 발생
- Dependency를 잘 관리하기 위해서 만들었다
- Pipe & Filter (유연한 Pipe-Filetr 조립)
- 각 필터(Layer)를 거쳐감에 따라 데이터를 삽입, 변경, 조작 함으로써 원하는 형태대로 데이터 변경됨
- 가장 느린 필터로 인해 전체 성능이 저하될 수 있음
- Broker
- 클라이언 - 서버와 언어/플랫폼이 다른 경우 통신방법에 대한 패턴
-> 중간의 데이터 형태로 변화되어서 전송되어야 함 - 이런 애들이 있어
- COBA - 너무 느려서 안쓰다가 Apache Trift에서 엄청 개선됨
- Apache Trift
- Google protocol buffers
- Embeded에서도 많이 사용함
- Android에서 Binder를 통해서 구동되도록
- 서로 다른 언어, 플랫폼에도 통신 가능
- 데이터 마샬링/언마샬링 고려 필요
- 클라이언 - 서버와 언어/플랫폼이 다른 경우 통신방법에 대한 패턴
- Master Slave
- 요즘은 Primary-Secondary
- Slave 교체나 확장이 가능 / 효율성 향상
- 종속성이 강하고, FailOver Engineering 준비 필요
- 예) ProxySQL Cluster
- Client-Dispatcher
- 서버에 Dispatcher 를 구성하는 패턴 (프로토콜 추가/삭제/변경을 쉽게 할 수 있는 패턴)
- Reactor/Proactor/Con-Acc 패턴으로 진화
- Forwarder-Receiver (P2P 패턴)
- Sersor
- Publisher-Subscribe
- Observer 패턴과 동일
- 변경이 되면 등록된 주소(Reference list)로 Client로 쏴주는 패턴
- 계속 Polling해서 묻는 것보다 의존관계를 역전시켜서 트래픽 축소
- 하나의 주제가 아닌 다양한 주제를 다루거나, 서브셋을 다룰때 비효율적인 이슈 발생
-> Event Channel로 진화 (Filter를 적용)
- MVC
- View - Model - Control
- DB/Proxy 등의 의존성을 분리할때 주로 사용
- Presentation-Abstraction-Control
- 다루고자 하는 Context와 관련된 UI로 변경할 때 사용하는 패턴
- 다루는 Context에 따라서 능동적인 UI 제공
- 제어하는 컴포넌트의 복잡도가 증가
- Reflection
- Runtime시에 객체를 생성하는 패턴
- SW의 시스템 변경이 쉽고 인터페이스가 동일하다는 전제가 핵심
- 늦은 속도 문제 -> 현업에서는 Reflection 보다 BCI (Byte Code Instrumentation) 선호
- Counted Pointer
- Reference Count
- 공유하고 있는 자원을 언제 릴리즈 할 것인지? 자원을 사용하는 수를 카운트하여 0이 될때 내리자
- 참조 카운트이며 자원의 적절한 해제 시점을 알려줌
- Theread 환경에서 Counted point 사용시 주의 필요
- Blackboard
- 해결 전략이 알여지지 않은 여러 모듈들을 매칭하여 해결하는 패턴
- 인공지는 후보모델을 여러개 돌리는 경우
- 예를 들어 Exception handler 같은 애들
- 정형화 되지 않은 상황에 따라 솔루션이 능동적으로 변경할 때 사용하는 패턴
- Real time solution = 주어진 Dead line에 동작하도록 하는 솔루션 (각 Dead line별 솔루션을 가지고 있어야함)
'Software Architect' 카테고리의 다른 글
[Software Architect] GRASP (0) | 2022.05.13 |
---|---|
[Software Architecture] SOLID (0) | 2022.05.13 |
[Software Architecture] 아키텍처 설계 (0) | 2022.04.05 |
[Software Architecture] Requirement Engineering - 2 (0) | 2022.04.01 |
[Software Architecture] Requirement Engineering - 1 (0) | 2022.03.31 |