본문 바로가기
Certificate/정보처리기사

[정보처리기사] 2020년 4회차 (1)소프트웨어 설계

by HJ0216 2023. 7. 15.

정보처리기사

애자일 방법론

- eXtreme Programming: 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
    - 5가지 핵심 가치: 의사소통, 피드백, 존중, 용기, 단순성
    - 12가지 기본 원리
        - Pair programming
        - 공동 코드 소유 Collective Ownership: 시스템에 있는 코드는 누구든지 언제라도 수정 가능
        - 지속적인 통합 Continuous Integration(CI): 매일 여러 번씩 소프트웨어를 통합하고 빌드
        - 계획 세우기 Planning Process
        - Small Release: 작은 시스템을 먼저 만들고, 짧은 단위로 업데이트
        - Metaphor: 공통적인 이름 체계와 시스템 서술서를 통해 고객과 개발자 간의 의사소통을 원활하게 함
        - Simple Design: 현재의 요구사항에 적합한 가장 단순한 시스템을 설계
        - Test Driven Development(TDD): 테스트를 먼저 수행하고, 이 테스트를 통과할 수 있도록 코드를 작성
        - Refactoring: 프로그램의 기능을 바꾸지 않으면서 중복 제거, 단순화 등을 위해 시스템을 재구성
        - 40-Hour Work
        - 고객 상주 On Site Customer
        - Coding Standard
- Scrum
    - 짧은 단위시간(Sprint) 내 실행가능한 SW 개발
    - 매일 15분 정도의 Scrum meeting 회의
- FDD(Feature-Driven Development): 기능주도 개발
- Crystal
- LEAN: 낭비 요소를 제거하여 품질 향상

 

요구사항 분석 기법

구조적 분석

: 하향식 접근 방식(폭포수 모형)

  • DFD: 프로세스와 프로세스 간에 존재하는 상호작용 표현
  • DD: 데이터 흐름도(Data Flow Diagram)에 기술된 자료들에 대해 정의
  • Mini spec.: 자료 흐름도를 보완 설명
  • ERD: 시스템에서 처리되는 개체와 속성 그리고 관계를 표현하여 개체를 모델화하는 도구
  • STD(State Transition Diagram): 시스템의 상태와 변화를 모델링

객체지향적 분석

: 상향식 접근 방식

  • Rumbaugh: 가장 일반적으로 사용되는 방법으로 분석 활동을 객체, 동적, 기능 모델로 나누어 순서대로 수행
    • 객체 모델링(Object Modeling): 클래스 다이어그램을 이용하여 시스템에서 요구되는 객체을 표현한 것
    • 동적 모델링(Dynamic Modeling): 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 사이의 동적인 행위를 표현한 것
    • 기능 모델링(Functional Modeling): 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 것
  • Booch: 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용
  • Jacobson: UseCase를 강조하여 사용
  • Coad와 Yourdon: E-R다이어그램을 사용
  • Wirfs-Brock: 분석과 설계간의 구분이 없음

 

언어 번역

  • Compiler
    • Java, C, C++ 등을 번역할 때 사용
    • 짜여진 소스코드 전체를 한번에 번역
  • Interpreter
    • Python, Perl 등을 번역할 때 사용
    • 명령 하나하나 실행할 때마다 번역
  • Assembler
    • assembly어를 기계어로 번역

 

객체지향 설계원칙, SOLID

  1. 단일 책임 원칙 (Single Responsibility Principle)
  2. 개방-폐쇄 원칙 (Open Closed Principle)
  3. 리스코프 치환 원칙 (Liskov Substitution Principle)
    : 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있음
  4. 인터페이스 분리 원칙 (Interface Segregation Principle)
    : 자신이 사용하지않는 인터페이스는 구현하지 말아야 함
  5. 의존 역전 원칙 (Dependency Inversion Principle)

 

