본문 바로가기
Certificate/정보처리기사

[정보처리기사] 2022년 1회차 실기

by HJ0216 2023. 9. 10.

정보처리기사 실기

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단계

  1. 개념적 설계
    • 사람이 이해할 수 있는 형태의 정보구조를 만들어가는 과정
    • ERD 생성
  2. 논리적 설계
    • 개념적 설계에서 만들어진 구조를 컴퓨터가 이해하고 처리할 수 있도록 변환하는 과정
    • 정규화
    • Transaction Interface 설계
  3. 물리적 설계
    • 실제 저장정치에 어떻게 저장할지 설계하는 단계
    • 성능 향상(인덱스, 파티션, 반정규화 등)

정규화 종류

  • 제 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 설계 도구

  1. 와이어프레임 (WireFrame): 기획 단계의 초기에 제작하는 것으로, 페이지에 대한 개략적인 레이아웃이나 UI 요소 등에 대한 뼈대를 설계하는 단계
  2. 목업 (Mockup): 와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적인 형태의 모형
  3. 스토리보드 (Story Board): 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서
  4. 프로토타입 (Prototype): 실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형
  5. 유스케이스 (Use Case): 사용자 측면에서의 요구사항

애자일 방법론

: 고객의 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주기를 반복하면서 개발 과정을 진행

  • eXtreme Programming: 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
    • 5가지 핵심 가치: 의사소통, 피드백, 존중, 용기, 단순성
    • 12가지 기본 원리
  • Scrum
    • 짧은 단위시간(Sprint) 내 실행가능한 SW 개발
    • 매일 15분 정도의 Scrum meeting 회의
  • FDD(Feature-Driven Development): 기능주도 개발
  • 크리스탈(Crystal)
  • LEAN: 낭비 요소를 제거하여 품질을 향상

객체지향 분석의 방법론

  1. Rumbaugh: 가장 일반적으로 사용되는 방법으로 분석 활동을 객체, 동적, 기능 모델로 나누어 수행
    -객체 모델링(Object Modeling): 클래스 다이어그램을 이용하여 시스템에서 요구되는 객체을 표현한 것
    • 동적 모델링(Dynamic Modeling): 상태도를 이용하여 시간의 흐름에 따른 객체들 사이의 동적인 행위를 표현한 것
    • 기능 모델링(Functional Modeling): 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 것
  2. Booch: 미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용
  3. Jacobson: UseCase를 강조하여 사용
  4. Coad와 Yourdon: E-R다이어그램을 사용
  5. Wirfs-Brock: 분석과 설계간의 구분이 없음

 

객체지향 설계원칙, SOLID

  1. 단일 책임 원칙 (Single Responsibility Principle)
    : 모든 클래스는 각각 하나의 책임만 가져야 함
  2. 개방-폐쇄 원칙 (Open Closed Principle)
    : 확장에는 열려있고 수정에는 닫혀있어야 함
  3. 리스코프 치환 원칙 (Liskov Substitution Principle)
    : 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있음
  4. 인터페이스 분리 원칙 (Interface Segregation Principle)
    : 자신이 사용하지않는 인터페이스는 구현하지 말아야 함
  5. 의존 역전 원칙 (Dependency Inversion Principle)
    변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존해야 함

객체지향 프로그래밍(OOP: Object-Oriented Programming) 구성요소

  • 클래스(Class): 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(변수)과 행위(메소드)를 정의한 것
  • 객체(Object): 클래스라는 일종의 설계도를 기반으로 실제로 생성된 그 실체가 바로 객체
  • 메서드(Method): 객체에 명령을 내리는 행위
  • 메시지(Message): 객체간의 통신이 이루어지는 방법, 메시지를 통해 메소드가 호출되어 사용

 

6. 소스코드 분석 도구

  • 정적(Static): 소스코드의 실행없이 코드의 의미를 분석하여 결함을 찾아내는 코드 분석 기법
  • 정적(Dynamic): 소스코드를 실행하여 프로그램의 동작이나 결과를 확인하고, 메모리 누수, 스레드 결함등을 분석하는 기법

