관리 메뉴

CASSIE'S BLOG

정보처리기사 필기 시험 정리한 것 본문

PROGRAMMING/정보처리기사

정보처리기사 필기 시험 정리한 것

ITSCASSIE1107 2024. 1. 29. 11:59

소프트웨어  테스트 유형
 
내부 로직을 알고 안알고때문에 블랙,화이트가 되는거임. 
 
화이트박스 테스트와 블랙박스 테스트는 테스트를 진행하는 관점에 따라 구분되는 두 가지 주요 방법론입니다.

화이트박스(White-box) 테스트:
내부 로직 중심으로 테스트를 진행합니다.
코드의 구조, 루프, 조건문 등을 확인하고 테스트 케이스를 설계합니다.
개발자가 코드의 내부를 알고 있어야 하며, 테스트 케이스를 설계할 때 코드의 구조와 동작을 고려합니다.
코드의 모든 경로를 따라가며 테스트를 수행하여 조건문의 참/거짓 여부, 루프의 실행 여부 등을 확인합니다.
화이트박스 테스트는 주로 구조적인 오류를 찾는 데 사용됩니다.

블랙박스(Black-box) 테스트:
기능 중심으로 테스트를 진행합니다.
내부 구현에 대한 세부 사항을 알 필요가 없습니다.
시스템의 요구 사항에 따라 입력값을 제공하고, 결과를 확인하여 시스템이 요구 사항을 충족시키는지 확인합니다.
테스터는 오직 요구 사항과 기능에만 집중하며, 시스템이 예상대로 작동하는지 여부를 확인합니다.
블랙박스 테스트는 사용자 관점에서 시스템의 기능을 확인하는 데 사용됩니다.
차이점 요약:

화이트박스 테스트는 코드의 내부 로직을 중심으로 진행되며, 코드의 구조와 동작에 초점을 맞춥니다.
블랙박스 테스트는 시스템의 기능을 중심으로 진행되며, 요구 사항을 충족시키는지 확인합니다. 내부 구현에 대한 세부 사항은 고려하지 않습니다.

 
화이트박스는 프로그램의 내부 로직(경로 구조, 루프 등) 중심으로 테스트를 진행한다.
 
블랙박스는 프로그램의 기능(요구사항의 만족여부, 결과값) 을 중심으로 테스트를 진행한다. 
 
DB
외래키: 다른 릴레이션의 기본키를 참조하는 속성이다. 
외래키는 기본키를 참조하지만, 외래키 자체는 키의 속성(유일성)을 만족하지 않을 수도 있다. 
 
정규화
데이터 무결성을 유지하기 위해 중복성을 최소화하고 정보의 일관성을 보장하기 위한 개념이다. 
"논리데이터 모델링을 상세화하는 가장 중요한 단계이다." 
 
제약조건을 비활성화하거나 삭제한다.
ALTER TABLE <테이블명> ENABLE/DISABLE/DROP CONSTRAINT <제약조건명>;
-ENABLE: 제약조건 활성화
-DISABLE: 제약조건 비활성화
-DROP: 제약조건 삭제
 
SQL 지원 도구
APM(Application Performance Management)
안정적인 시스템 운영을 위한 모니터링 도구로 시스템 부하량과 접속자 파악, 장애진단기능이 있다. 
 
비클러스터형 인덱스
인덱스엔 데이터가 아닌 데이터가 저장된 위치 (RID: Record Indentifier Rowid)가 저장된다, 
검색속도는 상대적으로 느리지만 입력, 수정, 삭제 속도는 비교적으로 빠르다. 
테이블별로 여러 개 생성 가능하다.

쓰레드:
하나의 프로세스(프로그램)에서 둘 이상의 일을 동시에 수행하는 것을 말한다.
스레드 수행을 위해서 해당클래스에 Thread 클래스를 상속하거나 Runable 인터페이스를 구현한다.
 
보안 개발 방법론 종류 중 CWE에 해당하지 않는 것은 무엇인가? 
CWE란 무엇인가?

CWE는 Common Weakness Enumeration는 일반적으로 널리 통용되는 소프트웨어의 주요 취약점, 보안상의 문제들을 분류하여 놓은 목록들을 의미합니다
 
CWE
소프트웨어의 보안 취약점을 유발하는 원인 7가지로 정리한 방법론이다

취약점 유발 원인 7가지
1. 입력 데이터 검증 표현
2. 보안 기능
3. 시간 및 상태
4. 오류 처리
5. 코드 품질
6. 캡슐화
7. API 악용

 
다음중 보안 개발 방법론의 종류중 CWE에 해당하지 않는 것은 무엇인가?
1. 보안요구
2. 코드오류
3. 입력 데이터 검증 및 표현
4. 보안 기능
 
 
 
 
 
 
 
 
 
 
 
내 답: 2번 
정답: 1번 보안 요구
 
 
좀 어렵노 문제가
 
다음 중 명세서 작성 시 고려사항에 대한 설명과 가장 거리가 먼 것은 무엇인가?
1. 회사의 임원들이 쉽게 이해할 수 있도록 작성한다.
2. 시스템의 모든 기능과 모든 제약조건을 기술한다.
3. 우선순위에 따른 중요도를 기술한다.
4. 요구사항 검증을 위해 품질 측정 및 검증 방법, 기준 등을 기술한다.
 
 
 
 
 
 
 
 
 
 
 
내 답: 2번 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
정답: 1번
 
 
 
 
 
 
 
 
 Gradle은 Groovy 언어를 기반으로 한 오픈 소스 자동화 도구입니다.

그러면서, Groovy는 JVM(Java Virtual Machine) 위에서 실행되는 객체지향 프로그래밍 언어입니다. Java와 호환되며 Java와 비슷한 문법을 가지고 있지만, 몇 가지 편의 기능이 추가되어 있습니다. Groovy는 Java와 같은 기능과 함께 간결한 구문, 동적 타입 지정, 그리고 클로저와 같은 고급 기능을 제공합니다. Groovy는 Java 플랫폼에서 작동하며 Java 코드와 완벽하게 상호 운용할 수 있습니다.

Gradle은 Groovy를 사용하여 빌드 스크립트를 작성하고 프로젝트를 관리합니다. 이를 통해 Gradle은 강력한 빌드 자동화 기능과 함께 유연하고 확장 가능한 빌드 스크립트를 제공합니다. Groovy 언어의 강력한 기능을 활용하여 복잡한 빌드 로직을 간결하게 작성할 수 있습니다.
 
 
테스트하네스란?

테스트하네스란 자동화된 테스트 지원도구 이며 프로그램을 유닛단위로 테스팅하고 여러가지 조건에 따른 프로그램의 행동과 결과를 모니터링하기위해 만들어진 소프트웨어의 구성이다. 

테스트하네스의 목적?
- 테스트 프로세스의 자동
- 테스트케이스의 실행
- 연관된 테스트보고서를 생성

 

테스트하네스의 장점?

- 테스트 프로세스 자동화를 통한 생산성 향상
- 회귀테스트 발생가능성 향상(어? 이건 좋은건가?)
- 소프트웨어 컴포너늩와 어플리케이션의 품질향상
- 테스트의 부절차(SubRoutine) 반복성 제공
- 오프라인 테스트(예를들면 사무실에 사람이 없는 밤시간 등에 테스트를 진행할 수 있음)
- 좀처럼 일어나지 않는 특이상황의 테스트가능(예를들면 평소보다 높은 부하량등)
 
테스트 자동화 도구의 종류 중 아래에서 설명하는 것은 무엇인가?
프로그램을 실행하지 않고 코딩 표준, 코딩 스타일, 코드 복잡도 및 기타 결함등을 발견하기 위해 사용된다.
테스트를 수행하는 사람이 작성된 소스 코드를 이해하고 있어야만 분석이 가능하다.
1. 성능 테스트 도구
2. 테스트 하네스 도구
3. 테스트 실행 도구
4. 정적 분석 도구
 
 
 
 
 
 
 
 
 
 
 
내 답: 4번 정적분석도구
정답: 4번 정적분석도구
 
 
 
데이터 베이스 정규화
 
https://devinus.tistory.com/26

[정보처리기사] 정규화(Normalization) 과정과 이상(Anomaly)의 종류

1. 정규화(Normalization) - 정규화란 함수적 종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정이다. - 정규화된

devinus.tistory.com

 
원자값: 
원자값(Atomic Value)은 더 이상 분해되지 않는 값으로, 하나의 필드(속성)에 하나의 값을 갖는 것을 의미합니다. 데이터베이스에서 제1정규형(1NF)을 만족하려면 모든 속성이 원자값을 가져야 합니다. 이는 각 속성이 더 이상 쪼개지지 않고 단일 값으로 표현되어야 함을 의미합니다.

간단한 예를 들어보겠습니다. 학생 테이블에서 학생의 이름과 전화번호를 갖는다고 가정해봅시다. 만약 한 필드에 "홍길동, 010-1234-5678"과 같이 이름과 전화번호가 함께 들어있다면, 이는 제1정규형을 만족하지 않습니다. 이는 이름과 전화번호가 각각 원자값이 아니라서 분리되어야 한다는 것을 의미합니다. 제1정규형을 만족하기 위해서는 이를 분리하여 각각의 필드에 하나의 값을 가져야 합니다.

따라서, 원자값은 더 이상 쪼개지지 않는 최소 단위의 값으로, 데이터베이스의 정규화 과정에서 제1정규형을 만족시키는데 중요한 개념입니다.
 

 

 
 
정규화  [ 원 부 이 결 다 조 ]  / 3정규화 다음에 보이스코드 정규화 
(웬 부(자야) 이 걸 다줘? 로 외우기)
 
비정규 릴레이션에서 시작 
              ▼
1정규화 (1NF) - 도메인이 자값 
           ▼
2정규화 (2NF) - 분적 함수 종속 제거 (완전 함수 종속 상태)
           ▼
3정규화 (3NF) - 행적 함수 종속 제거 
           ▼
BCNF (보이스코드 정규화) - 정자 (모든 결정자가 후보키인 상태) 
           ▼
4정규화 (4NF) - 치 종속 제거 (다중 종속 제거)
           ▼
5정규화 (5NF)  - 인종속 제거 
 
 
CNF (보이스코드 정규화) - 결정자 (모든 결정자가 후보키인 상태)  모든 결정자가 후보인 상태 이해가 안되는데 예시로 설명 쉽게 해줄 수 있어?
ChatGPT
보이스코드 정규화(BCNF)는 데이터베이스 설계에서 중복을 최소화하기 위해 사용되는 형태의 정규화입니다. BCNF에서 결정자는 튜플의 모든 속성을 결정하는 속성입니다. 이것은 후보키(Candidate Key)의 성질을 가지고 있습니다.

후보키는 튜플을 유일하게 식별할 수 있는 속성들의 조합입니다. 모든 결정자가 후보키인 상태라는 것은 데이터베이스의 각 튜플을 유일하게 식별하기 위해 사용되는 속성들로만 다른 속성들이 결정되는 상태를 말합니다.

간단한 예시를 통해 설명하겠습니다:

예를 들어, 학생 정보를 저장하는 데이터베이스가 있다고 가정해봅시다. 각 학생은 학번(StudentID), 이름(Name), 학과(Department) 등의 속성을 가집니다.

여기서 후보키는 학번(StudentID)입니다. 왜냐하면 각 학생은 유일한 학번을 가지고 있기 때문에 학번으로 각 학생을 식별할 수 있습니다.

이제 BCNF를 적용해 보겠습니다. BCNF에서는 모든 결정자가 후보키인 상태여야 합니다. 그러면 위의 예에서 학번(StudentID), 이름(Name), 학과(Department) 중 어떤 것이 후보키에 해당할까요?

만약 학번(StudentID)이 후보키라고 가정하면, 학번(StudentID)이 학생의 이름(Name)과 학과(Department)을 결정합니다. 따라서 학번(StudentID)을 결정자로 사용하면 BCNF를 만족시키지 못합니다.

이 경우 후보키로 학번(StudentID)과 이름(Name), 학과(Department)을 모두 사용해야 합니다. 이렇게 하면 모든 결정자가 후보키인 상태가 되고 BCNF를 만족하게 됩니다.

이러한 예시를 통해 BCNF에서의 결정자의 개념을 이해할 수 있습니다.




 

결정자와 후보키
 
보이스-코드 정규화(BCNF)에서 "결정자"란 중요한 개념입니다. 여기서 "결정자"는 릴레이션에서 다른 속성들의 값을 결정하는 속성을 말합니다. 다시 말해, 결정자는 어떤 튜플의 다른 속성들의 값을 유일하게 결정하는 속성이라고 할 수 있습니다.

예를 들어, 학생 테이블에서 학생의 학번이 결정자라고 할 수 있습니다. 왜냐하면 학번이 주어지면 학생의 이름, 전화번호, 주소 등 다른 속성들의 값을 유일하게 결정할 수 있기 때문입니다.

BCNF에서는 모든 결정자가 후보키(candidate key)인 상태여야 합니다. 후보키란 릴레이션에서 튜플을 유일하게 식별할 수 있는 속성의 집합을 말합니다. 즉, BCNF에서는 모든 결정자가 릴레이션의 주요 식별자인 후보키에 포함되어야 합니다.

결정자의 개념은 데이터의 중복성을 줄이고 데이터의 무결성을 보장하기 위해 중요한데, BCNF는 이러한 관점에서 데이터의 정규화를 진행할 때 매우 중요한 개념입니다.






두부이걸다줘
 

 
 
순서가 있는 리스트에서 데이터의 삽입(Push), 삭제(Pop) 가 한쪽 끝에서 일어나며 LIFO (Last-In-First-Out)의 특징을 가지는 자료구조는?
 
1. Tree
2. Graph
3. Stack
4. Quene
 
 
 
 
 
 
 
내답 3번
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
정답: 3번 Stack
 
 
단위 테스트 도구로 사용될 수 없는 것은?
1. CppUnit
2. JUnit
3. HttpUnit
4. IgpUnit
 
 
 
 
 
 
 
 
 
 
 
내 답 3번
정답 4번
lgpUnit
 

 
CVS: 
CVS(Concurrent Versions System)는 소프트웨어 개발 프로젝트에서 버전 관리를 위해 사용되는 형상 관리 도구입니다. 이 도구는 여러 사용자가 동시에 작업하고 서로의 변경 사항을 추적하고 통합하는 데 도움을 줍니다.
 
Concurrent: 
happening at the same time

빌드
✔️ 소스 코드 파일들을 컴파일한 후 여러 개의 모듈을 묶어 실행 파일로 만드는 과정
 
빌드 자동화 도구
✔️ Ant, Make, Maven, Gradle, Jenkins
✔️ Jenkins - Java 기반의 오픈소스 형태, 가장 많이 사용됨, 서블릿 컨테이너에서 실행되는 서버 기반 도구
✔️ Gradle - 안드로이드 기반의 오픈소스 형태, Java, Python 빌드도 가능, task 단위로 사용
 
❓문제 (정답은 더보기 클릭)
다음에 제시된 특징에 가장 부합하는 빌드 자동화 도구를 쓰시오.

✅ Java 기반의 오픈 소스 형태로, 가장 많이 사용되는 빌드 자동화 도구이다.
✅ 서블릿 컨테이너에서 실행되는 서버 기반 도구이다.
✅ SVN, Git 등 대부분의 형상 관리 도구와 연동이 가능하다.
✅ 친숙한 Web GUI 제공으로 사용이 쉽다.
✅ 여러 대의 컴퓨터를 이용한 분산 빌드나 테스트가 가능하다

 
정답 보기: 

더보기

Jenkins

 


Jenkins
- JAVA기반의 오픈소스 형태
-서블릿 컨테이너에서 실행되는 서버 기반 도구
-친숙한Web GUI제공
-분산 빌드나 테스트 가능
 
 
Gradle
- Groovy를 기반으로 한 오픈 소스 형태
안드로이드 앱 개발 환경에서 사용
- 행할 처리 명령들을 모아 태스크(Task)로 만든 후 태스크 단위로 실행     
 
폴딩법 - 해싱함수  중 레코드 키를 여러부분으로 나누고 나눈 부분의 각 숫자를 더하거나 XOR한 값을 홈 주소로 사용
 
 

PHP에서 사용 가능한 연산자
 
@ : 에러 제어 연산자
< > : 관계 연산자
=== : 관계 연산자
 
