응집도(Cohesion)는 모듈 내부의 구성 요소들이 하나의 목적을 위해 묶여 있는 정도를 나타내는 개념이다. 높은 응집도를 가질 수록 좋다.

 

*높은 순

1. 기능적 응집도(Functional Cohesion): 모듈 내부의 모든 요소가 동일한 기능을 수행하는 경우이다. 즉 모듈의 모든 기능이 서로 연관되어 있다.

2. 순차적 응집도(Sequential Cohesion): 모듈 내부의 요소들이 순서대로 연결되어 하나의 기능을 수행하는 경우이다. 즉 모듈 내부의 구성 요소들이 연속적인 처리를 수행한다.

3. 통신적(교환적) 응집도(Communicational Cohesion): 모듈 내부의 요소들이 서로 동일한 입출력을 공유하면서 상호작용하는 경우이다. 즉 모듈 내부의 구성 요소들이 서로 데이터를 주고 받으면서 처리한다.

4. 절차적 응집도(Procedural Cohesion): 모듈 내부의 요소들이 하나의 기능을 수행하기 위해 특정 순서로 실행되는 경우이다. 즉 모듈 내부의 구성 요소들이 어떤 절차를 따라서 처리를 수행한다.

5. 시간적 응집도(Temporal Cohesion): 모듈 내부의 요소들이 동일한 시간대에 실행되는 경우이다. 즉 모듈 내부의 구성 요소들이 동시에 실행되어야 하며, 서로 연관된 작업을 수행한다.

6. 논리적 응집도(Logical Cohesion): 모듈 내부의 요소들이 동일한 논리적 관계를 가지고 있는 경우이다. 즉 모듈 내부의 구성 요소들이 서로 밀접한 관련이 있으며 서로 유사한 기능을 수행한다.

7. 우연적 응집도(Coincidental Cohesion): 서로 간의 어떠한 의미있는 연관 관계도 없는 기능 요소로 구성될 경우이다.

 

외우는 방식: 우논시절교순기

 

 

 

결합도(Coupling)는 모듈이나 클래스가 다른 모듈이나 클래스와 상호작용하는 정도를 나타내는 개념이다. 낮은 결합도를 가질 수록 좋다.

 

*높은 순

1. 내용 결합도(Content Coupling): 모듈 내부의 작업들이 데이터를 공유하고 서로 직접적으로 접근하는 경우이다.

2. 공통 결합도(Common Coupling): 두 모듈이 하나의 전역 데이터나 공유 자원을 사용하는 경우이다.

3. 외부 결합도(External Coupling): 모듈이나 클래스가 외부 환경과의 연결을 통해 상호작용하는 정도이다.

4. 제어 결합도(Control Coupling): 모듈이나 클래스가 서로의 흐름을 제어하는 정도이다.

5. 스탬프 결합도(Stamp Coupling)모듈이나 클래스가 서로의 데이터 중 일부만 사용하는 경우이다.

6. 자료 결합도(Data Coupling): 모듈이나 클래스가 서로의 데이터를 공유하는 정도이다.

 

외우는 방식: 내공외제스자

 

 

 

 

 

참고. 에듀윌 정보처리기사 실기, ChatGPT

 

디자인 패턴은 소프트웨어 개발에서 자주 사용되는 해결 방법을 일반화하여 패턴으로 정리한 것이다.

 

1. 생성 패턴

객체 생성과 관련된 패턴으로 주로 객체 생성의 복잡도를 줄이기 위해 사용된다.

- Singleton: 인스턴스를 오직 하나만 생성하고, 이후에는 생성된 인스턴스를 계속 사용하는 패턴이다.

- Factory Method: 객체 생성 로직을 캡슐화하여 새로운 객체를 생성하는 패턴이다.

- Builder: 복잡한 객체를 생성하는 과정을 단순화하는 패턴이다.

이 외에도 Abstract Factory, Prototype 이 있다.

 

외우는 방식: bprofas

 

 

2. 구조 패턴

객체 간의 상호작용과 관련된 패턴으로 주로 객체 간의 복잡한 관계를 단순화하거나, 유연성을 높이기 위해 사용된다.

- Adapter: 호환되지 않는 인터페이스들을 함께 동작할 수 있도록 변환하는 패턴이다.

- Composite: 객체들을 트리 구조로 구성하여 단일 객체와 복합 객체를 모두 다룰 수 있는 구조를 만드는 패턴이다.

- Decorator: 객체에 새로운 기능을 동적으로 추가하는 패턴이다.

이 외에도 Bridge, Facade, Flyweight, Proxy 가 있다.

 

외우는 방식: abcdffp

 

 

3. 행동 패턴

객체들 간의 상호작용에 대한 패턴으로 주로 객체들의 책임 분배와 관련된 문제를 해결하기 위해 사용된다.

- Observer: 객체 간의 일 대 다 의존 관계를 구성하여, 한 객체의 상태 변경에 따라 다른 객체들이 변경된 내용을 받아볼 수 있도록 하는 패턴이다.

- Strategy: 객체의 알고리즘을 교체하여 동적으로 동작을 바꿀 수 있게 하는 패턴이다.

- Template Method: 객체의 행동을 일부분 변경하고자 할 때, 일부분만 자식 클래스에서 변경할 수 있도록 하는 패턴이다.

이 외에도 Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, State, Visitor 가 있다.

 

 

 

 

참고. ChatGPT

 

 

01. 애플리케이션 테스트 케이스 설계

 

애플리케이션 테스트: 결함을 찾기 위해 애플리케이션을 작동시키는 일련의 행위와 절차

 

결함: 소프트웨어 개발 활동을 수행함에 있어서 시스템이 고장을 일으키게 하고, 오류가 있을 경우 발생한다.

 

애플리케이션의 기본 원리

1. 살충제 패러독스(Pesticide Paradox): 동일한 테스트 케이스로 반복 실행하면 결함을 발견할 수 없다.

2. 테스팅은 정황(Context)에 의존: 정황과 비즈니스 도메인에 따라 테스트를 다르게 수행해야 한다.

3. 오류-부재의 궤변(Absence of Errors Fallacy): 사용자의 요구사항을 만족하지 못하는 오류를 발견하고 그 오류를 제거하였다고 해도, 품질이 높다고 말할 수 없다.

4. 결함 집중(Defect Clustering): 결함의 대부분은 소수의 특정한 모듈에 집중되어 존재한다. 결함은 발생한 모듈에서 계속 추가로 발생할 가능성이 높다.

5. 파레토의 법칙: 전체 결함의 80%는 전체 모듈 20% 내에서 발견된다.

 

테스트 케이스: 소프트웨어가 목표하는 보장성을 만족할 수 있도록 가능한 많은 결함을 발견할 수 있어야 한다.

 

테스트 케이스 구성 항목

- 식별자 번호

- 사전(테스트)조건

- 테스트 데이터

- 수행 절차

- 예상 결과

 

테스트 단계에 의한 분류

1. 모듈(단위) 테스트: 하나의 모듈만을 테스트

2. 통합 테스트: 시스템 모듈 간의 상호 인터페이스에 관한 테스트

3. 인수 테스트: 사용자의 요구사항을 만족하는지를 확인하는 테스트

4. 시스템 테스트: 시스템이 초기의 목적에 부합하는지에 대한 테스트

 

테스트 목적에 의한 분류

1. 기능 테스트: 주어진 입력에 대해 기대되는 출력 제공 여부 테스트

2. 성능 테스트: 응답 시간, 처리량, 메모리 활용도, 처리 속도 등을 테스트

3. 스트레스 테스트: 정보의 과부하 시, 반응 정도를 테스트

4. 복잡도 테스트: 논리 경로의 복잡도 평가 테스트

 

테스트에 대한 시각에 대한 분류

1. 검증(Verification): 개발자의 시각에서 점검

2. 확인(Validation): 사용자의 시각에서 점검

 

테스트 기법에 의한 분류

1. 블랙박스 테스트: 외부 명세서를 기준으로 그 기능과 성능을 테스트

2. 화이트박스 테스트: 내부의 논리적 구조를 테스트

 

프로그램 실행 여부에 따른 분류

1. 정적 테스트: 프로그램을 실행하지 않고 분석하는 테스트 ex) 인스펙션, 워크스루, 코드 검사

2. 동적 테스트: 프로그램을 실행하여 결함을 발견하는 테스트 ex) 화이트박스 테스트, 블랙박스 테스트

 

모듈 테스트(Unit Test, 단위 테스트)

: 설계의 최소 단위인 모듈에 초점을 두고 검사하는 단계이다.

: 화이트박스 테스트 기법이 적용된다.

: 가동기(Driver, 드라이버)와 가짜 모듈(Stub, 스텁)들이 필요하다.

 

테스트 하네스: 특정 환경에서 테스트를 하기 위해 만든 소프트웨어 코드와 데이터이다. ex) 테스트 드라이버, 테스트 스텁

 

통합 테스트(Integration Test)

: 모듈들을 하나로 결합하여 시스템으로 완성하는 과정에서의 테스트

: 시스템을 구성하는 모듈 사이의 인터페이스와 결합을 테스트

: 동시식, 하향식(스텁, Stub), 상향식(드라이버, Driver), 연쇄식 등이 있다.

 

시스템 테스트(System Test)

: 사용자의 모든 요구를 하나의 시스템으로서 완벽하게 수행하기 위해서는 다양한 테스트들이 필요하다.

