본문 바로가기
컴퓨터공학기초 개념/컴퓨터구조

21. 컴퓨터 구조 - 소프트웨어 구조

by devraphy 2021. 8. 17.

0. 시작하기 전에

- 이전 포스팅에서 프로그램과 SW의 개념에 대해서 배웠다.

- 그리고 SW / 프로그램을 구성하는 프로그래밍 언어에 대해서 알아보았다. 

- 이번 포스팅에서는 SW가 어떤 구조를 갖는지에 대해서 배워보자.


1. SW Architecture (소프트웨어의 구조)

- 구조란 무엇을 의미할까?

- 구조는 어떤 결과물의 구성요소간의 관계 또는 그 관계의 형태를 의미한다. 

- 그렇다면 SW는 구성요소간의 어떤 관계를 형성하고 있는지 알아보자. 

 

a) SW의 구성요소

- SW는 다음과 같은 구성요소를 갖는다. 

 

▶ 모듈

   - 기능의 집합

   - 특정한 작업 또는 기능을 수행하는 최소 단위의 프로그램들의 집합

 

▶ 컴포넌트

   - 모듈의 집합

 

▶ 라이브러리 

   - 컴포넌트의 집합 

 

- 이와 같은 구성요소를 어떻게 배치하고, 관계를 형성시키느냐가 SW의 구조를 형성한다. 

- 그러므로 SW의 구조에 따라서 프로그램 전체의 성능이 좌우된다. 

 

프로그램 전체의 성능이란?

   - 연산속도 또는 작업수행속도를 의미할 뿐만 아니라 User Experience도 의미한다. 


2. SW Architecture의 종류 

- SW의 기능에 따라 그 설계구조가 결정되기도 한다. 

- 대표적인 10가지 SW 아키텍처 패턴에 대해서 알아보자.

 

a) 계층화 패턴(Layered pattern)

- SW에 계층을 만들어서 각 계층마다 역할과 기능을 할당하여 분리하는 구조다.

- 계층화 패턴은 다음과 같은 구조를 갖는다. 

 

[상위 계층 - 클라이언트] 

프레젠테이션 계층(Presentation Layer) - UI Layer

  - 눈에 보이는 것을 담당하는 계층

  - 사용자의 명령을 해석하거나 표현한다. 

 

어플리케이션 계층(Application Layer) - Service Layer

   - 작업을 조정 및 배치하는 계층

   - 바로 아래의 비즈니스 계층에게 작업을 할당한다. 

 

비즈니스 논리 계층(Business Logic Layer) - Domain Layer

   - 어플리케이션 계층으로 부터 작업을 받아 처리하는 계층

   - 작업 상황을 기록하고, 작업의 규칙이나 상태 등을 제어한다. 

 

데이터 엑세스 계층(Data Access Layer) - Persistence(영속) Layer

   - 상위 계층을 지원하는 계층

[하위계층 - 서버]

 

ex) 일반적인 어플리케이션, 전자상거래 웹 어플리케이션 

 

 

b) 클라이언트 - 서버 패턴(Client - Server pattern)

- 분산 네트워크 시스템에서 사용되는 구조

- 하나의 서버와 다수의 클라이언트로 구성된다. 

- 서버 컴포넌트는 다수의 클라이언트 컴포넌트에게 서비스를 제공한다. 

- 그러므로 서버는 클라이언트의 요청에 대기한다. 

ex) 이메일, 문서 공유, 인터넷 뱅킹 등

 

 

c) 마스터 슬레이브 패턴(Master - Slave pattern)

- 마스터 컴포넌트는 슬레이브 컴포넌트에게 작업을 분산 및 할당한다. 

- 슬레이브가 반환한 결과 값을 이용하여 최종 결과값을 계산하는 구조다. 

 

ex) 컴퓨터 시스템과 연결된 주변장치를 사용

ex) 메인 DB와 서브 DB를 나누어서 사용하는 경우   

 

 

d) 파이프 - 필터 패턴(Pipe - Filter pattern)

- 데이터 스트림을 생성하고 처리하는 시스템에서 사용하는 구조

- 각 처리과정은 Filter 컴포넌트에서 수행한다. 

- Filter를 통과하는 데이터는 파이프를 통해서 흐른다. 

 

 

e) 브로커 패턴(Broker pattern)

- 분산 시스템에서 사용하는 구조 

- 컴포넌트 들이 원격 서비스 실행을 통해서 상호작용 한다.

- 브로커는 컴포넌트 간의 통신을 조정하는 역할

- 서버의 기능을 브로커가 이어주는 방식으로, 클라이언트의 요청에 따라 적합한 서비스로 리다이렉트 시킨다. 

  ex) 메세지 브로킹 소프트웨어 

 

 

