status:: active

2025년 1회 정보처리기사 필기 핵심 개념 정리

이 문서는 2025년 1회 기출에 등장한 주제를 개별 문제의 정답 암기가 아니라 일반 개념 체계로 확장한 학습 자료다. 특정 선택지를 고른 이유는 다루지 않으며, 각 절은 정의 → 전체 분류 → 동작 원리 → 비슷한 개념 비교 → 시험 판단 순서로 구성한다.

빠른 구분표

함께 구별할 개념 핵심 차이
애자일 방법론 / 개발·검증 XP·Scrum·Kanban 등 구체적인 접근법 / 모든 개발에서 수행하는 일반 활동
객체·동적·기능 모델 정적 구조 / 상태 변화 / 데이터 변환
하향식 / 상향식 전체에서 세부로 분해 / 세부 모듈을 전체로 조립
Sequence / State 객체 사이 메시지의 시간 순서 / 한 객체의 상태 전이
정적 분석 / 동적 분석 실행하지 않고 코드 검사 / 실행 중 행위와 자원 검사
테스트 / 디버깅 결함 존재 발견 / 원인 추적과 수정
단위 / 통합 / 시스템 / 인수 테스트 개별 모듈 / 모듈 사이 / 전체 시스템 / 사용자 요구
스트레스 / 성능 / 보안 / 회복 테스트 한계 초과 / 정상 조건 성능 / 침입 방어 / 장애 복구
즉각 갱신 / 지연 갱신 커밋 전 DB 반영 가능 / 커밋 후 DB 반영
카디널리티 / 차수 튜플 수, 즉 행 수 / 속성 수, 즉 열 수
관계대수 / 관계해석 절차적 / 비절차적
흐름 제어 / 오류 제어 / 혼잡 제어 수신자 속도 / 손실·오류 / 네트워크 부하
RIP / OSPF 거리 벡터·홉 수 / 링크 상태·비용
대칭키 / 비대칭키 같은 비밀키 / 공개키·개인키 쌍
해시 / 암호화 고정 길이 일방향 요약 / 키를 이용한 가역적 변환

1과목 소프트웨어 설계

애자일 방법론의 범위

애자일은 짧은 반복, 작동하는 소프트웨어, 고객 피드백, 변화 대응을 중시하는 개발 철학과 방법론의 계열이다. 특정 활동 하나가 아니라 개발을 조직하고 진행하는 접근 방식이다.

대표적인 애자일 방법론과 실천 방식

  • XP: 짝 프로그래밍, 테스트 우선 개발, 지속적 통합, 리팩터링, 작은 릴리스를 강조한다.
  • Scrum: 스프린트, 제품 백로그, 스프린트 백로그, 데일리 스크럼과 회고를 사용한다.
  • Kanban: 작업 흐름을 시각화하고 진행 중 작업 수를 제한해 흐름을 개선한다.
  • FDD: 사용자에게 가치 있는 기능을 단위로 계획·설계·구축한다.
  • Crystal: 팀 규모와 시스템 중요도에 맞춰 절차의 강도를 조정한다.

개발, 검증, 분석, 테스트는 여러 방법론에서 수행되는 일반적인 활동이다. 구체적인 방법론 이름과 개발 활동의 이름을 구분해야 한다.

시험 판단 고유한 이름과 실천 체계가 있으면 방법론일 가능성이 높다. 단순히 생명주기의 작업을 나열한 표현은 방법론 이름이 아니다.

회상 질문: 작업 흐름을 보드에 시각화하고 진행 중 작업 수를 제한하는 방법은 무엇인가?

럼바우의 객체지향 분석 OMT

럼바우의 OMT(Object Modeling Technique)는 시스템을 서로 보완적인 세 모델로 분석한다.

모델 중심 질문 주요 표현
객체 모델 무엇이 존재하고 어떻게 연결되는가? 객체, 클래스, 속성, 연산, 관계
동적 모델 사건에 따라 상태가 어떻게 변하는가? 상태, 사건, 전이, 동작
기능 모델 입력 데이터가 어떻게 출력으로 변환되는가? 자료 흐름도(DFD), 처리, 자료 저장소

객체 모델링

객체와 클래스의 정적인 구조를 표현한다. 객체의 속성, 제공하는 연산, 객체 사이의 연관·집합·일반화 관계를 정의하며 정보 모델링이라고도 한다.

동적 모델링

시간의 흐름과 사건에 따른 객체 상태 변화를 표현한다. 상태 다이어그램이 대표적이며 주문 접수 → 결제 완료 → 배송 중 → 배송 완료 같은 생명주기를 나타낸다.

기능 모델링

시스템에서 데이터가 어떤 처리를 거쳐 변환되는지 표현한다. 자료 흐름도를 이용해 외부 개체, 처리, 자료 흐름, 자료 저장소의 관계를 나타낸다.

럼바우의 분석 절차는 일반적으로 객체 모델 → 동적 모델 → 기능 모델 순서로 정리한다.

시험 판단 객체·속성·연산·관계 또는 정보 모델링은 객체 모델이다. 상태 변화는 동적 모델, DFD는 기능 모델이다.

회상 질문: 시스템의 데이터 변환 과정을 DFD로 나타내는 럼바우 모델은 무엇인가?

하향식 설계와 상향식 설계

하향식 설계

전체 시스템의 상위 기능에서 시작해 점차 세부 모듈로 분해한다.

  • 전체 구조와 핵심 기능을 초기에 파악하기 쉽다.
  • 상위 모듈의 인터페이스를 비교적 일찍 정의한다.
  • 낮은 수준의 자료구조와 알고리즘은 설계 후반에 구체화한다.
  • 통합 시험에서 미완성 하위 모듈은 스텁(Stub)으로 대신한다.

상향식 설계

재사용 가능한 저수준 모듈을 먼저 만들고 이를 조합해 상위 시스템을 구성한다.

  • 세부 기능과 공통 유틸리티를 먼저 구현한다.
  • 검증된 하위 모듈을 재사용하기 쉽다.
  • 전체 구조와 모듈 간 인터페이스가 늦게 드러날 수 있다.
  • 통합 시험에서 미완성 상위 모듈은 드라이버(Driver)로 대신한다.