- 외부 기능 테스트: 외부 명세의 충족성을 테스트

- 내부 기능 테스트: 사용자의 상세 기능 요구를 테스트

- 부피 테스트: 상당량의 데이터를 처리해 보도록 여건을 조성

- 스트레스 테스트(민감성 테스트): 다양한 스트레스를 가해 보는 것

- 성능 테스트: 응답 속도, 처리량, 처리 속도 등을 테스트

- 호환성 테스트: 기존 소프트웨어와 호환성

- 신뢰성 테스트: 오류를 발생시키고 고장을 내는 정도를 테스트

- 복구 테스트: 자체 결함이나 하드웨어 고장, 데이터의 오류로부터 어떻게 회복하느냐를 평가

- 보수 용이성 테스트

 

인수 테스트(Acceptance Testing, 검증 테스트)

: 사용자측 관점에서 소프트웨어가 사용자의 요구를 충족시키는가를 두고 테스트한다.

1. 알파 테스트: 개발자의 장소에서 사용자가 개발자 앞에서 행하는 기법

2. 베타 테스트: 최종 사용자가 여러 명의 사용자 환경에서 테스트를 수행. 개발자는 일반적으로 참석하지 않는다.

 

테스트 시나리오(테스트 조건, 테스트 가능성)

: 테스트할 수 있는 모든 기능을 말한다. 여러 개의 테스트 케이스들의 집합을 수행하기 위한 동작 순서를 기술한 문서.

 

테스트 시나리오 작성 절차

1. 요구사항 문서 리딩

2. 사용자 행동 및 목표 파악

3. 다양한 테스트 시나리오 나열

4. 추적성 매트릭스 생성

5. 생성된 시나리오 검토

 

테스트 지식 체계(ISO/IEC 29119): 소프트웨어 테스팅을 위한 국제 표준으로 검증 및 확인 활동 중에서 동적 테스팅에 대한 절차와 기법 등을 다룬다.

 

테스트 오라클(Test Oracle)

: 테스트의 결과가 참인지 거짓인지를 판단하기 위해 사전에 정의된 참값을 입력하여 비교하는 기법 및 활동

 

테스트 오라클의 종류

1. 참(True) 오라클: 모든 입력값에 대해 기대하는 결과를 생성함으로써 발생된 오류를 모두 검출할 수 있는 오라클

2. 샘플링 오라클: 특정한 몇 개의 입력값에 대해서만 기대하는 결과를 제공해 주는 오라클

3. 휴리스틱(Heuristic) 오라클: 특정 입력값에 대해 올바른 결과를 제공하고, 나머지 값들에 대해서는 휴리스틱(추정)으로 처리하는 오라클

4. 일관성 검사 오라클: 수행 전과 후의 결과의 값이 동일한지 확인하는 오라클

 

블랙박스 테스트

: 외부 명세로부터 직접 테스트하여 데이터를 선정하는 방법

 

블랙박스 테스트 기법

1. 동등 분할(균등 분할, 동치 분할): 입력 조건을 중심으로 입력 조건에 타당한 값과 그렇지 못한 값을 설정하여 각 동등 클래스 내의 임의의 값을 테스트 사례로 선정한다.

2. 경계값 분석: 중간값보다는 경계값에서 오류가 발생될 확률이 높다는 점을 이용하여 입력 조건의 경계값에서 테스트 사례를 선정한다.

3. 원인-결과 그래프 기법: 외부 명세에 의한 입련 조건과 그 입력으로 발생되는 출력을 논리적으로 연결시킨 그래프로 표현하여 테스트 사례를 유도해 낸다.

4. 오류 추측 기법: 감각과 경험으로 찾아내는 일련의 보충적 테스트 기법이다.

5. 비교 검사 기법: 똑같은 기능의 소프트웨어를 개발하여 비교한다.

 

화이트박스 테스트

: 프로그램 내의 모든 논리적 구조를 파악하거나, 경로들의 복잡도를 계산하여 테스트 사례를 만든다.

: 소프트웨어 형상의 구조를 이용한다.

 

화이트박스 테스트 기법

1. 기초 경로 테스트(구조 테스트, 복잡도 테스트): McCabe에 의해 제안되었으며, 상세 설계 및 원시 코드를 기초로 논리 흐름도를 작성하며, 프로그램의 논리적 복잡도를 측정한다.

2. 루프 테스트: 프로그램 반복 구조에 국한해서 실시하는 기법이다. 발견 가능한 오류는 초기화 결함, 인덱싱 및 증가 결함, 루프의 경계선에서 나타나는 경계 결함 등

3. 조건 테스트: 모듈 내에 포함된 논리적 조건을 검사하여 테스트 사례를 설계하는 방법이다. 

4. 데이터 흐름 테스트: 변수 정의의 위치와 변수들의 사용에 따라 검사 경로를 선택하는 방법이다.

 

화이트박스 테스트 검증 기준

- 문장 검증 기준: 모든 구문

- 분기 검증 기준: 모든 조건

- 조건 검증 기준: 모든 조건문의 참, 거짓

- 분기/조건 기준: 모든 조건과 조건문의 참, 거짓

 

 

02. 애플리케이션 통합 테스트와 성능 개선

 

결함 관리: 테스트 수행 후 발생한 결함들이 다시 발생하는 것을 방지하기 위해 결함을 추적하고 관리하는 활동

 

결함 관리 상용 도구

- HP QC: HP의 품질관리 프로그램

- IBM Clear Quest: IBM에서 제작

- JIRA: 아틀래시안에서 제작

 

결함 관리 오픈 소스 도구

- Bugzilla

- Trac

- Mantis

 

테스트 자동화 도구: 테스트에 포함되는 여러 과정들을 자동적으로 지원하여 생산성 및 일관성을 향상시킬 수 있다.

- QTP: HP의 툴

- Rational Robot: IBM의 툴

- Selenium: 오픈소스 웹 자동화 툴. 모든 종류의 웹 브라우저들을 지원

 

테스트 장치 구성요소 

- 테스트 드라이버

- 테스트 스텁

- 테스트 슈트

- 테스트 케이스

- 테스트 스크립트

- 목 오브젝트

 

통합 테스트

: 단위 테스트(모듈 테스트)가 끝난 모듈들을 하나로 결합하여 시스템으로 완성하는 과정에서의 테스트이다.

: 시스템을 구성하는 모듈 사이의 인터페이스와 결합을 테스트하며, 시스템 전체의 기능과 성능을 테스트한다.

1. 빅뱅 통합(비점진적 통합, 차분 통합 검사): 모든 모듈이 한꺼번에 결합되어 하나로 테스트

2. 하향식 통합: 검사 제어 소프트웨어로 Stub(스텁)을 사용. 새로운 오류가 발생하지 않음을 보장하기 위해 회귀 테스트를 실시한다.

3. 상향식 통합: 검사 제어 소프트웨어로 Driver(드라이버)를 사용

4. 연쇄식 통합: 중심을 이루는 기능을 처리하는 모듈의 최소 집합이 제일 먼저 구현되고 통합된다. 샌드위치형 통합으로 우선적으로 통합을 시도할 중요 모듈을 선정하여 중요 모듈로부터 쌍방향으로 통합을 진행한다.

 

애플리케이션 성능: 최소한의 자원을 사용하여 사용자가 요구한 많은 기능을 신속하게 처리할 수 있는 정도

 

애플리케이션의 성능을 측정하기 위한 지표

- 처리량

- 응답 시간: 요청/응답

- 경과 시간: 입/출력

- 자원 사용률

 

성능 테스트 도구

- JMeter: 다양한 프로토콜 지원

- LoadUI: 서버 모니터링을 지원하는 UI 강화

- OpenSTA: HTTP, HTTPS 지원

 

성능 테스트 종류

1. 부하 테스트: 부하를 순차적으로 증가시키면서 비정상 상태가 발생하는 임계점을 찾아낸다.

2. 스트레스 테스트: 시스템의 최고 성능 한계를 측정하기 위한 테스트

3. 스파이크 테스트: 갑자기 부하가 증가하거나 줄어들었을 때 정상적인 반응하는지 확인하기 위한 테스트

4. 내구성 테스트: 긴 시간동안 테스트 진행

 

소스 코드 최적화

: 실행 시간이나 메모리를 줄이는 것

: 크기가 작고 보다 빠르며 기억장소 요구량이 작은 코드로 개선하는 것

 

코드 리팩토링

: 내부 구조를 변경하는 것으로 프로그램의 가치를 상승시킨다.

: 코드 스멜(Code Smell)을 고치고 다듬는 과정이다.

 

코드 스멜: 읽기 어려운 코드, 중복된 로직과 복잡한 조건을 가진 프로그램

 

외계인 코드: 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램

 

소스 코드 품질 분석 도구

: 소프트웨어 검증, 테스팅 등의 품질 관련한 부분이 중요해지고 있어 사용하게 된다.

- 정적 분석 도구

1. cppcheck: C++

2. pmd: 결함 유발 코드

3. checkstyle: Java

- 동적 분석 도구

1. Valgrind: 메모리, 스레드 결함

2. Avalanche: 결함, 취약점 분석

 

 

 

 

 

참고. 2023 에듀윌 정보처리기사 실기 기본서

 

 

 

01. SQL 기본

 

SQL(Structured Query Language, 구조적 질의어)

: IBM에서 개발된 데이터베이스에 사용되는 언어이다.

 

SQL의 종류

