소프트웨어가 어떤 문제를 해결하기 위해 제공하는 서비스에 대한 설명과 정상적으로 운영되는 데 필요한 제약 조건
기능 요구사항
비기능 요구사항
요구사항 개발 프로세스
도출
분석
명세
확인
공동으로 사용될 데이터를 중복을 배제하여 통합하고, 저장장치에 저장하여 항상 사용할 수 있도록 운영하는 데이터
DBMS : 사용자의 요구에 따라 정보를 생성, DB를 관리해주는 소프트웨어
스키마 : 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세
DB 설계 순서 : 요구 조건 분석 -> 개념 -> 논리 -> 물리 -> 구현
데이터 모델 : 현실 세계의 정보를 체계적으로 표현한 개념적 모형
개체 : 데이터베이스에 표현하려는 것. 현실 세계의 대상체
관계 : 1:1, 1:N, N:M으로 구별
E-R 모델 : 현실 세계의 무질서한 데이터를 개념적인 논리 데이터로 표현하기 위한 방법
관계형 DB의 릴레이션 구조
후보키, 기본키, 대체키, 슈퍼키, 외래키
무결성 : 참조 무결성과 개체 무결성
관계대수 : 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어
관계해석 : 관계 데이터의 연산을 표현하는 방법
정렬은 생략함
개발 환경 구축 : 개발 프로젝트를 이해하고 SW 및 HW 장비를 구축
하드웨어 환경 : Web Server, WAS, DB Server, File Server
소프트웨어 환경 : 시스템 소프트웨어(OS, 서버 프로그램, DBMS) + 개발 소프트웨어
웹 서버 기능 : HTTP/HTTPS 지원, 통신 기록, 정적 파일 관리, 대역폭 제한, 가상 호스팅(하나의 서버로 여러개 도메인 연결), 인증
개발 언어 선정 기준 : 적정성, 효율성, 이식성, 친밀성, 범용성
소프트웨어 아키텍처 : SW를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
모듈화 : 시스템의 기능들을 모듈 단위로 나누는 것
추상화 : 전체적이고 포괄적인 개념 설계 후 차례로 세분화해서 구체화시킴
단계적 분해 : 상위의 중요 개념으로부터 하위의 개념으로 구체화 시킴
정보 은닉 : 한 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 함
상위 설계와 하위 설계
협약에 의한 설계 : 컴포넌트 설계 시 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
아키텍처 패턴 : 전형적인 해결 방식 및 예제
레이어 패턴 : 계층으로 구분하여 구성
클라이언트-서버 패턴 : 하나의 서버-여러개의 클라이언트 컴포넌트
파이프-필터 패턴 : 데이터 스트림 절차의 각 단계를 필터로 캡슐화, 파이프 통해 전송 / 대표적으로 UNIX 쉘
MVC 패턴 : 모델, 뷰, 컨트롤러로 구성
마스터-슬레이브 패턴 : 장애 허용/병렬 컴퓨팅 시스템
브로커 패턴 : 분산 환경 시스템, 사용자가 원하는 서비스와 특성을 브로커에 요청 -> 브로커가 연결
피어-투-피어 : 하나의 컴포넌트가 클라이언트 or 서버 둘다 가능(파일 공유 네트워크)
이벤트-버스 패턴 : 소스가 이벤트 메시지를 발행(퍼블리시)하면, 구독한 리스너들이 이벤트를 처리(알림 서비스)
블랙보드 패턴 : 모든 컴포넌트들이 블랙보드 & 공유 데이터 저장소에 접근 가능(음성 인식, 차량 식별 등)
인터프리터 패턴 : 각 라인을 수행하는 방법을 지정, 기호마다 클래스를 갖도록 구성(번역기, 컴파일러, 인터프리터)
테스트 케이스 : 소프트웨어가 요구사항을 정확하게 준수했는지 확인하기 위핸 테스트 항목에 대한 명세서
공통 모듈 명세 기법의 종류:
재사용 : 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
코드 주요 기능 : 식별, 분류, 배열, 표준화, 간소화
종류
순차 코드 1 2 3 4
블록 코드 1001~1100
10진 코드 1000 : 공학, 2000 : 문학...
그룹 분류 코드 1-01-001 : 본사-총무부-인사계
연상 코드 TV-40 40인치 TV
표의 숫자 코드 120-720-1500 : 두께X폭X길이
합성 코드 : 연상코드 + 순차코드 등 2개 이상 코드 조합(KE-711 댄공 711기)
애플리케이션 테스트 : 결함 찾아내는 행위 또는 절차
테스트 기반에 따른 테스트
목적에 따른 테스트
정적 테스트 : 프로그램 실행 X
동적 테스트 : 프로그램 실행
개발 단계에 따른 테스트
테스트 케이스 : 테스트 항목에 대한 명세서. 사용자의 요구사항을 정확하게 준수했는지 확인하기 위해 설계.
테스트 시나리오 : 테스트 케이스 묶은 집합
테스트 오라클 : 사전에 정의된 참값을 대입하여 비교하는 기법
테스트 자동화 도구
Secure SDLC : SDLC + 보안
소프트웨어 개발 보안 요소
시큐어 코딩 : 보안 요소를 고려하여 코딩하는 것
세션 통제 : 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것
입력 데이터 검증 및 표현 관련 용어
SQL 삽입 : 내부 DB 서버의 데이터를 유출 및 변조, 관리자 인증을 우회하는 보안 약점
XSS : 악의적인 스크립트를 삽입해 정보를 탈취하거나 비정상적인 기능 수행 유발
메모리 버퍼 오버 플로 : 할당된 메모리 범위를 넘어선 위치에서 자료를 읽거나 쓰려고 할 때 유발
보안 기능 관련 용어
TOCTOU 경쟁 조건 : 검사 시점과 사용 시점을 고려하지 않고 코딩하는 경우 발생하는 보안 약점
널 포인터 역참조 : 널 포인터가 가리키는 메모리 위치에 값을 저장할 때 발생하는 보안 약점
접근 제어자 : Public -> Protected -> Default -> Private
개인 키 암호화 기법 : 동일한 키로 데이터를 암호화-복호화
공개 키 암호화 기법 : 공개키로 암호화, 비밀키로 복호화
해시 : 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환
TKIP : WEP의 취약성을 보완한 데이터 보안 프로토콜
보안 아키텍처 : 보안 요소 및 보안 체계를 식별하고 이들 간의 관계를 정의한 구조
보안 프레임워크 : 안전한 정보 시스템 환경을 유지하고 보안 수준을 향상시키기 위한 체계, ISO 27001, BS7799 기반
방화벽 : 정보 선별, 수용/거부/수정 기능 가진 침입 차단 시스템
침입 탐지 시스템
침입 방지 시스템 : 비정상적인 트래픽을 능동적으로 차단하고 격리하는 보안 솔루션.
데이터 유출 방지(DLP) : 내부 정보의 외부 유출을 방지하는 보안 솔루션
웹 방화벽 : SQL 삽입 공격, XSS 등 웹 기반 공격을 방어할 목적으로 만들어진 웹 서버에 특화된 방화벽
VPN : 마치 자신의 전용 회선을 사용하는 것처럼 해주는 보안 솔루션
NAC : Network Access Control, 내부 PC의 MAC 주소를 IP 관리 시스템에 등록한 후 일관된 보안 관리 기능을 제공
ESM : Enterprise Security Management, 다양한 장비에서 발생하는 로그 및 보안 이벤트를 통합하여 관리
AAA : 인증(Authenticcation), 인가(Authorization), 과금(Accounting)
정보보호관리체계(ISMS) : 우리나라는 KISA에서 운영. 정보 자산을 안전하게 보호하기 위한 보호 절차와 대책
서비스 거부 공격
세션 하이재킹 : 클라이언트 사이의 세션 정보를 가로채는 공격 기법
ARP Spoofing : ARP 취약점 이용. 자신의 MAC을 공격 대상의 것으로 변조. 패킷을 가로채거나 방해함
스니핑 : 네트워크 중간에서 남의 패킷 정보를 도청
워터링 홀 : 웹사이트를 사전에 감염
키로거 공격 : 키보드 움직임을 탐지
랜섬웨어 : 돈 요구하는 등 내부 문서나 파일을 암호화
백도어 : 시스템 설계자가 액세스 편의를 위해 시스템 보안을 제거하여 만들어 놓은 비밀 통로
기타 용어
SW 관련 신기술
HW 관련 신기술
RAID : 2개 이상의 하드디스크로 디스크 배열 구성, 데이터 블록을 서로 다른 디스크에 분산 저장하거나 다중화
Secure OS : 보안 기능을 갖춘 커널을 이식한 보안형 OS
DB 관련 신기술
회복 : DB가 손상되었을 때 손상되기 이전 상태로 복구하는 작업
병행제어 : 동시에 실행되는 트랜잭션들이 DB의 일관성을 파괴하지 않도록 트랜잭션 간 상호 작용을 제어하는 것
로킹 : 액세스 하기 전 Lock(잠금)을 요청해서 Lock이 허락되어야만 그 로킹 단위를 액세스할 수 있도록 하는 기법
타임 스탬프 순서 : 시간표(Time Stamp)를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행