정보처리기사 실기 개념정리 목차

이론·용어 — 개념부터 이해하고, 표로 복습한다

이론은 매회 8~12문항이고 절반 이상이 기출 재출제·변형이다 (2025-3회는 20문항 전부). 필답형이라 보기 없이 용어를 직접 써야 하는 문항이 많아 "비슷하게 아는 것"은 0점이다.

이 편은 각 개념을 처음 보는 사람 기준으로 설명한다 — 왜 그런 이름인지, 무엇이 이웃 개념과 가르는지, 기출이 어느 지점을 찔렀는지까지. 각 절은 개념 설명 → 워크드 예제 → 함정 → 표 복습 순서다. 표부터 외우면 변형 지문에 무너진다. 이해가 먼저다. (수록 8회차엔 없지만 자주 나오는 트랜잭션·암호 종류·웹 공격·SOLID 등은 06편에서 다룬다.)


1. 응집도 — 모듈 "안"이 얼마나 한 몸인가

1.1 왜 응집도를 따지나

큰 프로그램은 여러 모듈(함수·클래스·파일)로 쪼갠다. 그런데 아무렇게나 쪼개면 안 된다 — 한 모듈이 서로 관련 없는 일을 잔뜩 하고 있으면, 그 하나를 고칠 때 무슨 부작용이 날지 알 수 없고, 재사용도 안 된다. 응집도(cohesion)는 한 모듈 안의 구성 요소들이 얼마나 긴밀하게 하나의 목적으로 묶여 있는가를 재는 척도다. 높을수록 좋다.

시험은 "다음 설명에 해당하는 응집도는?" 또는 "높은 것부터 나열하라"로 나온다. 7단계를 왜 그 순서인지 이해하면 지문이 어떻게 꼬여도 풀린다.

1.2 7단계 — 높은(좋은) 쪽부터, 예시와 함께

  1. 기능적(Functional) — 모든 요소가 단 하나의 기능을 위해 존재한다.
    • 예: 제곱근(x)만 계산하는 모듈. 딴짓이 하나도 없다. 이상적.
  2. 순차적(Sequential) — 한 요소의 출력이 다음 요소의 입력으로 바로 이어진다.
    • 예: 파일을 읽어서(출력: 원문) → 그 원문을 파싱한다(입력: 원문). 데이터가 파이프처럼 흐른다.
  3. 교환적(Communicational, 통신적) — 요소들이 같은 입력 데이터나 같은 출력 데이터를 공유하지만, 서로 출력→입력으로 이어지지는 않는다.
    • 예: 같은 주문 레코드 하나를 놓고 하나는 매출 통계를 내고, 하나는 영수증을 찍는다. 둘 다 주문 레코드를 쓰지만 통계 결과가 영수증의 입력은 아니다.
  4. 절차적(Procedural) — 정해진 순서로 실행되긴 하지만 데이터는 이어지지 않는다.
    • 예: 권한을 확인한다 → 그 다음에 로그를 남긴다. 순서는 있지만 권한 확인의 출력이 로그의 입력은 아니다. (이게 순차적과의 결정적 차이다.)
  5. 시간적(Temporal) — "같은 시점에 해야 하는 일"이라서 묶였다. 기능적 연관은 없고 타이밍만 같다.
    • 예: 시스템 시작 시 변수 초기화 + 파일 열기 + 로그 준비를 몰아서 하는 init().
  6. 논리적(Logical) — "비슷한 부류의 일"이라는 이유로 묶고, 플래그(제어 인자)로 분기해 그중 하나를 고른다.
    • 예: 모든 종류의 입출력을 한 모듈에 넣고 io(type)의 type으로 파일/네트워크/콘솔을 고름.
  7. 우연적(Coincidental) — 아무 관련 없는 코드가 한 모듈에 우연히 모였다. 최악.

1.3 워크드 예제 — 지문이 어느 단계인지 판별하기

문제 유형 (2026-1 실제 출제): "① 모듈이 다수의 관련 기능을 가질 때 그 기능을 순차적으로 수행한다 / ② 동일한 입력과 출력을 사용하여 다른 기능을 수행 / ③ 모든 기능이 단일 목적."

  • ③ "단일 목적" → 고민 없이 기능적.
  • ② "동일한 입력과 출력을 공유" → 교환적. (출력이 다음 입력이 아니라 같은 데이터 공유.)
  • ① 함정이다. "순차적으로 수행"이라는 이 지문에 있지만, 데이터가 이어진다는 언급이 없다 — 그냥 순서대로 실행할 뿐. 정답은 절차적. 실제로 2026-1회에서 여기에 '순차적'이라 쓴 답안이 대량 오답 처리됐다.

함정 박스 — 2·3·4의 경계. 판별 질문 딱 하나: "앞의 출력이 뒤의 입력인가?"

  • 그렇다 → 순차적 (2024-2: "출력 자료가 다음 기능의 입력 자료로 제공")
  • 아니고 같은 데이터를 공유만 → 교환적 (2026-1: "동일한 입력과 출력을 사용")
  • 데이터 연결 없이 순서만 → 절차적 (2026-1: "순차적으로 수행"이라는 말에 낚이지 말 것)

