🖍️ 세션 하이재킹
① | ② | ③ | |
---|---|---|---|
대상 | 속성 | 튜플 | 속성, 튜플 |
NULL 허용 | X | O | X |
기준 | 데이터 타입, 값 범위 | 기본 키 조건 | 외래 키 → 부모 테이블의 키 |
설명 | 속성에 입력될 수 있는 값의 형식, 범위, 길이 등을 제한하여 올바른 값 유지 | 각 튜플을 고유하게 식별할 수 있도록 기본 키는 NULL / 중복이 될 수 없음 | 외래키가 참조하는 기본키는 반드시 원본 테이블에 존재해야 하며, 테이블 간의 연관성, 일관성을 보장함 |
🖍️ ① 도메인 무결성 ② 개체 무결성 ③ 참조 무결성
( )은/는 영어 3글자 약자로 이루어진 오류 감지 기법으로,
연속된 비트 오류를 감지하는데 효과적이며, 주로 데이터를 전송이나 저장 시 무결성을 확인하는데 사용된다. 다항식 기반의 계산을 통해 전송된 데이터에 오류가 있는지를 수신 측에서 판별할 수 있다.
🖍️ CRC
( )은/는 사회공학적 기법을 활용한 악성 소프트웨어의 한 유형이다. 사용자를 위헙하거나 공포심을 유발하여 특정 행동을 하도록 유도하는 악성 소프트웨어이다. 주로 가짜 바이러스 경고나 시스템 문제를 표시하여 사용자가 돈을 지불하거나 특정 소프트웨어를 설치하도록 속이는 방식으로 작동한다.
[보기] 셔블웨어, 애드웨어, 스캐어웨어, 안티 스파이웨어, ...
🖍️ 스캐어웨어
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) {
// 모든 예외를 처리
}
① IP 네트워크상에서 IP 주소를 물리 주소(MAC 주소)로 변환하는 프로토콜
② 물리적 주소(MAC 주소)를 IP 주소로 변환하는 프로토콜
🖍️ ① ARP ② RARP
[emp]
id | name | |
---|---|---|
1001 | 강감찬 | |
1002 | 김유신 | |
1003 | 이순신 |
[sal]
id | incentive |
---|---|
1001 | 300 |
1002 | 200 |
1003 | 1000 |
1009 | 500 |
[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);
① 릴레이션에서 속성(차수)의 개수를 의미: ( )
② 릴레이션에서 튜플의 개수를 의미: ( )
③ 한 릴레이션(테이블)의 속성이 다른 테이블의 기본 키를 참조할 때, 참조하는 키: ( ) key
④ 특정 속성에 대해 입력될 수 있는 값의 유형이나 범위를 의미하며, 무결성을 보장하기 위한 기준: ( )
[보기]
ㄱ domain ㄴ primary ㄷ degree ㄹ candidate
ㅁ cardinality ㅂ attribute ㅅ foreign
🖍️ ① ㄷ degree, ② ㅁ cardinality, ③ ㅅ foreign, ④ ㄱ domain
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
#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