티스토리 뷰

728x90

[ 밑줄/연결 ]

 

소프트웨어 아키텍처란 SW를 어떻게 구성해야 하는지 그리고 필요한 품질 속성은 어떻게 증진해야 하는지에 대한 중요한 결정들과 다른 SW와는 구별되는 특징들을 모아놓은 집합입니다.

 

높은 빌딩에는 기반과 기둥이 있습니다. 몸에는 뼈대가 있습니다. SW에는 구조가 있습니다. 구조는 SW가 정렬되어 있는 형태입니다.

 

구조를 만드는 일은 곧 요소들끼리의 관계를 만드는 일입니다.....관계는 연관된 요소들이 함께 동작해서 특정 작업을 완수하는 단위입니다. 

모듈: 설계할 때 만들기 시작해서 주로 코딩할 때 다루게 됩니다. 모듈은 파일 시스템 상의 어떤 형태로 표현할 수 있으며 SW가 동작하지 않아도 상관없습니다. 모듈은 설계 시점에 의미 있는 요소.

 

컴포넌트와 커넥터: SW가 실제 동작할때 부터 의미 있습니다. SW가 실행하기 시작하면 컴포넌트 간에 커넥션을 만들고 프로세스를 생성하거나 오브젝트를 초기화합니다. 모듈 타입과 다른 점이라면, C&C는 시스템이 동작하지 않으면 사라진다는 점입니다. C&C 타입은 프로그램이 실제 실행하면서 만드는 로그파일이나 데이터베이스 기록만으로 파악할 수 있습니다. 컴포넌트는 런타임 시점에 의미 있는 요소. 

 

자원할당: 모듈과 C&C가 서로 어떤 관계가 있는지 물리적인 요소로 보여주고자 할 때 만듭니다. 자원 할당 타입은 매핑 구조라고도 부르는데, 여러 요소가 서로 어떻게 매핑되는지 나타낼 수 있기 때문입니다. 

 

(웹 브라우저용 데이터 기반 애플리케이션 구축 시 적절한 패턴 선택지 세 가지)

(1) 3계층 패턴

ㅇ 대부분의 경우에 적합

ㅇ 쉽게 테스트할 수 있고, 쉽게 배포할 수 있고, 쉽게 설명할 수 있음

ㅇ 비용이 높은 편임

ㅇ 계층이 여러 겹인 멀티 계층 패턴은 확장성이나 가용성과 같은 품질 속성에는 적합하지 않음

 

(2) 발행/구독 패턴

ㅇ 서비스를 여러 번 변경해도 유연하게 대응할 수 있음. 유연성은 느슨하게 결합된 시스템을 만들 때 적합함

ㅇ 데이터베이스 위주의 애플리케이션에서는 메시지의 순서가 중요하지만 발행/구독 패턴은 순서를 보장하기 어려움

ㅇ 메시지 버스 기술을 제대로 만들면 순서 문제도 해결할 수 있지만, 뭔가 어색한 게 사실임

 

(3) 서비스지향 아키텍처

ㅇ 유연하고 테스트하기 좋음

ㅇ 품질 속성 중 확장성과 가용성을 다른 아키텍처보다 중요하게 다룸

ㅇ 인프라 관점에서 가장 복잡도가 높기도 함

 

(아키텍처 패턴)

SW 아키텍처가 폭넓게 활동하기 시작하면서 확장성 있고, 유지 보수가 용이하고, 신뢰성 있고, 고가용성을 가지며, 테스트도 쉬운 SW 시스템이 수십 년간 만들어져 왔습니다. 

 

아키텍처 패턴이란 특정 문제에 대해 재사용할 수 있는 해법입니다. 문제에 적합한 패턴을 선택하면 함정을 피할 수 있고 바닥부터 디자인하는 수고를 덜 수도 있습니다. 

 

아키텍처 패턴은 디자인 패턴과 달리 다양한 품질 속성 시나리오를 해결하는 데 목적이 있습니다. SW 설계 시간, 실행시간, 추상적인 컴포넌트 등을 다룹니다. 

 

(레이어 패턴)

가장 흔히 사용되고 필요 이상으로 남용되는 패턴. 레이어 간에 결합은 낮추고 응집을 높이면 유지 보수성이 좋아집니다. 레이어 패턴을 사용하면 하나의 모듈을 업데이트 할 때 다른 모듈이 받는 영향을 최소화할 수 있습니다. 

(포트와 어댑터 패턴)