항목 하향식 상향식
시작점 전체 구조 세부 모듈
진행 분해 조립
시험용 임시 모듈 Stub Driver
초기 관심사 기능·인터페이스 자료구조·알고리즘·재사용 부품

인터페이스가 성립하지 않은 모듈은 어느 방향에서도 쉽게 결합할 수 없다. 상향식은 기존 하위 모듈의 인터페이스가 맞아야 조립할 수 있다.

기억법 하향식은 아래를 대신하는 Stub, 상향식은 위에서 호출하는 Driver가 필요하다.

회상 질문: 상위 모듈 없이 하위 모듈을 시험하기 위해 대신 호출하는 모듈은 무엇인가?

요구사항 명세와 구조적 분석 도구

요구사항 명세는 이해관계자의 요구를 개발과 검증의 기준이 되도록 문서화하는 활동이다.

좋은 요구사항의 특성

  • 정확성: 실제 필요를 올바르게 표현한다.
  • 명확성: 여러 의미로 해석되지 않는다.
  • 완전성: 필요한 기능과 제약이 빠지지 않는다.
  • 일관성: 요구사항끼리 충돌하지 않는다.
  • 검증 가능성: 시험이나 측정으로 충족 여부를 판단할 수 있다.
  • 추적 가능성: 요구의 출처와 설계·코드·테스트의 연결을 확인할 수 있다.
  • 수정 용이성: 변경 위치와 영향 범위를 파악하기 쉽다.

기능 요구사항과 비기능 요구사항

  • 기능 요구사항: 시스템이 무엇을 해야 하는지 정의한다. 예: 주문 생성, 사용자 인증, 결제 취소.
  • 비기능 요구사항: 얼마나 빠르고 안전하고 안정적으로 수행해야 하는지 정의한다. 예: 응답시간, 가용성, 보안, 접근성.

자료 사전(Data Dictionary)

자료 사전은 DFD에 등장하는 자료 흐름, 자료 저장소, 자료 요소의 이름·구조·의미를 정의한다. 구조적 분석의 산출물을 구체화하고 용어를 일관되게 만드는 보조 도구다.

자료 사전이 요구사항 분석에 활용될 수 있다는 일반 사실과, 특정 문항에서 요구하는 명세 기법의 범위는 구분해야 한다. 시험에서는 문맥상 요구사항 명세 자체의 대표 원칙을 묻는지, 구조적 분석 도구를 묻는지 확인한다.

도구 주된 역할
DFD 데이터의 이동과 처리 표현
자료 사전 데이터 항목의 의미와 구조 정의
미니 명세 DFD의 최하위 처리 논리 기술
ERD 개체·속성·관계 표현
유스케이스 사용자 목표와 시스템 상호작용 표현

회상 질문: DFD에 표시된 데이터의 구성과 의미를 정의하는 도구는 무엇인가?

UML 다이어그램의 분류와 역할

UML은 시스템의 구조와 행위를 여러 관점에서 모델링하는 표준 언어다.

구조 다이어그램

시스템의 정적인 구성과 배치를 표현한다.

  • Class Diagram: 클래스, 속성, 연산, 관계
  • Object Diagram: 특정 시점 객체 인스턴스의 상태와 연결
  • Component Diagram: 구현 컴포넌트와 의존 관계
  • Deployment Diagram: 하드웨어 노드와 소프트웨어 배치
  • Package Diagram: 모델 요소의 패키지 구성과 의존 관계
  • Composite Structure Diagram: 클래스나 컴포넌트 내부 구조

행위 다이어그램

시간에 따른 동작, 상호작용, 상태 변화를 표현한다.

  • Use Case Diagram: 액터 관점의 시스템 기능
  • Sequence Diagram: 객체 사이 메시지의 시간 순서
  • Communication Diagram: 객체 연결과 메시지 관계
  • State Diagram: 한 객체의 상태와 사건에 따른 전이
  • Activity Diagram: 업무·알고리즘의 제어 흐름

Sequence와 State의 구분

Sequence: 여러 객체 사이의 메시지 교환
State: 한 객체 내부의 상태 변화

Sequence Diagram에서는 생명선이 세로 방향의 시간을 나타내고 메시지가 객체 사이를 가로지른다. State Diagram에서는 상태, 전이, 전이를 촉발하는 사건과 조건을 나타낸다.

시험 판단 Component는 구조 다이어그램이다. State는 이름에 객체가 등장하더라도 상태 변화가 중심이므로 행위 다이어그램이다.

회상 질문: 주문 객체 하나가 결제 전·결제 완료·배송 중으로 바뀌는 과정은 어떤 다이어그램으로 표현하는가?

시스템의 기본 구성 요소

시스템은 공동 목표를 달성하기 위해 상호작용하는 요소의 집합이다.

구성 요소 의미
입력(Input) 시스템에 들어오는 자료·에너지·자원
처리(Process) 입력을 목적에 맞게 변환하는 활동
출력(Output) 처리 결과로 생성되는 정보·제품·서비스
제어(Control) 목표와 규칙에 맞게 시스템의 동작을 조정
피드백(Feedback) 출력 결과를 다시 입력·제어에 반영
입력 → 처리 → 출력
        ↑     │
        └ 피드백·제어

유지보수(Maintenance)는 운영 중인 시스템을 수정·개선하는 생명주기 활동이다. 시스템의 기본 입출력 구조를 이루는 구성 요소와는 분류 수준이 다르다.

회상 질문: 출력 결과를 기준과 비교하여 다음 동작을 조정하도록 되돌려 보내는 요소는 무엇인가?


2과목 소프트웨어 개발

정적 분석과 동적 분석

소스 코드 품질 분석은 프로그램 실행 여부에 따라 정적 분석과 동적 분석으로 나뉜다.

정적 분석

프로그램을 실행하지 않고 소스 코드, 바이트코드, 설정을 검사한다.

  • 문법과 코딩 규칙 위반
  • 사용하지 않는 변수와 도달 불가능 코드
  • 잠재적인 널 참조와 자원 누수
  • 복잡도, 중복 코드, 보안 약점

