* 소프트웨어 공학이란?
품질 높은 소프트웨어를 효율적으로 개발하기 위한 학문.
* 소프트웨어 공학의 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 디자인 패턴
> 생성 패턴 : 객체 생성과 관련한 패턴.
> 구조 패턴 : 객체를 조합해서 더 큰 구조를 만드는 패턴.
> 행위 패턴 : 알고리즘이나 책임 분배에 관련된 패턴.
* 테스트의 필요성
- 오류 발견 관점
- 오류 예방 관점
- 품질 향상 관점
'자격증 > 정보처리기사' 카테고리의 다른 글
[C언어(강의)] 11강 (진법변환, 비트연산) (0) | 2024.05.25 |
---|---|
[C언어(강의)] 9~10강 (산술연산자, 출력형식) (0) | 2024.05.15 |
[정처기실기] 2023년 3회 (0) | 2024.04.18 |
[정처기실기] 2023년 2회 (0) | 2024.04.14 |
[정처기실기] 2023년 1회 (0) | 2024.04.03 |