[정보처리기사] 필기 빈출 개념 정리

sookyoung.k·2025년 2월 27일
0
post-thumbnail

작년 기출 풀이만 남겨두고 있는데 많이 나오면서 내가 자주 틀리는 개념들을 정리해봤다. 정리본은 이거만 보고 시험보러 가야겠다...


1과목: 소프트웨어 설계

💡 미들웨어

미들웨어

→ 클라이언트와 서버 간 통신 담당

→ 분산 컴퓨팅 환경에서 서로 다른 기종 간의 하드웨어나 프로토콜, 통신환경 등을 연결하여 응용 프로그램과 운영 환경 간에 원만한 통신이 이루어질 수 있게 서비스를 제공하는 소프트웨어

→ 애플리케이션과 사용자 사이 뿐만 아니라 클라이언트와 서버, 운영체제와 응용 프로그램과 같이 두 시스템 사이에서 다양한 서비스를 제공하는 소프트웨어

  • 분산 시스템에서 다양한 부분을 관리하고 통신하며 데이터를 교환하게 해주는 소프트웨어
  • 위치 투명성을 제공
  • 분산 시스템의 여러 컴포넌트가 요구하는 재사용 가능한 서비스의 구현을 제공

종류: DB, RPC, MOM, TP-Monitor, ORB, WAS

RPC

→ 응용 프로그램의 프로시저를 사용하여 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 방식의 미들웨어

MOM (Message-Oriented Middleware), 메시지 지향 미들웨어

메시지 기반의 비동기형 메시지를 전달하는 방식의 미들웨어

→ 온라인 업무보다는 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용됨

  • 독립적인 애플리케이션을 하나의 통합된 시스템으로 묶기 위한 역할을 함
  • 송신측과 수신측의 연결 시 메시지 큐를 활용하는 방법
  • 상이한 애플리케이션 간 통신을 비동기 방식으로 지원

미들웨어 솔루션 유형

  • WAS (Web Application Server)
  • ORB (Object Request Broker)
  • RPC (Remote Procedure Call)

* Web Server → HTTP 프로토콜을 기반으로 클라이언트의 요청을 처리하는 서버 소프트웨어

💡 GoF(Gangs of Four) 디자인 패턴

디자인 패턴 사용 장점

  • 소프트웨어 구조 파악 용이
  • 객체지향 설계 생산성 향상
  • 재사용성 증가

디자인 패턴

  • 생성 패턴
    • 추상 팩토리 → 인터페이스를 통해 서로 연관/의존하는 객체들의 그룹으로 생성하여 추상적으로 표현하는 패턴
    • 빌더 → 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성하는 패턴
    • 팩토리 메소드 → 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴
    • 프로토타입 → 원본 객체를 복제하는 방법으로 객체를 생성하는 패턴
    • 싱글톤 → 하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수는 없는 패턴
  • 구조 패턴
    • 어댑터 → 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환해주는 패턴
    • 브리지 → 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성한 패턴
    • 컴포지트 → 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
    • 데코레이터 → 객체 간의 결합을 통해 능동적으로 기능들을 확장할 수 있는 패턴
    • 퍼싸드 → 복잡한 서브 클래스들을 피해 더 상위에 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있도록 하는 패턴
    • 플라이웨이트 → 인스턴스가 필요할 때마다 매번 생성하는 것 X 가능한 한 공유해서 사용함으로써 메모리를 절약하는 패턴
    • 프록시 → 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴
  • 행위 패턴
    • 책임 연쇄 → 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴
    • 커맨드 → 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴
    • 인터프리터 → 언어에 문법 표현을 정의하는 패턴
    • 반복자 → 자료 구조와 같이 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 하는 패턴
    • 중재자(Mediator) → 수많은 객체들 간의 복잡한 상호작용을 캡슐화하여 객체로 정의하는 패턴
    • 메멘토 → 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴
    • 옵서버 → 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴
    • 상태 → 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용하는 패턴
    • 전략 → 동일한 계얼의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
    • 템플릿 메소드 → 상위 클래스에서 골격을 정의하고, 하위 클래스에서 세부 처리를 구체화하는 구조의 패턴
    • 방문자 → 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성하는 패턴

생성 패턴 - 팩토리 메소드 (Factory Method)

  • 객체 생성을 위한 인터페이스 정의
  • 실제 생성될 클래스는 서브클래스가 결정
  • Virtual-Constructor 패턴이라고도 함

행위 패턴 - 전략 (Strategy) 패턴

→ 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 행위 패턴

생성 패턴 - 프로토타입 (Prototype) 패턴

→ 인스턴스를 복제하여 사용하는 패턴

💡 UML (Unified Modeling Language)

UML

→ 객체 지향 시스템을 개발할 때 산출물을 명세화, 시각화, 문서화하는데 사용 (객체지향 모델링 언어)

기본 구성 요소

  • Things (사물)
  • Relationship(관계)
  • Diagram(다이어그램)

UML 확장 모델 - << >>

→ 스테레오 타입 객체를 표현할 때 사용하는 기호

→ UML의 기본 요소를 확장하여 사용할 때 적용

UML 모델링 관계

  • 연관(Association) 관계: 2개 이상의 사물이 서로 관련
  • 집합(Aggregation) 관계: 하나의 사물이 다른 사물에 포함
  • 포함(Composition) 관계: 집합 관계의 특수한 형태 → 포함하는 사물의 변화가 포함되는 사물에게 영향을 미치는 관계
  • 일반화(Generalization) 관계: 하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지를 표현하는 관계
  • 의존(Dependency) 관계: 서로 연관은 있으나 필요에 의해 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지하는 관계
    • 한 사물의 명세가 바뀌면 다른 사물에 영향을 주며, 일반적으로 한 클래스가 다른 클래스를 오퍼레이션의 매개 변수로 사용하는 경우에 나타나는 관계
  • 실체화(Realization) 관계: 사물이 할 수 있거나 해야하는 기능으로 서로를 그룹화 할 수 있는 관계
    • 한 객체가 다른 객체에게 오퍼레이션을 수행하도록 지정하는 의미적 관계

UML Structural Diagram

  • 구조적(Structural) 다이어그램
    • 클래스 다이어그램: 클래스와 클래스가 가지는 속성, 클래스 사이의 관계 표현
    • 객체 다이어그램: 클래스에 속한 사물들, 즉 인스턴스를 특정 시점의 객체와 객체 사이의 관계로 표현
    • 컴포넌트 다이어그램: 실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스 표현
    • 배치 다이어그램: 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치 표현
    • 복합체 구조 다이어그램: 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현
    • 패키지 다이어그램: 유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계 표현
  • 행위(Behavioral) 다이어그램
    • 유스케이스 다이어그램: 사용자의 요구를 분석하는 것, 기능 모델링 작업에 사용
    • 시퀀스 다이어그램: 상호 작용하는 시스템이나 객체들이 주고받는 메시지 표현
    • 커뮤니케이션 다이어그램: 메시지뿐만 아니라 객체들 간의 연관까지 표현
    • 상태 다이어그램: 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지를 표현
    • 활동 다이어그램: 시스템이 어떤 기능을 수행하는지 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현
    • 상호작용 다이어그램: 제어 흐름
    • 타이밍 다이어그램: 객체 상태 변화와 시간 제약을 명시적으로 표현

UML 행위 다이어그램 - 시퀀스 다이어그램