대표 도구로 PMD, Checkstyle, Cppcheck, SonarQube 등이 있다.

동적 분석

프로그램을 실제로 실행하면서 시간에 따른 행위와 자원 사용을 관찰한다.

  • 메모리 누수와 잘못된 메모리 접근
  • CPU·메모리·I/O 사용량
  • 실행 경로와 호출 시간
  • 동시성 문제와 성능 병목

대표적인 범주에는 프로파일러, 메모리 검사기, 실행 추적 도구가 있다.

도구 이름을 묻는 문제에서는 실제 용도를 확인해야 한다. PMD처럼 널리 알려진 정적 분석 도구와, 정적 소스 분석 도구로 분류되지 않는 낯선 이름을 구분한다.

회상 질문: 소스 코드를 실행하지 않고 코딩 규칙 위반을 찾는 분석은 무엇인가?

테스트와 디버깅

테스트와 디버깅은 결함 처리 과정에서 이어지지만 목적이 다르다.

테스트로 실패와 결함의 존재 발견
→ 디버깅으로 원인 위치와 발생 조건 추적
→ 코드 수정
→ 회귀 테스트로 기존 기능 확인
  • 테스트: 실제 결과와 기대 결과를 비교해 결함이 있음을 보여 준다.
  • 디버깅: 발견된 실패를 재현하고 원인을 찾아 코드를 수정한다.
  • 회귀 테스트: 수정이 기존의 정상 기능을 깨뜨리지 않았는지 확인한다.

테스트가 결함이 없음을 완전히 증명해 주는 것은 아니다. 선택한 조건에서 결함을 발견하거나 품질 위험을 줄이는 활동이다.

회상 질문: 발견된 오류의 원인을 추적해 코드를 고치는 활동은 무엇인가?

인터페이스 구현 검증 도구

인터페이스 검증은 시스템이나 컴포넌트 사이의 데이터 교환, API 호출, 메시지 형식과 결과를 시험한다.

도구·계열 용도
xUnit 여러 언어의 단위 테스트 프레임워크 계열
STAF 분산 환경의 테스트 자동화 프레임워크
Watir 브라우저 기반 웹 애플리케이션 자동화 테스트
FitNesse 인수 테스트와 협업형 명세·검증

FoxBase는 전통적인 데이터베이스 관리·프로그래밍 환경으로 테스트 및 인터페이스 구현 검증 도구 계열과 다르다.

시험에서는 이름의 익숙함보다 검증 실행을 지원하는가, 데이터베이스나 개발 언어 자체인가를 기준으로 구분한다.

테스트 수준

테스트는 대상 범위가 점차 커지는 순서로 이해한다.

단위 테스트

함수, 클래스, 모듈 같은 최소 단위를 독립적으로 검사한다.

  • 내부 알고리즘과 계산
  • 경계 조건과 예외 처리
  • 개별 모듈의 명세 충족 여부

통합 테스트

단위 테스트를 통과한 모듈을 결합해 인터페이스와 상호작용을 검사한다.

  • 전달 인자의 형식과 순서
  • 데이터 교환과 호출 관계
  • 하향식 통합의 Stub
  • 상향식 통합의 Driver

시스템 테스트

완성된 전체 시스템이 기능·성능·보안·신뢰성 등 시스템 요구사항을 충족하는지 확인한다.

인수 테스트

최종 사용자의 업무 요구와 인수 기준을 만족하는지 확인한다. 알파 테스트와 베타 테스트가 대표적이다.

단위 → 통합 → 시스템 → 인수
작은 코드                실제 사용자 요구

회상 질문: 모듈 각각은 정상인데 모듈 사이 데이터 전달이 잘못된 문제를 찾는 테스트는 무엇인가?

스트레스·성능·보안·회복 테스트

스트레스 테스트

정상 한계를 넘는 사용자 수, 요청량, 데이터량 또는 부족한 메모리·CPU를 가해 시스템의 한계와 실패 양상을 확인한다.

  • 어느 지점에서 성능이 급격히 떨어지는가?
  • 과부하 상태에서 데이터가 손상되지 않는가?
  • 장애 후 정상 상태로 복귀하는가?

성능 테스트

정상 또는 예상 범위의 부하에서 응답시간, 처리량, 자원 사용률을 측정한다. 부하 테스트, 확장성 테스트 등이 포함될 수 있다.

보안 테스트

인증 우회, 권한 상승, 입력값 공격, 불법 접근 등을 시도해 보안 통제가 작동하는지 확인한다.

회복 테스트

전원 장애, 네트워크 단절, 프로세스 중단 같은 장애를 발생시킨 뒤 복구 절차와 데이터 일관성을 확인한다.

시험 판단 한계보다 큰 부하는 스트레스, 정상 범위의 수치 측정은 성능, 침입 시도는 보안, 장애 이후 정상화는 회복이다.

회상 질문: 정상 처리량을 크게 넘는 요청을 넣어 시스템이 어디서 무너지는지 확인하는 테스트는 무엇인가?

N-S 차트

N-S 차트(Nassi-Shneiderman Chart)는 구조적 프로그래밍의 제어 논리를 중첩된 사각형으로 표현하는 도형식 설계 도구다.

표현하는 기본 구조

  • 순차(Sequence)
  • 선택(Selection)
  • 다중 선택(Multiple Selection)
  • 반복(Iteration)

N-S 차트는 화살표와 GOTO를 사용하지 않는다. 블록의 포함 관계만으로 흐름을 나타내므로 임의 점프가 없는 구조적인 논리를 표현하기 쉽다.

도구 표현 방식
순서도 화살표로 제어 흐름 연결
N-S 차트 중첩된 상자로 구조적 제어 표현
DFD 데이터의 이동과 처리 표현

회상 질문: 화살표 없이 순차·선택·반복을 중첩 상자로 표현하는 도구는 무엇인가?


3과목 데이터베이스 구축

데이터베이스 회복 기법과 로그

회복은 장애가 발생한 데이터베이스를 일관된 상태로 되돌리는 작업이다. 로그에는 트랜잭션 시작, 변경 전 값, 변경 후 값, 커밋 여부 등이 기록된다.

즉각 갱신(Immediate Update)

