낙서장[2]: 32개의 글

[정보처리기사 실기] 해킹 공격 기법

Posted by nkjok
2025. 4. 17. 16:20 낙서장[2]/오답노트
반응형

✅ 정보처리기사 실기에 출제될 가능성이 있는 해킹 공격 기법

🔹 Watering Hole Attack (워터링 홀 공격)

✔ 목표 조직이 자주 방문하는 웹사이트를 감염시켜 악성 코드에 감염되도록 유도하는 방식입니다.
✔ 공격자는 피해자가 특정 웹사이트를 방문할 것이라는 점을 예상하여 해당 사이트에 악성 코드를 심습니다.
✔ 감염된 PC를 이용해 네트워크 내부로 침투하여 추가적인 공격을 수행합니다.

🔹 Pharming (파밍)

✔ 사용자가 정상적인 웹사이트에 접속했다고 생각하지만, 실제로는 위조된 웹사이트로 유도되는 공격입니다.
✔ DNS 정보를 변조하여 사용자를 가짜 웹사이트로 이동시키는 방식으로 이루어집니다.
✔ 은행, 금융 사이트 등의 로그인 정보를 탈취하는 데 자주 사용됩니다.

🔹 Drive-by Download (드라이브 바이 다운로드)

✔ 사용자가 악성 코드가 포함된 웹사이트를 방문하기만 해도 자동으로 악성 코드가 다운로드되는 공격 방식입니다.
✔ 별도의 실행 없이 사용자 기기에 악성 프로그램이 설치될 수 있어 매우 위험합니다.
✔ 광고 서버나 취약한 웹사이트를 이용해 대량 감염을 유도할 수도 있습니다.

🔹 Business SCAM (비즈니스 사기)

✔ 기업을 대상으로 한 사기 공격으로, 금융 거래, 이메일 스푸핑 등을 통해 금전적인 피해를 입히는 방식입니다.
✔ 주로 CEO 또는 고위 임원으로 위장해 직원에게 가짜 송금 요청을 보내는 방식이 사용됩니다.
✔ "BEC (Business Email Compromise)"라는 용어로도 알려져 있으며, 최근 기업 대상 범죄에서 빈번하게 발생합니다.

🔹 Phishing (피싱)

✔ 신뢰할 수 있는 기관을 사칭하여 사용자의 개인정보를 탈취하는 공격 방식입니다.
✔ 이메일, 문자 메시지 등을 통해 사용자를 유인하여 가짜 웹사이트에 로그인하도록 유도합니다.
✔ 금융 정보, 계정 비밀번호를 탈취하는 데 자주 활용됩니다.

🔹 Cyber Kill Chain (사이버 킬 체인)

✔ 사이버 공격이 단계적으로 진행되는 과정을 모델링한 개념입니다.
✔ 탐색 → 무기화 → 전달 → 실행 → 설치 → 명령 및 제어 → 목표 달성의 7단계로 구성됩니다.
✔ 공격자가 시스템을 침입하는 과정에서 방어자는 각 단계마다 대응 전략을 세울 수 있습니다.

🔹 Ransomware (랜섬웨어)

✔ 시스템을 암호화한 후 금전을 요구하는 악성 코드입니다.
✔ 사용자의 파일을 암호화하고, 해독키를 제공하는 대가로 금전을 요구하는 방식입니다.
✔ 감염되면 파일을 복구하기 어려울 수 있으며, 정기적인 백업이 필수입니다.

🔹 Sniffing (스니핑)

✔ 네트워크에서 데이터 패킷을 가로채어 민감한 정보를 탈취하는 공격 기법입니다.
✔ 공격자는 네트워크 트래픽을 감시하여 아이디, 비밀번호 등을 가로챌 수 있습니다.
✔ 주로 공개된 Wi-Fi 네트워크에서 많이 발생하므로, HTTPS 사용 및 VPN 연결이 필요합니다.

🔹 Spoofing Attack (스푸핑 공격)