HIPO(Hieracgy Input Process Output): 하향식 소프트웨어 개발을 위한 문서화 도구입니다.
 
CBD: 컴포넌트 기반 개발
- 기존의 시스템이나 소프트웨어를 구성하는 컴포넌트를 조립하여 새로운 응용프로그램을 만드는 소프트웨어 개발 방법론
- 기존에 있던것들을 활용하기 때문에 생산성 향상 , 확장성 용이 , 재사용 특징이있음
 
3. 스택(Stack)에 대한 옳은 내용으로만 나열된 것은?

  1. FIFO 방식으로 처리된다.
  2. 순서 리스트의 뒤(Rear)에서 노드가 삽입되며, 앞(Front)에서 노드가 제거된다.
  3. 선형 리스트의 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조이다.
  4. 인터럽트 처리, 서브루틴 호출 작업 등에 응용된다.

 
 
정답 더보기:

더보기

4번 입터럽트 처리, 서브루틴 호출 작업에 응용된다.

 
 
 
 
 
스택(Stack)

  • 후입선출(LIFO, Last-In-First-Out) 구조이다.
  • 가장 최근에 삽입된 데이터가 가장 먼저 제거되는 구조이다.
  • push(삽입), pop(삭제), peek(조회) 등의 연산을 지원한다.
  • 함수 호출 스택, 브라우저 방문 기록 등 다양한 분야에서 활용한다.
  • 배열이나 연결리스트로 구현한다.

 
 
스택은 컴퓨터 과학에서 중요한 개념으로, 주로 프로그램 실행 중에 함수 호출이나 중요한 데이터를 임시로 저장하는 데 사용됩니다. 여러분이 프로그램을 실행할 때, 컴퓨터는 현재 실행 중인 함수의 상태나 실행 위치를 저장하기 위해 스택을 사용합니다.

"인터럽트 처리"는 컴퓨터가 현재 실행 중인 작업을 일시적으로 멈추고 다른 작업을 처리하는 것을 의미합니다. 예를 들어, 외부에서 중요한 신호가 들어왔을 때, 컴퓨터는 그 신호를 처리하기 위해 현재 실행 중인 작업을 일시 중단하고 인터럽트를 처리합니다. 이때 스택은 현재 실행 중인 작업의 상태를 저장하고, 인터럽트 처리가 끝난 후에 이전 작업으로 돌아갈 수 있도록 합니다.

"서브루틴 호출 작업"은 하나의 함수가 다른 함수를 호출할 때 사용됩니다. 예를 들어, 프로그램이 여러 기능을 수행하는데, 각각의 기능을 별도의 함수로 나누어 작성하고 호출할 때 스택은 이러한 함수 호출의 순서와 상태를 관리합니다. 함수 A에서 함수 B를 호출하면, 함수 A의 실행 상태를 스택에 저장하고 함수 B가 실행되는 동안 함수 A로 돌아갈 수 있도록 합니다.

따라서, 스택은 인터럽트 처리나 서브루틴 호출 작업과 같은 상황에서 중요한 역할을 하며, 프로그램의 실행 흐름을 관리하는 데 사용됩니다.
 
맵리듀스(MapReduce)
- 맵(Map) : 데이터가 텍스트 형태로 입력되면 64KB 분할한다. 텍스트 안에 단어를 분류하여 카운트한다.
- 리듀스(Reduce) : 각 텍스트에서 정리된 맵들을 결합하여 동일한 단어를 카운트한다.
 
 
DBMS 접속 기술
- JDBC(Java DataBase Connectivity)
 -> Java 언어
 -> 썬 마이크로시스템에서 출시
 -> Java SE에 포함되어 있고 JDBC 클래스는 java.sql, javax.sql에 포함
 -> 접속하려는 DBMS에 대한 드라이버 필요
 

- ODBC(Open DataBase Connectivity)
 -> 개발 언어와 상관 없음
 -> 마이크로소프트에서 출시
 -> MS-Access, DBase, DB2, Excel, Text 등 다양한 데이터베이스에 접근 가능
 

- MyBatis
 -> JDBC 코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈소스 접속 프레임워크
 -> SQL 문장을 분리하여 XML 파일을 만들고 Mapping을 통해 SQL을 실행
 -> SQL을 거의 그대로 사용할 수 있어 국내 환경에 적합
 
알고리즘과 관련된 설명으로 틀린 것은?
1. 주어진 작업을 수행하는 컴퓨터 명령어를 순서대로 나열한 것으로 볼 수 있다.
2. 검색은 정렬이 되지않은 데이터 혹은 정렬이 된 데이터 중에서 키값에 해당되는 데이터를 찾는 알고리즘이다.
3. 정렬은 흩어져 있는 데이터를 키값을 이용하여 순서대로 열거하는 알고리즘이다.
4. 선형 검색은 수행하기 전에 반드시 데이터의 집합이 정렬되어 있어야한다.
 
정답 더보기:

더보기

4번 선형검색은 데이터의 갯수, 정렬여부와 상관없이 사용가능하다. 

 
다음 중 페이지 교체 알고리즘이 아닌 것은?
1. FIFO (First-In-First-Out)
2. LUF (Least Used First)
3. Optimal
4. LRU (Least Recently Used)
 
정답 더보기:

더보기

1번 FIFO

 
 
ORM 프레임워크
- ORM을 구현하기 위한 구조와 구현을 위해 필요한 여러 기능들을 제공하는 소프트웨어
- JAVA : JPA, Hibernate, EclipseLink, DataNucleus, Ebean 등
- C++ : ODB, QxOrm 등
- Python : Django, SQLAlchemy, Storm 등
- iOS : DatabaseObjects, Core Data 등
- .NET : NHibernate, DatabaseObjects, Dapper 등
- PHP : Doctrine, Propel, RedBean 등
 
 
ORM은 주로 데이터의 조회, 삽입, 갱신, 삭제와 같은 기본적인 데이터베이스 작업을 객체 지향적으로 처리할 수 있도록 도와줍니다. 예를 들어, 객체를 통해 데이터베이스에서 특정 레코드를 조회하고, 해당 객체의 속성을 변경하여 데이터베이스에 갱신하는 등의 작업을 SQL 쿼리를 직접 작성하지 않고도 수행할 수 있습니다.
 
ORM은 객체 관계 매핑(Object-Relational Mapping)의 약자입니다. 이는 객체 지향 프로그래밍에서 사용되는 객체와 관계형 데이터베이스의 데이터를 매핑하고 연결하는 프로그래밍 기술이며, 이를 위해 ORM 프레임워크가 사용됩니다.

