소프트웨어 설계
- 상위 설계 : 아키텍처 설계, 데이터 설계, 시스템 분할, 인터페이스 정의, 사용자 인터페이스 설계
- 하위 설계 : 모듈 설계, 인터페이스 작성
시스템 구성 요소
- 입력
- 처리
- 출력
- 제어
- 피드백
CASE 원천 기술
- 구조적 기법
- 프로토타이핑 기술
- 응용 프로그래밍 기술
- 정보 저장소 기술
- 분산처리 기술
HIPO(Hierarchy Input Process Output)
가시적 도표, 총체적 다이어그램, 세부적 다이어그램으로 구성된다. 하향식 소프트웨어 개발을 위한 문서화 도구이다.
미들웨어
운영체제와 소프트웨어의 중간에서 조정과 중개의 역할을 해주는 소프트웨어
- RPC(Remote Procedure Call, 원격 프로시저 호출) : 클라이언트가 원격제어를 통하여 원격 위치에 있는 프로시저를 실행할 수 있게 하는 프로세스 간 통신 기술
- MOM(Message Oriented Middleware, 메세지 지향 미들웨어) : 메세지 기반의 비동기형 메세지를 전달하는 미들웨어로 속도가 느리지만 안정적인 응답을 한다.
- TP-Monitor(Transection Processing Monitor, 트랜젝션 처리 모니터) : 온라인 트랜젝션 업무에서 트랜젝션을 처리하고 감시하는 미들웨어.
- WAS(Web Application Server, 웹 애플리케이션 서버) : 사용자의 요구에 따라 변하는 동적인 콘텐츠를 처리하기 위해 사용되는 미들웨어.
- DB(Database, 데이터베이스) : 클라이언트에서 원격의 데이터베이스와 연결하기 위한 미들웨어. 2-Tier 아키텍처라고 한다.
- ORB(Object Request Broker, 객체 요청 브로커) : 객체 지향 미들웨어로, CORBA 표준 스펙을 구현한 미들웨어.
추상화 기법
- 과정 추상화 : 자세한 수행 과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법
- 데이터(자료) 추상화 : 데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법
- 제어 추상화 : 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법
클래스 설계 원칙(SOLID)
- 단일 책임 원칙(SRP, Single Responsibility Principle) : 한 클래스는 단 하나의 책임만 가져야 한다.
- 개방-폐쇄 원칙(OCP, Open-Closed Principle) : 클래스는 확장에는 열려 있어야하며 변경에는 닫혀 있어야 한다.
- 리스코프 치환 원칙(LSP, Liskov Substitution Principle) : 자식 클래스는 최소한 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다.
- 인터페이스 분리 원칙(ISP, Interface Segregation Principle) : 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다.
- 의존 역전 원칙(DIP, Dependency Inversion Principle) : 각 객체들 간의 의존 관계가 성립될 때, 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존 관계를 맺어야 한다.
GoF(Gang of Four) 디자인 패턴
행동 패턴, 생성 패턴, 구조 패턴으로 이루어진다.
- 행동 패턴
- 중재자(Mediator) : 객체간의 통제와 지시의 역할을 하는 중재자를 두어 객체지향 목표를 달성하게 해준다. 상호작용을 캡슐화하여 결합도를 낮추기 위해 사용한다.
- 상태(State) : 이벤트를 객체 상태에 따라 다르게 처리해야 할 때 사용한다.
- 책임 연쇄(Chain of Responsibility) : 요청을 처리할 수 있는 객체가 둘 이상 존재하여, 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴.
- 커맨드(Command) : 명령을 캡슐화하여 재사용하거나 취소할 수 있도록 필요한 정보를 로그에 남기는 형태.
- 인터프리터(Interpreter) : 언어에 문법을 표현수단으로 정의하고, 해당 언어로 된 문장을 해석하는 해석기를 사용하는 패턴.
- 반복자(Iterator) : 내부 표현을 보여주지 않고 순회하는 패턴.
- 메멘토(Memento) : 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 되돌릴 수 있는 기능을 제공하는 패턴.
- 옵저버(Observer) : 이벤트 발행과 구독, 상태 변화 전달 등 한 객체의 상태가 변화하면 객체에 상속되어있는 다른 객체들에게 변화된 상태를 전달하는 패턴.
- 전략(Strategy) : 다양한 알고리즘을 캡슐화하여 상호 교환, 독립적 사용이 가능하게 한다.
- 템플릿 메소드(Template Method) : 상위에서 인터페이스를 정의하고 하위에서 이를 구체화한다.
- 방문자(Visitor) : 처리 기능을 별도의 클래스로 구성하여 분리된 처리 기능은 각 클래스를 방문하여 수행된다.
- 생성 패턴
- 팩토리 메소드(Factory Method) : 상위 클래스는 객체를 생성하는 인터페이스만 제공하고, 하위 클래스에서 인스턴스를 생성한다.
- 프로토타입(Prototype) : 프로토타입을 먼저 생성하고 인스턴스를 복제하여 사용한다.
- 싱글톤(Singleton) : 클래스 내 생성되는 인스턴스가 하나만 필요할 때 사용한다.
- 빌더(Builder) : 분리된 인스턴스를 조합하여 객체를 생성한다. 같은 객체를 생성해도 다른 결과를 도출할 수 있다.
- 추상 팩토리(Abstract Factory) : 상위 클래스의 객체 생성코드를 하위 클래스가 상속받는다.
- 구조 패턴
- 어댑터(Adapter) : 기존에 구현되어 있는 클래스에 기능 발생 시 기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 한다.
- 브릿지(Bridge) : 추상과 구현을 분리하여 결합도를 낮춘 패턴이다.
- 합성(Compositie) : 개별 객체와 복합 객체를 클라이언트에서 동일하게 사용하도록 하는 패턴이다. 트리 구조를 사용한다.
- 데코레이터(Decorator) : 클래스에 기능을 추가하기 위해 다른 객체를 붙인다.
- 프록시(Proxy) : 접근이 어려운 객체에 접근할 수 있도록 인터페이스 역할을 수행한다.
객체지향 방법론
- 럼바우(Rumbaugh) 방법론 : 그래픽 표기법을 이용하여 소프트웨어 구성 요소를 모델링함.
- 객체 모델링(객체 다이어그램), 동적 모델링(상태 다이어그램), 기능 모델링(자료 흐름도, DFD)
- 자료 흐름도 기호 : 프로세스(원), 자료 흐름(화살표), 자료 저장소(막대 바 2개 위 아래로), 터미널(직사각형)
- 자료 사전 기호 : =(정의), +(연결), {}(반복), [](택 1), ()(생략), **(주석)
- Coad와 Yourdon 방법론 : E-R 다이어그램을 사용하여 객체의 행위를 모델링
- Jacobson 방법: 유스케이스를 사용하는 분석 방법
- Booch 방법 : 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용
애자일 방법론
- 익스트림 프로그래밍(XP) : 5가지 핵심 가치로 의사소통, 단순성, 피드백, 용기, 존중
- 스크럼(Scrum) : 프로젝트를 30일마다 동작 가능한 제품을 제공하는 스프린트로 분리하고, 매일 15분 정도 짧게 회의한다.
UML(Unified Modeling Language)
시스템 분석, 설계, 구현 등 개발과정에서 개발자와 고객 또는 개발자 상호간의 의사소통이 원활하게 이루어지도록 표준화한 대표적인 객체지향 모델링 언어이다. 구성 요소로는 사물(Things), 관계(Relationships), 다이어그램(Diagrams)이다.
- 사물 : 구조(Structural), 행동(Behavioral), 그룹(Grouping), 주해(Annotation)
- 관계 : 연관(Association), 집합(Aggregation), 포함(Composition), 일반화(Generalization), 의존(Dependency), 실체화(Realization)
- 다이어그램
- 구조적(Structural) 다이어그램 - 정적 모델링
- 클래스(Class)
- 객체(Object)
- 컴포넌트(Component)
- 배치(Deployment)
- 복합체 구조(Composite Structure)
- 패키지(Package)
- 행위(Behavioral) 다이어그램 - 동적 모델링
- 유스 케이스(Use Case) : 구성 요소 간의 관계로 연관 관계, 포함 관계, 확장 관계, 일반화 관계가 포함됨.
- 순차(Sequence)
- 커뮤니케이션(Communication)
- 상태(State)
- 활동(Activity)
- 상호작용 개요(Interaction Overview)
- 타이밍(Timing)
- 구조적(Structural) 다이어그램 - 정적 모델링
EAI(Enterprise Application Integration)
기업 응용프로그램 통합으로 기업용 응용프로그램의 구조적 통합 방안을 가리킴.
구축 유형
- Point-to-Point
- Hun & Spoke
- Message Bus(ESB)
- Hybrid
FEP(Front-End Processor)
입력되는 데이터를 컴퓨터의 프로세서가 처리하기 전에 미리 처리하여 프로세서가 차지하는 시간을 줄여주는 프로그램이나 하드웨어
GPL(General Public Licnese)
자유 소프트웨어 재단(OSF)에서 만든 자유 소프트웨어 라이선스.
Duplexing
이중화로 데이터베이스의 회복 기법 중 가장 간단한 것이다.