✔ 공격자가 정상적인 시스템처럼 위장하여 사용자 정보를 탈취하거나 시스템 접근을 시도하는 방식입니다.
✔ 주로 IP 스푸핑, 이메일 스푸핑, ARP 스푸핑 등의 형태로 발생합니다.
✔ 네트워크 보안 강화 및 인증 절차 개선이 필수적인 방어 전략입니다.

 

DoS, DDoS, DRDoS 공격 차이점 및 유형

DoS (Denial of Service, 서비스 거부 공격) → 단일 시스템에서 과부하 트래픽을 발생시켜 대상 서버를 마비시키는 공격 방식
DDoS (Distributed Denial of Service, 분산 서비스 거부 공격) → 여러 대의 시스템을 활용해 대량의 트래픽을 발생시켜 공격하는 방식
DRDoS (Distributed Reflective Denial of Service, 분산 반사 서비스 거부 공격) → 공격자가 제3의 시스템을 악용하여 반사된 대량 트래픽을 증폭시키는 방식

🔹 DoS 공격 유형

SYN Flooding (SYN 플러딩) → TCP 연결 과정에서 다량의 SYN 패킷을 보내고 응답을 기다리지 않아 서버 리소스를 고갈시키는 방식
UDP Flooding (UDP 플러딩) → 무작위 UDP 패킷을 대량으로 보내 대상 서버를 과부하 상태로 만듦
Smurf Attack (스머프 공격) → ICMP Echo Request 패킷을 네트워크 브로드캐스트 주소로 보내 다수의 시스템이 동시에 응답하게 유도하는 방식
Ping of Death (죽음의 핑) → 크기가 과도하게 큰 ICMP 패킷을 보내 대상 시스템을 다운시키는 공격
Land Attack (랜드 공격) → 공격자가 피해자의 IP 주소로 패킷을 보내게 하여 시스템이 스스로에게 응답하도록 만들어 과부하를 유발
Teardrop Attack (티어드롭 공격) → 조작된 크기의 데이터 패킷을 보내 시스템의 패킷 처리 기능을 마비시키는 방식
Bonk/Boink (봉크/보잉크) → 조작된 UDP 패킷을 보내 특정 포트에서 시스템의 네트워크 기능을 비정상적으로 작동하게 하는 공격

🔹 DDoS 구성 요소

Handler (핸들러) → 공격을 관리하는 중앙 제어 시스템
Agent (에이전트) → 실제로 공격을 수행하는 좀비 PC
Master (마스터) → 핸들러와 에이전트를 연결하여 공격을 조정하는 역할
Attacker (공격자) → 공격을 지시하는 주체
Daemon Program (데몬 프로그램) → 좀비 PC에 설치되어 공격 명령을 수행하는 악성 코드

🔹 DRDoS 공격 유형

HTTP GET Flooding (HTTP GET 플러딩) → 정상적인 GET 요청을 과도하게 보내 서버의 자원을 소진시키는 방식
Slowloris (슬로리스) → 매우 느린 HTTP 요청을 전송해 서버의 연결을 지속적으로 차단하여 과부하를 유발
RUDY (루디) → 매우 작은 크기의 데이터를 지속적으로 전송하여 서버가 리소스를 고갈하게 만듦
Slow HTTP Read DoS (슬로 HTTP 리드 DoS) → 서버의 응답을 매우 천천히 읽어 처리 속도를 저하시켜 서버를 마비시킴
Hulk DoS (헐크 DoS) → 변조된 HTTP 요청을 빠르게 전송하여 서버를 다운시키는 공격

 

반응형

[정보처리기사 실기] 화이트박스/블랙박스 테스트

Posted by nkjok
2025. 4. 17. 14:54 낙서장[2]/오답노트
반응형

화이트박스 테스트(White-box Testing) 기법

구문 커버리지 Statement Coverage
결정 커버리지 Decision Coverage
조건 커버리지 Condition Coverage
조건-결정 커버리지 Condition-Decision Coverage
변경 조건-결정 커버리지 Modified Condition-Decision Coverage (MC/DC)
다중 조건 커버리지 Multiple Condition Coverage
기본 경로 검사 Basis Path Testing
제어 흐름 테스트 Control Flow Testing
데이터 흐름 테스트 Data Flow Testing
루프 테스트 Loop Testing

 

