본문 바로가기

자격증/정보처리기사

[정처기실기] 흥달쌤 라이브특강 앞부분 정리

 

* 소프트웨어 공학이란?

품질 높은 소프트웨어를 효율적으로 개발하기 위한 학문. 

 

* 소프트웨어 공학의 3R

 - 역공학 (Reverse Engineering) _ 소스코드를 보면서 역으로 산출물을 내는거

 - 재공학 (Re- Engineering) : 분석 > 재구성 > 역공학 > 이관

 - 재사용 (Reuse) 

 

 

* 소프트웨어 개발 단계

계획 

분석  __ 요구사항 분석 (도출>분석>명세>확인)

설계 __ 모델링, SB

구현

테스트 __ 단위 / 통합 / 시스템 / 인수 테스트**

유지보수 __ 수정보수, 향상보수 등

 

 

* 소프트웨어 개발 방법론

 - 폭포수 모델 (Waterfall Model) _ 선형순차모델

 - 프로토타이핑 모델 (Prototyping Model) _ 시제품

 - 나선형 모델 (Spiral Model) _ '계획 > 위험분석 > 개발 > 평가' 반복

 - RAD 모델

 - V모형 _ 테스트 단계에 초점을 맞춘것.

 - 4세대 기법 (4th Generation Techniques)

 

* 애자일 방법론 **

 - XP : 의사소통, 용기, 피드백, 존중, 단순성

 - 스크럼 : 스프린트, 백로그 _스프린트 단위로 개발, 매일 10~15분 회의, 스프린트 백로그/제품 백로그

 - 크리스털 : 규모에 따른 방법론 제공

 - FDD : 기능주도 개발 

 

 

* 프로젝트 관리

 - 프로젝트 핵심 관리대상

  사람, 문제, 프로세스

 - PMBOK

  프로젝트 관리 프로세스 및 지식체계

  착수, 계획, 실행, 통제, 종료

 

 

* 비용산정

 - 하향식 : 전문가 판단 기법, 델파이 기법

 - 상향식 : 원시코드 라인 수, 단계별 노력 

 - 수학적

  COCOMO : 조직형(5만이하), 반분리형(30만이하), 내장형(30만이상)

  Putnam : Rayleigh-Norden, SLIM

  FP (Function Point) : 내부 논리 파일(ILF), 외부 연계 파일(EIF), 외부 입력(EI), 외부 출력(EO), 외부 조회(EQ)

 

 

* 일정 산정

 - WBS (Work Breakdown Structure)

 - CPM 네트워크 작성

 - 임계경로 계산

 - 간트 차트 표현

 

 

플랫폼

 * CPND

 - Contents : 텍스트, 이미지, 오디어, 비디오 등

 - Platform : 웹사이트, 애플리케이션 등

 - Network : 통신 시스템

 - Device : 스마트폰, 컴퓨터, 태블릿 등 

 

 

* 미들웨어

 - 원격 프로시저 호출 (Remote Procedure Call) 

 - 메시지 지향 미들웨어 (MOM, Message Oriented Middleware)

 - ORB (Object Request Broker)

 - DB 접속 미들웨어

 - TP 모니터 _ DB트랜잭션 관련

 - 웹 애플리케이션 서버 (Web Application Server)

    WAS (동적) / WEB (정적)

 - 엔터프라이즈 서비스 버스

 

 

* 요구사항 개발 프로세스 (도분명확)

 - 도출 (Elicitation) : 인터뷰, 설문조사, 브레인스토밍, 워크샵 등

 - 분석 (Analysis) : DFD, Data Dictionary, Mini-Spec(소단위 명세서), ERD, STD(상태전이도), UML(표준화된도형_객체지향)

 - 명세 (Specification) : 정형/비정형, 기능/비기능

 - 확인 및 검증 (Validation & Verification)

 

 

* HIPO

 - 하향식 소프트웨어 개발을 위한 문서화 도구  (하향식_절차적, 상향식_객체지향)

 - HIPO Chart 종류

  > 가시적 도표 (Visual Table of Content)

  >  총체적 도표(Overview Diagram)

  > 세부적 도표 (Detail Diagram)

 

 