아키텍쳐 패턴의 유형

  1. 계층화(Layers) 패턴: 시스템을 계층구조(Layer)로 쌓아둔 전형적 패턴
  2. 클라이언트-서버 패턴:
    • 서버(=1, 항시대기): 자원 제공
    • 클라이언트(=다수): 자원 요청, 연산 가능
  3. 마스터-슬레이브 패턴:
    • Client-Server 구조와 유사하나, Slaves는 연산이 불가하며 데이터 수집 기능만 수행
  4. 피어 투 피어 패턴:
    • 서버와 클라이언트가 서로 역할을 바꿀 수 있는 형태(torrent)
    • 두 가지 일을 병렬로 수행하는 멀티스레딩(자원요청/제원제공)이 특징
  5. 파이프-필터 패턴: 데이터의 흐름(단방향)의 각 단계를 파이프와 필터로 연결되어 처리 및 결과 송부 작업이 반복되는 패턴
    • 파이프: 각 단계명
    • 필터: 각 파이프를 통해 넘어온 데이터를 처리하고 캡슐화
  6. 모델-뷰-컨트롤러 패턴(MVC)
  7. 이벤트-버스 패턴: 특정 이벤트를 발행하면 해당 채널(버스)를 구독하고 있는 리스너들이 이벤트를 받아서 처리하는 형식
  8. 블랙보드 패턴: 공유데이터를 관리하는 블랙보드에 접근하여 원하는 데이터를 찾는 형식

 

코드 종류

  • 순차 코드(Sequence Code)
    • 일정 기준에 따라 차례로 일련번호를 부여
    • 순서 코드, 일련번호 코드
  • 블록 코드(Block Code)
    • 공통성이 있는 것끼리 블록으로 구분하고, 각 블록 내에서 일련번호를 부여
    • 구분 코드
    • 예: 10011100 : 총무부, 11011200 : 영업부
  • 10진 코드(Demical Code)
    • 코드화 대상 항목을 0~9까지 10진 분할하고, 다시 그 각각에 대해 10진 분할 하는 방법을 필요한 만큼 반복
    • 도서 분류식 코드
    • 예: 1000: 공학, 1100: 소프트웨어 공학, 1110: 소프트웨어 설계
  • 그룹 분류 코드(Group Classification Code)
    • 코드화 대상 항목을 일정 기준에 따라 대, 중, 소 분류 등으로 구분하고, 각 그룹 안에서 일련번호를 부여
    • 예: 1-01-001 : 본사-총무부-인사계, 2-01-001 : 지사-총무부-인사계
  • 연상 코드(Mnemonic Code)
    • 명칭이나 약호와 관계있는 숫자나 문자, 기호를 이용하여 코드를 부여
      예: TV-40 : 40인치 TV, L-15-220 : 15W 220V의 램프
  • 표의 숫자 코드(Significant Digit Code)
    • 코드화 대상 항목의 성질, 즉 길이, 넓이, 부피, 지름, 높이 등의 물리적 수치를 그대로 코드에 적용
    • 유효 숫자 코드
    • 예: 120-720-1500 : 두께 x 폭 x 길이가 120 x 720 x 1500인 강판
  • 합성 코드(Combined Code)
    • 필요한 기능을 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법
    • 예: 연상 코드 + 순차 코드, KE-711 : 대한항공 711기

 

GoF(Gang of Four) 디자인 패턴(시험 직전에 확인)

: 객체지향언어에서 자주 발생하는 문제에 대해 일반적인 소스코드 형식을 미리 만들어둔 해결 방법

생성 패턴(Creational Patterns) 5 : 객체 생성에 대한 패턴

종류 설명
Abstract Factory 특정 그룹에 속하는 여러 객체들을 하나의 팩토리로 묶어서 생성할 수 있는 패턴
Builder 복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴
Factory Method 클라이언트가 특정 객체의 생성을 직접 생성하지 않고 "팩토리" 역할을 하는 객체에 위임하는 패턴
Prototype 원본 객체를 복사하여 새 객체를 생성
SingleTon 오직 하나의 객체만을 생성

구조 패턴(Structural Patterns) 7 : 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴

종류 설명
Adapter 호환되지 않는 인터페이스를 가진 객체들간의 기능을 변환 제공하여 호환성을 확보
Bridge 추상화 클래스 계층과 구현 클래스 계층을 분리
Composite 복잡한 객체구조를 표현하여 객체집합 속에 또 다른 객체집합을 갖음
Decorator 새로운 기능이 추가될 때마다 새로운 객체를 만들고, 이전 객체의 기능은 새로운 객체내에서도 그대로 유지, 보장
Facade(퍼싸드) 서브시스템이 복잡할 경우 간단한 인터페이스를 통해 서브시스템의 주요기능을 사용할 수 있도록 함
Fly weight 인스턴스의 공유를 통해 불필요한 객체 생성을 하지않도록 함
Proxy 원래 객체에 대한 접근을 제어하므로, 요청이 원래 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 함

행위 패턴(Behavioral Patterns) 11 : 반복적으로 사용되는 객체들의 상호작용을 패턴화

 

자료 흐름도(Data Flow Diagram)

