소프트웨어 아키텍처 - 1과목 소프트웨어 구축
이번 파트에서는 4+1뷰와 모델-뷰-컨트롤러( MVC 패턴)이 나옵니다. 다른 것보다 중요하니 세심히 읽고 지나가셔야합니다. 정처기에서 자주 나오진 않지만 하나의 문제가 소중한 실기에서 놓지지 않도록 한번 더 확인하시고 읽어보시는 것을 권장드립니다.
목차
소프트웨어 아키텍처
소프트웨어의 기본구조. 즉, 소프트웨어의 골격이 되는 기본구조를 말한다. 소프트웨어 구축에서는 아키텍처라는 말을 많이 하게 되는데, 소프트웨어, 데이터 등의 구조라고 봐도 무방합니다.
시스템의 전체적이며 기본적인 골격을 제공하고 고수준의 설계지침을 확인할 수 있습니다.
소프트웨어의 특징
정보처리기사 시험에 나올 확률은 낮지만 한 번 읽어보고 지나가는 것도 나쁘지 않습니다.
특징 | 설명 |
간략성 | 소프트웨어 아키텍처는 시스템의 복잡성을 간결하게 표현하여 이해하기 쉽게 합니다. |
추상화 | 아키텍처는 시스템의 복잡성을 추상화하여 핵심 구성 요소를 강조하고 세부 사항을 숨깁니다. |
가시성 | 아키텍처는 시스템의 구조와 기능을 명확하게 표현하여 이해하기 쉽도록 합니다. |
관점 모형 | 다양한 관점에서 시스템을 바라볼 수 있도록 하여 다양한 이해관계자 간의 의사소통을 원활하게 합니다. |
의사소통수단 | 아키텍처는 시스템의 설계 및 구현에 대한 의사소통을 도와줍니다. 이는 설계 문서, 다이어그램 등을 포함합니다. |
소프트웨어 아키텍처 프레임워크 구성요소
구성요소 | 설명 |
명세서 (description) |
아키텍처의 요구사항과 목표를 명확하게 정의하는 문서입니다. 아키텍처 명세서는 시스템의 기능, 비기능적 요구사항, 제약 조건 등을 기술합니다. |
이해관계자 (Stakeholders) |
아키텍처 프레임워크의 사용자 및 관련 이해관계자들을 나타냅니다. 이해관계자는 아키텍처에 영향을 주거나 받을 수 있는 모든 개체와 조직을 포함합니다. |
관심사 (Concerns) |
아키텍처가 다루는 주요 관심사항이나 요구사항을 의미합니다. 관심사는 시스템의 품질 속성, 기능, 성능, 보안 등 다양한 측면을 포함할 수 있습니다. |
뷰 (View) |
시스템을 특정 관점 또는 관심사에 따라 다양한 관점에서 볼 수 있도록 하는 시각적 표현입니다. 뷰는 시스템의 다양한 측면을 이해하고 표현하는데 사용됩니다. |
관점 (Perspective) |
뷰를 생성하고 구성하기 위해 필요한 특정한 시각이나 관점을 나타냅니다. 특정한 이해관계자나 관심사에 초점을 맞추어 시스템을 이해하고 설명하는 역할을 합니다. |
소프트웨어 아키텍처 4+1 뷰
관점 (Perspective) | 설명 | 관점 | 특징 |
논리적 관점 (Logical View) |
소프트웨어 시스템의 논리적 구조와 기능을 중심으로 보여주는 관점입니다. 이 관점은 시스템의 기능, 데이터 구조, 비즈니스 로직 등에 초점을 맞춥니다. |
분석사/설계자 | - 구성요소: 클래스 다이어그램을 통해 시스템의 객체와 클래스를 나타냅니다. |
구현 관점 (Implementation View) |
시스템의 물리적인 구성 요소와 모듈, 클래스, 인터페이스 등의 구현을 중심으로 보여주는 관점입니다. 이 관점은 소프트웨어 시스템이 실제로 구현되는 방식을 나타냅니다. |
개발자/구현자 | - 데이터 표현: 컴포넌트 다이어그램을 사용하여 시스템의 물리적인 구성 요소를 나타냅니다. |
프로세스 관점 (Process View) |
소프트웨어 시스템의 동작과 상호작용을 중심으로 보여주는 관점입니다. 이 관점은 시스템의 구성 요소 간의 통신, 동기화, 병렬 처리 등을 표현합니다. |
시스템 운영자/네트워크 관리자 | - 프로세스 표현: 활동 다이어그램을 사용하여 시스템의 동작을 나타냅니다. |
배치 관점 (Deployment View) |
소프트웨어 시스템의 물리적인 배치와 구성을 중심으로 보여주는 관점입니다. 이 관점은 시스템의 소프트웨어 및 하드웨어 구성 요소의 배치와 상호작용을 나타냅니다. |
시스템 운영자/네트워크 관리자 | - 하드웨어 배치: 배치 다이어그램을 사용하여 하드웨어와 소프트웨어의 배치를 표현합니다. |
유스케이스 관점 (Use Case View) |
소프트웨어 시스템의 기능적인 요구사항을 중심으로 보여주는 관점입니다. 이 관점은 시스템의 사용자 관점에서 기능과 상호작용을 설명합니다. |
고객/사용자 | - 사용 사례 표현: 사용 사례 다이어그램을 사용하여 시스템의 사용 사례와 액터들 간의 상호작용을 나타냅니다. |
소프트웨어 아키텍처 품질속성(pass해도 무관)
ISO/IEC 9126에서 언급되는 것 중 기신사효유이를 기억하는 것이 좋습니다.
정확성
소프트웨어 시스템이 정확한 결과를 산출하는 능력을 의미합니다. 즉, 시스템이 사용자가 기대하는 대로 정확하게 동작해야 합니다. 정확성은 사용자 요구사항을 올바르게 이해하고 이를 충족시키는 데 중요한 역할을 합니다.
신뢰성
소프트웨어 시스템이 오류 없이 일정 기간 동안 안정적으로 동작하는 능력을 말합니다. 사용자가 시스템에 의존할 수 있고, 중요한 작업을 정확하게 처리할 수 있어야 합니다. 신뢰성은 시스템의 안정성과 신뢰도를 보장합니다.
효율성
소프트웨어 시스템이 자원을 효율적으로 활용하여 작업을 수행하는 능력을 의미합니다. 이는 시스템의 성능을 향상시키고, 자원의 낭비를 최소화하여 사용자 경험을 향상시킵니다.
무결성
소프트웨어 시스템이 데이터의 정확성, 일관성 및 보안을 보장하는 능력을 말합니다. 시스템이 정확하고 완전한 데이터를 처리하고, 외부 침입으로부터 데이터를 보호하는 등의 조치를 취해야 합니다.
사용용이성
소프트웨어 시스템이 사용자가 쉽게 이해하고 사용할 수 있는 인터페이스와 기능을 제공하는 능력을 의미합니다. 사용자 친화적인 디자인과 직관적인 기능은 사용용이성을 향상시킵니다.
유지보수성
소프트웨어 시스템이 변경 및 확장이 용이하도록 설계되어 있는 능력을 말합니다. 시스템의 코드와 구조가 명확하며, 변경에 대한 영향을 최소화하여 유지보수성을 향상시킵니다.
시험용이성
소프트웨어 시스템이 테스트 및 검증이 용이한 능력을 의미합니다. 테스트 케이스를 작성하고 시스템을 효과적으로 검증하여 오류를 발견하고 수정하는 데 도움이 됩니다.
유연성
소프트웨어 시스템이 변화에 대응할 수 있는 능력을 말합니다. 시스템의 구성 요소가 유연하게 조합되어 있고, 변경에 대한 영향이 최소화되어야 합니다.
이식성
소프트웨어 시스템이 다양한 환경에서 실행될 수 있는 능력을 의미합니다. 시스템이 특정 플랫폼에 종속되지 않고 다른 환경으로 쉽게 이식될 수 있어야 합니다.
재사용성
소프트웨어 시스템의 구성 요소나 모듈이 다른 시스템에서 재사용될 수 있는 능력을 말합니다. 재사용 가능한 구성 요소들은 비용을 절감하고 개발 시간을 단축시키는 데 도움이 됩니다.
상호운용성
소프트웨어 시스템이 다른 시스템과 상호작용할 수 있는 능력을 의미합니다. 표준화된 프로토콜과 인터페이스를 활용하여 시스템 간의 통신이 원활하게 이루어져야 합니다.
소프트웨어 아키텍처 패턴
소프트웨어 패턴이라는 것은 공통적인 문제가 발생했을 때, 빠르게 처리하기 위한 방안으로 볼 수 있습니다.
재사용성, 표준화, 개발효율성, 문서화
소프트웨어 아키텍처 패턴 종류
모델-뷰-컨트롤러 패턴 (Model-View-Controller Pattern)
모델(Model)
- 정의: 모델은 소프트웨어의 데이터와 비즈니스 로직을 관리하는 부분으로, 데이터의 상태를 유지하고 데이터에 대한 조작 및 처리를 담당합니다.
- 예시: 웹 애플리케이션에서 모델은 데이터베이스에 저장된 사용자 정보나 게시물 데이터를 가져오고, 이를 수정하거나 삭제하는 등의 작업을 수행합니다.
- 구현 예시: 모델은 주로 데이터베이스 ORM(Object-Relational Mapping) 라이브러리를 사용하여 구현됩니다. 예를 들어, Ruby on Rails 프레임워크에서는 ActiveRecord가 모델을 구현하는 데 사용됩니다.
뷰(View)
- 정의: 뷰는 사용자에게 정보를 시각적으로 표시하는 부분으로, 사용자 인터페이스(UI)를 구성하고 표현합니다.
- 예시: 웹 애플리케이션에서 뷰는 HTML, CSS, JavaScript 등을 사용하여 웹 페이지의 디자인 및 레이아웃을 결정하고, 서버로부터 받은 데이터를 사용자에게 표시합니다.
- 구현 예시: 뷰는 주로 프론트엔드 프레임워크나 템플릿 엔진을 사용하여 개발됩니다. 예를 들어, React, Angular, Vue.js와 같은 프론트엔드 프레임워크를 사용하여 뷰를 구현할 수 있습니다.
컨트롤러(Controller)
- 정의: 컨트롤러는 사용자의 입력을 처리하고 모델과 뷰를 연결하는 부분으로, 사용자의 요청을 받아 해당 요청에 맞는 데이터를 모델로부터 가져오거나 모델을 조작한 후, 적절한 뷰를 선택하여 사용자에게 반환합니다.
- 예시: 웹 애플리케이션에서 컨트롤러는 사용자가 요청한 URL에 따라 적절한 액션을 수행하고, 해당 액션에서 모델로부터 데이터를 가져와 뷰에 전달합니다.
- 구현 예시: 컨트롤러는 주로 백엔드 프레임워크에서 구현됩니다. 예를 들어, Node.js에서는 Express 프레임워크를 사용하여 컨트롤러를 구현할 수 있습니다.
예시 시나리오
- 검색 기능 구현 시나리오:
- 사용자가 검색어를 입력합니다.
- 입력된 검색어가 컨트롤러로 전달됩니다.
- 컨트롤러는 모델에 검색어를 전달하여 관련 데이터를 요청합니다.
- 모델은 검색어와 일치하는 데이터를 찾아 컨트롤러로 반환합니다.
- 컨트롤러는 이 결과를 적절한 뷰에 전달하여 사용자에게 보여줍니다.
계층화 패턴 (Layered Pattern)
정의: 계층화 패턴은 소프트웨어 시스템을 여러 개의 계층으로 분할하여 각 계층이 특정한 기능을 수행하고, 상위 계층이 하위 계층에 의존하는 구조를 갖는 패턴입니다.
적용되는 곳 : 웹 애플리케이션, 소프트웨어 시스템 구축, 데이터베이스 시스템 등 다양한 소프트웨어 개발 프로젝트에서 사용됩니다.
장점
- 모듈화된 설계: 각 계층은 특정한 역할을 수행하므로 모듈화된 설계를 가능하게 합니다.
- 유지보수 용이성: 각 계층이 독립적으로 관리되므로 유지보수가 용이합니다.
- 확장성: 계층화 패턴은 새로운 계층을 추가하거나 기존 계층을 수정하여 시스템의 확장이 가능합니다.
단점
- 성능 저하: 계층화로 인해 추가적인 오버헤드가 발생할 수 있으며, 이는 성능에 영향을 미칠 수 있습니다.
예시: OSI 모델에서의 네트워크 계층, 응용 계층 등이 계층화 패
클라이언트-서버 패턴 (Client-Server Pattern)
정의: 클라이언트-서버 패턴은 클라이언트와 서버 간의 상호작용을 중심으로 하는 아키텍처 패턴으로, 클라이언트는 서비스를 요청하고, 서버는 해당 요청에 응답하여 서비스를 제공하는 구조를 갖습니다.
적용되는 곳: 웹 애플리케이션, 데이터베이스 시스템, 클라우드 컴퓨팅 등의 분산 시스템에서 널리 사용됩니다.
장점
- 분산 환경에서의 효율적인 자원 관리 가능
- 서비스의 중앙 집중화로 인한 통제 및 관리 용이성
단점
- 단일 서버에 대한 의존도가 높아지므로 단일 장애점이 발생할 수 있음
예시: 웹 브라우저와 웹 서버 간의 통신, 클라이언트 컴퓨터와 데이터베이스 서버 간의 상호작용 등이 클라이언트-서버 패
마스터-슬레이브 패턴 (Master-Slave Pattern)
슬레이브는 마스터가 시킨 일만 하는 것으로 클라이언트와 차이가 있습니다. 클라이언트는 어느 정도 직접 처리할 능력이 있다고 보시면 됩니다.
정의: 마스터-슬레이브 패턴은 하나의 마스터(주체)가 여러 개의 슬레이브(부속물)를 제어하고 조정하는 패턴으로, 마스터가 전체적인 제어와 조정을 담당하고, 슬레이브는 마스터의 지시에 따라 동작합니다.
적용되는 곳: 병렬 처리, 분산 시스템, 데이터베이스 복제 등 다중 노드 간의 상호작용이 필요한 환경에서 사용됩니다.
장점
- 작업을 분산하여 병렬 처리 가능
- 마스터와 슬레이브 간의 역할 분담으로 시스템 성능 향상 가능
단점
- 마스터에 대한 의존도가 높아지면 단일 장애점이 발생할 수 있음
- 동기화 문제 발생 가능
예시: 데이터베이스에서의 마스터-슬레이브 복제 시스템, 클러스터 컴퓨팅에서의 마스터-슬레이브 노드 구성 등이 마스터-슬레이브 패턴을 따름
파이프-필터 패턴 (Pipe-Filter Pattern)
정의: 파이프-필터 패턴은 여러 개의 독립적인 필터들을 연결하여 데이터를 처리하는 패턴입니다. 각 필터는 입력 데이터를 받아 특정한 처리를 수행한 후, 출력 데이터를 생성하며, 필터들은 파이프를 통해 연결되어 데이터가 순차적으로 처리됩니다.
적용되는 곳: 데이터 처리 시스템, 이미지 및 오디오 처리 소프트웨어, 텍스트 처리 애플리케이션 등에서 사용됩니다.
장점
- 각 필터는 독립적으로 개발되고 테스트되므로 재사용성이 높음
- 시스템의 유연성을 높여 필터를 추가, 제거, 교체할 수 있음
- 병렬로 처리할 필터를 추가하여 성능을 향상시킬 수 있음
단점
- 데이터의 처리 과정이 순차적으로 이루어지기 때문에 처리 시간이 오래 걸릴 수 있음
- 복잡한 파이프라인 구성 시 관리 및 디버깅이 어려울 수 있음
예시: Unix 명령어의 파이프(|)를 사용한 데이터 처리, 이미지 필터링 소프트웨어 등이 파이프-필터 패턴을 따름.
브로커 패턴 (Broker Pattern)
정의: 브로커 패턴은 시스템의 각 구성 요소가 중앙 브로커에 의해 중계되는 패턴입니다. 각 구성 요소는 브로커와 통신하여 메시지를 송수신하며, 브로커는 메시지를 수신하고 적절한 구성 요소에게 라우팅합니다.
적용되는 곳: 메시지 큐 시스템, 이벤트 기반 시스템, 분산 시스템 등에서 사용됩니다.
장점
- 느슨한 결합: 브로커를 통해 통신하기 때문에 구성 요소 간의 결합도가 낮아집니다.
- 확장성: 새로운 구성 요소를 쉽게 추가하거나 제거할 수 있습니다.
- 중앙 집중화된 제어: 브로커가 중앙에서 모든 통신을 관리하므로 통신과 관련된 로직이 중앙 집중화됩니다.
단점
- 브로커가 단일 장애점이 될 수 있으며, 이로 인해 전체 시스템의 가용성이 저하될 수 있습니다.
- 브로커의 처리 능력이 한계에 도달하면 시스템 성능이 저하될 수 있습니다.
예시: Apache Kafka와 같은 메시지 브로커, Enterprise Service Bus (ESB) 등이 브로커 패
- 이벤트-버스 패턴, 모델-뷰-컨트롤러 패턴
블랙보드 패턴 (Blackboard Pattern)
정의: 블랙보드 패턴은 다수의 컴포넌트가 공유된 데이터 구조를 조작하고 이를 기반으로 각자의 의사 결정을 내리는 패턴입니다.
시스템의 문제 해결을 위해 컴포넌트가 정보를 읽고 쓰는 블랙보드에 정보를 기록하고, 이를 토대로 각 컴포넌트가 자신의 지식과 전문성을 활용하여 문제를 해결합니다.
적용되는 곳: 지능적인 시스템, 전문가 시스템, 빅 데이터 분석 등의 영역에서 사용됩니다.
장점
- 복잡한 문제를 다양한 전문 분야의 컴포넌트들이 협업하여 해결할 수 있습니다.
- 시스템이 유연하고 확장 가능합니다.
- 새로운 문제나 도메인에 대해 빠르게 대응할 수 있습니다.
단점
- 컴포넌트 간의 상호작용이 복잡하고, 동기화와 일관성 유지가 어려울 수 있습니다.
- 블랙보드 자체의 구현이 복잡할 수 있습니다.
예시: 의료 진단 시스템, 우주 탐사 미션에서의 상황 인식 및 결정 시스템 등이 블랙보드 패
인터프리터 패턴 (Interpreter Pattern)
정의: 인터프리터 패턴은 주어진 언어의 문법을 해석하고 실행하는 패턴으로, 해당 언어의 구문 트리를 분석하여 각 요소를 해석하고 실행합니다.
적용되는 곳: 프로그래밍 언어의 컴파일러, 자연어 처리 시스템, 규칙 기반 시스템 등에서 사용됩니다.
장점
- 새로운 문법을 추가하거나 기존 문법을 수정할 때 유연하게 대응할 수 있습니다.
- 각 구문 요소의 해석과 실행을 독립적으로 구현할 수 있으므로 재사용성이 높습니다.
단점
- 구문 트리의 분석과 실행 과정이 복잡하고 오버헤드가 발생할 수 있습니다.
- 인터프리터의 성능이 컴파일러에 비해 느릴 수 있습니다.
예시: Python, Ruby와 같은 스크립트 언어의 인터프리터, SQL 쿼리의 해석 및 실행 시스템 등이 인터프리터 패
'정보처리기사' 카테고리의 다른 글
[정보처리기사] 8. UI 설계 - 1과목 소프트웨어 구축 (2) | 2024.03.17 |
---|---|
[정처기실기] 7. UML - 1과목 소프트웨어 구축 (3) | 2024.03.17 |
[정보처리기사] 5. 소프트웨어 설계의 기본 원칙 - 1과목 소프트웨어 구축 (0) | 2024.03.15 |
[정보처리기사] 4. 요구사항 분석 - 소프트웨어 개발 방법론 (3) | 2024.03.14 |
[정처기 실기] 3. 프로젝트 계획 및 분석 - 1과목 소프트웨어 구축 (0) | 2024.03.13 |
댓글