시간의 흐름에 따라 상호작용하는 개체들을 표현하는 것, 주로 시스템의 동적인 측면을 모델링하기 위해 사용

  • 객체 간의 동적 상호작용을 시간 개념을 중심으로 모델링하는 것
  • 일반적으로 다이어그램의 수직 방향이 시간의 흐름을 나타냄
  • 회귀 메시지, 제어블록 등으로 구성

주요 구성 요소 → 액터(Actor), 객체(Object), 생명선(Lifeline), 실행(Activation), 메시지(Message), 객체 소멸, 프레임

* 확장은 관계의 한 형태로 시퀀스 다이어그램의 구성요소가 아니다!

UML 행위 다이어그램 - 유스케이스 다이어그램

연관 Association, 집합 Aggregation, 포함 Composition, 일반화 Generalization, 의존 Dependency, 실체화 Realization, 확장 Extend

→ 시스템과 상호 작용하는 모든 외부 요소를 액터라고 함

UML 구조적 다이어그램 - 클래스 다이어그램의 구성 요소

  • 클래스
    • 각각의 객체들이 갖는 속성과 오퍼레이션(동작)을 표현한 것
    • 속성 - 클래스의 상태나 정보를 표현 / 오퍼레이션 - 클래스가 수행할 수 있는 동작으로 함수라고도 함
  • 제약조건 → 중괄호를 이용
  • 관계
    • 클래스와 클래스 사이의 연관성 표현
    • 연관 관계, 집합 관계, 포함 관계, 일반화 관계, 의존 관계

요구사항 분석 과정에서 사용되는 다이어그램

→ 자료 흐름도(Data Flow Diagram), UML(Unified Modeling Language), E-R(개체-관계) 모델

💡 럼바우 분석 기법

객체지향 분석

→ 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스, 이와 관련된 속성과 연산, 그들 간의 관계 등을 정의하여 모델링하는 작업

→ 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어서 분석해 내는 기법

객체지향 분석의 방법론

  • 럼바우 방법 → 객체 모델, 동적 모델, 기능 모델로 나누어 분석 활동 수행
  • 부치 방법 → 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용하는 분석
  • Jacobson 방법 → Use Case를 강조하여 사용하는 분석 방법
  • Coad와 Yourdon 방법 → E-R 다이어그램을 사용하여 객체의 행위 모델링
  • Wirfs-Brock 방법 → 분석과 설계 간의 구분 X

럼바우의 객체지향 분석 절차

객체 모형 → 동적 모형 → 기능 모형

* 객동기로 외우기!!!

  • 객체 모형: 시스템의 정적인 구조 표현
    • 정보 모델링 → Object Modeling, 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정
  • 동적 모형: 시스템의 제어 흐름 표현
    • Dynamic Modeling, 상태 다이어그램 (객체의 상태 변화와 이벤트 표현)
  • 기능 모형: 시스템의 기능적 특성 표현
    • Functional Modeling, 자료 흐름도(DFD)를 이용

자료 흐름도

→ 자료 저장소의 입력 화살표는 데이터의 입력 및 수정을 의미하는 것

입력 화살표가 있다고 하여 반드시 출력 화살표가 있어야 하는 것은 아니다

자료 흐름도 구성 표기법

Process (프로세스) → 원이나 둥근 사각형으로 표시, 자료를 변환시키는 시스템의 한 부분을 나타냄

Data Flow (자료 흐름) → 화살표 위에 자료의 이름 기입, 자료의 이동인 연관관계를 나타냄

Data Store (자료 저장소) → 평행선(=) 안에 자료 저장소 이름 기입, 시스템에서의 자료 저장소를 나타냄

Terminator (단말) → 사각형 안에 이름 기입, 시스템과 교신하는 외부 개체

💡 결합도 (약 → 강)

  • 자료 결합도(Data Coupling) - 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도 → 자료로 얽힐 수록… 강하다…!
  • 스탬프(검인) 결합도 (Stamp Coupling) - 모듈 간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달될 때의 결합도 → 도장 쾅! 도장은 무거운 거다…!
  • 제어 결합도 (Control Coupling) - 한 모듈에서 다른 모듈로 논리적인 흐름을 제어하는 데 사용하는 제어 요소
  • 외부 결합도 (External Coupling) - 어떤 모듈에서 외부로 선언한 데이터(변수)를 다른 모듈에서 참도할 때의 결합도
  • 공통(공유) 결합도 (Common Coupling) - 공유되는 데이터 영역을 여러 모듈이 사용할 때의 결합도 → 조금 공유해본다~
  • 내용 결합도 (Content Coupling) - 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도 → 아 내용만 살짝 겹치는 거다~

💡 응집도 (강 → 약)

명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도, 즉 모듈이 독립적인 기능으로 정의되어 있는 정도

  • 기능적 응집도
  • 순차적 응집도
  • 교환적 응집도
  • 절차적 응집도
  • 시간적 응집도
  • 논리적 응집도
  • 우연적 응집도

2과목: 소프트웨어 개발

💡 테스트 기법

목적에 따른 테스트

  • 회복 테스트: 시스템에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는지를 확인하는 테스트
  • 안전 테스트: 시스템에 설치된 시스템 보호 도구가 불법적인 침입으로부터 시스템을 보호할 수 있는지를 확인
  • 강도 테스트: 시스템에 과도한 정보량이나 빈도 등을 부과하여 과부하 시에도 소프트웨어가 정상적으로 실행되는지를 확인하는 테스트
  • 성능 테스트: 소프트웨어의 실시간 성능이나 전체적인 효율성을 진단하는 테스트, 소프트웨어의 응답 시간, 처리량 등을 테스트
  • 구조 테스트: 소프트웨어 내부의 논리적인 경로, 소스 코드의 복잡도 등을 평가하는 테스트
  • 회귀 테스트: 소프트웨어의 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트
  • 병행 테스트: 변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트

상향식 통합 테스트

→ 상향식 통합 테스트: 프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트하는 기법

  • 시스템을 구성하는 모듈의 인터페이스와 결합을 테스트하는 것
  • 하향식 통합 테스트의 경우 넓이 우선 방식으로 테스트를 할 모듈을 선택할 수 있다
  • 모듈 간의 인터페이스와 시스템의 동작이 정상적으로 잘 되고 있는지를 빨리 파악하고자 함 → 하향식 통합 테스트

하향식 통합 테스트

→ 깊이 우선 방식 또는 너비 우선 방식

→ 상위 컴포넌트를 테스트하고 점증적으로 하위 컴포넌트를 테스트

→ 하위 컴포넌트 개발이 완료되지 않은 경우 스텁(Stub)을 사용하기도 함

검증(Validation) 검사 기법

  • 알파 검사: 개발자 장소에서 사용자가 개발자 앞에서 검사
  • 베타 검사: 선정된 사용자가 직접 장소에서 검사
  • 디버깅 검사: 오류 발견과 수정
  • 형상 검사: 형상 관리 항목 검사

인수 테스트

개발한 소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 두고 테스트하는 방법

→ 사용자 인수 테스트, 운영상의 인수 테스트, 계약 인수 테스트, 규정 인수 테스트, 알파/베타 테스트

  • 알파 테스트: 개발자의 장소에서 사용자가 개발자 앞에서 행하는 테스트 기법, 통제된 환경에서 행해짐
  • 베타 테스트: 선정된 최종 사용자가 여러 명의 사용자 앞에서 행하는 테스트 기법, 실업무를 가지고 사용자가 직접 테스트하는 것으로, 개발자에 의해 제어되지 않는 상태에서 테스트가 행해짐