간단히 말하면, ORM은 객체 지향 프로그래밍 언어(예: Java, Python, C# 등)에서 사용되는 객체와 관계형 데이터베이스의 테이블 간의 매핑을 자동화해주는 도구나 프레임워크입니다. 이를 통해 개발자는 객체를 데이터베이스에 저장하거나 가져오는 작업을 SQL 쿼리문이 아닌 객체 지향적인 방식으로 처리할 수 있습니다.

예를 들어, 사용자 객체를 데이터베이스의 사용자 테이블과 매핑할 때, ORM을 사용하면 객체의 속성을 데이터베이스의 열로 자동으로 매핑하고, 객체 간의 관계를 데이터베이스의 관계로 자동으로 처리할 수 있습니다. 이렇게 하면 SQL 쿼리를 직접 작성하는 번거로움을 줄이고, 개발자는 객체 지향적인 코드로 데이터베이스 작업을 수행할 수 있습니다.

입력되는 데이터를 컴퓨터의 프로세스가 처리하기 전에 미리 처리하여 프로세스가 처리하는 시간을 줄여주는 프로그램이나 하드웨어를 말하는 것은?
1. EAI
2.FEP
3.GPL
4. Duplexing
 
 
정답 더보기:

더보기

2번 FEP

Front-End-Processor

 

Duplexing: 

통신에서, 양방향 통신을 동시에 할 수 있도록 하는 기술
예를 들어, 전화 통화를 할 때 상대방이 말하는 동안에도 자신이 말할 수 있도록 하는 것과 같은 원리
Duplexing 기술에는 Half-Duplex와 Full-Duplex가 있는데, Half-Duplex는 한쪽이 말하면 상대방은 기다리고, 상대방이 말하면 자신이 기다리는 방식이고, Full-Duplex는 양쪽이 동시에 말하고 들을 수 있는 방식이다.

GPL (General Public License)
소프트웨어의 배포, 수정, 사용 등을 자유롭게 할 수 있도록 해주는 라이선스
GPL을 따르는 소프트웨어는 누구나 무료로 사용하고, 소스코드를 열어서 수정하거나 배포할 수 있다.
GPL을 따르는 대표적인 오픈소스 소프트웨어로는 리눅스(Linux) 운영체제가 있다.

EAI (Enterprise Application Integration)
기업에서 사용하는 다양한 응용 시스템들을 서로 연계시켜주는 솔루션
예를 들면, 기업 내부에서는 ERP(Enterprise Resource Planning) 시스템, SCM(Supply Chain Management) 시스템, CRM(Customer Relationship Management) 시스템 등이 있을 수 있으며, 이들 시스템 간의 데이터 연계나 정보 공유를 위해 EAI를 사용할 수 있다.
EAI 솔루션으로 대표적으로는 IBM의 WebSphere, SAP의 NetWeaver 등이 있다.

 
데이터 통신 요점 정리한 것:
https://ramafam.tistory.com/9
 

 소프트웨어 패키징에 대한 설명으로 틀린 것은?

  1. 패키징은개발자 중심으로 진행한다.
  2. 신규 및 변경 개발소스를 식별하고, 이를 모듈화 하여 상용제품으로 패키징 한다.
  3. 고객의 편의성을 위해 매뉴얼 및 버전관리를 지속적으로 한다.
  4. 범용 환경에서 사용이 가능하도록 일반적인 배포 형태로 패키징이 진행된다.

 
 
정답 더보기: 

더보기

1번 개발자 중심으로 하지 않는다. 사용자 중심임.

 

소프트웨어 패키징

  • 설치 프로그램의 선택: 사용자가 쉽게 설치할 수 있도록 설치 프로그램을 선택한다.
  • 파일 구성: 소프트웨어 구성 요소들을 어떻게 구성할지 정한다.
  • 라이선스: 소프트웨어의 라이선스를 명확하게 밝히고, 준수한다.
  • 의존성 관리: 소프트웨어가 의존하는 라이브러리나 시스템 구성 요소들의 버전을 관리한다.
  • 사용자 맞춤 설정: 사용자 맞춤 설정 파일을 제작한다.
  • 충돌 방지: 설치된 다른 소프트웨어와 충돌하지 않도록 설치 경로나 라이브러리 등을 관리한다.
  • 업데이트: 기존 버전과의 호환성을 유지하고 사용자가 쉽게 업데이트할 수 있도록 지원한다.

 
VLSM = 스버네팅 이후에도 ip주소가 낭비되는 것을 추가로 방지하기 위해서 서브넷마스크의 길이를 가변적으로조정하는 기법
 
라우팅 프로토콜의 종류별 특징
OSPF (Open Shortest Path First)
VLSM 및 CIDR를 지원하는 대규모 기업 네트워크에서 가장 널리 사용되는 프로토콜이다.
 
CIDR(Classless Inter-network Domain Routing) : Subnet Mask 값을 십진수로 변환해 '/24' 같이 IP주소뒤에 붙여서 표현
 
 
서브넷 마스크는 IP 주소를 네트워크 부분과 호스트 부분으로 나누는 데 사용되는 숫자입니다. IP 주소는 네트워크 ID와 호스트 ID로 구성됩니다. 서브넷 마스크는 이 둘을 구별하기 위해 사용되며, IP 주소의 어떤 부분이 네트워크를 식별하는지를 나타냅니다.

서브넷 마스크는 일반적으로 32비트의 이진수로 표현되며, 보통 네트워크 부분은 1로, 호스트 부분은 0으로 표시됩니다. 예를 들어, 서브넷 마스크가 "255.255.255.0"인 경우, 이는 이진수로 "11111111.11111111.11111111.00000000"으로 나타낼 수 있습니다. 이것은 24비트가 네트워크 부분이고, 8비트가 호스트 부분임을 의미합니다. 즉, 이러한 경우 IP 주소의 처음 24비트가 네트워크를 식별하고, 나머지 8비트가 호스트를 식별합니다.

VLSM(Variable Length Subnet Mask)은 서브넷 마스크의 길이를 가변적으로 조정하여 IP 주소를 효율적으로 할당하는 기법입니다. 이를 통해 서브넷 마스크의 길이를 조정하여 네트워크의 크기에 따라 서브넷을 구성할 수 있습니다. 이는 IP 주소를 효율적으로 사용하고, IP 주소의 낭비를 줄일 수 있습니다.

CIDR(Classless Inter-Domain Routing)는 IP 주소 체계를 더 효율적으로 관리하기 위한 방법 중 하나로, 서브넷 마스크를 IP 주소 뒤에 슬래시(/)를 붙여 표기하는 방법입니다. 이를 통해 IP 주소와 서브넷 마스크를 함께 표기하여 네트워크 주소를 명확하게 구분할 수 있습니다. 예를 들어, "192.168.0.0/24"는 IP 주소가 "192.168.0.0"이고 서브넷 마스크가 "255.255.255.0"임을 나타냅니다.
 
IP 주소의 네트워크 부분과 호스트 부분은 각각 네트워크를 식별하고, 호스트를 식별하는 데 사용됩니다.

네트워크 부분(Network Portion):
네트워크 부분은 IP 주소에서 네트워크를 식별하는 데 사용됩니다. 이 부분은 해당 네트워크에 속한 장치들을 식별하는 데 사용됩니다. 모든 장치가 동일한 네트워크 부분을 갖는 경우 해당 장치들은 같은 네트워크에 속하게 됩니다. 라우팅 결정이 이 부분을 통해 이루어지며, 패킷이 목적지로 전달되는 경로를 결정하는 데 사용됩니다.

호스트 부분(Host Portion):
호스트 부분은 해당 네트워크 내에서 개별적인 호스트(장치)를 식별하는 데 사용됩니다. 호스트 부분을 통해 네트워크 내에서 각각의 컴퓨터, 라우터 또는 기타 네트워크 장치를 식별할 수 있습니다. 호스트 부분은 네트워크 내에서 각 장치에게 유일한 식별자를 제공하며, 이를 통해 통신이 이루어집니다.

따라서, IP 주소의 네트워크 부분은 해당 IP 주소가 어느 네트워크에 속하는지를 식별하고, 호스트 부분은 해당 네트워크 내에서 특정 장치를 식별하는 데 사용됩니다. 이 두 부분을 통해 효율적인 네트워크 통신이 이루어지며, 라우팅 및 패킷 전달이 가능해집니다.





RIP (Routing Information Protocol)
최대 15홉 이하 규모의 네트워크를 주요 대상으로 하는 라우팅 프로토콜이다.
최적의 경로를 산출하기 위한 정보로써 홉(거리값)만 고려하므로 실제로는 최적의 경로가 아닌 경우가 많다. 
 
홉(Hop)은 네트워크에서 데이터가 한 장비에서 다음 장비로 전달되는 경로를 나타내는 단위입니다. 라우팅에서 홉은 패킷이 라우터나 스위치와 같은 네트워크 장비를 거쳐 목적지에 도달하는 횟수를 의미합니다. 홉은 보통 라우팅 경로의 길이를 측정하는 데 사용됩니다.

RIP(라우팅 정보 프로토콜)는 최대 15홉 이하의 네트워크를 대상으로 하는 프로토콜이기 때문에, 최대 15번의 홉을 거쳐 목적지에 도달할 수 있습니다. 이는 RIP의 한계로, 네트워크가 너무 크거나 복잡할 경우 적합하지 않을 수 있습니다.

그러나 RIP는 경로 선택에서 홉 수만을 고려하므로 최적의 경로를 선택하지 못할 수 있습니다. 이는 네트워크 트래픽이나 라우터의 혼잡도 등을 고려하지 않고 단순히 홉 수만을 고려하기 때문입니다. 따라서 RIP는 네트워크가 비교적 단순하고 작을 때 유용하지만, 대규모 네트워크나 실시간 트래픽 관리에는 적합하지 않을 수 있습니다.

요약하면, 홉은 라우팅에서 패킷이 네트워크에서 다음 장비로 전달되는 횟수를 나타내는 단위이며, RIP는 최대 15홉 이하의 네트워크를 대상으로 하며 경로 선택에 홉 수만을 고려하기 때문에 최적의 경로를 선택하지 못할 수 있습니다.
 
네트워크 트래픽:
네트워크 트래픽은 컴퓨터나 기타 네트워크 장치 간에 주고받는 데이터의 양을 의미합니다. 간단히 말해, 네트워크를 통해 전송되는 데이터의 양이라고 생각하면 됩니다.

예를 들어, 이메일을 보내거나 받거나, 웹 사이트를 불러오거나, 파일을 다운로드하거나, 온라인 게임을 할 때마다 데이터가 네트워크를 통해 전송됩니다. 이러한 데이터 전송 과정에서 발생하는 모든 정보가 네트워크 트래픽으로 간주됩니다.

따라서, 네트워크 트래픽은 컴퓨터나 기타 장치가 네트워크에 접속하고 데이터를 주고받는 활동의 총체를 나타냅니다. 네트워크 트래픽은 네트워크의 부하나 성능을 평가하고 관리하는 데 중요한 지표이며, 이를 통해 네트워크가 원활하게 동작하는지를 확인할 수 있습니다.

쉘과 커널:

쉘은 사용자와 컴퓨터 하드웨어 사이에서 명령어를 해석하고 실행하는 프로그램입니다. 사용자가 명령을 입력하면 쉘은 해당 명령을 해석하고, 그에 따라 컴퓨터 자원을 관리하거나 프로그램을 실행합니다.

커널은 운영 체제의 핵심 부분으로, 하드웨어와 소프트웨어 간의 통신을 관리합니다. 이는 프로세스 관리, 메모리 관리, 입출력 관리 등 다양한 기능을 수행합니다. 즉, 커널은 운영 체제의 핵심 역할을 하며, 모든 시스템 자원에 대한 접근을 제어하고 관리합니다.

쉘은 그러면 사람이랑 하드웨어랑 소통을 하는 창구 같은 개념이네?

맞습니다! 쉘은 사용자와 컴퓨터 하드웨어 사이에서 소통하는 창구 역할을 합니다. 사용자가 명령어를 입력하면 쉘은 그 명령을 해석하고 실행하여 사용자의 요청을 이해하고 하드웨어에 전달합니다. 이를 통해 사용자는 컴퓨터를 조작하고 명령을 실행할 수 있습니다.


 결합도와 응집도

프로그래밍에서 결합도(coupling)는 모듈 간의 상호 의존도를 나타내는 개념입니다. 높은 결합도는 한 모듈이 다른 모듈에 너무 의존적이고 변경에 취약하다는 것을 의미합니다. 반면에 낮은 결합도는 모듈 간의 상호 의존성이 낮고 변경에 유연하다는 것을 나타냅니다.

응집도(cohesion)는 한 모듈 안의 요소들이 서로 관련되어 있는 정도를 나타내는 개념입니다. 높은 응집도는 모듈 안의 요소들이 밀접하게 관련되어 있고 한 가지 목적을 위해 함께 동작한다는 것을 의미합니다. 반면에 낮은 응집도는 모듈 안의 요소들이 서로 무관한 것들이 모여 있는 경우를 의미합니다.

결합도는 모듈 간의 관계를 나타내며, 응집도는 모듈 내부의 구성 요소 간의 관계를 나타냅니다. 함께 고려되어야 하는데, 낮은 결합도와 높은 응집도를 갖는 프로그램이 보다 모듈화되어 있고 유지보수가 쉽습니다.

결합도의 종류는 다음과 같습니다.


 응집도의 종류는 다음과 같습니다.


필수개념정리 출처 아래부터
https://m.blog.naver.com/wook2124/222102990691

MOM Message Oriented MiddleWare
메세지 지향 미들웨어
-메세지 기반의 비동기형 메세지를 전달하는 방식의 미들웨어
MQ(IBM), MessageQ(오라클), JMS(JCP)
 
여기까지
 
출처(하기 출처):
https://m.blog.naver.com/wook2124/222108831385

분산원장기술
(DLT Distributed Ledger Technology)

중앙 관리자나 중앙데이터 저장소가 존재하지 않고 P2P망 내의 참여자들에게 모든 거래 목록이 분산 저장되어 거래가 발생할 때마다 지속적으로 갱신되는 디지털 원장

매시업:
웹에서 제공하는 정보 및 서비스를 이용하여 새로운 소프트웨어나 서비스, 데이터베이스등을 만드는 기술 -> 콘텐츠를 조합하여 하나의 서비스로 제공하는 웹사이트 또는 애플리케이션
 
라우터가 서로 다른 프로토콜을 사용하는 네트워크를 연결하여 전송 목적지까지 최적의 경로를 설정해주는 장치라는데 여기서 프로토콜이 뭐야?
 
프로토콜(Protocol)은 컴퓨터 네트워크에서 데이터를 주고받는 데 사용되는 규칙의 집합입니다. 즉, 프로토콜은 데이터의 형식, 전송 방법, 에러 처리 방법 등을 정의하여 네트워크 상에서 서로 통신할 수 있도록 합니다.

프로토콜은 네트워크에서 데이터 통신을 관리하고 제어하는 데 사용됩니다. 네트워크에서 데이터를 보내고 받을 때는 데이터를 전송하는 방법, 데이터를 받았을 때의 응답 방법, 데이터의 포맷 및 구조 등을 프로토콜이 정의한 대로 따라야 합니다.

예를 들어, HTTP(Hypertext Transfer Protocol)는 웹 브라우저와 웹 서버 간에 HTML 문서를 주고받는 데 사용되는 프로토콜입니다. TCP(Transmission Control Protocol)는 IP(Internet Protocol) 위에서 데이터를 안정적으로 전송하기 위한 프로토콜로, 데이터를 분할하고 재조립하는 등의 기능을 제공합니다.

라우터는 다른 프로토콜을 사용하는 네트워크를 연결하여 데이터를 전송하는 장치입니다. 라우터는 네트워크 간의 경계에 위치하며, 받은 데이터 패킷을 최적의 경로를 찾아서 다음 네트워크로 전송하는 역할을 합니다. 따라서, 라우터는 여러 프로토콜을 지원하여 다양한 종류의 네트워크를 연결하고 데이터를 전송하는 데 사용됩니다.

 일반적으로 스위치와 브리지는 데이터 링크 계층에서 운용되고, 라우터는 네트워크 계층에서 운용된다. 
 
스위치(Switch)와 브리지(Bridge)는 네트워크에서 데이터를 전송하는 장비입니다. 이들은 주로 로컬 네트워크(예: 이더넷 네트워크) 내에서 데이터를 전달하고 관리하는 데 사용됩니다.

스위치(Switch): 스위치는 여러 대의 컴퓨터나 네트워크 장치들을 연결하여 데이터를 전송하는 장비입니다. 스위치는 데이터를 받으면 목적지 주소를 확인하여 해당하는 포트로만 데이터를 전달합니다. 이는 네트워크 트래픽을 최적화하고 충돌을 방지하기 위한 것입니다. 스위치는 일반적으로 데이터 링크 계층에서 동작하며, MAC 주소를 사용하여 데이터를 전달합니다.

브리지(Bridge): 브리지는 스위치와 비슷한 역할을 하지만, 주로 두 개의 서로 다른 네트워크를 연결하는 데 사용됩니다. 브리지는 두 개의 네트워크 사이에서 데이터를 전달하고 충돌을 방지합니다. 브리지는 데이터 링크 계층에서 동작하며, MAC 주소를 사용하여 데이터를 전달합니다.

따라서, 스위치와 브리지는 네트워크에서 데이터를 전송하고 관리하는 역할을 하는 장비로, 스위치는 여러 대의 컴퓨터를 연결하여 로컬 네트워크를 형성하고, 브리지는 두 개의 서로 다른 네트워크를 연결하여 데이터를 전달합니다.
 
세션 계층(Session Layer)은 통신 세션을 설정, 관리하고 종료하는 역할을 합니다. 이 계층은 통신하는 두 장치 간의 연결을 생성하고 유지하며, 데이터를 교환하는 동안 세션의 동기화와 체크포인팅을 담당합니다.

통신 세션은 논리적인 연결이며, 데이터를 주고받기 위한 일련의 상호작용입니다. 세션 계층은 이러한 통신 세션을 설정하고 관리하여 다음과 같은 일을 수행합니다:

세션 설정(Session Establishment): 통신 세션을 시작하기 위해 세션을 설정하고 연결을 확립합니다. 이 과정에서는 통신하는 두 장치 간에 초기화 및 인증 절차를 수행합니다.

세션 유지(Session Maintenance): 세션을 유지하고 필요한 경우 세션을 갱신합니다. 세션 계층은 데이터 전송 중에 세션 상태를 확인하고 필요한 조치를 취하여 세션의 지속성을 유지합니다.

세션 종료(Session Termination): 통신 세션이 완료되면 세션을 종료하고 연결을 해제합니다. 이 과정에서는 통신 장치 간에 마무리 절차를 수행하고, 세션 상태를 정리합니다.

세션 계층의 주요 목표는 통신 세션의 안정성과 신뢰성을 보장하는 것입니다. 이를 통해 데이터 전송 중에 세션의 상태를 관리하고 오류를 처리하여 데이터의 손실을 방지하고 통신의 효율성을 향상시킵니다.
 
 
응용계층이 최상위 계층
 
OSI(Open Systems Interconnection) 모델은 7개의 계층으로 구성되어 있으며, 상위 계층부터 하위 계층까지 순서대로 설명하겠습니다.

응용 계층 (Application Layer):

사용자와 직접 상호작용하는 응용 프로그램에 서비스를 제공합니다.
파일 전송, 이메일, 웹 브라우징 등과 같은 응용 프로그램에 대한 서비스를 제공합니다.

표현 계층 (Presentation Layer):

데이터의 형식을 변환하고, 코드화 및 암호화하는 기능을 수행합니다.
데이터의 형식 변환, 압축, 암호화, 해독 등을 처리합니다.

세션 계층 (Session Layer):

통신 세션을 설정, 관리하고 종료하는 기능을 제공합니다.
데이터 교환의 동기화와 체크포인팅을 담당합니다.

전송 계층 (Transport Layer):

종단 간의 통신을 담당하며, 신뢰성 있는 데이터 전송을 제공합니다.
데이터의 분할, 재조립, 오류 복구 등을 처리하고, 흐름 제어와 혼잡 제어를 수행합니다.

네트워크 계층 (Network Layer):

전체 네트워크를 관리하고 라우팅을 수행합니다.
데이터의 출발지부터 목적지까지의 경로를 설정하고, 패킷 전송을 관리합니다.

데이터 링크 계층 (Data Link Layer):

인접한 노드 간의 직접적인 통신을 제공합니다.
프레임 형태로 데이터를 전송하고, 오류 제어, 흐름 제어, 접근 제어 등을 담당합니다.
 
노드(Node)"는 네트워크 상에서 데이터를 주고받는 장치를 말합니다. 이는 컴퓨터, 서버, 라우터, 스위치 등과 같은 네트워크 장비를 포함합니다. 간단히 말해, 네트워크에 연결된 모든 장치가 노드입니다.

물리 계층 (Physical Layer):

물리적인 연결과 데이터 전송을 담당합니다.
전기적, 기계적, 기능적인 특성을 다루며, 비트 스트림을 전송합니다.
이렇게 각 계층은 데이터의 전송 및 통신을 관리하고, 상위 계층에서는 데이터를 추상화하여 응용 프로그램에 제공하고, 하위 계층에서는 하드웨어에 가까운 물리적인 통신을 관리합니다.


응표(은표) 세전(연봉도 쎄고) 내대물 (물리는 너무 쉽잖아 따로 암기안해도됨 최하위 계층 물리)
 
스위치: 허브의 기능을 확장한 것으로, 전송된 패킷(전송 단위)의 충돌이 일어나지않도록 목적지로 지정한 포트로만 1:1 데이터를 전송하는 장치다. 

기억장치관리

 https://m.blog.naver.com/wook2124/222108818676

1) 기억장치의 관리 전략의 개요 *
~ 보조기억장치의 프로그램이나 데이터를 주 기억장치에 적재시키는 시기(When), 적재 위
치(Where) 등을 지정하여 한정된 주기억장치
의 공간을 효율적으로 사용하기 위함
# 반입(Fetch), 배치(Placement), 할당 (Allocation), 교체(Replacemnet)
#반배할교
2) 반입(Fetch) 전략
~ 보조기억장치에 보관중인 프로그램이나 데 이터를 언제(When) 주기억장치로 적재할 것
인지를 결정하는 전략

2) 반입(Fetch) 전략
~ 보조기억장치에 보관중인 프로그램이나 데
이터를 언제(When) 주기억장치로 적재할 것
인지를 결정하는 전략
• 요구 반입(Demand Fetch)
실행중인 프로그램이 특정 프로그램이나 데 이터 등의 참조를 요구할 때 적재하는 방법
• 예상 반입(Anticjpatory Fetch)
실행중인 프로그램에 의해 참조될 프로그램 이나 데이터를 미리 예상하여 적재하는 방법

4) 교체(Replacement) 전략
4-46
- 이미 사용되고 있는 영역 중에서 어느
(Who) 영역을 교체할지 결정하는 전략
# FIFO, LRU, LFU, NUR, OPT, SCR
5) 주기억장치 할당(Allocation)의 개념 *
• 프로그램이나 데이터를 실행시키기 위해 주
기억장치에 어떻게(HOw) 할당할지 정함
• 연속 할당 기법: 프로그램을 주기억장치
에 연속으로 할당하는 기법
# 단일 분할 할당 기법: 오버레이, 스와핑 # 다중 분할 할당 기법: 고정(정적) 분할 할당 기법, 가변(동적) 분할 할당 기법

• 분산 할당 기법: 프로그램을 특정 단위의 조각으로 나누어 할당하는 기법
# 페이징(Paging) 기법
# 세그먼테이션(Segmentation) 기법
#연단다 분페세
6) 가상기억장치의 개요 *
- 보조기억장치(하드디스크)의 일부를 주기억 장치처럼 사용하는 것으로, 용량이 작은 주기 억장치를 마치 큰 용량을 가진 것처럼 사용하 는 기법
. 주기억장치의 용량보다 큰 프로그램을 실행 하기 위해 사용
_ 주기억장치의 이용률과 다중 프로그래밍 효
율을 높일 수 있음
_ 가상기억장치에 저장된 프로그램을 실행하
려면 가상기억장치의 주소를 주기억장치의
주소로 바꾸는 주소 변환 작업 필요

7) 페이징(Paging) 기법 ☆
_ 가상기억장치에 보관되어 있는 프로그램과
주기억장치의 영역을 동일한 크기로 나눈 후
나눠진 프로그램(페이지)을 동일하게 나눠진
주기억장치의 영역(페이지 프레임)에 적재시
켜 실행하는 기법
_ 일정한 크기로 나눈 단위를 페이지(Page)
라 하고, 페이지 크기로 일정하게 나누어진 주기억장치의 단위를 페이지 프레임(Page Frame)이라 함
- 외부 단편화는 발생하지 않으나, 내부 단편 화 발생
4-48
_ 주소 변환을 위해 페이지의 위치 정보를 갖 고 있는 페이지 맵 테이블(Page Map
Table) 필요 -> 페이지 맵 테이블 사용으로 비용 증가, 처리 속도 감소

⑨ 페이지 크기 **
• 페이지 크기가 작을 경우
-페이지 단편화가 감소되고, 한 개의 페이지 를 주기억장치로 이동하는 시간이 줄어듬
-불필요한 내용이 주기억장치에 적재될 확률
이 적으므료 효율적인 워킹 셋 유지 가능
-Locality에 더 일치할 수 있기 때문에 기억
장치 효율 높아짐
-페이지 정보를 갖는 페이지 맵(사상) 테이블 의 크기가 커지고, 매핑 속도가 늦어짐
-디스크 접근 횟수가 많아져서 전체적인 입.
출력 시간은 늘어남



• 페이지 크기가 클 경우
-페이지 단편화가 증가되고, 한 개의 페이지 를 주기억장치로 이동하는 시간이 늘어남
-불필요한 내용까지도 주기억장치에 적재될
수 있음
-페이지 정보를 갖는 페이지 맵(사상) 테이블 의 크기가 작아지고, 매핑 속도가 빨라짐
-디스크 접근 횟수가 줄어들어 전체적인 입, 출력 효율성이 증가됨