1. 데이터 정의어(DDL): CREATE, DROP, RENAME, ALTER, TRUNCATE...

2. 데이터 조작어(DML): INSERT, UPDATE, DELETE, SELECT...

3. 데이터 제어어(DCL): GRANT, REVOKE...

4. 트랜잭션 제어어(TCL): COMMIT, ROLLBACK, SAVEPOINT...

 

기본 테이블: 정보 저장의 기본 형태가 2차원 구조인 릴레이션

 

뷰 테이블: 하나 이상의 테이블로부터 유도되어 만들어진 가상 테이블

 

임시 테이블: 트랜잭션별로 데이터를 저장하고 처리할 수 있는 테이블

 

DDL(Data Definition Lanuage, 데이터 정의어)

: 스카마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 제어하는데 사용한다.

: 정의된 내용은 메타 데이터가 되어 시스템 카탈로그(=시스템 DB, 시스템 목록)에 저장된다.

 

1. CREATE문

: 정의에 사용

- 테이블 정의 형식

NOT NULL: 값을 반드시 입력

UNIQUE: 중복 값 허용하지 않음

PRIMARY KEY: 기본키 지정

FOREIGN KEY: 외래키 지정

CHECK: 특정 조건에 맞을 경우에만 입력

DEFAULT: 값을 입력하지 않으면 자동으로 입력되는 기본값

CASCADE: (참조되는 테이블에서 데이터를 삭제하거나 수정하면,) 참조하는 테이블에서도 삭제와 수정이 같이 이루어진다. 👉🏻 연쇄

SET NULL: (참조되는 테이블에서 데이터를 삭제하거나 수정하면,) 참조하는 테이블의 데이터가 NULL로 변경된다.

NO ACTION: (참조되는 테이블에서 데이터를 삭제하거나 수정하면,) 참조하는 테이블의 데이터는 변경되지 않는다.

SET DEFAULT: (참조되는 테이블에서 데이터를 삭제하거나 수정하면,) 참조하는 테이블의 데이터는 필드의 기본값으로 설정된다.

RESTRICTED: 참조하는 테이블에 데이터가 남아 있으면, 참조되는 테이블의 데이터를 삭제하거나 수정할 수 없다. 👉🏻 제한

 

2. ALTER문

: 기존 테이블에 대해 새로운 열의 첨가, 값의 변경, 기존 열의 삭제 등에 사용

 

3. DROP문

: 제거시 사용 (전체 삭제)

 

DML(Data Manipulation Language, 데이터 조작어)

: 원하는 데이터를 검색, 수정, 삽입, 삭제할 수 있다.

 

1. SELECT: 검색문

SELECT -
FROM -
(WHERE -);

- GROUP BY: 정렬된 그룹

- HAVING: 그룹에 대한 조건 제시

- ORDER BY: 정렬 수행 (ASC는 오름차순, DESC는 내림차순)

- 부분 매치: % 는 하나 이상의 문자, _ 는 단일 문자, LIKE 는 '=' 를 의미한다.

- DISTINCT: 중복 제거

- 집계 함수: COUNT, SUM, AVG, MAX, MIN

- > ALL 구문: 모든 것보다 큰

- > SOME 구문: 하나 이상보다 큰

- EXISTS: 특정 튜플이 존재하는가를 검색

- 비교 연산자: BETWEEN A AND B

 

2. INSERT: 삽입문

INSERT -
INTO -
VALUES();

 

3. UPDATE: 갱신문

UPDATE -
SET -
(WHERE -);

- 새로 변경되는 값은 산술식이나 NULL이 될 수 있다.

- WHERE문이 없으면 전체 갱신한다.

- 10% 인상 👉🏻 *1.1

 

4. DELETE: 삭제문

DELETE FROM table (WHERE -);

- 만일 외래키를 가지고 있는 테이블이 있다면 그 테이블에서도 같은 삭제 연산이 이루어져야 한다. 그렇지 않으면 참조 무결성이 유지되지 않기 때문이다.

- WHERE문이 없다면 전체 행 삭제인데, DROP문과 달리 스키마는 지워지지 않는다.

 

DCL(Date Control Language, 데이터 제어어)

1. GRANT: 권한 부여

GRANT 부여할 권한 유형 TO User [Role_name];

GRANT/ADMIN Option: 실행 권한을 받은 사용자가 다시 다른 사용자에게 실행 권한을 부여해 줄 수 있게 해주는 옵션이다.

- With GRANT Option: REVOKE 시 다른 사용자에게 부여된 권한도 함께 회수된다.

- With ADMIN Option: REVOKE 시 다른 사용자에게 부여된 권한은 함께 회수되지 않는다. -> ADMIN이 더 강력하다(?)

 

2. REVOKE: 권한 회수

REVOKE 회수할 권한 유형 FROM User;

 

 

02. SQL 응용

 

뷰(View)

: 하나 이상의 테이블로부터 유도되어 만들어진 가상 테이블

 

뷰의 특징

- DBA는 보안 측면에서 뷰를 활용할 수 있다.

- 뷰는 CREATE문에 의해 정의되며, SYSVIEWS(모든 뷰에 대한 정보를 한 행으로 관리)에 저장된다.

- 한 번 정의된 뷰는 변경할 수 없으며, 삭제한 후 다시 생성해야 한다.

CREATE VIEW -
	AS SELECT문;
    
DROP VIEW -;

 

내장 SQL(Embedded SQL)

: COBOL, C와 같은 호스트 프로그래밍 언어로 작성되는 응용 프로그램 속에 내장해서 사용할 수도 있다.

: 응용 프로그램 속에 내장해서 사용하는 SQL이다.

 

커서(Cursor)

:응용 프로그램의 삽입 SQL에만 사용되는 새로운 객체이다.

- DECLARE: 커서와 관련된 SQL문 정의

- OPEN: 커서를 실행 가능하게 한다.

- FETCH: 커서를 가리키는 결과 테이블의 한 튜플을 호스트 변수로 가져온다.

- CLOSE: 커서를 작업 종료한다.

 

동적 SQL

: 필요한 SQL문을 동적으로 만들어서 바인드하고 실행한다.

- PREPARE: 예비 컴파일하고, 바인드하여 기계어 코드를 생성한다.

- EXECUTE: 기계어 코드를 실제로 실행한다.

 

트랜잭션

: 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미

: 논리적 작업의 단위, 일련의 연산 집합

 

트랜잭션의 성질

1. 원자성(Atomicity): 트랜잭션 연산은 데이터베이스에 모두 반영되든지 아니면 모두 반영되지 않아야 한다. COMMIT과 ROLLBACK 명령어에 의해 보장받는다.

- COMMIT: 데이터 변경 사항을 최종 반영

- ROLLBACK: 이전 상태로 되돌리는 명령

2. 일관성(Consistency): 데이터베이스의 상태가 트랜잭션 수행 전과 트랜잭션 수행 후 모두 같아야 한다.

3. 격리성(독립성, Isolation): 어느 하나의 트랜잭션 실행 중에는 다른 트랜잭션의 연산이 끼어들 수 없다.

4. 영속성(지속성, Durability): 트랜잭션의 실행을 성공적으로 끝내면 그 결과를 어떠한 경우에라도 보장받는다.

 

회복(Recovery)

: 여러가지 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업이다. 덤프와 로그를 이용한다.

 

장애의 유형

1. 트랜잭션 장애

2. 시스템 장애: 하드웨어 장애

3. 미디어 장애: 디스크 헤드 붕괴나 고장으로 인해 저장 장치의 데이터베이스 일부 또는 전부가 손상된 상태

4. 행동 장애: 데이터를 발견하지 못했거나 연산 실패이면 그 행동을 철회

 

회복의 기본 원리: 정보의 중복

1. 복사 및 덤프: 아카이브(장기적인 데이터 저장소)

2. 로그 또는 저널: 갱신된 속성의 옛 값과 새 값

 

회복 연산자

1. REDO: 아카이브 사본+로그 👉🏻 회복된 데이터 베이스 (DB 회복) 장애 발생 전의 데이터베이스로 복구시키는 재실행 방법

2. UNDO: 로그+후향(Backward) 취소 연산 👉🏻 시작 상태 (장애 발생 전으로 복귀) 변경연산을 취소하는 방법

 

시스템 고장 시 회복 기법

1. 지연 갱신: 트랜잭션이 완료되기 전까지 DB에 기록하지 않는 기법. OUTPUT 연산 지연

2. 즉시 갱신: 트랜잭션 수행 중 갱신 결과를 바로 DB에 반영하는 기법. REDO, UNDO 모두 이용

3. 체크포인트: 일정 시간 간격으로 로그를 유지하며 만들어 놓은 것으로, 체크포인트 이후 COMMIT된 트랜잭션은 REDO 작업을 수행한다.

4. 그림자 페이징 기법: 현재 테이블과 현재 테이블의 복사본인 그림자 테이블을 유지한다. 그림자 테이블을 비휘발성 저장장치에 저장한다.

 

병행 제어

: 다중 사용자 환경에서는 여러 개의 트랜잭션이 섞여서 실행되는데, 이는 갱신 분실 등의 문제를 야기할 수 있다. 이 때 발생하는 문제를 해결하기 위해 병행 제어를 한다.

: 대표적인 병행 제어 방법으로 2단계 로킹(Locking) 방법이 있다.

 

병행 제어를 하지 않을 때의 문제점

1. 갱신 분실

2. 모순성