블랙박스 테스트(Black-box Testing) 기법

동등 분할 Equivalence Partitioning
경곗값 분석 Boundary Value Analysis
결정 테이블 테스트 Decision Table Testing
상태 전이 테스트 State Transition Testing
유스케이스 테스트 Use Case Testing
분류 트리 테스트 Classification Tree Method
페어와이즈 테스트 Pairwise Testing
원인-결과 그래프 테스트 Cause-Effect Graphing
비교 테스트 Comparison Testing
오류 추정 테스트 Error Guessing

 

 

🔎  + 특징

화이트박스 테스트(White-box Testing) 기법

화이트박스 테스트(White-box Testing)는 코드 내부 구조를 분석하여 논리 흐름을 직접 검토하는 방식입니다. 코드의 실행 경로와 조건을 평가하는 것이 핵심이며, 주요 기법은 다음과 같습니다:

  • 구문 커버리지 (Statement Coverage): 모든 코드 라인이 최소 한 번 실행되었는지를 검증합니다. 실행되지 않은 코드가 있는 경우 테스트 케이스를 추가하여 보완합니다. 코드의 전체적인 실행 여부를 평가하는 기본적인 커버리지 방법입니다.
  • 결정 커버리지 (Decision Coverage): 조건문(예: if, switch)의 모든 가능한 실행 경로를 테스트합니다. 프로그램 내의 모든 분기점이 적어도 한 번씩 실행되었는지 확인합니다. 논리적인 흐름을 중점적으로 평가하는 테스트 방법입니다.
  • 조건 커버리지 (Condition Coverage): 각 개별 조건이 truefalse를 포함하여 모두 평가되었는지 확인합니다. 분기 조건 내 개별적인 Boolean 값 검증을 목표로 합니다. 논리적인 조건식의 모든 조합이 수행되었는지를 평가합니다.
  • 조건-결정 커버리지 (Condition-Decision Coverage): 조건과 결정 커버리지를 통합하여 각 분기 내 개별 조건 및 전체 실행 경로를 검증합니다. 프로그램의 실행 흐름과 논리식이 올바르게 작동하는지를 평가합니다. 보다 정밀한 분기 구조 테스트를 수행하는 방식입니다.
  • 변경 조건-결정 커버리지 (Modified Condition-Decision Coverage, MC/DC): 개별 조건이 전체 결과에 영향을 미치는지 검증하는 고급 테스트 기법입니다. 항공, 자동차, 의료 시스템 같은 안전이 중요한 시스템에서 많이 사용됩니다. 조건 변화가 실제 프로그램 동작에 미치는 영향을 분석하는 것이 핵심입니다.
  • 다중 조건 커버리지 (Multiple Condition Coverage): 프로그램 내 모든 가능한 조건 조합을 테스트합니다. 개별 Boolean 표현식의 모든 가능한 조합이 평가되었는지 확인합니다. 테스트 비용이 높은 방식이지만, 가장 철저한 논리 검증이 가능합니다.
  • 기본 경로 검사 (Basis Path Testing): 소스 코드의 제어 흐름을 기반으로 가장 중요한 실행 경로를 테스트합니다. 최소한의 테스트 케이스로 최대한의 코드 실행을 보장하는 것이 목표입니다. 사이클 복잡도를 기반으로 경로를 선정하는 기법입니다.
  • 제어 흐름 테스트 (Control Flow Testing): 코드 실행 흐름(프로그램의 분기와 반복 구조)을 검증하는 테스트 방식입니다. 코드 내의 실행 경로가 예상대로 작동하는지를 확인합니다. 논리적인 제어 구조가 올바르게 구성되었는지를 평가하는 방식입니다.
  • 데이터 흐름 테스트 (Data Flow Testing): 프로그램 내 변수의 정의와 사용(Definition & Use)을 추적하여 테스트합니다. 변수가 올바르게 초기화되고 예상대로 활용되는지를 검증합니다. 사용되지 않는 변수, 중복 선언된 변수 등의 오류를 찾는 데 효과적입니다.
  • 루프 테스트 (Loop Testing): 반복문(Loop)의 동작을 집중적으로 테스트하여 오류를 검출합니다. 루프가 정상적으로 수행되는지, 무한 루프가 발생하지 않는지를 확인합니다. 단순 루프, 중첩 루프, 조건 기반 루프 등 다양한 테스트 방식이 존재합니다.

 