암기 순서: 기·순·교·절·시·논·우. 2024-1은 이 서열 자체(기능 > 교환 > 시간 > 우연 나열)를 물었다.


2. 결합도 — 모듈 "사이"가 얼마나 얽혔나

2.1 왜 결합도를 따지나

응집도가 모듈 "안"이라면 결합도(coupling)는 모듈 "사이"다. 두 모듈이 서로 얼마나 의존하는가 — 한쪽을 고칠 때 다른 쪽이 안 깨져야 좋은 설계이므로 낮을수록 좋다. 좋은 설계의 목표는 항상 "높은 응집도, 낮은 결합도" 한 문장으로 요약된다.

2.2 6단계 — 낮은(좋은) 쪽부터, 예시와 함께

  1. 자료(Data) — 필요한 값(스칼라)만 매개변수로 주고받는다.
    • 예: calc(price, qty) — 숫자 두 개만. 가장 바람직하다. 상대가 바뀌어도 이 인터페이스만 지키면 됨.
  2. 스탬프(Stamp)자료구조(배열·구조체·객체)를 통째로 넘긴다.
    • 예: printReceipt(order) — order 객체 전체를 넘김. 받는 쪽이 안 쓰는 필드까지 노출되고, order 구조가 바뀌면 양쪽이 같이 깨진다. (2025-1: "배열·오브젝트가 인터페이스로 전달")
  3. 제어(Control)제어 플래그를 넘겨 상대 모듈의 내부 분기를 조종한다.
    • 예: process(data, mode=3) — 호출자가 상대의 내부 로직(mode 3이 뭘 하는지)을 알아야 한다. 상대의 캡슐화를 침범하기 시작한다. (2024-2: "논리적 흐름을 제어하는 제어 신호 전달")
  4. 외부(External) — 두 모듈이 외부 환경(특정 장치, 통신 프로토콜, 데이터 포맷)을 공유해서 묶인다. 포맷이 바뀌면 둘 다 수정.
  5. 공통(Common) — 여러 모듈이 전역변수를 함께 읽고 쓴다.
    • 예: 전역 config를 여러 모듈이 갱신. 누가 언제 바꿨는지 추적 불가, 디버깅 지옥. (2025-1: "전역변수를 참조하고 갱신하며 상호작용")
  6. 내용(Content) — 한 모듈이 다른 모듈의 내부 데이터나 코드를 직접 참조·수정하거나, 내부 한복판으로 분기(goto)해 들어간다.
    • 예: A 모듈이 B의 지역 변수를 직접 건드림. 캡슐화가 완전히 깨진 최악의 결합. (2025-1·2026-2: "다른 모듈 내부의 변수나 기능을 직접 사용")

2.3 워크드 예제

문제 유형 (2025-1 실제 출제): "① 다른 모듈 내부의 변수나 기능을 직접 사용 / ② 배열· 오브젝트·자료구조가 인터페이스로 전달 / ③ 전역변수를 참조·갱신하며 상호작용."

  • ① "내부를 직접 사용" → 침범의 극단, 내용 결합도.
  • ② "자료구조가 전달" → 통째로 넘기는 것, 스탬프 결합도.
  • ③ "전역변수 공유" → 공통 결합도.

함정 박스 — 스탬프 vs 자료의 구분은 "값 하나(스칼라)냐, 구조 통째(배열/객체)냐"다. f(x, y)는 자료, f(student)는 스탬프. 그리고 결합도 이름 4개(내용·공통·제어·스탬프)의 정의 구분만 기출에 반복됐다.

암기 순서(좋은 쪽부터): 자·스·제·외·공·내. 응집도(높을수록 좋다)와 방향이 반대(낮을수록 좋다)라는 걸 헷갈리지 말 것.


3. 디자인 패턴 — 이름이 곧 은유다

3.1 왜 패턴을 배우나, 그리고 3분류

디자인 패턴은 자주 나오는 설계 문제의 검증된 해법 템플릿이다. GoF(Gang of Four) 23개가 정석이고, 생성·구조·행위 3분류로 나뉜다:

  • 생성(Creational)객체를 어떻게 만들까. Singleton, Factory Method, Abstract Factory, Builder, Prototype.
  • 구조(Structural)클래스·객체를 어떻게 조립할까. Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.
  • 행위(Behavioral)객체들이 어떻게 협력할까. Observer, Command, Iterator, Strategy, Visitor, Memento, Mediator, State, Template Method, Chain of Responsibility, Interpreter.

2024-3 기출이 분류 자체를 물었다: "객체 간 상호작용과 책임 분배에 중점" + Command, Observer 등 나열 = 행위. "객체 생성" = 생성, "구조·조립" = 구조로 갈라라.

3.2 자주 나오는 패턴 — 은유 + 코드 감각

각 패턴은 이름의 은유를 잡으면 안 잊는다. 기출(★)과 후보를 코드 스케치와 함께 본다.

싱글톤(Singleton) ★코드 출제(2024-1) — 인스턴스를 딱 하나만 만들어 전역 공유.