3. 연쇄 복귀

 

주요 병행 제어 방법

1. 기본 로킹 방법: lock과 unlock 연산을 통해 트랜잭션의 데이터 아이템을 제어한다. 하나의 트랜잭션만이 lock을 걸고 unlock을 할 수 있다.

2. 확장된 로킹 방법

- 공유 로크(Lock-S): 참조만 하는 경우 읽기만을 허용하여 다른 트랜잭션도 접근 가능

- 독점 로크(Lock-X): 읽기와 쓰기를 허용함으로써 다른 트랜잭션의 접근을 불허

3. 2단계 로킹 규약: 모든 트랜잭션이 2단계 로킹 규약을 준수하면 직렬 가능성을 갖는다.(트랜잭션을 병행 처리한 결과가 직렬 처리한 결과와 같아지는 것)

- 확장: unlock을 수행할 수 없다.

- 축소: lock을 수행할 수 없다.

 

트리거(Trigger)

: 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL이다.

: 데이터베이스의 무결성을 유지하기 위함으로 ECA 규칙이라고도 한다.

 

트리거 구성 요소

1. 이벤트

2. 조건 제약

3. 실행 내용

 

트리거 타입

1. 로우(Row) 및 문장

- 로우: 삽입, 갱신, 삭제가 발생하는 로우마다 트리거의 내용이 실행되는 타입이다.

- 문장: 로우의 개수에 상관없이 문장 단위로 한 번만 실행되는 타입

2. BEFORE 및 AFTER

- BEFORE: 조건 문장이 실행되기 전에 트리거의 내용이 실행되는 타입

- AFTER: 조건 문장이 실행된 후에 트리거의 내용이 실행되는 타입

 

인덱스(Index)

: <탐색 키, 레코드에 대한 포인터>로 이루어진다.

: DBMS가 파일 내의 특정 레코드들을 빠르게 찾을 수 있도록 하는 데이터 구조이므로 인덱스를 통하여 질의를 수행하면 응답 시간이 향상된다. = DBMS 구성 요소로 데이터베이스에 저장된 자료를 더욱 빠르게 조회하기 위해 사용된다.

 

인덱스의 종류

1. 기본 인덱스: 탐색 키가 데이터 파일의 기본 키인 인덱스

2. 클러스터링 인덱스: 탐색 키 값에 따라 정렬된 데이터 파일에 대해 정의된다. 탐색 키 값을 갖는 첫 번째 레코드 주소를 가리키며 범위 질의에 유용하다.

3. 보조 인덱스: 탐색 키 값에 따라 정렬되지 않은 데이터 파일에 대해 정의된다.

4. 희소 인덱스: 일부 키 값에 대해서만 인덱스에 엔트리를 유지하는 인덱스. 각 블록마다 한 개의 탐색 키 값이 인덱스 엔트리에 포함된다.

5. 밀집 인덱스: 각 레코드의 키 값에 대해서 인덱스에 엔트리를 유지하는 인덱스

 

다단계 인덱스: 다단계 인덱스에서 가장 상위 단계 인덱스를 마스터 인덱스라고 하며 주기억장치에 상주할 수 있다. 각 단계는 하나의 순서 파일이며 B+ 트리를 사용한다.

 

CRUD 분석

: 데이터베이스 테이블에 변화를 주는 트랜잭션의 CRUD(Create, Read, Update, Delete) 연산에 대해 CRUD 매트릭스를 작성하여 분석하는 것

 

CRUD 연산의 우선순위

: C > D > U > R

 

ETL(Extraction, Transformation, Loading)

: 데이터 이동 및 변환 절차와 관련된 용어이며, 추출/변환/적재로 구성된다.

: 데이터 웨어하우스, ODS(운영 데이터 스토어), Data Mart 등에 대한 데이터 적재 작업의 핵심 구성 요소이다.

 

데이터 웨어하우스(Data Warehouse)

: 의사결정 지원을 위한 주체 지향의 통합적이고, 영속적이면서 시간에 따라 변하는 값이 유지되는 데이터 집합이다.

: 여러 소스의 데이터를 수집해 하나의 통일된 스키마를 이용하여 단일 사이트에 저장한 정보 저장소 또는 정보 아카이브이다.

: 데이터에 대한 통합된 단일 인터페이스를 제공한다.

 

데이터 웨어하우스 구축 단계

- 추출

- 여과

- 검사

- 합병

- 집계

- 적재

- 기록

 

OLAP(On-Line Analytical Processing)

: 대규모의 다차원 데이터를 동적으로 온라인에서 분석하고, 통합하고, 보고서를 만드는 과정이다.

: 다차원 배열로 저장되어 있는 것으로 취급하고 처리하는 것이 보통이다.

 

OLAP 특징

- 롤 업

- 드릴다운

- 피벗팅

- 슬라이싱

- 다이싱

 

 OLAP의 종류

1. ROLAP: 관계 데이터베이스를 이용하여 테이블에 데이터를 저장

2. MOLAP: 다차원 배열을 이용해 데이터를 저장

 

데이터 마이닝(Data Mining)

: 대량의 데이터로부터 관련된 정보를 발견하는 과정으로, 지식 발견(Knowledge Discovery) 과정이다.

: 체계적이고 자동적으로 데이터로부터 통계적 규칙(Rule)이나 패턴(Pattern)을 찾을 수 있다.

 

데이터 마이닝의 종류

- 분류

- 연관 규칙: 어떤 속성들이 가지는 값이 자주 나타나는 조건을 보여주는 것. 지지도와 신뢰도가 같이 수반될 때 연관성 법칙으로서의 의미가 제대로 파악될 수 있다.

- 순차 상관 관계

 

 

 

 

 

 

참고. 2023 에듀윌 정보처리기사 실기 기본서

 

 

01. 운영체제 기초 활용

 

운영체제: 컴퓨터의 제한된 각종 자원을 효율적으로 관리/운영함으로써 사용자에게 편리성을 제공하고자 하는 인간과 컴퓨터 사이의 인터페이스를 위한 시스템 소프트웨어이다.

 

운영체제의 구성

1. 제어 프로그램(Control Program): 컴퓨터 전체의 동작 상태를 감시/제어하는 기능을 수행하는 프로그램.

- 감시 프로그램

- 데이터 관리 프로그램

- 작업 관리 프로그램

- 통신 제어

2. 처리 프로그램(Processing Program): 제어 프로그램의 감시 하에 특정 문제를 해결하기 위한 데이터 처리를 담당하는 프로그램.

- 언어 번역 프로그램

- 서비스 프로그램

- 사용자 프로그램

 

운영체제의 분류

단일 프로그래밍 시스템: 하나의 실행 프로그램이 컴퓨터 시스템 전체를 독점적으로 사용하도록 설계된 시스템

다중 프로그래밍 시스템: 독립된 2개 이상의 프로그램이 동시에 수행되도록 스케줄링하는 시스템

다중 처리 시스템: 2개 이상의 처리기가 자신에게 맡겨진 일을 동시에 수행하도록 하는 시스템

일괄 처리 시스템: 사용자들의 작업 요청을 일정한 분량이 될 때까지 모아서 한꺼번에 처리하는 시스템

시분할 시스템(TSS: Time Sharing System): 라운도 로빈(RR) 방식이라고도 불리며, 스케줄링 및 다중 프로그램 방법을 이용하여 사용자가 컴퓨터와 대화식으로 사용하도록 각 사용자에게 컴퓨터 이용 시간을 분할하는 방법

분산 처리 시스템: 여러 개의 처리기가 하나의 작업을 서로 분담하여 처리하는 방식의 시스템

실시간 처리 시스템: 데이터가 발생하는 즉시 처리하는 시스템

 

버퍼링(Buffering)스풀링(Spooling)입/출력 장치의 느린 속도를 보완하기 위해 이용되는 방법이다.

버퍼링은 한 개의 작업, 스풀링은 여러 개의 작업을 수행한다는 차이점이 있다.

 

프로세스: 컴파일된 프로그램이 메모리에 로드되어 실행되는 일련의 명령어들의 집합이다.

 

프로세스 제어 블록(PCB: Process Control Block): 작업 제어 블록이라고도 하며, 프로세스를 관리하기 위해 유지되는 데이터 블록 또는 레코드의 데이터 구조이다.

 

프로세스 상태도

생성(New) 👉🏻 준비(Ready) 👉🏻 실행(Run) 👉🏻 종료(Exit) / 대기(Wait)

출처 IT위키

 

프로세스 상태 전환

Dispatch(디스패치): 준비 상태 👉🏻 실행 상태. 

Timer Runout: 실행 상태 👉🏻 준비 상태

Block: 실행 상태 👉🏻 대기 상태

Wake Up: 대기 상태 👉🏻 준비 상태

 

스레드(Thread): 프로세스보다 작은 단위를 의미. 문맥 교환(Context Swiching)의 부담을 줄인다.

 

병행 프로세스

: 프로세스 여러 개가 동시에 수행 상태에 있는 것

상호 배제(공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘)와 동기화

1. 임계 영역(Critical Section): 두 개 이상의 프로세스들이 공유할 수 없는 자원

2. 세마포어(Semaphore): Dijkstra에 의해 제안되었으며, 상호 배제를 해결하기 위한 새로운 동기 도구.

3. 모니터(Monitor): 상호 배제를 구현하기 위한 고급 동기화 도구. 세마포어와 비슷한 역할

 

프로세스 스케줄링 방법

