티스토리 뷰

요구사항 확인

플랫폼 성능 특성의 측정 항목
  • 반환시간 (Turnaround Time) : 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간
  • 사용률 (Utilzation) : 작업을 처리하는 동안 CPU, 메모리 등의 자원 사용률
  • 응답 시간 (Response Time) : 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
  • 가용성 (Availablilty) : 시스템에서 제공되는 서비스가 다운되지 않고 정상적으로 유지되는 시간
요구사항의 분류
  • 기능적 요구사항 : 시스템이 외형적으로 보여주는 기능과 동작
    • 입출력기능, 데이터베이스 기능, 통신 기능 등
  • 비기능적 요구사항 : 시스템이 가져야 하는 기능 이외의 요구사항
    • 시스템의 전체적인 품질이나 고려해야 하는 제약사항 등
    • 사용 용이성, 효율성, 신뢰성, 이식성, 유연성, 확장성
    • 성능적인 면: 응답 속도, 자원 사용량 등
    • 보안 측면: 침입 대응, 침입 탐지, 사용자 인증, 권한 부여 등
요구사항 확인 단계

도출/추출(Elicitation) → 분석(Analysis) → 명세(Specification) → 확인(Validation)/검증(Valification)

  • 도출 (Requirement Elicitation)
    - 프로젝트 계획 단계에 정의한 문제의 범위 안에 있는 사용자의 요구를 찾는 단계
  • 분석 (Requirement Analysis)
    - 사용자의 요구를 추출하여 목표를 정하고 어떤 방식으로 해결할 것인지 결정하는 단계
    개발의 출발점이면서 실질적인 첫 번째 단계
    - 도메인 분석(Domain Analysis)은 요구에 대한 정보를 수집하고 배경을 분석하여 이를 토대로 모델링을 한다

    - 분석 결과의 문서화를 통해 향후 유지보수에 유용하게 활용 활 수 있다
    - 자료흐름도, 자료 사전 등이 효과적으로 이용될 수 있다
    - 보다 구체적인 명세를 위해 소단위 명세서(Mini-Spec)가 활용될 수 있다
    - 타당성 조사
    - 요구사항 명세를 문서화 작성하는 작업
    - 비용과 일정에 대한 제약설정
  • 명세 (Requirements Specification)
    비정형 명세기법은 사용자의 요구를 표현할 때 자연어를 기반으로 서술
    정형 명세기법은 사용자의 요구를 표현할 때 수학적인 원리와 표기법을 이용
    - 정형 명세기법은 비정형 명세기법에 비해 표현이 간결
    • 정형 명세기법(수학적 기반) : Z, VDM, Petri-Net, CSP, CCS, LOTOS
    • 비정형 명세기법(자연어 기반) : FSM, Decision Table, E-R모델링, State chart(SADT), UseCase
  • 검증 (Requirements Validation)
    - 요구사항이 고객이 정말 원하는 시스템을 제대로 정의하고 있는지 점검하는 과정
    - 개발완료 이후에 문제점이 발견될 경우 막대한 재작업 비용이 들 수 있기 때문에 중요
    - 요구사항이 실제 요구를 반영하는지, 문서상의 요구사항은 서로 상충되지 않는지 점검
요구 분석 시 필요한 기술
  • 청취과 인터뷰 질문 기술
  • 분석과 중재기술
  • 관찰 및 모델 작성 기술
요구 검증 방법
  • 동료 검토 (Peer Review) : 요구 사항 명세서 작성자가 요구 사항 명세서를 설명하고 이해관계자들이 설명을 들으면서 결함을 발견
  • 인스펙션 (Inspection) : 요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 확인하면서 결함을 발견
  • 워크 스루 (Walk Through) : 검토회의 전에 요구사항 명세서를 미리 배포하여 사전 검토 후, 짧은 검토 회의를 통해 오류를 조기 검출
자료 흐름도 (DFD: Data Flow Diagram)
  • 특징
    • 자료 흐름 그래프 또는 버블(bubble) 차트라고도 한다
    • 구조적 분석 기법에 이용된다
    • 시간 흐름을 명확하게 표현할 수 없다
    • 자료 흐름과 기능을 자세히 표현하기 위해 단계적으로 세분화된다
  • 구성요소
    • 프로세스 (Process) => 원
    • 자료 흐름 (Data Flow) => 화살표
    • 자료 저장소 (Data Store) => 평행선
    • 단말 (Terminator) => 사각형
  • 자료 사전 (DD: Data Dictionary)
    • = : 정의
    • + : 연결
    • ( ) : 생략
    • { } : 자료의 반복
    • [ ] : 자료의 선택
    • ** : 자료의 설명 (주석)