테스트 하네스(Test Harness)의 구성 요소

  • 테스트 드라이버 → 테스트 대상의 하위 모듈을 호출하고, 파라미터를 전달하고, 모듈 테스트 수행 후의 결과를 도출하는 도구
  • 테스트 스텁 → 제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로, 일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈
  • 테스트 슈트 → 테스트 케이스의 집합
  • 테스트 케이스 → 테스트 항목의 명세서
  • 테스트 스크립트 → 실행 절차에 대한 명세서
  • 목 오브젝트 → 사용자 행위를 조건부로 입력해두면, 그 상황에 맞는 예정된 행위를 수행하는 객체

테스트 스텁 (Stub)

제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행하는 도구로, 일시적으로 필요한 조건만을 가지고 있는 테스트용 모듈

→ 하향식 통합시험을 위해 일시적으로 필요한 조건만을 가지고 임시로 제공되는 시험용 모듈

테스트 드라이버 (Driver)

필요 데이터를 인자를 통해 넘겨주고, 테스트 완료 후 그 결과 값을 받는 역할을 하는 가상의 모듈

→ 단위 테스트에서 테스트의 대상이 되는 하위 모듈을 호출하고, 파라미터를 전달하는 가상의 모듈로 상향식 테스트에 필요

드라이버 vs. 스텁

구분드라이버스텁
필요 시기상위 모듈 없이 하위 모듈이 있는 경우 하위 모듈 구동상위 모듈은 있지만 하위 모듈이 없는 경우 하위 모듈 대체
테스트 방식상향식 테스트하향식 테스트
공통점소프트웨어 개발과 테스트를 병행할 경우 이용동일
차이점- 이미 존재하는 하위 모듈과 존재하지 않는 상위 모듈 간의 인터페이스 역할 - 소프트웨어 개발이 완료되는 드라이버는 본래의 모듈로 교체됨- 일시적으로 필요한 조건만을 가지고 임시로 제공되는 가짜 모듈의 역할을 함 - 시험용 모듈이기 때문에 일반적으로 드라이버보다 작성하기 쉬움

→ 테스트 대상 모듈이 호출하는 하위 모듈의 역할을 수행하는 것은 스텁

소프트웨어 테스트

  • 테스트케이스에는 일반적으로 시험 조건, 테스트 데이터, 예상 결과가 포함되어야 함
  • 화이트박스 테스트
    • 기본 경로(기초 경로, Base Path = Basis Path)는 수행 가능한 모든 경로를 의미함
    • 모듈의 논리적인 구조를 체계적으로 점검 가능
  • 블랙박스 테스트
    • 프로그램의 구조를 고려하지 않음

화이트박스 테스트

모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법

→ 기초 경로 검사 = 수행 가능한 모든 경로를 의미함

→ 제어 구조 검사 ⇒ 조건 검사, 루프 검사, 데이터 흐름 검사

  • 논리 흐름도를 이용
  • 동적 테스트에 해당 (테스트 데이터를 이용해 실제 프로그램을 실행함으로써 오류를 찾음)
  • 테스트 데이터를 선택하기 위하여 검증 기준을 정함

블랙박스 테스트

소프트웨어가 수행할 특정 기능을 알기 위해 각 기능이 완전히 작동되는 것을 입증하는 테스트, 기능테스트라고도 한다

→ 동치 분할 검사, 경계값 분석, 원인-효과 그래프 검사, 오류 예측 검사, 비교 검사 등

  • 프로그램의 구조를 고려하지 않기 때문에 테스트 케이스는 프로그램 또는 모듈의 요구나 명세를 기초로 결정

빅뱅 통합 테스트 - 깊이 우선 탐색(DFS)

→ 정점에서 자식 노드 방향으로 운행하면서 형제 노드와 자식 노드가 있을 때 자식 노드를 우선 탐색하는 기법

→ 자식 노드의 탐색이 모두 끝나면 다시 형제 노드부터 탐색을 시작하는 방식으로 모든 노드를 한 번씩 방문

테스트 케이스 생성 도구

→ 자료 흐름도, 기능 테스트, 입력 도메인 분석, 랜덤 테스트

워크 스루, Workthrough

  • 사용사례를 확장하여 명세하거나 설계 다이어그램, 원시코드, 테스트 케이스 등에 적용
  • 복잡한 알고리즘 또는 반복, 실시간 동작, 병행 처리와 같은 기능이나 동작을 이해하려고 할 때 유용
  • 단순한 테스트 케이스를 이용하여 프로덕트를 수작업으로 수행해보는 것

코드 인스펙션

계획 → 사전 교육 → 준비 → 인스펙션 회의 → 수정 → 후속 조치

→ 워크스루를 발전시킨 형태, 소프트웨어 개발 단계에서 산출된 결과물의 품질을 평가하고 이를 개선하기 위한 방법 등을 제시

→ 정적 테스트 시에만 활용하는 기법

테스트 오라클

  • 참(True) 오라클 - 모든 테스트 케이스의 입력 값에 대해 기대하는 결과를 제공하는 오라클, 발생된 모든 오류를 검출할 수 있음
  • 샘플링 오라클 - 특정한 몇몇 테스트 케이스의 입력 값들에 대해서만 기대하는 결과를 제공하는 오라클
  • 추정 (Heuristic) 오라클 - 샘플링 오라클을 개선, 나머지 값은 추정으로 처리
  • 일관성 검사 (Consistent) 오라클 - 애플리케이션의 변경이 있을 때, 전후 결과 값이 동일한지 확인

소프트웨어 테스트 - Pareto의 법칙

오류의 80%는 전체 모듈의 20% 내에서 발견된다는 법칙 (80:20법칙으로도 알려져있다)

→ 테스트 효율성의 중요한 원리!

경계 값 분석

입력 범위의 경계값에서 버그가 자주 발생한다는 점을 이용한 테스트 기법
→ 각 범위의 경계가 되는 값과 그 근처의 값을 테스트 케이스로 선택

image.png

문제에서 중요한 경계값

→ 59와 60 사이 (C와 B등급의 경계)

→ 79와 80사이 (B와 A등급의 경계)

90은 A등급 범위(80-100) 내의 중간값이기 때문에 경계값이 아니어서 버그 발견 가능성이 상대적으로 낮다!

좋은 테스트 케이스

  • 59, 60 (C/B 경계)
  • 79, 80 (B/A 경계)
  • 0 (최소값)
  • 100 (최대값)

💡 정렬 알고리즘

알고리즘 설계 기법

  • Divide and Conquer (분할 정복)
  • Greedy (탐욕)
  • Backtracking (백트래킹)

정렬

  • 기수 정렬 → Queue를 이용하여 자릿수 별로 정렬하는 방식, 레코드의 키 값을 분석하여 같은 수 또는 같은 문자끼리 그 순서에 맞는 버킷에 분배 하였다가 버킷의 순서대로 레코드를 꺼내어 정렬
  • 버블 정렬 → 주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 정렬 방식
  • 퀵 정렬 → 레코드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어가면서 정렬하는 방법, 키를 기준으로 작은 값은 왼쪽에, 큰 값은 오른쪽 서브 파일로 분해시키는 방식으로 정렬
  • 쉘 정렬 → 삽입 정렬을 확장한 개념, 입력 파일을 어떤 매개변수(h)의 값으로 서브 파일을 구성하고, 각 서브파일을 삽입 정렬 방식으로 순서 배열하는 과정을 반복하는 정렬 방식