* 객체지향 분석 방법론

 - Rumbaugh (럼바우) 방법

  > 객체 모델링 (Object Modeling) : 객체 다이어그램

  > 동적 모델링 (Dynamic Modeling) : 상태 다이어그램

  > 기능 모델링 (Functional Modeling) : DFD (Data Flow Diagram)

 - Booch (부치) 방법 : 미시적 및 거시적 개발 프로세스.

 - Jacobson 방법 : Use case를 중심으로 한 분석 방법.

 - Coad와 Yourdon 방법 : E-R 다이어그램 사용.

 - Wirfs-Brock 방법 : 분석과 설계의 구분 없음.

 

* 설계의 종류

 - 상위 설계 : 아키텍처, 데이터 등   (분석, 설계)

 - 하위 설계 : 모듈, 자료구조, 알고리즘   (구현, 테스트)

 - 협약에 의한 설계 : 선행조건, 결과조건, 불변조건

 

 

* 소프트웨어 아키텍처 4 + 1 뷰  (사용자관점)

 - 논리 뷰 (Logical View) : 시스템의 기능적 요구사항.

 - 구현 뷰 (Implementation View) : 모듈의 구성과 개발자의 관점을 반영.

 - 프로세스 뷰 (Process View) : 프로그램 실행 시의 시스템을 표현.

 - 배치 뷰 (Deployment View) : 시스템의 물리적 배치.                       // 개발자 관점

 - 유스케이스 뷰 (Use Case View) : 아키텍처 설계 및 검증을 주도.    // 사용자 관점

 

 

* 소프트웨어 아키텍처 패턴 종류

 - 계층화 패턴

 - 클라이언트 - 서버 패턴

 - 마스터 - 슬레이브 패턴  _ 위와 비슷, 생각없이 데이터만 전달

 - 파이프 - 필터 패턴  _ 옆으로옆으로 전달

 - 브로커 패턴 

 - 피어 투 피어 패턴 _ 토렌트, 소리바다

 - 이벤트 - 버스 패턴

 - 모델 - 뷰 - 컨트롤러 패턴 (MVC 패턴)

 - 블랙보드 패턴

 - 인터프리터 패턴

 

 

* UML (Unified Modeling Language)

 - 시스템의 구조와 동작을 명세하는 표준화된 모델링 언어

 - UML 특징

  > 가시화 언어

  > 명세화 언어

  > 구축 언어

  > 문서화 언어

 

 

* UI 설계

 - UI : 정보기기와 사용자 간의 상호작용을 가능하게 하는 매개체

 - UX : UI를 통해 경험하는 모든 것.

 - UI 유형

  > CLI (Command Line Interface)  _ CUI

  > GUI (Graphical User Interface)

  > NUI (Natural User Interface)

  > OUI (Organic User Interface) 

  > VUI (Voice User Interface)

 

 

* UI 설계 도구

 - 와이어프레임 (Wireframe) _ 기획자, 디자이너

 - 스토리보드 (SB)

 - 프로토타입 

 - 목업 (Mockup) _ 정적 모형

 - 유스케이스

 

 

* UI 설계원칙 4가지 **

 - 직관성 : 누구나 쉽게 이해하고 사용할 수 있어야 함. 

 - 유효성 : 사용자 목적을 달성, 유용하고 효과적이여야 함.

 - 학습성 : 사용자가 쉽게 배우고 익힐 수 있어햐 함.

 - 유연성 : 사용자 요구 최대한 수용하면서 오류를 최소화.

 

 

* 협업도구

여러 사람들이 프로젝트를 동시에 수행할 수 있도록 도와주는 소프트웨어.

 

* 형상관리 도구

 - 소프트웨어 개발과정에서 발생하는 모든 변경을 통제하고 관리하는 방법.

 - 변경관리 / 버전관리 / 형상관리

 - 형상관리 절차

  > 형상 식별 : 관리 항목 구분

  > 형상 통제 : 변경 요청을 검토하고, CCB(형상관리위원회)의 승인을 거쳐, 베이스라인에 반영.

  > 형상 검사 : 검토 

  > 형상 기록 : 기록

 - 형상관리 도구 (CVS, SVN, GIT) 

 

 

* 버전관리(형상관리) 도구 사용 방식

개발자 == import ==>      [ 저장소 ]       ==   check out    ==>         다른 개발자

                                      [ Repository ]  <==  add, commit  ==   (새로만든거 add, 수정한거 commit, check in)

                                                                 ==      update     ==(add, commit된걸 받는거)

 - Trunk, Branch, Merge 

 

 

* 빌드 도구

실행 가능한 소프트웨어로 변환해주는 도구