- 비선점 스케줄링: 다른 프로세스가 현재 프로세스를 중단시킬 수 없는 기법

ex) FCFS, SJF, HRN, 기한부

- 선점 스케줄링: 다른 프로세스가 현재 프로세스를 중단시킬 수 있는 기법

ex) RR, SRT, MLQ, MFQ

 

1. FCFS(First Come First Service)

: 대표적인 비선점형 스케줄링 기법. 대기 리스트에 가장 먼저 도착한 프로세스의 순서대로 CPU를 할당한다.

 

2. SJF(Shortest Job First)

: 대기 리스트의 프로세스들 중 작업이 끝나기까지의 실행 시간 추정치가 가장 작은 프로세스에 CPU를 할당한다.

 

3. HRN(Highest Response Next)

: SJF의 단점인 실행 시간이 긴 프로세스와 짧은 프로세스의 지나친 불평등을 보완한 기법. 우선순위 계산식에서 큰 값을 가진 프로세스 순으로 스케줄링한다.

: 우선순위 = (대기 시간 + 실행 시간) / 실행 시간

 

4. RR(Round Robin, 라운드 로빈)

: FCFS를 선점형 스케줄링으로 변형한 기법. 각각의 프로세스에게 동일한 시간 할당량을 부과하여 수행하는 기법.

: 대기 리스트에 들어온 순서대로 처리하지만, 시간 할당량이 있어 그 시간을 모두 소비하면 대기 리스트의 맨  뒤로 가서 대기한다.

 

5. SRT(Shortest Remaining Time)

: SJF를 선점형 스케줄링으로 변형한 기법. 대기 리스트의 모든 프로세스의 잔여 실행 시간을 실시간으로 알아야 하므로, 오버헤드가 증가한다.

 

6. MLQ(Multi-level Queue, 다단계 큐)

: 여러 종류의 대기 리스트를 준비하고 작업 유형별로 프로세스를 분류하여 대기 리스트에 입력한다.

: (프로세스 특성별 분류)

 

7. MFQ(Multi-level Feedback Queue, 다단계 피드백 큐)

: 여러 대기 리스트를 준비하고 수행 시간이 긴 프로세스일수록 낮은 우선순위를 갖도록 조정하여 낮은 우선순위 대기 리스트로 이동시키는 스케줄링 기법이다.

: (프로세스 처리 시간 기준 분류)

 

교착상태(Deadlock)

: 둘 이상의 프로세스가 자원을 공유한 상태에서 서로 상대방의 작업이 끝나기만을 무한정 기다리는 현상.

 

교착상태 4대 발생 조건

1. 상호 배제: 한 번에 하나의 프로세스만이 자원을 사용할 수 있다.

2. 점유와 대기: 어느 하나의 프로세스가 자원을 점유하면서 다른 프로세스에게 할당된 자원을 차지하기 위해 대기해야 한다.

3. 비선점: 프로세스가 사용 중인 공유 자원을 강제로 빼앗을 수 없다.

4. 환형 대기(순환 대기): 프로세스들에게 우선순위를 부여하여 공유 자원 할당의 사용 시기와 순서를 융통성있게 조절한다.

 

기억장치 배치 전략

- 최초 적합(First Fit): 첫 번째 가용공간에 배치

- 최적 적합(Best Fit): 가장 알맞은 가용공간에 배치

- 최악 적합(Worst Fit): 가장 큰 가용공간에 배치

 

기억장치 교체 전략

1. FIFO(First In First Out): 가장 먼저 입력되었던 페이지를 교체

2. LRU(Least Recently Used): 주기억장치에서 가장 오랫동안 사용되지 않은 페이지를 교체

3. OPT(OPTimal replacement, 최적화 교체): 앞으로 가장 오랫동안 사용하지 않을 페이지 교체

4. LFU(Least Frequently Used): 주기억장치에서 참조 횟수가 가장 적은 페이지 교체

 

5. MFU(Most Frequently Used): 주기억장치에서 참조 횟수가 가장 많은 페이지 교체

6. NUR(Not Used Recently): 주기억장치에서 최근에 사용되지 않은 페이지 교체

7. SCR(Second Change Replacement, FIFO의 2차 기회 교체): 주기억장치에서 가장 오래 있었던 페이지 중 자주 참조된 페이지 교체를 방지

8. 무작위 페이지 교체(Random Page Replacement): 주기억장치에서 페이지 교체가 가능한 임의의 페이지와 페이지를 교체

 

가상기억장치

: 주기억장치보다 큰 용량의 프로그램을 실행할 수 있는 기억장치로, 주기억장치 공간의 확대가 주 목적

- 페이징(Paging) 기법: 모두 같은 크기의 블록으로 실행. 일정한 크기를 가진 블록을 페이지(page)라고 한다.

- 세그먼테이션(Segmentation) 기법: 프로그램 크기를 다양한 크기, 즉 가변 길이의 논리적 단위로 나눈 후 주기억장치에 적재하여 실행하는 방법이다.

- 페이지 부재(PF: Page Fault): 프로세서 실행 시 주기억장치에 참조할 페이지가 없는 현상이다.

- 스레싱(Thrashing): 프로세스가 수행되는 시간보다 페이지 이동에 시간이 더 많아지는 현상이다.

- 지역성(Locality): 시간 지역성/공간 지역성

 

디스크 스케줄링

1. FCFS(First Come First Service): 입출력 요청 대기 큐에 들어온 순서대로 서비스를 하는 기법

2. SSTF(Shortest Seek Time First): 탐색 거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스하는 기법

3. SCAN: SSTF가 갖는 탐색 시간의 편차를 해소하기 위한 기법으로, 현재 진행 중인 방향으로 가장 짧은 탐색 거리에 있는 요청을 먼저 서비스한다.

4. LOOK: SCAN 기법을 개선한 기법

5. C-SCAN: 항상 바깥쪽에서 안쪽으로 움직이면서 가장 짧은 탐색 거리를 갖는 요청을 서비스하는 기법. 안쪽에 더 이상의 요청이 없으면 헤드는 가장 바깥쪽의 끝으로 이동한 뒤 다시 안쪽으로 이동하면서 요청을 서비스한다.

6. C-LOOK: C-SCAN 기법을 개선한 기법으로, 트랙의 바깥쪽에서 안쪽 방향의 마지막 입출력 요청을 처리한 다음 디스크의 끝까지 이동하는 것이 아니라 다시 가장 바깥쪽 트랙으로 이동한다.

7. N-step SCAN: SCAN 기법을 개선한 기법. 무한 대기 발생 가능성을 제거한 것

8. SLTF(Shortest Latency Time First): 섹터 큐잉(Sector Queuing)이라고도 한다. 디스크 회전 시간의 최적화를 위한 기법으로 가장 짧은 회전 지연 시간의 섹터 입출력 요청을 먼저 처리한다.

9. Eschenbach: 탐색 시간과 회전 지연 시간을 최적화하려는 최초의 기법. 항공 예약 시스템을 위해 개발되었다.

 

유닉스 시스템: 1960년대 후반에 AT&T사의 Bell 연구소에서 개발한 Multics라는 이름을 가진 운영체제가 뿌리라고 할 수 있다.

 

유닉스의 특징

- 대화식 운영체제(Shell)

- 멀티태스킹

- 멀티유저 환경

- 계층적 파일 시스템

- 이식성

- 유연성

- 호환성

- 보안 및 보호 기능 제공

 

유닉스 시스템의 3가지 핵심 구조

1. 커널(Kernel): 메인 메모리에 상주하여 컴퓨터 자원을 관리한다.

2. 쉘(Shell): 유닉스 시스템과 사용자 사이의 인터페이스를 제공하는 것

3. 파일 시스템(File System): 계층적인 트리구조를 의미. 시스템 관리를 위한 기본 환경을 제공한다

부트 블록/슈퍼 블록/아이노드(I-node)/데이터 블록

* 아이노드(I-node): 유닉스에서 각 파일이나 디렉터리에 대한 모든 정보를 가지고 있는 구조체이다.

 

파일 디스크립터(File Descriptor): 프로세스가 파일을 다룰 때 사용하는 개념

 

유닉스 시스템 계정 설정과 관련된 파일

/etc/passwd: 로그인과 계정에 관련된 권한 관리를 위한 파일

/etc/shadow: 사용자의 비밀번호(암호) 영역을 담당하는 파일로, 슈퍼유저(root)만이 접근할 수 있는 파일

/etc/group: 로그인 사용자의 그룹 권한 관리를 위한 파일

 

umask: 파일 권한 설정chmod: 접근 모드 변경SUID, SGID: 특수 권한 파일 관리

 

미들웨어: 클라이언트와 서버를 연결하여 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 하거나 많은 프로세스들에게 어떤 서비스를 사용할 수 있도록 연결해 주는 소프트웨어

ex) DB 미들웨어/원격 프로시저 호출(RPC)/메시지 지향 미들웨어(MOM)/트랜잭션 처리(TP) 모니터

 

 

02. 데이터베이스 기초 활용

 

데이터: 관찰이나 측정을 통해서 수집된 사실이나 값(수치, 스트링)정보: 자료를 가공하여 얻은 결과정보시스템: 한 기관을 위해 데이터를 수집, 조작, 저장하고 정보를 생성, 분배하는 수단

 

데이터베이스: 어느 한 조직에서 다수의 응용 시스템들이 공용으로 사용하기 위해 통합, 저장된 운영 데이터의 집합이다.

 