트랜잭션이 커밋하기 전에도 변경 내용을 데이터베이스에 반영할 수 있다.

  • 미완료 트랜잭션의 변경이 이미 반영되었을 수 있으므로 UNDO가 필요하다.
  • 완료된 변경이 저장장치에 완전히 반영되지 않았을 수 있으므로 REDO도 필요하다.
  • 일반적으로 변경 전 값과 변경 후 값을 로그에 기록한다.

지연 갱신(Deferred Update)

트랜잭션이 커밋할 때까지 실제 데이터베이스에는 변경을 반영하지 않는다.

  • 미완료 트랜잭션의 변경은 DB에 들어가지 않았으므로 보통 UNDO가 필요 없다.
  • 커밋 후 장애로 반영이 누락된 작업에는 REDO가 필요하다.

검사점(Checkpoint)

일정 시점의 로그와 데이터 상태를 동기화해 회복을 시작할 기준점을 만든다. 장애 발생 시 로그 전체가 아니라 최근 검사점 이후를 중심으로 확인해 회복 시간을 줄인다.

그림자 페이징(Shadow Paging)

원본 페이지 테이블을 그림자 상태로 보존하고 변경은 새 페이지에 기록한다. 커밋 시 페이지 테이블 포인터를 바꾸며 로그 의존을 줄일 수 있지만 페이지 단편화와 복사 비용이 생길 수 있다.

기법 DB 반영 시점 대표 회복
즉각 갱신 커밋 전 가능 UNDO + REDO
지연 갱신 커밋 후 REDO 중심
그림자 페이징 새 페이지에 기록 후 전환 그림자 페이지 사용

회상 질문: 커밋 전에 DB 페이지가 바뀔 수 있어 UNDO와 REDO가 모두 필요한 기법은 무엇인가?

뷰의 성질과 갱신 제한

뷰(View)는 하나 이상의 기본 테이블에 대한 질의로 정의한 가상 테이블이다. 일반적인 뷰는 질의 정의를 저장하며 데이터를 별도로 저장하지 않는다.

장점

  • 필요한 행과 열만 보여 주어 보안을 강화한다.
  • 복잡한 조인과 계산을 단순한 인터페이스로 제공한다.
  • 기본 테이블 구조 변화의 일부를 사용자에게 감춰 논리적 독립성을 높인다.
  • 사용자나 업무별 데이터 표현을 제공한다.
  • 하나의 뷰를 이용해 다른 뷰를 정의할 수 있다.

갱신 제한

다음과 같은 뷰는 기본 테이블의 어느 행을 어떻게 변경할지 모호해 삽입·수정·삭제가 제한될 수 있다.

  • GROUP BY와 집계 함수
  • DISTINCT
  • 여러 테이블의 복잡한 조인
  • 계산식으로 만든 열
  • 집합 연산

따라서 모든 뷰가 자유롭게 갱신되는 것은 아니다. 일반 뷰는 독립적인 물리 인덱스를 갖지 않는다는 점도 함께 기억한다. DBMS가 제공하는 구체화 뷰는 별도 저장 구조를 가질 수 있으므로 일반 뷰와 구분한다.

회상 질문: GROUP BY와 집계 함수를 포함한 뷰의 갱신이 제한되는 이유는 무엇인가?

릴레이션의 카디널리티와 차수

릴레이션은 행인 튜플과 열인 속성으로 구성된다.

용어 의미
튜플(Tuple) 하나의 행, 한 개체의 레코드
속성(Attribute) 하나의 열, 개체의 특성
카디널리티(Cardinality) 튜플의 수, 행 수
차수(Degree) 속성의 수, 열 수
도메인(Domain) 한 속성이 가질 수 있는 값의 집합
속성 6개 × 튜플 4개 릴레이션
→ 차수 6
→ 카디널리티 4

기억법 카디널리티는 카드 묶음의 장수처럼 행이 몇 장인지, 차수는 한 행을 이루는 칸이 몇 개인지 센다.

회상 질문: 열 5개와 행 100개인 테이블의 차수와 카디널리티는 각각 얼마인가?

관계대수와 관계해석

두 이론은 모두 관계형 데이터베이스의 질의를 표현하지만 접근 방식이 다르다.

관계대수

원하는 결과를 만들기 위해 어떤 연산을 어떤 순서로 수행할지 기술하는 절차적 언어다.

  • 피연산자와 결과가 모두 릴레이션인 폐쇄성을 가진다.
  • 일반 집합 연산: 합집합, 교집합, 차집합, 카티션 프로덕트
  • 순수 관계 연산: Select, Project, Join, Division
학생 릴레이션에서 학과='컴퓨터'인 행을 선택
→ 그 결과에서 이름 열을 프로젝트

관계해석

원하는 결과가 어떤 조건을 만족해야 하는지 기술하는 비절차적 언어다.

  • 튜플 관계해석
  • 도메인 관계해석
  • 존재 정량자 ∃
  • 전칭 정량자 ∀
구분 관계대수 관계해석
성격 절차적 비절차적
중심 연산과 순서 결과가 만족할 조건
공통점 릴레이션을 대상으로 질의 릴레이션을 대상으로 질의

회상 질문: 질의 결과를 얻기 위한 연산 순서를 직접 명시하는 것은 관계대수인가 관계해석인가?


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

C 연산자 우선순위

C 표현식은 우선순위와 결합 방향에 따라 계산된다. 괄호를 사용하면 우선순위를 명확하게 바꿀 수 있다.

주요 이항 연산자의 높은 순서

곱셈·나눗셈·나머지
> 덧셈·뺄셈
> 시프트
> 관계
> 동등
> 비트 AND
> 비트 XOR
> 비트 OR
> 논리 AND
> 논리 OR
> 대입

시험에서 범주만 비교하면 일반적으로 다음처럼 정리한다.

산술 > 시프트 > 관계 > 비트

단항 연산자 !, ~, 단항 +/-, 역참조 *, 주소 &는 대부분의 이항 산술 연산자보다 우선순위가 높다.

실무 원칙 암묵적 우선순위에만 기대지 말고 복합식에는 괄호를 사용해 의도를 드러낸다.