(빌드 도구 종류)

 - Make : Unix 계열 운영체제에서 주로 사용.

 - Ant : Java 기반의 빌드 도구로, XML 기반의 빌드 스크립트를 사용.

 - Maven : 의존성 관리와 프로젝트 라이프 사이클 관리에 강점.

 - Jenkins : Java 기반의 오픈소스 지속적 통합 서비스 도구.

 - Gradle : Groovy 기반의 오픈 소스 빌드 자동화 도구. (안드로이드 개발)

 

 

* 프레임워크

개발에 필요한 구성요소와 아키텍처를 제공하는 반제품 형태의 소프트웨어

전자정부 프레임워크, 스트럿츠, 스프링

ORM프레임워크 : 아이바티스(iBatis), 마이바티스, 하이버네이트(Hibernate)

(프레임워크 특징)

 - 모듈화 

 - 재사용성

 - 확장성

 - 제어의 역흐름

 

 

* 라이브러리

프로그램에서 자주 사용되는 루틴이나 리소스(클래스, 템플릿, 함수 등)를 모아 놓은 것.

내부 라이브러리 / 외부 라이브러리 

 

* API (Application Programming Interface) 

다른 소프트웨어 또는 서비스와 상호 작용하는 데 사용되는 인터페이스. 

 

* 모듈의 독립성 (재사용성) 높이기 위해 => 응집도는 높게, 결합도는 낮게

* 결합도 

 - 자료 결합도 (Data Coupling) : 값 전달

 - 스탬프 결합도 (Stamp Coupling) : 배열 등 전달

 - 제어 결합도 (Control Coupling) : 제어 요소 전달

 - 외부 결합도 (External Coupling) : 다른 모듈 변수 사용

 - 공통 결합도 (Common Coupling) : 전역변수 사용

 - 내용 결합도 (Content Coupling) : 다른 모듈 기능 이용

 

* 응집도

 - 기능적 응집도 (Functional Cohesion): 단일한 목적 수행.

 - 순차적 응집도 (Sequential Cohesion) : 출력값을 입력값으로 사용.

 - 통신적 응집도 (Communication Cohesion) : 동일한 입력, 출력

 - 절차적 응집도 (Procedural Cohesion) : 순차적 수행.

 - 시간적 응집도 (Temporal Cohesion) : 같은 시간 기능 수행.

 - 논리적 응집도 (Logical Cohesion) : 유사한 성격.

 - 우연적 응집도 (Coincidental Cohesion) : 연관관계 없음.

 

 

 * 팬인 (Fan-in), 팬아웃 (Fan-out)

 

 

* MVC 모델 계층

 - 프레젠테이션 계층 (Presentation Layer) : 사용자 인터페이스. VIEW

 - 제어 계층 (Control Layer) : 요청을 분석하고, 적절한 비즈니스 로직 호출.  

 - 비즈니스 로직 계층 (Business Logic Layer) : 핵심 업무 로직을 처리.  (실제 비즈니스 로직)

 - 퍼시스턴스 계층 (Persistence Layer) : 데이터 관리.

 - 도메인 모델 계층 (Domain Model Layer) : 데이터를 전달.

 

 

* 시큐어 코딩

OWASP : 오픈소스 웹 애플리케이션 보안 프로젝트 ( OWASP top 10)

 - 시큐어 코딩 가이드

  > 입력 데이터 검증 및 표현 : SQL, Injection, XSS, 자원삽입 등

  > 보안 기능 : 부적절한 인가, 취약한 암호화 알고리즘, 패스워드 평문저장 등

  > 시간 및 상태 : 경쟁조건, 종료되지 않는 반복문

  > 에러처리 : 오류메시지 정보 노출, 부적절한 예외 등

  > 코드 오류 : 널 포인터 역참조 등

  > 캡슐화

  > API 오용

 

 

* 배치 프로그램    ( <>  실시간 )

데이터를 모아서 일괄로 처리하는 작업 

(필수 요소)

 - 대용량 데이터

 - 자동화

 - 견고함

 - 안정성

 - 성능

 

 

* 인터페이스

서로 다른 시스템간에 정보를 주고 받는 시스템

(구성)

 - 송신 시스템

 - 수신 시스템

 - 중계 시스템

(데이터 식별)

 - 전문 공통부

 - 전문 개별부

 - 전문 종료부

 

 

* EAI (Enterprise Architecture Integration)

기업 내의 애플리케이션을 통합하는 솔루션