블랙박스 테스트(Black-box Testing) 기법

블랙박스 테스트(Black-box Testing)는 코드 내부 구조를 고려하지 않고, 입출력만을 기반으로 검증하는 방식입니다. 사용자 관점에서 시스템의 기능을 평가하며, 다음과 같은 기법들이 있습니다:

  • 동등 분할 (Equivalence Partitioning): 입력값을 여러 그룹(등가 클래스)으로 나누어 대표 값을 테스트합니다. 동일한 클래스 내에서 같은 결과가 예상되므로 일부만 테스트해도 전체를 확인하는 효과가 있습니다. 테스트 범위를 줄여 효율적으로 오류를 검출하는 기법입니다.
  • 경곗값 분석 (Boundary Value Analysis): 오류가 발생하기 쉬운 경계 영역의 값을 집중적으로 검토하는 방식입니다. 최소값과 최대값을 포함한 경계 영역에서 주로 오류가 발생하므로 이를 검증하는 것이 핵심입니다. 예상치 못한 예외 상황을 대비하기 위한 중요한 테스트 기법입니다.
  • 결정 테이블 테스트 (Decision Table Testing): 다양한 조건과 그에 따른 동작을 테이블 형식으로 정리하여 테스트합니다. 복잡한 논리 조건을 체계적으로 정리하여 테스트할 수 있도록 도와줍니다. 비즈니스 로직이 복잡한 시스템에서 유용하게 활용됩니다.
  • 상태 전이 테스트 (State Transition Testing): 시스템의 다양한 상태 변화와 이에 따른 동작을 검증하는 기법입니다. 예를 들어, 로그인 상태에서 로그아웃 상태로 변환되는 과정 등을 테스트합니다. 금융 시스템, 네트워크 프로토콜 등에서 많이 활용됩니다.
  • 유스케이스 테스트 (Use Case Testing): 실제 사용자 관점에서 시스템의 기능을 검증하는 테스트 방식입니다. 사용자가 실행할 수 있는 여러 시나리오를 기반으로 테스트를 수행합니다. 사용자의 행동을 기반으로 서비스 품질을 평가하는 중요한 기법입니다.
  • 분류 트리 테스트 (Classification Tree Method): 시스템의 입력 값을 계층적으로 분류하고 테스트 케이스를 생성하는 방법입니다. 복잡한 입력 조합을 체계적으로 관리할 수 있도록 도와줍니다. GUI 테스트나 기능 검증에 효과적으로 활용됩니다.
  • 페어와이즈 테스트 (Pairwise Testing): 입력값의 모든 조합을 테스트하지 않고, 중요한 조합만 선택하여 검증하는 기법입니다. 각 값의 상호작용을 고려하여 최소한의 테스트 케이스를 생성합니다. 테스트 비용을 줄이면서도 높은 품질을 유지할 수 있도록 설계된 방법입니다.
  • 원인-결과 그래프 테스트 (Cause-Effect Graphing): 특정 입력이 시스템의 결과(출력)에 어떻게 영향을 미치는지 분석하는 테스트 방식입니다. 입력 값의 원인과 그에 따른 결과를 그래프 형태로 표현하여 검증합니다. 복잡한 논리 관계를 정리하여 오류를 체계적으로 발견하는 기법입니다.
  • 비교 테스트 (Comparison Testing): 동일한 입력값에 대해 두 개 이상의 시스템이나 알고리즘의 결과를 비교하는 방식입니다. 새로운 시스템과 기존 시스템을 비교하거나, 다른 알고리즘 성능을 평가할 때 유용합니다. 결과 차이를 분석하여 정확성을 검증하는 데 효과적인 테스트 기법입니다.
  • 오류 추정 테스트 (Error Guessing): 경험을 바탕으로 오류가 발생할 가능성이 높은 부분을 집중적으로 검증하는 기법입니다. 개발자의 직관과 경험을 활용하여 예상치 못한 문제를 발견하는 것이 목표입니다. 체계적인 기법은 아니지만, 중요한 결함을 찾아내는 데 매우 효과적입니다.

 