객체지향 분석
  • 특징
    • 동적 모델링 기법이 사용될 수 있다
    • 객체 중심으로 시스템을 파악하는 상향식 방식으로 볼 수 있다
    • 데이터와 행위를 하나로 묶어 객체를 정의 내리고 추상화시키는 작업
    • 소프트웨어를 개발하기 위한 비즈니스(업무)를 객체/속성, 클래스/멤버, 전체/부분 등으로 나눠 분석한다
    • 코드 재사용에 의한 프로그램 생산성 향상 및 요구에 따른 시스템의 쉬운 변경이 가능
  • 럼바우 (Rumbaugh)의 OMT (Object Modeling Technique) 기법
    • 객체 (Object) 모델링 : 객체 다이어그램 (Object Diagram)
    • 동적 (Dynamic) 모델링 : 상태 다이어그램 (State Diagram)
    • 기능 (Function) 모델링 : 자료 흐름도 (Data Flow Diagram)
  • Booch 방법
    • 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용하는 방법이다
  • Coad와 Yourdon 방법
    • E-R 다이어그램을 사용하여 객체의 행위를 데이터 모델링하는데 초점을 둔 방법
    • 객체 식별, 구조 식별, 주체 정의, 속성 및 관계 정의, 서비스 정의 과정으로 구성되는 것
  • Jacobson 방법
    • Use-Case를 강조하여 사용하는 방법
  • Wirfs-Brocks 방법
    • 분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행하는 분석 방법
UML (Unified Modeling Language)

- 표준화된 모델링 언어

  • 구성요소 : 사물 (Things), 관계 (Relationships), 다이어그램 (Diagram)
  • 사물 (Things)
    • 구조 사물 (Structural Things)
    • 행동 사물 (Behavioral Things)
    • 그룹 사물 (Grouping Things)
    • 주해 사물 (Annotation Things)
  • 관계 (Relationships)
    • 연관 관계 (Association)
      한 클래스가 다른 클래스에서 제공하는 기능을 사용하는 관계
    • 집합 관계 (Aggregation)
    • 포함 관계 (Composition)
    • 일반화 관계 (Generalization)
      - 상속 관계라고도 한다

      - 한 클래스가 다른 클래스를 포함하는 상위 개념일 때 이를 IS-A관계라고 한다
    • 의존 관계 (Dependency)
      한 사물의 명세가 바뀌면 다른 사물에 영향을 준다
      - 일반적으로 한 클래스가 다른 클래스를 오퍼레이션의 매개변수로 사용하는 경우
    • 실체화 관계 (Realization)
      인터페이스와 인터페이스를 갖는 클래스 간의 관계
      - 한 객체가 다른 객체에게 오퍼레이션을 수행하도록 지정하는 관계
  • 다이어그램
    • 정적 다이어그램(Structural Diagram) - 구조적 (Structural)
      • Class Diagram, Object Diagram, Component Diagram, Deployment Diagram, Composite Structure Diagram, Package Diagram
    • 동적 다이어그램(Behavioral Diagram) - 행위 (Behavioral)
      • Use Case Diagram, Sequence Diagram, State Diagram, Activity Diagram, Timing Diagram, Communication Diagram
  • 유스케이스 다이어그램(Use Case Diagram)
    사용자의 요구를 추출하고 분석하기 위해 주로 사용한다

    연동의 개념은 양방향으로 데이터를 파일이나 정해진 형식으로 넘겨주는 것이다
    액터 : 대상 시스템과 상호 작용하는 사람이나 다른 시스템에 의한 역할이다
    시스템 액터 : 본 시스템과 데이터를 주고받는 연동 시스템을 의미한다
    • 구성요소와의 관계
      • 연관 : 유스케이스와 액터의 관계
      • 확장 : 기본 유스케이스 수행 시 특별한 조건을 만족할 때 수행하는 유스케이스
      • 포함 : 시스템의 기능이 별도의 기능을 포함
      • 일반화 : 하위 유스케이스(액션)가 상위 유스케이스(액터)에게 기능/역할을 상속받음
      • 그룹화 : 여러 개의 유스케이스를 단순화하는 방법
  • 시퀀스(순차) 다이어그램(Sequence Diagram)
    객체 간의 동적 상호 작용을 시간 개념을 중심으로 모델링하는 것

    동적 측면을 모델링하기 위해 사용
    시간의 흐름에 따라 객체들이 주고받는 메시지의 전달 과정을 강조한다

    - 교류 다이어그램(Interaction Diagram)의 한 종류로 볼 수 있다
    - 회귀 메시지(Self Message), 제어블록(Statement block)등으로 구성
    • 구성 항목 #메실액객생
      • 메시지(Message) : 객체가 상호 작용을 위해 주고받는 메시지
      • 실행 상자(Active Box) : 객체가 메시지를 주고받으며 구동되고 있음을 표현
      • 액터(Actor) : 시스템으로부터 서비스를 요청하는 외부요소로, 사람이나 외부 시스템 의미
      • 객체(object) : 메시지를 주고받는 주체
      • 생명선(Life line) : 객체가 메모리에 존재하는 기간으로, 객체 아래쪽에 점선을 그어 표현
  • 클래스 다이어그램(Class Diagram)
    • 동작(Operation)
      • 클래스의 동작을 의미
      • UML에서는 동작에 대한 인터페이스를 지칭
      • 클래스에 속하는 객체에 대하여 적용될 메소드를 정의