10) Locality(지역성, 구역성)
~ 프로세스가 실행되는 동안 주기억장치를 참 조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론
- 스래싱(Thrashing)을 방지하기 위한 워킹
셋 이론의 기반
- 데닝(Denning) 교수에 의해 구역성의 개념 이 증명됐으며, 캐시 메모리 시스템의 이론 적 근거

스래싱(Thrashing)은 컴퓨터 시스템에서 메모리 부족 상태에서 발생하는 현상으로, 프로세스들이 필요 이상으로 많은 페이지 폴트(page fault)를 발생시키며 대부분의 시간을 페이지 교체 작업에 소비하는 현상을 말합니다. 이로 인해 시스템 성능이 급격히 저하되고, 작업 처리량이 감소하게 됩니다.


워킹 셋(Working Set) *
~ 프로세스가 일정 시간 동안 자주 참조하는
페이지들의 집합
- 주기억장치에 상주시킴으로써 페이지 부재
및 페이지 교체 현상이 줄어들어 프로세스의
기억장치 사용이 안정됨
- 시간이 지남에 따라 자주 참조하는 페이지
들의 집합이 변화하기 때문에 워킹 셋은 시간
에 따라 변경됨


소프트웨어 관련 신기술

Mashup
웹에서 제공하는 정 보 및 서비스를 이용하 여 새로운 소프트웨어 나 서비스, 데이터베이 스등을 만드는 기술
- 콘텐츠를 조합하여
하나의 서비스로 제공 하는 웹 사이트 또는 애
플리케이션

페이지 부재 빈도(PFF; Page Fault Frequency) 방식

- 페이지 부재율에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지
부재율을 적정 수준으로 유지하는 방식
- 페이지 부재(Page Fault)는 프로세스 실행
시 참조할 페이지가 주기억장치에 없는 현상 이며, 페이지 부재 빈도는 페이지 부재가 일 어나는 횟수를 의미함

스래싱 현상 방지 방법
-다중 프로그래밍의 정도를 적정 수준으로 유지 *
-페이지 부재 빈도(Page Fault
Frequency)를 조절해 사용
-워킹 셋(Working Set)을 유지함
-부족한 자원을 증설하고. 일부 프로세스를 중단시킴

SQL 응용

DROP:
DOMAIN, SCHEMA, TABLE, VIEW, INDEX 삭제
-DROP DOMAIN, SCHEMA, TABLE, VIEW,
INDEX 도스테뷰인명;
* CASCADE: 참조하는 모든
| 개체 함께 제거 (impo)
*RESTRICTED: 다른 개체가
제거할 요소를 참조 중이면 제
거취소


HAVING절: GROUP BY와 함께 사용되 며, 그룹에 대한 조건 지정
* DISTINCT: 중복 튜플 제거

중복 튜플을 제거한다"는 것은 쿼리 결과에서 중복된 값을 가진 레코드(행)를 제거한다는 의미입니다. 예를 들어, 특정 열을 기준으로 SELECT 문을 실행했을 때, 그 열의 값이 중복되는 경우가 있을 수 있습니다. DISTINCT를 사용하면 중복된 값들을 제거하여 유일한 값만을 반환합니다. 따라서 결과 집합에는 각 값이 한 번만 포함됩니다.

# UDDI(Universal Description,
Discovery and Integration)
인터넷에서 전 세계의 비즈니스 업체 목록에 자신의 목록을 등록하기 위한 확장성 생성 언 어XML)기반의 규격
# SOAP(Simple Object Access
Protocol)
웹 서비스를 실제로 이용하기 위한 객체 간
의 통신 규약

애플리케이션 성능
처리량(throughput): 일정 시간 내 애플리케이션이 처리하는 일의 양


애플리케이션 성능 저하 원인 분석
_ DB에 필요 이상의 많은 데이터를 요청한
경우
- 커넥션 풀(Connection Pool)의 크기를 너 무 작거나 크게 설정한 경우
• JDBCL ODBC 같은 미들웨어를 사용한
후 종료하지 않아 연결 누수가 발생한 경우
• 대량의 파일을 업로드하거나 다운로드해 처
리 시간이 길어진 경우

관계대수 및 관계해석


UML:

UML(Unified Modeling Language)은 소프트웨어 시스템을 시각적으로 모델링하고 표현하기 위한 표준화된 언어입니다. 이를 통해 시스템의 구조, 동작, 그리고 상호 작용을 이해하고 문서화할 수 있습니다. UML의 구성 요소는 사물(Things), 관계(Relationships), 다이어그램(Diagrams)으로 이루어져 있습니다. 사물은 시스템을 이루는 요소들을 나타내며, 관계는 사물 간의 상호 작용을 정의합니다. 다이어그램은 시스템을 시각적으로 표현하기 위한 도구로, 여러 종류의 다이어그램을 사용하여 시스템을 다양한 관점에서 표현할 수 있습니다.

1) UML(Unified Modeling
Language)의 구성 요소 ☆
_ 사물
_ 관계
_ 다이어그램
#사관다 (사간다)


HASH (단방향)
컴퓨터 암호 알고리즘에서 해시 함수는 단방향으로 작동하는 주된 이유는 보안성 때문입니다.

양방향 알고리즘 종류

1975년 미국 NBS에서 발표
DES
한 개인키 암호화 알고리즘 블록 크기는 64비트이며, 키 길이는 56비트


PnP(Plug and Play, 자동 감지 기능):
-컴퓨터 시스템에 프린터나 사운드 카드 등 의 하드웨어를 설치했을 때, 해당 하드웨어 를 사용하는 데 필요한 시스템 환경을 OS가 자동으로 구성해주는 기능
-> 운영체제가 하드웨어의 규격을 자동으로 인식하여 동작하게 해주므로 PC 주변장치를 연결할 때 사용자가 직접 환경을 설정하지 않 아도 됨, PnP기능을 활용하기 위해서는 하드 웨어와 소프트웨어 모두 Pnp를 지원해야 함

TCP는 전송계층에 있는 것 impo

OSI 7계층의 전송 계층(4계층)
에 해당
-신뢰성 있는 연결형 서비스 제공 *
- 패킷의 다중화, 순서 제어, 오류 제어, 흐름 제어 기능 제공
- 스트림(Stream) 전송 기능 제공 *

응용계층은 최상위 계층이다.


하드웨어 신기술

고가용성 (HA: High Availability)

긴 시간동안 안정적 인 서비스 운영을 위해
장애 발생 시 즉시 다른 시스템으로 대체 가능한 환경을 구축하는 메커니즘
# Hot Standby(상시대기 방식), Mutual
Take-Over(상호 인수),
Concurrent Access


보안 및 API

1) 소프트웨어 개발 보안의 개요
- 소프트웨어 개발 과정에서 발생할 수 있는
보안 취약점을 최소화하여 보안 위협으로부 터 안전한 소프트웨어를 개발하기 위한 일련 의 보안 활동을 의미
# 시큐어 코딩(Secure Coding) *
- 기밀성(Confidentiality), 무결성 (Integrity), 가용성(Availability) 유지하는 것 을 목표
_ 정부에서 제공하는 소프트웨어 개발 보안
가이드를 참고하여 소프트웨어 개발 과정에 서 점검해야 할 보안 항목들을 점검

가용성:
가용성(Availability)은 시스템이 정상적으로 작동하고 사용 가능한 상태를 유지하는 것을 의미합니다. 다시 말해, 시스템이 사용자가 필요로 할 때 언제든지 이용 가능하고 정상적으로 작동해야 한다는 것을 의미합니다. 이는 서비스 중단이나 다운타임을 최소화하고, 사용자가 요청한 서비스에 대한 응답이 신속하게 이루어져야 한다는 것을 의미합니다.


보안 솔루션
방화벽:

내부 네트워크에서 외부로 나가는 패킷은 그대로 통과시키고, 외부에서 내부 네트워크로 들어오는 패킷은 내용을 엄밀히 체크하여 인증된 패킷만 통과시키는 구조

ESM Enterprise Security Management/ (impo):

방화벽, IDS, IPS, 웹 | 방화벽, VPN 등에서 발생한 로그 및 보안 이벤트를 통합하여 관리하는 보안 솔루션, 보안 솔루션 간의 상호연동을 통해 종합적인 보완 관리 체계를 수립할 수 있음

침입방지시스템 (IPS: Intrusion Prevention System)

방화벽과 침임 탐지 시 스템을 결합한 것으로, 비정상적인 트래픽을 능동적으로 차단하고 격리하는 등의 방어 조치를 취하는 보안 솔루션


트랜잭션:
트랜잭션의 특성 ACID 로 외우기
원자성 (Atomity): 트랜잭션 연산을 데이터베이스 모두에 반영되든지 아니면 전혀 반영되지 않아야함 (All or Nothing)

일관성 (Consistency): 트랜잭션이 실행을 성공적으로 완료할 시 일관성있는 데이터베이스 상태를 유지

독립성(Isolation, 격리성)
둘 이상 트랜잭션 동시 실행 시 한 개의 트랜잭션만 접근이 가능하여 간섭 불가

영속성(Durability)
성공적으로 완료된 트랜잭션 결과는 영구적으로 반영됨



CRUD 매트릭스
3-104
- Create, Read, Update, Delete, 'C > D> U > R'의 우선순위 적용
- 테이블, 프로세스에 C, R, U, D가 모두 없 는 경우
- 테이블에 C 또는 R이 없는 경우 (프로세스 는 하나만 있어도 돌아감)

데이터베이스 보안 / 스토리지

3) 암호화 방식
개인키 암호 방식 (Private Key Encryption)

동일한 키로 데이터를 암호화하고 복호화 함,
비밀키는 사용 권한이 있는 사용자만 나눠가짐
DES, AES, SEED, ARIA

DES(Digital Encryption Standard)는 초기에 사용된 대표적인 대칭키 암호화 알고리즘입니다. 56비트 키를 사용하여 데이터를 암호화하고 복호화합니다. 하지만 DES는 현재 안전성이 떨어져서 더 강력한 암호화 알고리즘으로 대체되었습니다.

AES(Advanced Encryption Standard)는 DES의 후속으로 개발된 알고리즘으로, 현재 가장 널리 사용되는 대칭키 암호화 알고리즘 중 하나입니다. 128, 192 또는 256비트의 키를 사용하여 데이터를 안전하게 암호화하고 복호화합니다. AES는 안전성이 뛰어나고 효율적인 암호화를 제공하여 다양한 보안 응용 프로그램에서 널리 사용됩니다.


접근통제

- 데이터가 저장된 객체와 이를 사용하려는 주체 사이의 정보 흐름을 제한하는 것
- 접근통제 3요소: 접근통제 정책, 접근통제 보안모델, 접근통제 메커니즘

#정보커

임의 접근통제(DAC; Discretionary
Access Control)
-데이터에 접근하는 사용자의 신원에 따라 접근 권한 부여
# 접근통제 권한=주체


강제 접근통제(MAC; Mandatory
Access Control)
-주체와 객체의 등급을 비교해 접근 권한 부

# 접근통제 권한=제3자

DAC:
DAC는 "접근 제어"라는 의미로 "DAC"는 "Discretionary Access Control"의 줄임말입니다. 이는 개인이나 그룹에 따라 접근 권한을 부여하거나 제한하는 보안 정책입니다.

IBP(Individual-Based Policy)와 GBP(Group-Based Policy)는 DAC를 적용하는 방식 중 일부를 나타냅니다.

IBP는 개인을 기반으로 한 접근 제어를 의미하고, GBP는 그룹을 기반으로 한 접근 제어를 의미합니다.

IBP는 개별 사용자의 특정 권한을 설정하고 관리하는 반면, GBP는 그룹에 속한 사용자들에게 일괄적으로 권한을 부여하거나 제한합니다.

1975년 미국 NBS에서 발표한 개인키 암호화 알고리즘
DES - 블록 크기는 64비트이며, 키 길
이는 56비트 *




10진 코드: 
코드의 좌측에서 우측으로 갈수록 세분화되는 글부을 정의하여 10진수로 번호를 부여하는 방법이다.
도서 분류식 코드라고 불리며, 그룹 레별 별 최대 10개의 항목까지 구분 할 수 있다.
각 자리 수는 0 ~ 9 까지 10개항목 밖에 안 들어가니까 그런거임. 
 
그룹 분류: 
전체 대상을 대, 중, 소분류 구분하여 순차번호를 부여하는 방법이다.
10진 코드와 다르게 분류 개수에 제한을 두지 않는다.
 
해시함수의 종류
기수변환법 (Radix Conversion): 키의 값을 다른 진법으로 변환하여 저장위치 결정
 
Radix는 진수를 나타내는 기호로, 주어진 숫자 체계에서 사용되는 기본 단위를 나타냅니다. 일반적으로 10진수에서는 0부터 9까지의 숫자를 사용하므로 Radix는 10이 됩니다. 그러나 다른 진수 체계에서는 다른 값이 될 수 있습니다.

예를 들어, 2진수 체계에서는 0과 1을 사용하므로 Radix는 2가 됩니다. 마찬가지로 8진수 체계에서는 0부터 7까지의 숫자를 사용하므로 Radix는 8이 되고, 16진수 체계에서는 0부터 9까지의 숫자와 A부터 F까지의 문자를 사용하므로 Radix는 16이 됩니다.

기수 변환법(Radix Conversion)은 특정 진수 체계에서 표현된 숫자를 다른 진수 체계로 변환하는 과정을 의미합니다. 이는 주어진 숫자를 해당 진수 체계의 기본 단위로 나누고 나머지를 계산하여 변환하는 과정을 반복하여 수행됩니다.
 
제산법 (Division): 키의 값을 특정 값으로 나눈 나머지 값을 이용해 저장위치 결정
 
폴딩법 (Folding): 키를 여러 부분으로 나누어 부분별 숫자의 합연산, XOR연산의 결과로 저장위치 결정
 
쉘정렬 (p.1-147): 
많은 데이터들의 이동이 필요한 삽입정렬의 단점을 보완한 정렬방식이다.
데이터들의 간격을 정하고 간격을 점차 줄여가면서 삽입정렬을 진행한다. 
 
비대칭키 (RSA)
서로 다른 암호화키를 사용하는 방식
 
RSA(비대칭키 암호화)는 서로 다른 두 개의 키를 사용하여 데이터를 암호화하고 복호화하는 암호화 방식입니다. 이 방식은 공개키(public key)와 개인키(private key) 두 개의 키를 사용합니다.

공개키(public key): 이 키는 누구나 알 수 있고, 데이터를 암호화하는 데 사용됩니다. 즉, 데이터를 공개키로 암호화하면 해당 데이터는 개인키로만 복호화할 수 있습니다.

개인키(private key): 이 키는 공개되지 않고, 데이터를 복호화하는 데 사용됩니다. 즉, 개인키는 공개키로 암호화된 데이터를 해독하는 데 필요합니다.

RSA 암호화는 수학적으로 복잡한 알고리즘에 기반하여 동작합니다. 이 알고리즘은 두 개의 큰 소수를 사용하여 공개키와 개인키를 생성하고, 이 소수들의 곱셈을 인수 분해하는 것이 매우 어렵다는 수학적 원리에 기초합니다. 이러한 원리 때문에 RSA 암호화는 안전하다고 여겨집니다.

RSA는 Rivest, Shamir, Adleman의 세 개의 개발자의 성이 두드러진 암호화 알고리즘의 약자입니다. RSA 알고리즘은 이들 개발자들에 의해 고안되었으며, 각각의 성이 첫 글자를 따서 명명되었습니다.
 
 
RSA의 동작 과정은 다음과 같습니다:
 
데이터를 전송하려는 송신자는 수신자의 공개키를 사용하여 데이터를 암호화합니다.

암호화된 데이터를 수신자에게 전송합니다.

수신자는 자신의 개인키를 사용하여 암호화된 데이터를 해독하여 원래의 데이터를 복원합니다.

이러한 방식으로 RSA는 안전하고 신뢰할 수 있는 통신을 보장합니다. 공개키를 통해 데이터를 안전하게 전송할 수 있으며, 개인키는 오직 수신자만이 가지고 있으므로 데이터를 안전하게 해독할 수 있습니다.ㅂ



 
Linux 쉘스크립트
기본입력은 read 명령어를 사용한다.
기본출력은 echo명령어를 사용하여 변수를 출력할 때는 $를 붙인다. 
 