반응형

[정보처리기사 실기] 대칭키 비대칭키 (상세)

Posted by nkjok
2025. 4. 17. 10:02 낙서장[2]/오답노트
반응형

비대칭키 암호화 → 공개키 + 개인키 (서로 다른 2개의 키)
대칭키 암호화 → 하나의 동일한 키 (비밀키 사용)

 

대칭키 및 비대칭키 암호화 동작 원리

1. 개요

암호화는 정보 보호를 위한 핵심 기술이며, 크게 **대칭키 암호화(Symmetric Key Encryption)**와 **비대칭키 암호화(Asymmetric Key Encryption)**로 나뉜다.
각각의 방식은 키의 사용 방식, 암호화 및 복호화 과정, 보안성과 성능 측면에서 차이를 가지며, 특정 환경에 따라 적절한 암호화 기법이 선택된다.
본 글에서는 두 암호화 방식의 수학적 수식과 숫자 연산을 포함하여 상세한 동작 과정을 분석한다.

2. 대칭키 암호화(Symmetric Key Encryption)

대칭키 암호화는 암호화와 복호화에 동일한 키를 사용하는 방식이다.
송신자와 수신자가 같은 암호화 키를 공유하며, 빠른 연산 속도를 제공하지만 키 관리가 어렵다.

2.1. 키 생성 및 공유 (Key Generation & Distribution)

암호화 키 ( K_s ) 생성

  • 예시: ( K_s = 101110110001 ) (128비트 키)

수신자에게 키를 안전하게 전달

  • 공개된 네트워크에서는 키 교환 과정이 보안상 위험할 수 있음
  • 보안 강화를 위해 Diffie-Hellman 키 교환 방식 등을 사용할 수 있음

2.2. 암호화 과정 (Encryption)

평문(P) → 암호문(C) 변환
✔ 평문 블록: ( P = (10110100, 11001100, 11100011) )
✔ 암호화 함수 적용:

  • ( C_i = P_i \oplus K_s ) (XOR 연산 예제)
    ✔ 결과 암호문: ( C = (00001110, 00110010, 01011001) )

AES(128비트 기준) 암호화 과정 예제

  • SubBytes: S-Box 치환
  • ShiftRows: 행을 순환 이동
  • MixColumns: 열별 선형 변환
  • AddRoundKey: 키와 XOR 연산 수행
  • 반복: 10라운드 수행

2.3. 복호화 과정 (Decryption)

암호문(C) → 평문(P) 복원
✔ 복호화 함수 적용:

  • ( P_i = C_i \oplus K_s )
    ✔ 복호화된 평문: ( P = (10110100, 11001100, 11100011) )

📌
대칭키 암호화는 속도가 빠르고 효율적이지만, 키 공유 과정에서 보안 문제 발생 가능

 

 

3. 비대칭키 암호화(Asymmetric Key Encryption)

비대칭키 암호화는 암호화와 복호화에 서로 다른 키(공개키, 개인키)를 사용하는 방식이다.
**공개키(Public Key)**로 암호화하고, **개인키(Private Key)**로 복호화하여 높은 보안성을 제공한다.

3.1. 키 생성 (Key Generation)

소수 두 개 ( p, q ) 선택

  • ( p = 61 ), ( q = 53 )

모듈러스 ( n ) 계산

  • ( n = p \times q = 61 \times 53 = 3233 )

오일러 함수 ( \varphi(n) ) 계산

  • ( \varphi(n) = (p-1) \times (q-1) = 3120 )

공개키 지수 ( e ) 선택

  • ( e = 17 )

개인키 ( d ) 계산

  • ( d \times e \equiv 1 \mod \varphi(n) )
  • ( d = 2753 ) (모듈러 연산으로 역원 계산)

3.2. 암호화 과정 (Encryption)