class Config {
    private static Config inst;          // 유일한 인스턴스 저장
    private Config() {}                   // 생성자를 막아 외부 new 금지
    static Config get() {                 // 항상 같은 것을 돌려줌
        if (inst == null) inst = new Config();
        return inst;
    }
}

01·02편의 "count가 4" 코드 문제가 바로 이 구조. get()이 늘 같은 객체를 주므로 필드가 공유된다.

추상 팩토리(Abstract Factory) ★2024-1·2026-2 — 서로 연관된 객체들의 집합(제품군) 을 통째로 생성하는 인터페이스. 별명 Kit.

  • 은유: "다크 테마 버튼 + 다크 체크박스 + 다크 스크롤바"를 한 세트로 만들고, 라이트 테마로 바꾸면 세 개가 통째로 교체. 팩토리 메서드가 "객체 하나"라면 추상 팩토리는 "제품군".

어댑터(Adapter) ★2025-1 — 호환 안 되는 인터페이스를 변환해 연결. 별명 래퍼(Wrapper).

  • 은유: 220V 플러그를 110V 콘센트에 꽂는 "돼지코". 기존 클래스는 그대로 두고 중간에서 변환.

브리지(Bridge) ★2026-1 — 기능 계층과 구현 계층을 처음부터 분리해 독립 확장.

  • 어댑터가 "이미 있는 것의 사후 변환"이라면 브리지는 "설계 단계의 사전 분리".

프록시(Proxy) ★2025-2 — 대리 객체가 실제 객체 접근을 통제(접근 제어·지연 생성·은닉).

  • 은유: 연예인의 매니저. 진짜를 만나기 전에 매니저가 거른다.

옵서버(Observer) ★2026-1 — 한 객체의 상태가 바뀌면 의존 객체들에 자동 통지.

  • 은유: 유튜브 구독 알림. 발행-구독(pub-sub) 구조.

이터레이터(Iterator) ★2024-2 — 컬렉션의 내부 구조 노출 없이 순차 접근. 별명 Cursor.

  • 배열이든 트리든 hasNext()/next() 같은 동일한 방법으로 순회.

나머지도 은유로: 데코레이터(커피에 샷 추가 — 같은 인터페이스 유지 + 기능 덧씌우기), 퍼사드(안내데스크 — 복잡한 서브시스템의 단일 창구), 컴포지트(폴더/파일 — 부분·전체를 트리로 동일 취급), 스트래티지(알고리즘 갈아끼우기), 커맨드(요청을 객체로 만들어 undo), 메멘토(게임 세이브), 미디에이터(관제탑), 책임 연쇄(요청을 처리자 사슬에 흘림), 상태(State)(상태에 따라 행동 교체), 템플릿 메서드(골격은 부모, 세부는 자식).

함정 박스 — 구조 4형제 구분. 전부 "감싸는" 패턴이라 지문으로 갈라야 한다: 변환이면 어댑터 / 접근 제어·지연이면 프록시 / 기능 추가면 데코레이터 / 기능·구현 사전 분리면 브리지.

3.3 기출 이력 (한때 6회 연속 출제)

회차출제결정 키워드
2024-1 / 2026-2추상 팩토리연관 객체군, Kit
2024-2이터레이터내부 노출 없이 순차 접근, Cursor
2024-3행위(분류)상호작용·책임 분배
2025-1어댑터래퍼, 호환 안 되는 인터페이스 변환
2025-2프록시대리 객체, 접근 제어·생성 지연
2026-1브리지 + 옵서버기능/구현 계층 분리 · 상태 변화 자동 통지

꼬리질문 대비 — "Adapter와 Facade의 차이?"(어댑터는 인터페이스 변환/하나 대상, 퍼사드는 여러 서브시스템의 단순 창구). "Strategy와 State의 차이?"(둘 다 행동 교체지만 Strategy는 알고리즘 선택, State는 내부 상태 변화에 따라 자동 전이).


4. 테스트 — 동치 분할부터 커버리지 사다리까지

테스트 기법은 블랙박스(명세만 봄)화이트박스(코드 내부 봄) 로 갈린다. 실기는 양쪽 모두 자주 낸다.

4.1 블랙박스 — 동치 분할과 경계값

동치 분할(Equivalence Partitioning) — 프로그램은 입력을 구간 단위로 같은 코드가 처리한다. 점수 75를 C로 만드는 코드는 71도 78도 같은 if (70<=x && x<=79) 분기를 탄다. 그러니 71, 72, 73…을 다 넣는 건 낭비 — 같은 분기를 타는 값들의 묶음(동치 클래스)에서 대표 하나만 시험하면 그 구간 전체를 시험한 것과 같다. 명세(등급표)만 보므로 블랙박스다.

워크드 예제 (2026-2 실제 출제). 등급 기준: 90~100 A / 80~89 B / 70~79 C / 0~69 D. 클래스로 쪼개면:

동치 클래스종류대표값(기출 입력)예상 결과
0 ≤ x ≤ 69유효30D
70 ≤ x ≤ 79유효75C
80 ≤ x ≤ 89유효85B
90 ≤ x ≤ 100유효95A
x < 0무효−10에러
x > 100무효110에러

