미들웨어
대용량 데이터를 처리하는 과정에서 하나의 컴퓨팅 환경에서만 처리하기에는 어려워졌고 성능개선과 장애요소 최소화를 위해 분산 시스템 환경이 필요해졌다.
- 애플리케이션이 서로 데이터 교환이 가능하게 하는 소프트웨어
- 여러 운영체제에서 응용 프로그램들 사이에 위치한 소프트웨어이다.
- 📌 사용자가 정보 교환 방법 등의 내부 동작을 알 필요 없이 표준화된 인터페이스를 사용하여 데이터 교환
- RPC Remote Procedure Call 기반 미들웨어
- MOM Message-Oriented Middleware 메시지 지향 미들웨어
메시지 지향 미들웨어, Message-Oriented Middleware, MOM
- 📌 느리고 안정적 응답보다는 즉각적인 응답이 필요한 온라인 업무에 적합하다.
- 독립적인 애플리케이션을 하나의 통합된 시스템으로 묶기 위한 역할을 한다.
- 📌 상이한 애플리케이션 간 통신을 비동기 방식으로 지원한다.
- Message Queue 기반 패턴이 주 + 브로드캐스트 형식 / 멀티 캐스트 형식
- 메세지를 전달하는 과정에서 보관 또는 라우팅 및 변환이 가능하다.
- 라우팅이 가능하다는 것은 미들웨어 수준에서 여러 사용자에게 메세지를 배포할 수 있다는 의미이다. 멀티 캐스트가 가능해진다.
- 비동기이므로 데이터 불일치가 발생할 수 있고, 메시지 에이전트를 필요로 한다는 점에서 관리나 비용이 더 들어간다.
소프트웨어 설계
요구사항 분석
- 소프트웨어 개발을 출발점이면서 실질적인 첫 번째 단계이다.
- 소프트웨어가 무엇을 해야 하는가를 추적하여 요구사항 명세를 작성하는 작업
기능적 요구사항
- 단순히 어떤 기능들이 있어야 한다~
비기능적 요구사항
- 📌 성능, 신뢰성, 보안성, 안전성, 가용성(사용자가 원하는 순간에 서비스를 제공하는지)
분석분야
요구추출, 도메인 분석, 모델링, 프로타이핑과 시험, 문서화 및 검토
- 도메인 분석(Domain Analysis)
- 요구에 대한 정보를 수집하고 배경을 분석하여 이를 토대로 모델링을 하게 된다.
설계원리
추상화 기법
📌 자료(데이터) 추상화, 제어 추상화, 과정 추상화
- 📌 AVL 다이어그램은 존재하지 않고, AVL 알고리즘이 있다.
- 자가 균형 이진 탐색 트리
- 편향 트리를 AVL 트리로 재구성해 이진 탐색 트리 속성을 가진다.
- 왼쪽, 오른쪽 서브 트리 높이 차이가 1이다.
요구사항 분석 다이어그램
Data Flow Diagram, UML Diagram, E-R Diagram
UML 다이어그램, Unified Modeling Language
- 기능적(유스케이스 다이어그램)
- 정적(클래스 다이어그램)
- Operation: 클래스의 동작
- 동적(상태, 순서 다이어그램)
유스케이스 다이어그램
- 시스템, 액터, 유스케이스, 관계
- 📌 시스템과 상호작용하는 외부 시스템도 '액터'다.
- 구성요소 간 관계: 연관, 확장, 📌 일반화, 의존
순차 다이어그램(시퀀스 다이어그램)
- 객체 간 동적 상호작용을 시간 개념을 중심으로 모델링 하는 것이다.
- 일반적으로 다이어그램의 수직 방향이 시간의 흐름을 나타낸다.
- 엑터, 객체, 메시지, 회귀 메시지, 📌 제어블록(제어문을 위한 루프)
소프트웨어 개발 방법론
구조적, 정보공학, 객체지향, 컴포넌트 기반 방법론
- 소프트웨어 모델링
- 📌 모델링 작업의 결과물은 다른 모델링 작업에 영향을 줄 수 있다.
- 소프트웨어 모델을 사용할 경우 개발될 소프트웨어에 대한 이해도 및 이해 당사자 간의 의사소통 향상에 도움이 된다.
- 모델(Model)
- 모델은 개발 대상을 추상화하고 기호나 그림 등으로 시각적으로 표현한다.
- 모델을 통해 소프트웨어에 대한 이해도를 향상시킬 수 있다.
- 모델을 통해 이해 당사자 간의 의사소통이 향상된다.
- 모델을 통해 향후 개발될 시스템의 유추는 가능하다. - 프로토타입 모델
1. 구조적 방법론(폭포수)
DFD(Data Flow Diagram), DD(Data Dictionary)
- 전체 시스템을 기능에 따라 나눠 개발하고 이를 통합하는 분할과 정복 접근 방식의 방법론
자료흐름도(DFD)
- 요구사항 분석에서 자료의 흐름 및 변환과정과 기능을 도형 중심으로 기술하는 방법
- 자료 흐름 그래프, 버블차트라고도 함
- 자료 흐름도 구성요소
- 프로세스(Process) - 동그라미
- 자료 흐름(Flow) - 화살표
- 📌 자료 저장소(Data Store) - 평행선
- 📌 단말(Terminator) - 사각형
2. 정보공학 방법론(프로토타입)
- 데이터베이스 설계의 표현의 모델링 언어 'Entity-Relationship Diagram', E-R 다이어그램
3. 객체지향 방법론(반복적 개발), OOA(Object Oriented Analysis)
OOSE(Jcobson), OMT(📌 Rumbaugh), OOD(Booth)
- 객체라는 기본 단위로 시스템을 분석, 설계
- 📌 상향식 프로세스를 사용
UML 표기법
- UML 다이어그램
- 통합 모델링 언어를 사용하여 시스템 상호작용, 업무흐름, 시스템 구조, 컴포넌스 관계 등을 그린 도면
- 📌 정적모델: 클래스, 컴포넌트, 패키지, 개발
- 📌 동적모델: 시퀀스, 콜라보, 상태, 상호작용, 타이밍
- 📌 기능모델: 유스케이스, 액티비티
Booth Method
- 미시적 개발 프로세스, 거시적 개발 프로세스로 접근하는 방법
- 각 작업에 대한 다이어그램, 클래스 계층의 정의, 클래스들의 클러스터링 작업 수행
Jcobson Method
- Use Case를 사용하여 분석
- 사용자, 외부 시스템, 다른 요소들이 시스템과 상호작용하는 방법을 기술
Wirfs-Block Method
- 분석과 설계 간 구분이 없으며, 고객 명세서를 평가하여 설계 작업까지 연속적으로 수행
Rumbaugh Method
- 📌 객체 모형, 동적 모형(상태도), 기능 모형(자료 흐름도)의 3개 모형을 생성
📌 자료흐름도는 객체지향 방법론의 OMT(Rumbaugh)와 구조적 방법론 두 곳 모두에 나온다.
4. 컴포넌트 기반 방법론
RUP, XP, Agile, 마르미
- 컴포넌트
- 명백한 역할을 가지고 독립적으로 존재할 수 있는 시스템의 부분으로 넓은 의미에서는 재사용되는 모든 단위라고 볼 수 있으며, 인터페이스를 통해서만 접근할 수 있는 것
익스트림 프로그래밍, eXtreme Programming, XP
- 애자일 개발 프로세스의 대표적인 방법
- 계속 변경되는 비즈니스 상의 요구가 있는 경우 적합한 방법이다.
스크럼
- 애자일 방법의 하나
- 프로젝트 개발 기간을 잘게 쪼개서 전력 개발하는 방법
- 스크럼 마스터: 스크럼 팀이 스크럼을 잘 수행할 수 있도록 객관적인 시각에서 조언을 해주는 가이드 역할을 수행
- 스프린트(Sprint): 일정량의 작업을 완료하는 시간이 정해진 짧은 기간
- 제품 백로그(Product Backlog): 스크럼 팀이 해결해야 하는 목록으로 소프트웨어 요구사항, 아키텍처 정의 등이 포함될 수 있다.
- 속도(Velocity): 한 번의 스프린트에서 한 팀이 어느 정도의 제품 백로그를 감당할 수 있는지에 대한 추정치로 볼 수 있다.
오버로딩 vs 오버라이딩
둘 다 객체지향 개념에서 다형성을 지원하는 기법이다.
오버로딩
- 📌 같은 이름의 메서드에서 매개변수의 유형과 개수가 다르도록 하는 다형성 지원 기법
오버라이딩
- 📌 상위 클래스에서 정의한 일반 메소드의 구현을 하위 클래스에서 무시하고 재정의할 수 있다.
소프트웨어 개발영역을 결정하는 요소
인터페이스
- 소프트웨어에 의해 간접적으로 제어되는 장치와 소프트웨어를 실행하는 하드웨어
- 기존의 소프트웨어와 새로운 소프트웨어를 연결하는 소프트웨어
- 순서적 연산에 의해 소프트웨어를 실행하는 절차
기능, 성능, 제약조건 등
UI
- Feedback
- 시스템의 상태와 사용자의 지시에 대한 효과를 보여주어 사용자가 명령에 대한 진행 상황과 표시된 내용을 해석할 수 있도록 도와주는 것
UI 설계도구
- 와이어프레임
- 기획 단계의 초기에 제작하는 것으로, 페이지에 대한 개략적인 레이아웃이나 UI 요소 등에 대한 뼈대를 설계하는 단계.
- 목업(Mockup)
- 📌 디자인, 사용방법설명, 평가 등을 위해 실제 화면과 유사하게 만든 정적인 형태의 모형
- 시각적으로만 구성 요소를 배치하는 것으로 일반적으로 실제로 구현되지는 않음
- 스토리보드
- 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
종류
GUK(Graphical User Interface), OUI(Organic User Interface), NUI(Natural User Interface), CLK(Command Line Interface)
- NUI(Natural User Interface): 사용자의 자연스러운 움직임을 인식
디자인 패턴
소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결 방법
GoF(Gang of Four) 디자인 패턴
- 생성 패턴
- 📌 Abstract Factory, Builder, Prototype, Singleton
- 구조 패턴
- 📌 Adapter, Bridge, Proxy, Composite, Decorator, Facade, Flyweight
- 행동 패턴
- 📌 Chain of Responsibility, Command, Iterator, Mediator, Observer, State, Strategy, Visitor
- Strategy 패턴: 알고리즘 선택하는 행위패턴
- 📌 Chain of Responsibility, Command, Iterator, Mediator, Observer, State, Strategy, Visitor
캡슐화, Encapsulation
- 속성과 관련된 연산을 클래스 안에 묶에서 하나로 취급하는 것을 의미하는 객체지향 개념
소프트웨어 아키텍처
설계과정
- 설계 목표 설정
- 시스템 타입 설정
- 스타일 적용 및 커스터마이즈
- 서브시스템의 기능, 인터페이스 동작 작성
- 아키텍처 설계 검토
소프트웨어 아키텍처 모델
MVC, Model-View-Controller
- 뷰마다 모델이 필요하진 않다.
- 📌 사용자 인터페이스를 담당하는 계층의 응집도를 높일 수 있고, 여러 개의 다른 UI를 만들어 그 사이에 결합도를 낮출 수 있다.
파이프 필터 아키텍처
- 데이터 스트림을 생성하고 처리하는 시스템에서 사용
- 📌 필터 간 데이터 이동 시 데이터 변환으로 인한 오버헤드가 발생한다.
클래스 설계원칙
단일 책임원칙
- 클래스를 변경해야 하는 이유는 단 하나여야 한다.
개방-폐쇄 원칙
- 클래스는 확장(상속)에 대해 열려 있어야 하며 변경에 대해 닫혀 있어야 한다.
리스코프 교체의 원칙(LSP: Liskov Substitution Principle)
- 📌 기반 클래스는 파생 클래스로 대체할 수 있어야 한다.
- 파생 클래스는 언제나 자신의 기반 클래스를 교체할 수 있다
- 파생 클래스(신버전)에서 기반 클래스의 모든 메서드(구버전)를 지원하지 않으면 상속의 기본인 IS-A 관계가 성립이 안 되기 때문이다.
- 리스코프 교체의 원칙을 지켜 설계해야 올바른 IS-A 관계를 기반으로 안정적인 다형성을 유지할 수 있다.
의존관계 역전의 원칙
- 📌 클라이언트는 구체 클래스가 아닌 추상 클래스(인터페이스)에 의존해야 한다.
기타 용어정리
전처리기(FEP, Front End Processor)
- 📌 입력되는 데이터를 컴퓨터의 프로세서가 처리하기 전에 미리 처리하여 프로세서가 처리하는 시간을 줄여주는 프로그램이나 하드웨어
- 호스트 컴퓨터와 단말기 사이에서 전송처리를 먼저 수행함으로써 컴퓨터의 부하를 줄여주는 역할
- 패킷을 분할, 분할한 패킷의 조립, 메세지 검사 등을 처리
EAI(Enterprise Application Integration)
- 기업 애플리케이션의 통합
- 데이터를 교환하고 제공하는 서비스를 호출하여 기업 내 어플리케이션 사이의 통신을 제공하는 프로세스
- 기업 내 다양한 애플리케이션이 서로 상호작용하기 쉽게 도와주는 솔루션
GPL, 일반 공중 사용 허가서(GNU General Public License, GNU GPL 또는 GPL)
- 자유 소프트웨어 재단에서 만든 자유 소프트웨어 라이선스로, 소프트웨어의 실행, 연구, 공유, 수정의 자유를 최종 사용자에게 보장
Duplexing
- 이중통신(duplex) 또는 쌍방향 통신은 두 지점 사이에서 정보를 주고 받는 전자 통신 시스템
'자격증' 카테고리의 다른 글
[정보처리기사 필기] 소프트웨어 개발 (0) | 2023.02.20 |
---|---|
[정보처리기사 필기] 프로그래밍 언어 활용 (0) | 2023.02.20 |
[정보처리기사 필기] 데이터베이스 구축 (1) | 2023.02.20 |
[정보처리기사 필기] 정보시스템 구축관리 (1) | 2023.02.20 |
[정보처리기사] 시험범위 마지막 복습 (0) | 2022.05.09 |
댓글
최근에 올라온 글
TAG
- 배포
- 오늘의코딩
- 정보처리기사
- spring
- git연동
- AWS
- putty
- 노개북
- IT 5분 잡학사전
- java
- 웹페이지만들기
- EC2
- SQLD
- 정보처리기사 필기
- 독서후기
- filezila
- gradle build
- 기술블로그
- 노마드코더
- 개발도서
- intellij
- gradle
- 정보처리기사 실기
- ubuntu
- 호스팅영역
- LifecycleException
- JIRA
- 북클럽
- 실용주의프로그래머
- jdbc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함