애자일 (Agile)
  • 특징
    • 빠른 릴리즈를 통해 문제점을 빠르게 파악할 수 있다
    • 진화하는 요구사항을 수용하는데 적합하다
    • 문서보다 실행 가능한 소프트웨어를 중시한다
    • 계획을 따르기보다는 변화에 대응하는 것에 더 가치를 둔다
    • 고객과의 의사소통을 중요하게 생각한다
    • 계약 협상보다는 고객과의 협업에 더 가치를 둔다
    • 프로세스의 도구보다는 개인과 상호작용에 더 가치를 둔다
  • 종류
    • XP (eXtreme Programming), 스크럼 (Scrum), 칸반 (Kanban), Lean, 크리스탈 (Crystal), ASD, FDD, DSDM, DAD
  • 익스트림 프로그래밍 (eXtreme Programming)
    • 애자일 방법론 중 하나
    • 변경이 많은 요구를 접할 때 적절한 방법이다
    • 소스코드에 중점을 둔다
  • 익스트림 프로그래밍 (eXtreme Programming)의 5가지 핵심원칙 #피존의용단
    • 피드백 (Feedback)
    • 존중 (Respect)
    • 의사소통 (Communication)
    • 용기 (Courage)
    • 단순성 (Simplicity)
  • 익스트림 프로그래밍 (eXtreme Programming)의 기본원리
    • Continuous Integration (지속적인 통합)
    • Collective Ownership (공동 소유권)
    • Pair Programming (짝 프로그래밍)
    • Whole Team (전체 팀)
    • Small Releases (소규모 릴리즈)
    • Test-Driven Development (테스트 주도 개발)
    • Design Improvement (디자인 개선)
    • Refactoring(리팩토링)
  • 스크럼(Scrum)
    • 매일 정해진 시간과 정해진 장소에서 짧은 시간의 개발팀을 위한 프로젝트 관리 중심의 방법론
    • 30일마다 동작 가능한 제품을 제공하는 스프린트를 중심으로 한다
    • 제품 백로그(Product Backlog)는 스크럼 팀이 해결해야 하는 목록 (호스트웨어 요구사항, 아키텍처 정의 등)

화면 설계