퀵 정렬

→ 분할 정복에 기반한 알고리즘으로 피봇을 사용하는 정렬

버블 정렬

주어진 파일에서 인접한 두 개의 레코드 키 값을 비교하여 그 크기에 따라 레코드 위치를 서로 교환하는 정렬 방식

초기 상태: 9, 6, 7, 3, 5

image.png

선택 정렬

→ n개의 레코드 중에서 최소값을 찾아 첫 번째 레코드 위치에 놓고, 나머지 n-1개 중에서 다시 최소값을 찾아 두 번째 레코드 위치에 놓는 방식을 반복하여 정렬 (자리 교환)

  1. 주어진 리스트에서 최솟값을 찾음
  2. 맨 앞의 값과 교체
  3. 맨 앞을 제외한 나머지 리스트에서 반복

힙 정렬 (Heap Sort)

전이진 트리를 이용한 정렬 방식

평균과 최악 모두 시간 복잡도는 O(nlog2n)

검색 - 이분 검색(이진 검색)

→ 검색할 자료를 반씩 나누어서 나머지 반만 검색하는 방식을 반복하여 자료를 찾는 검색 방법

→ 탐색 효율이 좋고 탐색 시간이 적게 소요

→ 검색할 데이터가 정렬되어 있어야 함

→ 비교횟수를 거듭할 때마다 검색 대상이 되는 데이터의 수가 절반으로 줄어든다

image.png

검색 - 해싱

해싱 함수의 종류 → 제산법, 제곱법, 폴딩법, 기수 변환법, 대수적 코딩법, 계수 분석법(숫자 분석법), 무작위법

해싱 함수 - 폴딩법

→ 레코드 키를 여러 부분으로 나누고, 나눈 부분의 각 숫자를 더하거나 XOR 한 값을 홈 주소로 사용

→ 키의 각 부분을 더하여 주소 계산

선형 검색

→ 정렬이 되어 있지 않은 파일에서 순차적으로 검색하는 방식

찾고자 하는 키 값을 첫 번째 레코드 키 값부터 차례로 비교하여 검색하는 방식

연결 리스트 (Linked List)

→ 노드들이 포인터로 연결되어 포인터를 찾아가는 시간이 필요하므로 선형 리스트에 비해 검색 속도가 느림

  • 노드의 삽입이나 삭제가 쉬움
  • 연결을 해주는 포인터를 위한 추가 공간이 필요
  • 연결 리스트 중에서 중간 노드 연결이 끊어지면 그 다음 노드를 찾기 어려움

빅오 표기법(Big-O Notation)

  • O(1) → 스택의 삽입, 삭제
  • O(log2n) → 이진트리, 이진 검색
  • O(n) → for문
  • O(nlog2n) → 힙 정렬, 2-Way 합병 정렬
  • O(n^2) → 삽입 정렬, 선택 정렬, 쉘 정렬, 버블 정렬, 퀵 정렬
  • O(2^n) → 피보나치 수열

O(1)

→ 빅오 표기법의 시간 복잡도를 표기하는 방법의 하나, 입력 데이터 수에 관계 없이 문제 해결에 하나의 단계만을 거친다는 것을 의미함

정렬 알고리즘 중 합병 정렬 → O(NlogN)

제어 흐름도 → 순환 복잡도 계산

  • 영역 수 계산하여 내부 영역 + 외부 영역

image.png

💡 자료구조 개념

자료 구조의 분류

  • 선형 구조 → 배열, 선형 리스트, 스택, 큐, 데크
  • 비선형 구조 → 트리, 그래프

큐/스택

큐 → 한쪽에서는 삽입이, 다른 한쪽에서는 인출이 이루어지는 선형 자료구조 / FIFO 처리 수행

스택 → 서브루틴 호출, 인터럽트 처리, 수식 계산 및 수식 표기법에 응용 / LIFO 처리 수행

스택 자료 구조

→ 재귀 호출, 후위 표기법, 깊이 우선 방식과 같이 왔던 길을 되돌아가는 경우에 사용됨

→ LIFO 후입 선출 방식으로 자료를 처리

→ 인터럽스 처리, 서브루틴 호출 작업 등에 응용

  • 언더플로 → 더 이상 삭제할 데이터가 없는 상황에서 데이터 삭제될 때 발생
  • 오버 플로 → 모든 기억 공간이 꽉 채워져 있는 상태에서 데이터가 삽입될 때 발생

→ 응용 분야

  • 함수 호출의 순서 제어
  • 인터럽트의 처리
  • 수식 계산 및 수식 표기법
  • 컴파일러를 이용한 언어 번역
  • 부 프로그램 호출 시 복귀주소 저장
  • 서브루틴 호출 및 복귀 주소 저장

→ 순서가 A, B, C, D로 정해진 입력 자료를 스택에 입력했다가 출력할 때 가능하지 않은 출력 순서의 결과 → D A B C

큐 자료 구조

→ FIFO 방식으로 처리, 순서 리스트의 뒤(Rear)에서 노드가 삽입되며, 앞(Front)에서 노드가 제거됨

→ 응용 분야

  • 운영체제의 작업 스케줄링

데크 자료 구조

→ 선형 리스트의 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조

트리의 차수 / 단말 노드

  • 트리의 차수: 가장 차수가 많은 노드의 차수
  • 단말 노드: 자식이 하나도 없는 노드를 의미

트리 구조의 검색 효율

→ 이진 탐색트리의 평균 시간 복잡도는 O(logN)

→ 이를 보완하고자 개발된 균형트리가 AVL, 2-3, 레드-블랙 트리

트리 운행법

  • Preorder 운행 (전위 순회) - Root → Left → Right
  • Inorder 운행(중위 순회) - Left → Root → Right
  • Postorder 운행(후위 순회) - Left → Right → Root

3과목: 데이터베이스 구축

💡 데이터베이스 설계

스키마

  • 외부 스키마 = 서브 스키마 = 사용자 뷰
    • 사용자나 응용 프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것 (전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브 스키마라고도 함)
  • 개념 스키마 = 전체적인 뷰
    • 데이터베이스의 전체적인 논리적 구조로서, 모든 응용 프로그램이나 사용자들이 필요로하는 데이터를 종합한 조직 전체의 데이터베이스로 하나만 존재함 (단순히 ‘스키마’라고 하면 개념 스키마를 의미하며 DBA에 의해서 구성됨)
  • 내부 스키마
    • 데이터베이스의 물리적 구조로 데이터의 실제 저장 방법을 기술 (시스템 프로그래머나 시스템 설계자가 보는 관점)

관계형 데이터베이스 관련 용어

카디널리티 → 테이블에 속한 튜플의 수

차수 → 속성의 수

데이터베이스 설계

  • 논리적 설계 (데이터 모델링)
    • 현실 세계에서 발생하는 자료를 컴퓨터가 이해하고 처리할 수 있는 물리적 저장장치에 저장할 수 있도록 변환하기 위해 특정 DBMS가 지원하는 논리적 자료 구조로 변환시키는 과정
    • 개념 스키마를 평가 및 정제하고 DBMS에 따라 서로 다른 논리적 스키마를 설계하는 단계
  • 물리적 설계 (데이터 구조화)
    • 논리적 설계 단계에서 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정
    • 저장 레코드의 형식, 순서, 접근 경로와 같은 정보를 사용하여 데이터가 컴퓨터에 저장되는 방법을 묘사

