첫 기출에서 과락에 점수 미달나서 충격받았는데... 그래도 어찌어찌 4회에서는 합격...! (턱걸이) 제발... 잘 풀어라...
2020년 1, 2회 문제 풀이
1과목: 소프트웨어 설계
디자인 패턴
- 행위(Behavioral) 패턴: Visitor, Observer, Strategy, Command 등
- 생성(Creational) 패턴: Builder, Prototype, Factory Method 등
- 구조(Structural) 패턴: Bridge, Adapter, Composite등
객체지향 프로그램
클래스 → 객체의 상태와 행위를 추상화하여 정의하는 틀
메소드 → 클래스 내의 함수
메시지 → 객체 간의 통신 수단
∗ 상속성 → 클래스의 특성을 물려받는 것
객체지향 기법
집단화 → 부분(part)과 전체(whole)의 관계 표현
일반화 → 상위-하위 클래스 관계
추상화 → 공통적인 특성 추출
캡슐화 → 데이터와 프로세스를 하나로 묶는 것
객체지향 분석 방법론
Coad와 Yourdon 방법
→ E-R 다이어그램을 사용하여 객체의 행위를 모델링 (객체 식별, 구조 식별, 주제 정의, 속성 및 관계 정의 등의 과정으로 구성)
→ 다른 방법론들과 달리 E-R 다이어그램을 적극 활용
코드 설계
순차 코드 → 일련 번호 부여 방식
블록 코드 → 구분 가능한 블록별로 코드 부여
연상 코드 → 명칭이나 품목의 특성을 나타내는 문자 사용
플랫폼 성능특성 분석
소프트웨어 설계 시 구축된 플랫폼의 성능 특성 분석에 사용되는 주요 지표는 응답 시간, 가용성, 사용률
∗ 서버 튜닝 → 성능 개선을 위한 작업
자료 사전
()
: 생략
{}
: 반복
[]
: 선택
|
: 또는
요구사항 검토 방법 - 워크 스루
검토회의 전 사전 검토 후 짧은 회의로 오류 검출, 동료 검토나 개발자 검토와는 달리 체계적이고 공식적인 절차 有
CASE가 갖고 있는 주요 기능
→ 그래픽 지원, 소프트웨어 생명주기 전 단계 연결, 다양한 개발 모형 지원
∗ 언어 번역 : 컴파일러의 기능
XP(eXtreme Programming) 5가지 가치
→ 의사소통, 단순성, 피드백, 용기, 존중
∗ 정형 분석 → 개발 방법론의 한 종류
DBMS 분석
주요 고려 사항: 성능, 가용성, 상호 호환성
∗ 네트워크 구성도 → 시스템 아키텍처 설계 시 고려사항
- 하향식 소프트웨어 개발을 위한 문서화 도구
- 가시적 도표, 총체적 도표, 세부적 도표로 구성
- 기능과 자료의 의존관계를 동시에 표현 가능
UI 설계 원칙
직관성: 누구나 쉽게 이해하고 사용 가능해야
유효성: 사용자의 목적을 정확하게 달성해야
유연성: 환경 변화에 대응할 수 있는 능력
무결성: 오류 없이 정확하게 수행해야
럼바우(Rumbaugh)의 객체지향 분석 절차
객체 모형 → 동적 모형 → 기능 모형
- 객체 모형: 시스템의 정적인 구조를 표현
- 동적 모형: 시스템의 제어 흐름을 표현
- 기능 모형: 시스템의 기능적 특성을 표현
데이터 흐름도(DFD)의 구성요소
- Process, Data Flow, Data Store
∗ Data Dictionary는 별도의 보조 자료
UML 확장 모델 - << >>
스테레오 타입 객체를 표현할 때 사용하는 기호
UML의 기본 요소를 확장하여 사용할 때 적용
TP monitor - 트랜잭션 처리를 감시하고 제어
분산 환경에서 트랜잭션 처리를 관리
소프트웨어 개발 방법 - 요구사항 분석
- 비용과 일정에 대한 제약 설정
- 타당성 조사
- 요구사항 정의 문서화
∗ 설계 단계 → 설계 명세서 작성
공통 모듈에 대한 명세 기법
명확성 → 기능에 대한 일관된 이해와 해석이 가능하도록 작성
UML Structural Diagram
→ Class Diagram, Object Diagram, Component Diagram
∗ Behavioral Diagram → Activity Diagram
2과목: 소프트웨어 개발
경계 값 분석
입력 범위의 경계값에서 버그가 자주 발생한다는 점을 이용한 테스트 기법
→ 각 범위의 경계가 되는 값과 그 근처의 값을 테스트 케이스로 선택
![image.png]()
문제에서 중요한 경계값
→ 59와 60 사이 (C와 B등급의 경계)
→ 79와 80사이 (B와 A등급의 경계)
90은 A등급 범위(80-100) 내의 중간값이기 때문에 경계값이 아니어서 버그 발견 가능성이 상대적으로 낮다!
좋은 테스트 케이스
- 59, 60 (C/B 경계)
- 79, 80 (B/A 경계)
- 0 (최소값)
- 100 (최대값)
차수와 노드
![image.png]()
- 차수: 노드가 가지는 최대 하위 노드의 수
- 단말 노드: 하위 노드가 없는 노드 (leaf node)
검증 검사 기법
- 알파 검사 → 개발자 환경에서 통제된 상태로 수행
- 베타 검사 → 실제 사용자 환경에서 수행
하향식 통합 테스트에서 Stub
→ 하위 모듈 역할을 임시로 대체하는 더미 모듈
∗ Driver
→ 상위 모듈 역할을 대체하는 더미 모듈
소프트웨어 품질 측정에서 개발자 관점에서 고려해야 할 항목
→ 정확성, 무결성, 산결성
∗ 사용성 → 사용자 관점
소프트웨어 테스트 - Pareto의 법칙
오류의 80%는 전체 모듈의 20% 내에서 발견된다는 법칙 (80:20법칙으로도 알려져있다)
→ 테스트 효율성의 중요한 원리!
DRM(디지털 저작권 관리)의 기술 요소
→ 암호화, 정책 관리, 크랙 방지
∗ 방화벽 → 네트워크 보안 기술
인터페이스 보안을 위한 솔루션
IPSec, SSL, S-HTTPS
STAF(Software Testing Automation Framework)
인터페이스 구현 검증 도구 중 하나
→ 분산 환경 테스트 자동화 프레임워크
→ 데몬을 이용한 테스트 수행 및 통합
SW 패키징 도구 활용 시 고려 사항
→ 다양한 환경에서의 사용을 고려해야 한다!
∗ 보안은 중요하지만 호환성도 고려해야 한다
소프트웨어 형상 관리
→ 소프트웨어 개발 전 과정의 변경사항 추적 및 통제
Black Box Testing
→ Boundary Value Analysis가 대표적인 기법
외계인 코드(Alien Code)
오래되거나 참고문서 또는 개발자가 없어 유지보수가 어려운 프로그램
전위 순회
루트 → 왼쪽 서브트리 → 오른족 서브트리
![image.png]()
→ + * * / A B C D E
알고리즘 시간 복잡도 O(1)
→ 알고리즘 수행시간이 입력 데이터 수와 관계 없이 일정함
정렬 알고리즘 중 합병 정렬 → O(NlogN)
ISO/IEC 9126 소프트웨어 품질 특성
- 기능성 → 하위특성: 적합성, 정확성, 보안성
- 사용성 → 하위특성: 학습성
EAI(Enterprise Application Integration)의 구축 유형
→ Point-to-Point, Hub & Spoke, Message Bus
소스코드 품질 분석 도구 중 정적 분석 도구
→ cppchieck, pmd, checkstyle
바정규화 유형 중 중복 테이블을 추가하는 방법
→ 집계 테이블, 진행 테이블, 특정 부분 테이블
3과목: 데이터베이스 구축
로킹(Locking)
여러 사용자가 동시에 데이터베이스에 접근할 때, 데이터의 일관성을 유지하기 위해 데이터의 접근을 제어하는 기법
→ 한 사용자가 데이터를 수정할 때 다른 사용자가 같은 데이터를 수정하지 못하도록 ‘잠금’을 거는 것, 병행제어의 단위
- 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있다
- 로킹 단위가 작아지면 로킹 오버헤드가 증가한다
- 로깅 단위가 작아지면 데이터베이스 공유도가 증가한다
- 한꺼번에 로킹할 수 있는 객체의 크기를 로킹 단위라고 한다
분산 데이터베이스의 특징
- 장애 투명성
- 병행 투명성
- 위치 투명성
- 중복 투명성
후보키 - 유일성 + 최소성
- 유일성: 튜플을 유일하게 식별
- 최소성: 필요 최소한의 속성으로 구성
DCL - 데이터 제어언어
트랜잭션 - Atomicity
→ All or Nothing의 원칙
트랜잭션의 연산이 모두 반영되거나 전혀 반영되지 않아야 한다
4과목: 프로그래밍 언어 활용
UNIX의 쉘
∗ 커널 - 프로세스, 기억장치, 입출력 관리 수행
TCP/IP 프로토콜
∗ 응용계층 프로토콜: SMTP, HTTP, FTP
C언어의 비트 논리 연산자
→ &
, |
, ^
(XOR), ~
(NOT)
∗ ?
→ 조건 연산자
결합도 (Coupling)
모듈 간의 상호 의존도
→ 결합도가 낮을수록 좋은 설계
→ 결합도가 높으면 시스템 구현 및 유지보수가 어렵다
스레드(Thread)
하나의 프로세스는 여러 개의 스레드를 가질 수 있다
→ 멀티스레딩을 통한 병렬 처리 가능
C언어의 배열
static int b[9] = {1, 2, 3}
→ 초기화되지 않은 요소는 0으로 자동 초기화
→ b[5] = 0
은행가 알고리즘 - 교착상태 회피(Avoidance) rlqjq
IEEE 802.11 무선 LAN 표준
802.11e → QoS 강화를 위해 MAC 지원 기능 채택
ARP
TCP/IP 네트워크에서 IP주소를 MAC 주소로 변환하는 프로토콜
HRN(Hightest Response-ratio Next)
응답률이 높은 프로세스가 우선 실행
∗ 응답률 = (대기시간+서비스시간) / 서비스시간
- 대기 시간이 긴 프로세스일 경우 우선순위가 높아짐
- SJF 기법을 보완하기 위한 방식
- 긴 작업과 짧은 작업 간의 지나친 불평등 해소
교착 상태 발생
- 필요충분조건: 상호배제, 점유와 대기, 비선점, 환형대기
∗ 선점 - 교착상태 해결 방법 중 하나
페이지 교체 (FIFO 페이지 교체)
- 페이지: 메모리를 일정한 크기로 나눈 블록
- 페이지 프레임: 물리적 메모리의 한 조각
- 페이지 부재: 필요한 페이지가 메모리에 없는 상황
- FIFO 페이지 교체 - 가장 먼저 들어온 페이지를 가장 먼저 교체하는 방식
![image.png]()
필요한 페이지가 현재 프레임에 없을 때 페이지 부재 발생 → 가장 오래된 페이지를 제거하고 새로운 페이지를 넣음
음 걍 버리자
사용할 수 없는 변수명 - C언어
text-color
→ 변수명에 하이픈(-
) 사용 불가
- 알파벳, 숫자, 언더스코어(
_
)만 사용 가능
IPv6
- 128qlxmdml wnth rhdrks wprhd
- 인증 및 보안 기능 포함
- 패킷 크기는 가변적
- IPv6 확장 헤더를 통해 네트워크 기능 확장이 용이함
기본 프로세스 상태
→ Ready, Running, Blocked, Exit 등
IPv6 주소 체계
- Unicast, Anycast, Muticast
응집도 순서 (높음→낮음)
기능적 → 순차적 → 교환적 → 절차적 → 시간적 → 논리적 → 우연적
JAVA 언어의 접근제한자
→ public, protected, private
∗ package → 키워드
스크립트 언어
→ PHP, Python, Basic
∗ 컴파일 언어 - COBOL
OSI-7계층
신뢰성 있는 데이터 전송 → 전송 계층
오류 검출, 복구, 흐름 제어 담당
5과목: 정보시스템 구축 관리
JSON
데이터의 객체를 속성값의 쌍 형태로 표현하는 형식
JavaScript Object Notation
→ 웹과 프로그램 간의 데이터 교환에 널리 사용되는 경량의 데이터 형식
RIP 라우팅 프로토콜
- 최대 홉수를 15로 제한
- 홉 수를 기반으로 하는 거리 벡터 라우팅 프로토콜
- Routing Information Protocol
Smurfing
IP나 ICMP의 특성을 악용하여 시스템을 마비시키는 공격
네트워크 자원을 고갈시켜 서비스 거부 상태를 만든다
CMM (Capability Maturity Model)
초기 → 반복 → 정의 → 관리 → 최적화
PICONET - 무선 네트워크 기술
여러 개의 독립된 통신장치가 UWB나 블루투스 기술을 사용하여 통신망을 형성하는 무선 네트워크 기술
COCOMO model
- organic 유형 : 5만 라인 이하의 소규모 소프트웨어 개발 프로젝트에 적용
Key Logger Attack
키보드 입력을 탐지해 정보를 빼가는 해킹 공격
사용자의 키보드 입력을 몰래 기록하여 정보 탈취
LOC 기법에 의한 개발 소요 기간 계산
- 총 라인 수 : 50000
- 월간 생산성 : 200라인
- 개발자 수 : 10명
- 계산 = 50000 / (200 x 10) = 25개월
Putnam 모형
→ Rayleigh-Norden 곡선을 이용한 프로젝트 비용 산정 기법
RSA
소인수 분해 문제를 이용한 공개키 암호화 알고리즘
→ 가장 널리 사용되는 비대칭 암호화 알고리즘
나선형 모형
프로토타입을 지속적으로 발전시켜 최종 소프트웨어를 개발하는 방법
- 위험 분석과 관리가 중심
- 점진적인 개발 방법론
Ransonware
사용자의 컴퓨터에 침입해 내부 분서 파일 등을 암호화해 사용자가 열지 못하게 하는 공격
→ 암호 해독용 프로그램의 전달을 조건으로 사용자에게 돈을 요구하기도 한다
백도어 탐지 방법
→ 단일 포트 x! 모든 포트를 검사해야 한다
스택가드
버퍼 오버플로우 공격을 탐지하고 방지하는 기술
프레임워크
소프트웨어 개발 프레임워크 적용 시 시스템 복잡도를 감소시킨다
시스템 무결성
오직 인가된 사용자만 수정할 수 있는 보안 요소
하둡
tripwire
→ 크래커의 침입으로 인한 백도어 설치나 설정 파일 변경을 분석하는 도구
폭포수 모형
- 요구사항 변경이 어렵다!
- 순차적인 접근 방법
- 단계적 정의와 산출물 명확
- 모형의 적용 경험과 성공 사례가 많음
테일러링 개발 방법론
내부 기준 → 기술환경, 납기/비용, 구성원 능력
2020년 3회 문제 풀이
1과목: 소프트웨어 설계
디자인 패턴 - Factory Method
- 객체 생성을 위한 인터페이스 정의
- 실제 생성될 클래스는 서브클래스가 결정
- Virtual-Constructor 패턴이라고도 함
럼바우 객체 지향 분석
객체 모델링 → 동적 모델링 → 기능 모델링
미들웨어 솔루션 유형
- WAS (Web Application Server)
- ORB (Object Request Broker)
- RPC (Remote Procedure Call)
∗ Web Server → HTTP 프로토콜을 기반으로 클라이언트의 요청을 처리하는 서버 소프트웨어
UML 시퀀스 다이어그램
주요 구성 요소 → 객체 (Object), 생명선(Lifeline), 실행 (Activation), 메시지 (Message)
∗ 확장은 시퀀스 다이어그램의 요소가 아니다
디자인 패턴 → 행위적 패턴
∗ 생성 패턴 → 프로토타입 패턴
계약에 의한 설계 (Design by Contract)
선행조건 : 오퍼레이션 사용 전에 참이어야 할 조건
결과조건 : 사용 후 만족되어야 할 조건
불변조건 : 실행 중 항상 만족되어야 할 조건
행위 다이어그램
유스케이스 다이어그램, 시퀀스 다이어그램, 활동 다이어그램
∗ 구조 다이어그램 → 배치 다이어그램
일반화 관계
![image.png]()
‘차’ 클래스와 하위 클래스 간의 일반화(상속) 관계
LSP (Liskov Substitution Principle)
리스코프 치환 원칙
→ 상위 타입의 객체를 하위 타입의 객체로 치환해도 작동에 문제가 없어야 한다는 원칙
자료 흐름도(DFD) 구성 요소
- Process
- Data Flow
- Data Store
- Terminator
CASE(Computer-Aided Software Engineering) 도구
- 소프트웨어 개발 과정의 일부 또는 전체를 자동화하기 위한 도구
- 표준화된 개발 환경 구축 및 문서 자동화 기능 제공
- 작업 과정 및 데이터 공유를 통해 작업자간 커뮤니케이션 증대
- 2000년대 이전부터 사용되어 왔음
인터페이스 요구사항 검토 방법 : 동료검토
→ 요구사항 명세서 작성자가 설명하고 이해 관계자들이 설명을 들으면서 결함을 발견하는 방식
2과목: 소프트웨어 개발
ISO/IEC 12119
패키지 소프트웨어의 품질 요구사항 및 테스트를 위한 국제 표준
블랙박스 테스트 유형
∗ 화이트박스 테스트 → 조건, 루프 검사
McCabe의 cyclomatic 공식
V(G) = 에지(e) - 노드(n) + 2 또는 영역(p) + 1
![image.png]()
에지 = 6, 노드 = 4, 영역 = 3
→ 6 - 4 + 2 = 4 or 3 + 1 = 4
선택 정렬
- 주어진 리스트에서 최솟값을 찾음
- 맨 앞의 값과 교체
- 맨 앞을 제외한 나머지 리스트에서 반복
![image.png]()
1회전 → 14, 37, 17, 40, 35
2회전 → 14, 17, 37, 40, 35
3회전 → 14, 17, 35, 40, 37
소프트웨어 품질 목표 - 신뢰성
→ 주어진 시간 동안 주어진 기능을 오류 없이 수행하는 정도를 나타냄
알고리즘 설계 기법
- Divide and Conquer (분할 정복)
- Greedy (탐욕)
- Backtracking (백트래킹)
제품 소프트웨어의 형상 관리 역할
→ 형상 관리를 통해 이전 리버전이나 버전에 대한 정보에 접근 가능하여 배포본 관리에 유용
→ 불필요한 사용자의 소스 수정 제한
→ 동일한 프로젝트에 대해 여러 개발자 동시 개발 가능
∗ 비용 관리 → 별도의 영역
DRM(디지털 저작권 관리) 기술
- 콘텐츠 암호화 및 키 관리
- 콘텐츠 식별체계 표현
- 라이센스 발급 및 관리
물리데이터 저장소의 파티션 설계에서 파티션 유형
하향식 통합 테스트
→ 깊이 우선 방식 또는 너비 우선 방식
→ 상위 컴포넌트를 테스트하고 점증적으로 하위 컴포넌트를 테스트
→ 하위 컴포넌트 개발이 완료되지 않은 경우 스텁(Stub)을 사용하기도 함
AJAX
→ 자바스크립트를 사용한 비동기 통신 기술
클라이언트와 서버 간에 XML 데이터를 주고받는 기술
소프트웨어 재공학의 장점
- 위험부담 감소
- 비용 절감
- 시스템 명세의 오류 억제
인수테스트
→ 알파/베타 테스트 수행
트리
- 차수(degree) → 가장 많은 자식을 가진 노드의 자식 수
3과목: 데이터베이스 구축
보이스/코드 정규형
→ 릴레이션 R의 모든 결정자가 후보키
트랜잭션의 원자성 (Atomicity)
→ Commit과 Rollback 명령어에 의해 보장 받음
로킹 (병행제어 기법)
- 로킹의 대상이 되는 객체의 크기를 로킹 단위라고 함
- 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있음
- 로킹의 단위가 작아지면 로킹 오버헤드가 증가함
- 로킹의 단위가 커지면 데이터베이스의 공유도가 감소함
뷰(View)
- 데이터 보안 용이
- 사용자 데이터 관리 용이
- 논리적 독립성 제공
분산 데이터베이스의 투명성 종류
- Location Transparency
- Repliation Transparency
- Failure Transparency
이행 규칙
X → Y이고 Y→ Z이면 X→Z가 성립함
BETWEEN A AND
B
즉각 갱신 기법
→ 데이터베이스 로그(log)를 필요로하는 회복 기법
관계대수의 순수관계 연산자
→ Cartasian Product, Division, Project
∗ Select → 확장된 관계 연산자
이상 현상(abnomaly)
→ 데이터의 중복으로 인해 발생하는 곤란한 현상
4과목: 프로그래밍 언어 활용
버퍼 오버플로
→ 메모리를 다루는 데 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점
IPv6
→ 128비트의 주소체계를 사용
→ 멀티미디어의 실시간 처리 가능, IPv4보다 보안성 강화, 자동으로 네트워크 환경 구성 가능
HRN 방식 스케줄링 ㅓㅊ리 순서
응답률 = (대기시간 + 서비스 시간) / 서비스 시간
운영체제
- 다중 사용자와 다중 응용 프로그램 환경 하에서 자원의 현재 상태를 파악하고 자원 분배를 위한 스케줄링 담당
- CPU, 메모리 공간, 기억 장치, 입출력 장치 등의 자원 관리
- 입출력장치와 사용자 프로그램 제어
∗ 매크로 프로세서, 어셈블리, 컴파일러 → 시스템 소프트웨어의 종류
배치 프로그램의 필수 요소
- 자동화: 심각한 오류 상황 외에는 사용자의 개입 없이 동작해야 함
- 안정성: 어떤 문제가 생겼는지, 언제 발생했는지 등을 추적
- 대용량 데이터: 대용량의 데이터를 처리할 수 있어야 함
- 성능: 주어진 시간 내에 처리를 완료할 수 있어야 하고, 동시에 동작하고 있는 다른 애플리케이션을 방해하지 말아야 함
TCP 프로토콜
→ 헤더의 기본 크기는 20바이트이며, 최대 60바이트까지 확장 가능
→ 신뢰성이 있는 연결 지향형 전달 서비스, 스크림 전송 기능 제공, 순서 제어/오류 제어/흐름 제어 기능 제공
절차적 응집도
→ 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도
OSI-7Layer: 데이터링크 계층
- 링크의 설정과 유지 및 종료를 담당
- 노드 간의 오류 제어와 흐름 제어 기능을 수행
결합도
가장 강한 것 - Common Coupling
그 다음 - Control Coupling
메모리 관리 기법 - Worst fit
가장 큰 공간에 할당하는 방식
broadcast IP 주소 구하기
200.1.1.0/24
네트워크를 FLSM 방식을 이용하여 10개의 Subnet으로 나누고, ip subnet-zero를 적용
이 때 서브네팅된 네트워크 중 10번째 네트워크의 broadcast IP 주소는?
1. 10개의 서브넷을 만들기 위해서는 4비트가 필요함
- 2^3 = 8 (부족)
- 2^4 = 16 (충분)
2. `/24` 네트워크를 4비트 더 사용하므로 서브넷 마스크는 `/28`이 된다
- 각 서브넷은 2^4 = 16개의 IP주소를 가짐
3. 각 서브넷의 시작 주소는 16씩 증가
- 0번째: 200.1.1.0
- 1번째: 200.1.1.16
- 2번째: 200.1.1.32
...
- 9번째(10번째 네트워크): 200.1.1.144
4. 브로드캐스트 주소는 다음 서브넷의 시작 주소 -1
- 10번째 네트워크의 시작: 200.1.1.144
- 다음 서브넷의 시작: 200.1.1.160
-> 브로드캐스트 주소: 200.1.1.159
서브넷 주소가 0번부터 시작하는 것은 ip subnet-zero 적
파이썬의 문자열 자르기
string[0:3]+string[-3:]
→ 문자열에서 처음 3글자와 마지막 3글자를 추출하여 합침
제어 결합도 (Control Coupling)
→ 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어신호를 이용하여 통신하는 경우
→ 하위 모듈에서 상위 모듈로 제어신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도현상이 발생하게 되는 결합도
UNIX
→ 새로운 프로세스를 생성하는 명령어 : fork
5과목: 정보시스템 구축 관리
디지털 트윈
→ 물리적 사물과 동일하게 컴퓨터에 표현되는 가상의 모델
→ 실제 자산을 소프트웨어로 가상화하여 최적화, 문제 예측, 생산성 향상 등을 도모하는 기술
정보 보안의 3대 요소
→ 기밀성, 무결성, 가용성
Mashup
→ 웹에서 제공하는 정보 및 서비스를 이용하여 새로운 소프트웨어나 서비스, 데이터베이스 등을 만드는 기술
기능 점수(Funtional Point) 모형에서 비용산정에 이용되는 요소
- 입력 양식 수
- 출력 보고서 수
- 조회수
- 내부 논리파일 수
- 외부 연계파일 수
블록 암호화 방식
∗ 스트림 암호화 방식 → RC4
SLIM
→ Putnam 모형을 기초로 만든 자동화 추정 도구
RSA
→ 1978년 MIT에서 제안된 공개키 암호화 알고리즘
→ 큰 숫자를 소인수분해하기 어렵다는 것에 기반
COCOMO 모델의 프로젝트 유형
- Organic (조직형)
- Semi-detached (반분리형)
- Embedded (임베디드형)
Data Mining
→ 대량의 데이터를 분석하여 데이터 간의 상호관계를 규명하고 패턴을 찾아내는 기법
Mesh Network
→ 대규모 디바이스의 네트워크 생성에 최적화된 새로운 방식의 네트워크 기술
DDos 공격
→ Tribe Flood Network
- 거리 벡터 라우팅 프로토콜
- 소규모 네트워크 환경에 적합
- 최단경로탐색에는 Bellman-Ford 알고리즘 사용
- 최대 홉 카운트는 15홉(16은 무한대로 간주)
폭포수 모형
→ 소프트웨어 생명주기 모형 중 고전적 생명주기 모형
→ 선형 순차적 모델
타당성 검토 → 계획 → 요구사항 분석 → 구현 → 테스트 → 유지보수
소프트웨어 나선형 모델
계획 수립 → 위험 분석 → 개발 및 검증 → 고객 평가
소프트웨어 재사용 방법 → 생성 중심
전자 칩과 같은 소프트웨어 부품을 만들어 끼워 맞추는 방식의 재사용 방법
SPICE
→ 소프트웨어 프로세스 평가 및 개선을 위한 국제 표준
Seven Touchpoints
→ SW 개발보안 방법론 중 하나
→ 보안의 모범 사례를 SDLC에 통합한 방법론
2020년 4회 문제 풀이
1과목: 소프트웨어 설계
XP(eXtreme Programming) 기본 원리
- Pair Programming: 두 명이 짝을 이뤄 코딩
- Collective Ownership: 코드의 공동 소유
- Continuous Intergration: 지속적인 통합
럼바우(Rumbaugh)의 객체지향 분석 기법의 동적 모델링
→ 상태 다이어그램 (객체의 상태 변화와 이벤트 표현)
CASE(Computer Aided Software Engineering)의 주요 기능
- S/W 생명주기 전 단계 연결
- 그래픽 지원
- 다양한 개발 모형 지원
∗ 컴파일러 → 언어 번역
캡슐화(Encapsulation)
- 데이터와 함수를 하나로 묶음
- 인터페이스 단순화
- 재사용성 향상
- 변경 시 영향 최소화
∗ 상속(Inheritance) → 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받음
인터페이스 분리 원칙 (Interface Segregation Principle)
→ 클라이언트는 자신이 사용하지 않는 메서드에 의존하면 안 된다는 원칙
파이프-필터 아키텍처
→ 데이터 스트림을 순차적으로 처리하는 구조, 각 필터가 입력을 받아 처리하고 다음 필터로 출력을 전달
블록 코드
→ 물리적 수치를 이용해 만든 코드
→ 무게, 면적, 용량 등의 물리적 수치를 활용하여 코드 생성
디자인 패턴
- 소프트웨어 구조 파악 용이
- 객체지향 설계 생산성 향상
- 재사용성 증가
∗ 절차형 언어와는 관계 없음
DFD(data flow diagram)
→ 시스템의 자료 흐름을 표현하는 도구
- 자료 흐름 그래프 또는 버블 (bubble) 차트라고도 함
- 구조적 분석 기법에 이용
- 화살표, 원, 사각형, 직선(단선/이중선)으로 표시
∗ 시간 흐름을 명확하게 표기하기는 어렵다
럼바우 분석 기법
→ 객체 모델링, 동적 모델링, 기능 모델링
UML의 기본 구성 요소
- Things(사물)
- Relationship(관계)
- Diagram(다이어그램)
소프트웨어 상위 설계
→ 아키텍처 설계, 인터페이스 정의, 사용자 인터페이스 설계
∗ 모듈 설계 → 하위 설계
자료 사전(Data Dictionary)
UI 개발 시스템의 기능
- 사용자 입력 검증
- 에러 처리와 메시지
- 도움말과 프롬프트 제공
요구사항 명세 기법
- 비정형 명세는 자연어 기반
- Z 명세는 정형 명세에 속함
- 정형 명세는 수학적 기반
- 정형 명세 기법은 비정형 명세 기법에 비해 표현이 간결
→ 정형 명세는 수학적 기반이므로, 비정형 명세가 Z 기법을 사용한다는 설명은 틀림
요구 분석 과정
→ 문서화를 통한 유지보수 용이, 자료흐름도, 자료사전 활용, 소단위 명세서 활용
애자일 방법론
→ 스크럼, XP(익스트림 프로그래밍), 기능중심 개발
미들웨어
→ 클라이언트와 서버 간 통신 담당
GoF(Gangs of Four) 디자인 패턴
∗ 추상 패턴같은 건 존재하지 않는다
2과목: 소프트웨어 개발
EAI(Enterprise Application Integration) Hybrid 구축 유형
- Hub & Spoke와 Message Bus의 혼합 방식
- 필요한 경우 한 가지 방식으로 EAI 구현 가능
- 데이터 병목현상 최소화
∗ point to point 방식은 중간 미들웨어 없이 직접 연결하는 방식 → Hybrid 유형과 다르다
소스 코드 품질 분석 도구
- 정적 분석 도구: checkstyle, pmd, cppcheck
- 동적 분석 도구: valance
Postfix 연산식
3 4 * 5 6 * +
연산 결과
- 3 4 * = 12 (첫 번째 연산)
- 5 6 * = 30 (두 번째 연산)
- 12 + 30 = 42 (마지막 연산)
인터페이스 보안을 위한 네트워크 영역 보안 프로토콜
- SSL: 웹 보안 프로토콜
- IPSec: IP 계층 보안 프로토콜
- S-HTTP: HTTP 보안 프로토콜
검증(Validation) 검사 기법
- 알파 검사: 개발자 장소에서 사용자가 개발자 앞에서 검사
- 베타 검사: 선정된 사용자가 직접 장소에서 검사
- 디버깅 검사: 오류 발견과 수정
- 형상 검사: 형상 관리 항목 검사
삽입 정렬 1회전 후 결과
초기 자료: 8, 3, 4, 9, 7
1회전 과정
소프트웨어 설치 매뉴얼
→ 사용자 중심으로 작성, 설치 시작부터 완료까지 순서대로, 예외 상황 별도 구분, 목차/개요/기본사항 포함
인터페이스 구현 검증 도구
- xUnit: 단위 테스트 프레임워크
- ESB: 서비스 통합 플랫폼
- STAF: 소프트웨어 테스트 자동화 프레임워크
∗ NTAF → 검증 도구 아님
소프트웨어 형상 관리 항목
→ 소스 코드, 프로젝트 요구 분석서, 운영 및 설치 지침서
∗ 프로젝트 개발 비용은 형상 관리 대상이 아님
내부 스키마
- 물리적 저장 장치 관점에서 데이터베이스 구조
- 실제 데이터베이스에 저장될 레코드 형식 정의
- 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 나타냄
INORDER 운행 트리
왼쪽 서브트리 → 루트 → 오른쪽 서브트리 순으로 방문
n개의 노드로 구성된 무방향 그래프의 최대 간선 수
- 무방향 그래프에서 한 노드는 다른 모든 노드와 연결 가능
- 최대 간선 수 = n(n-1)/2
테스트 오라클
- 테스트 결과의 참/거짓을 판단하기 위한 기준
- 참 값을 미리 정의하여 비교하는 기법
- 종류 → 참 오라클, 샘플링 오라클, 휴리스틱 오라클, 일관성 검사
빌드 자동화 도구
- Gradle은 태스크 기반 빌드 자동화 도구
- 지속적 통합 개발환경에서 활용
- Ant, Gradle, Jenkins 등이 대표적
- Jenkins는 Groovy 기반, 안드로이드 앱 개발 환경 전용은 x
저작권 관리 구성 요소
- 콘텐츠 제공자: 저작권자
- 콘텐츠 분배자: 암호화된 콘텐츠를 유통하는 사람이나 곳
- 클리어링 하우스: 키 관리 및 라이선스 발급
- DRM 컨트롤러: 이용 권한 통제
블랙박스 테스트 기법
- 동치 클래스 분해, 경계값 분석, 원인-결과 그래프
∗ 화이트박스 테스트 기법 → 기초 경로 검사
해싱 함수 - 폴딩법
→ 레코드 키를 여러 부분으로 나누고, 나눈 부분의 각 숫자를 더하거나 XOR 한 값을 홈 주소로 사용
→ 키의 각 부분을 더하여 주소 계산
DRM(Digital Rights Management) 기술
- 콘텐츠 암호화 및 키 관리
- 콘텐츠 식별체계 표현
- 라이선스 발급 및 관리
3과목: 데이터베이스 구축
트랜잭션의 특성 - 원자성(Atomicity)
→ 트랜잭션의 연산은 모두 실행되거나 모두 실행되지 않아야 한다
→ 트랜잭션은 더 이상 분해할 수 없는 작업의 최소 단위
CRUD 분석
→ 데이터베이스에 영향을 주는 생성(CREATE), 읽기(READ), 갱신(UPDATE), 삭제(DELETE) 연산을 분석
→ 프로세스와 테이블 간의 매트릭스를 생성하여 트랜잭션을 분석
반정규화(De-normalization)
- 시스템의 성능 향상과 개발/운영의 단순화를 위해 중복, 통합, 분리 등을 수행
- 정규화된 엔티티, 속성, 관계에 대해 수행
- 성능 향상을 위해 의도적으로 정규화 원칙 위배
E-R 다이어그램 기호
- 사각형: 개체 타입
- 마름모: 관계 타입
- 타원: 속성
- 선: 개체 타입과 속성을 연결
슈퍼키(Super Key)
→ 릴레이션에서 튜플을 유일하게 식별할 수 있는 속성 또는 속성들의 집합
→ 유일성은 만족하지만 최소성은 만족하지 못함
SQL GRANT문
- DBA가 사용자에게 특정 권한을 부여할 때 사용
UPDATE ON
구문으로 테이블 갱신 권한 부여
관계 대수(Relational Algebra)
- 릴레이션 조작을 위한 연산의 집합
- 일반 집합 연산과 순수 관계 연산으로 구분
- 절차적 언어이므로, 원하는 정보를 어떻게 유도하는가를 명시
∗ 비절차적이라는 설명은 틀림
로킹(Locking) 기법
- 로킹 단위가 작아지면 병행성 수준이 높아짐
- 로킹의 대상이 되는 객체의 크기를 로킹 단위라고 함
- 데이터베이스도 로킹 단위가 될 수 있음
- 로킹 단위가 커지면 로크 수가 작아 로킹 오버헤드가 감소
데이터베이스 권한 회수
→ REVOKE
명령어 사용하여 권한 회수
뷰(VIEW)
- 뷰 정의는
ALTER
문이 아닌 CRAETE VIEW
문을 사용
- 뷰 위에 다른 뷰를 정의할 수 있음
- 뷰에 대한 삽입, 갱신, 삭제 연산은 제약이 따른다
데이터 모델 요소
- 결정자가 후보키가 아닌 함수적 종속 제거
- 제3정규형보다 더 엄격한 정규화 단계
데이터베이스 물리적 설계 단계
- 저장 레코드 양식 설계
- 레코드 집중의 분석 및 설계
- 접근 경로 설계
릴레이션의 차수(degree)
→ 릴레이션 스키마의 속성 수가 차수이다!!!
OLAP 연산
- roll-up: 상위 레벨로 데이터 집계
- drill-down: 하위 레벨로 데이터를 상세화
- dicing
4과목: 프로그래밍 언어 활용
UNIX SHELL 환경 변수 출력 명령어
env
: 환경 변수 출력
printenv
: 환경 변수 출력
setenv
: 환경 변수 설정
Java 데이터 타입 크기
- byte: 1byte
- short: 2byte
- int: 4byte
- long: 8byte
Java 출력 함수
- System.out.println(): 출력 후 줄바꿈
- System.out.print(): 출력만 수행
- System.out.printf(): 형식화된 출력
운영체제 커널의 기능
- 프로세스 생성/종료
- 파일 시스템 관리
- 기억 장치 할당/회수
OSI 7계층 - 전송 계층
- 단말기 사이의 오류 수정과 흐름 제어 담당
- 신뢰성 있는 데이터 전송 보장
- 종단간(End-to-End) 통신 서비스 제공
Python의 슬라이싱
>>> a=[0,10,20,30,40,50,60,70,80,90]
>>> a[:7:2]
→ 처음부터 인덱스 7전까지 2칸씩 건너뛰며 추출
→ [0, 20, 40, 60]
SJF(Shortest Job First) 스케줄링
실행 시간이 가장 짧은 프로세스 먼저 실행
FIFO 페이지 교체 알고리즘
페이지 참조 순서: 1, 2, 3, 1, 2, 4, 5, 1
TCP 흐름제어 기법
- Stop and Wait: 하나의 프레임 전송 후 응답 대기
- 손실된 프레임 1개만 전송하고 수신자의 응답을 기다림
결합도(Coupling)
- 데이터 결합도: 매개변수로 데이터 전달 시의 결합
- 내용 결합도: 다른 모듈의 내용 직접 참조
- 공통 결합도: 전역 데이터를 참조하는 결합
우연적 응집도
→ 모듈 내 구성 요소들 간에 의미있는 연관관계가 없음
→ 서로 다른 기능을 수행하는 요소들이 모여있음
Java 접근 제어자
→ private, public, default, protected
UDP 특성
- 비연결형 서비스로 흐름제어 없음
- 신뢰성보다 속도 중시
- 헤더가 단순하여 오버헤드가 적음
세그먼트 테이블 논리주소 계싼
- 논리주소(2, 176)에서 2는 세그먼트 번호
- 시작주소 222에 오프셋 176을 더함
- 결과: 398
TCP/IP 프로토콜
→ ARP: 논리주소를 물리주소로 변환
PHP 연산자
5과목: 정보시스템 구축 관리
VPN(Virtual Private Network)
- 공중망에 사설망을 구축하여 전용망과 같은 효과
- 인터넷과 같은 공중망을 사용하면서도 보안성 제공
- 비용 효율적인 네트워크 구축 가능
CMM(Capability Maturity Model) 레벨
→ 초기, 관리, 정의, 최적화 단계로 구성
폭포수 모형(Waterfall Model)
- 가장 오래된 소프트웨어 개발 생명주기 모형
- 각 단계가 순차적으로 진행
- 이전 단계가 완료되어야 다음 단계 진행 가능
SOA(Service Oriented Architecture)
→ 표현층, 프로세스층, 비즈니스층 구성
DAS(Direct Attached Storage)
→ 저장장치를 호스트에 직접 연결하는 방식, 네트워크 디바이스 없이 직접 연결
SADT(Structured Analysis and Design Technique)
- SoftTech사가 개발한 구조적 분석 도구
- 블록 다이어그램 사용
XP(eXtreme Programming)의 5가지 가치
→ 용기, 단순성, 의사소통, 피드백
MAC(Mandatory Access Control)
- 강제적 접근 통제
- 보안 등급과 허가 등급을 비교하여 접근 통제
나선형 모델
계획 수립 → 위험 분석 → 개발 및 검증 → 고객 평가
소프트웨어 비용 추정 모형
→ COCOMO, Putnam, Function-Point 모형
공개키 암호화 방식
- 공개키로 암호화된 메시지는 개인키로 복호화
- 비대칭 암호기법
WDM(Wavelength Division Mulitplexing)
- 광섬유 통신에서 서로 다른 파장의 빛을 동시에 전송
- 파장이 다른 광신호를 다중화하는 방식
XXS(Cross Site Scripting)
- 웹페이지에 악성 스크립트를 삽입하여 실행
- 사용자의 정보를 탈취하는 공격 기법
CBD(Component Based Development)
- 컴포넌트 기반 개발 방법론
- 새로운 기능 추가가 쉬운 확장성
- 소프트웨어 재사용 가능
∗ 1960년대 적용되었다는 설명은 틀림
SDDC(Software Defined Data Center)
- 커뮾팅, 네트워크, 스토리지 등을 소프트웨어로 정의
- 인력 개입 없이 소프트웨어 조작만으로 자동 제어 관리
- 데이터센터 내 모든 자원을 가상화하여 서비스
∗ 특정 하드웨어 종속은 특징 x
보안 운영체제 (Secure OS)
- 운영체제 커널에 보안 기능 추가
- 해킹으로부터 시스템 보호
NS(Nassi-Schneiderman) 차트
- 논리의 기술에 중점을 둔 도형식 표현
- 연속, 선택 및 다중 선택, 반복 등의 제어논리 구조로 표현
- 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는데 적합
∗ 화살표 사용은 ns의 특징 x
MapReduce
- 구글이 개발한 분산 처리 프로그래밍 모델
- 대용량 데이터의 분산 처리에 사용
SPICE(Software Process Improvement and Capability dEtermination)
- 소프트웨어 프로세스 개선 및 능력 측정의 국제 표준
- ISO/IEC 15504