회상 질문: a + b << 2에서는 덧셈과 시프트 중 무엇이 먼저 계산되는가?

흐름 제어·오류 제어·혼잡 제어

흐름 제어(Flow Control)

송신자가 수신자의 처리 속도보다 너무 빠르게 데이터를 보내 버퍼가 넘치는 일을 막는다.

  • Stop-and-Wait: 한 프레임을 보내고 ACK를 받은 뒤 다음 프레임을 보낸다.
  • Sliding Window: ACK를 기다리지 않고 윈도우 크기만큼 연속 전송한다.
  • 윈도우 크기: 확인 없이 전송 중일 수 있는 데이터의 최대 범위다.

오류 제어(Error Control)

전송 중 손실되거나 손상된 데이터를 탐지하고 복구한다.

  • ACK: 정상 수신을 알리는 긍정 응답
  • NAK: 오류나 누락을 알리고 재전송을 요구하는 부정 응답
  • 타임아웃: 일정 시간 ACK가 없으면 재전송
  • ARQ: Stop-and-Wait, Go-Back-N, Selective Repeat

NAK를 받는 것은 전송 성공 범위를 늘리는 신호가 아니다. 해당 프레임의 오류나 손실을 뜻하므로 재전송 처리가 필요하다.

혼잡 제어(Congestion Control)

네트워크 전체의 라우터와 링크에 패킷이 과도하게 몰리지 않도록 송신량을 조절한다. TCP 혼잡 윈도우, Slow Start, Congestion Avoidance 등이 관련된다.

제어 보호 대상 대표 단서
흐름 제어 수신자 버퍼 수신 속도, 윈도우
오류 제어 데이터 정확성 ACK·NAK, 재전송
혼잡 제어 네트워크 전체 라우터 부하, 혼잡 윈도우

회상 질문: NAK를 받은 송신자가 우선 수행해야 하는 동작은 무엇인가?

C 포인터와 주소 연산

포인터는 다른 객체의 메모리 주소를 저장하는 변수다.

int n = 4;
int *pt = &n;
  • &n: n의 주소
  • pt: n의 주소
  • *pt: pt가 가리키는 값, 즉 4
  • &pt: 포인터 변수 pt 자체의 주소
  • *&pt: pt의 주소를 역참조한 값, 즉 pt

포인터 덧셈과 뺄셈

포인터에 정수 k를 더하면 메모리 바이트 k가 아니라 해당 자료형의 원소 k개만큼 이동한다.

pt + 1  // 다음 int 원소의 주소

같은 배열이나 객체 범위의 두 포인터를 빼면 바이트 수가 아니라 원소 간 거리를 얻는다.

원문의 표현식은 다음 구조다.

&n + *pt - *&pt + n

&n과 *&pt, 즉 pt는 같은 주소다. *pt가 4이므로 (&n + 4) - pt의 원소 거리는 4이고 마지막 + n의 4를 더해 8이 된다.

포인터 계산은 자료형과 유효한 객체 범위를 전제로 한다. 임의로 무관한 객체의 포인터를 빼거나 범위를 벗어난 주소를 역참조하면 정의되지 않은 동작이 될 수 있다.

회상 질문: *&pt는 n의 값인가, 포인터 pt의 값인가?

Linux의 시스템 정보 명령

uname은 운영체제와 커널 관련 정보를 출력한다.

명령 의미
uname 커널 이름
uname -r 커널 릴리스 버전
uname -a 가능한 모든 시스템 정보
ls 디렉터리 내용 목록
chmod 파일 권한 변경
rm 파일·디렉터리 제거
nm 오브젝트 파일의 심벌 목록 표시

배포판 정보는 환경에 따라 /etc/os-release 또는 lsb_release를 사용하며 커널 버전과 배포판 버전은 서로 다른 개념이다.

회상 질문: 현재 실행 중인 커널의 릴리스 번호만 확인하는 옵션은 무엇인가?

Java 조건식과 boolean

Java의 if, while, for 조건식은 반드시 boolean 값이어야 한다.

int y = 6;
while (y--) { }   // 컴파일 오류

C에서는 0을 거짓, 0이 아닌 정수를 참으로 취급하지만 Java는 정수를 boolean으로 자동 변환하지 않는다.

while (y-- > 0) { }  // 올바른 boolean 비교식

후위 감소 y--는 현재 값을 비교에 사용한 다음 y를 1 감소시킨다. 전위 감소 --y는 먼저 감소시킨 값을 사용한다.

언어 정수 조건식
C 0은 거짓, 0 이외는 참으로 사용 가능
Java boolean만 허용, 정수를 직접 사용할 수 없음

회상 질문: Java에서 정수 y가 양수인 동안 반복하려면 while 조건을 어떻게 작성할 수 있는가?

CIDR과 서브넷 마스크

CIDR 표기의 /n은 서브넷 마스크의 왼쪽부터 연속된 1비트 개수다.

/22 계산

11111111.11111111.11111100.00000000
255      255      252      0

따라서 /22의 서브넷 마스크는 255.255.252.0이다.

세 번째 옥텟의 블록 크기는 256-252=4이므로 네트워크 주소는 세 번째 옥텟이 0, 4, 8, …, 172, 176, 180처럼 4씩 증가한다.

128.107.176.0/22의 주소 범위는 다음과 같다.

  • 네트워크 주소: 128.107.176.0
  • 브로드캐스트 주소: 128.107.179.255
  • 사용 가능한 호스트: 128.107.176.1 ~ 128.107.179.254
  • 전체 주소 수: 2^(32-22) = 1024
  • 사용 가능한 전통적 호스트 수: 1022

빠른 계산 /22는 16비트를 채운 뒤 세 번째 옥텟에 6비트를 채운다. 11111100은 252다.

회상 질문: 서브넷 마스크가 255.255.252.0이면 세 번째 옥텟의 블록 크기는 얼마인가?

세그먼테이션 주소 변환

세그먼테이션은 프로그램의 주소 공간을 코드, 데이터, 스택 같은 논리적 단위로 나누는 가상기억장치 기법이다. 세그먼트마다 크기가 다를 수 있다.

논리 주소는 다음 두 부분으로 구성된다.