하둡(Hadoop): 대량의 자료를 처리할 수 있는 큰 컴퓨터 클러스터에서 동작하는 분산 응용 프로그램을 지원하는 프리웨어 자바 소프트웨어 프레임워크이다. 오픈 소스를 기반으로 한 분산 컴퓨팅 플랫폼

 

데이터베이스의 특징

1. 실시간 접근성2. 계속적인 변화3. 동시 공유4. 내용에 따른 참조

 

데이터베이스의 논리적 구성

- 개체(Entity)- 속성(Attribute)- 관계(Relationship)

 

DBMS(DataBase Management System, 데이터베이스 관리 시스템)

: 파일 시스템의 데이터 종속성과 중복성의 문제를 해결하기 위해 제안된 시스템.

 

3단계 데이터베이스 스키마

1. 외부 스키마: 가장 바깥쪽 스키마로, 전체 데이터 중 사용자나 응용 프로그래머가 사용하는 한 부분에서 본 구조2. 개념 스키마: 논리적 관점에서 본 구조로 전체적인 데이터 구조3. 내부 스키마: 물리적 저장 장치 관점에서 본 구조

 

데이터 사전(Data Dictionary), 시스템 카탈로그(System Catalog)

: 시스템 자신이 필요로 하는 스키마 및 여러 가지 객체에 관한 정보를 포함하고 있는 시스템 데이터베이스: 데이터베이스에 포함되는 데이터 객체에 대한 정의나 명세에 대한 정보를 유지 관리한다. 저장된 정보를 메타 데이터라고도 한다.

 

데이터 모델(Data Model): 현실 세계의 데이터 구조를 컴퓨터 세계의 데이터 구조로 기술하는 논리적 구조

 

데이터 모델링: 현실 세계를 데이터베이스에 표현하는 중간 과정

 

데이터 모델의 구성 요소 S O C

- 구조(Structure)

- 연산(Operation)

- 제약 조건(Constraint)

 

개체(Entity)

: 단독으로 존재하며 다른 것과 구분되는 객체: 속성(애트리뷰트)들의 집합

 

관계(Relationship)

: 인스턴스 사이의 대응성, 즉 사상(Mapping)을 의미한다 (1:1, 1:N, N:M)

 

개체-관계 모델(E-R Model)

: 현실 세계의 개념적 표현으로서 개체 타입과 관계 타입을 기본 개념으로 현실 세계를 개념적으로 표현하는 방법. 1976년 피터 첸(P. Chen) 제안

개체 타입 - 사각형

관계 타입 - 마름모

속성 - 타원

연결 - 링크

 

관계 데이터 구조

1. 릴레이션(Relation): 정보 저장의 기본 형태가 2차원 구조의 표 또는 테이블로 표현되는 모델

 

2. 도메인(Domain): 애트리뷰트가 취할 수 있는 값들의 집합3. 속성(Attribute): 테이블의 각 열 - (차수(Degree), 가로)4. 튜플(Tuple): 한 행을 구성하는 속성들의 집합 - (기수(Cardinality), 세로)5. 차수(Degree): 속성(애트리뷰트)의 개수6. 기수(Cardinality, 대응수): 튜플의 개수

 

릴레이션 특성

1. 튜플의 유일성2. 튜플의 무순서성3. 애트리뷰트의 무순서성4. 애트리뷰트의 원자성

 

키의 종류

1. 슈퍼키: 유일성은 만족시키지만 최소성은 만족시키지 못하는 키2. 후보키: 유일성과 최소성을 모두 만족하는 키. 각 튜플을 유일하게 식별할 수 있는 속성이나 속성의 조합들3. 기본키: 개체 식별자로 후보키 중 하나를 선택한 키4. 대체키: 후보키 중 기본키를 제외한 나머지 키5. 외래키: 다른 테이블을 참조하는 데 사용되는 속성

 

이상(Anomaly) 현상

: 릴레이션 조작 시 데이터들이 불필요하게 중복되어 예기치 않게 발생하는 곤란한 현상이다.

 

이상 현상의 구분

1. 삽입 이상: 원하지 않는 정보를 강제 삽입해야 하는 경우와 불필요한 데이터가 함께 삽입되는 경우이다.

2. 삭제 이상: 튜플을 삭제함으로써 유지되어야 하는 정보까지도 연쇄 삭제되는 정보의 손실이다.

3. 갱신 이상: 중복된 튜플 중에서 일부의 속성만 갱신시킴으로써 정보의 모순성이 생기는 현상이다.

 

관계대수

: 주어진 릴레이션 조작을 위한 연산의 집합으로, 연산자를 이용하여 표현되는 절차적(Procedural) 언어

1. 셀렉트(SELECT, σ): 릴레이션의 행 추출

2. 프로젝트(PROJECT, Π): 릴레이션의 속성값 추출(열 추출)

3. 조인(JOIN, ⋈): 두 관계로부터 관련된 튜플들을 하나의 튜플로 결합하는 연산

4. 디비전(DIVISION, ÷)

 

관계해석

: 원하는 릴레이션을 정의하는 방법을 제공하며 비절차적(Non-Procedural)인 언어

 

데이터베이스 설계: 사용자의 요구 조건에서부터 데이터베이스 구조를 도출해내는 과정요구 조건 분석 -> 개념적 설계 -> 논리적 설계 -> 물리적 설계 -> 구현 -> 운영 -> 감시 및 개선

 

물리적 설계 시 고려사항: 응답 시간, 저장공간의 효율화, 트랜잭션 처리도(처리 능력)

 

데이터 웨어하우스

: 의사결정 지원을 위한 주체 지향의 통합적이고 영속적이면서 시간에 따라 변하는 값이 유지되는 데이터의 집합. 여러 소스의 데이터를 수집해 하나의 통일된 스키마를 이용하여 단일 사이트에 저장한 정보 저장소 또는 정보 아카이브이다.

 

데이터 마트

: 데이터 웨어하우스와 유사한 개념이지만 그보다 작은 하위 집합으로 주로 구체적인 특정 부서나 프로젝트 등의 작은 단위의 분석을 요구할 때 사용하는 개념이다.

 

OLAP(On Line Analytical Processing)

: 대규모의 다차원 데이터를 동적으로 온라인에서 분석하고, 통합하고, 보고서를 만드는 과정

 

데이터 마이닝

: 대량의 데이터로부터 관련된 정보를 발견하는 과정, 즉 지식 발견(Knowledge Discovery)의 과정이다.

 

 

03. 네트워크 기초 활용

 

애드혹 네트워크(Ad-Hoc Network)

: 무선 기반의 이동단말기 간 연결망의 일종으로서, 라우터 장비가 따로 없고 이동 단말기 중 일부가 라우터 역할을 담당하는 네트워크이다.

 

교환망 종류

- 회선 교환망: 다른 사용자가 침범하지 못하며 전화망(PSTN)이 여기에 속한다.- 패킷 교환망: 여러 사용자가 데이터를 공유할 수 있다. 데이터를 패킷 조각으로 나누어 전송한다.

 

가상 회선 방식: 연결형 통신에서 주로 사용되는 방식이며 출발지와 목적지의 전송 경로를 미리 연결하여 논리적으로 고정한 후에 통신하는 방식데이터그램 방식: 비연결형 통신에서 주로 사용되는 방식이며  사전에 접속 절차를 수행하지 않고 헤더에 출발지에서 목적지까지의 경로 지정을 위한 충분한 정보를 붙여서 개별적으로 전달하는 방식

 

네트워크의 구성 형태

1. 성형2. 버스형3. 링형(루프형)4. 트리형(계층형)5. Mesh형(망형)

 

프로토콜

: 네트워크 상에 있는 디바이스 사이에서 정확한 데이터의 전송과 수신을 하기 위한 일련의 규칙들(Set of Rules)이다.

 

프로토콜의 구성 요소

1. 구문(Syntax)

2. 의미(Semantics)

3. 타이밍(Timing)

 

오류 제어- 후진 오류 수정 방식: 데이터의 재전송을 요구하는 방식으로, ARQ 방식이 대표적이다.- 전진 오류 수정 방식: 수신 측에서 오류의 검출과 교정이 가능한 방식으로, 해밍 코드가 대표적이다.

 

오류 검출 방식

1. 패리티 검사: 한 블록의 데이터 끝에 1비트를 추가하여 정보 전달 과정에서 오류 발생 여부를 검사2. 블록 합 검사: 이차원 패리티 검사, 가로와 세로로 두 번 관찰한다.3. CRC(Cyclic Redundancy Check): 전체 블록을 검사하며, 이진 나눗셈을 기반으로 한다.4. 해밍 코드 방식: 자기 정정 부호의 하나로 데이터 전송시 1비트의 오류를 정정할 수 있는 오류 정정 부호 방식이다. 전진 오류 수정 방식이라고도 한다.

 

TCP/IP 4계층

4 애플리케이션 계층3 트랜스포트 계층2 인터넷 계층1 네트워크 인터페이스 계층

 

인터넷: 서로 다른 컴퓨터 간에 신호 교환을 위해 TCP/IP라는 전송 규약을 사용하여 연결된 모든 네트워크의 집합체이다.

 

IP 주소: 인터넷에 연결된 컴퓨터가 실제로 인식하는 고유의 숫자로 표현된 주소

 

클래스별 주소 범위

A 0 ~ 127

 

B 128 ~ 191

 

