2019. 7. 31. 17:11 외국 블로그 번역
10가지의 일반적인 소프트웨어 구조적인 패턴
짧은 영어로 번역하는것이라 오역, 의역이 있을수 있습니다.
좀더 정확한 정보를 얻거나 실력을 향상시키실 분들은 해당 블로그에 직접 가셔서 여러번 읽어보시길 바랍니다.
출처 : https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013
출처 2 : https://mingrammer.com/translation-10-common-software-architectural-patterns-in-a-nutshell/
-> 다른분이 번역한 포스팅
큰 규모의 시스템을 어떻게 디자인 하는지에 대해서 궁금해 본적이 있는가?
주요 소프트웨어 개발을 시작하기 전에,
우리가 원하는 기능성과 품질 요소를 제공할 수 있는 구조를 선택해서 적용해야 한다.
그렇기 때문에, 우리는 그것들을 적용하기 전에 각기 다른 설계구조에 대해서 이해를 해야 한다.
설계 패턴(architectural Pattern)이란 무엇인가?
위키에 따르면 아래와 같다.
- 설계 패턴이란 일반적으로, 소프트웨어 구조 안의 주어진 문맥속에서 일반적으로 발생하는 문제들에서
다시 사용할 수 있는 패턴들을 뜻한다.
=> 유형화된 해결책들.
이 포스팅에서, 난 아래의 각각의 사용처와 장점을 지닌 10가지 설계구조를 설명할 수 있을것이라고 믿는다.
각 패턴들의 이름은 아래와 같다.
1. 계층화 패턴 [Layered pattern]
2. 클라이언트 - 서버 패턴 [Client-Server pattern]
3. 마스터 - 스렐이브 패턴 [Master-slave pattern]
4. 파이프 - 필터 패턴 [pipe-filter pattern]
5. 브로커 패턴 [Broker pattern]
6. 피어 투 피어 패턴 [Peer-to-peer pattern]
7. 이벤트 버스 패턴 [Event-bus pattern]
8. MVC 패턴 [Model-View-Controller pattern]
9. 블랙 보드 패턴 [Blackboard pattern]
10. 인터프리터 패턴 [Interpreter pattern]
1. 계층화 패턴
이 패턴은 프로그램들의 구조를 서브 Task,각각의 구분된 추상화 레벨들로부터 프로그램을 구분시켜주는 구조이다.
각 계층은 자신의 상위 계층에 서비스를 제공한다.
가장 일반적으로 찾을 수 있는 시스템에서 사용하는 4계층은 아래와 같다.
1. Presentation Layer (또는 UI Layer로 알려짐)
2. Application Layer (또는 Service Layer로 알려짐)
3. Buiseness Layer (또는 Domain Layer로 알려짐)
4. Data Access Layer (또는 Persistence Layer로 알려짐)
계층화 패턴은 일반적인 PC 프로그램 혹은 웹 프로그램에서 주로 사용된다.
2. Client - Server Pattern
이 패턴은 주로 두개의 부분으로 구분 할 수 있는 한개의 서버와 다수의 클라이언트로 구성된다.
서버는 다수의 클라이언트들에게 서비스를 제공한다.
클라이언트는 서버로부터 서비스를 요청하며, 서버는 관련된 서비스를 해당 크라이언트에게 제공한다.
나아가서 서버는 계속 클라이언트의 요청이 있는지 확인한다.
Server - Client 패턴은 Email, 웹 공유 문서 혹은 은행서비스 등의 프로그램에 쓰인다.
3. Master - Slave pattern
이 패턴은 두개의 부분으로 구성된다. 바로 마스터와 슬레이브이다.
마스터는 각각의 슬레이브들(100% 동일한)에게 작업을 분할한다.
그리고 슬레이브는 계산된 최종 결과를 마스터에게 반환한다.
Master-Slave 패턴은 DB 복제에서, 신뢰할 수 있는 마스터 DB, 그리고 그 마스터 DB와 동기화된 슬레이브 DB
에서 사용되며 컴퓨터 시스템에서 bus에 연결된 주변장치 등에서 사용된다.
-> master drive 와 slave drive
4. Pipe - Filter Pattern
이 패턴은 Data의 Stream을 처리하고 진행하는 구조에서 사용될 수 있다.
각각의 진행 단계는 내부에 Filter 구성을 감싸고 있다.
데이터는 Pipe를 지날 때 특정 처리단계를 거치게 되며,해당 pipe는 지연처리 혹은 동기화를 목적으로 사용 될 수 있다.
Pipe-Filter 패턴은 Compiler, 연속적으로 어휘 분석, 변경, 의미 분석 그리고 code 생성을 수행하는 필터에 사용된다.
5. Broker Pattern
이 패턴은 분리된 분산시스템에 사용되는 구조이다. 이 구성들은 각각 다른 원격 서비스 호출에 상호작용을 할수 있다.
브로커는 동등한 구성요소들간의 통신을 조정하는 역할을한다.
서버들은 서버들의 능력(서비스와 특징)을 브로커에게 전파(publish)한다.
클라이언트들은 브로커에게 요청하고, 브로커는 해당 클라이언트에 적용할 수 있는
레지스트리에 등록된 서비스로 redirect한다.
이 패턴은 Apache ActiveMQ, Apache Kafka, RabbitMQ, JBossMessaging 같은 메세지 브로커 프로그램에서 사용된다.
6. Peer-To-Peer Pattern
이 패턴에서는 개개의 구성품들을 Peer라고 한다.
피어들은 기능적으로는 클라이언트이며 다른 피어들로부터 요청을 받는측면에서는 서버라고 할 수 있다.
피어는 서버 혹은 클라이언트처럼 행동할 수 있고 이것은 그때그때 역할이 바뀐다.
Peer-To-Peer 패턴은 네트워크 파일 공유 시스템(Gnutella or G2), 멀티미디어 프로토콜(P2PTV, PDTP)에 사용된다.
7. Event-bus-pattern
이 패턴은 주로 이벤트를 다루며 4개의 주요 구성품을 갖는다.
4개의 주요 구성으로는 이벤트 소스, 이벤트 리스너, 채널, 그리고 이벤트 버스가 있다.
이벤트 소스는 메세지를 이벤트 버스에 속한 개개의 채널에 알리고 이벤트 리스너는 개개의 채널에 대해서 구독을 한다.
리스너는 이전에 구독한 채널을 통해서 전파되는 메세지를 알아차릴 수 있다.
Event-bus-pattern은 안드로이드 개발 및 Noti 서비스에 사용된다.
8. Model-View-Controller Pattern
MVC 패턴으로도 알려진 이 패턴은 프로그램의 상호작용을 3가지 부분으로 나눈 것이다.
Model : 핵심적인 기능, data를 포함한다.
View : 정보를 유저에게 보여준다.(여러개의 View가 존재할 수 있다.)
Controller : 유저로부터의 입력을 다룬다.
이것은 정보가 사용자에게 제공되는 방식과 사용자로부터 받아들여지는 방식에서 정보의 내부적인 표현을 분리하기 위해서 나뉘어진다. 이는 각 구성품들을 분리하며, 코드의 효율적인 재사용을 가능하게 한다.
주요 프로그래밍 언어에서 WWW어플리케이션 구조에 사용한다.
(Redis 그리고 Django등등)
9. Blackboard Pattern
이 패턴은 해결책이 알려지지 않은 문제를 해결하는데 유용합니다.
Blackboard Pattern은 3가지로 구성되어 있습니다.
Blackboard : 솔루션 공간안의 오브젝트들을 포함하는 구조화된 전역 메모리
Knoledge source : 자체 표현에 특화된 모듈
control component : 선택, 구성과 실행 모듈
모든 구성들은 Balckboard에 접근해야 한다.
구성들은 Blackboard에 추가될 새로운 Data객체들을 생성할지도 모른다.
구성들은 Blackboard상의 특별한 종류의 Data를 찾고,
Knoledge source에 존재하는 패턴과 매치되는 해당 Data를 찾을 수 있다.
Blackboard pattern은 주로 음성인식, 차량 식별과 추적, 단백질 구조 식별, 수중음파 해석등에 사용된다.
10. interpret pattern
이 패턴은 특정한 언어에 대한 통역 프로그램의 구성품을 디자인할 때 사용된다.
이것은 주로 어떻게 프로그램의 줄들, 특정한 언어로 쓰여진 문장 혹은 표현식을 어떻게 평가할지 지정한다
기본적인 개념은 언어의 각 표식에 따라 계층을 만드는 것이다.
PS : Component를 구성 혹은 구성품이라고 번역해봤는데 뭔가 적절한 번역을 못찾겠음
'외국 블로그 번역' 카테고리의 다른 글
[Gaffer On Games]Sending and Receiving Packets [작성중] (0) | 2019.11.26 |
---|---|
게임에서의 Hexa Tile에 관하여-좌표체계[작성중] (0) | 2019.10.21 |
게임에서의 Hexa Tile에 관하여-기하학 (0) | 2019.09.29 |
[GAFFER ON GAMES] UDP VS TCP (0) | 2017.02.21 |