기출 입력값 −10, 30, 75, 85, 95, 110이 정확히 클래스 6개 × 대표 1개다. 범위 밖의 무효 클래스도 반드시 클래스로 세는 것(−10, 110)까지가 정석. 그래서 저 표가 보이면 답은 동치 분할.

경계값 분석(Boundary Value Analysis) — 실무 버그의 단골은 <<=로 잘못 쓴 경계다. 그래서 경계값 분석은 대표값 대신 구간이 갈리는 자리의 양쪽을 찍는다: 69/70, 79/80, 89/90, −1/0, 100/101.

판별법: 지문 입력이 구간 중앙의 대표값(30, 75, 85, 95)이면 → 동치 분할 / 경계 쌍(69, 70, 79, 80…)이면 → 경계값 분석.

나머지 블랙박스 기법: 원인-효과 그래프(입력 조건과 결과의 논리 관계를 그래프로 그려 케이스 도출), 결정 테이블(조건 조합별 행동을 표로 나열), 상태 전이(상태 변화를 시험), 오류 예측(경험으로 "여기서 틀리더라" 하는 값 찍기).

4.2 화이트박스 — 커버리지 사다리를 예제 하나로 관통

코드 내부를 보고 "어디까지 실행해 봤는가"를 재는 것이 커버리지다. 다음 한 줄로 전 단계를 구분한다:

if (A && B) 문장1;
else        문장2;
  • 문장(구문) 커버리지모든 문장을 1회 이상 실행. 문장1·문장2를 한 번씩 밟는 케이스 2개면 끝. 가장 약하다("실행만 해봤다").
    • 예: A=T,B=T(문장1) + A=F,B=?(문장2) → 두 문장 다 밟음.
  • 결정(분기) 커버리지 — 결정식 (A && B) 전체의 결과가 T 한 번·F 한 번. 개별 A·B가 어땠는지는 안 본다.
  • 조건 커버리지개별 조건식 A와 B 각각이 T/F를 한 번씩.
    • 함정: A=T,B=F 와 A=F,B=T 두 케이스면 A·B는 개별로 T/F를 다 밟았지만 전체 결과는 둘 다 F라서 문장1이 한 번도 실행 안 됐는데도 조건 커버리지 100%다. 그래서 2025-3 지문이 "전체 결정식의 결과까지는 보장하지 않는다"고 쓴 것이다.
  • 조건/결정 커버리지 — 위 둘을 동시에 만족.
  • 변경 조건/결정(MC/DC) ★2024-1 — 각 개별 조건이 다른 조건과 무관하게 혼자 전체 결과를 바꾸는 케이스를 갖춰야 한다.
    • 예: A&&B에서 B=T 고정 후 A를 T/F로 바꾸면 결과가 T/F로 따라 바뀜 → A의 독립 영향 증명. B도 마찬가지. 모든 조합(2ⁿ)을 다 도는 다중 조건보다 싸면서 조건별 영향은 다 본다. 항공 SW(DO-178C) 필수 등급. 결정 키워드 "독립적으로 영향".
  • 다중 조건 커버리지 — 조합 전부(TT, TF, FT, FF). 가장 강하고 가장 비싸다.

경로 쓰기형 — 이 개념을 순서도에 얹은 것이다. 2025-1 기출 함수의 제어 흐름:

다이어그램 로딩 중…
  • 구문 커버리지 경로: 모든 문장을 1회씩 — 루프에 들어가 if 참 분기(④)까지 밟고, while은 조건 재평가(②)를 거쳐야 탈출하므로 ① → ② → ③ → ④ → ⑤ → ② → ⑥.
  • 분기 커버리지 경로(2025-2): 모든 분기점의 양방향이 목표라 보통 경로 2개 조합 — 한 경로가 2→3(참)과 6→7을, 다른 경로가 2→4(거짓)와 6→1을 밟아야 100%.

4.3 통합 테스트 — 스텁·드라이버 (2026-1)

여러 모듈을 합쳐 가며 시험할 때, 아직 안 만들어진 쪽을 대신할 가짜(더미) 가 필요하다. 방향이 헷갈리니 "없는 쪽을 대신한다"로 고정:

  • 하향식(위 → 아래로 통합): 상위부터 만드니 하위가 아직 없다 → 하위를 흉내 내는 스텁(Stub). 정해진 값만 돌려주는 껍데기.
  • 상향식(아래 → 위로 통합): 하위부터 만드니 상위가 아직 없다 → 하위를 호출해 주는 드라이버(Driver).
  • 빅뱅(한꺼번에 통합), 샌드위치(혼합)도 이름은 알아둔다.

4.4 테스트케이스 문서 3요소 (2025-3)

식별자·항목 외에 케이스마다 반드시 적는 3가지: 테스트 조건(어떤 전제·상태에서) · 테스트 데이터(무슨 입력값으로) · 예상 결과(무엇이 나와야 성공인가).

  • 2025-3 기출 예시 행이 그대로 힌트였다: "초기 화면에서 시도" = 조건, "아이디/비밀번호 입력값" = 데이터, "로그인 성공" = 예상 결과.