프로세스 통신(IPC Inter Process Communication)
직접적인 통신 방법이 없는 프로세스들이 통신을 하기 위해 상요하는 특별한 기법들이다. 
대표적인 IPC 기법에는 공유 메모리 기법, 메세지 전달 기법이 있다. 
-공유 메모리 (Shared Memory) : 공유 메모리 영역을 통해 데이터 교환, 빠르지만 불안정
-메세지 전달 (Message Passing): OS에 의해 데이터 교환, 느리지만 안정적
 
회피
안정적 상태를 유지할 수 있는 프로세스의 요청만 받아들이는 방식으로 교착상태 발생 가능성을 회피하는 것이다. 
대표적인 회피 알고리즘으로 은행원 알고리즘이 있다/.
 

 
 
 

럼바우 객체지향(Rumbaugh Object-Oriented)는 객체지향 프로그래밍의 개념을 정의하고 설명하는 방법론 중 하나입니다. 그 주요 목표는 시스템을 객체들의 모임으로 바라보고, 이러한 객체들 간의 상호작용을 중심으로 소프트웨어를 설계하고 개발하는 것입니다.

럼바우 객체지향은 다음과 같은 핵심 개념을 갖고 있습니다:

객체(Object): 현실 세계의 개념이나 사물을 소프트웨어 안에서 모델링한 것으로, 데이터와 해당 데이터를 처리하는 메서드(method)로 이루어져 있습니다.

클래스(Class): 객체를 생성하기 위한 틀이며, 객체의 속성(attribute)과 행위(behavior)를 정의합니다. 객체의 설계도와 같은 역할을 합니다.

상속(Inheritance): 하나의 클래스가 다른 클래스의 속성과 메서드를 상속받아 재사용할 수 있는 기능입니다. 상속을 통해 코드의 중복을 줄이고 유지보수성을 향상시킵니다.

다형성(Polymorphism): 같은 이름의 메서드가 서로 다른 기능을 수행할 수 있도록 하는 개념으로, 메서드 오버라이딩(Method Overriding)과 메서드 오버로딩(Method Overloading)을 통해 구현됩니다.

캡슐화(Encapsulation): 데이터와 데이터를 처리하는 메서드를 하나의 단위로 묶어서 외부에서의 접근을 제어하는 것을 말합니다. 이를 통해 객체의 내부 구현을 숨기고 보호할 수 있습니다.

럼바우 객체지향은 이러한 개념들을 사용하여 소프트웨어를 객체 중심으로 설계하고 개발함으로써 코드의 재사용성, 유지보수성, 확장성을 향상시키고, 개발 과정에서의 생산성을 높이는 것을 목표로 합니다.




미들웨어 솔루션 유형에 포함되지않는 것이 was, rpc, orb라고 하는데 여기에 대해서 쉽게 각각 설명해줘

WAS (Web Application Server):

WAS는 웹 애플리케이션을 실행하기 위한 서버 소프트웨어입니다.
클라이언트의 요청을 받아서 동적인 컨텐츠를 생성하고 전달하는 역할을 합니다.
일반적으로 웹 애플리케이션의 배포, 실행, 관리 등을 담당합니다.

RPC (Remote Procedure Call):

RPC는 원격 프로시저 호출의 약어로, 원격 시스템에 위치한 프로시저나 함수를 로컬에서 호출하는 기술입니다.
클라이언트가 로컬 프로시저를 호출하는 것처럼 원격에 있는 서버의 프로시저를 호출할 수 있게 해줍니다.
네트워크 상에서 클라이언트와 서버 간의 통신을 위해 사용됩니다.

ORB (Object Request Broker):

ORB는 객체 요청 브로커의 약어로, 분산 객체 시스템에서 객체 간의 통신을 조정하는 소프트웨어입니다.
클라이언트가 분산된 객체를 로컬 객체처럼 사용할 수 있게 해줍니다.
CORBA(공통 객체 요청 브로커 아키텍처)에서 사용되는 기술로, 여러 플랫폼 간의 상호 운용성을 제공합니다.
이러한 솔루션들은 분산 시스템에서의 통신과 상호 운용성을 위해 사용되는 다양한 기술들 중 일부입니다.

web server는 미들웨어솔루션이 아니라는데 그러면 뭐야?

웹 서버(Web Server)는 미들웨어 솔루션이 아닌 소프트웨어의 일종입니다. 웹 서버는 클라이언트의 요청을 받아들이고, 정적인 웹 페이지를 제공하는 역할을 합니다. 클라이언트가 웹 페이지를 요청하면 웹 서버는 해당 페이지를 찾아서 클라이언트에게 전송합니다.

웹 서버는 주로 HTTP(Hypertext Transfer Protocol)를 사용하여 클라이언트와 통신하며, 일반적으로 HTML, CSS, JavaScript 등의 정적 파일을 제공합니다. 또한, 웹 서버는 동적인 콘텐츠를 제공하기 위해 서버 측 스크립팅 언어(PHP, Python, Ruby 등)와 함께 사용될 수도 있습니다.

웹 서버의 주요 기능은 다음과 같습니다:

클라이언트로부터 HTTP 요청을 받아들이기
요청된 파일을 찾아서 클라이언트에게 전송하기
요청된 파일이 없는 경우 오류 메시지를 반환하기
요청된 URL을 해석하고 적절한 서버 측 스크립트를 실행하여 동적인 콘텐츠를 생성하기(옵션)
웹 서버는 웹 애플리케이션과 함께 사용되어 동적인 콘텐츠를 제공하는 데에도 사용될 수 있지만, 그 자체로는 미들웨어 솔루션이 아니라는 것을 기억해야 합니다.


웹 서버가 정상적으로 작동하는지 확인하는 몇 가지 방법은 다음과 같습니다:

웹 브라우저를 통한 접속: 웹 브라우저를 열고 해당 웹 서버의 URL을 입력하여 웹 페이지에 접속합니다. 페이지가 정상적으로 로드되고 내용이 표시된다면 웹 서버가 작동하고 있음을 확인할 수 있습니다.

Ping 테스트: 명령 프롬프트 또는 터미널에서 웹 서버의 IP 주소를 ping하여 응답이 있는지 확인할 수 있습니다. 응답이 있는 경우 웹 서버가 동작 중이라고 볼 수 있습니다.

서버 상태 모니터링 도구 사용: 서버 상태를 모니터링하는 도구를 사용하여 웹 서버의 CPU, 메모리 사용량, 네트워크 트래픽 등을 확인할 수 있습니다. 이를 통해 웹 서버의 상태를 실시간으로 모니터링할 수 있습니다.

로그 파일 확인: 웹 서버의 로그 파일을 확인하여 사용자의 요청과 응답 내역을 살펴볼 수 있습니다. 로그 파일에는 사용자의 IP 주소, 접속 시간, 요청한 페이지 등이 기록되어 있으며, 이를 통해 웹 서버의 동작 상태를 추적할 수 있습니다.

서비스 상태 확인: 다양한 웹 서비스를 통해 해당 웹 서버의 상태를 확인할 수 있습니다. 예를 들어, 서비스 상태 확인 도구를 사용하면 해당 서비스의 응답 시간이나 가용성 등을 확인할 수 있습니다.

이러한 방법들을 사용하여 웹 서버가 정상적으로 작동하는지를 확인할 수 있으며, 필요에 따라 추가적인 조치를 취할 수 있습니다.

 
 

 
시퀀스 다이어그램(Sequence Diagram)은 객체 간의 상호 작용을 그림으로 나타낸 다이어그램입니다. 주로 시간의 흐름에 따른 객체 간의 메시지 전달을 보여주는 데 사용됩니다. 시퀀스 다이어그램은 객체 지향 소프트웨어 개발에서 요구사항 분석, 설계, 구현 단계에서 사용됩니다.

시퀀스 다이어그램은 다음과 같은 요소로 구성됩니다:

생명선(Lifeline): 객체의 수명을 나타내는 선으로, 객체가 존재하는 시간 동안 그려집니다. 일반적으로 객체의 이름 위에 수직 선을 그려서 표시합니다.

실행(Execution): 객체가 어떤 작업을 수행하는 동안의 시간을 나타내는 영역입니다. 생명선 위에 표시되며, 객체가 메시지를 수신하고 처리하는 동안 표시됩니다.

메시지(Message): 객체 간에 주고받는 메시지를 나타내는 화살표입니다. 메시지는 일반적으로 발신자와 수신자의 이름, 메시지의 이름, 선택적으로 전달되는 매개변수 등을 표시합니다. 다양한 종류의 메시지가 있으며, 대표적으로 동기적 메시지와 비동기적 메시지가 있습니다.

시퀀스 다이어그램은 객체 간의 상호 작용을 시각적으로 보여주므로, 시스템의 동작을 이해하고 디자인하는 데 유용합니다. 또한, 다양한 상황에서의 시스템 동작을 예측하고 분석하는 데 도움이 됩니다. 따라서 시퀀스 다이어그램은 소프트웨어 개발 과정에서 중요한 도구 중 하나입니다.
 

 
행위적 패턴(Behavioral Patterns)은 소프트웨어 디자인 패턴 중 하나로, 객체들 간의 상호작용이나 알고리즘을 중심으로 설계합니다. 이러한 패턴은 객체 간의 행동이나 책임을 분산시키고, 유연하고 재사용 가능한 소프트웨어를 만들기 위해 사용됩니다.

행위적 패턴은 주로 객체의 상태나 알고리즘, 상호작용을 중심으로 설계되며, 다음과 같은 주요 패턴들이 포함됩니다:

스트래티지 패턴(Strategy Pattern): 알고리즘을 캡슐화하고 상호 교체 가능하게 만들어 동일한 작업을 다양한 방식으로 수행할 수 있도록 합니다.

템플릿 메서드 패턴(Template Method Pattern): 알고리즘의 구조를 정의하고 일부 단계를 서브 클래스에게 위임하여 구체적인 구현을 다루는 패턴입니다.

옵저버 패턴(Observer Pattern): 객체 사이에 일대다의 의존 관계를 정의하여 한 객체의 상태가 변경될 때 다른 객체들이 이를 감지하고 자동으로 업데이트되도록 하는 패턴입니다.

커맨드 패턴(Command Pattern): 요청을 객체의 형태로 캡슐화하여 이를 매개변수화하고 다양한 요청, 큐 또는 로깅에 사용할 수 있도록 하는 패턴입니다.

스테이트 패턴(State Pattern): 객체의 상태에 따라 동작을 변경할 수 있도록 상태를 캡슐화하는 패턴입니다.

체인 오브 리스폰서 패턴(Chain of Responsibility Pattern): 요청을 처리할 수 있는 다수의 객체를 연결하여 요청을 처리하거나 다음 처리 단계로 전달하는 패턴입니다.

인터프리터 패턴(Interpreter Pattern): 언어의 문법 규칙을 클래스로 표현하여 특정 언어의 문장을 해석하거나 실행하는 패턴입니다.

행위적 패턴은 객체 간의 상호작용을 관리하고 유연성을 확보하기 위해 사용됩니다. 이러한 패턴을 사용하면 소프트웨어의 유지보수성과 확장성을 향상시킬 수 있습니다.
 

 

컴포넌트 설계 시 () 에 의한 설계를 따를 경우, 해당명세에서는 (1) 컴포넌트의 오퍼레이션 사용 전에 참이되어야할 선행조건, (2) 사용 후 만족되어야할 결과조건 (3) 오퍼레이션 실행되는 동안 항상 만족되어야할 불변조건등이 포함되어야한다. 

근데 여기 문제 보기에 
1. 협약 
2. 프로토콜 
3. 패턴 
4. 관계 

여기서 왜 정답이 협약이야? 프로토콜은 왜 안되는거야?
 
주어진 설명에서, 컴포넌트 설계 시에 참이 되어야 하는 선행조건과 만족되어야 하는 결과조건 등이 명세되어야 한다고 합니다. 이러한 조건들은 컴포넌트 간의 상호 작용을 규정하는 일종의 "약속" 또는 "규약"이기 때문에 "협약"이라는 용어가 적절합니다.

프로토콜은 보통 네트워크 통신에서 사용되는 규약을 의미하며, 컴포넌트 설계 시에 사용되는 조건들과는 약간 다른 의미를 갖습니다. 프로토콜은 주로 통신의 형식, 메시지의 구조, 데이터 전송 방법 등을 정의하며, 컴포넌트 간의 상호 작용보다는 네트워크 상의 데이터 교환에 관련이 있습니다. 따라서 프로토콜은 이 문제에 맞지 않습니다.

따라서 주어진 문제에서는 "협약"이 설계 시에 사용되어야 하는 조건들을 가장 잘 설명하는 용어입니다.
 

 
활동 다이어그램(Activity Diagram), 시퀀스 다이어그램(Sequence Diagram), 그리고 유스케이스 다이어그램(Use Case Diagram)은 모두 시스템의 동작을 표현하는 행위를 나타냅니다.

활동 다이어그램(Activity Diagram): 활동 다이어그램은 시스템이나 객체의 작업 흐름을 나타냅니다. 일련의 활동(액션)들과 그들 사이의 제어 흐름을 보여줍니다. 각각의 액션은 특정 작업을 나타내며, 활동 다이어그램은 이러한 액션들 간의 순서와 조건을 표현하여 시스템이 어떻게 동작하는지를 이해할 수 있게 해줍니다.

시퀀스 다이어그램(Sequence Diagram): 시퀀스 다이어그램은 시스템 내의 객체 간의 상호 작용을 시간 순서에 따라 나타냅니다. 객체들 간의 메시지 교환을 통해 시스템의 동작 흐름을 보여줍니다. 이러한 다이어그램은 객체들이 어떻게 상호 작용하고 통신하는지를 시각적으로 표현하여 시스템의 동작을 이해할 수 있도록 도와줍니다.

유스케이스 다이어그램(Use Case Diagram): 유스케이스 다이어그램은 시스템의 기능적 요구사항을 나타내며, 시스템의 사용자와 시스템 간의 상호 작용을 보여줍니다. 사용자의 요청과 시스템의 응답을 유스케이스라는 동작 단위로 나타내며, 시스템의 동작을 사용자의 관점에서 쉽게 이해할 수 있도록 도와줍니다.

이러한 다이어그램들은 각각의 방법으로 시스템의 동작을 나타내고, 시스템의 동작을 이해하고 설명하는 데 유용합니다.
 

 

 
자료 사전에서 자주 사용되는 기호들에 대해 간단히 설명하겠습니다:

{} (중괄호): 중괄호는 일련의 항목을 그룹화하는 데 사용됩니다. 중괄호 안에 있는 항목들은 논리적으로 하나의 단위로 처리될 수 있습니다. 예를 들어, 중괄호 안에는 연관된 속성이나 데이터 요소들을 나타낼 수 있습니다.

[] (대괄호): 대괄호는 선택적인 요소를 나타냅니다. 즉, 대괄호 안에 있는 항목은 생략될 수 있습니다. 자료 사전에서는 선택적인 데이터 요소를 표현하는 데 사용될 수 있습니다.

() (소괄호): 소괄호는 일반적으로 논리적인 그룹을 형성하거나 우선 순위를 나타내는 데 사용됩니다. 즉, 소괄호 안에 있는 항목은 먼저 처리되거나 그룹으로 처리될 수 있습니다.

| (파이프 또는 수직 막대): 파이프는 선택 사항을 표현하는 데 사용됩니다. 즉, 파이프로 구분된 여러 항목 중 하나를 선택할 수 있습니다. 이것은 대체 가능한 값들을 표현하는 데 사용될 수 있습니다.

= (등호): 등호는 속성이나 값의 할당을 나타냅니다. 즉, 왼쪽과 오른쪽에 있는 값이 같음을 나타냅니다. 자료 사전에서는 속성과 해당 값이나 정의 사이의 관계를 표현하는 데 사용될 수 있습니다.

이러한 기호들은 자료 사전에서 데이터 요소의 구조와 의미를 명확하게 표현하는 데 사용됩니다. 이해하기 쉽고 일관된 표기법을 사용하여 데이터를 문서화하고 정의하는 데 도움이 됩니다.





색인 순차 편성 정의
-색인 구역, 기본 데이터 구역, 오버플로우 구역으로 구성된다. 
트랙색인: 가장 작은 단위 색인
실린더색인: (트랙색인이 많을 경우) 트랙 색인에 대한 색인
마스터 색인: (실린더 색인이 많을 경우) 실린더 색인에 대한 색인
 
