SW 개발 방법론
구조적 방법론 : 절차지향, 하향식
객체지향 방법론: 객체관의 관계, 상향식
애자일 방법론: 변화에 빠르고 유연히 대응
SW 개발 모델
폭포수 모델: 순차적 접근
프로토타이핑 모델: 시제품
나선형 모델: 계획 → 위험분석 → 개발 → 평가
RAD: 빠른 개발 주기
V 모형: 단위테스트(정적, 동적) → 통합테스트(하향식-스텁, 상향식-드라이버), (빅뱅테스트) → 시스템 테스트 → 인수 테스트
애자일 방법론
작은 구성 요소 빠르게 개발
종류
- XP (의사, 피, 존, 용기, 담)
- SCRUM: 백로그(기능명세서), 스프린트
비용 산정
(계획) - 분석 - 설계 - 구현 - 테스트 - 유지
COCOMO
- 조직형: 5만 라인 이하
- 반분리형: 30만 라인 이하
- 내장형: 30만 라인 이상
Putname 기법: 고든 레일리 곡선
기능 점수 기법 : 기능에 비용 매김
작업 분해(WBS)
CPM 네트워크 작성 : 전후 관계를 따져서 네트워크 계산 A → B
최소 소요 기간 계산: 임계 기간(가장 큰 숫자)
간트 차트 표현: 내가 알던 WBS
요구사항 개발 프로세스
개발 프로세스
도출 → 분석 → 명세 → 확인
분석 도구
DFD, DD, Minispec, STD, UML 등
요구사항 분류
기능 요구사항
비기능 요구사항
CASE 도구 (Computer Aid Software Engineering)
상위 CASE: 분석 설계
하위 CASE: 구현 테스트
구조적 분석 모델
자료 흐름도 DFD
자료 사전 DD
소단위 명세서
ERD 개체 사각형 마름모 관계 속성 동그라미 ??
상태 전이도
객체지향 분석 모델
럼바우
- 객체 모델링: 객체 다이어그램(클래스 다이어그램)
- 동적 모델링: 상태 다이어그램
- 기능 모델링: DFD
Booch: 미시적 및 거시적 개발
자콥슨: 유스케이스
코드와 요든: ERD
위르프 브룩: 분석-설계 구분 없음
UI 설계
UI/UX
UI: 사용자가 접하는 화면 디자인
UX: 사용자가 화면을 이용하면서 느끼는 경험
UI 유형
CLI: 키보드 입력
GUI: 마우스 입력
NUI: 자연스러운 움직임
OUI: 모든 것이 입력
UI 설계원칙
직관성: 누구나 쉽게 이해하고 사용
유효성: 목적을 정확히 달성
학습성: 누구나 쉽게 배워야 함
유연성: 요구사항 수용
UI 설계도구 (별로 안중요)
- 와이어 프레임
- 스토리 보드
- 프로토타입
- 목업
- 유스케이스
형상 관리
소프트웨어 변경 사항을 추적하고 관리하는 도구
형상관리 절차
형상 식별: 관리 대상 선정
형상 통제: 변경 요청을 검토하고 승인하여, 현재의 기준선에 반영
형상 감사: 변경 검증
형상 기록: 변경 사항의 이력을 보존
형상 관리 도구
CVS, SVN, GIT
개발 프레임워크
프레임워크: 개발 구조를 제공하는 틀
라이브러리: 재사용 가능한 코드 모음
API: 소프트웨어 간 상호작용을 위한 인터페이스
ORM: 객체지향 프로그래밍 언어의 객체를 데이터베이스의 테이블과 매핑
모듈 구현
모듈: 특정 기능을 수행하며 다른 모듈과 결합하여 전체 시스템을 구성할 수 있는 단위
독립성: 응집도는 높이고, 결합도는 낮춘다
FAN - IN, FAN - OUT
결합도
자료 결합도(Data): 값 전달
스탬프 결합도(Stamp): 배열, 스트럭쳐, 포인터 전달
제어 결합도(Control): 제어 요소 전달
외부 결합도(External): 다른 모듈 선언 변수 참조
공통 결합도(Common): 전역변수 사용
내용 결합도(Content): 다른 모듈 내부 기능 사용
응집도
기능적 응집도(Functional): 단일 목적 수행
순차적 응집도(Sequential): 출력값이 입력값으로 사용
통신적 응집도(Communication): 동일한 입력/출력
절차적 응집도(Procedual): 순차적으로 수행
시간적 응집도(Temporal): 특정 시간에 수행
논리적 응집도(Logical): 유사한 성격
우연적 응집도(Coincidental): 연관 없음
EAI(Enterprise Appliation Integraion)
기업 내 다양한 애플리케이션 간의 데이터를 통합하고 상호 운용
종류
- Point-to-Point: 애플리케이션 간 1 : 1 연결 방식
- Hub & Spoke : 중앙 허브를 통해 애플리케이션을 연결하여 관리
- Message Bus: 메시지 버스를 사용해 각 애플리케이션이 버스와 통신
- Hybrid: 여러 통합 방식을 혼합
SOAP
XML 기반의 표준화된 프로토콜
보안성과 트랜잭션 관리가 중요한 복잡한 웹 서비스 통신에 사용
HTTP, HTTPS, SMTP 등을 통한 XML 기반 메시지 교환 프로토콜
구성 요소
- SOAP: XML을 기반으로 한 웹 서비스 통신 프로토콜
- UDDI: 웹 서비스의 검색과 등록을 위한 표준화된 디렉터리 서비스
- WSDL: XML 형식의 언어(기능, 위치, 사용법 기술)
REST
HTTP 기반의 경량화된 아키텍처 스타일
URL을 통해 자원을 표현하고 상태를 주고받는다
구성 요소
- 자원 : URI
- 행위: GET, POST, DELETE, PUT
- 표현: 데이터
HTTP
HTTP: 클라이언트와 서버 간에 하이퍼텍스트를 전송하기 위한 웹 통신 프로토콜
Hypertext: 문서 내의 링크를 통해 다른 문서나 리소스로 연결할 수 있는 텍스트 형식
HTML: 웹 페이지의 구조와 내용을 정의하는 마크업 언어, 하이퍼텍스트 작성
AJAX: 웹 페이지를 전체 새로 고침 없이 비동기적으로 데이터를 주고 받음
인터페이스 전송 데이터
JSON: 경량 데이터 교환 형식으로, 가독성과 구조화가 뛰어나 주로 웹에서 사용
XML: 데이터를 구조화하고 계층적으로 표현하는 마크업 언어
YAML: 가독성이 높은 데이터 직렬화 방식
CSV: 데이터를 쉼표로 구분하여 표현
객체지향 구성요소
클래스: 객체를 정의하는 설계도나 틀로, 객체의 속성과 메서드를 포함
속성: 객체가 가지는 데이터나 상태를 나타내는 변수
메서드: 객체가 수행할 수 있는 동작이나 기능을 정의한 함수
객체: 클래스로부터 생성된 실제 인스턴스
메시지: 객체 간에 메서드를 호출하여 상호작용 하는 방식
객체지향 특징
정보은닉: 객체 내부의 세부 구현 내용을 숨기고, 필요한 정보만 외부에 공개
캡슐화: 객체의 속성과 메서드를 하나로 묶고, 외부에서 접근을 제한, GET SET 같은거
상속: 기존 클래스의 속성과 메서드를 새로운 클래스가 물려받아서 사용할 수 있음
다형성: 같은 메서드나 연산이 다양한 객체에서 다르게 동작
추상화: 복잡한 시스템에서 중요한 특징만을 추려내어 간결하게 표현
객체지향 설계 원칙(☆)
단일 책임 원칙: 한 클래스는 하나의 책임만 진다
개방 폐쇄 원칙: 확장에는 열려 있고, 수정에는 닫혀 있다.
리스코프 치환 원칙: 자식 클래스는 언제나 부모 클래스를 대체
인터페이스 분리 원칙: 사용하지 않는 인터페이스는 구현하지 않는다
의존성 역전 원칙: 자주 변화하지 않는 것에 의존하다
테스트의 기본 원칙
결함 집중(파레트 법칙): 결함은 20%의 핵심 모듈에서 80%의 오류가 발생한다
살충제 패러독스: 동일한 테스트 케이스를 반복하면 더 이상 새로운 결함을 발견하지 못한다
오류 부재의 궤변: 소프트웨어가 결함이 없더라도 사용자의 요구사항을 만족하지 못하면 의미없다
테스트 오라클(☆)
테스트의 결과가 참인지 거짓인지 판단하기 위해 미리 정의된 참값을 입력하여 비교하는 기법
유형
- 참 오라클: 모든 입력값에 대해 정확한 기대 결과를 제공하여 완벽하게 검증
- 샘플링 오라클: 일부 입력값에 대해서만 정확한 기대 결과를 제공
- 휴리스틱 오라클: 경험이나 직관을 바탕으로 예상 결과를 제공해 검증
- 일관성 검사 오라클: 변경 전후로 테스트 결과의 일관성 검증, 여러 버전 비교
테스트 기법(☆)
화이트박스 테스트
- 문장검증, 분기검증, 경로검증, 조건검증
블랙박스 테스트
- 동등 분할 기법
- 경계값 분석
- 원인 효과 그래프 검사
- 오류 예측 검사
- 비교 검사
- 상태전이 검사
테스트 장치
테스트 드라이브: 상향식 테스트에 필요
테스트 스텁: 햐향식 테스트에 필요
테스트 케이스: 입력값, 실행 조건, 기대 결과 등의 집합
성능 분석 지표
처리량: 일정 시간 내에 처리하는 작업의 양
응답 시간: 요청 전송 시점부터 첫 응답 시점까지의 시간
경과 시간: 요청 전송 시점부터 첫 처리가 완료되기까지의 총 시간
자원 사용률: CPU, 메모리, 네트워크의 자원 사용량
소스코드 품질 분석
소스코드 품질 분석
- 동료 검토, 페어 프로그래밍
- 워크 스루 , 팀 회의
- 인스펙션, 공식 회의
리팩토링
- 기능의 변경 없이 내부 구조를 개선하는 방법
튜닝
- 튜닝 SQL문을 최적화
유지보수
수정 보수(Corrective Maintenance): 오류 수정
적응 보수(Adaptive Maintenance): 환경 변화
향상 보수(Perfective Maintenance): 기능추가
예방 보수(Perventive Maintenace): 잠재적 오류 대비
DRM
디지털 컨텐츠의 저작권을 보호하고, 불법 복제 및 무단 사용을 방지하기 위해 사용되는 기술
저작권 보호 기술
암호화 기술: 특정 키를 가진 사용자만이 콘텐츠를 이용
위변조 방지(Tamper-Proofing): 콘텐츠에 무단 조작 시 감지
워터마킹: 콘텐츠에 저작권 정보를 은닉
핑거프린팅: 저작권 정보와 구매자 정보 삽입
스키마
스키마는 데이터베이스의 구조와 제약 조건을 정의하는 설계도
3계층 스키마
- 외부 스키마: 사용자 관점의 데이터뷰
- 내부 스키마: 물리적 저장구조
- 개념 스키마: 데이터베이스의 논리적 구조
독립성
- 논리적 독립성
- 물리적 독립성
데이터베이스 설계(☆)
설계 단계
- 개념 설계: ERD로 구조를 정의하는 단계
- 논리 설계: 데이터베이스 스키마로 논리적 구조를 설계하는 단계, 정규화
- 물리 설계: 저장 매체와 성능을 고려한 물리적 구현 단계
데이터 모델
- 데이터의 구조, 연산, 제약조건을 논리적 또는 개념적으로 표현
관계형 모델
칼럼: 테이블의 속성
튜플: 테이블의 행
도메인: 칼럼의 값 범위
차수: 칼럼의 개수
카디널리티: 튜플의 개수
널: 값이 없음
이상현상(☆)
데이터의 비정상적인 처리가 발생하여 무결성이 깨지는 문제
종류
삽입이상: 데이터를 삽입할 때, 불필요한 데이터가 함께 삽입되는 현상
삭제이상: 튜플을 삭제할 때, 연쇄 삭제 현상으로 인해 정보 손실
갱신이상: 데이터를 갱신할 때, 일부 정보만 갱신되어 정보에 모순이 생기는 현상
함수적 종속관계
한 속성의 값이 다른 속성에 의해 고유하게 결정되는 관계
표현
A → B ( A가 B를 결정한다)
A 는 결정자, B는 종속자
종류
- 완전 함수 종속: 기본키 전체에 의해 결정되는 종속 관계
- 부분 함수 종속: 기본키의 일부 속성에 의해 결정되는 종속 관계
- 이행적 함수 종속: 한 속성이 다른 속성을 통해 간접적으로 종속되는 관계
정규화
데이터 중복을 줄이고 일관성을 유지하기 위해 데이터를 구조적으로 분해하는 과정
단계
1: 도메인이 원자값
2: 부분함수 종속 제거
3: 이행적 함수 종속 제거
B: 모든 결정자가 후보키
4: 다치 종속 제거
5: 조인 종속 이용
반정규화
성능 향상을 위해 정규화 된 데이터베이스 구조를 의도적으로 일부 결합하거나 중복을 허용하는 과정
데이터베이스 이중화 & 백업
기밀성: 아무나 보면 안됨
무결성: 인가된 사용자만 수정 가능
가용성: 인가된 사용자라면 언제든지 이용 가능 해야함
이중화:
데이터베이스의 고가용성을 보장하기 위해 동일한 데이터를 복제하여 두개 이상의 서버에 저장하는 방식
백업
-전체 백업: 모든 데이터 백업
- 증분 백업: 전체 백업 이후에 변경/추가된 데이터만 백업
- 차등 백업: 전체 백업 이후, 모든 변경/ 추가된 데이터를 백업
- 합성 백업: 전체백업 + 증분백업
RTO/RPO
- RTO: 복구 시간 목표(시간, 2시간 안에는 무조건 복구 해야함)
- RPO: 복구 시점 목표(데이터 양, 복구 되기까지 손실된 데이터의 양)
물리설계
키
테이블에서 행을 고유하게 식별하는 속성 또는 속성들의 집합
유일성: 키 값이 중복되지 않음
최소성: 키가 행을 고유하게 식별하는데 필요한 최소한의 속성들로 구성
종류
기본키: 유일성 최소성
후보키: 유일성 최소성
대체키: 후보키 - 기본키
슈퍼키: 유일성 만 만족
무결성 제약조건
데이터의 일관성과 정확성을 유지하기 위한 규칙
종류
개체 무결성: 기본키는 중복되거나 NULL 값을 가질 수 없다
참조 무결성: 외래키는 참조하는 테이블의 기본키 값과 일치해야 한다. CASCADE, RESTRICT
도메인 무결성: 속성 값은 미리 정의된 데이터 타입과 값의 범위 내에 있어야 한다는 규칙
트랜잭션
데이터베이스에서 하나의 논리적 작업 단위를 이루는 연산들의 집합
ACID
Atomicity
Consistency
Isolation
Durability
관련 명령어
commit rollback savepoint
부분 완료 상태
partially commited : commit을 시키기 전 상태
병행 제어
동시에 실행되는 트랜젝션 간의 상호작용을 관리해 데이터 일관성을 유지하는 기법
문제점
갱신분실, 비완료 의존성, 모순성, 연쇄복귀
병행제어 기법
로킹: 트랜젝션이 데이터에 접근할 때 잠금을 걸어 다른 트랜잭션의 접근을 제어하는 방식
2단계 로킹: 확장 단계(잠금)와 축소단계(해제)로 나누어 잠금이 이루어지는 방식
타임 스탬프: 트랜잭션에 시간순서 값을 부여해 충돌을 방지하는 병행제어 기법
낙관적 병행제어: 트랜잭션 동안 충돌을 가정하지 않고 종료 시점에만 충돌을 검사
다중버전 병행제어: 여러 버전의 타임스탬프를 비교
데이터베이스 장애
시스템 운영 중 발생하는 다양한 오류로 인해 데이터베이스 작업이 중단되는 상황
덤프
데이터베이스의 모든 데이터와 구조를 백업하거나 복구하기 위해 파일로 내보내는 작업
회복기법 (이거 이해 못함)
로그 기반 회복 기법
- 지연 갱신: REDO(재실행)
- 즉시 갱신: REDO + UNDO
검사점 회복 기법
그림자 페이징 회복 기법
미디어 회복 기법
ARIES 회복 기법
관계대수 & 관계해석
관계 대수
데이터베이스에서 원하는 데이터를 얻기 위해 연산을 통해 결과를 도출한는 절차적 언어
관계 해석
조건을 명시하여 원하는 데이터를 정의하는 비절차적 언어
기억장치
레지스터: CPU 내부에 있는 초고속 저장장치
캐시메모리: CPU와 주기억장치 간 데이터 전송을 빠르게 하기 위해 사용되는 임시 저장소
주기억장치: 프로그램과 데이터를 일시적으로 저장
연관메모리: 내용의 일부를 이용하여 엑세스하는 장치
보조기억장치: 데이터를 영구적으로 저장하는 장치
SSD: 반도체 기반의 비휘발성 저장장치
운영체제
UNIX 운영체제
유닉스 시스템 구성
커널 쉘 Utility
파일 시스템 구조
- 부트 블록, 슈퍼 블록, i-node 블록, 데이터 블록
파일 디스크립터
- 필요한 파일 관리 정보를 포함