f) 피어 투 피어 패턴(Peer to Peer pattern)

- 모든 컴포넌트를 'peer'라고 부르며,

- 요청에 따라 클라이언트(= 서비스 요청)가 될수도 서버(=서비스 제공)가 될수도 있다.

ex) 파일 공유 네트워크(p2p가 peer to peer를 의미하는 것)

 

 

 

g) 이벤트 - 버스 패턴(Event Bus pattern)

- 이벤트에 의해 처리되는 구조를 갖는 SW에 사용되는 구조

- 4가지 주요 컴포넌트 (이벤트 소스, 이벤트 리스너, 이벤트 채널, 이벤트 버스)로 구성된다.

- 이벤트 버스를 통해 특정 이벤트 채널로 메시지를 발행(publish)하면,

- 이벤트 리스너는 특정 이벤트 채널에서 메시지를 구독한다(subscribe)

- 이벤트 리스너는 구독한 이벤트 채널에서 발행되는 메시지에 대한 알림을 받는다. 

ex) 알림 서비스

 

 

 

h)MVC 패턴(Model - View - Controller pattern)

- 대화형(interactive) 어플리케이션이 갖는 구조

- SW 내부적으로 처리하는 기능을 3가지로 분류하여 분리한 구조

- 역할과 기능에 따른 컴포넌트 분리로 인해 코드의 재사용성이 좋아진다. 

 

▶ Model - 핵심 기능과 데이터 처리를 담당하는 역할

▶ View - 데이터를 사용자의 화면에 출력하는 역할

▶ Controller - 사용자로부터 받은 입력을 처리하여 사용자에게 반환하는 역할

 

ex) 일반적인 웹 어플리케이션

 

 

i) 블랙보드 패턴(Blackboard pattern)

- 어떤 SW를 만드는데, 해결 전략이 없는 경우에 사용하기 유용한 구조

- 3가지 주요 컴포넌트로 구성된다. 

 

▶ 블랙보드(Blackboard) - 솔루션의 객체를 포함하는 구조화된 전역메모리

▶ 지식소스(knowledge source) - 자체 표현을 가진 특수한 모듈

▶ 제어 컴포넌트(control component) - 모듈 선택과 설정 및 실행을 담당

 

ex) 음성인식, 차량식별 및 추적, 음파 탐지기 등 컴퓨터의 자체적인 해석을 요구하는 솔루션에 사용

 

 

 

 

j) 인터프리터 패턴(Interpreter pattern)

- 특정 언어로 작성된 프로그램을 해석하는 컴포넌트를 설계할 때 사용하는 구조

ex) SQL과 같은 DB 쿼리언어, 통신 프로토콜을 정의하기 위한 언어 등에서 사용되는 구조

 

 


3. SW Architecture 별 장단점 정리

 

[참고자료]

https://mingrammer.com/translation-10-common-software-architectural-patterns-in-a-nutshell/#1-%EA%B3%84%EC%B8%B5%ED%99%94-%ED%8C%A8%ED%84%B4-layered-pattern

 

[번역] 10가지 소프트웨어 아키텍처 패턴 요약

10 Common Software Architectural Patterns in a nutshell을 번역한 글입니다. 대형 엔터프라이즈 규모의 시스템들은 어떻게 설계되었는지에 대해 궁금해 한 적이 있나요? 우리는 주요 소프트

mingrammer.com


4. 프로그래밍 기법 

- SW의 구조는 어떤 프로그래밍 기법 또는 방식을 사용하냐에 따라 달라지기도 한다. 

- 대표적인 프로그래밍 기법에 대해서 알아보자. 

 

a) 구조적 기법

- 입력과 출력이 각각 하나로 이루어진 구조

- 순서, 선택, 반복의 3가지 논리구조를 사용하는 기법

- 순서에 따른 절차적인 수행방식

ex) Pascal, Fortran

 

b) 객체지향 기법(OOP)

- 데이터 구조, 데이터 타입, 함수까지 정의하여 사용하는 프로그래밍 기법

- 절차적 프로그래밍의 문제점을 해결하기 위해 개발된 기법

- 캡슐화, 상속화, 추상화, 다형성의 특징을 갖는다. 

- 코드의 재사용이 용이하다. 

ex) Java, C++

 

c) 컴포넌트 기법

- 외부 인터페이스를 통해 동작을 구현하고 시스템의 단순성을 높이는 기법

- 코드를 직접 짜서 프로그램을 만드는 것이 아니라 외부 서비스를 조합해서 프로그램을 만드는 방식 

 

d) 분산객체 프레임워크 

- 서로 다른 구조를 가진 프로그램을 쉽게 통합하기 위한 통합 방식

ex) 클라우드

댓글