서브넷팅: 
배정받은 하나의 네트워크 주소를 다시 여러 개의 작은 하위 네트워크를 나누어 사용하는 방식이다.
32비트 중 네트워크 비트를 제외한 호스트 비트에서 서브넷을 위한 비트를 부여한다.
-총 비트(32)  - 네트워크 비트(24) = 호스트 비트
-8개의 서브넷 분할을 위해 호스트 비트의 왼쪽 3비트를 할당
 
 
인터페이스 분리 원칙(Interface Segregation Principle, ISP)은 객체 지향 프로그래밍에서 중요한 설계 원칙 중 하나입니다. 이 원칙은 "클라이언트는 자신이 사용하지 않는 메서드에 의존하도록 강요받아서는 안 된다"라는 개념을 기반으로 합니다.

간단히 말해, ISP는 클라이언트가 사용하는 인터페이스가 자신이 필요로 하는 메서드만 포함하도록 해야 한다는 원칙입니다. 인터페이스는 클라이언트가 어떤 기능을 사용할지를 결정하는데, 만약 인터페이스가 너무 크거나 다양한 기능을 포함하고 있다면, 클라이언트가 필요하지 않은 메서드에도 의존해야 하는 문제가 발생할 수 있습니다. 이는 클라이언트와 인터페이스 간의 결합도를 높이고 유연성을 저하시킬 수 있습니다.

ISP를 따르면 인터페이스는 작고 응집력이 강해야 합니다. 즉, 한 인터페이스는 한 가지 목적을 가지고 있어야 하며, 클라이언트가 필요로 하는 기능에만 해당하는 메서드들로 구성되어야 합니다. 이를 통해 클라이언트는 자신이 필요로 하는 기능에만 의존하게 되어 불필요한 의존성을 최소화하고, 변경에 대한 영향을 최소화할 수 있게 됩니다.
 

 
 
자료흐름도(Data Flow Diagram, DFD)는 시스템의 데이터 흐름과 처리 과정을 시각적으로 나타내는 데 사용되는 다이어그램입니다. 정답인 process, data, flow, data store, terminator는 DFD의 주요 구성 요소를 나타냅니다. 각 요소의 역할은 다음과 같습니다:

Process (프로세스): 데이터의 처리를 나타냅니다. 시스템 내에서 입력된 데이터를 가공하고 처리하는 과정을 나타내며, 주로 사각형으로 표시됩니다.

Data (데이터): 시스템에서 처리되는 데이터를 나타냅니다. 정보의 흐름에 따라 데이터가 변환되거나 전달되는 과정을 보여줍니다. 주로 원형으로 표시됩니다.

Flow (흐름): 데이터의 흐름을 나타냅니다. 데이터가 프로세스로부터 입력되고, 처리되며, 결과로 출력되는 과정을 표현합니다. 화살표로 표시됩니다.

Data Store (데이터 저장소): 시스템 내에서 데이터가 저장되는 곳을 나타냅니다. 데이터베이스나 파일 시스템 등과 같은 저장소를 표현합니다. 주로 평행사변형으로 표시됩니다.

Terminator (종료자): 시스템과 외부 간의 상호 작용을 나타냅니다. 외부에서 시스템으로 데이터가 입력되거나, 시스템에서 결과가 외부로 출력되는 지점을 나타냅니다. 주로 타원형으로 표시됩니다.

"Data Dictionary (데이터 사전)"은 주요 구성 요소가 아니며, DFD에서는 데이터 요소의 정의와 구조를 문서화하는 데 사용됩니다. 따라서 주어진 선택지에서는 프로세스, 데이터, 흐름, 데이터 저장소, 종료자가 올바른 DFD 구성 요소이며, 데이터 사전은 DFD의 부가적인 요소로 포함되지 않습니다. 따라서 선택한 답이 틀렸습니다.
 

주어진 설명에 대해 인스펙션은 요구 사항을 검토하는 방법 중 하나이지만, 인스펙션은 주로 인간에 의해 수행되는 방법입니다. 자동화된 요구 사항 관리 도구를 사용하여 요구 사항을 검토하는 것은 인스펙션과는 다른 방법입니다.

인스펙션은 주로 팀의 멤버들이 모여 요구 사항을 세심하게 검토하고 분석하는 과정을 의미합니다. 이 과정에서 팀원들은 요구 사항의 불일치, 모호성, 누락된 부분 등을 발견하고 기록합니다. 이는 주로 회의 형태로 이루어지며, 팀원들 간의 토론과 검토를 통해 요구 사항을 개선하고 정확성을 높이는 데 중점을 둡니다.

자동화된 요구 사항 관리 도구를 사용하여 요구 사항 추적성과 일관성을 검토하는 것은 다소 다른 개념입니다. 이는 주로 요구 사항 관리를 지원하기 위해 사용되며, 요구 사항의 상태, 변경 이력, 관련 문서 등을 추적하고 관리하는 데 사용됩니다. 이러한 도구는 요구 사항 관리 과정을 효율적으로 지원하고 문서화하는 데 도움을 줍니다.

따라서 주어진 설명에서는 자동화된 요구 사항 관리 도구를 사용하여 요구 사항을 검토하는 것을 인스펙션으로 설명한 부분이 틀렸습니다.


주어진 설명에서는 사전에 검토 자료를 배포한 후에 짧은 시간 동안 검토 회의를 진행하여 결함을 발견하는 방법을 CASE라고 설명하고 있습니다. 그러나 이 설명은 틀렸습니다.

CASE는 "Computer-Aided Software Engineering"의 약자로, 컴퓨터를 사용하여 소프트웨어 개발의 여러 단계를 자동화하고 지원하는 방법론이나 도구를 의미합니다. 즉, CASE는 소프트웨어 개발 프로세스를 자동화하고 향상시키는 도구나 방법론을 가리키는 용어입니다. 따라서 주어진 설명은 CASE에 대한 올바른 개념을 설명하지 않고 있습니다.

올바른 소프트웨어 검토 방법은 일반적으로 다음과 같은 단계를 포함합니다:

준비 단계: 검토할 문서나 코드를 준비하고, 검토 프로세스에 참여할 팀원을 선정합니다.

개별 검토: 각 팀원은 사전에 제공된 문서나 코드를 개별적으로 검토합니다. 이때 각자가 발견한 결함이나 의견을 기록합니다.

검토 회의: 팀원들은 회의를 통해 개별적으로 발견한 결함을 공유하고 토론합니다. 추가적인 결함이나 개선점을 도출하기 위해 토론합니다.

결과 보고: 검토 회의에서 도출된 결함이나 개선점을 문서화하여 보고서로 작성합니다. 이 보고서는 후속 조치를 취할 때 참고되어야 합니다.

이러한 방법을 통해 효과적인 소프트웨어 검토가 이루어질 수 있습니다.







트랙잭션의 모든 연산들이 정상적으로 수행완료되거나 아니면 전혀 연산도 수행되지않은 원래 상태로 되도록 해야한다. 라고 하는데 그게 왜 atomicity라고 말해? 그게 뭔지 쉽게 설명해줘 

트랜잭션의 Atomicity(원자성)는 모든 연산이 전부 실행되거나 전혀 실행되지 않는 두 상태 중 하나로만 완료되어야 함을 의미합니다.

간단히 말해, 트랜잭션이 여러 개의 단계로 이루어져 있을 때, 이러한 단계 중 하나라도 실패하면 트랜잭션 전체가 실패하고 원래 상태로 롤백되어야 합니다. 즉, 트랜잭션의 각 단계는 다른 단계에 영향을 주지 않으며, 모든 단계가 성공적으로 완료되거나 모든 단계가 실패하여 아무런 영향도 주지 않고 롤백되어야 합니다.

이러한 원자성은 데이터베이스 시스템에서 데이터의 일관성과 무결성을 보장하는 데 중요한 역할을 합니다. 만약 트랜잭션이 중간에 실패하여 일부만 업데이트되거나 중단되면, 데이터베이스의 일관성이 깨질 수 있습니다. Atomicity를 보장함으로써 트랜잭션의 실행이 안정적이고 신뢰할 수 있게 됩니다.
 

 
asc는 제일 낮은게 제일 1등으로 가고 점점 올라가는거고 desc 는 제일 높은게 1순위고 점점 내려가는거야?
Ascending (어센딩)  오름차순 영어로

예, 맞습니다. "ASC"는 "오름차순(Ascending)"을 의미하며, 데이터를 정렬할 때 가장 낮은 값이 가장 먼저 나오고, 그 다음으로 높은 값이 순차적으로 정렬됩니다. 즉, 가장 작은 값부터 가장 큰 값으로 오름차순으로 정렬됩니다.

반대로 "DESC"는 "내림차순(Descending)"을 의미하며, 데이터를 정렬할 때 가장 높은 값이 가장 먼저 나오고, 그 다음으로 낮은 값이 순차적으로 정렬됩니다. 즉, 가장 큰 값부터 가장 작은 값으로 내림차순으로 정렬됩니다.

이러한 정렬 방식은 주로 데이터베이스에서 검색된 결과를 원하는 순서로 정렬하는 데 사용됩니다.asc와 desc는 오름차순 정렬과 내림차순 정렬을 명시하는 키워드로 사용되며, SQL 쿼리에서 ORDER BY 구문과 함께 사용됩니다.



"add"와 "delete"는 일반적으로 데이터베이스 인덱스를 추가하거나 삭제하는 데 사용되지 않습니다. 대신, 일반적으로 사용되는 용어는 "CREATE INDEX"와 "DROP INDEX"입니다.

"CREATE INDEX": 데이터베이스에 새로운 인덱스를 생성하는 데 사용됩니다. 이 명령어를 사용하여 데이터베이스 테이블의 열에 대한 인덱스를 만들 수 있습니다.

"DROP INDEX": 데이터베이스에서 기존의 인덱스를 삭제하는 데 사용됩니다. 이 명령어를 사용하여 더 이상 필요하지 않은 인덱스를 제거할 수 있습니다.

따라서 "add"와 "delete"는 일반적으로 데이터베이스 인덱스를 조작하는 데 사용되지 않는 용어입니다. 대신 "CREATE INDEX"와 "DROP INDEX"를 사용하는 것이 더 정확하고 표준적인 방법입니다.
 

 

 
"REVOKE" 문은 데이터베이스에서 권한을 관리하는 데 사용되는 SQL 명령어 중 하나입니다. 사용자에게 이전에 부여된 특정한 권한을 취소하고, 사용자가 특정 데이터나 데이터베이스 객체에 접근할 수 있는 권한을 박탈하는 데 사용됩니다.

권한 관리에 사용되는 SQL 문은 일반적으로 "Data Control Language (DCL)"에 속합니다. DCL은 데이터베이스 시스템에서 데이터의 보안 및 접근 제어를 관리하는 데 사용됩니다. "GRANT"와 "REVOKE"와 같은 명령어들이 이에 해당합니다.

그러므로 "REVOKE" 문은 데이터 사용 권한을 관리하는 데 사용되며, 이러한 목적으로 사용되는 SQL 기능은 DCL에 속합니다. 따라서 "REVOKE" 문이 속하는 분류는 "Data Control Language (DCL)"입니다.
 
 
데이터 조작 언어(Data Manipulation Language, DML)는 데이터베이스에서 데이터를 검색, 삽입, 수정 및 삭제하는 데 사용되는 SQL 명령어들의 모음을 의미합니다. DML은 주로 데이터의 조작이나 변경에 사용되며, 가장 일반적으로 사용되는 명령어들은 다음과 같습니다:

SELECT: 데이터베이스에서 데이터를 조회할 때 사용됩니다. 특정 조건을 만족하는 데이터를 선택하고 검색하는 데에 사용됩니다.

INSERT: 데이터베이스 테이블에 새로운 데이터를 삽입할 때 사용됩니다.

UPDATE: 데이터베이스 테이블에서 이미 존재하는 데이터를 수정할 때 사용됩니다.

DELETE: 데이터베이스 테이블에서 특정한 데이터를 삭제할 때 사용됩니다.

이러한 명령어들은 데이터베이스의 내용을 변경하거나 검색할 때 사용되며, 데이터의 추가, 수정, 삭제, 검색 등을 수행하는 데에 중요한 역할을 합니다.
 

 
데이터 사전은 일반적으로 데이터베이스 시스템 내부의 메타데이터에 해당하며, 데이터베이스의 구조와 구성 요소에 대한 정보를 포함합니다. 이러한 메타데이터는 데이터베이스 시스템 내에서 자동으로 생성되고 유지됩니다. 일반 사용자가 데이터 사전을 직접적으로 생성, 유지 또는 수정하는 것은 보통 불가능합니다.

사용자가 데이터베이스에 접근하고 쿼리를 실행하는 경우, 사용자는 데이터베이스 시스템에 저장된 데이터에만 접근할 수 있으며, 데이터베이스의 구조를 직접적으로 수정할 수는 없습니다. 데이터베이스의 구조를 변경하려면 일반적으로 데이터 정의 언어(DDL)를 사용해야 합니다. 따라서 일반 사용자는 데이터 사전을 직접적으로 조작할 수 없습니다.
 

 
데이터베이스에서 릴레이션에 대한 설명 중에 모든 튜플은 서로 다른값을 갖는다는데 튜플이 뭐야? 왜 그리고 서로 다른 값을 갖고 있는거야?
 
 
데이터베이스에서 릴레이션은 표 형식의 데이터를 나타내는데 사용됩니다. 릴레이션에는 열과 행으로 이루어진 데이터가 포함되어 있습니다.

튜플(Tuple): 릴레이션에서 행(row)에 해당합니다. 튜플은 레코드(record) 또는 행이라고도 불립니다. 각 튜플은 릴레이션의 열(column)에 해당하는 필드들의 값들을 가지고 있습니다. 예를 들어, 고객 정보를 담고 있는 릴레이션에서 각 튜플은 하나의 고객 레코드를 나타냅니다.

서로 다른 값: 릴레이션의 각 튜플은 서로 다른 값들로 이루어져 있습니다. 이것은 데이터베이스에서 중복된 행을 허용하지 않음을 의미합니다. 예를 들어, 고객 정보를 담고 있는 릴레이션에서 각 튜플은 고유한 고객 식별자(ID)를 가지며, 같은 ID를 가진 튜플은 중복되지 않습니다. 이는 데이터베이스의 정규성을 유지하기 위한 중요한 특성 중 하나입니다. 중복된 값을 허용하면 데이터베이스의 일관성과 무결성이 깨질 수 있기 때문에 서로 다른 값을 가지는 것이 중요합니다.


그러니까 모든 튜플은 서로 다른값을 갖고있다는게 행이 행에서도 여러개의 열에 대한 값을 갖고있을 수 있잖아 그게 전부다 달라야한다는 뜻이야? 아니면 식별자만 다르면 된다는 뜻이야?
ChatGPT
네, "모든 튜플은 서로 다른 값"이라는 말은 각 튜플이 릴레이션의 다른 튜플과 비교하여 모든 열의 값이 다른지를 의미합니다. 즉, 모든 열의 값이 서로 다른 경우 해당 튜플은 다른 튜플과 중복되지 않는 것입니다.

이 말은 특히 릴레이션에서 하나 이상의 열이 식별자(Primary Key)로 지정되어 있는 경우 더 중요합니다. 일반적으로 식별자(Primary Key)는 각 튜플을 고유하게 식별할 수 있는 열(또는 열의 조합)입니다. 따라서 모든 튜플은 식별자 값을 포함하여 서로 다른 값을 가져야 하며, 이를 통해 각 튜플이 고유하게 식별됩니다.

따라서 "모든 튜플은 서로 다른 값"은 릴레이션에서 중복되지 않음을 의미하는 것이 아니라, 각 튜플이 릴레이션 내에서 고유하게 식별될 수 있도록 해야 한다는 의미입니다. 이는 일반적으로 식별자 값의 중복을 허용하지 않는 릴레이션의 특성에 관련된 것입니다.

User
아 모든 튜플은 행의 각각의 요소에 대해서 전부다 다른 값을 가져야한다는 말이야?
ChatGPT
네, "모든 튜플은 서로 다른 값"이라는 말은 행의 각 요소(즉, 각 열의 값)가 서로 중복되지 않아야 한다는 의미입니다. 각 튜플의 모든 열이 다른 값을 가져야 모든 튜플이 서로 고유하게 식별될 수 있습니다.

