[2022년 1회] 정보처리기사 실기 복원 문제 해설
문제 1. RAID 단계
문제:
- Striping(스트라이핑) 구현 방식
- I/O 로드의 분산으로 매우 빠른 속도
- 데이터를 블럭으로 분할 저장하며, 각 블럭은 다른 디스크로 나뉘어 저장
답: 0 (RAID 0)
해설:
- RAID 0 (스트라이핑): 데이터를 여러 디스크에 분산 저장하는 방식
- 장점:
- 여러 디스크에 동시에 읽기/쓰기가 가능하여 속도가 매우 빠름
- I/O 로드가 분산되어 성능 향상
- 단점:
- 패리티나 미러링이 없어 하나의 디스크라도 고장나면 모든 데이터 손실
- 데이터 복구 불가능
- 사용 용도: 성능이 중요한 환경, 임시 데이터 저장
문제 2. 데이터베이스 트랜잭션 처리
문제:
- 오류가 발생하기 전까지의 사항을 로그(log)로 기록해 놓고, 이전 상태로 되돌아간 후, 실패가 발생하기 전까지의 과정을 그대로 따라가는 현상
- 작업을 취소하여 트랜잭션을 이전 상태로 되돌리는 것
답:
- redo (재실행)
- undo (취소)
해설:
Redo (재실행):
- 트랜잭션이 커밋된 후 시스템 장애가 발생했을 때
- 로그 파일에 기록된 내용을 다시 실행하여 데이터베이스를 장애 전 상태로 복구
- "앞으로 가기" 개념
Undo (취소):
- 트랜잭션이 롤백되거나 커밋 전 장애 발생 시
- 로그 파일을 역순으로 읽어 변경 사항을 취소하고 이전 상태로 복구
- "뒤로 가기" 개념
ACID 속성과의 관계:
- 원자성(Atomicity): Undo로 보장
- 지속성(Durability): Redo로 보장
문제 3. Java 메서드 호출 및 참조 전달
문제:
class A {
int a;
int b;
}
public class Main {
static void func1(A m){
m.a *= 10;
}
static void func2(A m){
m.a += m.b;
}
public static void main(String args[]){
A m = new A();
m.a = 100;
func1(m);
m.b = m.a;
func2(m);
System.out.printf("%d", m.a);
}
}
답: 2000
해설:
m.a = 100→ m.a = 100func1(m)호출 → m.a = 10 → m.a = 100 * 10 = *1000**- Java에서 객체는 참조로 전달되므로 func1에서 변경한 값이 원본에 반영됨
m.b = m.a→ m.b = 1000func2(m)호출 → m.a += m.b → m.a = 1000 + 1000 = 2000
핵심 개념:
- Java에서 객체는 참조(Reference)로 전달됨
- 메서드 내에서 객체의 필드를 변경하면 원본 객체도 변경됨
- 기본 타입(int, char 등)은 값으로 전달되지만, 객체는 항상 참조로 전달
문제 4. SQL ORDER BY 절
문제:
SELECT name, score FROM 성적 ( 1 ) BY ( 2 ) ( 3 )
답:
- ORDER
- score
- DESC
해설:
- ORDER BY: 결과 집합을 정렬하는 SQL 절
- 구문:
ORDER BY 컬럼명 [ASC|DESC] - ASC: 오름차순 (기본값, 생략 가능)
- DESC: 내림차순
- 예시:
SELECT name, score FROM 성적 ORDER BY score DESC- 성적 테이블에서 이름과 점수를 선택하고, 점수 기준으로 내림차순 정렬
다중 정렬:
ORDER BY score DESC, name ASC -- 점수 내림차순, 이름 오름차순
문제 5. 삭제 이상 (Deletion Anomaly)
답: 데이터를 삭제할 경우 원하지 않는 다른 데이터도 삭제되어버리는 이상
해설:
- 삭제 이상: 하나의 레코드를 삭제할 때 의도하지 않은 다른 데이터까지 함께 삭제되는 현상
- 예시:
학생 테이블 학번 | 이름 | 과목코드 | 과목명 | 점수 1001 | 홍길동 | CS101 | 프로그래밍 | 90 1001 | 홍길동 | CS102 | 자료구조 | 85 1002 | 김철수 | CS101 | 프로그래밍 | 95- 홍길동의 CS102 레코드만 삭제하려고 하면, 홍길동의 정보도 함께 삭제될 수 있음
- 또는 CS101 과목을 수강하는 학생이 한 명뿐이라면, 그 학생의 정보를 삭제하면 과목 정보도 함께 삭제됨
해결 방법:
- 정규화를 통해 테이블을 분리
- 외래키 제약조건 설정
- CASCADE 옵션 신중하게 사용
문제 6. Python 기본 매개변수 (Default Parameter)
문제:
def exam(num1, num2=2):
print('a=', num1, 'b=', num2)
exam(20)
답: a= 20 b= 2
해설:
- 기본 매개변수(Default Parameter): 함수 정의 시 매개변수에 기본값을 지정할 수 있음
num2=2에서num2는 기본값이 2로 설정됨exam(20)호출 시:num1 = 20(인자로 전달됨)num2 = 2(기본값 사용, 인자 없음)
주의사항:
- 기본 매개변수는 반드시 일반 매개변수 뒤에 위치해야 함
- ❌
def exam(num1=1, num2):(오류) - ✅
def exam(num1, num2=2):(정상)
문제 7. Python 리스트 메서드
문제:
- 요소를 확장해준다는 의미를 가지고 있으며, 모든 항목을 하나의 요소로 추가
- 리스트 내부 요소를 꺼내주는 함수로써, 그 요소는 리스트 안에서 삭제하고 그 값을 반환
- 리스트 내부의 요소의 순서를 뒤집는 역할
답:
- extend
- pop
- reverse
해설:
extend(확장):
list1 = [1, 2, 3] list2 = [4, 5] list1.extend(list2) # [1, 2, 3, 4, 5]- 다른 리스트의 모든 요소를 현재 리스트에 추가
append와의 차이: append는 리스트 자체를 하나의 요소로 추가
pop(꺼내기):
list1 = [1, 2, 3] value = list1.pop() # value = 3, list1 = [1, 2] value = list1.pop(0) # value = 1, list1 = [2]- 리스트에서 요소를 제거하고 그 값을 반환
- 인덱스 지정 가능 (기본값: 마지막 요소)
reverse(뒤집기):
list1 = [1, 2, 3] list1.reverse() # [3, 2, 1]- 리스트의 요소 순서를 역순으로 변경
- 원본 리스트를 변경함 (새 리스트 반환 아님)
문제 8. TKIP (Temporal Key Integrity Protocol)
답: TKIP (Temporal Key Integrity Protocol)
해설:
- TKIP: WEP의 취약점을 보완하기 위해 개발된 암호화 프로토콜
- 특징:
- WEP와 호환성 유지
- 패킷마다 동적으로 키 변경
- 메시지 무결성 검사(MIC) 추가
- 재전송 공격 방지
- 사용: Wi-Fi Protected Access (WPA)에서 사용
- 현재: WPA2/WPA3에서 AES-CCMP로 대체됨
WEP → WPA → WPA2 → WPA3 진화 과정:
- WEP: 취약한 정적 키
- WPA: TKIP 사용
- WPA2: AES-CCMP 사용
- WPA3: 최신 보안 강화
문제 9. NUI (Natural User Interface)
답: NUI (Natural User Interface)
해설:
- NUI (자연 사용자 인터페이스): 키보드나 마우스 없이 인간의 자연스러운 동작으로 컴퓨터를 제어하는 인터페이스
- 특징:
- 직관적이고 자연스러운 상호작용
- 학습 곡선이 낮음
- 터치, 음성, 제스처 인식 등 활용
- 예시:
- 터치스크린 (스마트폰, 태블릿)
- 음성 인식 (Siri, Alexa)
- 제스처 인식 (Kinect)
- 눈동자 추적
- 뇌파 인식
GUI vs NUI:
- GUI: 그래픽 사용자 인터페이스 (마우스, 키보드 필요)
- NUI: 자연 사용자 인터페이스 (자연스러운 동작)
문제 10. 정적 분석 vs 동적 분석
문제:
- 소스 코드의 실행 없이, 코드의 의미를 분석해 결함을 찾아내는 원시적 코드 분석 기법
- 소스 코드를 실행하여 프로그램 동작이나 반응을 추적하고 코드에 존재하는 메모리 누수, 스레드 결함 등을 분석
답:
- static (정적 분석)
- dynamic (동적 분석)
해설:
정적 분석 (Static Analysis):
- 코드를 실행하지 않고 분석
- 소스 코드의 구조, 문법, 의미 분석
- 장점: 실행 전 오류 발견 가능, 빠른 분석
- 단점: 실행 시점의 오류는 발견 불가
- 도구: SonarQube, PMD, Checkstyle, ESLint
동적 분석 (Dynamic Analysis):
- 코드를 실행하면서 분석
- 런타임 동작, 메모리 사용, 성능 분석
- 장점: 실제 실행 환경에서의 문제 발견
- 단점: 실행 시간 필요, 모든 경로 테스트 어려움
- 도구: Valgrind, Purify, JProfiler
비유:
- 정적 분석: 자동차를 보면서 설계 문제 찾기
- 동적 분석: 자동차를 운전하면서 문제 찾기
문제 11. Java Thread 생성
문제:
class Car implements Runnable{
int a;
public void run(){
system.out.println("message")
}
}
public class Main{
public static void main(String args[]){
Thread t1 = new Thread(new ___());
t1.start();
}
}
답: Car
해설:
- Runnable 인터페이스: 스레드로 실행 가능한 작업을 정의
Car클래스가Runnable인터페이스를 구현했으므로, Thread 생성자에Car객체를 전달해야 함- Thread 생성 방법:
- Runnable 구현:
new Thread(new Car()) - Thread 상속:
class Car extends Thread
- Runnable 구현:
실행 흐름:
new Car(): Car 객체 생성new Thread(new Car()): Runnable을 받는 Thread 생성t1.start(): 스레드 시작 →run()메서드 실행
주의사항:
start(): 새 스레드에서 run() 실행run(): 현재 스레드에서 run() 실행 (스레드 생성 안 됨)
문제 12. JUnit
답: JUnit
해설:
- JUnit: Java용 단위 테스트 프레임워크
- 특징:
- xUnit 테스트 프레임워크의 Java 버전
- 숨겨진 단위 테스트를 정형화
- 테스트 자동화 및 반복 실행 가능
- TDD(Test-Driven Development) 지원
- 주요 어노테이션:
@Test: 테스트 메서드@Before: 각 테스트 전 실행@After: 각 테스트 후 실행@BeforeClass: 클래스 로드 시 한 번 실행@AfterClass: 모든 테스트 후 한 번 실행
예시:
@Test
public void testAdd() {
assertEquals(5, calculator.add(2, 3));
}
문제 13. 블랙박스 테스트 기법
답: ㄷ, ㄹ, ㅂ (보기에서 선택, 일반적으로 포함되는 기법들)
해설:
- 블랙박스 테스트: 내부 구조를 모르고 입력과 출력만으로 테스트
- 주요 기법:
- 동등 분할 (Equivalence Partitioning): 입력을 유사한 그룹으로 나누어 테스트
- 경계값 분석 (Boundary Value Analysis): 경계값에서 테스트
- 결정 테이블 (Decision Table): 조건과 행동을 표로 정리
- 상태 전이 테스트: 상태 변화 테스트
- 원인-결과 그래프: 입력과 출력의 관계 분석
- 오류 추정 (Error Guessing): 경험 기반 오류 추정
화이트박스 테스트와의 차이:
- 화이트박스: 내부 구조를 알고 코드 기반 테스트
- 블랙박스: 내부 구조 모르고 기능 기반 테스트
문제 14. C 재귀 함수 (팩토리얼)
문제:
#include <stdio.h>
int func(int a) {
if (a <= 1) return 1;
return a * func(a - 1);
}
int main() {
int a;
scanf("%d", &a);
printf("%d", func(a));
}
입력: 5
답: 120
해설:
- 재귀 함수: 함수가 자기 자신을 호출하는 함수
- 팩토리얼 계산: n! = n × (n-1) × (n-2) × ... × 1
- 실행 과정:
func(5) = 5 * func(4) = 5 * 4 * func(3) = 5 * 4 * 3 * func(2) = 5 * 4 * 3 * 2 * func(1) = 5 * 4 * 3 * 2 * 1 = 120
재귀 함수의 구성 요소:
- 기저 조건 (Base Case):
if (a <= 1) return 1; - 재귀 호출:
return a * func(a - 1);
문제 15. C 정수 역순 출력
문제:
#include <stdio.h>
int main() {
int number = 1234;
int div = 10;
int result = 0;
while (number ( 1 ) 0) {
result = result * div;
result = result + number ( 2 ) div;
number = number ( 3 ) div;
}
printf("%d", result); // 결과: 4321
return 0;
}
답:
- > (크다)
- % (나머지)
- / (나누기)
해설:
- 목표: 1234 → 4321로 변환
- 알고리즘:
- 일의 자리 추출:
number % 10→ 4 - result에 추가:
result * 10 + 4→ 4 - number에서 일의 자리 제거:
number / 10→ 123 - 반복
- 일의 자리 추출:
실행 과정:
초기: number=1234, result=0
1회: number=1234 > 0
result = 0*10 + (1234%10) = 0 + 4 = 4
number = 1234/10 = 123
2회: number=123 > 0
result = 4*10 + (123%10) = 40 + 3 = 43
number = 123/10 = 12
3회: number=12 > 0
result = 43*10 + (12%10) = 430 + 2 = 432
number = 12/10 = 1
4회: number=1 > 0
result = 432*10 + (1%10) = 4320 + 1 = 4321
number = 1/10 = 0
5회: number=0 > 0 (거짓) → 종료문제 16. ISMS
답: ISMS (Information Security Management System)
해설:
- ISMS: 정보보호 관리체계
- 정의: 조직의 정보자산을 보호하기 위한 관리체계
- 목적: 정보보안 위험을 관리하고 지속적으로 개선
- 인증: 한국인터넷진흥원(KISA)에서 인증
- 주요 구성 요소:
- 정보보안 정책
- 조직 및 책임
- 자산 관리
- 접근 통제
- 암호화
- 물리적 보안
- 운영 보안
- 사고 대응
관련 표준:
- ISO/IEC 27001: 국제 정보보안 관리 표준
- ISMS-P: ISMS 인증 기준
문제 17. 데이터베이스 키의 속성
문제:
- 슈퍼키는 ( 1 ) 의 속성을 갖는다.
- 후보키는 ( 1 ) 와/과 ( 2 ) 의 속성을 갖는다.
답:
- 유일성
- 최소성
해설:
슈퍼키 (Super Key):
- 유일성: 릴레이션 내에서 튜플을 유일하게 식별할 수 있는 속성 집합
- 최소성 불필요: 최소한의 속성만 포함할 필요 없음
- 예시: {학번, 이름}, {학번, 이름, 주소} 모두 슈퍼키
후보키 (Candidate Key):
- 유일성: 튜플을 유일하게 식별
- 최소성: 최소한의 속성만 포함 (불필요한 속성 제거)
- 예시: {학번}은 후보키, {학번, 이름}은 슈퍼키이지만 후보키 아님
키의 계층 구조:
슈퍼키 (유일성)
↓
후보키 (유일성 + 최소성)
↓
기본키 (후보키 중 선택)
↓
대체키 (기본키가 아닌 후보키)문제 18. Watering Hole 공격
답: watering hole (워터링홀 공격)
해설:
- 워터링홀 공격 (Watering Hole Attack):
- 공격 대상이 자주 방문하는 합법적인 웹사이트를 미리 감염시킴
- 대상이 방문하면 자동으로 악성코드 설치
- APT(Advanced Persistent Threat) 공격에서 주로 사용
공격 과정:
- 공격 대상의 관심사/자주 방문하는 사이트 파악
- 해당 사이트에 악성코드 삽입
- 대상이 사이트 방문 시 자동 감염
- 백도어 설치 및 정보 탈취
특징:
- 합법적인 사이트를 이용하므로 탐지 어려움
- 특정 그룹/조직을 타겟으로 함
- 장기간 잠복 가능
방어 방법:
- 웹사이트 보안 강화
- 사용자 교육
- 보안 솔루션 업데이트
- 이상 트래픽 모니터링
문제 19. C 소수와 최대 약수
문제:
#include <stdio.h>
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;
}
답: 29
해설:
- 목표: 13195의 소수인 약수 중 최대값 찾기
- isPrime 함수: 소수 판별 (2부터 number-1까지 나누어떨어지는지 확인)
- main 함수:
- 2부터 13195까지 반복
- 소수이면서 13195의 약수인 경우 max_div 업데이트
실행 과정:
13195의 약수: 1, 5, 7, 13, 29, 35, 65, 91, 145, 203, 377, 455, 1015, 2639, 13195
소수인 약수: 5, 7, 13, 29
최대값: 29검증:
- 13195 ÷ 29 = 455 ✓
- 29는 소수 ✓ (2~28까지 나누어떨어지지 않음)
문제 20. V모델 테스트 단계
답:
- 단위 테스트 (Unit Test)
- 통합 테스트 (Integration Test)
- 시스템 테스트 (System Test)
- 인수 테스트 (Acceptance Test)
해설:
V모델 (V-Model):
- 개발 단계와 테스트 단계를 대칭적으로 매핑한 모델
- 왼쪽: 개발 단계 (위→아래)
- 오른쪽: 테스트 단계 (아래→위)
테스트 단계:
단위 테스트 (Unit Test):
- 개별 모듈/함수 단위로 테스트
- 개발자가 직접 수행
- 화이트박스 테스트 기법 사용
통합 테스트 (Integration Test):
- 여러 모듈을 결합하여 테스트
- 모듈 간 인터페이스 검증
- 상향식/하향식 통합
시스템 테스트 (System Test):
- 전체 시스템을 통합하여 테스트
- 기능 요구사항 검증
- 성능, 보안, 안정성 테스트
인수 테스트 (Acceptance Test):
- 사용자 요구사항 만족 여부 확인
- 실제 사용 환경에서 테스트
- 알파/베타 테스트 포함
V모델의 장단점:
- 장점: 각 단계별 명확한 검증, 문서화 강조
- 단점: 변경 사항 반영 어려움, 순차적 진행
총정리
이번 시험의 주요 출제 영역:
- 데이터베이스: RAID, 트랜잭션, 정규화, SQL
- 프로그래밍: Java, Python, C 언어
- 정보보안: 암호화, 보안 공격, ISMS
- 소프트웨어 공학: 테스트 기법, 개발 모델
- 네트워크: 프로토콜, 인터페이스
학습 팁:
- 각 개념의 정의와 특징을 정확히 이해
- 프로그래밍 문제는 단계별로 추적하며 풀기
- 약어는 정확한 영문명 암기
- 실무와 연결하여 이해하기
'BackEnd > 정보처리기사' 카테고리의 다른 글
| 정보처리기사 실기 단답형 100제 (0) | 2026.04.16 |
|---|---|
| [2025년 2회] 정보처리기사 실기 문제 (0) | 2026.03.30 |
| [2021년 1회] 정보처리기사 실기 기출문제 해설 (0) | 2026.03.07 |
| [2021년 1회] 정보처리기사 실기 기출문제!! (0) | 2026.03.07 |
| [2025년 3회] 정보처리기사 실기 복원 문제 (0) | 2026.03.06 |