핵심 비즈니스 로직을 격리할 때 유용합니다. 데이터와 이벤트를  격리된 환경에서 테스트할 때도 사용할 수 있습니다. 실행 중에도 마치 플러그를 꽂듯이 어댑터를 구현하면, 특정 입력 소스를 비즈니스 로직에 주입해 데이터와 이벤트를 제공할 수 있습니다. 어댑터는 SW 구축 시 또는 실행 시에 환경 설정 값에 따라 바뀔 수 있습니다. 그러므로 이 패턴은 여러 입력 장치를 지원하는 SW나 입력 환경이 바뀔 수 이는 경우에 적용하면 좋습니다. 

(파이프와 필터 패턴)

요소 하나하나는 필터라고 부르면 단방향으로 데이터를 변형하는 작업만 합니다. 데이터는 필터에서 필터로 빠르게 흐르고, 병렬적으로 데이터 처리가 이루어지기도 합니다. 필터 간의 관계를 느슨하게 만들수록 필터를 재사용하기 용이하고 새로운 파이프라인을 만들 때도 다양한 구성으로 결합할 수 있습니다. 

 

이 패턴은 데이터 분석과 처리에서 자주 이용합니다.  

 

배치 시퀀셜 패턴은 단계별로 하나의 작업만 실행하지만 파이프와 필터 패턴은 병렬 처리가 가능합니다. 배치 시퀀셜 패턴은 주요 단계마다 모든 데이터를 디스크에 저장한 후 다음 단계로 넘어가지만, 파이프와 필터 패턴은 스트리밍 데이터를 가정합니다. 

(서비스 지향 아키텍처 패턴)

특정 기능을 가진 컴포넌트를 독립적인 서비스로 구성합니다. 시스템은 실행 중에 서비스를 조합해 작업을 수행합니다. 서비스를 사용하는 측에서는 각 서비스가 어떻게 구현되었는지 몰라도 서비스를 불러내고 실행할 수 있어야 합니다. 

 

최신 SOA 구현 방법은 마이크로서비스로 더 세분화하고 더욱 가벼운 HTTP 프로토콜로 서로를 잇습니다. 

 

서비스는 레지스트리에 등록되어 접속 정보를 조회할 수 있도록 해야 하고, 다른 서비스가 원할 때는 언제든지 접근할 수 있어야 합니다.

 

(발행/구독 패턴)

발행자와 구독자가 서로 독립적으로 존재하며 서로를 모르는 형태의 패턴입니다. 다수의 구독자가 다양한 발행자가 만들어낸 이벤트를 구독합니다. 발행자와 구독자는 이벤트 버스를 통해 간접적으로 통신하는 셈입니다. 이벤트 버스는 발행자가 게시한 이벤트를 구독자에게 전달하는 책임이 있습니다. 어떤 기술이 이벤트 버스를 선택하는지에 따라 시스템 전반에 큰 영향을 미칩니다. 발행/구독 패턴은 다수의 독립적인 컴포넌트가 동일한 정보를 다루고 싶을 때 주로 사용됩니다.  

(공유 데이터 패턴)

다수의 컴포넌트가 하나의 데이터 저장소에 접근하고 사용하는 패턴입니다. 많은 컴포넌트가 많은 데이터를 필요로 할 때 유용합니다. 데이터와 데이터 소스는 컴포넌트 간 인터랙션의 중간자 역할을 합니다. 

 

대용량 데이터에 기반한 시스템이라면 이 패턴이 어떤 형태로된 들어 있습니다. 

(멀티 계층 패턴)

실행 중인 SW를 논리적인 단위로 나누어 구성한 패턴. 각 논리적인 단위의 그룹은 특정 HW에 설치될 수 있습니다. 계층은 실행 환경에 대한 개념으로, 컴포넌트와 커넥트 구조든 배포든 구성이든 상관없이 실제 실행하는 SW를 기준으로 그룹을 짓습니다. 

모델과 코드의 격차를 줄이는 또 다른 방법으로, 도메인 모델을 코드에 넣는 방법이 있습니다. 객체와 관계의 mapper나 actor 기반 시스템 등 많은 프레임워크는 구현체 안에 도메인 모델이 이미 있다고 가정합니다.

 

 

[ 자평 ]

 

업무상 크게 관련이 없으나 관심이 있어서 필요한 부분만 훑어서 봤다. 

패턴의 유형과 장단점만 집중해서 읽었고 그것만 가져도 내게는 감지덕지다. 

댓글