정처기 실기 : 2025년 1회차 기출, 1️⃣ ~ 🔟

m_ngyeong·2025년 4월 21일
0
post-thumbnail

정보처리기사 실기


📝 2025년 1회차 기출, 1️⃣ ~ 🔟

1. 소프트웨어 보안

  • 케빈 미트닉이 사용했던 공격 방법이다.
  • ( )은/는 '세션을 가로채다'라는 의미로, 사용자가 인증을 마친 후 유지되고 있는 세션 ID를 탈취하거나 위조하여 마치 정상 사용자처럼 접근하는 방식이다.
  • TCP ( )은/는 TCP 연결의 시퀀스 번호를 예측하거나 가로채어 통신 흐름에 불법적으로 끼어드는 방식으로 이루어진다. 이를 통해 공격자는 피해자의 세션을 탈취하거나 조작할 수 있다.
  • ( )은/는 세션 관리 취약점을 이용한 공격 기법이다.

🖍️ 세션 하이재킹


2. DB 무결성 제약 조건

대상속성튜플속성, 튜플
NULL 허용XOX
기준데이터 타입, 값 범위기본 키 조건외래 키 → 부모 테이블의 키
설명속성에 입력될 수 있는 값의 형식, 범위, 길이 등을 제한하여 올바른 값 유지각 튜플을 고유하게 식별할 수 있도록 기본 키는 NULL / 중복이 될 수 없음외래키가 참조하는 기본키는 반드시 원본 테이블에 존재해야 하며, 테이블 간의 연관성, 일관성을 보장함

🖍️ ① 도메인 무결성 ② 개체 무결성 ③ 참조 무결성


3. 오류 감지 기법

( )은/는 영어 3글자 약자로 이루어진 오류 감지 기법으로,
연속된 비트 오류를 감지하는데 효과적이며, 주로 데이터를 전송이나 저장 시 무결성을 확인하는데 사용된다. 다항식 기반의 계산을 통해 전송된 데이터에 오류가 있는지를 수신 측에서 판별할 수 있다.

🖍️ CRC


4. 소프트웨어 보안

( )은/는 사회공학적 기법을 활용한 악성 소프트웨어의 한 유형이다. 사용자를 위헙하거나 공포심을 유발하여 특정 행동을 하도록 유도하는 악성 소프트웨어이다. 주로 가짜 바이러스 경고나 시스템 문제를 표시하여 사용자가 돈을 지불하거나 특정 소프트웨어를 설치하도록 속이는 방식으로 작동한다.
[보기] 셔블웨어, 애드웨어, 스캐어웨어, 안티 스파이웨어, ...

🖍️ 스캐어웨어


5. Java Lang. - try-catch~finally

public class Main {
    public static void main(String[] args) {
        try{
            int a=5,b=0;
            System.out.print(a/b);
        }
        catch(ArithmeticException e){
            System.out.print("출력1");
        }
        catch(ArrayIndexOutOfBoundsException e) {
            System.out.print("출력2");
        }
        catch(NumberFormatException e) {
            System.out.print("출력3");
        }
        catch(Exception e){
            System.out.print("출력4");
        }
        finally{
            System.out.print("출력5");
        }
    }
}

🖍️ 출력1출력5

int a=5,b=0;
            System.out.print(a/b);

a / b → 5 / 0을 계산하려는 순간
➤ 런타임 에러 ArithmeticException 발생!
System.out.print()는 호출조차 안 됨!
try 블록이 중단되고 바로 해당 catch로 이동함

🔹 catch 블록

catch (ArithmeticException e) {
    System.out.print("출력1");
}
  • 예외 타입이 정확히 맞음 → 이 블록 실행됨
  • 출력: 출력1

다른 catch들은 무시되고,

🔹 finally 블록

finally {
    System.out.print("출력5");
}
  • finally는 예외가 발생하든 말든 무조건 실행됨
  • 출력: 출력5

  • ArithmeticException: 0으로 나누기 같은 산술 계산
int x = 10 / 0;  // ArithmeticException 발생
  • ArrayIndexOutOfBoundsException: 배열 범위 초과 인덱스 접근
int[] arr = {1, 2, 3};
int x = arr[5];  // 인덱스 5는 없음 → 예외 발생
  • NumberFormatException: "abc" 같은 문자열 → 숫자 변환 시
String s = "hello";
int x = Integer.parseInt(s);  // "hello"는 숫자가 아님 → 예외 발생
  • Exception: 모든 예외의 최상위 클래스(일반 예외 포괄)
    • 위의 세 가지 예외들도 Exception을 상속받음
    • 특정 예외를 명시하지 않고, 모든 예외를 통틀어 잡고 싶을 때 사용
