포스트

정보처리기사 기출문제 오답노트

디지털 저작권 관리(DRM)를 위한 구성요소

  • 콘텐츠 제공자: 콘텐츠를 제공하는 저작권자
  • 콘텐츠 분배자: 쇼핑몰 등으로써 암호화된 콘텐츠 제공
  • 패키저: 콘텐츠를 메타데이터와 함께 배포 가능한 단위로 묶는 기능
  • 보안 컨테이너: 원본을 안전하게 유통하기 위한 전자적 보안 장치
  • DRM 컨트롤러: 배포된 콘텐츠의 이용 권한을 통제
  • 클리어링 하우스: 디지털 라이선싱 중계 및 발급을 수행하는 정산소

객체지향 설계 원칙 (SOLID)

  • Single Responsibility, 단일 책임의 원칙: 하나의 클래스는 하나의 목적을 위해서 생성
  • Open Close, 개방 페쇄 원칙: 소프트웨어 구성요소는 확장에는 열려있고 변경에는 닫혀있음
  • Liskov Substitution, 리스코프 치환의 원칙: 상속받은 하위 클래스는 어디서나 자신의 상위 클래스로 교체할 수 있어야 함
  • Interface Segregation, 인터페이스 분리의 원칙: 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 함
  • Dependency Inversion, 의존성 역전의 원칙: 클래스 앞에 인터페이스를 두어 인터페이스는 그대로 두고 클래스는 언제든 바꿀 수 있도록 만듦

방향그래프

  • 정점을 연결하는 선에 방향이 있는 그래프
  • n개의 정점이 있으면 최대 간선 수는 n(n-1)개

지역성

  • 시간 지역성
    • 최근 사용되었던 기억 장소들이 집중적으로 엑세스함
    • 참조했던 메모리는 빠른 시간에 다시 참조될 확률이 높다
  • 공간 지역성
    • 일정 위치의 페이지를 집중적으로 엑세스함
  • 순차 지역성
    • 데이터가 순차적으로 엑세스함

온라인 분석 처리 (OLAP)

데이터 웨어하우스의 데이터를 전략적인 정보로 변환시켜서 의사결정을 지원하는 역할을 하는 시스템

시맨틱 웹

리소스에 대한 정보와 자원 사이의 관계-의미 정보를 컴퓨터가 처리할 수 있는 온톨로지 형태로 표현하고 이를 컴퓨터가 처리하도록 하는 지능형 웹

온톨로지

실세계에 존재하는 모든 개념과 개념들의 속성, 개념관의 관계 정보를 컴퓨터가 이해할 수 있도록 서술해 놓은 개념화 명세서

다단계 피드백 큐 (MLFQ)

  • FIFO와 라운드 로빈 스케줄링 기법을 혼합
  • 새로운거 높은 우선순위 / 실행시간이 길어질수록 낮은 우선순위 / 마지막 단계는 라운드 로빈 방식

자료사전 기호

  • -: 자료의 정의, ‘~로 구성되어 있다’는 것을 나타냄
  • +: 자료의 연결을 나타냄
  • (): 생략 가능
  • {}: 반복
  • []: 여러개 중에 선택
  • **: 주석

OSI 7계층

  • 물리: 전기적 신호 변환
  • 데이터링크: 시스템간 연결, 동기화
  • 네트워크: 최적화된 경로 제공
  • 전송: 프로세스 간 신뢰성 있는 연결 보장
  • 세션: 송수신 간 논리적 연결
  • 표현: 암,복호화
  • 응용: 네트워크와 응용프로그램 연결

일정관리 모델

  • 주 공정법: 프로젝트의 시작과 끝을 나타내는 노드와 노드간의 연결로 공정 계산
  • PERT: 비관치, 중간치, 낙관치 3점 추정방식
  • 중요 연쇄 프로젝트 관리: 주 공정법에서 자원제약사항까지 고려

라우팅 프로토콜

  • RIP: Bellman-Ford 알고리즘 사용
  • OSPF: 다익스트라 알고리즘 사용
  • BGF: 경로 벡터 알고리즘 사용

디지털 포렌식

범죄행위에 대한 사실을 사법기관에 제출하기 위해 디지털 증거자료를 획득, 분석, 보관, 제출, 기록하는 일련의 과정

개발환경 인프라 구성 방식

  • 온프레미스: 외부 인터넷망이 차단된 상태에서 인트라넷 망만을 활용하여 개발환경을 구축하는 방식
  • 클라우드: 클라우드 공급 서비스를 하는 회사들의 서비스를 임대하여 개발환경을 구축하는 방식
  • 하이브리드: 온프레미스와 클라우드를 혼용하는 방식