DFD

  • 자료 흐름도(Data Flow Diagram): 프로세스와 프로세스 간에 존재하는 상호작용 표현DFD
  • DD: 데이터 흐름도(Data Flow Diagram)에 기술된 자료들에 대해 정의
    • = 정의
    • + 연결
    • {} 반복
    • [] 선택
    • () 생략
    • ** 주석
  • Mini spec.: 자료 흐름도를 보완 설명

 

UML(Unified Modeling Language) (시험 직전에 확인)

  • 표준화된 모델링(개발하기 위한 그림을 그려주는) 언어
  • 구성 요소: 사물(Things), 관계(Relationship), 다이어그램(Diagram, 사물과 사물 간의 관계)

 

요구사항 명세(Requirement Specification)

: 분석된 요구사항을 바탕으로 모델을 작성하고 문서화하는 것

- 정형 명세 기법
    - 수학적 기호, 정형화된 표기법
    - 요구사항을 정확하고 간결하게 표현 가능
    - 표기법이 어려워 사용자가 이해하기 어려움
- 비정형 명세 기법
    - 일반 명사, 동사 등의 자연어를 기반으로 서술 또는 다이어그램으로 작성
    - 일관성이 떨어지고, 해석이 달라질 수 있음
    - 내용의 이해가 쉬어 의사소통이 용이

 

미들웨어

: 클라이언트와 서버 간의 통신을 담당하는 소프트웨어

  • Remote Procedure Call: 원격 프로시저를 로컬 프로시저처럼 호출(원격 데스크톱 등)
  • Message Oriented Middleware: 비동기형 메시지를 전달, 즉각적인 응답보다는 쌓아두고 시간이 있을 때 처리하는 방식
  • Transaction Processing Monitor: 항공기나 철도 예약 업무 등과 같은 온라인 트랜잭션을 처리 및 감시, 빠른 응답속도를 유지해야 할 경우 주로 사용
  • Web Application Server: 동적인 콘텐츠를 처리하기 위한 미들웨어로, 웹 환경을 구현하기 위해 사용
  • Object Request Broker: 객체들 간의 클라이언트/서버 관계를 맺어주는 미들웨어
  • DataBase: 데이터베이스와 연결하기 위한 미들웨어(ODBC, JDBC 등)

 

 

 

참고 자료

 

흥달쌤

흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기

www.youtube.com

 

컴파일러 & 어셈블러 & 인터프리터 알아보기

컴파일 컴퓨터는 0과 1로만 모든 명령을 이해하고 실행한다. 우리가 무언가를 요구한다 하더라도 컴퓨터는 이것을 0과 1로 이루어진 이진코드로 해석한다. 그런데 과연 어떤 기능으로 0과 1로 해

lucete1230-cyberpolice.tistory.com

 

컴파일러 Compiler / 어셈블러 Assembler / 인터프리터 Interpreter

Compiler란? 간단하게 말해 번역기입니다. 우리는 프로그램 코드를 고급언어(high-level language)라고 하는 Java, C, C++ 등으로 작성합니다. 하지만 컴퓨터는 기계 언어(Machin language)인 0과 1만 알아듣기 때

saeatechnote.tistory.com

 

1-3-6장. 코드 - B

코드(Code)의 개요 코드는 컴퓨터를 이용하여 자료를 처리하는 과정에서 분류, 조합 및 집계를 용이하게 하고, 특정 자료의 추출을 쉽게 하기 위해서 사용하는 기호이다. 코드는 정보를 신속, 정

lipcoder.tistory.com

 

DFD(Data Flow Diagram) 작성기법

DFD의 구성요소로는 프로세스, 데이터흐름, 데이터저장소, 외부엔티티 등이 있으며 표기법에 따라 표현하는 그림의 모양이 달라진다. 여기서는 Yourdon과 DeMarco에 의해 주장된 표기법을 기준으로

cjmyun.tripod.com

 

요구사항 명세(Requirement Specification) 기법

요구사항 명세(Requirement Specification)란? - 요구사항 명세는 분석된 요구사항을 바탕으로 모델을 작성하고 문서화하는 것을 의미 - 기능 요구사항을 빠짐없이 기술 - 비기능 요구사항을 필요한 것

computer-science-student.tistory.com

 

데이타 흐름도 (DFD) 작성요령

■ DFD는 데이터의 흐름을 나타내는 그림입니다 DFD(Data Flow Diagram: 데이터 흐름도)는 데이터...

blog.naver.com