(세그먼트 번호, 오프셋)

세그먼트 테이블은 각 세그먼트의 시작 주소(Base)와 길이(Limit)를 가진다.

변환 절차

  1. 세그먼트 번호로 테이블 항목을 찾는다.
  2. 오프셋이 길이보다 작은지 검사한다.
  3. 유효하면 물리 주소 = 시작 주소 + 오프셋을 계산한다.
  4. 오프셋이 범위를 벗어나면 주소 오류가 발생한다.
시작 주소 222, 길이 198, 오프셋 176
176 < 198이므로 유효
물리 주소 = 222 + 176 = 398
기법 주소 공간 분할 기준
페이징 고정 크기 페이지
세그먼테이션 가변 크기 논리 단위

회상 질문: 세그먼트 오프셋이 Limit과 같다면 유효한 주소인가?

파일 디스크립터와 파일 제어 정보

운영체제는 파일의 위치, 크기, 소유자, 권한, 시간 정보 등을 관리하기 위한 메타데이터 구조를 유지한다. 교재에 따라 파일 디스크립터 또는 FCB(File Control Block)라는 용어를 사용한다.

저장과 사용 흐름

닫힌 파일
보조기억장치에 파일과 관리 정보 보존

파일 open
→ 필요한 관리 정보를 주기억장치의 열린 파일 테이블로 적재
→ 프로세스에는 열린 파일을 가리키는 식별자 제공

UNIX 계열에서 응용 프로그램이 받는 작은 정수 file descriptor는 커널의 열린 파일 항목을 가리키는 핸들이다. 사용자는 이 숫자를 시스템 호출에 전달하지만 커널 내부 관리 구조를 직접 조작하지는 못한다.

파일을 열 때 관리 정보가 주기억장치에서 보조기억장치로 내려가는 것이 아니라, 필요한 정보가 보조기억장치에서 주기억장치 쪽으로 올라온다.

회상 질문: 파일을 열 때 파일 관리 정보가 주로 어느 기억장치에서 어느 기억장치로 적재되는가?

C 표준 헤더 파일

헤더 대표 기능
<stdio.h> printf, scanf, 파일 입출력
<stdlib.h> 일반 변환, 동적 메모리, 난수, 프로세스 종료
<string.h> strlen, strcpy, strcmp, strcat 등 문자열 처리
<math.h> sqrt, pow, sin, cos 등 수학 함수
<ctype.h> 문자 종류 판별과 대소문자 변환
<time.h> 날짜·시간 처리

stdlib.h의 주요 함수

  • atoi, strtol, strtod: 문자열을 수치로 변환
  • malloc, calloc, realloc, free: 동적 메모리 관리
  • rand, srand: 의사 난수
  • qsort, bsearch: 정렬과 검색
  • exit: 프로그램 종료

strlen은 문자열 길이를 구하는 함수이므로 <string.h>에 선언되어 있다.

회상 질문: malloc과 atoi를 사용하려면 어떤 헤더를 포함해야 하는가?


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

소프트웨어 비용 산정의 분류

비용 산정은 규모, 기간, 인력, 생산성, 기술 난이도와 위험을 바탕으로 개발 노력과 비용을 예측하는 활동이다.

하향식 산정

전체 프로젝트 비용을 먼저 판단한 뒤 세부 작업에 배분한다.

  • 전문가 감정 기법
  • 델파이 기법

초기에 빠르게 적용할 수 있지만 전문가의 경험과 편향에 영향을 받을 수 있다.

상향식 산정

작업이나 기능을 세분화하고 각 비용을 계산한 뒤 합산한다.

  • LOC 기반 산정
  • 개발 단계별 인월수 산정
  • COCOMO
  • Putnam
  • 기능점수 방식

전통적인 기본 분류는 하향식과 상향식이다. 실제 조직에서는 두 결과를 비교·보정할 수 있지만, 이를 별도의 표준 기본 분류인 혼합식으로 항상 열거하는 것은 아니다.

산정 오류의 영향

  • 과대 산정: 예산 낭비, 긴장감과 생산성 저하
  • 과소 산정: 일정 지연, 품질 저하, 과로와 범위 축소

회상 질문: 전문가들의 익명 의견을 여러 차례 조정해 합의값을 얻는 산정 기법은 무엇인가?

프로젝트 위험 분석

위험은 아직 발생하지 않았지만 프로젝트의 일정, 비용, 범위, 품질에 부정적인 영향을 줄 수 있는 불확실한 사건이다.

위험 관리 절차

  1. 식별: 어떤 위험이 있는지 찾는다.
  2. 분석: 발생 가능성과 영향을 평가한다.
  3. 우선순위화: 가능성과 영향이 큰 위험부터 다룬다.
  4. 대응 계획: 회피, 완화, 전가, 수용 전략을 정한다.
  5. 감시와 통제: 징후와 대응 효과를 지속적으로 확인한다.
용어 의미
Risk Analysis 위험 식별과 영향·가능성 분석
CPM 일정에서 전체 기간을 결정하는 임계 경로 계산
WBS 프로젝트 작업을 관리 가능한 단위로 계층 분해
Waterfall 순차적인 소프트웨어 개발 생명주기 모형

회상 질문: 위험의 발생 가능성과 영향도를 곱해 우선순위를 정하는 활동은 어떤 관리 영역에 속하는가?

RIP와 OSPF 라우팅

RIP

RIP(Routing Information Protocol)는 거리 벡터 라우팅 프로토콜이다.

  • 경로 비용으로 홉 수를 사용한다.
  • 최대 유효 홉 수는 15다.
  • 16홉은 도달 불가능을 의미한다.
  • 주기적으로 라우팅 테이블을 이웃에게 전달한다.
  • 구조가 단순하지만 큰 망에서 수렴이 느리고 최적 경로 표현이 제한된다.

OSPF

OSPF(Open Shortest Path First)는 링크 상태 라우팅 프로토콜이다.

  • 링크 비용을 기준으로 최단 경로를 계산한다.
  • 각 라우터가 링크 상태 데이터베이스를 구성한다.
  • Dijkstra의 SPF 알고리즘을 사용한다.
  • 영역(Area)을 이용해 큰 네트워크를 계층화한다.
  • RIP보다 대규모 네트워크와 빠른 수렴에 유리하다.