분석 자동화(CASE) 도구

  • 상위 CASE: 요구사항 분석, 소프트웨어 설계 등 초기 개발 단계에서 사용하는 도구
  • 하위 CASE: 코드생성, 디버깅, 테스트 등 구현 및 유지 보수 단계에서 사용하는 도구

IPv6

IPv4가 가지고 있는 주소 고갈, 보안성, 이동성 지원 등의 문제점을 해결하기 위해 개발된 128bit 주소체계를 갖는 인터넷 프로토콜

CoAP (Constranined Application Protocol)

  • 제약이 있는 장치들을 위한 특수한 인터넷 애플리케이션 프로토콜
  • HTTP로 쉽게 변환되도록 설계됨

메모리의 외부 단편화를 해결하는 기법

  • 버디 메모리 할당: 요청한 프로세스 크기에 가장 알맞은 크기를 할당하기 위해 메모리를 2^n의 크기로 분할하여 메모리를 할당하는 기법
  • 통합: 인접한 단편화 영역을 찾아 하나로 통합하는 기법
  • 압축: 메모리의 모든 단편화 영역을 하나로 압축하는 기법

HIPO 차트 종류

  • 가시적 도표: 시스템의 전체적인 기능과 흐름을 보여주는 계층 구조도
  • 총체적 도표: 프로그램을 구성하는 기능을 기술한 것으로 입력, 처리, 출력에 대한 전반적인 정보를 제공하는 도표
  • 세부적 도표: 총체적 도표에 표시된 기능을 구성하는 기본 요소들을 상세히 기술하는 도표

ITIL(정보기술 인프라 라이브러리)

IT 서비스의 운영 및 관리를 돕기 위한 문서들의 집합

커널의 유형

  • 마이크로 커널: 장치 드라이버, 프로토콜 스택, 파일 시스템과 같은 전통적인 OS의 기능들을 사용자 영역에 놓고 하드웨어 추상화를 최소화한 커널
  • 모놀리식 커널: 하프로세스 관리, 동시성 관리, 메모리 관리 등을 관리자 모드에서 작동하여 사용자에게 고수준의 플랫폼을 제공하는 커널

테스트의 종류

  • 단위 테스트: 사용자 요구사항에 대한 단위 모듈, 서브루틴 등을 테스트하는 단계
  • 통합 테스트: 단위 테스트를 통과한 모듈 사이의 인터페이스, 통합된 컴포넌트 간의 상호작용을 검증하는 테스트 단계
  • 시스템 테스트: 통합된 단위 시스템의 기능이 시스템에서 정상적으로 수행되는지를 검증하는 테스트 단계
  • 인수 테스트: 계약상의 요구사항을 만족했는지 확인하기 위한 테스트 단계

프로세스 스케줄링

  • 선점형 스케줄링
    • 우선순위가 높은 프로세스가 현재 프로세스를 중단시키고 CPU를 점유하는 스케줄링 방식
    • 라운드 로빈
  • 비선점형 스케줄링
    • 한 프로세스가 CPU를 할당받으면 작업이 종료될 때까지 다른 프로세스의 점유가 불가능한 스케줄링 방식

화이트박스 테스트 VS 블랙박스 테스트

  • 화이트박스 테스트: 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트 방식
  • 블랙박스 테스트: 내부 구조와 동작을 고려하지 않고 결과값 만을 확인하는 테스트 방식

메모리 반입 기법

  • 예상 반입 기법: 시스템의 요구를 예측하여 미리 메모리에 적재하는 방법
  • 요구 반입 기법: 다음에 실행될 프로세스가 참조 요구가 있을 경우에 적재하는 기법

DDOS 공격 방법

  • Slow HTTP Header DoS: HTTP GET 메서드를 사용하여 헤더의 최종 끝을 알리는 개행 문자열을 전송하지 않음으로 웹 서버와 연결 상태를 장시간 지속시킴으로 연결 자원을 모두 소진시키는 서비스 거부 공격
  • Slow HTTP POST DoS: 요청 헤더의 Content-Length를 비정상적으로 크게 설정하여 메시지 바디 부분을 매우 소량으로 보내 계속 연결 상태를 유지시키는 공격 기법
  • Slow Read Attack: TCP 윈도 크기와 데이터 처리율을 감소시킨 상태에서 다수 HTTP 패킷을 지속적으로 전송하여 계속 연결 상태를 유지시키는 공격 기법

보안

해킹 공격용 도구

  • 루트킷: 시스템 침입 후 지속적으로 시스템을 장악하기 위한 기능을 제공하는 프로그램의 모음
  • 크라임웨어: 불법적인 행위를 수행하기 위해 제작된 컴퓨터 프로그램