데이터베이스 설계 - 논리적 설계

→ 트랜잭션의 인터페이스 설계, 데이터 타입 및 타입들 간의 관계 표현

→ 트랜잭션 모델링 수행

→ 목표 DBMS에 맞는 스키마 설계

데이터베이스 설계 - 물리적 설계

→ 레코드 집중의 분석 및 설계, 접근 경로 설계, 저장 레코드의 양식 설계

→ 논리적 설계 단계에서 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정

→ 트랜잭션 처리량, 응답시간, 디스크 용량 등을 고려해야 함

→ 저장 레코드의 양식 설계시 데이터 타입, 데이터 값의 분포, 접근 빈도 등을 고려

트랜잭션의 상태

  • 활동(Active) - 트랜잭션이 실행 중인 상태
  • 실패(Failed) - 트랜잭션 실행 중 오류가 발생하여 중단
  • 철회(Aborted) - 트랜잭션이 비정상적으로 종료되어 롤백 연산을 수행한 상태
  • 부분 완료(Partially Commited) - 트랜잭션의 마지막 연산까지 완료했지만, Commit 연산이 실행되기 직전의 상태
  • 완료(Commited) - 트랜잭션이 성공적으로 종료되어 Commit 연산까지 수행한 상태

연산 (Operation)

→ 데이터 구조에 따라 개념 세계나 컴퓨터 세계에서 실제로 표현된 값들을 처리하는 작업

💡 E-R 다이어그램

E-R 다이어그램 표기법

사각형 - 개체 타입

마름모 - 관계 타입

타원 - 속성

이중 타원 - 다중값 속성

밑줄 타원 - 기본 키 속성

복수 타원 - 복합 속성

선, 링크 - 개체 타입과 속성 연결

💡 로킹 (Locking)

병행 제어 기법

  • 로킹
    • 주요 데이터의 액세스를 상호 배타적으로 하는 것
  • 타임 스탬프 순서
    • 동시성 제어를 위한 직렬화 기법으로, 트랜잭션 간의 처리 순서를 미리 정함
  • 최적 병행수행(검증 기법, 확인 기법, 낙관적 기법)
  • 다중 버전 기법

데이터베이스 병행 제어의 목적

  • 공유 최대화
  • 시스템 활용도 최대화
  • 사용자에 대한 응답시간 최소화
  • 데이터베이스 일관성 유지

로킹

여러 사용자가 동시에 데이터베이스에 접근할 때, 데이터의 일관성을 유지하기 위해 데이터의 접근을 제어하는 기법

→ 한 사용자가 데이터를 수정할 때 다른 사용자가 같은 데이터를 수정하지 못하도록 ‘잠금’을 거는 것, 병행제어의 단위

  • 데이터베이스, 파일, 레코드, 필드 등은 로킹 단위가 될 수 있음
  • 로킹 단위가 작으면 로크 수가 많아 관리하기 복잡해 오버헤드가 증가하지만 병행성 수준이 높아지고, 데이터베이스의 공유도가 증가
  • 로킹 단위는 병행 제어에서 한꺼번에 로킹할 수 있는 객체의 크기
  • 로킹 단위가 크면 병행성 수준이 낮아짐
  • 로킹 단위가 크면 로크 수가 작아 관리하기 쉽지만 병행성 수준이 낮아지고 데이터베이스 공유도가 저하됨
  • 로킹 단위가 크면 병행 제어 기법이 단순해지고, 로킹 단위가 작아지면 병행 제어 기법이 복잡해짐
  • 로킹 단위가 작으면 로크의 수가 많아지고, 로킹 단위가 크면 로크의 수가 적어짐
  • 파일, 레코드, 필드는 물론 데이터베이스까지 로킹 단위가 될 수 있음

💡 관계형 데이터베이스 용어

  • 튜플 (Tuple)
    • 릴레이션을 구성하는 각각의 행
    • 속성의 모임
    • 파일 구조에서 레코드와 같은 의미
    • 카디널리티 또는 기수, 대응수
  • 속성 (Attribute)
    • 데이터베이스를 구성하는 가장 작은 논리적 단위
    • 파일 구조상의 데이터 항목 또는 데이터 필드
    • 개체의 특성 기술
    • 속성의 수를 디그리(Degree) 또는 차수라고 함
  • 도메인 (Domain)
    • 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자 값들의 집합
    • 실제 애트리뷰트 값이 나타날 때 그 값의 합법 여부를 시스템이 검사하는데에도 이용

💡 관계 대수와 관계 해석

  • 관계 대수
    • 관계형 데이터베이스에서 원하는 정보와 그 정보를 검색하기 위해서 어떻게 유도하는가를 기술하는 절차적인 언어
    • 관계 해석으로 표현 가능
  • 관계 해석
    • 관계 데이터의 연산을 표현하는 방법
    • 수학의 프레디킷 해석에 기반을 두고 있음
    • 원하는 정보가 무엇이라는 것만 정의하는 비절차적인 특징을 가짐

💡 정규형

  • 1NF → 릴레이션에 속한 모든 도메인이 원자값으로만 되어 있음
  • 2NF → 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족
  • 3NF → 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않는 정규형
  • BCNF → 결정자가 모두 후보키인 정규형
  • 4NF
  • 5NF

4과목: 프로그래밍 언어 활용

💡 결합도

결합도

→ 모듈들이 변수를 공유하여 사용하게 하거나 제어 정보를 교류하게 하면 결합도가 높아짐

  • 오류가 발생했을 때 전파되어 다른 오류의 원인이 되는 파문효과를 최소화해야 함
  • 인터페이스가 정확히 설정되어 있지 않을 경우 불필요한 인터페이스가 나타나 모듈 사이의 의존도는 높아지고 결합도가 증가
  • 다른 모듈과 데이터 교류가 필요한 경우 전역변수보다는 매개변수를 사용하는 것이 결합도를 낮추는데 도움이 됨
  • 데이터 결합도: 매개변수로 데이터 전달 시의 결합
  • 내용 결합도: 다른 모듈의 내용 직접 참조
  • 공통 결합도: 전역 데이터를 참조하는 결합

결합도 (낮 → 높)

  • 자료 결합도 (모듈 간의 인터페이스가 자료 요소로만 구성될 때)
  • 스탬프 결합도
  • 제어 결합도
  • 외부 결합도
  • 공통 결합도
  • 내용 결합도

응집도 / 결합도

  • 응집도 - 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도
  • 결합도 - 모듈과 모듈 사이의 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계

우연적 응집도

→ 모듈 내 구성 요소들 간에 의미있는 연관관계가 없음

→ 서로 다른 기능을 수행하는 요소들이 모여있음

💡 OSI 7계층

OSI 7 계층

물리 계층 - 데이터 링크 계층 - 네트워크 계층 - 전송 계층 - 세션 계층 - 프레젠테이션 계층 - 애플리케이션 계층

OSI-7Layer - 데이터 링크 계층

  • 링크의 설정과 유지 및 종료를 담당
  • 노드 간의 오류 제어와 흐름 제어 기능을 수행
  • 물리적 연결을 이용해 신뢰성 있는 정보를 전송하려고 동기화, 오류 제어, 흐름제어 등의 전송에러를 제어하는 계층
  • 데이터 단위 → 프레임

