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 별 장단점 정리
[참고자료]
4. 프로그래밍 기법
- SW의 구조는 어떤 프로그래밍 기법 또는 방식을 사용하냐에 따라 달라지기도 한다.
- 대표적인 프로그래밍 기법에 대해서 알아보자.
a) 구조적 기법
- 입력과 출력이 각각 하나로 이루어진 구조
- 순서, 선택, 반복의 3가지 논리구조를 사용하는 기법
- 순서에 따른 절차적인 수행방식
ex) Pascal, Fortran
b) 객체지향 기법(OOP)
- 데이터 구조, 데이터 타입, 함수까지 정의하여 사용하는 프로그래밍 기법
- 절차적 프로그래밍의 문제점을 해결하기 위해 개발된 기법
- 캡슐화, 상속화, 추상화, 다형성의 특징을 갖는다.
- 코드의 재사용이 용이하다.
ex) Java, C++
c) 컴포넌트 기법
- 외부 인터페이스를 통해 동작을 구현하고 시스템의 단순성을 높이는 기법
- 코드를 직접 짜서 프로그램을 만드는 것이 아니라 외부 서비스를 조합해서 프로그램을 만드는 방식
d) 분산객체 프레임워크
- 서로 다른 구조를 가진 프로그램을 쉽게 통합하기 위한 통합 방식
ex) 클라우드
'컴퓨터공학기초 개념 > 컴퓨터구조' 카테고리의 다른 글
23. 컴퓨터 구조 - 메모리 시스템의 이해 (0) | 2021.08.25 |
---|---|
22. 컴퓨터구조 - 파이프라인과 병렬처리 (0) | 2021.08.19 |
20. 컴퓨터구조 - 프로그램과 프로그래밍 언어 (0) | 2021.08.17 |
19. CPU 내부구조 - 입출력과 인터럽트 (0) | 2021.08.12 |
18. CPU 내부구조 - 명령어와 주소지정방식 (0) | 2021.08.12 |
댓글