암호화 알고리즘

  • DES: 1975년 표준 기술로 발표한 대칭키 블록 알고리즘, 블록 크기 64bit
  • AES: 2001년 표준 기술로 발표한 대칭키 블록 알고리즘, 블록 크기 128bit

입력 데이터 검증 및 표현에 대한 취약점

  • XSS(크로스 사이트 스크립트): 검증되지 않은 외부 입력 데이터가 포함된 웹 페이지가 전송되는 경우, 해당 웹 페이지를 열람함으로써 웹 페이지에 포함된 스크립트가 실행되는 공격
  • CSRF(사이트 간 요청 위조): 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격
  • SQL 인젝션: 응용프로그램의 보안 취약점을 이용해서 악의적인 SQL 구문을 삽입, 실행시켜서 정보를 탈취하거나 조작하는 공격

데이터베이스

정규화

  • 1차: 한 도메인에 하나의 값 (“서울,부산” x)
  • 2차: 부분 함수 종속 제거
  • 3차: 이행함수 종속 제거
  • 보이스-코드: 결정자 함수이면서 후보키가 아닌 것 제거
  • 4차: 다치 종속성 제거
  • 5차: 조인 종속성 제거

병행 제어 기법

  • 로킹(Locking): 같은 자원을 엑세스 할 때 데이터를 잠가(Lock)서 순차적 진행을 보장
  • 낙관적 검증: 트랜잭션이 어떠한 검증도 수행하지 않고 일단 수행한 뒤, 종료시에 검증을 수행하여 데이터베이스에 반영
  • 타임 스탬프 순서: 트랜잭션을 실행하기 전에 타임 스탬프를 부여하여 시간에 따라 트랜잭션 작업 수행
  • 다중버전 동시성 제어: 트랜잭션의 타임스탬프와 데이터의 타임스탬프를 비교하여 직렬가능성이 보장되는 적절한 버전을 선택하여 접근

병행 제어 미보장 시 문제점

  • 갱신 손실: 먼저 실행된 트랜잭션의 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생하는 오류
  • 현황 파악오류: 트랜잭션의 중간 수행 결과를 다른 트랜잭션이 참조하여 발생하는 오류
  • 모순성: 두 트랜잭션이 동시에 실행되어 데이터베이스의 일관성이 결여되는 오류
  • 연쇄복귀: 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 트랜잭션이 처리한 곳의 부분을 취소하지 못하는 오류

데이터베이스 회복 기법

  • 로그 기반 회복 기법
    • 지연 갱신 회복 기법: 트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않음
    • 즉각 갱신 회복 기법: 트랜잭션 수행 중 갱신 결과를 바로 DB에 반영
  • 체크 포인트 회복 기법: 장애 발생 시 검사점 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전의 상태로 복원
  • 그림자 페이징 회복 기법: 데이터베이스 트랜잭션 수행 시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구

데이터베이스 암호화 기법

  • API 방식: 애플리케이션 레벨에서 암호 모듈을 적용하는 애플리케이션 수정 방식
  • Plug-in 방식: 암,복호화 모듈이 DB 서버에 설치된 방식
  • TDE 방식: DB 서버의 DBMS 커널이 자체적으로 암,복호화 기능을 수행하는 방식
  • Hybrid 방식: API 방식과 Plug-in 방식을 결합하는 방식

SQL

HAVING

HAVING 구문은 WHERE 구문 내에는 사용할 수 없는 집계 함수의 구문을 적용하여 복수행의 계산 결과를 조건별로 적용하는데 사용

View 생성

1
2
3
-- CREATE VIEW 이름 AS [SELECT문]
CREATE VIEW test_view AS
SELECT * FROM test_table WHERE a = 1;

컬럼 수정 (ALTER)

1
2
-- ALTER TABLE 테이블 MODIFY 컬럼 데이터타입 [제약조건];
ALTER TABLE foo MODIFY bar INTEGER PRIMARY KEY;

권한 부여 (GRANT)

1
2
-- GRANT 권한 ON 테이블 TO 사용자 [WITH 권한 옵션];
GRANT ALL ON STUDENT TO SYS WITH GRANT OPTION;
  • WITH GRANT OPTION: 사용자가 권한을 받고 난 후 다른 사람들과 권한을 나누어 가질 수 있음

Java

  • %x: 16진수로 표시
  • 부모 클래스에 자식 클래스와 동일한 메서드가 있으면, 부모 클래스 타입이어도 자식의 메서드로 오버라이드 됨

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    class Parent {
      void a() {}
    }
    
    class Child extends Parent {
      void a() {}
    }
    
    Parent p = new Child();
    p.a() // Child의 a가 실행됨
    
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.