C 192 ~ 223

 

도메인 이름: IP 주소는 숫자로 구성되어 있어 사용이 어려우므로 사용자가 알기 쉽게 문자를 이용해 표기하는 주소 방식

 

DNS: 도메인 주소를 숫자로 된 IP 주소로 변환시켜 주는 작업

 

URL(Uniform ResourceLocator): 인터넷에 있는 정보의 위치를 표기하기 위한 방법으로 웹에서 사용되는 표준 방법

 

서브 네트워크

: TCP/IP에서는 IP 주소를 효과적으로 사용하기 위해 서브 네트워크 방식을 사용한다.

 

 

 

 

 

참고. 2023 에듀윌 정보처리기사 실기 기본서

 

 

 

 

 

01. 프로그래밍 언어

 

프로그래밍 언어: 컴퓨터 시스템을 동작시키는 프로그램을 작성하기 위한 언어

 

추상화(Abstraction): 속성들의 일부분만을 가지고 주어진 작업이나 객체들을 필요한 정도로 묘사할 수 있는 방법을 지원하는 것.

 

추상화의 종류

1. 과정 추상화: 자세한 단계를 고려하지 않고, 상위 수준에서 수행 흐름만 먼저 설계한 것

2. 자료 추상화: 문자열, 수, 탐색 트리와 같은 계산의 주체가 되는 자료의 특성을 추상화한 것

3. 제어 추상화: 실행 순서의 수정을 위한 제어의 특성을 추상화한 것

 

언어의 변수명 표기법

1. 헝가리안 표기법(Hungarian Notation): 프로그래밍에서 변수나 함수의 이름 앞에 자료 표현(데이터 타입)을 명시하는 표기법

2. 카멜 표기법(Camel Case): 낙타의 등과 같은 모양을 빗댄 말로, 앞 단어를 제외한 첫 글자를 대문자로 표기하는 표기법

3. 파스칼 표기법(Pascal Case): 모든 단어의 앞 글자를 대문자로 시작하는 표기법

4. 스네이크 표기법(Snake Case): 모든 단어를 소문자로 표기하는 방법

 

구조적 프로그래밍: GOTO문을 가능한 사용하지 않고 프로그래밍하는 것

 

구조적 프로그래밍의 논리 구조

1. 순차 구조: 하나의 작업이 수행되고 순차적으로 다음 작업 진행

2. 선택 구조: 조건에 따라 하나의 작업을 선택해서 진행

3. 반복 구조: 조건에 따라 특정 작업 반복 처리

 

객체지향: 객체지향 기법에서 시스템 분석은 문제 영역에서 객체를 정의하고 정의된 객체들 사이의 상호 작용을 분석하는 것

 

객체지향의 기본 개념

1. 속성(Attribute): 객체가 가지고 있는 특성, 현재 상태(객체의 상태)를 의미

2. 메소드(Method): 객체가 어떻게 동작하는지를 규정하고 속성의 값을 변경시킴

3. 클래스(Class): 공통의 관계성, 동일한 의미를 가지는 객체들의 집합. 동일한 타입의 객체들의 메소드와 변수들을 정의하는 템플릿(Templete)

4. 객체(Object): 데이터와 그것을 사용하는 연산을 하나의 모듈로 구성한 것. 개별 자료구조와 프로세스들로 구성

5. 메시지(Message): 한 객체가 다른 객체의 모듈을 부르는 과정으로, 외부에서 하나의 객체에 보내지는 행위의 요구

6. 캡슐화(Encapsulation): 객체를 정의할 때 서로 관련성이 많은 데이터들과 이와 연관된 함수들과 같은 정보처리에 필요한 기능을 하나로 묶는 것. 사용자에게 세부 구현 사항을 감추고 필요한 사항들만 보이게 하는 방법

7. 정보 은닉(Information Hiding): 객체의 상세한 내용을 객체 외부에 철저히 숨기고 단순히 메시지만으로 객체와 상호 작용

8. 상속성(Inheritance, 다중 상속): 새로운 클래스를 정의할 때 처음부터 모든 것을 다 정의하지 않고 기존의 클래스들의 속성을 상속받아 추가로 필요한 속성만 추가하는 방법

9. 다형성(Polymorphism): 같은 메시지에 대해 각 클래스가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 의미. 어떤 객체의 속성이나 기능이 맥락에 따라 다른 역할을 수행할 수 있는 객체 지향의 특성. 오버로딩(Overloading)과 오버라이딩(Overriding)이 여기에 포함

 

 

02. C 언어

 

C 언어: Bell 연구소에서 UNIX 운영체제에 사용하기 위한 시스템 프로그래밍 언어로 1970년대 초 데니스 리치(Dennis Ritchie)에 의해 개발

 

C 언어의 필수 요소

1. 변수: 기억장치의 한 장소를 추상화한 것으로 실행 도중 저장된 값의 변경이 가능

2. 상수: 프로그램 수행 시간 동안 하나의 값이 결정되어 있는 자료 객체. 식별자로 주어지며 프로그램 수행 중에 값이 변하지 않음

3. 배정문(V = E;): 어떤 값(E)을 변수(V)에 대입하는 실행문

 

연산자 정리

단항 연산자 ++와 --

: ++와 --가 앞에 있는 경우 1증가/감소한 뒤 변수의 값을 사용한다.

: ++와 --가 뒤에 있는 경우 현재 변수의 값을 사용한 뒤 1증가/감소 한다.

 

조건 연산자: 피연산자가 3개의 항으로 구성(삼항 연산)

형식: 조건 ? 표현1 : 표현 2;

👉🏻 조건이 참이면 표현1 수행, 거짓이면 표현2 수행

 

C 언어 비트연산자

>>: 우측으로 지정값 만큼 이동. 나누기(/)

<<: 좌측으로 지정값 만큼 이동. 곱하기(*)

ex) r = a >> 3;

r= a / 2^3

ex) r = a << 2;

r = a * 2^2

 

sizeof 연산자

char: 1byte

short: 2byte

int: 4byte

float: 4byte

double: 8byte

long: 4byte

void: 0byte

float * double = double

ex) 13.2 * 84.4 = double

 

정적 변수와 자동 변수

반복문 내에 ex) static int count; 와 같이 초기화 구문이 있더라도 정적 변수는 초기화 구문이 수행되지 않는다.

 

매개 변수 전달 기법

값 호출(Call by value): 메소드를 호출할 때 자료형의 값을 인자로 전달하는 방식

참조 호출(Call by reference): 참조 자료형을 메소드 호출할 때 실인자로 사용할 경우

int f(int *i, int j) {
	*i += 5;
    return(2 * *i + ++j)
}

int main() {
	int x = 10, y = 20;
    
    printf("%d ", f(&x, y));
    printf("%d %d\n", x, y);
    return 0;
}

// 51 15 20

(값 호출) x 의 값은 *로 함수 호출 당시 바뀐 값이 그대로 들어가 있고,

(참조 호출) y 의 값은 main 안의 값이 출력된다.

 

삽입 정렬

: 이미 정렬된 레코드에 정렬되어 있지 않은 레코드를 새로 삽입시켜 다시 정렬하는 기법

 

구조체(Struct)

: 서로 다른 자료형을 갖는 자료들의 모임을 하나의 자료형으로 정의한다.

 

공용체(Union)

: 멤버 중에서 자료 크기(byte 수)가 가장 큰 멤버에 맞는 기억 공간이 할당된다. = 공용체 내에 가장 큰 자료형을 갖는 변수 크기에 맞추어 할당한다.

 

typedef

: 기존 자료형에 별명, 새로운 이름을 정의할 때 사용한다.

 

 

03. Java 언어

 

자바는 오크(Oak)라는 언어로부터 탄생했다.

 

자바의 특징

1. 단순하다.

2. 객체 지향적이다.

3. 분산 환경에 적합하다.

4. 인터프리터에 의해 실행된다.

5. 견고하다.

6. 안전하다.

7. 구조 중립적이다.

8. 이식성이 높다.

9. 높은 성능을 가진다.

10. 다중 스레드를 제공한다.

11. 동적이다.

 

this 예약어

: 생성자나 메소드의 매개 변수가 멤버 변수와 같은 이름을 사용하는 경우에 사용한다.

ex) Sub() { }; Sub(char x) { this(); } 코드가 있다면, Sub() 수행 이 후 Sub(char x) 를 수행한다.

 

float 와 double

자바에서 float 형은 숫자 뒤에 f 가 붙고 double 형은 붙지 않는다.

 

메소드 오버로딩(Overloading, 중복)

: 하나의 클래스에 이름은 같으나 매개 변수의 자료형과 개수가 서로 다른 다수의 메소드를 사용하는 것. 중복된 이름의 메소드가 호출되면 매개 변수의 형과 인자의 개수를 비교하여 적합한 메소드를 실행한다. = 이름은 같지만 인수를 다르게

 

메소드 오버라이딩(Overriding, 재정의)

: 상위 클래스에서 정의한 메소드와 이름, 매개 변수의 자료형 및 개수가 같으나 수행문이 다른 메소드를 하위 클래스에서 정의하는 것. = 수행문이 다른 메소드

 

예외 처리

: 프로그램이 예기치못한 예외의 발생에 대하여 미리 대처하는 코드를 작성하는 것으로, 실행 중인 프로그램의 비정상적인 종료를 막고 상태를 정상 상태로 유지하는 것이 목적이다.