꼬리질문 대비 — "검증(Verification)과 확인(Validation)의 차이?"(V&V: 검증 = 제대로 만들고 있나(명세대로), 확인 = 맞는 걸 만들고 있나(사용자 요구대로)). "테스트 오라클?"(예상 결과를 판정하는 기준).


5. OS 계산 — 절차를 통째로 외운다

계산 문제는 개념보다 손으로 표를 그리는 절차가 전부다. 두 유형(페이지 교체·스케줄링)의 전 알고리즘을 풀 트레이스로 익힌다.

5.1 페이지 교체 — 프레임 표 그리기

메모리 프레임이 가득 찬 상태에서 새 페이지가 오면 누구를 내쫓을지가 알고리즘이다:

  • FIFO — 가장 먼저 들어온 것을 쫓음. (적중해도 순서 안 바꿈.)
  • LRU — 가장 오래 참조 안 된 것. (적중하면 그 페이지를 '최신'으로 갱신.)
  • LFU참조 횟수가 가장 적은 것. (동률이면 보통 오래된 것.)
  • OPT — 앞으로 가장 늦게 쓰일 것. 미래를 아는 이상적 기준선(실제로는 불가능).

워크드 예제 (2024-1: 프레임 3, 참조열 1,2,3,1,2,4,1,2,5,7) — LRU 전 과정:

참조1231241257
프레임(LRU순)[1][1,2][1,2,3][2,3,1][3,1,2][1,2,4][2,4,1][4,1,2][1,2,5][2,5,7]
부재FFF적중적중F(3퇴출)적중적중F(4퇴출)F(1퇴출)
  • 프레임 칸의 순서는 왼쪽이 LRU(가장 오래됨), 오른쪽이 MRU(최신). 적중하면 그 페이지가 맨 오른쪽으로 이동한다.
  • 마지막 7이 올 때 프레임 {1,2,5} 중 최근성이 가장 낮은 건 1(7번째 참조가 마지막 사용)이라 1이 퇴출 → {2,5,7}. → 부재 6회.

같은 열의 다른 알고리즘 (코드 재계산 확인):

알고리즘부재이유
FIFO8회순서 갱신을 안 해 1·2도 밀려나며 더 자주 부재
LRU6회1·2가 재참조로 살아남아 3·4·5만 교체
LFU6회1·2는 빈도 3으로 잔류, 빈도 1짜리끼리 교체 (최종 {1,2,7})
OPT6회미래를 봐서 어차피 안 쓸 3·4를 먼저 버림

2024-3 기출(교과서 고전 참조열 20개, 프레임 3)은 LRU 12회 — 같은 열에서 FIFO 15회, OPT 9회. 세 값을 세트로 알아 두면 보기 함정이 다 읽힌다.