데이터링크 계층의 프로토콜

→ HDLC, PPP, LLC, MAC, LAPD, LAPB

OSI-7Layer - 네트워크 계층

  • 패킷을 발신지로부터 최종 목적지까지 전달하는 책임
  • 패킷에 발신지와 목적지의 논리 주소 추가
  • 라우터 또는 교환기는 패킷 전달을 위해 경로를 지정하거나 교환 기능을 제공
  • 데이터 단위 → 패킷

OSI-7Layer - 전송 계층

  • 단말기 사이의 오류 수정과 흐름 제어 담당
  • 신뢰성 있는 데이터 전송
  • 오류 검출, 복구, 흐름 제어 담당
  • 종단간(End-to-End) 통신 서비스 제공

OSI 7계층 - 세션 계층

→ 두 응용 프로세스 간의 통신에 대한 제어 구조를 제공

→ 연결의 생성, 관리, 종료를 위해 토큰 사용

💡 TCP/IP 프로토콜

TCP 프로토콜

→ 전송 계층에 해당

→ 헤더의 기본 크기는 20바이트이며, 최대 60바이트까지 확장 가능

→ 신뢰성이 있는 연결 지향형 전달 서비스, 스크림 전송 기능 제공, 순서 제어/오류 제어/흐름 제어 기능 제공

  • 흐름 제어 기능을 수행
  • 전이중 방식의 양방향 가상회선 제공
  • 전송 데이터와 응답 데이터를 함께 전송할 수 있음

TCP 헤더

→ 윈도우의 최대 크기는 65,535(2^16-1) byte

  • 순서 번호는 전달하는 바이트마다 번호가 부여
  • 수신 번호 확인은 상대편 호스트에서 받으려는 바이트의 번호 정의
  • 체크섬은 데이터를 포함한 세그먼트의 오류를 검사

TCP 흐름제어 기법

  • Stop and Wait: 하나의 프레임 전송 후 응답 대기
  • 손실된 프레임 1개만 전송하고 수신자의 응답을 기다림

UDP 특성

  • 비연결형 서비스로 흐름제어 없음
  • 신뢰성보다 속도 중시
  • 헤더가 단순하여 오버헤드가 적음

CSMA/CA

→ 무선 랜에서 데이터 전송 시 , 매체가 비어있음을 확인한 뒤 충돌을 회피하기 위해 임의 시간을 기다린 후 데이터를 전송하는 방법

→ 네트워크에 데이터의 전송이 없는 경우라도 동시 전송에 의한 충돌에 대비하여 확인 신호를 전송

IP 주소

A 클래스 0~127

B 클래스 128~191

C 클래스 192~223

D 클래스 224~239

E 클래스 실험적 주소이며 공용되지 않음

IP 주소체계

→ 패킷 크기는 제한 X

* IPv4 → 패킷 크기가 64byte로 고정되어 있는 것

  • 128비트의 주소 공간 제공
  • 인증 및 보안 기능을 포함
  • IPv6 확장 헤더를 통해 네트워크 기능 확장이 용이
  • IPv6의 패킷 헤더는 40옥텟(octet)의 고정된 길이를 가짐
  • IPv6는 주소 자동설정 기능을 통해 손쉽게 이용자의 단말을 네트워크에 접속시킬 수 있음
  • IPv4는 호스트 주소를 자동으로 설정하며 유니캐스트를 지원
  • IPv4는 클래스별로 네트워크와 호스트 주소의 길이가 다름

IPv6

→ 16비트씩 8부분, 총 128비트로 구성되어 있으며 각 부분을 16진수로 표현

→ 128비트의 주소체계를 사용

→ 멀티미디어의 실시간 처리 가능, IPv4보다 보안성 강화, 자동으로 네트워크 환경 구성 가능

  • 2^128개의 주소를 표현할 수 있음
  • 등급별, 서비스별로 패킷을 구분할 수 있어 품질 보장 용이함
  • 확장기능을 통해 보안기능 제공

IPv6 주소 체계

  • Unicast, Anycast, Muticast

IPv6 vs. IPv4

→ IPv4에 비해 자료 전송 속도가 빠르다!

  • IPv4는 각 부분을 옥텟으로 구성, 총 32비트로 구성
  • IPv6는 각 부분을 콜론으로 구분
  • IPv4는 네트워크 부분의 길이에 따라 A클래스에서 E클래스까지 총 5단계로 구성되어 있음

ICMP (Internet Control Message Protocol)

→ TCP/IP 계층 구조에서 IP 동작 과정에서의 전송 오류가 발생하는 경우에 대비해 오류 정보를 전송하는 목적으로 사용하는 프로토콜

IP 프로토콜

→ 헤더 체크섬만 제공함!

  • 패킷을 분할, 병합하는 기능을 수행하기도 함
  • 비연결형 서비스 제공
  • Best Effort 원칙에 따른 전송 기능 제공
  • Header Length: IP 프로토콜의 헤더 길이를 32비트 워드 단위로 표시
  • Packet Length: IP 헤더를 포함한 패킷 전체의 길이를 나타내며 최대 크기는 2^16-1
  • Time To Live: 송신 호스트가 패킷을 전송하기 전 네트워크에서 생존할 수 있는 시간을 지정한 것
  • Version Number: IP 프로토콜의 버전 번호

RIP 라우팅 프로토콜

  • 경로 선택 메트릭은 홉 카운트
  • 최단 경로 탐색에 Bellman-Ford 알고리즘 사용
  • 각 라우터는 이웃 라우터들로부터 수신한 정보를 이용하여 라우팅 표를 갱신
  • IGP(내부 게이트웨이 프로토콜)에 해당

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 적용

💡 운영체제

운영체제

  • 다중 사용자와 다중 응용 프로그램 환경 하에서 자원의 현재 상태를 파악하고 자원 분배를 위한 스케줄링 담당
  • CPU, 메모리 공간, 기억 장치, 입출력 장치 등의 자원 관리
  • 입출력장치와 사용자 프로그램 제어

* 매크로 프로세서, 어셈블리, 컴파일러 → 시스템 소프트웨어의 종류

운영체제의 제어 프로그램 종류

→ 감시 프로그램, 작업 관리 프로그램, 데이터 관리 프로그램

은행원 알고리즘

→ 교착상태의 해결 방법 중 회피 기법에 해당함

HRN 방식 스케줄링 처리 순서

응답률 = (대기시간 + 서비스 시간) / 서비스 시간

💡 C/Java 기본 문법과 연산자 우선 순위

C언어 함수

  • atoi() → 문자열을 정수형으로 변환
  • atof() → 문자열을 실수형으로 변환
  • itoa() → 정수형을 문자열로 변환
  • ceil() → 실수를 정수형으로 올림처리
  • strlen(s) - s의 길이 구함
  • strcpy(s1, s2) - s2를 s1으로 복사 (copy)
  • strcmp(s1, s2) - s1과 s2에 저장된 문자열이 동일한지 비교 (compare)
  • strrev(s) - s를 거꾸로 변환 (reverse)

C언어 - malloc()

→ 입력한 Byte 만큼 메모리를 할당하는 함수

포인터 변수 = malloc(크기);

