→ 소프트웨어 시스템이 사용되는 동안 발견되는 오류를 정리하는 과정
→ 하위 모듈에서 상위 모듈 방향으로 설계하는 것으로 인터페이스가 이미 성립되어 있어야만 기능 추가가 가능
→ 최하위 수준에서 각각의 모듈들을 설계하고 이러한 모듈이 완성되면 이들을 결합하여 검사
하향식 설계
→ 통합 검사 시 인터페이스가 이미 정의되어 있어 통합이 간단
→ 레벨이 낮은 데이터 구조의 세부 사항은 설계 초기 단계에서 필요
Process (프로세스) → 원이나 둥근 사각형으로 표시, 자료를 변환시키는 시스템의 한 부분을 나타냄
Data Flow (자료 흐름) → 화살표 위에 자료의 이름 기입, 자료의 이동인 연관관계를 나타냄
Data Store (자료 저장소) → 평행선(=) 안에 자료 저장소 이름 기입, 시스템에서의 자료 저장소를 나타냄
Terminator (단말) → 사각형 안에 이름 기입, 시스템과 교신하는 외부 개체
→ 객체 지향 시스템을 개발할 때 산출물을 명세화, 시각화, 문서화하는데 사용 (객체지향 모델링 언어)
→ 시간에 흐름에 따라 상호 작용하는 개체들을 표현하는 동적 다이어그램
객체지향 설계에서 시스템 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜야 할 다섯 가지 원칙
- 단일 책임 원칙(SRP, Single Responsibility Principle) → 객체는 단 하나의 책임만! 응집도는 높고 결합도는 낮게 설계
- 개방-폐쇄 원칙(OCP, Open-Closed Principle) → 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 함! 확장에 대해 열려있고, 수정에 대해는 닫혀있어야 함
- 리스코프 치환 원칙(LSP, Liskov Substitution Principle) → 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 함! 부모 클래스 무시하거나 재정의 x 확장만 수행해야 함
- 인터페이스 분리 원칙(ISP, Interface Segregation Principle) → 자신이 사용하지 않는 인터페이스는 구현하지 말아야 함! 인터페이스가 갖는 하나의 책임
- 의존 역전 원칙(DIP, Dependency Inversion Principle) → 각 객체들이 의사소통하며 의존 관계가 성립될 때 각 객체들은 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존 관계를 맺어야 함! 일반적으로 인터페이스를 활용하면 알아서 지켜짐
소프트웨어 설계에서 자주 발생하는 문제에 대한 일반적이고 반복적인 해결 방법
추상 팩토리 → 생성 패턴
컴포지트, 어댑터 → 구조 패턴
옵서버 → 행위 패턴
설계 목표 설정 → 시스템 타입 결정 → 아키텍처 패턴(스타일) 적용 → 서브시스템 구체화 → 설계 검토
→ 객체 모형, 동적 모형, 기능 모형
→ 입력되는 데이터를 컴퓨터의 프로세서가 처리하기 전에 미리 처리하여 프로세서가 처리하는 시간을 줄여주는 프로그램이나 하드웨어
EAI (Enterprise Application Integration) → 기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
GPL (General Public License) → 자유 소프트웨어 재단에서 만든 자유 소프트웨어 라이선스
Duplexing → 서비스 중단에 대비하여 동일한 기능을 수행하는 예비 시스템을 동시에 운용하는 것
→ 단위 테스트에서 테스트의 대상이 되는 하위 모듈을 호출하고, 파라미터를 전달하는 가상의 모듈로 상향식 테스트에 필요
테스트 스텁 → 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로, 일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈
→ LIFO 후입 선출 방식으로 자료를 처리
→ 인터럽스 처리, 서브루틴 호출 작업 등에 응용
큐 → FIFO 방식으로 처리, 순서 리스트의 뒤(Rear)에서 노드가 삽입되며, 앞(Front)에서 노드가 제거됨
데크 → 선형 리스트의 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조
주어진 기간 내에 최소의 비용으로 사용자를 만족시키는 시스템을 개발
→ 일정 관리, 비용 관리, 인력 관리, 위험 관리, 품질 관리
소프트웨어 기술자들에 의해 수행되는 소프트웨어 품질 보증 활동, 가장 일반적인 검토 방법
- 의제 제한
- 참가자 수 제한
- 논쟁과 반박 제한
- 문제 영역을 명확히 표현
→ GOTO나 화살표를 사용하지 않음
A, B, C, D로 정해진 입력 자료를 push, push, pop, push, push, pop, pop, pop 순서로 스택 연산을 수행하면?
→ 분할 정복에 기반한 알고리즘으로 피봇을 사용하는 정렬
→ 데이터 흐름 검사, 루프 검사, 조건 검사
블랙박스 테스트 → 동등 분할 검사, 경계값 분석, 원인 결과 그래프 기법, 오류예측 기법
→ 정적 테스트 시에만 활용하는 기법
→ 프로젝트에 내재된 위험 요소를 인식하고 그 영향을 분석하여 이를 관리하는 활동
→ 프로젝트를 성공시키기 위하여 위험 요소를 사전에 예측, 대비하는 모든 기술과 활동을 포함하는 것
→ 논리적 설계 단계에서 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정
→ 트랜잭션 처리량, 응답시간, 디스크 용량 등을 고려해야 함
→ 릴레이션 R의 모든 조인 종속성의 만족의 R의 후보키를 통해서만 만족됨
π이름 (σ학과 = ‘교육’(학생))
→ π이름
: ‘이름’ 필드를 표시함
→ σ학과 = ‘교육’
: ‘학과’가 “교육”인 자료만을 대상으로 함
→ (학생)
: <학생> 테이블의 자료를 검색함
⇒ 교육과 학생의 ‘이름’을 검색
⇒ SELECT 이름 FROM 학생 WHERE 학과 = '교육';
A → B이고 B → C일 때 A → C를 만족하는 관계
이행적 종속은 2NF → 3NF 단계에서 제거됨
→ 주요 구성 요소: 분산 처리기, 분산 데이터베이스, 통신 네트워크 등
CASCADE
→ 제거할 요소를 참조하는 다른 모든 개체를 함께 제거
포인터… 배열… 버릴까…
→ HDLC, PPP, LLC, MAC, LAPD, LAPB
→ 16비트씩 8부분, 총 128비트로 구성되어 있으며 각 부분을 16진수로 표현
→ 문법 오류가 날 경우 코드가 실행조차 되지 않으므로 예외 처리 불가
→ TCP/IP 계층 구조에서 IP 동작 과정에서의 전송 오류가 발생하는 경우에 대비해 오류 정보를 전송하는 목적으로 사용하는 프로토콜
→ Ant, Make, Maven, Gradle, Jenkins
Kerberos → 네트워크 인증 프로토콜
커널 → 쉘 프로그램 실행을 위해 프로세스와 메모리를 관리
LAN Tapping → LAN 회선 중간에서 전기 신호를 도청하는 행위
→ 하드디스크와 같은 데이터 저장장치를 호스트버스 어댑터에 직접 연결하는 방식
→ 저장 장치와 호스트 기기 사이에 네트워크 디바이스 없이 직접 연결하는 방식으로 구성
NAS(Network Attached Storage) → 서버와 저장장치를 네트워크를 통해 연결하는 방식
SAN (Storage Area Network) → DAS + NAS, 서버와 저장 장치를 연결하는 전용 네트워크를 별도로 구성하는 방식
→ 소프트웨어 생명주기, 요구사항 - 분석 - 설계 - 구현 단계로 수행되며 각 단계를 테스트와 연결하여 표현
→ 네트워크 라우터의 브로드캐스트 주소를 활용한 DoS 공격
공격 대상이 네트워크의 임의의 시스템에 패킷을 보내게 만드는 공격
→ FAT와 비교했을 때 성능, 보안, 안정성 면에서 뛰어남
→ 리눅스 시스템에서 사용자의 성공한 로그인/로그아웃 정보기록
→ 시스템의 종료/시작 시간 기록
xferlog → FTP로 접속하는 사용자에 대한 로그를 기록
utmp → 현재 로그인한 사용자의 상태에 대한 로그를 기록
→ 각 기능의 원시 코드 라인 수의 비관치, 낙관치, 기대치를 측정하여 예측치를 구하고 이를 이용하여 비용을 산정하는 기법
→ OSI 7 Layer 전 계층의 프로토콜과 패킷 내부의 콘텐츠를 파악하여 침입 시도, 해킹 등을 탐지하고 트래픽을 조정하기 위한 패킷 분석 기술
PLCP (Packet Level Control Processor) → 패킷 교환 서브 시스템에서 패킷 레벨 제어 및 경로 정보 처리 기능과 가입자 링크, 과금, 통계 자료 수집 등을 담당
→ 프로젝트 상황 및 특성에 맞도록 정의된 소프트웨어 개발 방법론의 절차, 사용기법 등을 수정 및 보완하는 작업
시간의 흐름에 따라 상호작용하는 개체들을 표현하는 것, 주로 시스템의 동적인 측면을 모델링하기 위해 사용
- 객체 간의 동적 상호작용을 시간 개념을 중심으로 모델링하는 것
- 일반적으로 다이어그램의 수직 방향이 시간의 흐름을 나타냄
- 회귀 메시지, 제어블록 등으로 구성
메시지 기반의 비동기형 메시지를 전달하는 방식의 미들웨어
→ 온라인 업무보다는 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨
연관 Association, 집합 Aggregation, 포함 Composition, 일반화 Generalization, 의존 Dependency, 실체화 Realization, 확장 Extend
→ 오류가 발생하면 사용자가 쉽게 인지할 수 있도록 설계해야 함!
→ 메소드 명은 같지만 매개 변수의 개수나 타입을 다르게 함으로써 구현, 구분할 수 있음
→ 소프트웨어에 의해 간접적으로 제어되는 장치와 소프트웨어를 실행하는 하드웨어
→ 기존의 소프트웨어와 새로운 소프트웨어를 연결하는 소프트웨어
→ 순서적 연산에 의해 소프트웨어를 실행하는 절차
→ 공통된 속성과 연산(행위)을 갖는 객체의 집합
→ 속성과 관련된 연산을 클래스 안에 묶어서 하나로 취급하는 것
→ 어댑터, 브릿지, 프록시
생성 패턴 → 빌더
→ 시스템과 상호 작용하는 모든 외부 요소를 액터라고 함
→ 모델은 서브시스템의 핵심 기능과 데이터를 보관하는 역할
→ 상향식 통합 테스트: 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법
인스펙션, Inspection → 워크스루를 발전시킨 형태, 소프트웨어 개발 단계에서 산출된 결과물의 품질을 평가하고 이를 개선하기 위한 방법 등을 제시
→ 위험 요소 징후들에 대하여 계속적으로 인지하는 것
→ 동시에 소스를 수정하는 것을 방지하며 다른 방향으로 진행된 개발 결과를 합치거나 변경 내용을 추적할 수 있는 소프트웨어 버전 관리 도구
→ 정렬이 되어 있지 않은 파일에서 순차적으로 검색하는 방식
찾고자 하는 키 값을 첫 번째 레코드 키 값부터 차례로 비교하여 검색하는 방식
주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 정렬 방식
계획 → 사전 교육 → 준비 → 인스펙션 회의 → 수정 → 후속 조치
Left → Right → Root
→ JUnit, CppUnit, HttpUnit, NUnit 등
→ 테이블 R에서 존재하는 모든 함수적 종속에서 결정자가 후보키인 정규형
→ 저장 레코드의 양식 설계시 데이터 타입, 데이터 값의 분포, 접근 빈도 등을 고려
트랜잭션 모델링 → 개념적 설계 단계에서 수행해야 함
→ 일반 사용자가 데이터 사전에 직접 내용을 추가하거나 수정할 수 없고 내용을 검색할 수만 있음
→ 데이터 구조에 따라 개념 세계나 컴퓨터 세계에서 실제로 표현된 값들을 처리하는 작업
GRANT CREATE # 생성 권한 부여
TABLE # 테이블을 생성할 수 있는 권한 부여
TO PARK # ID가 'PARK'인 사용자에게 부여
strlen(s)
- s의 길이 구함
strcpy(s1, s2)
- s2를 s1으로 복사 (copy)
strcmp(s1, s2)
- s1과 s2에 저장된 문자열이 동일한지 비교 (compare)
strrev(s)
- s를 거꾸로 변환 (reverse)
→ 대기 시간과 서비스(실행) 시간을 이용하는 기법
→ 최소 작업 우선(SJF) 기법의 약점을 보완한 비선점 스케줄링 기법
→ Multi-User, Multi-Tasking을 지원하는 운영체제
기능적 응집도 → 순차적 응집도 → 교환적 응집도 → 절차적 응집도 → 시간적 응집도 → 논리적 응집도 → 우연적 응집도
#include <stdio.h>
int main(int arge, char* argv[]) {
int n1 = 1, n2 = 2, n3 = 3;
int r1, r2, r3;
r1 = (n2 <= 2) || (n3 > 3);
r2 = !n3;
r3 = (n1 > 1) && (n2 < 3);
printf("%d", r3 - r2 + r1);
return 0;
}
r1
→ n2는 2보다 작거나 같으므로 참
→ n3의 값은 3보다 크지 않으므로 거짓
⇒ ||
연산자는 둘 중 하나라도 참이면 참이므로 참(1)
r2
⇒ n3의 값은 참이므로 부정인 거짓(0)
r3
→ n1의 값은 1보다 크지 않으므로 거짓
→ n2의 값은 3보다 작으므로 참
⇒ &&
연산자는 모두 참일 때만 참이므로 거짓(0)
⇒ 0 - 0 + 1 = 1
→ 헤더 체크섬만 제공함!
→ 기밀성, 무결성, 가용성
→ 외부 컴퓨터의 접속 여부를 제어할 수 있는 접근제어 유틸리티
→ 10cm 이내 거리에서 3.5Gbps 속도의 데이터 전송이 가능한 초고속 근접무선통신
→ 실행 프로세스 권한 설정, 운영체제의 접근 제한, 운영체제의 정보 수집 제한
서버 관리실 출입 통제는 ㅋㅋ 물리적 보안에 포함되는 보안 조치
라이브러리 → 사용자가 제어를 갖고 직접 호출해서 사용하는 것
→ 다른 국을 향하는 호출이 중계에 의하지 않고 직접 접속되는 그물 모양의 네트워크
→ 대용량을 빠르고 안전하게 전달할 수 있어 행사장이나 군 등에서 많이 화용
→ 악성코드의 유형 중 다른 컴퓨터의 취약점을 이용하여 스스로 전파(복제)하거나 메일로 전파되며 스스로를 증식하는 것
로그 웨어(Rogue Ware) - 사용자를 속여 악성 코드를 설치하도록 유도하는 소프트웨어
애드웨어(Adware) - 소프트웨어 자체에 광고를 포함하여 이를 보는 대가로 무료로 사용하는 소프트웨어
반사 공격(Reflection Attack) - 송신자가 생성한 메시지를 가로채 접근 권한을 얻는 형태의 공격 기법
→ 시스템 공격 기법 중 하나로 허용 범위 이상의 ICMP 패킷을 전송하여 대상 시스템의 네트워크를 마비
세션 하이재킹(Session Hijacking) - 서버에 접속하고 있는 클라이언트들의 세션 정보를 가로채는 공격 기법
피기백 공격(Piggyback Attack) - 시스템의 올바른 인증 절차나 보안 프로그램에 편승하는 공격 방법
크로스사이트 스크립팅(XSS: Cross Site Scripting) - 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나, 비정상적인 기능 수행을 유발하는 보안 약점
→ 대칭 알고리즘은 비밀키를 공유해야 하기 때문에 키 관리의 어려움이 있지만 알고리즘이 단순하여 암호화 및 복호화 속도가 빠름
→ 접근 통제 방법 중 조직 내에서 직무, 직책 등 개인의 역할에 따라 결정하여 부여하는 접근 정책
→ 네트워크를 제어부, 데이터 전달부로 분리하여 네트워크 관리자가 보다 효율적으로 네트워크를 제어, 관리할 수 있는 기술
→ 작업들의 상호 관련성, 결정경로, 경계시간, 자원할당 등을 제시
간트 차트
→ 각 작업들이 언제 시작하고 언제 종료되는지에 대한 일정을 막대 도표를 이용하여 표시
→ 시간선 차트라고도 함 (수평 막대의 길이: 각 작업의 기간)
→ 워크스루를 발전시킨 형태, 소프트웨어 개발 단계에서 산출된 결과물의 품질을 평가하고 이를 개선하기 위한 방법 등을 제시
워크스루(Walkthrough)
시스템의 분석 및 설계나 문서화할 때 사용되는 기법
→ 하향식 소프트웨어 개발을 위한 문서화 도구
→ Tap, Double Tap, Drag, Pan, Press, Flick, Pinch
Flick - 빠르게 스크롤
→ 보헴이 제안, 위험 분석 기능이 있으며, 여러 번의 개발 과정을 거쳐 점진적으로 개발하는 모형
→ process, data flow, data store, terminator
→ 서브 시스템이 입력 데이터를 받아 처리하고 결과를 다음 서브 시스템으로 넘겨주는 과정을 반복
→ 액터, 객체, 라이프라인, 활성 상자, 메시지, 객체 소멸, 프레임
확장은 관계의 한 형태로 시퀀스 다이어그램의 구성 요소 X
Left → Right → Root
기업 내 각종 애플리케이션 및 플랫폼 간의 정보 전달, 연계, 통합 등 상호 연동이 가능하게 해주는 솔루션
→ Point-to-Point(가장 기본), Hub & Spoke(단일 접점인 허브 시스템), Message Bus(ESB, 애플리케이션 사이에 미들웨어), Hybrid (Hub & Spoke + Message Bus)
→ 암호화와 복호화가 모두 가능한 양방향 암호 방식
큐 → 운영체제의 작업 스케줄링
→ n개의 레코드 중에서 최소값을 찾아 첫 번째 레코드 위치에 놓고, 나머지 n-1개 중에서 다시 최소값을 찾아 두 번째 레코드 위치에 놓는 방식을 반복하여 정렬 (자리 교환)
→ 제산법, 제곱법, 폴딩법, 기수 변환법, 대수적 코딩법, 계수 분석법, 무작위법
→ xUnit, STAF, NTAF, Selenium, watir
ESB → 애플리케이션 간 연계, 데이터 변환, 웹 서비스 지원 등 표준 기반의 인터페이스를 제공하는 솔루션
개발한 소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 두고 테스트하는 방법
→ 사용자 인수 테스트, 운영상의 인수 테스트, 계약 인수 테스트, 규정 인수 테스트, 알파/베타 테스트
구분 | 드라이버 | 스텁 |
---|---|---|
필요 시기 | 상위 모듈 없이 하위 모듈이 있는 경우 하위 모듈 구동 | 상위 모듈은 있지만 하위 모듈이 없는 경우 하위 모듈 대체 |
테스트 방식 | 상향식 테스트 | 하향식 테스트 |
공통점 | 소프트웨어 개발과 테스트를 병행할 경우 이용 | 동일 |
차이점 | - 이미 존재하는 하위 모듈과 존재하지 않는 상위 모듈 간의 인터페이스 역할 | |
- 소프트웨어 개발이 완료되는 드라이버는 본래의 모듈로 교체됨 | - 일시적으로 필요한 조건만을 가지고 임시로 제공되는 가짜 모듈의 역할을 함 | |
- 시험용 모듈이기 때문에 일반적으로 드라이버보다 작성하기 쉬움 |
→ 테스트 대상 모듈이 호출하는 하위 모듈의 역할을 수행하는 것은 스텁
→ 노드들이 포인터로 연결되어 포인터를 찾아가는 시간이 필요하므로 선형 리스트에 비해 검색 속도가 느림
→ 빅오 표기법의 시간 복잡도를 표기하는 방법의 하나, 입력 데이터 수에 관계 없이 문제 해결에 하나의 단계만을 거친다는 것을 의미함
→ Commit과 Rollback 명령어에 의해 보장받는 트랜잭션의 특성
→ 데이터베이스 설계 및 소프트웨어 개발이 어려움
→ 제3정규형에서 결정자가 후보키가 아닌 것을 제거
→ 한 릴레이션에는 동일한 이름의 속성이 있을 수 없다!
→ 대체키: 후보키 중에서 기본키를 제외한 나머지 후보키
→ 이벤트가 발생할 때마다 관련 작업이 자동을오 수행되는 절차형 SQL
이벤트 → 시스템에 어떤 일이 발생한 것
프로시저 → 특정 기능을 수행하는 일종의 트랜잭션 언어, 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업을 수행
옵티마이저 → DBMS에 내장되어 작성된 SQL이 효율적으로 수행되도록 최적의 경로를 찾아 주는 모듈
→ 두 응용 프로세스 간의 통신에 대한 제어 구조를 제공
→ 연결의 생성, 관리, 종료를 위해 토큰 사용
실행 시간이 긴 프로세스에 불리한 SJF 기법을 보완하기 위한 것으로, 대기 시간과 서비스(실행) 시간을 이용하는 기법
→ 우선순위 계산식을 통해 산출된 값이 클수록 우선 순위가 높다
malloc()
→ 입력한 Byte 만큼 메모리를 할당하는 함수
포인터 변수 = malloc(크기);
→ IPv4에 비해 자료 전송 속도가 빠르다!
→ 프로토콜 데이터 단위는 패킷 ( 데이터링크 계층 → 프레임)
→ 시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있다
→ Wi-Fi에서 제정한 무선 랜(WLAN) 인증 및 암호화 관련 표준
→ DES의 보안 문제 해결을 위해 NIST에서 개발한 개인키 암호화 알고리즘
SEED → 한국인터넷진흥원에서 개발한 블록 암호화 알고리즘
ARIA → 국자정보원과 산학협회가 개발한 블록 암호화 알고리즘
DES → 미국 NBS에서 발표한 개인키 암호화 알고리즘
AES → 미국 표준 기술 연구소(NIST)에서 발표한 개인키 암호화 알고리즘
RSA → MIT의 라이베스트, 샤미르, 애들먼에 의해 제안된 공개키 암호화 알고리즘, 소인수 분해 문제를 이용한 공개키 암호화 기법에 널리 사용
→ 루프(폐회로)를 형성하지 않으면서 연결을 설정하는 알고리즘
→ 네트워크상에 광채널 스위치의 이점인 고속 전송과 장거리 연결 및 멀티 프로토콜 기능을 활용
→ 기존 무선 랜의 한계 극복을 위해 등장하였으며, 대규모 디바이스의 네트워크 생성에 최적화되어 차세대 이동통신, 홈네트워킹, 공공 안전 등의 특수목적에 사용되는 새로운 방식의 네트워크 기술을 의미함
프로젝트 완성에 필요한 작업을 나열하고 작업에 필요한 소요 기간을 예측하는데 사용하는 기법
- 프로젝트 내에서 각 작업이 수행되는 시간과 각 작업 사이의 관계를 파악할 수 있음
- 효과적인 프로젝트의 통제를 가능하게 해줌
- 경영층의 과학적인 의사 결정을 지원