함정 박스 — LRU 채점 실수. 적중(hit)일 때도 그 페이지의 '최근 사용' 순위를 갱신해야 한다. 이걸 빼먹으면 순서가 어긋나 부재 수가 틀린다. 또 벨레이디의 역설(Belady's Anomaly) — FIFO는 프레임을 늘렸는데 오히려 부재가 늘어나는 이상 현상이 있다(LRU·OPT엔 없음). 이 이름도 종종 물어본다.

5.2 CPU 스케줄링 — 타임라인(간트 차트) 그리기

먼저 용어:

  • FCFS — 도착 순서대로. 비선점. 긴 작업이 앞이면 뒤가 오래 기다림(호위 효과).
  • SJF — burst(실행) 시간이 짧은 것 우선. 비선점 기본. 평균 대기가 최소지만 긴 작업 기아.
  • SRT — SJF의 선점형. 잔여 시간이 더 짧은 프로세스가 도착하면 CPU를 빼앗음.
  • RR — 타임 퀀텀씩 공평하게 순환. 응답성 좋음. 퀀텀이 작으면 문맥 교환 오버헤드.
  • HRN(대기+실행)/실행 우선순위 비율이 높은 것 우선. SJF의 기아를 완화(오래 기다린 작업의 우선순위가 올라감).

계산 3단 절차: ① 시간축에 실행 구간(간트)을 그린다 → ② 프로세스별 완료 시각을 얻는다 → ③ 대기 = 완료 − 도착 − 실행으로 계산해 평균 낸다.

⚠️ 반환시간 = 완료 − 도착 (대기 + 실행). 문제가 대기시간이냐 반환시간이냐를 반드시 확인 — 2025-2회에서 혼동이 다발했다.

워크드 예제 (도착 0/1/2/3ms, 실행 8/4/9/5ms — 2024-2와 2026-2에 숫자까지 그대로 재출제):

SRT — 잔여가 짧은 게 오면 선점:

시간: 0    1        5        10          17            26
      | P1 |   P2   |   P4   |    P1     |     P3      |
       선점↑ (P2 잔여4 < P1 잔여7)
  • t=0: P1만 있음 → P1 실행. t=1: P2(잔여 4) 도착, P1(잔여 7)보다 짧아 선점.
  • P2(1~5 완료). t=5: 남은 건 P1(7)·P3(9)·P4(5) → 최소 P4(5~10 완료).
  • t=10: P1(7)·P3(9) → P1(10~17 완료). t=17: P3(17~26 완료).
  • 완료: P1=17, P2=5, P3=26, P4=10.
  • 대기 = 완료−도착−실행: P1=17−0−8=9, P2=5−1−4=0, P3=26−2−9=15, P4=10−3−5=2.
  • 평균 = (9+0+15+2)/4 = 26/4 = 6.5ms.

RR (타임 퀀텀 4ms) — 같은 표:

시간: 0    4    8    12   16   20   24  25 26
      | P1 | P2 | P3 | P4 | P1 | P3 | P4|P3|
              완료      완료    완료  완료 완료
  • 큐 순환: P1(0~4) → P2(4~8 완료) → P3(8~12) → P4(12~16) → P1(16~20 완료) → P3(20~24) → P4(24~25 완료) → P3(25~26 완료).
  • 완료: P1=20, P2=8, P3=26, P4=25.
  • 대기 = 완료−도착−실행: P1=12, P2=3, P3=15, P4=17. 평균 = 47/4 = 11.75ms.

같은 표가 알고리즘만 바꿔 나오므로 두 간트 차트 모두 손으로 재현할 수 있어야 한다.

꼬리질문 대비 — "기아(starvation)와 에이징(aging)?"(SJF·우선순위에서 낮은 우선순위가 영영 실행 못 하는 게 기아, 대기 시간이 길수록 우선순위를 올려 주는 게 에이징). "선점 vs 비선점?"(실행 중인 프로세스를 강제로 뺏느냐).


6. 네트워크 계산 — 서브넷은 매년 나온다

6.1 원리: 프리픽스가 "블록 크기"를 정한다

IP는 32비트, /n앞 n비트가 네트워크 부분이라는 뜻이다. 남은 (32−n) 호스트 비트가 한 네트워크의 크기를 정한다. 예로 /26을 2진수로 뜯어 보면:

마스크 /26 = 11111111.11111111.11111111.11 000000
                                          ↑네트워크  ↑호스트 6비트 → 블록 크기 2^6 = 64

계산은 언제나 3단이다:

  1. 블록 크기 = 2^(옥텟 내 호스트 비트).
    • /26(마스크 .192) → 4번째 옥텟이 64 단위 블록: 0, 64, 128, 192.
    • /22(마스크 .252.0) → 3번째 옥텟이 4 단위: 0, 4, 8, 12….
    • /23(마스크 .254.0) → 3번째 옥텟이 2 단위: 0, 2, 4, 6….
  2. 네트워크 주소 = 내 주소를 블록 시작으로 내림.
  3. 사용 가능 호스트 수 = 블록 크기 − 2 (네트워크 주소와 브로드캐스트 주소 제외).

6.2 기출 4제 — 전부 코드로 검산 확인

  • /26 (2025-2): 223.13.234.132 → 132는 128~191 블록 → 네트워크 223.13.234.128, 호스트 64−2 = 62개.
  • /22 대역 판정 (2024-1·2025-1·2026-2): 129.200.10.72/22 → 3옥텟 10은 8~11 블록 → 대역 129.200.8.0 ~ 129.200.11.255. 그래서 129.200.8.249는 같은 네트워크, 129.200.12.249는 다음 블록(제외). 2025-1은 192.168.35.10/22 → 32~35가 한 블록이라 "보기 다섯 개 전부 같은 네트워크"라는 이례적 답이 났다.
  • /23 CIDR 표기 (2026-1): 192.168.11.20/23 → 11은 10~11 블록 → 192.168.10.0/23 (블록이 짝수에서 시작하는 게 포인트). 192.168.12.200은 12~13 블록 → 192.168.12.0/23. 채점은 /23까지 써야 인정.
  • 균등 분할 (2026-2): /27(32개 주소)을 2등분 → 각 16개 = /28. 등분할 때마다 프리픽스 +1비트.

함정 박스.0은 네트워크 주소, 마지막(.63, .255 등)은 브로드캐스트라 호스트로 못 쓴다. "할당 가능한 IP"를 고르는 문제에서 이 둘을 넣으면 오답. 그리고 /22가 3옥텟을 4씩 묶는다는 것(8.0~11.255)을 옥텟 단위(35만)로 착각하는 게 최다 실수.

6.3 프로토콜·기술 용어 (각 2~3줄)

  • 라우팅 3형제RIP = 거리 벡터(이웃에게 들은 홉 수로 판단, 최대 15홉이라 소규모), OSPF ★3회 = 링크 상태(전체 지도를 그려 다익스트라로 최단 경로, Area 계층으로 대규모 지원, 내부용 IGP), BGP = AS와 AS 사이를 잇는 외부(EGP) 라우팅. 2024-2는 그림에서 거리 합 최소 경로(A→D→C→F)를 직접 계산시켰다.
  • ARP / RARP (2025-1) — IP로 MAC을 알아내면 ARP, 그 (MAC으로 IP)이 RARP.
  • VPN (2024-3) — 공중망 위에 암호화 터널을 뚫어 전용선처럼 쓰는 가상 사설망.
  • IPSec (2024-2) — 네트워크(IP) 계층에서 패킷 단위 보안. 인증·무결성의 AH + 기밀성까지의 ESP, 전송/터널 모드. "AH·ESP"가 결정 키워드.
  • 가상 회선 vs 데이터그램 (2024-2) — 둘 다 패킷 교환의 하위 방식. 연결형으로 경로를 미리 논리적으로 고정하면 가상 회선, 비연결형으로 패킷마다 독립 배송이면 데이터그램.
  • HDLC (2026-1) — 데이터링크 계층. 프레임 3종: 정보(I) = 실데이터, 감독(S) = 흐름· 오류 제어, 비번호(U) = 순서 번호 없이 링크 설정·해제. 모드 3종: NRM(주국 허가가 있어야 종국 송신), ARM(종국이 허가 없이 송신), ABM(두 국이 혼합국으로 대등). 기출 빈칸이 I/S/U + ABM/ARM이었다.
  • 애드혹 네트워크 (2024-3) — 기지국·AP 같은 인프라 없이 노드끼리 즉석(ad hoc)에서 자율 구성하는 무선망. 군사 작전·재난 현장. (메시는 그물형 '토폴로지', P2P는 '응용 구조' 개념이라 오답 보기.)
  • SSH (2025-2) — 원격 접속 암호화, 포트 22, 평문 Telnet(23)의 대체.
  • AJAX (2025-2) — JavaScript + XML/JSON으로 페이지 전체 리로드 없이 일부만 비동기 갱신.
  • 오류 제어 계보 (2025-1·2025-3) — 수신 측이 오류를 스스로 고치면 FEC(전진 오류 수정 — 대표가 해밍 코드: 검사 비트를 끼워 검출+수정), 재전송을 요구하면 BEC(후진, ARQ). BEC가 쓰는 검출 기법이 패리티(1비트 홀짝 — 짝수 개 오류는 못 잡음)와 CRC(생성 다항식 모듈로-2 나눗셈의 나머지를 붙임 — "다항식·나머지"가 결정 키워드).
  • URL 구조 (2024-3) — scheme://authority/path?query#fragment = 프로토콜 / 호스트·포트 / 자원 경로 / 질의 / 문서 내 위치. ? 뒤가 query, # 뒤가 fragment.

7. 보안 — 공격 사전과 인증·인가

7.1 공격 — 기출별 메커니즘 + 대응 + 구분

각 공격을 "무엇을 노리나 + 어떻게 막나 + 헷갈리는 이웃"으로 이해한다.

  • 루트킷(Rootkit) (2024-1) — 침입 관리자 권한을 유지하며 자신을 은폐(시스템 콜 후킹, 로그 삭제, 커널·펌웨어 잠복). 트로이 목마는 '침투' 수단, 루트킷은 '은폐' 도구 모음.
  • APT (2024-1) — 특정 조직을 표적으로 장기간 은밀히 침투→탐색→수집→유출. 제로데이· 사회공학은 APT가 쓰는 개별 수단일 뿐, 유형 이름은 APT.
  • 스머핑(Smurf) (2024-3) — 출발지를 피해자로 위장한 ICMP를 브로드캐스트로 뿌려 다수 호스트의 응답이 피해자에게 몰리게 하는 반사·증폭 DoS. 대응: 브로드캐스트 ICMP 차단.
  • 세션 하이재킹 (2025-1) — 이미 인증된 세션을 TCP 시퀀스 조작·RST로 탈취.
  • 스캐어웨어(Scareware) (2025-1) — "감염됐다!" 가짜 경고로 공포를 조성해 가짜 백신 결제를 유도. scare = 겁주다.
  • 심볼릭 링크 공격 (2026-1) — 프로그램의 임시 파일 생성 시점에 링크가 가리키는 원본을 바꿔치기하는 레이스 컨디션(TOCTOU). 심볼릭 링크가 '경로만 가리키는' 특성을 악용.
  • 워터링 홀 (2026-1) — 표적이 자주 가는 합법 사이트를 미리 감염시켜 놓고 방문을 기다림.
  • SYN 플러딩 (2025-2) — 3-way handshake에서 SYN만 보내고 마지막 ACK를 안 보내 서버의 연결 대기 큐(backlog)를 고갈시키는 DoS. 대응: SYN 쿠키, 백로그 확대.

함정 박스 — 이웃 공격 구분. 파밍(DNS 조작으로 가짜 사이트 유도) vs 워터링 홀(합법 사이트 선제 감염) vs 피싱(가짜 사이트로 유인)은 전부 "사이트"가 얽혀 헷갈린다. (더 많은 공격 — XSS·CSRF·SQL인젝션·스푸핑·악성코드 분류는 06편 §3에 있다.)

7.2 인증·인가·암호

  • OTP (2025-3) — 일회용 비밀번호. 시간 동기화(TOTP)나 카운터(HOTP)로 매번 새 값, 재전송 공격 방지. 은행 보안카드·OTP 토큰.
  • OAuth (2025-3) — 비밀번호를 제3자에 주지 않고 Access Token으로 권한을 위임. 인증이 아니라 인가에 초점(소셜 로그인 연동). SSO·SAML·Kerberos는 인증 계열이라 대조 보기.
  • 접근통제 3모델 (2025-3) — 보안 등급(Label)으로 강제 = MAC(Mandatory), 자원 소유자가 임의 부여 = DAC(Discretionary), 역할 기반 = RBAC. Mandatory/Discretionary 원어로 기억.
  • ISMS (2026-1) — '정보보호 관리체계' 인증 제도. 철자 그대로 써야 득점(ISMS-P도 알아둠).
  • AES (2024-2) — DES 대체 NIST 공모 채택(원명 Rijndael). 블록 128비트 고정 + 키 128/192/256.
  • 해시 함수 (2026-2) — 임의 길이 → 고정 길이, 일방향(복원 불가), 무결성·HMAC·비밀번호 저장. (대칭/비대칭 종류·전자서명·PKI는 06편 §2에서 확장.)

꼬리질문 대비 — "인증(Authentication)과 인가(Authorization)의 차이?"(누구인가 vs 무엇을 할 수 있나 — OAuth가 노리는 게 인가). "MAC이 DAC보다 강력한 이유?"(개인이 아니라 시스템이 강제하므로 소유자 실수로 권한이 새지 않음).


8. 설계·요구사항·기타

  • UML 관계 (2024-3) — 소유·참조(실선) = 연관(Association), 상속(속 빈 삼각형 화살표) = 일반화(Generalization), 일시적 사용(점선) = 의존(Dependency). 지속성이 연관/의존을 가른다(필드로 계속 들고 있으면 연관, 잠깐 매개변수로만 쓰면 의존). 집합 관계는 집약(Aggregation, 빈 마름모)·합성(Composition, 채운 마름모)으로 갈리고 — 합성은 전체가 사라지면 부분도 사라지는 강한 소유다. (다이어그램 종류·럼바우 3모델은 06편 §6.)
  • 패키지 다이어그램 (2025-3) — 폴더 기호로 요소를 그룹화하고 «import»/«access» 의존을 표현. 구조(정적) 다이어그램.
  • 비기능 요구사항 유형 (2026-1 첫 출제) — OS 환경에서 운영 = 운영, 메모리 등 자원 제약 = 자원, 응답 시간 = 성능 요구사항. (기능 요구 = 무엇을 하나 / 비기능 = 얼마나 잘 하나.)
  • DB 설계 절차 (2026-1) — 요구사항 분석 → 개념적(E-R 다이어그램) → 논리적(릴레이션 스키마) → 물리적(저장 구조·인덱스) → 구현. 추상에서 구체로 내려간다.
  • UNIX 명령어 (2025-3) — pwd(현 경로 출력) / ls(목록) / cd(이동) / cp(복사) / mv(이동·이름변경) / rm(삭제) / cat(내용 출력) / chmod(권한, 8진수 rwx=421) / grep(검색) / chown(소유자 변경).
  • 반정규화(De-normalization) (2024-2) — 성능·편의를 위해 의도적으로 정규화를 위배 (테이블 통합·중복·분리). 조인 비용은 줄지만 갱신 이상이 되살아나므로 트레이드오프.

9. 시험장 체크리스트

  1. 용어는 정확한 명칭·철자로 — 순차/절차, 교환/통신(동의어), MAC/DAC 방향, ISMS 스펠링까지. 필답형은 오타도 오답이다.
  2. 계산은 절차를 손으로: 페이지 교체(프레임 표, LRU는 적중 시 갱신), 스케줄링(간트 → 완료−도착−실행), 서브넷(블록 크기 → 내림 → −2).
  3. 지문의 결정 키워드에 밑줄 — "독립적으로 영향"(MC/DC), "Kit"(추상 팩토리), "다익스트라" (OSPF), "AH·ESP"(IPSec), "장기간·표적"(APT), "앞 출력이 뒤 입력"(순차적 응집), "은폐"(루트킷).
  4. 재출제가 절반이다 — 이 트랙 8회차 이론을 다 풀면 다음 회차 이론의 절반을 미리 만난 셈이고, 나머지 사각(트랜잭션·암호 종류·웹 공격·SOLID·OSI 등)은 06편으로 메운다.

출처

  • 2024-1 ~ 2026-2 실기 복원 기출 (수록 8회차) — 기사퍼스트·두목넷·수제비(공개 미러)·뉴비티·chobopark 교차 검증
  • 출제확률·재출제 이력: 정처기 감자(edugamja) 이론 분석, 나무위키 정보처리기사/출제경향
  • 페이지 교체·스케줄링·서브넷 수치: 본 편 작성 시 전량 코드 재계산 검증 (FIFO/LRU/LFU/OPT 트레이스, SRT/RR 간트, 서브넷 2진 분해 — 노트 값과 실측 일치 확인)
SQL·관계대수빈출 보강 (재출제 대비)