공부하면서 중요할 것 같은 포인트들 체크👊
소프트웨어 생명 주기
폭포수 모형 : 이전 단계가 완벽히 끝난 뒤 다음 단계를 진행. 가장 오래되고 폭넓게 사용됨. 선형 순차적
프로토타입 모형 : 폭포수 단점 보완. 견본을 만들어 최종 결과물 예측.
나선형 모형 : 폭포수 + 프로토타입 장점 모아둔 것. 나선형으로 개발을 여러 번 거침. 유지보수 필요 없음.
애자일 모형 : 짧은 개발 주기를 반복하며 요구사항을 우선순위로 둠. 사용자와 가장 친밀한 방법론.
스크럼
제품책임자 : 제품 이해도 높고 요구사항을 책임진다. 백로그 작성(우선순위 직접 지정)
스크럼 마스터 : 가이드 역할. 일일 스크럼 회의 주관하고 장애요소 공론화(PM과 비슷)
개발팀 : 개발 참여자
스크럼 개발 프로세스
제품 백로그 → 스프린트 계획 회의 → 스프린트 → 일일 스크럼 회의 → 스프린트 검토 회의 → 스프린트 회고
XP
XP 핵심 가치 : 의사소통
, 단순성
, 용기
, 존중
, 피드백
요구사항 정의
요구사항 개발 프로세스
도출 → 분석 → 명세 → 확인
UML
사물 : 구조, 행동, 그룹, 주해
관계 : 집합(◇ㅡ), 포함(◆ㅡ), 의존(<·····), 일반화(◁ㅡ), 실체화(◁---)
다이어그램
- 구조적 다이어그램 : 클래스, 객체,
컴포넌트, 배치(구현 단계)
, 복합체, 패키지
- 행위 다이어그램 : 유스케이스, 시퀀스, 커뮤니케이션, 상태, 활동, 상호작용, 타이밍
UI
기본 원칙 : 직관성, 유효성, 학습성, 유연성
와이어프레임 : 뼈대
목업 : 정적인 형태
스토리보드 : 와이어프레임 + 페이지 이동 흐름
프로토타입 : 인터랙션 적용한 정적인 형태.
요구사항 확인 단계 : 목표정의 → 활동사항 정의 → 요구사항 요소 확인 → 정황 시나리오 작성 → 요구사항 작성
품질 요구사항
기능성
(적합성, 정밀성, 상호운용성, 보안성, 호환성)
신뢰성
(성숙성, 고장 허용성, 회복성)
사용성
(이해성, 학습성, 운용성, 친밀성)
효율성
(시간효율성, 자원효율성)
유지보수성
(분석성, 변경성, 안정성, 시험성)
이식성
(적용성, 설치성, 대체성, 공존성)
소프트웨어 아키텍처
- 모듈화 : 모듈 크기와 개수는 반비례, 개수와 통합 비용은 비례
- 추상화
- 과정 추상화 : 전반적 흐름 파악
- 데이터 추상화 : 데이터 세부사항 정의 X
- 제어 추상화 : 이벤트 발생 세부사항 정의 X
아키텍처 패턴
-
레이어 패턴
시스템 계층 구분. 마주 보는 두 계층 사이 상호작용. 예시: OSI 참조모델
-
클라이언트-서버 패턴
1 서버, 다수 클라이언트. 서버는 항상 대기 상태 유지. 동기화 제외하고는 서로 독립적
-
파이프-필터 패턴
데이터 스트림 절차의 각 단계를 캡슐화하여 파이프로 데이터 전송. 예시: UNIX의 Shell
-
MVC 패턴
- 모델 : 서브시스템 핵심 기능과 데이터 보관
- 뷰 : 사용자에게 보여줄 정보 표시
- 컨트롤러 : 사용자로부터 받은 입력 처리. 모델-뷰 사이 제어 역할
-
마스터-슬레이브 : 작업 분할 후 다시 돌려받음
-
브로커 패턴 : 브로커 컴포넌트가 요청에 맞는 컴포넌트 연결
-
피어-투-피어 패턴 : 피어가 서버도 되고 클라이언트도 됨(P2P)
-
이벤트 버스 : 구독한 리스너가 메세지 받아 이벤트 처리
-
블랙보드 : 검색으로 블랙보드에서 데이터 찾기
모듈
모듈의 독립성을 높이려면 결합도 ↓, 응집도 ↑
- 결합도 : 모듈 간 관계 (아래는 결합도 약 → 강 순으로 나열)
- 내용(데이터) : 내부 기능, 내부 자료 참조
- 공통 : 공통 데이터 영역
- 외부 : 외부 다른 모듈에서 참조
- 제어 : 제어 신호 이용하여 통신 또는 요소 전달
- 스탬프 : 자료구조 전달
- 자료 : 매개변수 데이터 넘겨줌
- 응집도 : 모듈 내부 요소 관련된 정도 (아래는 응집도 강 → 약 순으로 나열)
- 기능적 : 단일 문제와 연관
- 순차적(시퀀스) : 모듈에서 나온 데이터가 다음 모듈 입력
- 통신적 : 동일한 입력과 출력으로 서로 다른 기능 수행
- 절차적 : 다수 기능 가질 시 순차적으로 수행
- 시간적 : 특정 시간과 관련
- 논리적 : 유사한 성격 혹은 특정 형태
- 우연적 : 관련 없는 요소들로 구성
디자인 패턴
- 생성패턴 → 객체 생성 및 참조 과정 샘플화하여 객체가 변경되어도 프로그램 구조에 큰 영향 X (프로그램 유연성 ↑)
- 추상 팩토리 : 구체적 클래스 의존 X, 인터페이스를 통해 연관-의존하는 객체들의 그룹으로 생성하여 추상적 표현
- 빌더 : 작게 분리된 인스턴스를 건축하듯 조합
- 팩토리 메소드 : 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
- 프로토타입 : 원본 객체 복제
- 싱글톤 : 한 객체 생성 시 어디서든 참조 가능하지만 여러 프로세스 동시 참조 X
- 구조패턴 → 클래스나 객체를 조합하여 더 큰 구조로 만들어줌
- 어댑터 : 호환성 없는 클래스의 인터페이스를 다른 클래스가 이용할 수 있도록 변환(어댑터니까 변환해주는 용도)
- 브리지 : 구현부에서 추상층까지 분리하여 서로 독립적으로 확장(각각 독립적인 거지만 다리(브리지)를 놓아서 이어줌)
- 컴포지트 : 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 사용 가능
- 데코레이터 : 객체 간 결합으로 능동적으로 기능 확장
- 퍼싸드 : 복잡한 서브 클래스를 피해 더 상위에다 인터페이스 구상하여 서브 클래스 기능을 간편하게 사용
- 플라이웨이트 : 인스턴스를 생성하는 게 아니라 공유해서 사용하여 메모리 절약
- 프록시 : 접근 어려운 객체와 연결하려는 객체 사이 인터페이스 역할 수행
- 행위패턴 → 클래스나 객체가 서로 상호작용하거나 책임 분배 방법 정의
- 책임 연쇄 : 요청 처리할 객체가 둘 이상 시 한 객체가 처리 못한 작업을 다음 객체로 넘김
- 커맨드 : 요청을 객체 형태로 캡슐화하여 재이용 또는 취소할 수 있도록 정보를 저장하거나 로그를 남김
- 인터프리터 : 언어 문법 표현 정의
- 반복자 : 자료구조처럼 접근 잦은 객체에 동일 인터페이스 사용
- 중재자 : 수많은 객체 사이 복잡한 상호작용을 캡슐화하여 객체로 정의
- 메멘토 : 특정 시점의 객체 내부 상태를 객체화하여 요청 시 해당 시점의 상태로 돌릴 수 있음
- 옵서버 : 객체의 상태가 변하면 객체 상속된 다른 객체들에게도 변화 상태 전달
- 상태 : 객체 상태에 따라 동일 동작 다르게 처리할 때 사용
- 전략 : 동일 계열 알고리즘을 개별적 캡슐화하여 상호교환
- 템플릿 메소드 : 상위 클래스에서 골격 정의하여 하위 클래스에서 처리를 구체화
- 방문자 : 각 클래스의 데이터 구조의 처리 기능을 분리하여 별도의 클래스로 구성
요구사항 검증 방법
- 요구사항 검증 방법 종류
- 동료검토 : 작성자가 직접 설명하여 동료들과 결함 찾기
- 워크스루 : 미리 명세서 배포하여 짧은 회의를 통해 결함 찾기
- 인스펙션 : 다른 검토 전문가가 명세서 확인하여 결함 찾기
- 프로토타이핑 : 견본품 만들어 최종 결과물 예측
- 테스트 설계 : 테이스 케이스로 테스트 가능한지 검토
- CASE 도구 활용 : 일관성 분석을 통해 요구사항 변경사항 추적·분석·관리하여 표준 준수 여부 확인
- 인터페이스 요구사항 검증 주요 항목 : 완전성, 일관성, 명확성, 기능성, 검증 가능성, 추적 가능성, 변경 용이성
시스템 연계 기술
- DB Link, API/Open API, EAI(송수신 데이터 처리·진행 현황을 모니터링·통제), Socket, Web Service
미들웨어
- DB
- RPC(Remote Procedure Call) : 프로시저 사용하여 원격 프로시저를 로컬 프로시저처럼 호출
- MOM(Message Oriented Middleware) : 메세지 기반 비동기형 메세지 전달
- TP-Monitor(Transaction Processing Monitor) : 트랜잭션 처리 및 감시
- ORB(Object Request Broker) : 객체 지향 미들웨어
- WAS(Web Application Server) : 동적 컨텐츠 처리