try { // 예외가 발생할 가능성이 있는 코드

}
catch() { // 발생한 예외를 처리하는 코드

}
finally() { // 어떤 예외 발생 유무와 무관하게 무조건 실행

}

A / B 에서 B가 0이면 산술적 오류가 발생한다.

 

 

04. Python

 

Python은 네덜란드의 귀도 반 로섬(Guido van Rossum)이 개발하였다. 인터프리터(Interpreter) 언어이다. 웹 서버, 과학 연산, 사물인터넷(IoT), AI, Game 등의 프로그램 개발에 사용할 수 있다.

 

멤버십 연산자

in, not in : 좌측 Operand가 우측에 속해있는지 아닌지를 체크한다. (True or False)

 

Identity 연산자

is, is not : 양쪽 Operend가 동일한 Object를 가리키는지 아닌지를 체크한다. (True or False)

 

함수

: def 를 사용하여 함수를 정의. 함수 끝에 콜론(:)이 포함되어야 한다는 점을 유의한다.

 

리스트

.append(50): 리스트 맨 뒤에 50 추가

a.extend(b): 리스트 a 뒤에 리스트 b 합치기

.remove(100): 인덱스 100 삭제

.pop(0): 0번째 인덱스 삭제

.pop(): 마지막 인덱스 삭제

.sort(reverse = True): 리스트의 모든 원소의 순서를 역순으로 정렬

 

문자열 슬라이싱

len(str1): 띄어쓰기 포함 문자열 길이 출력

str1[10]: 인덱스 10번째 문자 반환(0부터 시작)

str1[-3]: 인덱스 오른쪽에서부터 역순으로 카운팅한 문자 반환(-1부터 시작)

str1[:]: 전체 문자열 반환

str1[0:8]: 인덱스 0부터 7까지의 문자열 반환

str1[9:len(str1)]: 인덱스 9부터 문자열 끝까지 출력

 

Lambda 함수

: list 또는 반복적으로 수행하는 기능을 별도의 함수 선언 없이 간략하게 사용할 수 있다.

# 함수
def func(x):
	return x+1
    
# Lambda 함수
func = lambda x : x+1

 

 

05. 웹 저작 언어

 

HTML

: 웹 브라우저상에 정보를 표시하기 위한 마크업 심볼 또는 파일 내에 집어넣은 코드들의 집합이다.

 

JavaScript

: Live Script와 자바 언어의 기능을 결합하여 만든 언어이다. HTML의 텍스트 위주의 문제점을 해결하고, 동적인 데이터를 처리할 수 있다.

 

ASP(Active Server Page)

: 서버 사이드 스크립트이다. 웹 브라우저에서 요청하면 웹 서버에서 해석하여 응답한다.

 

JSP(Java Server Page)

: 서블릿(Servlet) 기술을 확장시켜 웹 환경에서 사용할 수 있도록 만든 스크립트 언어이다. 웹 브라우저에서 요청하면 웹 서버에서 해석하여 응답해 주며, 자바의 대부분의 기능을 모두 사용할 수 있다.

 

PHP(Hypertext Preprocessor)

: HTML에 포함되어 동작하는 스크립팅 언어이며, 웹 브라우저에서 요청하면 웹 서버에서 해석하여 응답해 준다. C/Java/Perl 언어 등에서 많은 문장 형식을 준용하고 있어 동적인 웹 문서를 빠르고 쉽게 작성할 수 있다.

 

Ajax(Asynchronous JavaScript and XML)

: 브라우저와 서버 간의 비동기 통신 채널로 자바스크립트, XML의 집합과 같은 기술들이 포함된다. 대화식 웹 애플리케이션을 개발하기 위해 사용되며 실행을 위한 플랫폼으로 사용되는 기술들을 지원하는 웹 브라우저를 이용한다.

: 서버 처리를 기다리지 않고 비동기 요청이 가능하며 대표적인 Ajax 프레임워크로는 Prototype, JQuery, Google Web Toolkit이 있다.

 

WSDL(Web Services Description Language)

: 웹 서비스와 관련된 서식이나 프로토콜 등을 표준적인 방법으로 기술하고 게시하기 위한 언어이다. XML로 작성된다.

 

 

 

 

참고. 2023 에듀윌 정보처리기사 실기 기본서

 

프로그래밍 언어 활용 25%

응용 SW 기초 기술 활용 16%

SQL 응용 10%

 

애플리케이션 테스트 관리 9%

소프트웨어 개발 보안 구축 9%

 

요구사항 확인 6%

서버 프로그램 구현 5%

데이터 입출력 구현 4%

통합 구현 4%

 

인터페이스 구현 2%

화면 설계 2%

제품 소프트웨어 패키징 1%

 

 

정리는 위 순서대로 포스팅합니다😁

 

 

 

https://www.youtube.com/watch?v=b0g5_D7LHbI 

 

은행과 같은 사이트를 이용할 때 다음 단계로 넘어가기 위해 한 번쯤 설치했던 프로그램이라 생각됩니다. 위 영상 확인하시고 삭제하는 것을 추천드립니다

 

참고로 저도 깔려있었네요..

 

 

구버전이 취약한거지 업데이트 예정이라고 하니 필요할 때 신버전을 다시 까는 것은 괜찮습니다.

 

 

 

'Network > etc' 카테고리의 다른 글

[Security Control] 네트워크 보안 시스템의 종류  (1) 2023.01.28

 

 

2번 문제는 먼저 소스 코드 분석으로 시작합니다.

 

소스 코드의 맨 마지막 줄에 Hint가 적혀있습니다.

Hint : Join / id = pw

 

Join 버튼의 Html 코드를 보면 onclick="chk_form()" 을 통해 script 를 호출합니다.

 

 

 

 

id 와 pw 가 같을 때 로그인 실패 alert 이 뜨고, 이 외에 submit() 을 보내는 걸 확인할 수 있습니다. 

 

힌트가 id = pw 인데, 함수는 아니다? 

여기서 FiddlerBurp Suite 를 이용하여 값을 변경해 보낼 수 있다는 사실을 기억해야 합니다.

 

원래 Fiddler 를 더 좋아했으나 유료인만큼 이번엔 Burp Suite 를 사용한 방법을 적겠습니다.

 

 

버프 스위트 기본적인 설정은 완료했다는 가정 하에 문제 풀이를 시작합니다.

 

 

 

Proxy -> Intercept -> Open browser 로 브라우저를 띄워줍니다.

 

URL에 써니나타스 2번 문제 URL를 붙여넣습니다. 그 다음 버프 스위트에서 Intercept is off 를 눌러 on 으로 바꿉니다.

 

우선 submit()을 받아야 하기 때문에 id, pw 가 다르도록 아무 글자나 적어 Join 를 누르면 아래와 같이 보입니다.

 

 

 

 

 

Action -> Send to Repeater 를 클릭하고 메뉴의 Reqeater 로 이동합니다.

 

왼쪽의 Request 에서 idpw동일하게 변경한 후 Send클릭하면 Response 에서 Authkey 를 확인할 수 있습니다.

 

 

 

 

 

 

 

 

정답

더보기

Burp Suite 를 이용해 id = pw 를 동일하게 만들어 요청한다.

 

 

 

'Security > Web Hacking' 카테고리의 다른 글

SuNiNaTaS(써니나타스) Challenges 1번 문제 풀이  (0) 2023.03.21
PHP SQL Injection 방어 기법  (0) 2022.09.01
Time-Based/Union-Based SQL Injection  (0) 2022.08.31
Blind SQL Injection  (0) 2022.08.30
SQL Injection  (0) 2022.08.30

 

 

1번 문제의 <소스 코드 보기>를 확인하면 .asp 파일이라는 것을 확인할 수 있습니다.

 

소스 코드를 보면 어떠한 str 값이 함수를 거쳐 최종 result 값이 admin이 될 때 pw를 알 수 있습니다.

 

위에서 사용되는 Replace()Mid() 함수를 안다면 쉽게 풀리는 문제입니다.

 

 

Replace() - 문자열 치환

Mid() - 문자열 자르기

 

 

result = Replace(str, "a", "aad")
result = Replace(result,"i","in")

aaad치환

iin 으로 치환

 

 

result1 = Mid(result,2,2)
result2 = Mid(result,4,6)

result 의 2 번째부터 자른 후 2 개의 문자열을 가져와 result1 에 대입

result 의 4 번째부터 자른 후 6 개의 문자열을 가져와 result2 에 대입

 

 

result = result1 & result2

result1 과 result2 를 합쳐 result 에 저장

 

 

한 값이 admin이 된다면 pw를 알 수 있게 됩니다.

 

 

 

str = ai

result = aadi

result = aadin

result1 = ad

result2 =  in

result = adin

 

 

주어진 값으로만 문자열을 만져보면 m이 빠져있다는 것을 확인할 수 있습니다. 다시 처음부터 m을 넣고 시작하면

 

 

str = ami

result = aadmi

result = aadmin

result1 = ad

result2 = min

result = admin

 

이 완성됩니다.

 

 

 

정답

 

 

 

'Security > Web Hacking' 카테고리의 다른 글

SuNiNaTaS(써니나타스) Challenges 2번 문제 풀이  (0) 2023.03.21
PHP SQL Injection 방어 기법  (0) 2022.09.01
Time-Based/Union-Based SQL Injection  (0) 2022.08.31
Blind SQL Injection  (0) 2022.08.30
SQL Injection  (0) 2022.08.30

+ Recent posts