! 오답노트!
제 1 과목 : 소프트웨어 설계
1. 유스케이스(Use Case)의 구성 요소 간의 관계에 포함되지 않는 것은?
유스케이스(Use Case)의 구성 요소 간의 관계
포함 관계 (Inclusion Relationship)
확장 관계 (Extension Relationship)
일반화 관계 (Generalization Relationship)
의존 관계 (Dependency Relationship)
- 구체화 관계는 없다.
제 2 과목 : 소프트웨어 개발
1. 다음과 같이 레코드가 구성되어 있을 때, 이진 검색 방법으로 14를 찾을 경우 비교되는 횟수는?
1. 2
2. 3
3. 4
4. 5
단계 1: 배열의 중간 요소를 선택합니다.
단계 2: 찾고자 하는 값과 중간 요소를 비교합니다.
단계 3: 값이 중간 요소보다 작으면 왼쪽 부분 배열에서 검색을 계속합니다. 값이 중간 요소보다 크면 오른쪽 부분 배열에서 검색을 계속합니다.
단계 4: 값이 중간 요소와 일치하면 찾은 것으로 처리하고 종료합니다.
단계 5: 배열의 크기가 1이 될 때까지 위 단계를 반복합니다.
low : 0 mid : 7 high : 14
mid[7] = 8 < 14
low : 8 mid : 11 high : 14
mid[11] = 12 <14
low : 12 mid : 13 high : 14
mid[13] = 14
끝.
2. 정렬
버블 정렬 (Bubble Sort):
인접 비교 -> 오른쪽으로
삽입 정렬 (Insertion Sort):
앞에 것(이미 정렬된 공간) 에 삽입
선택 정렬 (Selection Sort):
정렬되지 않은 부분에서 가장 작은 값을 찾아 정렬된 부분의 뒤에 추가합니다.
전체 검색 후 최솟값을 왼쪽(이미 정렬된 공간) 에 계속 정렬
합병 정렬 (Merge Sort):
분할 정복 알고리즘으로, 배열을 반으로 나눈 후 각각을 정렬하고 합칩니다.
재귀적으로 동작하며, 안정적이면서도 빠른 정렬 알고리즘 중 하나입니다.
퀵 정렬 (Quick Sort):
분할 정복 알고리즘으로, 배열에서 피벗을 선택하여 피벗보다 작은 요소는 왼쪽, 큰 요소는 오른쪽으로 나누고 이를 재귀적으로 반복하여 정렬합니다.
평균적으로 빠른 실행 속도를 가지고 있습니다.
3. 요구사항 검증 방법
1) 요구사항 검토(Requirements Review):
요구사항 명세서의 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석 - 동료검토, 워크스루, 인스펙션
<방법 3가지>
동료검토(Peer Review) : 요구사항 명세서 작성자가 명세서 내용을 직접 설명하고 동료들이 이를 들으면서 결함을 발견
워크스루(Walk Through) : 검토 회의 전에 요구사항 명세서를 미리 배포하여 사전 검토한 후에 짧은 결함을 발견
인스펙션(Inspection) : 요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 요구사항 명세서를 확인하면서 결함을 발견
2) 프로토타이핑: 실제 개발될 소프트웨어의 견본품(Prototype)을 만들어 최종 결과물을 예측
3) 테스트 설계: 테스트케이스(Test Case)를 생성하고 이후 요구사항이 현실적으로 테스트 가능한지를 검토
4) CASE(Computer Aided Software Engineering) 도구 활용: 일관성 분석(Consistent Analysis)을 통해 요구사항 변경사항의 추적 및 분석, 관리하고, 표준 준수 여부를 확인
4. 인스펙션 순서
계획 -> 사전준비 -> 준비 -> 인스펙션 회의 -> 수정 -> 후속조치
( < - 수정에서 계획 - )
5. 단위 테스트(Unit Test)와 관련한 설명으로 틀린 것은?
1. 구현 단계에서 각 모듈의 개발을 완료한 후 개발자가 명세서의 내용대로 정확히 구현되었는지 테스트한다.
2. 모듈 내부의 구조를 구체적으로 볼 수 있는 구조적 테스트를 주로 시행한다.
3. 필요 데이터를 인자를 통해 넘겨주고, 테스트 완료 후 그 결과값을 받는 역할을 하는 가상의 모듈을 테스트 스텁(Stub)이라고 한다.
4. 테스트할 모듈을 호출하는 모듈도 있고, 테스트할 모듈이 호출하는 모듈도 있다.
6. 테스트 관련 용어
테스트 케이스(Test Case) : 특별한 목표 또는 상황을 테스트 하기 위한 입력값, 사전조건, 예상 결과, 사후조건 들의 집합
테스트 드라이버(Test Driver) :상향식 테스트 시 하위 모듈 개발 이후 하위 프로그램과 통합성을 테스트 하기 위해 임시적으로 만든 메뉴기능의 상위 모듈 테스트 대상 모듈을 호출하는 더미 프로그램
테스트 스텁 (Test Stub) : 하향식 테스트 시 상위 모듈 개발 이후 하위 세부 모듈 제작전 하위 모듈 처럼 기능을 흉내 내는 임시 모듈 테스트 대상 모듈에 의해 호출되는 프로그램
=> 필요 데이터를 인자를 통해 넘겨주고, 테스트 완료 후 그 결과값을 받는 역할을 하는 가상의 모듈 -> 테스트 드라이버(test driver)
반대로 인자를 통해 받은 값을 가지고 수행한 후 그 결과를 테스트할 모듈에 넘겨주는 역할 -> 테스트 스텁(test stub)
단위 테스트 (Unit Test) |
구현 단계에서 각 모듈이 완성되었을 경우 해당 개념적 모듈을 시험 하는 것 |
통합 테스트 (integration Test) |
각 단위모듈을 통합하여 테스트하는 것, 각 모듈은 단위테스트에서 시험 했지만 모듈들이 연계 통합하는 상호작용은 시험하지 못했으므로 이를 통합테스트에서 시험함 |
시스템 테스트 (System Test) |
모듈간의 통합 시험이 완료된 후 사용자의 요구사항이 시스템 자원(프로그램+하드웨어+기타환경 모두)에 모두 반영되었는지를 시험하는 것 |
인수 테스트 (Acceptance Test) |
시스템이 사용자에게 인수되기 바로 직전에 사용자에 의해 실시되는 시험 |
설치 테스트 (installation Test) |
프로그램, 장비 등이 잘 설치되었는지를 시험하는 것 |
제 3 과목 : 데이터베이스 구축
1. 정규화 과정
- 1NF : 모든 도메인이 원자 값으로만 구성
- 2NF : 기본키가 아닌 속성이 기본키에 대한 완전 함수적 종속을 만족, 부분적 함수 종속을 제거한 정규형
- 3NF : 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수 종속 관계를 만족하지 않는 정규형
- BCNF : 모든 결정자가 후보키인 정규형, 종속성 보존X
2. 트랜잭션 성질들
- 원자성(Atomicity) : 완전하게 수행 완료되지 않으면 전혀 수행되지 않아야 함 (한 번에 수행, 아니면 롤백)
- 일관성(Consistency) : 시스템의 고정 요소는 트랜잭션 수행 전후에 같아야 함
- 격리성(Isolation, 고립성) : 트랜잭션 실행 시 다른 트랜잭션의 간섭을 받지 않아야 함
- 영속성(Durability, 지속성) : 트랜잭션의 완료 결과가 데이터베이스에 영구히 기억됨
3. DB 인덱스 생성, 삭제
- 인덱스 생성 : CREATE
- 인덱스 삭제 : DROP
4. Commit 차이
Partially Committed: 마지막 연산이 실행된 직후의 상태로 아직 Commit 연산 실행 전
Committed: 트랜잭션이 실행을 성공적으로 완료하여 Commit 연산을 수행한 상태
5. DB 스키마 용어
- 차수(Degree) : 속성의 수
- 카디널리티(Cardinality) : 튜플의 수 (기수)
5. 슈퍼키와 후보키
Super key(슈퍼키) - 속성들의 집합으로 구성된 키, 릴레이션을 구성하는 모든 튜플들 중 슈퍼키로 구성된 속성의 집합과 동일한 값은 나타나지 않는다.
Candidate key(후보키) - 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합
6. 데이터베이스에서 개념적 설계 단계에 대한 설명으로 틀린 것은?
1. 산출물로 E-R Diagram을 만들 수 있다.
2. DBMS에 독립적인 개념 스키마를 설계한다.
3. 트랜잭션 인터페이스를 설계 및 작성한다.
4. 논리적 설계 단계의 앞 단계에서 수행된다.
- 3번 : 트랜잭션 인터페이스 설계 작성은 => 논리설계
개념적 설계 : 트랜잭션 모델링/ 독립적인 개념 스키마 모델링/ 개념스키마 설계/ E-R 다이어그램
논리적 설계 : 트랜잭션 인터페이스 설계/ DBMS에 맞는 논리스키마 설계/ 테이블 설계/ 논리적 매핑/ 스키마 평가 및 정제
물리적 설계 : 레코드 집중의 분석,설계/ 저장레코드 양식 설계 / 저장 구조 및 액세스 경로 설정
제 4 과목 : 프로그래밍 언어 활용
1. C언어 연산
C언어 연산자에서는 0이 아닌 모든값은 1(TRUE)
&& AND연산
|| OR연산
! NOT연산
2. IP 프로토콜 사용하는 필드
Header Length는 IP 프로토콜의 헤더 길이를 32비트 워드 단위로 표시한다.
Packet Length(16 bits) 는 IP 헤더 및 데이터를 포함한 IP 패킷 전체 길이를 바이트 단위로 길이를 표시. 2^16 - 1.
3. Python
python 조건문 if, elif, else
else if 는 없다 ..ㅠㅠ
4. 사용자 수준의 thread의 장점
커널 모드로의 전환 없이 스레드 교환이 가능하므로 오버헤드가 줄어든다.
운영체제의 개입 없이 프로그램에서 직접 관리됨 -> 이로 인해 커널 모드로의 전환 없이 사용자 수준에서 스레드 교환이 가능함.
제 5 과목 : 정보시스템 구축관리
1. 어떤 외부 컴퓨터가 접속되면 접속 인가 여부를 점검해서 인가된 경우에는 접속이 허용되고, 그 반대의 경우에는 거부할 수 있는 접근제어 유틸리티는?
TCP wrapper
tcp/ip 통신에서, tcp는 3-way handshake 를 통해 통신이 원활히 이뤄질 수 있는지를 확인합니다.
2. 클라우드 기반 HSM(Cloud-based Hardware Security Module)
하드웨어적으로 구현되므로 소프트웨어식 암호 기술에 내재된 보안 취약점을 해결할 수 있다.
3. 시스템 공격 기법 중 하나로 허용범위 이상의 ICMP 패킷을 전송하여 대상 시스템의 네트워크를 마비시키는 것
Death of Ping
4. 대칭 암호 알고리즘 vs 비대칭 암호 알고리즘
대칭 암호화 알고리즘은 키 교환이 필요하기 때문에 키를 교환하는 중 키가 탈취될 수 있다는 문제가 있다.
공개 암호화 방식에 비해 속도가 빠르다.
5. 접근 통제 방법 중 조직 내에서 직무, 직책 등 개인의 역할에 따라 결정하여 부여하는 접근 정책은?
MAC (Mandatory Access Control)
- 강제 접근 통제
- 미리 정해진 자원의 보안 레벨과 사용자에게 허락된 접근 권한 비교
DAC (Discretionary Access Control)
- 임의적 접근통제
- 자원에 대한 접근을 사용자나 그룹의 신분에 따라 제한
- 자원의 소유권을 가진 사람이 다른 사람의 접근을 허용하거나 제한할 수 있음
RBAC (Role Based Access Control)
- 사용자 역할에 따른 접근 통제
- 개별적인 신분이 아니라 조직 내 그룹 / 역할에 따라 부여
6. COCOMO(Constructive Cost Model) 모형의 특징
보헴이 고안한 라인 수에 의한 소프트웨어 개발비용 산정 방법.
man-month 로 산정
작은 규모.
개발 유형에 따른 3종류 - organic, semidetached, embedded
(기본, 중간, 내장형 모드)
-- 럼바우(Rumbaugh) => 객체, 동적, 기능(object, dynamic, function)
7. 인가와 인증
자신의 신원을 시스템에 증명하는 과정을 인증(Authentication)
인가(Authorization)는 헤더에 넣는거.
!직전에 볼 암기!
제 1 과목 : 소프트웨어 설계
<애자일 (XP, 스크럼), 객체지향 기법, UI 설계 도구, UML 다이어그램, 클래스 설계 원칙, 디자인 패턴>
1. 애자일 방법론
문서, 프로세스, 도구 < 상호작용, 고객과 소통, 개발에 집중
-> XP와 스크럼
1) XP (익스트림 프로그래밍) : 의사소통 개선, 즉각 피드백, 소규모 (변경 많은) / 용기, 단순성, 의사소통, 피드백, 존중 / 구조적 방법론 x 애자일 방법론 o
2) 스크럼 : 상호, 점진적 개발방법론, XP와의 차이 - 진행 체계 수립, 역할, 정의에 중점!
- 스크럼 용어들
Product Owner(PO) : 제품 책임자, 백로그 (요구사항 리스트) 작성
Scrum Master (SM): PM 느낌. 전체 관리
스프린트 : 짧은 기간 빡!
2. UI 설계 도구
1) 와이어프레임(Wireframe) : 기획 단계의 기초에 제작, 페이지에 대한 개략적인 뼈대를 설계
2) 목업(Mockup) : 와이어프레임보다 좀 더 설계 화면과 유사하게 만든 정적인 형태의 모형 (실제 구현 X)
3) 스토리보드(Story Board) : 와이어프레임에 콘텐츠에 대한 성명, 페이지 간 이동 흐름 등을 추가한 문서
최종 참고, 분기, 로직, 예외처리등 작성 , 세부적으로!
4) 프로토타입(Prototpye) : 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형 // 목업과의 차이
5) 유스케이스(Use Case) : 사용자 측면에서의 요구사항으로, 사용자가 원하는 목표를 달성하기 위해 수행할 내용 기술
제 2 과목 : 소프트웨어 개발
<단위 테스트/스텁/드라이버, 스택/큐, 소프트웨어 제공학, 소프트웨어 패키징, 화이트(블랙)박스 테스트, Sort(정렬), ISO/IEC>
1. 정형 기술 검토 (FTR)
- 의제를 제한, 논쟁과 반박 제한, 문제 영역 명확히 표현, 참가자 수 제한
-> 빡빡한 규칙으로 formal하게! 제품의 검토에만 집중!!
2. 국제표준 : 소프트웨어 품질 관점
- ISO/IEC 9126 (4개) : 측정 기준 제시 (평가방법 x)
- ISO/IEC 14598 (119아닌거는 평가) : 소프트웨어 제품 평가, 테스트
- ISO/IEC 12119 (119는 측정) : 측정/ 시험을 위한 국제표준
- ISO/IEC 25000 (숫자 제일큰거) : 위 네개 통합
제 3 과목 : 데이터베이스 구축
<SELECT/DML/DCL/DDL, 무결성, 논리적/물리적 설계, ERD, Locking, View, 정규화/반정규화>
1. SQL 문
DISTINCT : 고유한 Tuple들이 나온다.
count(DISTINT(~)) : 숫자 세는거.
2. DDL/DML/DCL
1) DDL (Define ; 데이터 정의) : CREATE, ALTER(수정), DROP
2) DML (Manipulation ; 데이터 조작어) : SELECT, INSERT, UPDATE, DELETE
3) DCL (Control ; 데이터 제어어) : COMMIT, ROLLBACK, GRANT (권한부여), REVOKE
3. DB 스키마 이름
4. 정규화/반정규화
- 정규화 : 중복 최소화! -> 일관성 향상 BUT 조회비용 증가
- 반정규화 : 성능 개선! -> 조회 비용을 최소화 하고 싶어! (중복은 많아질 수도..)
(아래를 보면 알겠지만, 개념적 설계 이후 논리적 설계에서 수행!)
- 정규화 과정!!! (중복 최소화 과정!!!)
- 1NF : 모든 도메인이 원자 값으로만 구성
- 2NF : 기본키가 아닌 속성이 기본키에 대한 완전 함수적 종속을 만족, 부분적 함수 종속을 제거한 정규형
- 3NF : 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수 종속 관계를 만족하지 않는 정규형
- BCNF : 모든 결정자가 후보키인 정규형, 종속성 보존X
5. DB 설계
개념적 설계 : 트랜잭션 모델링/ 독립적인 개념 스키마 모델링/ 개념스키마 설계/ E-R 다이어그램
논리적 설계 : 트랜잭션 인터페이스 설계/ DBMS에 맞는 논리스키마 설계/ 테이블 설계/ 논리적 매핑/ 스키마 평가 및 정제
(RDB의 경우 테이블 설계, 정규화 작업)
물리적 설계 : 레코드 집중의 분석,설계/ 저장레코드 양식 설계 (효율 중시) / 저장 구조 및 액세스 경로 설정
6. View
- 논리적 데이터 독립성 / 물리적으로 존재 X
- 필요한 정보만 테이블에서 뽑아냄.-> 관리가 관단. 인덱스 가지지 못함.
7. 무결성 (Integrity)
1) 개체 무결성 : Primary Key (unique, Not Null)
2) 도메인 무결성 : 도메인에 속한 값!
3) 참조 무결성 : 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 같아야함
8. 공유 최대를 위한 병행 제어 에서의 LOCKING
(약간, 임계 영역 lock 느낌)
- 로킹 단위 커지면, 병행성 수준 낮아지고,
- 로킹 단위 작아지면, 병행성 수준 높아진다. (다수의 락 필요한 경우도 많아짐. 로킹 오버헤드도 증가)
제 4 과목 : 프로그래밍 언어 활용
<결합도/응집도, TCP/IP, IPv6, 변수명, paging/segmentation, 코딩 결과 문제 + Subnet mask>
1. 결합도/응집도
모듈 간의 결합도 낮을수록, 모듈 내의 응집도 높을수록 GOOD!
결합도 : <높다> 내공외제스자(자료) <낮다>
응집도 : <낮다> 우(우연)논 시절 통순기(기능) <높다>
2. IPv6
주소길이 :128bit! (IPv4는 32bit)
표기 : 16진수 표기 (IPv4는 10진수)
전송 방식 : Multicast, unicast, anycast ( 3개중에 IPv4에서의 broadcast->anycast 만 변화)
3. 일정한 크기 : Paging, 가변적인 크기 블록 : Segmetaiton
제 5 과목 : 정보시스템 구축관리
<소프트웨어 생명주기 모델, DoS, Secure 코딩, 테일러링, DES/AES, 취약점 관리, 암호화 알고리즘(단방향/양방향)>
+ 최근에 리눅스 문제 : rwx(2진법으로표기), UMASK (권한 제한 기능! 허가 x), 로그인관련 로그파일 (wtmp,btmp,utmp)
1. 서버 접근 통제 유형
DAC(Direct Access Control) : 신분/신원에 근거한 객체접근권한 관리
MAC(Mandatory Access Control) : 강제적 접근 관리, 접근 허가 권한에 근거한 객체접근권한 관리, 규칙기반(Rule-based)
RBAC(Role-based Access Control ; 역할기반 접근통제) : 중앙 관리자가 상호관계 통제, 조직내 맡은 역할에 근거하여 자원 접근 제한