사용자 인터페이스 (UI: User Interface)
  • 종류
    • CLI (Command Line Interface) : 대표적으로 DOS 및 Unix 등의 운영체제에서 조작을 위해 사용하던 것으로, 정해진 명령문자열을 입력하여 시스템을 조작하는 사용자 인터페이스
    • GUI (Graphical User Interface) : 마우스로 선택해 작업을 하는 그래픽 환경의 인터페이스
    • NUI (Natural User Interface) : 사용자의 말이나 행동, 자연스러운 움직임으로 기기를 조작하는 인터페이스
    • VUI (Voice User Interface) : 사람의 음성으로 기기를 조작하는 인터페이스
    • OUI (Organic User Interface) : 모든 사물과 사용자 간의 상호작용을 위한 인터페이스
  • 기본 원칙
    • 직관성 (Intuitiveness) : 누구나 쉽게 이해하고 사용할 수 있어야 한다
    • 유효성 (Efficiency) : 사용자의 목적을 정확하고 완벽하게 달성해야 한다
    • 학습성 (Learnability) : 누구나 쉽게 배우고 익힐 수 있어야 한다
    • 유연성 (Flexibility) : 사용자의 요구사항을 최대한 수용하고 실수를 최소화해야 한다
CASE (Computer-Aided Software Engineering)

- 소프트웨어 모듈의 재사용성 향상
- 유지보수를 간편하게 수행할 수 있다

소프트웨어 공학의 자동화를 의미
- 일관성 분석(consistency Analysis)을 통해 요구사항 변경사항의 추적 및 분석, 관리하고, 표준 준수 여부를 확인
- 소프트웨어 개발 과정의 일부 or 전체를 자동화하기 위한 도구 
표준화된 개발 환경 구축 및 문서 자동화 기능 제공
- 작업 과정 및 데이터 공유를 통해 작업자가 의사소통(communication) 증대

  • 주요 기능
    • 그래픽 지원, sw 생명주기 전 단계의 연결, 다양한 sw 개발 모형 지원
  • 원천 기술
    • 자동프로그래밍 기술, 분산 처리 기술, 구조적 기법, 프로토타이핑 기술, 정보 저장소 기술
  • CASE의 분류
    • 상위 CASE 도구 : 요구분석, 설계 단계를 지원
      • 모델들 사이의 모순 검사 기능
      • 모델의 오류검증 기능
      • 자료 흐름도 작성 기능
    • 중위 CASE 도구
      • 상세 설계
    • 하위 CASE 도구
      • 코드를 작성하고 테스트하며 문서화하는 과정 지원
      • 시스템 명세서
      • 전체 소스코드 생성 기능

애플리케이션 설계

객체지향 설계 원칙 #SOLID
  • SRP - 단일 책임 원칙 (Single Responsibility Principle)
    • 객체는 단 하나의 책임만 가져야 한다
  • DIP - 의존 역전 원칙 (Dependency Inversion Principle)
    • 의존 관계를 맺을 때, 변화하기 어려운 것에 의존해야 한다
  • ISP - 인터페이스 분리 원칙 (Interface Segregation Principle)
    • 클라이언트는 자신이 사용하지 않는 메서드와 의존관계를 맺으면 안 된다
    • 클라이언트가 사용하지 않는 인터페이스 때문에 영향을 받아서는 안된다
  • OCP - 개방-폐쇄 원칙 (Open-Closed Principle)
    • 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다
    • 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다
  • LSP - 리스코프 치환 원칙 (Liskov Substitution Principle)
    • 상속받은 하위 클래스는 어디에서나 자신의 기반타입(상위클래스)으로 교체할 수 있어야 한다
아키텍처 설계 과정
  • 설계 목표 설정 > 시스템 타입 결정 > 스타일 적용 및 커스터마이즈 > 서브시스템의 기능, 인터페이스 동작 작성 > 아키텍처 설계 검토