(구축유형)

 - Point-to-Point

 - Hub & Spoke

 - Message Bus (ESB방식)

 - Hybrid  (Hub & Spoke + Message Bus)

 

 

* 전송 데이터

 - JSON : 이름과 값의 쌍

 - XML : 구조화된 문서 표현 _ 마크업언어(html, sgml, xml)

 - YAML : 데이터 직렬화 언어

 - CSV : 콤마로 구분

 

 

* AJAX

비동기 방식으로 데이터를 교환. 페이지의 일부만 변경 가능. 

 

 

* SOAP

 - HTTP, HTTPS, SMTP 등으로 메시지 교환

 - SOAP 구성

  > SOAP : 메시지를 교환하는 프로토콜

  > UDDI : 비지니스 업체 목록 등록  (설명서를 보관하는 도서관)

  > WSDL : 서비스의 기술적 세부사항 기술 (설명서)

 - 보안 프로토콜

  > SAML : 인증/권한관리

  > XKMS : 키관리

  > XACML : 접근제어 

 

 

* REST

HTTP URI를 통한 자원 명시와 HTTP Method를 통한 CRUD Operation적용.

(Rest 구성)

 - 자원 (Resource) : URI를 통해 식별

 - 행위 (Method) : GET, POST, PUT, DELETE

 - 표현 (Representation) : 데이터 표현

RESTful : REST의 원리를 따르는 시스템.

 

 

* 인터페이스 보안

 - 패킷 공격 기법 : 스니핑(엿봄), 스푸핑(속임임)

 (보안기능 적용)

 - 네트워크 영역 : IPSec, SSL, S-HTTP, TLS 

 - 애플리케이션 영역 : 시큐어 코딩 (소스코드)

 - DB영역 : 암호화 

 

 

* 인터페이스 구현 검증 도구

 - xUnit : 다양한 언어 지원

 - STAF : 서비스 호출 및 컴포넌트 재사용 등

 - FitNesse : 웹 기반 테스트 프레임워크

 - Selenium

 - watir

 

 

* 객체지향 구성요소

 - 클래스 (Class) : 속성과 연산을 정의해서 만든 틀

 - 객체 (Object) : 클래스의 인스턴스

 - 속성 (Attribute) : 객체들이 가지고 있는 고유한 데이터

 - 메서드 (Method) : 작업을 수행하기 위한 명령문의 집합

 - 메시지 (Message) : 객체에게 어떤 행위를 하도록 지시.

 

 

* 객체지향 특징

 - 정보은닉 (Information Hiding) : 내부 데이터에 직접 접근할 수 없도록 제한. _ 메서드를 이용해 접근

 - 캡슐화 (Encapsulation) : 속성(Attribute)과 메서드(Method)를 하나로 묶은 것.

 - 상속 (Inheritance) : 상위 클래스의 속성과 메서드를 하위 클래스가 물려받는 것.

 - 다형성 (Polymorphism) : 하나의 메시지에 대해 여러 가지 방법으로 응답. (오버로딩 / 오버라이딩)

 - 추상화 (Abstraction) : 실체의 핵심적인 개념만을 추출.

 

 

* 객체지향 설계 원칙 (SOLID)

 - 단일 책임 원칙 (SRP) : 한 클래스는 하나의 책임(기능)만 가져야 한다.

 - 개방 폐쇄 원칙 (OCP) : 확장에 열려 있고, 수정에 닫혀 있어야 한다.

 - 리스코프 치환 원칙 (LSP) : 자식 클래스는 언제나 자신의 부모 클래스를 대체. 

 - 인터페이스 분리 원칙 (ISP) : 사용하지 않는 인터페이스는 구현하지 말아야 한다.

 - 의존성 역전 원칙 (DIP) : 변화가 거의 없는 것에 의존. 

 

 

* 디자인 패턴

재사용할 수 있도록 만들어놓은 패턴들의 모음

 - 디자인 패턴 구조 : 패턴의 이름과 유형, 문제 및 배경, 솔루션, 사례, 결과, 샘플코드

 - Gof 디자인 패턴 

  > 생성 패턴 : 객체 생성과 관련한 패턴.

  > 구조 패턴 : 객체를 조합해서 더 큰 구조를 만드는 패턴. 

  > 행위 패턴 : 알고리즘이나 책임 분배에 관련된 패턴. 

 

 

* 테스트의 필요성

 - 오류 발견 관점

 - 오류 예방 관점

 - 품질 향상 관점