C언어의 대표적인 표준 라이브러리

  • stdio.h
    • 데이터의 입/출력에 사용되는 기능들을 제공
  • math.h
    • 수학 함수들을 제공
  • string.h
    • 문자열 처리에 사용되는 기능들을 제공
  • stdlib.h
    • 자료형 변환, 난수 발생, 메모리 할당에 사용되는 기능들 제공
  • time.h
    • 시간 처리에 사용되는 기능들 제공

Java 연산

public class Operator {
	public static void main(String[] args) {
		int x = 5, y = 0, z = 0;
		y = x++;   // 후치 증가 연산자이므로 x의 값 5를 y에 저장한 후 x의 값을 1 증가시킴 
		// x = 6, y = 5, z = 0
		z = --x;   // x는 전치 감소 연산자이므로 x의 값을 1 감소시킨 후 x의 값 5를 z에 저장
		// x = 5, y = 5, z = 5
		System.out.print(x + ", " + y + ", " + z);
	}
}

출력 결과 ⇒ 5, 5, 5

JAVA의 예외(exception)

문법 오류가 날 경우 코드가 실행조차 되지 않으므로 예외 처리 불가

image.png

연산자 우선 순위

→ 단항, 산술, 시프트, 관계, 비트, 논리, 조건, 대입, 순서 연산자 순

→ 관계 연산자 중에서 <, <=, >=, >==, != 보다 우선순위가 높다

image.png

5과목: 정보시스템 구축 관리

💡 암호화 알고리즘

암호화 알고리즘

  • 개인키 암호화 알고리즘 → AES
  • 해시 알고리즘 → MD4, MD5, SHA-1

대칭 알고리즘 / 비대칭 알고리즘

→ 대칭 알고리즘은 비밀키를 공유해야 하기 때문에 키 관리의 어려움이 있지만 알고리즘이 단순하여 암호화 및 복호화 속도가 빠름

공개키 암호화 기법

  • 키의 개수: 2n
  • 복호화 키는 비공개
  • 송신자는 수신자의 공개키로 문서 암호화
  • RSA

대칭키 암호화 기법

암호화 키와 복호화 키가 동일한 암호화 알고리즘

→ DES, SEED, AES ,ARIA, LSFSR, RC4 등

스트림 암호화 방식

  • 비트/바이트/단어들을 순차적으로 암호화
  • RC4는 스트림 암호화 방식에 해당
  • 대칭키 암호화 방식

해쉬 암호화 방식

  • 블록 단위로 해쉬 알고리즘을 적용하는 방식
  • 임의의 길이의 입력 데이터를 받아 고정된 길이의 해쉬 값으로 변환
  • 대표적인 해쉬 알고리즘으로 HAVAL, SHA-1 등
  • 해쉬 함수는 일방향 함수

블록 암호화 방식

  • DES
  • SEED
  • AES

RSA

→ 비대칭 암호화 방식으로 소수를 활용한 암호화 알고리즘

→ 1978년 MIT에서 제안된 공개키 암호화 알고리즘

→ 큰 숫자를 소인수분해하기 어렵다는 것에 기반

AES

→ DES의 보안 문제 해결을 위해 NIST에서 개발한 개인키 암호화 알고리즘

→ 암호화 키와 복호화 키가 동

알고리즘 종류

* SEED → 한국인터넷진흥원에서 개발한 블록 암호화 알고리즘

* ARIA → 국자정보원과 산학협회가 개발한 블록 암호화 알고리즘

* DES → 미국 NBS에서 발표한 개인키 암호화 알고리즘

* AES → 미국 표준 기술 연구소(NIST)에서 발표한 개인키 암호화 알고리즘

* RSA → MIT의 라이베스트, 샤미르, 애들먼에 의해 제안된 공개키 암호화 알고리즘, 소인수 분해 문제를 이용한 공개키 암호화 기법에 널리 사용

알고리즘 구분

  • AES → 개인키 암호화 알고리즘
  • MD4, MD5, SHA-1 → 해시 알고리즘

STA (Spanning Tree Algorithm)

→ 루프(폐회로)를 형성하지 않으면서 연결을 설정하는 알고리즘

💡 비용 산정 기법 - COCOMO 모델

소프트웨어 비용 추정 모형

→ COCOMO, Putnam, Function-Point

기능 점수(Functional Point) 모형에서 비용 산정에 이용되는 요소

→ 자료 입력(입력 양식), 정보 출력(출력 보고서), 명령어(사용자 질의수), 데이터 파일, 필요한 외부 루틴과의 인터페이스

Putnam 모형

→ Rayleigh-Norden 곡선을 이용한 프로젝트 비용 산정 기법

COCOMO 소프트웨어 개발 유형

  • 조직형 (Organic) → 기관 내부에서 개발된 중/소 규모의 소프트웨어, 5만 라인 이하의 소프트웨어를 개발하는 유형
  • 반분리형 (Semi-Detached) → 조직형과 내장형의 중간형, 30만 라인 이하의 소프트웨어를 개발하는 유형
  • 내장형 (Embedded) → 최대형 규모의 트랜잭션 처리 시스템이나 운영체제 등의 30만 라인 이상의 소프트웨어를 개발하는 유형

💡 비용 산정 기법 - LOC 기법

LOC 기법

S/W 각 기능의 원시 코드 라인수와 비관치, 낙관치, 기대치를 측정하여 예측치를 구하고 이를 이용하여 비용을 산정하는 기법

라인수 / (프로그래머 수 * 평균 생산성)

💡 접근 통제

접근통제 기술

  • 임의 접근통제 (DAC), 강제 접근통제(MAC), 역할기반 접근통제(RBAC)
  • MAC(Mandatory Access Control) → 강제 접근 통제, 주체와 객체의 등급을 비교하여 접근 권한을 부여하는 방식
  • DAC(Discretionary Access Control) → 데이터에 접근하는 사용자의 신원에 따라 접근 권한을 부여하는 방식
  • RBAC(Role Based Access Control) → 사용자의 역할에 따라 접근 권한을 부여하는 방식 / 접근 통제 방법 중 조직 내에서 직무, 직책 등 개인의 역할에 따라 결정하여 부여하는 접근 정책

벨 라파듈라 모델

→ 군대의 보안 레벨처럼 정보의 기밀성에 따라 상하 관계가 구분된 정보를 보호하기 위해 사용

클락-윌슨 무결성 모델

→ 무결성 중심의 상업용 모델, 사용자가 직접 개체에 접근할 수 없고 프로그램에 의해 접근 가능한 보안 모델

PDCA 모델

→ 프로세스 및 제품의 제어 및 지속적인 개선을 위해 ‘계획, 행동, 평가, 개선’의 4 단계를 반복하는 모델

만리장성 모델

→ 서로 이해 충돌 관계에 있는 객체 간의 정보 접근을 통제하는 모델

💡 보안

정보보안의 4요소

→ 기밀성, 무결성, 가용성

정보 보안 요소의 무결성

→ 시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있다

WPA (Wi-Fi Protected Access)

→ Wi-Fi에서 제정한 무선 랜(WLAN) 인증 및 암호화 관련 표준