구분 RIP OSPF
방식 거리 벡터 링크 상태
메트릭 홉 수 비용
최대 홉 15 해당 제한 없음
알고리즘 Bellman-Ford 계열 Dijkstra SPF

회상 질문: 홉 수 16을 도달 불가능으로 판단하는 프로토콜은 무엇인가?

소프트웨어 개발 보안 생명주기

Secure SDLC는 요구사항부터 설계, 구현, 시험, 배포, 운영까지 개발 생명주기 전체에 보안 활동을 통합한다.

대표 방법론

  • Microsoft SDL: 교육, 요구사항, 위협 모델링, 정적·동적 분석, 대응 계획 등을 생명주기에 통합한다.
  • CLASP: 역할과 활동 중심으로 보안 요구와 취약점 관리를 개발 프로세스에 넣는다.
  • Seven Touchpoints: 코드 검토, 아키텍처 위험 분석, 침투 테스트, 위험 기반 보안 테스트, 악용 사례, 보안 요구사항, 보안 운영을 강조한다.

PIMS

PIMS(Personal Information Management System)는 개인정보 보호를 위한 관리 체계의 맥락에서 사용되는 용어다. 조직의 개인정보 보호 관리와 통제를 다루며, 소프트웨어 개발 보안 생명주기 방법론의 이름과는 분류가 다르다.

회상 질문: 위협 모델링과 보안 테스트를 개발 전 과정에 배치하는 접근을 무엇이라고 부르는가?

Gantt·PERT·CPM·WBS

간트 차트(Gantt Chart)

가로축에 시간을 두고 각 작업을 수평 막대로 표시한다.

  • 막대 시작 위치: 작업 시작 시점
  • 막대 끝 위치: 작업 종료 시점
  • 막대 길이: 작업 기간
  • 진행률과 작업 중첩을 직관적으로 확인
  • 복잡한 선후 관계와 임계 경로 표현에는 한계

막대 길이는 투입 인원수가 아니다. 자원을 별도로 표시할 수는 있지만 기본적인 막대의 의미는 기간이다.

PERT와 CPM

  • PERT: 낙관·최빈·비관 시간처럼 불확실한 작업 시간을 확률적으로 추정한다.
  • CPM: 비교적 확정적인 작업 시간을 이용해 전체 기간을 결정하는 임계 경로를 찾는다.

WBS

프로젝트 전체 범위를 산출물과 작업 단위로 계층 분해한다. 일정표 자체가 아니라 무엇을 수행해야 하는지 빠짐없이 구조화하는 기준이다.

도구 핵심 질문
Gantt 언제 시작하고 얼마나 오래 하는가?
PERT 불확실한 작업 시간은 얼마나 걸릴까?
CPM 어떤 경로가 전체 완료 시간을 결정하는가?
WBS 해야 할 일을 어떻게 빠짐없이 나눌까?

회상 질문: 간트 차트에서 수평 막대의 길이가 나타내는 것은 무엇인가?

대칭키와 비대칭키 암호

대칭키 암호

암호화와 복호화에 같은 비밀키를 사용한다.

  • 연산 속도가 빠르고 대용량 데이터 암호화에 적합하다.
  • 통신 전에 같은 비밀키를 안전하게 공유해야 한다.
  • 참여자가 늘면 키 관리가 복잡해진다.
  • 대표 알고리즘: AES, DES, 3DES, SEED, ARIA, IDEA

비대칭키 암호

서로 수학적으로 연결된 공개키와 개인키를 사용한다.

  • 공개키는 공개하고 개인키는 소유자만 보관한다.
  • 키 분배, 전자서명, 인증에 유리하다.
  • 대칭키보다 일반적으로 연산이 느리다.
  • 대표 알고리즘: RSA, ECC, ElGamal

실제 결합 방식

실제 보안 통신에서는 비대칭키 방식으로 세션용 대칭키를 안전하게 합의하고, 이후 본문 데이터는 빠른 대칭키로 암호화하는 하이브리드 방식을 많이 사용한다.

비대칭키: 안전한 키 합의·인증
대칭키: 실제 대용량 데이터 암호화

대칭키는 속도가 빠르지만 비밀키 전달을 위한 안전한 키 교환 문제가 사라지는 것은 아니다.

회상 질문: 대칭키 암호가 빠른데도 공개키 기술이 필요한 대표 이유는 무엇인가?

강제 접근통제의 보안 모델

Bell-LaPadula 모델

기밀성 보호가 중심이다.

  • No Read Up: 높은 등급의 정보를 읽을 수 없다.
  • No Write Down: 낮은 등급으로 정보를 써서 유출할 수 없다.

Biba 모델

무결성 보호가 중심이다.

  • No Read Down: 낮은 무결성 정보를 읽어 오염되지 않게 한다.
  • No Write Up: 낮은 무결성 주체가 높은 무결성 객체를 수정하지 못하게 한다.

Clark-Wilson 모델

상업 환경의 데이터 무결성을 다룬다. 잘 정의된 변환 절차, 직무 분리, 감사 기록을 통해 무결성을 보장한다.

Chinese Wall 모델

이해 충돌 방지가 중심이다. 사용자가 한 기업의 기밀 정보에 접근하면 같은 이해 충돌 집단에 속한 경쟁 기업의 기밀 정보 접근을 제한한다.

모델 중심 목표 핵심 단서
Bell-LaPadula 기밀성 보안 등급, 정보 유출 방지
Biba 무결성 낮은 신뢰 정보의 오염 방지
Clark-Wilson 상업적 무결성 변환 절차, 직무 분리, 감사
Chinese Wall 이해 충돌 방지 경쟁 기업, 동적 접근 제한

회상 질문: 금융 자문사가 경쟁 관계인 두 회사의 기밀을 동시에 보지 못하게 하는 모델은 무엇인가?

Private 가변 객체의 외부 노출

접근 제한자가 private여도 public 메소드가 내부의 가변 객체 참조를 그대로 반환하면 캡슐화가 깨진다.

class Scores {
    private int[] values;