✔ 평문 ( M = 123 )를 암호화
✔ 암호문 ( C ) 계산:

  • ( C \equiv M{17} \mod 3233 )
  • ( C = 855 )

3.3. 복호화 과정 (Decryption)

✔ 암호문 ( C = 855 )를 복호화
✔ 평문 복호화 계산:

  • ( M \equiv C{2753} \mod 3233 )
  • ( M = 123 )

📌 
비대칭키 암호화는 높은 보안성을 제공하지만, 연산 속도가 느림

 

4. 비교 및 결론

방식대칭키 암호화비대칭키 암호화

키 개수 하나의 동일한 키 공개키 + 개인키
(2개)
암호화 속도 빠름 느림
보안성 키 공유 위험 존재 높은 보안성
사용 예시 파일 암호화, VPN 디지털 서명, SSL/TLS 인증

대칭키는 속도가 빠르고 효율적이지만 키 공유 문제 존재
비대칭키는 보안성이 뛰어나지만 연산 속도가 느림
실제 환경에서는 두 방식의 장점을 조합하여 사용 (예: SSL/TLS에서는 공개키로 세션 키 교환 후 대칭키로 통신)

 

📌 
암호화 방식은 시스템의 요구 사항과 보안 수준에 맞추어 적절하게 선택해야 하며, 실제 환경에서는 두 방식의 장점을 결합하여 사용하는 것이 일반적이다 ?

반응형

[정보처리기사 실기] 대칭키(Symmetric Key) 비대칭키(Asymmetric Key) 암호화

Posted by nkjok
2025. 4. 17. 09:41 낙서장[2]/오답노트
반응형

대칭키(Symmetric Key) 암호화비대칭키(Asymmetric Key) 암호화 알고리즘을 정리해볼게요.

 

🔐 대칭키 암호화(Symmetric Key Encryption)

📌 암호화와 복호화에 동일한 키를 사용하는 방식으로 빠른 연산 속도가 특징

알고리즘특징

DES (Data Encryption Standard) 56비트 키 사용, 블록 크기 64비트, 현재는 안전하지 않음
AES (Advanced Encryption Standard) 128/192/256비트 키 사용, 빠르고 강력한 보안 제공
ARIA (Advanced RIghts Architecture) 한국에서 개발된 국가 표준 암호화, 128/192/256비트 키 사용
SEED 한국에서 개발된 암호화 알고리즘, 128비트 블록 크기 및 키 사용
IDEA (International Data Encryption Algorithm) 128비트 키 사용, 강력한 암호화지만 현재는 잘 사용되지 않음
SKIPJACK 미국 NSA에서 개발, 80비트 키 사용, Clipper 칩에서 사용
Blowfish 32~448비트 가변 키 사용, 빠르고 강력한 보안 제공
Twofish Blowfish의 개선판, 128~256비트 키 지원, AES 후보였음
Camellia 일본에서 개발, AES와 유사한 성능, 금융 및 정부기관에서 사용
RC4 스트림 암호 방식, 빠르지만 보안 취약점 발견됨
RC5 가변적인 블록 크기와 라운드를 지원하는 알고리즘
RC6 RC5의 확장판, AES 후보였으나 선정되지 않음

 

🔑 비대칭키 암호화(Asymmetric Key Encryption)

📌 공개키와 개인키를 사용하는 방식으로 보안성이 높지만 연산 속도가 상대적으로 느림

알고리즘특징

RSA (Rivest-Shamir-Adleman) 가장 널리 사용되는 공개키 암호, 큰 수의 소인수분해 기반
ECC (Elliptic Curve Cryptography) 타원 곡선 수학적 원리 기반, RSA보다 빠르고 키 길이 짧음
DSA (Digital Signature Algorithm) 전자 서명에 사용되는 암호화 방식
ElGamal 키 크기가 클수록 안전함, Diffie-Hellman 기반
Diffie-Hellman 안전한 키 교환을 위한 알고리즘
PQCrypto (Post-Quantum Cryptography) 양자컴퓨팅 시대를 대비한 암호화 기법
Ed25519 고속 전자 서명 알고리즘, ECC 기반

 

🏆 정리