Secure 코딩에서 입력 데이터 검증 및 표현의 보안 약점

  • SQL 삽입 → 사용자의 입력 값 등 외부 입력 값이 SQL 쿼리에 삽입되어 공격
  • 크로스사이트 스크립트 → 검증되지 않은 외부 입력 값에 의해 브라우저에서 악의적인 코드가 실행
  • 운영체제 명령어 삽입 → 운영체제 명령어 파라미터 입력 값이 적절한 사전검증을 거치지 않고 사용되어 공격자가 운영체제 명령어를 조작
  • 자원 삽입 → 데이터 입/출력 경로를 조작하여 서버 자원을 수정 및 삭제
  • 위험한 형식 파일 업로드 → 악의적인 명령어가 포함된 스크립트 파일을 업로드함으로써 시스템에 손상을 줌

응용 프로그램의 보안 설정

→ 실행 프로세스 권한 설정, 운영체제의 접근 제한, 운영체제의 정보 수집 제한

* 서버 관리실 출입 통제는 ㅋㅋ 물리적 보안에 포함되는 보안 조치

SSH(Secure Shell)

  • 기본 네트워크 포트: 22번
  • 전송되는 데이터는 암호화 됨
  • 키를 통한 인증은 클라이언트의 공개키를 서버에 등록해야 함
  • 서로 연결되어 있는 컴퓨터 간 원격 명령 실행이나 셀 서비스 등을 수행

IPSec

→ 암호화와 복호화가 모두 가능한 양방향 암호 방식

  • ESP는 발신지 인증, 데이터 무결성, 기밀 성 모두를 보장
  • 운영 모드는 Tunnel 모드와 Transport 모드로 분류
  • AH는 발신지 호스트를 인증하고, IP 패킷의 무결성을 보장함

세션 하이재킹

  • 비동기화 상태 탐지
  • ACK STORM 탐지
  • 패킷의 유실 및 재전송 증가 탐지
  • 예상치 못한 접속의 리셋 탐지

침입 탐지 시스템

* 이상 탐지 기법 → 평균적인 시스템의 상테를 기준으로 비정상적인 행위나 자원의 사용이 감지되면 이를 알려주는 시스템

* 오용 탐지 기법 → Signature Base나 Knowledge Base라고도 불리며 이미 발견되고 정립된 공격 패턴을 입력해두었다가 탐지 및 차단

* HIDS(Host-Based Intrusion Detection) → 운영체제에 설정된 사용자 계정에 따라 어떤 사용자가 어떤 접근을 시도하고 어떤 작업을 했는지에 대한 기록을 남기고 추적

* NIDS(Network-Based Intrusion Detection System) → 대표적: Snort

* 외부 인터넷에 서비스를 제공하는 서버가 위치하는 네트워크인 DMZ에는 IDS가 설치될 수 없음

악의적인 사용자가 지인 또는 특정 유명인으로 가장하여 활동하는 공격 기법

→ Evil Twin Attack, Phishing

웜(Worm)

→ 악성코드의 유형 중 다른 컴퓨터의 취약점을 이용하여 스스로 전파(복제)하거나 메일로 전파되며 스스로를 증식하는 것

* 로그 웨어(Rogue Ware) - 사용자를 속여 악성 코드를 설치하도록 유도하는 소프트웨어

* 애드웨어(Adware) - 소프트웨어 자체에 광고를 포함하여 이를 보는 대가로 무료로 사용하는 소프트웨어

* 반사 공격(Reflection Attack) - 송신자가 생성한 메시지를 가로채 접근 권한을 얻는 형태의 공격 기법

Ping of Death

→ 시스템 공격 기법 중 하나로 허용 범위 이상의 ICMP 패킷을 전송하여 대상 시스템의 네트워크를 마비

* 세션 하이재킹(Session Hijacking) - 서버에 접속하고 있는 클라이언트들의 세션 정보를 가로채는 공격 기법

* 피기백 공격(Piggyback Attack) - 시스템의 올바른 인증 절차나 보안 프로그램에 편승하는 공격 방법

* 크로스사이트 스크립팅(XSS: Cross Site Scripting) - 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나, 비정상적인 기능 수행을 유발하는 보안 약점

XSS (Cross Site Scripting)

→ 웹페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도함으로써, 정보 유출 등의 공격을 유발할 수 있는 취약점

* 피싱 - 낚시, 허위 웹사이트 내세워 사용자의 개인 신용 정보를 빼내는 수법을 의미

* 파밍 - 합법적으로 소유하고 있던 사용자의 도메인을 탈취하거나 DNS 이름을 속여 사용자들이 진짜 사이트로 오인하도록 유도하여 개인 정보를 훔치는 신종 인터넷 사기 수법

* 랜섬웨어 - 인터넷 사용자의 컴퓨터에 잠입해 내부 문서나 파일 등을 암호화해 사용자가 열지 못하게 하는 프로그램, 돈 요구하기도 함

스위치 재밍(Switch Jamming)

  • 위조된 매체 접근 제어(MAC) 주소를 지속적으로 네트워크로 흘려보내, 스위치 MAC 주소 테이블의 저장 기능을 혼란시켜 더미 허브(Dummy Hub)처럼 작동하게 하는 공격

LAN Tapping

  • LAN 회선 중간에서 전기 신호를 도청하는 행위

Ransomware

사용자의 컴퓨터에 침입해 내부 분서 파일 등을 암호화해 사용자가 열지 못하게 하는 공격

→ 암호 해독용 프로그램의 전달을 조건으로 사용자에게 돈을 요구하기도 한다

Smurf

→ 네트워크 라우터의 브로드캐스트 주소를 활용한 DoS 공격

→ IP 또는 ICMP의 특성을 악용하여 특정 사이트에 집중적으로 데이터를 보내 네트워크 또는 시스템의 상태를 불능으로 만드는 공격

공격 대상이 네트워크의 임의의 시스템에 패킷을 보내게 만드는 공격

* TearDrop → Offset 값을 변경시켜 수신 측에서 패킷을 재조립할 때 오류로 인한 과부하를 발생시킴

* Qshing → QR코드 + 피싱(Fishing)

블루투스 공격 종

  • 블루 버그 → 블루투스 장비 사이의 취약한 연결 관리를 악용한 공격, 휴대폰을 원격 조정하거나 통화를 감청할 수 있음
  • 블루스나프 → 블루투스의 취약점을 활용하여 장비의 파일에 접근하는 공격으로, 인증없이 간편하게 정보를 교환할 수 있는 OPP(Object Push Profile)를 사용하여 정보를 열람
  • 블루재킹 → 블루투스를 이용해 스팸처럼 명함을 익명으로 퍼뜨리는 공격
  • 블루프린팅 → 블루투스 공격 장치의 검색 활동을 의미함

네트워크 장비

  • 리피터: 전송되는 신호가 전송 선로의 특성 및 외부 충격 등의 요인으로 인해 원래의 형태와 다르게 왜곡되거나 약해질 경우 원래의 신호 형태로 재생하여 다시 전송하는 역할을 수행
  • 브라우터: 브리지와 라우터의 기능을 모두 갖추고 있는 네트워크 장비
  • 네트워크 인터페이스 카드: 케이블을 통해 정보 전송
  • 허브: 한 사무실이나 가까운 거리의 컴퓨터들을 연결하는 장치
  • 스위치: 브리지와 같이 LAN과 LAN을 연결하여 훨씬 더 큰 LAN을 만드는 장치
  • 라우터: 브리지와 같이 LAN과 LAN의 연결 기능에 데이터 전송의 최정 경로를 선택할 수 있는 기능 추가
  • 게이트웨이: 전 계층의 프로토콜 구조가 다른 네트워크의 연결을 수행
profile
영차영차 😎

0개의 댓글