아키텍처 스타일 패턴
  • 파이프 필터 패턴(Pipe-Filter Pattern)
    • 데이터는 파이프를 통해 단방향으로 흐르며, 필터 이동 시 오버헤드가 발생할 수 있다
    • 서브시스템이 입력 데이터를 받아 처리하고 결과를 다른 시스템에 보내는 작업이 반복
    • ex) UNIX의 쉘(Shell)
  • 모델-뷰-컨트롤러 패턴(Model-View-Controller Pattern)
    • 3개의 서브시스템(모델, 뷰, 제어)으로 구성되어 있다.
    • 사용자 인터페이스를 담당하는 계층의 응집도를 높일 수 있고, 다른 UI를 만들어 결합도를 낮출 수 있다
  • 마스터-슬레이브 패턴(Master-Slave Pattern)
    • 일반적으로 실시간 시스템에서 사용된다
    • 마스터 프로세스는 일반적으로 연산, 통신, 조정을 책임진다
    • 마스터 프로세스는 슬레이브 프로세스들을 제어할 수 있다
    • ex) 장애 허용 시스템, 병렬 컴퓨팅 시스템
  • 레이어 패턴(Layers Pattern)
    • 계층 모델이라고도 한다
    • ex) OSI 7 계층
  • 클라이언트-서버 패턴(Client-Server Pattern)
    • 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴
    • 클라이언트나 서버는 요청과 응답을 받기 위해 동기화되는 경우를 제외하고는 서로 독립적이다
  • 브로커 구조(Broker Pattern)
    • 컴포넌트와 사용자를 연결해 주는 패턴
    • ex) 분산 환경 시스템
  • 피어-투-피어 구조(Peer-To-Peer Pattern)
    • 피어를 하나의 컴포넌트로 간주한다
    • 각 피어는 서비스를 호출하는 클라이언트가 될 수도, 서비스를 제공하는 서버가 될 수도 있는 패턴
    • ex) 멀티스레딩(Multi Threading) 방식 사용
  • 이벤트-버스 구조(Event-Bus Pattern)
    • 소스가 특정 채널에 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리하는 방식
    • 이벤트를 생성하는 소스(Source), 이벤트를 수행하는 리스너(Listener), 이벤트의 통로인 채널(Channel), 채널들을 관리하는 버스(Bus)
  • 블랙보드 구조(Blackboard Pattern)
    • 해결책이 명확하지 않은 문제를 처리하는데 유용한 패턴
    • ex) 음성인식, 차량 식별, 신호 해석
  • 인터프리터 구조(Interpreter Pattern)
    • 특정 언어로 작성된 프로그램 코드를 해석하는 컴포넌트를 설계할 때 사용
코드
  • 주요 기능
    • 식별, 분류, 배열, 표준화, 간소화, 연상, 암호화, 오류 검출 기능
  • 순차 코드(Sequence Code, 일련번호 코드) - 지명코드
    • 코드 설계에서 일정한 일련번호를 부여하는 방식
  • 블록 코드(Block Code, 구분 코드) - 부서코드
    • 공통성이 있는 것끼리 블록으로 구분하고, 각 블록 내에서 일련번호를 부여하는 방법
  • 10진 코드(Decimal Code, 도서 분류식 코드) - 도서 분류 코드
    • 10진법의 원리에 맞추어 대분류, 중분류, 소분류하여 부여한 코드
  • 그룹 분류 코드(Group Classification Code) - 학번, 사원번호 코드
    • 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하고, 각 그룹 안에서 일련번호를 부여하는 방법
  • 연상 코드(Mnemonic Code, 기호 코드) - 상품명, 거래처명
    • 명칭이나 약호와 관계있는 숫자나 문자, 기호를 이용하여 코드를 부여하는 방법
  • 표의 숫자 코드(Significant Digit Code, 유효 숫자 코드)
    • 코드화 대상 항목의 중량, 면적, 용량 등의 물리적 수치를 이용하여 만든 코드
  • 합성 코드(Combined Code) - 연상 코드+순차 코드
    • 2개 이상의 코드를 조합하여 만드는 방법
구조적 설계 도구
  • HIPO(Hierarchy Input Process Output)
    • 하향식 소프트웨어 개발을 위한 문서화 도구이다
    • HIPO 차트 종류에는 가시적 도표, 총체적 도표, 세부적 도표가 있다
    • 기능과 자료의 의존 관계를 동시에 표현할 수 있다
    • 보기 쉽고 이해하기 쉽다
  • NS chart (Nassi-Schneiderman chart)
    • 논리의 기술에 중점을 둔 도형식 표현 방법이다
    • 연속, 선택 및 다중 선택, 반복 등의 제어논리 구조로 표현한다
    • 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는데 적합하다
    • 논리의 기술에 중점을 두고 도형을 이용한 표현 방법이다
    • 이해하기 쉽고 코드 변환이 용이하다