대칭키 암호화연산 속도가 빠르지만, 키 관리가 어려움
비대칭키 암호화보안성이 뛰어나지만, 속도가 느림
✔ 현재는 AES, RSA, ECC 등 강력한 암호화 방식이 널리 사용됨 ?

반응형

[정보처리기사 실기] 2021년 3회 13번 SQL 문제

Posted by nkjok
2025. 4. 14. 19:36 낙서장[2]/오답노트
반응형

아래 테이블 SOO, JEBI 의 상태를 보고 출력결과를 작성하시오

SELECT COUNT(*) CNT FROM SOO CROSS JOIN JEBI WHERE SOO.NAME LIKE JEBI.RULE;

mysql> select * from SOO;
+--------+
| NAME   |
+--------+
| SOPHIA |
| OLIVIA |
| SEMA   |
+--------+
3 rows in set (0.00 sec)

mysql> select * from JEBI;
+------+
| RULE |
+------+
| S%   |
| %A%  |
+------+
2 rows in set (0.00 sec)

mysql>

 

 

1. 해설

  • SOO CROSS JOIN JEBI → 모든 가능한 조합을 생성 (총 3 × 2 = 6개의 조합)
  • WHERE SOO.NAME LIKE JEBI.RULE → NAME이 RULE 조건을 만족하는 경우만 필터링

각 RULE과 NAME의 매칭

SOO.NAMEJEBI.RULE결과 (LIKE 매칭)

SOPHIA S% ✅ (S로 시작)
SOPHIA %A% ✅ (A 포함)
OLIVIA S% ❌ (S로 시작 X)
OLIVIA %A% ✅ (A 포함)
SEMA S% ✅ (S로 시작)
SEMA %A% ✅ (A 포함)

총 6개의 조합 중 OLIVIA와 'S%'는 LIKE 패턴에 맞지 않기 때문에 제외,
따라서 CNT = 5가 출력됩니다

 

 

2. 자세한 해설

사용한 쿼리는 다음과 같습니다:

SELECT COUNT(*) CNT FROM SOO CROSS JOIN JEBI WHERE SOO.NAME LIKE JEBI.RULE;

  • CROSS JOIN을 사용했으므로 **두 테이블의 모든 조합(곱집합)**이 생성됩니다.
  • WHERE SOO.NAME LIKE JEBI.RULE 조건에 맞는 값만 필터링됩니다.

각 테이블의 데이터

SOO 테이블 (이름 리스트):

SOPHIA OLIVIA SEMA

3개의 데이터가 존재합니다.

JEBI 테이블 (패턴 리스트):

S% %A%

2개의 패턴이 존재합니다.

CROSS JOIN 결과

CROSS JOIN을 수행하면 두 테이블의 모든 조합이 생성됩니다:

따라서 총 3 × 2 = 6개의 조합이 만들어집니다.

LIKE 조건 적용

이제 LIKE 조건을 적용해 각 행이 필터링되는지 확인해볼게요.

1️⃣ "SOPHIA" LIKE "S%" ✅ (S로 시작 → 조건 만족)

2️⃣ "SOPHIA" LIKE "%A%" ✅ (A 포함 → 조건 만족)

3️⃣ "OLIVIA" LIKE "S%" ❌ (S로 시작하지 않음 → 조건 불만족)

4️⃣ "OLIVIA" LIKE "%A%" ✅ (A 포함 → 조건 만족)

5️⃣ "SEMA" LIKE "S%" ✅ (S로 시작 → 조건 만족)

6️⃣ "SEMA" LIKE "%A%" ✅ (A 포함 → 조건 만족)

 

최종 결과

총 6개 중 3번째 행(OLIVIA LIKE 'S%')만 조건을 만족하지 않아서 제외,
따라서 최종 결과는 5개가 남으며 COUNT(*) = 5가 출력됩니다! 🎉

왜 6이 아닌가?

  • OLIVIA LIKE 'S%' 조건이 만족되지 않기 때문에 제외됨 → 그래서 5개만 남음
  • 모든 행이 조건을 만족하지 않는 것이 아니라, 특정 행만 조건에 맞지 않아서 제외됨
반응형