정보처리기사 실기
1. RAID
두 개 이상의 하드디스크를 병렬로 연결해, 하나의 하드디스크처럼 사용하는 기술
- RAID 0: 하나의 하드디스크가 문제가 생기면 다른 디스크까지 사용 불가능
- RAID 1: 두 개 이상의 디스크를 미러링을 통해 하나의 디스크처럼 사용
- RAID 2: 오류 정정을 위한 해밍코드를 사용하는 방식
- RAID 3: 하나의 디스크를 Parity 정보를 위해 사용하고 나머지 디스크에 데이터를 균등하게 분산 저장
- RAID 4: RAID 3과 동일한 방식, 불록 단위로 저장
- RAID 5: 3개 이상의 디스크를 붙여서 하나의 디스크처럼 사용하고 각각의 디스크에 Parity 정보를 갖고 있는 방식
- RAID 6: 하나의 Parity를 두 개의 디스크에 분산 저장하는 방식
- Parity 정보: 디스크 장애 시, 데이터를 재구축하는데 사용할 수 있는 사전에 계산된 값
2. 회복 기법
로그 기반 회복 기법
즉시 갱신 기법
- 데이터 변경 시 로그와 DB에 즉시 갱신
- 커밋되기 전에 장애가 나면
UNDO
, 커밋 후에 장애가 나면REDO
를 수행
지연 갱신 기법
- 트랜잭션 커밋 완료까지 갱신 내용을 로그에만 저장하고 DB에 저장하지 않고 지연
- 중간에 갱신을 하지 않았음으로 UNDO가 필요 없고,
REDO
만 하면 됨
체크포인트 회복 기법
- 로그 기록을 이용하되, 일정 시간 간격으로 검사 시점(Checkpoint)을 만들어두고 장애가 발생하면 가장 최근 검사 시점 이전의 트랜잭션에는 회복 작업을 수행하지 않고, 이후의 트랜잭션에만 회복 작업을 수행
비로그 기반 회복 기법
그림자 페이징 기법
- 로그를 사용하지 않고, 트랜잭션 실행동안 현재 페이지 테이블과 그림자 페이지 테이블 2개를 관리하는 기법
- 데이터 변경 시 현재 페이지 테이블만 변경, 회복 시 현재 페이지 테이블을 그림자 테이블로 대체
- 미디어 회복기법
- 디스크와 같은 비휘발성 저장 장치의 내용이 손상되는 장애 발생 시 회복을 위한 기법
REDO는 영속성을 보장 / UNDO는 원자성을 보장
Transaction
- 원자성(Atomicity): Commit, Rollback
- 일관성(Consistency): 무결성
- 격리성(Isolation)
- 영속성(Durability)
3. 이상 현상
데이터베이스 내의 데이터들이 중복돼 검색이나 조작 등을 제대로 수행할 수 없는 현상
- 삽입 이상: 릴레이션(테이블)에 데이터를 삽입할 때 의도와는 상관없는 값들도 함께 삽입되는 현상
- 삭제 이상: 릴레이션에서 한 튜플(행)을 삭제할 때 의도와는 상관없는 값들이 함께 삭제되는 현상
- 갱신 이상: 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되며 정보에 모순이 생기는 현상
데이터 모델링 3단계
개념적
설계- 사람이 이해할 수 있는 형태의 정보구조를 만들어가는 과정
ERD 생성
논리적
설계- 개념적 설계에서 만들어진 구조를 컴퓨터가 이해하고 처리할 수 있도록 변환하는 과정
정규화
Transaction Interface 설계
물리적
설계- 실제 저장정치에 어떻게 저장할지 설계하는 단계
성능 향상
(인덱스, 파티션, 반정규화 등)
정규화 종류
- 제 1정규형: 도메인이 원자값
- 제 2정규형: 부분 함수 종속성 제거
- 제 3정규형: 이행적 함수 종속성 제거
- BCNF: 결정자이면서 후보키가 아닌것 제거
- 제 4정규형: 다치 종속 제거
- 제 5정규형: 조인 종속 제거
반정규화
: 데이터 베이스 정규화 후 성능향상
을 위해 정규화 기법에 위배된 의도적 수행기법
- 종류
- 테이블 분할: 수평분할 / 수직분할
- 테이블 중복: 통계 테이블 추가 / 진행 테이블 추가
- 컬럼 중복: 중복 컬럼 추가 / 파생 컬럼 추가
4. UI 종류
GUI
(Graphic User Interface)CLI
(Command Line Interface) = CUI(Character User Interface)NUI
(Natural User Interface): 특별한 하드웨어 없이 인간의 자연스러운움직임을 인식
하여 정보 제공OUI
(Organic User Interface): 입력장치가 곧 출력장치가 되고, 현실에 존재하는 모든 사물이 입출력장치로 변화할 수 있는 사용자 인터페이스- AUI(Auditory User Interface): 벨소리, 버튼음을 포함해 휴대폰에 들어가는 모든 사운드
UI 설계 원칙 4가지
직관성
유효성
: 사용자의 목적을 정확하게 달성해야 함학습성
유연성
: 사용자의 요구사항을 최대한 수용하면서 오류를 최소화 해야함
UI 설계 도구
- 와이어프레임 (WireFrame): 기획 단계의 초기에 제작하는 것으로, 페이지에 대한 개략적인 레이아웃이나 UI 요소 등에 대한 뼈대를 설계하는 단계
- 목업 (Mockup): 와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적인 형태의 모형
- 스토리보드 (Story Board): 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
- 프로토타입 (Prototype): 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
- 유스케이스 (Use Case): 사용자 측면에서의 요구사항
애자일 방법론
: 고객의 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주기를 반복하면서 개발 과정을 진행
- eXtreme Programming: 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
- 5가지 핵심 가치: 의사소통, 피드백, 존중, 용기, 단순성
- 12가지 기본 원리
Scrum
- 짧은 단위시간(Sprint) 내 실행가능한 SW 개발
- 매일 15분 정도의 Scrum meeting 회의
- FDD(Feature-Driven Development): 기능주도 개발
- 크리스탈(Crystal)
- LEAN: 낭비 요소를 제거하여 품질을 향상
객체지향 분석의 방법론
Rumbaugh
: 가장 일반적으로 사용되는 방법으로 분석 활동을 객체, 동적, 기능 모델로 나누어 수행
-객체 모델링(Object Modeling)
:클래스 다이어그램
을 이용하여 시스템에서 요구되는 객체을 표현한 것동적 모델링(Dynamic Modeling)
:상태도
를 이용하여 시간의 흐름에 따른 객체들 사이의 동적인 행위를 표현한 것기능 모델링(Functional Modeling)
:자료 흐름도(DFD)
를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 것
Booch
: 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용Jacobson
: UseCase를 강조하여 사용Coad와 Yourdon
: E-R다이어그램을 사용Wirfs-Brock
: 분석과 설계간의 구분이 없음
객체지향 설계원칙, SOLID
- 단일 책임 원칙 (Single Responsibility Principle)
: 모든 클래스는 각각 하나의 책임만 가져야 함 - 개방-폐쇄 원칙 (Open Closed Principle)
: 확장에는 열려있고 수정에는 닫혀있어야 함 - 리스코프 치환 원칙 (Liskov Substitution Principle)
: 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있음 - 인터페이스 분리 원칙 (Interface Segregation Principle)
: 자신이 사용하지않는 인터페이스는 구현하지 말아야 함 - 의존 역전 원칙 (Dependency Inversion Principle)
변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존해야 함
객체지향 프로그래밍(OOP: Object-Oriented Programming) 구성요소
- 클래스(
Class
): 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(변수)과 행위(메소드)를 정의한 것 - 객체(
Object
): 클래스라는 일종의 설계도를 기반으로 실제로 생성된 그 실체가 바로 객체 - 메서드(
Method
): 객체에 명령을 내리는 행위 - 메시지(
Message
): 객체간의 통신이 이루어지는 방법, 메시지를 통해 메소드가 호출되어 사용
6. 소스코드 분석 도구
- 정적(Static):
소스코드의 실행없이
코드의 의미를 분석하여 결함을 찾아내는 코드 분석 기법 - 정적(Dynamic):
소스코드를 실행하여
프로그램의 동작이나 결과를 확인하고, 메모리 누수, 스레드 결함등을 분석하는 기법
애플리케이션 테스트 유형 구분
- 프로그램 실행 여부
- 정적 테스트
- 동적 테스트
- 테스트 기법
- 화이트박스 테스트
- 블랙박스 테스트
- 테스트에 대한 시각
- 검증 테스트: 개발자 주도
- 확인 테스트: 사용자 주도
- 테스트 목적
회복
: 시스템에 여러 가지 결함을 주어 실패하도록 한 후 올바르게복구
되는지를 확인안전
:불법적인
침입
으로부터 시스템을보호
할 수 있는지를 확인강도
: 과부하 시에도 소프트웨어가 정상적으로 실행되는지를 확인- 성능
- 구조
- 회귀: 변경 또는 수정된 코드에 새로운 결함이 없음을 확인
- 병행: 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력해 결과를 비교
- 테`스트 기반
- 명세 기반 테스트: 사용자의 요구사항 명세를 빠짐없이 구현하고 있는지 확인
- 구조 기반 테스트: 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
- 경험 기반 테스트: 테스터의 경험을 기반으로 수행
`테스트 하네스(Test Harness)의 구성 요소
- 테스트
드라이버
: 상향식 테스트에서 사용하는 임시 모듈, 가상의 서버 역할 - 테스트
스텁
: 하향식 테스트에서 사용하는 임시 모듈, 가상의 클라이언트 역할 - 테스트
슈트
: 테스트 케이스의 집합 - 테스트
케이스
: -사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 입력 값, 실행 조건, 기대 결과 등으로 만들어진 테스트 항목의 명세서 - 테스트
스크립트
: 자동화된 테스트 실행 절차에 대한 명세서 목 오브젝트
: 사전에 사용자의 행위를 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행하는 객체
Test Oracle
: 테스트의 결과가 참인지 거짓인지를 판단하기 위해서 사전에 정의된 참값을 입력하여 비교
하는 기법
- 종류
참(True) 오라클
:모든
입력값에 대해 기대하는 결과를 전수 검사샘플링 오라클
: 특정몇몇
입력값에 대해서만 검사휴리스틱 오라클
: 특정몇몇
입력값에 대해서만 검사 + 나머지는추정
으로 처리일관성 검사 오라클
: 이전 수행결과와 현재 수행결과가 동일한지 검사
화이트/블랙박스 테스트
- 화이트 박스 테스트: 모듈 내부 소스 코드를 보면서 수행하는 테스트
- 종류
기본 경로 커버리지(Base Path Coverage)
: 수행 가능한 모든 경로 테스트데이터 흐름 테스트(Data Flow Testing)
: 프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞추어 검사조건 커버리지(Condition Coverage)
: 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행- 구조적 커버리지: 애플리케이션에서 테스트를 수행한 정도
구문(문장) Coverage
: 코드 구조 내의모든 구문
에 대해 한 번 이상 수행하는 테스트 커버리지조건 Coverage
: 결정 포인트 내의 모든개별 조건식(if 조건문 내 and와 or로 연결된 개별 조건문)
에 대해 수행하는 테스트 커버리지결정(분기) Coverage
:결정 포인트(if 조건문 전체)
내의 모든분기
문에 대해 수행하는 테스트 커버리지- 조건/결정 Coverage: 결정 포인트와 개별 조건식이 모두 T/F를 가져야 함
- 변경/조건 Coverage: 모든 결정 포인트 내의 개별 조건식은 적어도 한 번의 T/F를 가져야 함
- 다중 조건 Coverage: 결정 포인트 내의 모든 개별 조건식의 가능한 조합을 100% 보장
- 루프 테스트
- 종류
- 블랙 박스 테스트: 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트
동등(동치, 균등) 분할 테스트(Equivalence Partitioning Testing)
: 입력값의 범위를 유사한 특징을 갖는 동등그룹으로 나누고 각 그룹마다 대표값을 선정하는 테스트 기법경곗값 분석 테스트(Boundary Value Analysis Testing)
: 경계값을 테스트 케이스로 선정하여 검사원인-결과 그래프 테스트(Cause-Effect Graphing Testing)
: 입력 데이터간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석하여 효용이 높은 테스트 케이스를 선정하여 검사오류 예측 테스트(Fault Based Testing)
의사 결정 테이블 테스트(Decision Table Testing)
상태 전이 테스트(State Transition Testing)
SW 테스트 방법
결함 집중(파레토 법칙)
- 대다수의 결함은 소수의 특정 모듈에 집중되는 경향이 있다.
살충제 패러독스
- 동일한 테스트 케이스를 반복적으로 수행하는 경우 더 이상 새로운 결함을 찾아낼 수 없다.
오류-부재의 궤변
- 거의 모든 결함을 확인 후 제거하였다고 해도 사용자의 요구 또는 비즈니스 목적을 충족시키지 못하는 경우 품질이 높다고 할 수 없다.
9. 보안
- ISMS: 기업이 주요 정보자산을 보호하기 위해 수립, 관리, 운영하는
정보
보호 관리체계가 인증 기준에 적합한지를 심사하여 인증을 부여하는 제도 - PIMS: 기관 및 기업이
개인정보보호
관리체계를 갖추고 체계적·지속적으로 보호 업무를 수행하는지에 대해 객관적으로 심사하여 기준 만족 시 인증을
부여하는 제도 - ISMS-P: ISMS + PIMS
10. Key
- Super Key: 유일성-대상을 유일하게 식별할 수 있으면 충족
- Candidate Key: 유일성 + 최소성
- Alternate Key: PK가 아닌 후보키
- Primary Key: AK 중 가정 적합한 키(예: 학교에서 PK는 학번)
12. V모델
단위(Unit) 테스트
: 개발자가 명세서의 내용대로 정확히 구현되었는지단위 중심으로 테스트
- 정적
- 소스코드의 실행없이 내부 확인
- 도구
- PMD, SonarQube, FindBugs, CheckStyle, CppCheck, Cobertura
- 동적: 입력값에 대한 출력값 확인
- 정적
통합(Integration) 테스트
: 단위 테스트를 통과한 컴포넌트 간의인터페이스를 테스트
- 빅뱅 테스트: 모든 모듈이 결합된 프로그램 전체가 대상
상향식
테스트: 드라이버(Driver
) 사용하향식
테스트: 깊이 우선 통합법, 넓이 우선 통합법 사용, 스텁(Stub
) 사용- 혼합식 통합 테스트: : 하위 수준-상향식 통합, 상위 수준-하향식 통합 사용, 샌드위치(Sandwich)식 통합 테스트 방법
- 회귀 테스팅(Regression Testing): 통합 테스트가 완료 된 후 변경된 모듈이나 컴포넌트가 있을 경우, 다른 부분에 영향을 미치는지 테스트하여 새로운 오류 여부를 확인
시스템(System) 테스트
: 전체 시스템 또는 제품의 동작에 대해 테스트- 기능 요구사항 테스트: 기능 관련
- 비기능 요구사항 테스트: 기능 외 성능, 보안, 품질 관련
인수(Acceptance) 테스트
: 계약상의 요구사항이 만족되었는지 확인- 알파 테스트: 개발자 + 사용자
- 베타 테스트: 사용자
- 형상 테스트: 구조 확인
13. SQL
INSERT INTO TABLE(COL1, COL2) VALUES(VAL1, VAL2);
SELECT * FROM TABLE WHERE COL1=VAL1 GROUP BY COL2 HAVING COL3 ORDER BY COL4;
UPDATE TABLE SET COL1=VAL1 WHERE COL2=VAL2;
DELETE FROM TABLE WHERE COL1=VAL1;
GRANT UPDATE ON TABLE TO USER;
REVOKE SELECT ON TABLE FROM USER;
CREATE INDEX idx_name ON STUDENT (NAME ASC);
15. Python
def func1(num1, num2 = 2): # 인자가 1개일 때, num2는 기본값 2를 갖음
print('a=', num1, 'b=', num2);
func1(20);
# a=20, b=2
16. Java
class Car implements Runnable{
int a;
public void fun(){
System.out.println("func call");
}
}
public class main{
public static void main(String[] args){
Thread t1 = new Thread(new Car());
t1.start();
}
}
17. Java
class A{
int a;
int b;
}
public class Main{
static void func1(A a){
a.a *= 10;
}
static void func2(A a){
a.a += a.b;
}
public static void main(String[] args){
A a = new A();
a.a = 100; // a: 100
func1(a); // a: 1_000
a.b = a.a; // b: 1_000
func2(a); // a: 2_000
System.out.println(a.a); // 2_000
}
}
Java 접근제한자
public | protected | default | private | |
---|---|---|---|---|
동일 클래스 | O | O | O | O |
동일 패키지 | O | O | O | |
다른 패키지의 자식 클래스 | O | O | ||
다른 패키지 | O |
18. C
#include<stdio.h>
int func(int i){
if(i<=1) return 1;
return i * func(i-1);
}
int main(){
int in;
scanf("%d", &in);
/* &연산자: 주소값 반환, 사용자가 입력한 정수는 in 변수에 저장 */
printf("%d", func(in));
}
/*
5 * func(4);
5 * 4 * func(3);
5 * 4 * 3 * func(2);
5 * 4 * 3 * 2 * 1;
120
*/
19. C
#include<stdio.h>
int main(){
int num = 1234;
int div = 10;
int res = 0;
while(num>0){
res = res * div;
res = res + num % div;
num = num / div
}
printf("%d", res);
}
/*
4321
*/
20. C
int isPrime(int number){
int i;
for(i = 2; i<number; i++){
if(number % i == 0) return 0;
}
return 1;
}
int main(void){
int number = 13195, max_div = 0; i;
for(i = 2; i<number; i++){
if(isPrime(i) == 1 && number % i == 0) max_div = i;
printf("%d", max_div);
return 0;
}
}
/*
i 2 3 4 5 6 7 8 9
isP 1 1 0 1 0 1 0 0 ... (소수 = 1)
number % i == 0 (number의 배수)
13195 / 5 = 2639
2639 / 13 = 203
203 / 7 = 29
*/
🔗 마크다운 파일
📚 참고 자료
'Certificate > 정보처리기사' 카테고리의 다른 글
[정보처리기사] 2022년 3회차 실기 (0) | 2023.09.12 |
---|---|
[정보처리기사] 2022년 2회차 실기 (0) | 2023.09.11 |
[정보처리기사] 2021년 3회차 실기 (0) | 2023.09.08 |
[정보처리기사] 2021년 2회차 실기 (0) | 2023.09.07 |
[정보처리기사] 2021년 1회차 실기 (0) | 2023.09.06 |