애플리케이션 테스트 유형 구분

  • 프로그램 실행 여부
    • 정적 테스트
    • 동적 테스트
  • 테스트 기법
    • 화이트박스 테스트
    • 블랙박스 테스트
  • 테스트에 대한 시각
    • 검증 테스트: 개발자 주도
    • 확인 테스트: 사용자 주도
  • 테스트 목적
    • 회복: 시스템에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인
    • 안전: 불법적인 침입으로부터 시스템을 보호할 수 있는지를 확인
    • 강도: 과부하 시에도 소프트웨어가 정상적으로 실행되는지를 확인
    • 성능
    • 구조
    • 회귀: 변경 또는 수정된 코드에 새로운 결함이 없음을 확인
    • 병행: 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력해 결과를 비교
  • 테`스트 기반
    • 명세 기반 테스트: 사용자의 요구사항 명세를 빠짐없이 구현하고 있는지 확인
    • 구조 기반 테스트: 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인
    • 경험 기반 테스트: 테스터의 경험을 기반으로 수행
      `테스트 하네스(Test Harness)의 구성 요소
  1. 테스트 드라이버: 상향식 테스트에서 사용하는 임시 모듈, 가상의 서버 역할
  2. 테스트 스텁: 하향식 테스트에서 사용하는 임시 모듈, 가상의 클라이언트 역할
  3. 테스트 슈트: 테스트 케이스의 집합
  4. 테스트 케이스: -사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 입력 값, 실행 조건, 기대 결과 등으로 만들어진 테스트 항목의 명세서
  5. 테스트 스크립트: 자동화된 테스트 실행 절차에 대한 명세서
  6. 목 오브젝트: 사전에 사용자의 행위를 조건부로 입력해 두면, 그 상황에 맞는 예정된 행위를 수행하는 객체

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

  1. Super Key: 유일성-대상을 유일하게 식별할 수 있으면 충족
  2. Candidate Key: 유일성 + 최소성
    • Alternate Key: PK가 아닌 후보키
    • Primary Key: AK 중 가정 적합한 키(예: 학교에서 PK는 학번)

 

12. V모델

  1. 단위(Unit) 테스트
    : 개발자가 명세서의 내용대로 정확히 구현되었는지 단위 중심으로 테스트
    • 정적
      • 소스코드의 실행없이 내부 확인
      • 도구
        • PMD, SonarQube, FindBugs, CheckStyle, CppCheck, Cobertura
    • 동적: 입력값에 대한 출력값 확인
  2. 통합(Integration) 테스트
    : 단위 테스트를 통과한 컴포넌트 간의 인터페이스를 테스트
    • 빅뱅 테스트: 모든 모듈이 결합된 프로그램 전체가 대상
    • 상향식 테스트: 드라이버(Driver) 사용
    • 하향식 테스트: 깊이 우선 통합법, 넓이 우선 통합법 사용, 스텁(Stub) 사용
    • 혼합식 통합 테스트: : 하위 수준-상향식 통합, 상위 수준-하향식 통합 사용, 샌드위치(Sandwich)식 통합 테스트 방법
    • 회귀 테스팅(Regression Testing): 통합 테스트가 완료 된 후 변경된 모듈이나 컴포넌트가 있을 경우, 다른 부분에 영향을 미치는지 테스트하여 새로운 오류 여부를 확인
  3. 시스템(System) 테스트
    : 전체 시스템 또는 제품의 동작에 대해 테스트
    • 기능 요구사항 테스트: 기능 관련
    • 비기능 요구사항 테스트: 기능 외 성능, 보안, 품질 관련
  4. 인수(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

*/

 

 

 

🔗 마크다운 파일

GitHub

 

📚 참고 자료

 

흥달쌤

흥달쌤과 함께하는 IT 채널입니다. 정보처리기사 자격증 관련된 강의 및 실무 노하우, 프로그래밍 언어(JAVA, C언어, Python) 특강 등이 진행됩니다. 앞으로 진행 예정인 동영상은 IT 관련된 이야기

www.youtube.com

 

PIMS란 ?

방송통신위원회가 정책기관이고, 개인정보보호협회가 위탁하여 KISA가 인증하는 PIMS는 기업이 개...

blog.naver.com

 

RAID가 뭐에요? : 동국시스템즈 포탈 디케이앤유

안녕하세요. 동국시스템즈 대외사업지원팀에서 Quotation 업무를 맡고 있는 이빛나✨입니다.코로나19 거리 두기 4단계로 현재 재택 근무를 하고 있어서 영상이 아닌 블로그로 인사를 대신하겠습니

www.dknyou.com