예를 들어, 고객 정보를 담고 있는 테이블에서 각 튜플은 고객의 다양한 속성을 포함합니다. 만약 두 개의 튜플이 모든 속성(예: 고객 이름, 이메일, 전화번호 등)이 동일하다면 이 두 개의 튜플은 동일한 고객을 나타내므로 데이터의 중복이 발생합니다.

그러나 만약 각 튜플의 모든 속성이 서로 다른 값을 갖는다면, 각 튜플은 서로 고유한 고객을 나타내며 데이터의 중복을 피할 수 있습니다. 이것이 "모든 튜플은 서로 다른 값"의 의미입니다.




 
네, 맞습니다. 뷰(View)는 가상적으로 존재하는 개체이며, 실제로 데이터를 저장하지 않고 쿼리를 실행할 때마다 기본 테이블의 데이터를 조회하여 동적으로 생성됩니다. 이는 뷰가 논리적으로 존재하는 기본 테이블과 다르게 물리적으로만 존재하고 카탈로그에 저장된다는 것을 의미합니다.

따라서 4번이 올바른 설명이며, 이는 주어진 설명 중에서 틀린 설명임을 나타냅니다.
 

 
 
SQL(Structured Query Language)의 명령을 사용 용도에 따라 다음과 같이 주로 세 가지 유형으로 구분할 수 있습니다:

DDL(Data Definition Language): 데이터베이스 구조를 정의하거나 수정하는 데 사용됩니다. 주요 명령어로는 CREATE, ALTER, DROP 등이 있습니다.

DML(Data Manipulation Language): 데이터를 조회, 삽입, 수정, 삭제하는 데 사용됩니다. 주요 명령어로는 SELECT, INSERT, UPDATE, DELETE 등이 있습니다.

DCL(Data Control Language): 데이터베이스의 사용 권한을 관리하는 데 사용됩니다. 주로 데이터베이스 관리자가 데이터베이스 객체에 대한 접근 권한을 부여하거나 취소하는 데 사용됩니다. 주요 명령어로는 GRANT, REVOKE 등이 있습니다.

주어진 문제에서는 DCL(Data Control Language)에 해당하는 명령어를 찾는 문제입니다. SELECT, UPDATE, INSERT는 모두 데이터를 조회하거나 수정하는 DML(Data Manipulation Language)의 명령어이지만, GRANT는 데이터베이스의 사용 권한을 부여하는 DCL(Data Control Language)의 명령어입니다. 따라서 정답은 4번인 GRANT입니다.






주어진 보기에 대한 설명은 다음과 같습니다:

Atomic key: 원자성을 가진 단일 속성으로 구성된 키입니다. 즉, 더 이상 분해할 수 없는 단일 속성으로 이루어진 키를 의미합니다.

Super key: 유일성을 보장하는 속성 또는 속성들의 집합입니다. Super key는 유일성을 만족시키기 위해 필요한 최소한의 속성을 포함할 수 있지만, 최소성은 보장되지 않습니다.

Candidate key: 튜플을 유일하게 식별할 수 있는 속성들의 집합으로, 유일성과 최소성을 모두 만족시키는 키입니다. 즉, 모든 튜플을 고유하게 식별할 수 있는 최소한의 속성들의 조합을 의미합니다.

Test key: "Test key"라는 용어는 데이터베이스 설계에서 일반적으로 사용되지 않는 용어이며, 키의 유형을 나타내는 용어로 알려져 있지 않습니다.

따라서, 주어진 질문에서 유일성과 최소성을 만족하는 속성 또는 속성들의 집합을 가장 정확하게 나타내는 것은 후보 키인 3번의 Candidate key입니다.
 

 
병렬 데이터베이스 환경은 여러 대의 컴퓨터나 프로세서가 함께 작업하여 데이터베이스 처리를 동시에 수행하는 환경을 말합니다. 이러한 환경에서는 데이터베이스를 효율적으로 분할하여 병렬 처리를 최적화할 수 있습니다. 이때 사용되는 데이터베이스 분할 기법에는 여러 가지가 있습니다.

라운드-로빈 분할(Round-Robin Partitioning):

이 분할 기법은 데이터를 동일한 크기의 여러 파티션으로 분할합니다. 각 파티션은 순서대로 선택된 노드에 할당됩니다. 라운드-로빈은 각 노드에 동일한 부하를 분산시키는 데 사용됩니다.
범위 분할(Range Partitioning):

범위 분할은 데이터를 지정된 범위 또는 조건에 따라 여러 파티션으로 분할합니다. 예를 들어, 날짜 범위에 따라 데이터를 분할할 수 있습니다. 이 방식은 범위별로 데이터를 분산하여 처리할 수 있게 해줍니다.

예측 분할(Predictive Partitioning):

예측 분할은 데이터의 특성을 분석하여 예측된 분할 기준에 따라 데이터를 분할합니다. 예를 들어, 패턴이나 속성을 기반으로 데이터를 분할할 수 있습니다. 이 방식은 예측된 분할 기준에 따라 데이터를 분산시킵니다.
해시 분할(Hash Partitioning):

해시 분할은 데이터의 해시 값을 기준으로 데이터를 여러 파티션으로 분할합니다. 해시 함수를 사용하여 데이터를 일정한 균등성으로 분산시킵니다. 이 방식은 해시 함수를 통해 예측 가능한 파티션 할당을 제공합니다.
 

DISTINCT 키워드는 SELECT 문의 SELECT 절에 사용되어 중복되는 결과를 제거합니다. 따라서 정답은 2번이 맞습니다. WHERE 절은 데이터의 필터링에 사용되며, 조건을 만족하는 행을 선택합니다. DISTINCT는 중복을 제거하는 작업이므로 WHERE 절과는 관련이 없습니다.

다시 말해, SELECT 문에서 DISTINCT 키워드를 사용하여 중복을 제거하려면 SELECT 절에서 사용해야 합니다.

SELECT DISTINCT department
FROM employees;
 

 

순차적과 절차적 헷갈리지 말 것
 

 


ChatGPT
ChatGPT
힙 정렬(Heap Sort)은 주어진 데이터를 힙(Heap) 자료구조로 구성하여 정렬하는 알고리즘입니다.

① 맞습니다. 힙 정렬은 입력 데이터를 힙으로 구성하고, 힙에서 가장 큰 값을 가진 루트 노드를 추출하여 정렬하는 과정을 반복합니다.

② 맞습니다. 힙 정렬의 평균 수행 시간은 O(nlog2n)입니다. 이는 힙을 구성하는 과정에서 O(n)의 시간이 걸리고, 힙을 정렬하는 과정에서 O(nlog2n)의 시간이 걸리기 때문입니다.

③ 맞습니다. 힙은 완전 이진트리(complete binary tree) 구조를 가집니다. 완전 이진트리는 마지막 레벨을 제외한 모든 레벨이 완전히 채워진 이진트리를 의미합니다.

④ 틀렸습니다. 힙 정렬의 최악의 수행 시간은 O(nlogn)입니다. 잘못된 표기가 있었는데, 정확한 최악의 수행 시간은 O(nlogn)입니다.


살충제 패러독스는 소프트웨어 테스트에서의 현상을 묘사하는 개념입니다. 이것은 테스트 과정에서 테스터가 특정한 테스트 케이스를 수행하여 결함을 발견하고 수정하면, 더 이상 그 결함은 발견되지 않는 현상을 설명합니다. 이는 결함이 더 이상 발생하지 않는 것처럼 보일 수 있으나, 실제로는 아직 다른 결함이 숨어 있을 가능성이 있음을 의미합니다. 이는 완벽한 테스팅이 불가능하다는 원칙을 강조합니다.

 


화이트박스 테스트는 구조를 고려하니?


맞습니다. 화이트 박스 테스트는 소프트웨어의 내부 구조를 고려합니다. 이는 소프트웨어의 코드, 알고리즘, 데이터 구조 등을 검사하여 테스트하는 것을 의미합니다. 따라서 테스트 과정에서는 코드의 흐름, 분기, 루프, 조건 등과 같은 구조적 요소를 분석하여 테스트 케이스를 설계하고 실행합니다. 이를 통해 코드의 각 부분이 예상대로 동작하고 기대한 대로 작동하는지를 확인할 수 있습니다.



Ant, Maven, 그리고 Gradle은 모두 빌드 자동화 도구로, 주로 소프트웨어 개발 프로세스에서 빌드, 테스트, 배포 등을 자동화하는 데 사용됩니다. 이들은 소스 코드 및 종속성을 관리하고 프로젝트를 구축하는 데 도움이 되며, 주로 개발 단계에서 활용됩니다. 그러나 이들은 형상 관리 도구가 아니라 빌드 관리 도구입니다. 따라서 주어진 설명 중에서 ③번이 거리가 먼 설명입니다.

빌드자동화

디지털 저작권 관리(DRM)의 구성 요소는 다음과 같습니다:

Dataware house: 디지털 콘텐츠와 관련된 데이터를 저장, 관리하는 시스템입니다.

DRM Controller: DRM 시스템의 중앙 제어 및 관리를 담당하는 부분으로, 암호화 및 접근 제어를 수행합니다.

Packager: 디지털 콘텐츠를 보호하기 위해 암호화하고, 이를 패키지로 묶는 역할을 합니다.

Contents Distributor: 암호화된 디지털 콘텐츠를 배포하는 역할을 합니다.
이 중에서 Dataware house(데이터 창고)가 DRM의 구성 요소가 아닙니다. 데이터 창고는 주로 데이터를 저장하고 관리하는 시스템으로, DRM 시스템에서는 보다 특화된 기능을 수행하는 다른 구성 요소들과는 조금 다른 역할을 합니다.

죄송합니다. HRN 방식에서는 대기 시간과 실행 시간을 고려하여 작업의 우선순위를 결정합니다. 각 작업의 우선순위는 다음과 같이 계산됩니다:

우선순위
=
대기 시간
+
실행 시간
실행 시간
우선순위=
실행 시간
대기 시간+실행 시간


따라서 주어진 작업의 대기 시간과 실행 시간에 따라 우선순위가 달라지는데, 우선순위가 높은 작업부터 처리됩니다. 주어진 작업의 대기 시간과 실행 시간을 알려주시면 정확한 답을 도출할 수 있습니다.



3번은 운영체제의 설명과 거리가 먼 내용입니다. 올바른 설명은 다음과 같습니다:

운영체제의 종류로는 매크로 프로세서, 어셈블러, 컴파일러 등이 아닌, 주로 프로그래밍 언어나 기술적인 도구들의 종류가 들어갑니다. 예를 들어, 윈도우, 맥 OS, 리눅스 등이 운영체제의 종류에 해당합니다.


4번이 틀린 설명입니다. 배치 프로그램의 필수 요소 중에는 "무결성"이 아니라 "효율성"이어야 합니다. 배치 프로그램은 특정한 작업을 주어진 시간 내에 효율적으로 처리하는 것이 중요합니다. 따라서, 주어진 시간 내에 처리를 완료할 수 있어야 하고, 동시에 동작하고 있는 다른 애플리케이션과 충돌하지 않도록 자원을 효율적으로 사용해야 합니다.


최대 40바이트까지

 


주어진 설명에 해당하는 방식은 CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance)입니다. 이 방식은 무선 랜에서 데이터를 전송하기 전에 매체가 비어 있는지 확인하고, 충돌을 피하기 위해 임의의 시간을 기다린 후 데이터를 전송합니다. 또한, 네트워크에 데이터 전송이 없더라도 동시 전송에 의한 충돌에 대비하여 확인 신호를 전송합니다.

CSMA/CD (Carrier Sense Multiple Access with Collision Detection)은 유선 랜에서 사용되며, 충돌이 발생한 경우를 감지하여 충돌을 처리합니다. 충돌이 감지되면 각 노드는 임의의 시간 동안 기다린 후 다시 전송을 시도합니다.

STA (Station)는 무선 랜에서 연결된 각각의 디바이스를 가리키는 용어입니다. 이는 컴퓨터, 스마트폰, 태블릿 등과 같은 무선 네트워크에 연결된 단말 장치를 의미합니다. 따라서 STA는 CSMA/CA나 CSMA/CD와는 다른 개념입니다.


SSL (Secure Sockets Layer)은 전송 계층에서 보안을 제공하는 프로토콜로, 주로 웹에서 데이터를 안전하게 전송하기 위해 사용됩니다. SSL은 클라이언트와 서버 간의 통신을 암호화하고 인증하는 데 사용됩니다. 따라서 SSL은 네트워크 영역에서는 사용되지 않고, 전송 계층에서 데이터 보안을 제공하는 프로토콜입니다. 인터페이스 보안을 위해 네트워크 영역에 적용될 수 있는 솔루션은 IPSec, S-HTTP 등이 있지만, SSL은 일반적으로 전송 계층에서 사용됩니다.


NIC은 네트워크 인터페이스 카드(네트워크 어댑터)를 나타냅니다. 이 장치는 컴퓨터를 네트워크에 연결하여 데이터 통신을 가능하게 합니다. NIC는 컴퓨터와 네트워크 간의 통신을 관리하고 데이터를 전송하는 역할을 합니다.



EAI(Enterprise Application Integration)는 일반적으로 미들웨어를 사용하여 여러 애플리케이션 및 시스템 간의 통합을 달성하는 기술입니다. 따라서 "중간에 미들웨어를 두지 않고 각 애플리케이션을"이 부분이 틀린 설명입니다

Stamp Coupling(스탬프 결합)은 모듈이 서로 독립적으로 개발되었지만 공통적으로 사용하는 자료형이나 데이터 구조가 있는 경우 발생합니다. 이는 다른 결합도와 비교했을 때 상대적으로 독립적이지만, 여전히 모듈들 간에 어떤 자료형이나 데이터 구조를 공유하고 있다는 점에서 결합도가 존재합니다. 그러나 이는 다른 결합도들에 비해 상대적으로 약한 결합도로 여겨집니다. Common Coupling(공통 결합), Content Coupling(내용 결합), External Coupling(외부 결합) 등은 모듈 간의 의존성이 더 높으며, 결합도가 더 강합니다.


프로그래밍언어의 종류에서 스크립트언어에 해당하지 않는 것은 무엇인가?
1. PHP
2. Javascript
3. C
4. Perl.
 
 
정답은 3번 C
 
 
c는 스크립트 언어가 아니라는데 그러면 뭐야?

C는 컴파일 언어입니다. 스크립트 언어와는 달리, C 프로그램은 컴파일러를 사용하여 기계어로 번역된 후 실행됩니다. 이것은 프로그램 실행 속도가 빠르다는 장점을 가지고 있지만, 개발 및 디버깅이 상대적으로 더 어렵다는 단점도 있습니다.

User
컴파일언어는 스크립트언어보다 보통 빠르지
ChatGPT
네, 맞습니다. 일반적으로 컴파일 언어로 작성된 프로그램은 스크립트 언어로 작성된 프로그램보다 실행 속도가 빠릅니다. 컴파일 언어는 코드를 실행하기 전에 전체 코드를 컴파일하여 기계어로 번역하기 때문에 실행 시간이 빠릅니다. 이에 비해 스크립트 언어는 실행 시에 코드를 해석하고 실행하기 때문에 컴파일 언어에 비해 일반적으로 실행 속도가 느립니다.
 
다중분할기법 중 아래에서 설명하는 것은 무엇인가?
 
 
데이터 및 프로그램 할당하고 남은 공간.
 
1. 외부 단편화
2. 공간 단편화
3. 내부 단편화
4. 상위 단편화
 
답 3번임. 내부 단편화
 
 
이 것도 뭔말인지 모르잖아 
다음 중 피연산자가 2개 필요한 연산자는 무엇인가?
1. * 2.++ 3.& 4. << 

정답이 4번이래 나는 3번 했는데 오답임. 왜 정답이 4번인거야? << 이거는 어떤의미를 가진거야?
 

꺽쇠 모양을 보고 왼쪽 오른쪽 하는거야? 왜 그런거야? 설명을 좀 해줘

비트 시프트 연산자 <<와 >>에서의 꺽쇠 모양은 비트를 왼쪽 또는 오른쪽으로 이동하는 방향을 나타냅니다.