객체지향 기법
  • 객체(Object) - (속성 + 메소드)
    • 실세계에 존재하거나 생각할 수 있는 것을 말한다
    • 자료 구조와 이에 수행되는 함수들을 가진 하나의 독립된 존재
    • 객체의 상태는 속성값에 의해 정의
  • 속성(Attribute)
    • 객체가 가지고 있는 특성, 객체의 현재 상태를 의미
    • 객체의 상태, 성질, 분류, 식별, 수량 등을 표현
  • 클래스(Class)
    • 하나 이상의 객체들을 묶어서 하나의 공통된 특성을 표현한 것이다
    • 객체지향 프로그램에서 데이터를 추상화하는 단위
  • 메소드(Method)
    • 클래스로부터 생성된 객체를 사용하는 방법
  • 인스턴스(Instance)
    • 같은 클래스에 속한 각각의 객체를 의미
  • 메시지(Message)
    • 객체에게 어떤 행위를 하도록 지시하는 명령
  • 캡슐화(Encapsulation)
    • 속성과 관련된 연산(Operation)을 클래스 안에 묶어서 하나로 취급하며 필요한 인터페이스만을 밖으로 드러낸다
    • 객체지향에서 정보 은닉과 가장 밀접한 관계가 있는 것
    • 인터페이스가 단순화
    • 변경 발생 시 오류의 파급효과가 적다
    • 인터페이스가 단순해지고 객체 간의 결합도가 낮아진다
    • 재사용이 용이
  • 정보 은닉(Information Hiding)
    • 객체가 가지고 있는 속성과 오퍼레이션의 일부를 감추어서 객체의 외부에서는 접근이 불가능하다
    • 필요하지 않은 정보는 접근할 수 없도록 하여 한 모듈 또는 하부시스템이 다른 모듈의 구현에 영향을 받지 않게 설계되는 것을 의미한다
    • 모듈들 사이의 독립성을 유지시키는 데 도움이 된다
    • 설계에서 은닉되어야 할 기본 정보로는 IP주소와 같은 물리적 코드, 상세 데이터 구조 등이 있다
    • 모듈 변경 시 영향을 받지 않아 수정, 시험, 유지보수 용이
  • 상속성(Inheritance)
    • 상위클래스에서 속성이나 연산을 전달받아 새로운 형태의 클래스로 확장하여 사용하는 것을 의미한다
    • 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것을 의미한다
  • 다형성(Polymorphism)
    • 상속받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용될 수 있는 성질이다
    • 코드를 변경하지 않고 새로운 클래스를 쉽게 추가할 수 있게 한다
    • 메소드 오버라이딩(Overriding) 상위 클래스에서 정의한 일반 메소드의 구현을 하위 클래스에서 재정의 할 수 있다
    • 메소드 오버로딩(Overloading) 메소드명은 동일하지만 매개 변수 타입이나 개수를 다르게 하여 재정의 할 수 있다
  • 일반화(Generalization)
    • 공통 성질을 상위 객체로 정의하고, 특수화된 객체들을 하위의 부분형 객체로 정의하는 추상화 방법이다.
    • is a : 클래스들 간의 개념적인 포함 관계
  • 집단화(Aggregation)
    • 클래스들 사이의 "부분-전체 (partwhole)" 또는 "부분 (is-a-partof)"의 관계로 설명되는 연관성을 나타낸다
    • 클래스 간의 구조적인 집약 관계 "클래스 A는 클래스 B와 클래스 C로 구성된다"
    • 서로 관련 있는 여러 개의 객체를 묶어 한 개의 상위 객체를 만드는 것이다
  • 추상화(Abstraction)
    • 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시키는 것
    • 소프트웨어 설계에 사용되는 대표적인 3가지 추상화 기법
    • 제어 추상화, 과정 추상화, 자료 추상화
디자인패턴

- 개발자들 사이의 의사소통을 원활하게 할 수 있다
- 소프트웨어의 품질과 생산성을 향상시킬 수 있다
- 소프트웨어 구조 파악이 용이하다