    public int[] getValues() {
        return values;  // 내부 배열 참조 노출
    }
}

호출자는 반환된 참조로 내부 배열을 직접 변경할 수 있다.

scores.getValues()[0] = -999;

방어 방법

  • 방어적 복사본 반환: return values.clone();
  • 불변 객체 사용
  • 읽기 전용 인터페이스나 컬렉션 뷰 제공
  • 필요한 조회 연산만 메소드로 제공
  • 생성자와 setter에서도 외부 가변 객체를 복사해 저장

내부 정보가 보인다보다 더 정확한 핵심은 내부 객체의 참조가 외부에 노출되어 외부 코드가 상태를 변경할 수 있다는 것이다.

회상 질문: private 배열을 안전하게 반환하는 가장 단순한 방법은 무엇인가?

암호학적 해시

해시 함수는 임의 길이 입력을 고정 길이 해시값으로 변환하는 일방향 함수다.

주요 성질

  • 역상 저항성: 해시값에서 원문을 찾기 어려워야 한다.
  • 제2역상 저항성: 주어진 입력과 같은 해시를 갖는 다른 입력을 찾기 어려워야 한다.
  • 충돌 저항성: 같은 해시를 갖는 서로 다른 두 입력을 찾기 어려워야 한다.
  • 눈사태 효과: 입력 한 비트 변화가 출력 전체에 큰 변화를 일으킨다.

활용

  • 파일과 메시지의 무결성 검증
  • 전자서명 전에 메시지 요약 생성
  • HMAC을 통한 메시지 인증
  • 비밀번호 검증용 파생 함수의 구성 요소
  • 콘텐츠 식별과 중복 탐지

해시는 공개키 암호에서 키를 생성하는 것이 주된 목적이 아니다. 또한 해시는 복호화를 전제로 하는 암호화와 다르다.

알고리즘 주의

  • MD4, MD5, SHA-1은 충돌 취약성이 알려져 보안 목적에 부적합하다.
  • 현대 시스템은 SHA-256 등 SHA-2 계열이나 SHA-3를 사용한다.
  • 비밀번호는 단순 SHA 해시가 아니라 솔트와 함께 Argon2, scrypt, bcrypt, PBKDF2 같은 느린 비밀번호 해시·KDF를 사용한다.

회상 질문: 해시값이 같은 서로 다른 두 입력을 찾기 어렵다는 성질은 무엇인가?

주요 DoS 공격

DoS는 시스템이나 네트워크 자원을 고갈시켜 정상 사용자가 서비스를 이용하지 못하게 하는 공격이다. 여러 공격원이 동시에 수행하면 DDoS라 한다.

Ping of Death

IP가 허용하는 크기를 넘는 ICMP 패킷을 조각으로 보내고 대상이 재조립할 때 오류나 장애가 발생하도록 하는 공격이다. 현대 시스템에서는 대부분 방어가 구현되어 있다.

Smurf

  1. 공격자가 ICMP Echo Request의 출발지 주소를 피해자 IP로 위조한다.
  2. 요청을 IP 브로드캐스트 주소로 보낸다.
  3. 브로드캐스트를 받은 여러 호스트가 피해자에게 응답한다.
  4. 증폭된 응답 트래픽이 피해자를 마비시킨다.

핵심은 브로드캐스트 + 출발지 위조 + ICMP 증폭이다.

SYN Flooding

TCP 3-way handshake의 SYN을 대량 전송하고 최종 ACK를 보내지 않아 서버의 반열림 연결 대기 큐를 소진시킨다. SYN Cookie, 대기시간 조정, 필터링 등으로 완화한다.

LAND 공격

출발지 IP와 목적지 IP를 피해자의 같은 주소로 조작한 패킷을 보내 시스템이 자기 자신과 통신을 반복하거나 비정상 처리하도록 유도한다.

공격 핵심 단서
Ping of Death 과대 ICMP 패킷, 조각 재조립
Smurf 브로드캐스트, 피해자 IP 위조, ICMP 증폭
SYN Flooding 반열림 TCP 연결과 대기 큐 고갈
LAND 출발지와 목적지가 같은 피해자 주소

시험 판단 Smurf는 피해자가 임의 시스템에 패킷을 보내게 하는 공격이 아니다. 다수 호스트의 응답이 피해자에게 몰리게 만드는 반사·증폭 공격이다.

회상 질문: 피해자 IP로 출발지를 위조한 ICMP 요청을 브로드캐스트 주소로 보내는 공격은 무엇인가?


최종 회상 질문

  1. Rumbaugh의 객체·동적·기능 모델은 각각 무엇을 표현하는가?
  2. 하향식 통합의 Stub과 상향식 통합의 Driver는 어떤 모듈을 대신하는가?
  3. Sequence Diagram과 State Diagram의 관찰 대상은 어떻게 다른가?
  4. 테스트와 디버깅의 목적은 어떻게 다른가?
  5. 단위·통합·시스템·인수 테스트의 범위를 순서대로 설명할 수 있는가?
  6. 즉각 갱신에서 UNDO와 REDO가 모두 필요한 이유는 무엇인가?
  7. 카디널리티와 차수는 각각 행과 열 중 무엇을 세는가?
  8. 관계대수와 관계해석 중 절차적인 것은 무엇인가?
  9. 흐름 제어, 오류 제어, 혼잡 제어는 각각 무엇을 보호하는가?
  10. /22를 점 표기 서브넷 마스크로 바꾸면 무엇인가?
  11. 세그먼트 주소 변환에서 Base와 Limit는 각각 어떤 역할을 하는가?
  12. RIP가 16홉을 어떻게 해석하는가?
  13. 간트 차트의 수평 막대 길이는 무엇을 나타내는가?
  14. 대칭키 암호의 키 배송 문제는 무엇인가?
  15. Bell-LaPadula, Biba, Chinese Wall의 보호 목표는 각각 무엇인가?
  16. private 배열 참조를 그대로 반환하면 캡슐화가 어떻게 깨지는가?
  17. 해시와 암호화의 가장 근본적인 차이는 무엇인가?
  18. Smurf, SYN Flooding, LAND 공격의 핵심 단서를 각각 말할 수 있는가?