<< 연산자는 왼쪽으로 비트를 이동시키는 연산을 수행합니다. 예를 들어, x << y는 x의 비트를 왼쪽으로 y만큼 이동시킨 값을 반환합니다. 이동된 비트는 오른쪽에 0으로 채워집니다.

>> 연산자는 오른쪽으로 비트를 이동시키는 연산을 수행합니다. 예를 들어, x >> y는 x의 비트를 오른쪽으로 y만큼 이동시킨 값을 반환합니다. 이동된 비트는 부호 비트를 따라 이동하며, 왼쪽에는 부호 비트와 동일한 비트로 채워집니다.

꺽쇠 모양은 비트가 이동하는 방향을 직관적으로 이해할 수 있도록 도와줍니다. 비트가 꺽쇠 모양의 방향으로 이동한다고 생각하면 됩니다. 이러한 표기법은 비트 연산의 방향을 빠르게 파악할 수 있도록 도와줍니다.
 
 
왼쪽으로 한 비트 이동하면 끝에 0이 생기는거고 오른쪽으로 한 비트 이동하면 0이 없어지는건가?
ChatGPT
네, 맞습니다.

비트를 왼쪽으로 한 번 이동하면, 오른쪽 끝에는 0이 추가됩니다. 즉, 비트들이 왼쪽으로 이동하면서 오른쪽에는 0이 추가됩니다.

예를 들어, 이진수 1010을 왼쪽으로 한 번 이동하면 10100이 됩니다. 새로 추가된 비트는 오른쪽 끝에 있으며 값은 0입니다.

비트를 오른쪽으로 한 번 이동하면, 왼쪽 끝에 있는 비트는 사라지게 됩니다. 이때 채워지는 비트는 비트 값에 따라 달라집니다.

만약 가장 왼쪽 비트가 0이라면, 오른쪽으로 이동하면 왼쪽 끝에 0이 추가됩니다. 이것을 논리적인 오른쪽 시프트(논리 오른쪽 시프트)라고 합니다.

만약 가장 왼쪽 비트가 1이라면, 오른쪽으로 이동하면 왼쪽 끝에 1이 추가됩니다. 이것을 산술적인 오른쪽 시프트(산술 오른쪽 시프트)라고 합니다.

예를 들어, 이진수 1010을 오른쪽으로 한 번 이동하면, 가장 왼쪽 비트 1이 사라지고 0101이 됩니다. 이것은 2로 나눈 결과와 같습니다.
 
비트를 없애고 만듬으로서 어떤 기대효과를 얻을 수 있는건데?

비트 시프트 연산은 다양한 용도로 사용될 수 있습니다. 주로 사용되는 몇 가지 용도는 다음과 같습니다:

곱셈과 나눗셈의 대체:
비트 시프트 연산은 곱셈과 나눗셈을 대체할 수 있습니다.
왼쪽으로 비트를 이동하는 것은 2의 거듭제곱을 곱하는 것과 같습니다.
오른쪽으로 비트를 이동하는 것은 2의 거듭제곱을 나누는 것과 같습니다.
이러한 연산은 곱셈과 나눗셈보다 연산 속도가 빠르므로 성능을 향상시킬 수 있습니다.
데이터 압축:
비트 시프트 연산은 데이터를 압축하는 데 사용될 수 있습니다. 비트를 왼쪽이나 오른쪽으로 이동하여 데이터를 압축하고 확장하는 데 사용할 수 있습니다.
비트 마스킹:
특정 비트를 유지하거나 제거하기 위해 비트 시프트 연산이 사용될 수 있습니다. 이는 비트 필드에서 특정 비트를 설정하거나 해제하는 데 사용됩니다.
플래그 조작:
비트 시프트 연산은 플래그를 설정하거나 검사하는 데 사용될 수 있습니다. 특정 비트를 설정하거나 해제하여 상태를 나타내는 데 사용됩니다.
이러한 용도로 비트 시프트 연산을 사용함으로써 코드의 효율성을 높일 수 있고, 메모리 사용량을 줄이며, 성능을 향상시킬 수 있습니다.


데이터 무결성 제약사항에 해당하지 않는 것?

1. 개체무결성
2. 참조 무결성 
3. 도메인 무결성
4. 대체 무결성

개체 무결성 제약조건
개체 무결성 제약조건은 기본키 제약 이라고도 하는데 테이블은 기본키를 지정하고 그에 따른 무결성 원칙 즉, 기본키는 null값을 가져서는 안 되며 테이블 내에 오직 하나의 값만 존재해야 한다는 조건이다.


도메인 무결성 제약조건
도메인 무결성 제약조건은 도메인 제약이라고도 하며, 테이블 내의 튜플들이 각 속성의 도메인에 지정된 값만을 가져야 한다는 조건이다. 예를 들자면 유저 라는 테이블의 가입일 이라는 속성에는 날짜 데이터가 와야하는데 생뚱맞게 유저의 이름 데이터가 들어간다면 도메인 무결성 제약조건을 위반한것이다.

참조 무결성 제약조건
참조 무결성 제약조건은 외래키 제약 조건 이라고도 하는데 테이블 간의 참조 관게를 선언하는 제약조건이다. 자식 테이블의 외래키는 부모 테이블의 기본키와 도메인이 동일해야 하며 자식 테이블의 값이 변경될 때 부모 테이블의 제약을 받는다는 의미이다.

등등등 

고유 무결성 제약조건
특정 속성에 대해 고유한 값을 가지도록 조건이 주어진 경우, 릴레이션의 각 튜플이 가지는 속성 값들은 서로 달라야 한다.

NULL 무결성 제약조건
릴레이션의 특정 속성 값은 NULL 될 수 없다.

키 무결성 제약조건
각 릴레이션은 최소한 한 개 이상의 키가 존재해야 한다.

다음 중 스레드 사용의 장점에 대한 설명과 가
장 거리가 먼 것은 무엇인가?
1. 여러 개의 프로세스를 하나의 스레드로 생성 하여 복잡성을 증진시킬 수 있다.
2. 하드웨어, 운영체제의 성능과 응용 프로그램 의 처리율을 향상시킬 수 있다.
3. 실행 환경을 공유시켜 기억장소의 낭비가 줄어든다.
4. 프로세스들 간의 통신이 향상된다.
 
 
"1. 여러 개의 프로세스를 하나의 스레드로 묶으면 오히려 복잡성을 증가시킬 수 있습니다."

이 설명이 스레드 사용의 단점을 설명하는 것이 맞습니다



일반적으로 복잡성을 줄이기 위해 다음과 같은 방법을 사용할 수 있습니다:

프로세스를 여러 스레드로 나누어 각 스레드가 독립적으로 또는 협력하여 작업을 수행하도록 설계합니다. 이렇게 하면 각각의 스레드는 독립적으로 작동할 수 있으며, 전체 시스템의 복잡성을 줄일 수 있습니다.
.
동기화: 여러 스레드가 공유 자원에 동시에 접근하는 경우에는 동기화 메커니즘이 필요합니다. 동기화를 통해 스레드 간의 충돌을 방지하고, 데이터 일관성을 유지할 수 있습니다.

통신: 스레드 간의 효율적인 통신은 시스템의 복잡성을 줄이는 데 도움이 됩니다. 적절한 통신 메커니즘을 사용하여 스레드 간의 데이터 교환과 작업 분배를 관리할 수 있습니다.

에러 처리: 스레드 간의 통신 및 동기화에서 발생할 수 있는 에러를 처리하는 메커니즘을 구현하여 시스템의 안정성을 유지할 수 있습니다.
이러한 방법을 사용하여 스레드를 효과적으로 관리하고, 복잡성을 줄일 수 있습니다.
 
60 회복 기법 중 아래에서 설명하는 것은 무엇인
가?
문제가 발생하면 로그에 있는 갱신 이전의 데이 터로 데이터베이스를 복원하여 회복(Undo)한다.
1.로그 갱신
2. 지연 갱신
3. 이상 갱신
4. 즉시 갱신

여기서 1번이 정답인줄 알았는데 정답이 4번이래....왜 4번인지 자세히 설명해줘
 

60 회복 기법 중 "즉시 갱신(Immediate Update)"이 설명하는 내용은 다음과 같습니다:

4. 즉시 갱신(Immediate Update):

  • 문제가 발생하면 로그에 있는 갱신 이전의 데이터로 데이터베이스를 복원하여 회복(Undo)합니다.
  • 이 기법은 트랜잭션이 실행될 때마다 데이터베이스를 즉시 갱신합니다. 따라서 트랜잭션이 커밋되기 전에 모든 변경 사항이 데이터베이스에 즉시 반영됩니다.
  • 이렇게 하면 트랜잭션이 완료되기 전에 시스템이 고장 나더라도 갱신된 데이터베이스가 손상될 위험이 없습니다.
  • 그러나 이 방법은 로그 파일의 크기가 증가할 수 있고, 여러 개의 사용자가 동시에 접근할 때 성능이 저하될 수 있습니다.

즉시 갱신 기법에서는 트랜잭션이 실행되면 데이터베이스를 즉시 갱신하므로, 문제가 발생하면 로그에 있는 갱신 이전의 데이터로 데이터베이스를 복원하여 회복(Undo)합니다.

이에 반해 1번 "로그 갱신(Logging)"은 데이터베이스의 갱신 작업을 로그 파일에 기록하는 것을 의미하며, 이 기록을 사용하여 회복합니다. 따라서 1번은 즉시 갱신과는 다른 개념입니다.

따라서 4번 "즉시 갱신"이 문제에서 설명하는 회복 기법입니다.

 

 

 

지연 갱신과 이상 갱신은 두 가지 다른 데이터베이스 회복 기법입니다. 각각의 기법은 다음과 같은 특징을 갖고 있습니다:

지연 갱신 (Delayed Update):

  • 트랜잭션이 커밋될 때까지 변경된 데이터를 메모리에 유지합니다.
  • 로그에는 트랜잭션의 변경 내용만 기록하고, 실제 데이터베이스에는 반영되지 않습니다.
  • 트랜잭션이 롤백되면 메모리에서 변경 내용을 버리면 되므로 회복 과정이 간단합니다.
  • 트랜잭션이 커밋될 때 변경 내용을 데이터베이스에 반영하므로, 로그 파일의 크기가 작아집니다.

이상 갱신 (Aborted Update):

  • 트랜잭션이 변경한 데이터를 즉시 데이터베이스에 반영합니다.
  • 로그에는 트랜잭션의 변경 내용을 기록하여, 롤백 시 해당 내용을 사용하여 데이터베이스를 복구합니다.
  • 트랜잭션이 롤백되면 해당 트랜잭션이 변경한 데이터를 로그를 통해 복구하여 데이터베이스를 원래 상태로 되돌립니다.
  • 트랜잭션이 변경 내용을 즉시 반영하기 때문에 다른 사용자가 변경 내용을 볼 수 있습니다.
  • 롤백 시 변경 내용을 복구하기 위해 로그 파일의 크기가 커질 수 있습니다.

간단히 말하면, 지연 갱신은 변경된 데이터를 메모리에 유지하고, 이상 갱신은 변경된 데이터를 즉시 데이터베이스에 반영합니다. 

 
탐색(search)
복잡도
빅오 계산법: 대문자 O와 괄호를 사용하여 입력자료당 소요되는 연산횟수 표현법.
 
 
O(1)
 
O(N)
 
O(logN)
 
O(NlogN)
 
 

 
1. O(1):
    * 상수 시간 복잡도를 나타냅니다.
    * 입력 크기에 관계없이 실행 시간이 일정합니다.
    * 즉, 실행 시간이 상수입니다. (예: 배열에서 특정 인덱스에 접근하는 경우) 최적의 알고리즘
2. O(N):
    * 선형 시간 복잡도를 나타냅니다.
    * 입력 크기에 비례하여 실행 시간이 선형적으로 증가합니다. (입력데이터 수에 따라 연산횟수가 일정하게 증가/비례하는 시간복잡도)
    * 예를 들어, 배열의 모든 요소를 한 번씩 확인하는 경우입니다. 
3. O(logN):
    * 로그 시간 복잡도를 나타냅니다.
    * 입력 크기에 따라 실행 시간이 로그 함수의 형태로 증가합니다. (입력데이터 수에 따라 연산횟수가 늘어나는 폭이 점점 줄어드는 시간 복잡도)
    * 이진 탐색과 같은 알고리즘이 이러한 복잡도를 갖습니다.
4. O(NlogN):
    * 선형로그 시간 복잡도를 나타냅니다. (입력데이터 수에 따라 연산횟수가 늘어나는 폭이 점점 커지는 시간복잡도)
    * 입력 크기에 따라 실행 시간이 N과 로그 N의 곱으로 증가합니다. 
    * 퀵 정렬과 같은 일부 정렬 알고리즘이 이러한 복잡도를 갖습니다.
이러한 빅오 표기법은 알고리즘의 성능을 비교하고 분석하는 데 사용됩니다. 보다 효율적인 알고리즘은 더 작은 빅오 표기법을 가집니다.
 
뷰 
REPLACE: 뷰가 이미 존재하는 경우 재생성
FORCE: 원본 테이블의 존재 여부에 관계없이 뷰 생성
NOFORCE: 원본 테이블이 존재할 때만 뷰 생성
WITH CHECK OPTION: 조건에 사용된 컬럼의 값을 수정 불가능하도록 설정
WITH READ ONLY: 모든 컬럼의 값 수정 불가능 (DML 작업 불가능)
 
SQL지원도구
TKPROF 
실행되는 SQL문장을 추적, 분석하여 지침을 제공해준다.
 
실행되는 SQL 문장을 추적, 분석하여 지침을 제공해준다. 분석 가능한 정보는 아래와 같다. Parse, Execute, Fetch 수 ?

Parse:
Parse 수는 SQL 문장이 파싱된 횟수를 나타냅니다.

Execute:
Execute 수는 SQL 문장이 실제로 실행된 횟수

Fetch:
Fetch 수는 결과 집합에서 레코드를 가져온 횟수를 나타냄

-Parse, Execute, Fetch수
-CPU작업시간
-물리적, 논리적 Reads
-처리된 튜플 수
-라이브러리 캐시 Misses
-Commit/Rollback 
 
병행제어: 병행제어는 병행을 최대화하기위해 제어하는겁니다. 평행처리의 문제점은 어려운 개념이 아니니 가볍게 학습하세요. 
 
분실된 갱신(Lost Update): 데이터를 두 개의 트랜잭션이 갱신하면서 하나의 작업이 진행되지않는 문제점
 
연쇄 복귀(Cascading Rollback): 데이터를 두 개의 트랜잭션이 갱신하면서 문제가 발생하면 두 트랜잭션 모두 갱신적으로 복귀하는 상태가 되는 경우의 문제점
 
비완료의존성: 하나의 트랜잭션이 실패하고 회복이 이뤄지기 전에 다른 트랜잭션이 실패한 수행 결과를 참조하는 경우의 문제점 
 
 
인덱스: 
트리 기반 인덱스
인덱스를 저장하는 블록들이 트리 구조를 이루고 있는 형태이다.
b 트리 인덱스: 키 값의 크기를 비교하는 하향식 탐색, 모든 단말 노드의 레벨이 같음 
b+ 트리 인덱스: 경로를 제공하는 인덱스 세트와 데이터 위치를 제공하는 순차 세트로 구성

b+트리 인덱스의 경우 루트에서 리프 노드까지 모든 경로의 깊이가 일정한 밸런스트리 형태로, 여타 인덱스와 비교할 때 대용량 데이터 삽입과 삭제 등 데이터처리에 좋은 성능을 유지한다. 
 

뷰: 테이블은 실제로 데이터를 가지고 있는 반면, 뷰는 실제 데이터를 가지고 있지 않다. 가상 테이블이라고도 함.

실행 시점에 SQL 재작성하여 수행됨.
뷰 사용 장점
1. 독립성: 테이블 구조가 변경되어도 뷰를 사용하는 응용 플그램은 변경하지 않아도 된다.
2. 편리성: 복잡한 질의를 뷰로 생성함으로써 관련
질의를 단순하게 작성할 수 있다.
3. 보안성: 직원의 급여정보와 같이 숨기고 싶은 정보가 존재할 때 사용
CREATE VIEW V_PLAYER_TEAM AS SELECT
DROP VIEW V_PLAYER_-TEAM:
ROLLUP : Subtotal을 생성하기 위해 사용, Grouping Columns의 수를 N이라고 했을 때 N+1

 

반응형