- 재사용을 위한 개발 시간이 단축된다
- 디자인 패턴을 목적(Purpose)으로 분류할 때 생성, 구조, 행위로 분류할 수 있다

  • 생성패턴(Creational Pattern) #추빌팩프싱
    • 추상팩토리 (Abstract Factory)
    • 빌더 (Builder)
    • 팩토리 메소드 (Factory Method)
      • Virtual-Constructor 패턴 (가상 생성자)
      • 상위클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위클래스에서 인스턴스를 생성한다.
      • 를 생성하기 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스화 될 것인지는 서브 클래스가 결정
    • 프로토타입 (Prototype)
      • prototype을 먼저 생성하고 인스턴스를 복제하여 사용하는 구조
    • 싱글톤 (Singleton)
      • 특정 클래스의 인스턴스가 오직 하나임을 보장하고, 이 인스턴스에 대한 접근 방법을 제공한다
  • 구조패턴 (Structural Pattern) #어브컴프데퍼플
    • 어댑터(Adapter)
      • 기존에 구현되어 있는 클래스에 기능 발생 시 기존 클래스를 재사용할 수 있도록 중간에서 맞춰준다
    • 브리지(Bridge)
    • 컴포지트(Composite)
    • 프록시(Proxy)
    • 데코레이터(Decorator)
    • 퍼싸드(Façade)
    • 플라이웨이트(Flyweight)
  • 행위 패턴 (Behavioral Pattern)
    - 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법
    • Chain of Responsibility 책임 연쇄
    • Command 커맨드
    • Interpreter 인터프리터
    • Iterator 반복자
    • Mediator 중재자
    • Memento 메멘토
    • Observer 옵저버
    • State 상태
    • Strategy 전략
    • Template Method 템플릿 메소드
    • Visitor 방문자

인터페이스 설계

미들웨어 (Middleware)

여러 운영체제에서 응용 프로그램들 사이에 위치한 소프트웨어
분산 시스템에서 다양한 부분을 관리하고 통신하며 데이터를 교환하게 해주는 소프트웨어
위치 투명성(Location Transparency)을 제공

컴포넌트가 요구하는 서비스의 구현을 제공
애플리케이션과 사용자 사이 외에도 프로그램과 환경 간에서 분산서비스를 제공
클라이언트와 서버 간의 통신을 담당하는 시스템 소프트웨어

  • DB (Date Base)
    • 클라이언트에서 원격의 DB와 연결하기 위한 미들웨어
  • RPC (Remote Procedure Call)
    • 원격 프로시저 호출은 응용 프로그램의 프로시저를 사용하여, 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 방식의 미들웨어
  • MOM (Message Oriented Middlware)
    • 느리더라도 안정적인 응답에 주로 사용
    • 독립적인 애플리케이션을 하나의 통합된 시스템으로 묶기 위한 역할
    • 메시지 기반의 비동기형 메시지를 전달하는 방식
    • 송/수신 측 연결 시 메시지 큐를 활용하는 방법이 있다
  • TP-Monitor ( Transaction Processing Monitor)
    • 트랜잭션 처리 모니터는 온라인 트랜잭션 업무에서 트랜잭션을 처리 및 감시하는 미들웨어
    • 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무에 사용 (항공기, 철도예약)
  • ORB (Object Request Broker)
    • 객체 요청 브로커는 객체 지향 미들웨어로, 코바(cobba) 표준 스펙을 구현한 미들웨어
  • WAS (Web Application Server)
    • 웹 애플리케이션 서버는 동적인 콘텐츠를 처리하기 위해 사용되는 미들웨어
    • 웹 환경 구현
    • HTTP 세션처리를 위한 웹서버 기능과 미션-크리티컬한 기업 업무까지 JAVA, EJB 컴포넌트 기반으로 구현 가능
  • 레거시웨어 (Legacyware)
    • 기존 애플리케이션에 새로운 업데이트된 기능을 덧붙이고자 할 때 사용되는 미들웨어
인터페이스 (Interface)
  • 소프트웨어에 의해 간접적으로 제어되는 장치와 소프트웨어를 실행하는 하드웨어
  • 기존의 소프트웨어와 새로운 소프트웨어를 연결하는 소프트웨어
  • 순서적 연산
컴포넌트 (Component)
  • 명백한 역할을 가지고 독립적으로 존재할 수 있는 시스템의 부분
  • 넓은 의미에서는 재사용되는 모든 단위
  • 인터페이스를 통해서만 접근이 가능
소프트웨어 공학
  • 모델링(Modeling)
    • 엔지니어들이 공통된 개념을 공유하는데 도움을 준다
    • 절차적인 프로그램을 위한 자료 흐름도는 프로세스 위주의 모델링 방법이다
    • 구조적 방법론에서는 DFD(Data Flow Diagram), DD(Data Dictionary) 등을 사용하여 요구 사항의 결과를 표현
    • 객체지향 방법론에서는 UML 표기법을 사용
댓글
최근에 올라온 글
TAG
more
글 보관함
«   2025/02   »
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