try {
    // 어떤 예외가 날지 모를 때
} catch(Exception e) {
    // 모든 예외를 처리
}

6. 프로토콜

① IP 네트워크상에서 IP 주소를 물리 주소(MAC 주소)로 변환하는 프로토콜
② 물리적 주소(MAC 주소)를 IP 주소로 변환하는 프로토콜

🖍️ ① ARP ② RARP


7. SQL

[emp]

idname
1001강감찬
1002김유신
1003이순신

[sal]

idincentive
1001300
1002200
10031000
1009500
[SQL]
SELECT name, incentive FROM emp, sal WHERE emp.id = sal.id and incentive >= 500;

🖍️

// CREATE
CREATE TABLE emp
(   id       NUMBER NOT NULL,
    name     VARCHAR(10) NOT NULL);
CREATE TABLE sal
(   id        NUMBER NOT NULL,
    incentive NUMBER NOT NULL);
// INSERT
INSERT INTO emp (id, name)
VALUES 
    (1, '강감찬'),
    (2, '김유신'),
	(3, '이순신');
INSERT INTO sal (id, incentive)
VALUES 
    (1, 300),
    (2, 200),
    (3, 1000),
	(4, 500);

8. 관계형 데이터베이스의 용어

① 릴레이션에서 속성(차수)의 개수를 의미: ( )
② 릴레이션에서 튜플의 개수를 의미: ( )
③ 한 릴레이션(테이블)의 속성이 다른 테이블의 기본 키를 참조할 때, 참조하는 키: ( ) key
④ 특정 속성에 대해 입력될 수 있는 값의 유형이나 범위를 의미하며, 무결성을 보장하기 위한 기준: ( )

[보기]
ㄱ domain ㄴ primary ㄷ degree ㄹ candidate
ㅁ cardinality ㅂ attribute ㅅ foreign

🖍️ ① ㄷ degree, ② ㅁ cardinality, ③ ㅅ foreign, ④ ㄱ domain


9. 서브넷 마스크

IP: 192.168.35.10
서브넷 마스크: 255.255.252.0

[보기]
ㄱ 192.168.32.xxx ㄴ 192.168.34.xxx ㄷ 192.168.35.xxx ㄹ 192.168.32.xxx ㅁ 192.168.35.xxx

🖍️ ㄱ,ㄴ,ㄷ,ㄹ,ㅁ
252 = 11111100
35 = 00100011

  • 네트워크 주소 = 192.168.32.000
  • 브로드캐스트 주소 = 192.168.35.255
  • ∴ 사용 가능한 IP 주소 범위: 192.168.32.1 ~ 192.168.35.254

10. C Lang. - ASCII 코드

#include <stdio.h>
char Data[5] = {'B', 'A', 'D', 'E'};
char c;

int main(){
    int i, temp, temp2;
    c = 'C';
    printf("%d\n", Data[3]-Data[1]);
    
    for(i=0;i<5;++i){
        if(Data[i]>c)
        break;
    }
    temp = Data[i];
    Data[i] = c;
    i++;
    for(;i<5;++i){
        temp2 = Data[i];
        Data[i] = temp;
        temp = temp2;
    }
    
    for(i=0;i<5;i++){
        printf("%c", Data[i]);
    }
    
    return 0;
}

🖍️
4
BACDE

💚 1. 출력: Data[3]-Data[1]

printf("%d\n", Data[3]-Data[1]);
  • Data[3] = 'E', Data[1] = 'A'
  • 'E' - 'A' = 69 - 65 = 4
  • 출력: 4

💚 2. 삽입 위치 찾기

for(i=0; i<5; ++i){
    if(Data[i] > c)
        break;
}
  • 문자 'C'보다 큰 값을 찾을 때까지 반복
  • 비교 순서:
    Data[0] = 'B' → 'B' < 'C' → 계속
    Data[1] = 'A' → 'A' < 'C' → 계속
    Data[2] = 'D' → 'D' > 'C' → break!
    i == 2 에서 멈춤 ⇒ 'C'는 인덱스 2에 삽입될 예정

💚 3. 배열에 'C' 삽입

temp = Data[i];
Data[i] = c;
i++;
for(; i<5; ++i){
    temp2 = Data[i];
    Data[i] = temp;
    temp = temp2;
}
  • i = 2
  • Data[2] = 'D'를 temp에 저장하고 'C'로 대체
  • 이후 한 칸씩 뒤로 밀면서 값 shift

💚 4. 최종 출력

for(i=0; i<5; i++){
    printf("%c", Data[i]);
}

→ 출력 결과: BACDE

profile
ʚȉɞ

0개의 댓글