관리 메뉴

CASSIE'S BLOG

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

PROGRAMMING/정보처리기사

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

ITSCASSIE1107 2024. 1. 29. 11:59
반응형

뭔말인지 보기들 하나도 이해안되는데 보기별로 설명해줘 객체지향 설계 원칙에 해당하지않는 것은? 1. 의존성 뒤집기 2. 인터페이스 분리 3. 분할정복법 4. 리스코프 치환

 

객체지향 설계 원칙은 SOLID 원칙이 대표적이야.
(SRP, OCP, LSP, ISP, DIP)
이제 보기를 하나씩 설명할게!

✅ 보기별 설명

1️⃣ 의존성 뒤집기 (Dependency Inversion Principle, DIP) ✅ (객체지향 설계 원칙 맞음)

  • 상위(추상적인) 모듈이 하위(구체적인) 모듈에 의존하는 것이 아니라,
    하위 모듈이 상위 모듈에 의존하도록 만들어라!
  • 즉, 구체적인 것보다 인터페이스(추상화된 것)에 의존해야 유연한 설계가 가능함
  • 예시)
    java
    복사편집
    // ✅ 좋은 예시: 인터페이스(추상화)에 의존 interface Keyboard {} class MechanicalKeyboard implements Keyboard {} class Computer { private Keyboard keyboard; public Computer(Keyboard keyboard) { this.keyboard = keyboard; // 인터페이스에 의존 → 유연한 설계 } }
  • java
    복사편집
    // ❌ 나쁜 예시: 직접 구현 클래스에 의존 class Keyboard {} class Computer { private Keyboard keyboard; public Computer() { keyboard = new Keyboard(); // 키보드의 구체적인 클래스에 의존 } }
  • DIP는 객체지향 설계 원칙에 포함됨!

2️⃣ 인터페이스 분리 (Interface Segregation Principle, ISP) ✅ (객체지향 설계 원칙 맞음)

  • 큰 인터페이스 하나를 여러 개의 작은 인터페이스로 나누어라!
  • 필요한 기능만 구현하도록 분리해서 불필요한 의존성을 줄인다
  • 예시)
    java
    복사편집
    // ✅ 좋은 예시: 인터페이스를 분리 interface Workable { void work(); } interface Eatable { void eat(); } class Programmer implements Workable { public void work() { System.out.println("코딩 중..."); } }
  • java
    복사편집
    // ❌ 나쁜 예시: 불필요한 기능이 포함된 인터페이스 interface Worker { void work(); void eat(); // 일이랑 상관없는 기능 포함됨 }
  • ISP도 객체지향 설계 원칙에 포함됨!

3️⃣ 분할정복법 (Divide and Conquer, D&C)(객체지향 설계 원칙 아님! → 정답)

  • 큰 문제를 작은 문제로 나눈 후 각각 해결하고 결합하는 방식
  • 예시: 퀵 정렬, 병합 정렬, 이진 탐색 같은 알고리즘에서 사용됨
  • 객체지향 설계 원칙이 아니라 알고리즘 설계 기법이므로 정답!

4️⃣ 리스코프 치환 (Liskov Substitution Principle, LSP) ✅ (객체지향 설계 원칙 맞음)

  • 부모 클래스가 있다면, 자식 클래스를 부모처럼 사용해도 문제없어야 한다!
  • 즉, 상속을 올바르게 사용하라는 원칙
  • 예시)
    java
    복사편집
    class Bird { void fly() { System.out.println("날아간다!"); } } class Penguin extends Bird { void fly() { throw new UnsupportedOperationException("펭귄은 못 날아!"); } }
  • 위처럼 부모(Bird)는 날 수 있는데, 자식(Penguin)은 날 수 없음 → ❌ LSP 위반!
  • 해결 방법: "날 수 있는 새"와 "날지 못하는 새"로 클래스를 분리해야 함

📌 정답: 3️⃣ "분할정복법" (객체지향 설계 원칙이 아님!) 🚀

분할정복법은 알고리즘 기법이지, 객체지향 설계 원칙이 아니야!

 
4o

 

정규화의 필요성에 대한 설명과 가장 거리가 먼 것은?

1. 자료구조를 안정화한다.

2. 저장공간을 최소화한다.

3. 불일치를 최대화한다.

4. 이상 현상을 방지한다.

나는 저장공간을 최소화한다. 이게 정규화가 테이블을 불리하는거라서 저장공간이 커진다생각했는데 답이 3번 불일치를 최대화한다라는데 설명 좀 해줄래?

 

 

📌 정규화의 필요성과 정답 설명

✅ 정규화(Normalization)란?

  • 데이터베이스에서 중복을 줄이고(무결성 유지), 이상현상(삽입/삭제/갱신 이상)을 방지하는 과정
  • 데이터를 여러 개의 테이블로 분리하여 구조를 체계적으로 정리

🔍 각 보기 설명

1️⃣ 자료구조를 안정화한다. ✅ (정규화의 필요성과 관련 있음)

  • 정규화를 통해 데이터 구조를 체계적으로 정리할 수 있음
  • 테이블 간 관계가 명확해지고, 무결성이 보장됨

2️⃣ 저장공간을 최소화한다. ❌ (정규화와 관련 있지만 항상 맞는 것은 아님)

  • 정규화하면 테이블이 분리되기 때문에 저장공간이 오히려 늘어날 수도 있음
  • 하지만 중복 데이터가 제거되므로, 경우에 따라 저장공간이 줄어들 수도 있음
  • 즉, 저장공간 최소화가 주목적은 아님!

3️⃣ 불일치를 최대화한다. 🚫 (정답!)

  • 정규화의 목적은 데이터 불일치를 최소화하는 것!
  • 중복을 줄이고, 데이터를 한 곳에서만 관리하도록 해서 일관성을 유지
  • 따라서 "불일치를 최대화한다"는 정규화 목적과 반대되는 내용

4️⃣ 이상 현상을 방지한다. ✅ (정규화의 가장 중요한 목적!)

  • 삽입 이상, 삭제 이상, 갱신 이상을 방지하는 것이 정규화의 핵심 목적
  • 데이터를 분리하고 정리해서 데이터베이스의 무결성을 유지

📌 정답: 3번 "불일치를 최대화한다."

정규화의 목적은 불일치를 최소화하는 것이므로, 정답은 3번! 🚀

 

다른 보기에 대해서도 설명해줘

비선형 구조 중 아래에서 설명하는 것은 무엇인가?

데이터를 계층 구조로 표현하기에 적합한 자료구조이다.

하나 이상의 노드를 가지며 각 노드는 간선(Edge,Branch)으로 연결된다.

방향성 (Directed) 이 있는 비순환 (Acyclic)그래프의 한 종류이다.

보기는 데크, 사이클, 트리, 차수

 

📌 각 보기의 개념 정리

1️⃣ 데크(Deque, Double-Ended Queue)

  • 양쪽(앞뒤)에서 삽입과 삭제가 가능한 큐
  • 스택과 큐의 기능을 동시에 가짐
  • 예시: 웹 브라우저의 앞으로/뒤로 가기 기능

2️⃣ 사이클(Cycle)

  • 그래프에서 출발한 정점으로 다시 돌아오는 경로(순환 구조)
  • 방향 그래프 or 무방향 그래프 모두에서 존재 가능
  • 예시: A → B → C → A (순환 발생)

3️⃣ 트리(Tree) ✅ 정답!

  • 계층 구조로 데이터를 표현하는 비선형 자료구조
  • 방향성이 있는 비순환 그래프(DAG: Directed Acyclic Graph)
  • **루트(Root)**에서 시작하여 **자식 노드(Child Nodes)**를 가짐
  • 예시: 가족 트리, 폴더 구조

4️⃣ 차수(Degree)

  • 트리에서 하나의 노드가 가진 자식 노드의 개수
  • 전체 트리에서 가장 높은 차수를 트리의 차수라고 함
  • 예시:
    • A 노드의 차수 = 3 (B, C, D 자식 노드)
    • B 노드의 차수 = 2 (E, F 자식 노드)

📌 정답: 트리(Tree)

설명에서 계층 구조, 방향성, 비순환 그래프라는 키워드가 나왔으므로 **트리(Tree)**가 정답! ✅

 

 

RDBMS 기본 용어에서 릴레이션에서 생성된 튜플의 개수에 해당하는 것은 무엇인가?

보기 도메인, 릴레이션 스키마,기수, 속성 각각 설명해줘 뭐가 뭐지도 모르겠어

 

RDBMS의 기본 용어를 쉽게 설명해 줄게!

📌 각 용어의 의미

1️⃣ 도메인(Domain)

  • 속성이 가질 수 있는 값의 집합
  • 예시: 성별 속성 → {남, 여}, 나이 속성 → {0~150}

2️⃣ 릴레이션 스키마(Relation Schema)

  • 테이블의 구조(틀)
  • 속성(컬럼)들의 집합
  • 예시: 학생 테이블(학번, 이름, 학과, 나이)

3️⃣ 기수(Cardinality)

  • 릴레이션(테이블)에서 생성된 튜플(행, 레코드)의 개수
  • 📌 정답: 기수(Cardinality)!
  • 예시: 학생 테이블에 100명의 학생 정보가 있다면 → 기수 = 100

4️⃣ 속성(Attribute)

  • 테이블의 컬럼(열)
  • 하나의 데이터 속성
  • 예시: 학번, 이름, 학과, 나이

📌 정답: 기수(Cardinality)

기수는 릴레이션에서 생성된 "튜플(행)"의 개수를 의미해! 🎯

 

 

회귀기반테스트는 아예 없는 개념인가? 설계기반테스트에 해당하지 않는 것은? 보기 명세기반테스트, 구조기반테스트, 회귀기반테스트, 경험기반테스트

 

회귀기반테스트(Regression-based Testing)는 존재하는 개념이야, 하지만 "설계기반 테스트"에 포함되지 않아서 정답이야!

📌 설계기반 테스트란?

테스트 케이스를 어떻게 설계하는지에 따라 분류되는 테스트 방식이야.

설계기반 테스트 종류
명세 기반 테스트 → 요구사항, 명세서(문서) 기반으로 테스트
구조 기반 테스트 → 코드 구조(제어 흐름, 조건문 등)를 기반으로 테스트
경험 기반 테스트테스터의 경험에 따라 테스트

🚫 회귀 기반 테스트(Regression-based Testing)기존 기능이 변경되었을 때 문제가 없는지 확인하는 테스트설계기반 테스트가 아님!

📌 결론:
"회귀 기반 테스트"는 설계기반 테스트가 아니라서 정답!

 

 

빅오표기법

 

예제까지 암기하면 더 유리!

  • O(log N) → 이진 탐색
  • O(N log N) → 퀵 정렬, 병합 정렬
  • O(N²) → 버블 정렬

📌 정렬 알고리즘 간단 정리

🚀 O(N log N) → 빠름! (퀵 정렬, 병합 정렬)

  • 데이터를 절반씩 나누면서 정렬 → 효율적!
  • 큰 데이터 정렬할 때 유리

퀵 정렬 (Quick Sort)

  1. 기준값(Pivot) 하나 정함
  2. 기준값보다 작은 건 왼쪽, 큰 건 오른쪽으로 분류
  3. 왼쪽과 오른쪽 각각 다시 정렬 (재귀)
  4. 정렬 완료!

병합 정렬 (Merge Sort)

  1. 데이터를 반으로 쪼개기
  2. 더 이상 쪼갤 수 없을 때까지 나눔
  3. 작은 단위부터 합치면서 정렬
  4. 정렬 완료!

 

정보처리기사 시험을 준비한다면 각 정렬 알고리즘의 최악 시간복잡도는 외워두는 게 좋아! 시험에서 종종 출제돼.

📝 정렬 알고리즘별 시간복잡도 정리

 
 
 
병합 한건 좀 다르게 n log N 
 
힙 정렬(Heap Sort)의 최악 시간복잡도
  • 힙 정렬은 최악의 경우에도 O(N log N)
  • 이유: 힙에서 요소를 하나씩 빼면서 정렬할 때, 매번 log N 시간이 걸리기 때문!
  • 퀵 정렬처럼 O(N²)으로 나빠지는 경우가 없음

📌 결론:

  • 힙 정렬은 언제나 O(N log N)
  • 퀵 정렬은 최악의 경우 O(N²) → 이걸 주의해야 해!
  • 시험에서 출제될 가능성이 높으니까 외워두는 게 좋아!

 

✅ 이진 탐색(Binary Search) 쉽게 이해하기!

📌 "숫자 50을 찾자!"
정렬된 숫자 리스트가 있다고 해요.

plaintext
복사편집
[10, 20, 30, 40, 50, 60, 70, 80, 90]
  1. 중간 숫자(가운데 값)를 확인
    → 가운데 숫자는 40
    → 40보다 50이 크니까 왼쪽(작은 숫자들)은 다 버림!
 
[50, 60, 70, 80, 90]
  1. 다시 중간 숫자 확인
    → 가운데 숫자는 70
    → 70보다 50이 작으니까 오른쪽(큰 숫자들)은 다 버림!
 
[50, 60]
  1. 다시 중간 숫자 확인
    → 가운데 숫자는 50
    → 찾았다! ✅

✅ 핵심 포인트

  • 절반씩 줄이면서 찾음
  • N개 데이터를 하나씩 비교(O(N))하는 게 아니라, O(log N)으로 빠르게 찾음!
  • 검색할 데이터가 많을수록 효과가 큼! 🚀

💡 이진 탐색을 쓰려면 꼭 "정렬된 데이터"여야 해요!

 
 

✅ log(로그)란?

  • 거듭제곱을 푸는 방법
  • 거꾸로 가는 곱셈 개념

📌 log의 기본 개념

1. "어떤 수를 몇 번 곱해야 원하는 값이 되는가?"

 

프로그래밍에서 인수테스트가 어떤거를 말하는거야?

개발자의 장소에서 사용자가 개발자앞에서 행하는 기법이라는데 보기가

베타테스트, 동치분할테스트, 알파테스트, 형상테스트가 있는데 정답이 알파테스트라는데 난 보기가 어떤건지 아무것도 몰라 쉽고 간단하게 각 테스트에 대해서 설명해줄래?

 

📌 각 테스트 개념 (쉬운 설명!)

1. 알파 테스트 (Alpha Test) → 개발자 앞에서 테스트!

  • 개발자의 장소(회사 등)에서 사용자가 직접 테스트
  • 사용자가 프로그램을 써보고 문제점을 찾음

📌 쉽게 말하면:

"개발자가 있는 곳에서 사용자가 직접 프로그램을 써보고 테스트하는 것!"
👨‍💻 개발자 앞에서 사용자가 직접 테스트!


2. 베타 테스트 (Beta Test) → 일반 사용자들이 테스트!

  • 실제 사용자들이 직접 프로그램을 사용해보는 테스트
  • 정식 출시 전에 사용자의 피드백을 받음
  • 보통 일부 사용자에게만 프로그램을 배포하고 의견을 받음

📌 쉽게 말하면:

"정식 출시 전에 실제 사용자들에게 미리 써보게 하는 테스트!"
👨‍👩‍👧‍👦 일반 사용자들이 테스트!


3. 동치 분할 테스트 (Equivalence Partitioning Test) → 입력값 테스트!

  • 비슷한 유형의 입력값을 그룹(동치 클래스)으로 나누고 테스트
  • 모든 경우를 하나하나 테스트하지 않고 대표값만 선택해서 테스트

📌 쉽게 말하면:

"비슷한 입력값을 묶어서 대표적인 것만 골라서 테스트!"
📊 입력값을 나눠서 대표적인 것만 테스트!


4. 형상 테스트 (Configuration Test) → 환경 테스트!

  • 운영 환경(하드웨어, 소프트웨어, 네트워크 등)에 따라 제대로 작동하는지 테스트
  • 예: Windows, Mac, Linux에서 잘 동작하는지 확인

📌 쉽게 말하면:

"다양한 환경에서 프로그램이 제대로 작동하는지 테스트!"
💻🖥️ 운영 환경(컴퓨터, OS 등)에서 테스트!

✅ 인수 테스트(Acceptance Test)란?

  • 사용자가 직접 개발된 프로그램이 제대로 동작하는지 검증하는 테스트
  • 개발자의 장소에서 사용자가 수행하는 경우 "알파 테스트" 라고 함

👉 정답: 알파 테스트

 

순회방법 impo (left, right 순으로 가는 건 똑같음)

전위 순회 : root -> left -> right

중위 순회 : left -> root -> right

위 순회: left -> right -> root

 

 

 

유지보수 비용 측정방법에 해당하지 않는 것은 무엇인가? Putnam방법, Vessey & Webber방법, BL (Belady와 Lehman)방법, COCOMO 방법 각 방법에 대해서 설명해줘 쉽고 간단하게 나는 BL방법이 맞다고 생각했는데 Putnam방법 이게 정답이래

 

유지보수 비용 측정방법에 해당하지 않는 것은 Putnam 방법이 맞아.
Putnam 방법은 소프트웨어 개발 비용과 노력을 추정하는 모델이지, 유지보수 비용을 측정하는 방법이 아니야.


📌 유지보수 비용 측정 방법 정리

1. Vessey & Webber 방법

  • 소프트웨어의 복잡도(Complexity)와 유지보수 비용의 관계를 분석하는 방법
  • 소프트웨어가 복잡할수록 유지보수 비용이 증가한다고 봄
  • 즉, 프로그램이 어렵고 복잡할수록 유지보수 비용도 높아짐

📌 쉽게 말하면:

"프로그램이 복잡하면 유지보수 비용도 많이 든다!"


2. BL (Belady & Lehman) 방법

  • 소프트웨어의 변경(수정)과 유지보수 비용의 관계를 연구한 방법
  • 소프트웨어가 지속적으로 변경될수록 유지보수 비용이 증가함
  • 특히 소프트웨어의 크기가 커질수록 비용이 더 많이 증가한다고 봄

📌 쉽게 말하면:

"프로그램을 많이 수정할수록 유지보수 비용도 점점 커진다!"


3. COCOMO 방법 (COnstructive COst MOdel)

  • 소프트웨어 개발 비용을 추정하는 모델이지만, 유지보수 비용도 함께 고려할 수 있음
  • 소프트웨어의 규모(크기), 복잡도, 개발 노력 등을 바탕으로 유지보수 비용을 예측

📌 쉽게 말하면:

"소프트웨어 크기랑 복잡도를 고려해서 유지보수 비용을 예측한다!"


❌ 유지보수 비용 측정 방법이 아닌 것

4. Putnam 방법

  • 소프트웨어 개발 비용과 노력을 추정하는 방법
  • 유지보수 비용을 직접적으로 측정하는 방법은 아님
  • 프로젝트 기간, 인력, 생산성 등을 고려하여 개발 비용을 예측

📌 쉽게 말하면:

"개발하는 데 드는 비용과 노력만 계산하고, 유지보수 비용은 계산하지 않는다!"

 

 


BL 평소에도 수정많이하잖아 변경 많이 하면 유지보수비용 증가한다. 이렇게 생각하기

VW : 복잡도와 유지보수비용 증가 (V-> W v가 많아질수록 복잡해질수록 유지보수비용 증가로 암기할 것) 

 

 

확장 E-R 다이어그램 중에 아래에서 설명하는 것은 무엇인가?

각각의 관련있는 개체 타입을 통해 하나의 새로운 개체 타입을 만드는 것이다.

part-whole 관계 또는 is-a part of 관계를 표현할 수 있따.

개체 타입들 간의 구조적인 집약관계이다.

 

특수화 (Specialization)

집단화 (Aggregation)

상속 (Inheritance)

일반화 (Generalization)

 

정답은 집단화인데 Aggregation 이게 원래 집단화 뜻이야? 다른 보기들에 대해서도 설명해줘

 

 

📌 확장 E-R 다이어그램 개념 정리

확장 E-R 다이어그램(Enhanced ER Diagram, EERD)은 기본적인 E-R 다이어그램을 확장하여 추가적인 개념(집단화, 일반화, 특수화, 상속 등)을 표현할 수 있도록 한 모델이야.


✅ 문제에서 묻는 개념: 집단화(Aggregation)

📌 집단화(Aggregation)란?

  • 여러 개체 타입(Entity Type)을 묶어서 새로운 하나의 개체 타입을 만드는 것
  • "part-whole 관계" (부분-전체 관계) 또는 "is-a part of 관계"를 표현
  • 개체들 간의 구조적인 집약 관계를 나타냄
  • 집합적인 개체를 다룰 때 사용됨

💡 쉽게 말하면

Aggregation(집단화)은 여러 개체를 하나의 개체로 묶는 과정이야.

📌 예시:

  • 교수(Professor)가 과목(Course)를 가르치고, 학생(Student)이 과목(Course)를 수강한다고 할 때,
    • 교수 → 과목 → 학생을 하나의 새로운 개체로 묶을 수 있음.
    • 즉, **"교수-과목-학생"**을 하나의 개체 타입으로 정의하는 것!
    • 이를 통해 수업(Class)이라는 새로운 개체 타입을 만들 수도 있음.

✅ 다른 보기들도 설명할게!

📌 1. 특수화(Specialization)

  • 하나의 **상위 개체(Entity)**가 여러 개의 하위 개체세분화되는 것
  • "is-a 관계" (ex: "A는 B의 일종이다")
  • 개체를 좀 더 구체적으로 나누는 과정

💡 쉽게 말하면

특수화는 큰 개념을 더 세부적으로 쪼개는 과정

📌 예시:

  • 직원(Employee)을 관리자(Manager), 엔지니어(Engineer), 인턴(Intern)으로 세분화
  • 동물(Animal)을 포유류(Mammal), 파충류(Reptile), 조류(Bird)로 나누는 것

📌 2. 상속(Inheritance)

  • 하위 개체(Sub Entity)가 상위 개체(Super Entity)의 속성을 물려받는 것
  • 상속받은 개체는 기존 속성 + 추가 속성을 가질 수 있음

💡 쉽게 말하면

상속은 기존 개체의 속성을 재사용하는 개념

📌 예시:

  • 학생(Student)이 사람(Person)으로부터 이름(name), 나이(age) 속성을 상속받고, 학번(student_id) 속성을 추가로 가질 수 있음.
  • 객체지향 프로그래밍(OOP)에서의 상속 개념과 비슷!

📌 3. 일반화(Generalization)

  • 특수화(Specialization)의 반대 개념
  • 여러 개의 하위 개체를 더 일반적인 개체로 통합하는 과정
  • "is-a 관계" (ex: "A는 B의 일종이다")

💡 쉽게 말하면

여러 개의 개체가 공통된 속성을 가질 경우, 하나의 상위 개체로 통합하는 과정

📌 예시:

  • 승용차(Car), 트럭(Truck), 오토바이(Motorcycle) → 차량(Vehicle)으로 일반화
  • 교수(Professor)와 학생(Student) → 사람(Person)으로 일반화

 

각 보기에 대해서 내가 잘 몰라 좀 설명해줄래?

스키마의 종류에 해당하지않는 것은 무엇인가?

1. 개념스키마

2. 내부 스키마

3. 외부 스키마

4. 물리 스키마

내가 그냥 물리스키마 찍었거든 이게 왜 해당되지않는지도 같이 설명해줘

 

 

🚀 TRUNCATE 한국어 뜻은?

truncate는 "잘라내다", "삭제하다", "짧게 줄이다" 같은 의미야.
**컴퓨터에서는 "데이터를 완전히 지워버리는 것"**을 의미해!

📌 즉, TRUNCATE = 테이블 안의 모든 데이터를 잘라내서 없애는 것!
(하지만 가방 자체는 남아 있음! 테이블 구조는 유지되니까.)

🔥 DROP은 "폐기", TRUNCATE는 "초기화" 정도로 이해하면 돼!

 
4o

나의 말:

각 보기에 대해서 내가 잘 몰라 좀 설명해줄래? 스키마의 종류에 해당하지않는 것은 무엇인가? 1. 개념스키마 2. 내부 스키마 3. 외부 스키마 4. 물리 스키마 내가 그냥 물리스키마 찍었거든 이게 왜 해당되지않는지도 같이 설명해줘
 

ChatGPT의 말:

정답: 4번 물리 스키마

물리 스키마는 공식적인 스키마 종류가 아니야!
나머지 3개(개념, 내부, 외부 스키마)는 데이터베이스 3단계 구조에서 정의된 스키마야.


1️⃣ 개념 스키마 (Conceptual Schema)

  • DB 전체적인 구조와 관계를 정의하는 스키마
  • **DBA(데이터베이스 관리자)**가 관리하는 부분
  • 논리적 설계 단계에서 정의됨
  • 예) 테이블, 관계(Relation), 제약조건(Primary Key, Foreign Key) 같은 것들을 정의

2️⃣ 내부 스키마 (Internal Schema)

  • DB를 실제로 저장하는 방식과 관련된 스키마
  • 저장구조, 인덱스, 데이터 압축, 파일 조직 방식 등을 정의
  • 예) B+ 트리 인덱스, 해싱(Hashing) 기법, 클러스터링

3️⃣ 외부 스키마 (External Schema)

  • 사용자(개발자, 프로그램 등)가 보는 DB의 관점
  • 각 사용자마다 다를 수 있음 (보안, 접근 권한 등에 따라 다르게 보일 수 있음)
  • 예) A 사용자는 학생 테이블의 이름과 나이만 볼 수 있고, B 사용자는 전체 정보를 볼 수 있음

4️⃣ 물리 스키마? (❌ 공식적인 용어가 아님)

  • 내부 스키마랑 비슷한 개념이긴 하지만,
  • DB 이론에서 정식으로 사용되는 "스키마" 용어는 아님
  • DB의 물리적인 저장 방식 자체를 다루지만, 공식적인 스키마 분류에서는 제외됨

💡 그래서 물리 스키마는 스키마의 종류에 해당하지 않아!
정답은 4번!

 
 
이 말이 무슨 말이야?object의 내용이라는거는 테이블 전체를말하는건가? 데이터정의어 (DDL)에서 데이터베이스 오브젝트의 내용을 삭제하는 명령어에 해당하는 것은 무엇인가? 1. CREATE 2. DROP 3. ALTER 4. TRUNCATE

 

🔥 DROP은 "폐기", TRUNCATE는 "초기화" 정도로 이해하면 돼!

 

drop이 Truncate보다 더 큰 개념이네..? 가방 전체를 없앤다는거잖아 truncate는 가방 속 짐만 없앤다는거고 truncate한국말로 번역하면뭐야?
 

 

맞아! DROP이 TRUNCATE보다 더 큰 개념이야.
비유가 딱 좋아!

  • DROP가방 자체를 버림 (테이블 자체 삭제)
  • TRUNCATE가방 속 짐만 버림 (테이블 데이터만 삭제)

🔹 각 SQL 명령어 비교 (정확한 차이점 정리!)

 
 
📌 즉, 테이블의 데이터만 삭제하는 것이므로 정답은 4번 TRUNCATE! 🎯
sql지원도구 중 아래에서 설명하는게 APM Application Performance Management인데 PL/SQL도구는 어떤거고 EXPLAIN PL도구, STAMP도구는 어떤건지 설명해줘 운영중인 시스템에 대한 가용성 확보, 다운 타임 최소화 등을 통한 안정적인 시스템 운영을 위한 모니터링 도구다. 시스템 부하량과 접속자 파악, 장애 진단을 진행한다 . 1. APM 2. PL/SQL도구 3. EXPLAIN 도구 4. STAMP도구

 

📌 SQL 지원 도구 종류


1️⃣ APM (Application Performance Management) - 애플리케이션 성능 모니터링

운영 중인 시스템의 성능을 분석하고 장애를 진단하는 도구

  • 시스템 부하량과 접속자를 파악하고 장애 진단 수행
  • 가용성 확보 및 다운 타임 최소화 목적
  • 예: New Relic, AppDynamics, Dynatrace

2️⃣ PL/SQL 도구 - PL/SQL 개발 및 실행 도구

PL/SQL (Oracle의 절차형 SQL) 프로그램을 개발, 테스트, 디버깅하는 도구

  • PL/SQL을 쉽게 작성하고 실행할 수 있도록 지원
  • 예:
    • SQL*Plus: 기본적인 PL/SQL 실행 가능
    • Toad for Oracle: PL/SQL 개발, 디버깅, 성능 튜닝 기능 제공
    • Oracle SQL Developer: Oracle 공식 PL/SQL 개발 도구

3️⃣ EXPLAIN PLAN 도구 - SQL 실행 계획 분석 도구

SQL 쿼리의 실행 계획을 분석하여 성능을 최적화하는 도구

  • SQL 실행 순서, 사용된 인덱스, 테이블 접근 방식 등을 시각적으로 보여줌
  • SQL 성능 튜닝에 사용
  • 예제:
    sql
    복사편집
    EXPLAIN PLAN FOR SELECT * FROM employees WHERE department_id = 10; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
  • 실행 결과를 보면 테이블 접근 방식(FULL SCAN, INDEX SCAN 등) 을 확인할 수 있음

4️⃣ STAMP 도구 - SQL 트랜잭션 분석 도구

SQL 트랜잭션을 분석하여 성능 병목을 찾는 도구

  • SQL 수행 시간, 잠금 발생 여부, 트랜잭션 병목 등을 분석
  • 데이터베이스의 성능을 높이기 위해 사용
  • 주로 대량 트랜잭션 처리 시스템에서 튜닝 용도로 활용

📢 정리

도구역할

APM 애플리케이션 성능 모니터링 및 장애 진단
PL/SQL 도구 PL/SQL 개발, 테스트, 디버깅 지원 (SQL*Plus, Toad, SQL Developer)
EXPLAIN PLAN SQL 실행 계획 분석 (성능 튜닝)
STAMP 트랜잭션 병목 분석 (SQL 실행 시간, 잠금 분석)

 

🔥 즉, SQL 성능 분석을 위해서는 EXPLAIN PLAN과 STAMP를 활용하고, PL/SQL 개발은 전용 도구를 사용하면 됨! 🚀

 

 

퀵정렬이 정보처리기사시험에서 중요한개념이야?

퀵 정렬에 대한 설명으로 틀린 것은?

1. 순환 알고리즘을 이용해야 하므로 스택공간을 필요로한다
2. 키를 기준으로 작은 값은 왼쪽에 큰 값은 오른쪽 서브파일로 분해시키는 방식이다
3. 최악의 시간 복잡도는 O(n2) 이다.

**왜 이 보기란이 퀵정렬과 관계없어?
퀵정렬에 대해서 좀 설명해줄 수 있어?쉽게

첫 번째 키만을 분할 원소로 정할 수 있다. 그럼 이건 어떤 정렬에 대한 설명인데?


**퀵 정렬(Quick Sort)**은 정렬 알고리즘 중에서 가장 빠른 알고리즘 중 하나이며, 정보처리기사 시험에서도 자주 출제돼.
특히 시간 복잡도, 특징, 동작 방식을 잘 이해하고 있어야 해!



2. 퀵 정렬(Quick Sort) 쉽게 설명!
퀵 정렬은 "기준값(피벗, Pivot)"을 기준으로 큰 값과 작은 값을 나누면서 정렬하는 알고리즘이야.

💡 쉽게 말해서:

배열에서 **하나의 기준값(피벗)**을 선택
피벗보다 작은 값은 왼쪽, 큰 값은 오른쪽으로 분류
왼쪽, 오른쪽 각각 다시 퀵 정렬을 재귀적으로 수행
결국 모든 값이 정렬됨
🔹 예제:
정렬할 배열 → [5, 3, 8, 4, 2, 7, 1, 10]

피벗을 5로 선택
5보다 작은 값 → [3, 4, 2, 1] / 5보다 큰 값 → [8, 7, 10]
작은 그룹 [3, 4, 2, 1]과 큰 그룹 [8, 7, 10]을 각각 다시 정렬
모든 그룹이 정렬되면 최종 배열 완성!
✅ 퀵 정렬의 특징

빠름! (평균 시간 복잡도 O(n log n))
불안정 정렬 (같은 값이 있어도 상대적 순서가 바뀔 수 있음)
재귀 함수 사용 (스택 공간 필요)

네, 재귀 함수를 사용하면 스택 공간이 추가적으로 필요합니다.

왜 재귀 함수가 스택 공간을 필요로 할까?
재귀 함수는 자기 자신을 계속 호출하는 방식으로 동작하기 때문에, 함수 호출이 발생할 때마다 **시스템 스택(Stack 메모리)에 함수 호출 기록(콜 스택, Call Stack)**이 저장됩니다.


(평균 시간 복잡도 O(n log n)) 이게 무슨 말이야? O (n 곱하기 log n ) 이라는 말이지?

네, 맞아요! **"O(n log n)"**은 "빅 오 표기법"으로, 알고리즘의 평균 시간 복잡도를 나타냅니다.

**"O(n log n)"**은 **"O(n × log n)"**을 의미합니다.
여기서 log n은 보통 **log₂(n) (이진 로그)**를 의미합니다.
따라서, 입력 크기 n이 커질수록 실행 시간이 n × log n 비율로 증가한다는 뜻입니다.
대표적인 O(n log n) 알고리즘에는 퀵 정렬(Quick Sort), 병합 정렬(Merge Sort), 힙 정렬(Heap Sort) 등이 있습니다. 



📌 정보처리기사에서 자주 나오는 정렬 알고리즘
정보처리기사 시험에서는 퀵 정렬, 삽입 정렬, 선택 정렬, 병합 정렬, 힙 정렬 등이 자주 출제돼!
특히 시간 복잡도, 특징, 정렬 방식을 잘 알아두면 좋아.

1. 선택 정렬 (Selection Sort) 🔵
가장 작은 값을 찾아서 앞으로 이동하는 방식
비효율적 (시간 복잡도 O(n²))
장점: 메모리 사용이 적음
예시: [5, 3, 8, 4, 2] → 2를 찾아 맨 앞(5)과 교환 → [2, 3, 8, 4, 5] → ⭐반복⭐

2. 삽입 정렬 (Insertion Sort) 🟢
새로운 데이터를 기존 데이터와 비교하여 적절한 위치에 삽입
거의 정렬된 상태일 때 빠름 (최선의 경우 O(n))⭐
장점: 구현이 간단, 작은 데이터에 적합
예시: [5, 3, 8, 4, 2] → 3을 5 앞에 삽입 → [3, 5, 8, 4, 2] → 반복

3. 퀵 정렬 (Quick Sort) 🔥
기준값(피벗)을 정해서 작은 값은 왼쪽, 큰 값은 오른쪽으로 정렬
평균 시간 복잡도 O(n log n) → 빠름!
예시: [5, 3, 8, 4, 2] → 피벗 5 → [3, 4, 2] | 5 | [8] → 재귀 정렬

4. 병합 정렬 (Merge Sort) 🏆
데이터를 반으로 쪼개서 정렬한 뒤 합치는 방식
시간 복잡도 O(n log n) → 퀵 정렬처럼 빠름
장점: 안정적인 정렬 (순서 유지)
단점: 메모리 사용 많음 ⭐⭐⭐⭐⭐
예시: [5, 3, 8, 4, 2] → [5, 3], [8, 4, 2] → 각각 정렬 후 합침


5.  정렬 (Heap Sort) 🏗️   (한 글자짜리 퀵 vs 힙)
힙(Heap) 구조를 사용하여 정렬
시간 복잡도 O(n log n)
⭐⭐장점: 최악의 경우에도 O(n log n) 유지 (퀵 정렬보다 안정적)⭐⭐
예시: [5, 3, 8, 4, 2] → 힙 구조로 변환 → 최댓값 제거 → 반복

 

 

 

 

논리적기능 작성하는 단위가 트랙잭션인데
다른 보기가
COLLISION, BUCKET, SYNONYM, TRANSACTION


한 줄 요약!
COLLISION: 해싱에서 같은 해시 주소로 충돌하는 현상
BUCKET: 데이터를 저장하는 공간(해시 테이블 또는 DB 블록)
SYNONYM: 해시 충돌로 인해 같은 해시 값을 갖는 키

 

 

 

데이터 설계 시 물리환경조사 분석 단계에서 진행하는 사항이 아닌것은?
하드웨어 자원 분석, 운영체제 분석, 정규화, 시스템 조사 분석

**정규화는 논리적 설계 시에 진행한다. 

논리적 설계가 뭔데? 정규화말고 어떤 다른 게 있는데??

논리적 설계란?
데이터베이스 설계에서 논리적 설계(Logical Design) 단계는 사용자의 요구사항을 반영하여 논리적인 데이터 구조를 만드는 과정이야. 이 단계에서는 물리적인 저장 방식(HDD, SSD, 메모리 크기 등)보다는 데이터 간의 관계, 무결성, 일관성 등을 고려하여 설계해.

논리적 설계에서 하는 주요 작업
논리적 설계에서 정규화 외에도 다음과 같은 작업이 포함돼!


물리적 설계(Physical Design)와의 차이점
논리적 설계가 "무슨 데이터를 어떻게 연결할지" 설계하는 과정이라면,
물리적 설계는 "데이터를 어떻게 저장하고 최적화할지" 결정하는 과정이야.

 

 

논리적 설계란?

데이터베이스 설계에서 논리적 설계(Logical Design) 단계는 사용자의 요구사항을 반영하여 논리적인 데이터 구조를 만드는 과정이야. 이 단계에서는 물리적인 저장 방식(HDD, SSD, 메모리 크기 등)보다는 데이터 간의 관계, 무결성, 일관성 등을 고려하여 설계해.


논리적 설계에서 하는 주요 작업

논리적 설계에서 정규화 외에도 다음과 같은 작업이 포함돼!

1️⃣ 개체(Entity)와 관계(Relationship) 정의

  • 어떤 데이터를 저장할지(개체)
  • 개체들 간의 관계(1:1, 1:N, N:M)

2️⃣ ERD(Entity-Relationship Diagram) 작성

  • 개체(Entity), 속성(Attribute), 관계(Relationship) 정의
  • 관계형 데이터 모델을 그림으로 표현

3️⃣ 정규화(Normalization)

  • 데이터의 중복을 최소화하고 이상(Anomaly)을 방지
  • 1NF → 2NF → 3NF → BCNF 등의 정규화 과정 수행

4️⃣ 무결성 제약조건 정의

  • 기본키(Primary Key), 외래키(Foreign Key) 설정
  • 데이터의 정확성과 일관성을 유지할 수 있도록 제약조건(Unique, Not Null 등) 정의

5️⃣ 데이터 모델링(Data Modeling)

  • 개념적 설계(Conceptual Design)에서 정의한 요구사항을 기반으로 논리적인 데이터 모델을 만듦
  • 관계형 데이터베이스(RDBMS)에 적합한 릴레이션 스키마(Relational Schema) 작성

 

 

 

스크립트언어의 특징이 아닌것은?

비컴파일, 신속한 개발, 메모리 관리, 단순성

**스크립트 언어로 메모리 관리는 하지 않는다. (PHP, 자바스크립트)

**파이썬, RUBY도 스크립트언어라고 함. 몰랐음 

스크립트 언어에는 PHP, JavaScript 말고도 여러 가지가 있어!

📌 대표적인 스크립트 언어
✅ Python → 데이터 분석, AI, 자동화, 웹 개발
✅ Ruby → 웹 개발 (Ruby on Rails)
✅ Perl → 시스템 관리, 네트워크 프로그래밍
✅ Lua → 게임 개발, 임베디드 시스템
✅ Shell Script (Bash, PowerShell) → 운영체제 명령어 자동화
✅ R → 데이터 분석, 통계

이런 언어들도 PHP, JavaScript처럼 스크립트 언어에 속해! 🚀
스크립트 언어(Scripting Language)란?
💡 컴파일 없이 즉시 실행할 수 있는(interpreted) 프로그래밍 언어 (자바스크립트와 PHP가 대표적이다. 제발 외워) 

스크립트 언어는 소스 코드를 기계어로 변환하는 "컴파일" 과정 없이, 실행할 때마다 한 줄씩 해석(interpret)해서 실행하는 프로그래밍 언어야.

📌 특징
✅ 컴파일이 필요 없음 → 실행할 때마다 한 줄씩 해석해서 실행
✅ 빠른 개발 가능 → 코드 수정 후 바로 실행 가능 (빠른 테스트 & 디버깅)
✅ 운영체제 독립적 → 특정 OS에 종속되지 않고, 여러 환경에서 사용 가능
✅ 주로 자동화, 웹 개발, 데이터 처리에 사용

 

 

 

선언형 언어가 어떤 건데? 선언형 언어는 HTML, Haskell, Prolog, XML, SQL이고 PHP는 스크립트 언어라고 함 



**선언형 언어(Declarative Language)**란 "어떻게(how)"가 아니라 "무엇을(what)" 할지를 기술하는 프로그래밍 패러다임입니다. 즉, 프로그램이 수행할 동작을 명령어(절차)로 설명하는 것이 아니라, 원하는 결과를 정의하는 방식입니다.

특징
무엇(What)을 할 것인지 정의 → 실행 방식(How)은 신경 쓰지 않음
명령형 언어(Imperative Language)와 반대 → 명령형 언어는 절차와 흐름을 지정함
상태 변화보다는 선언적 기술 → 변수를 변경하는 절차 없이 목표를 기술함

대표적인 선언형 언어
HTML (HyperText Markup Language) → 웹 문서의 구조를 선언
Haskell → 함수형 프로그래밍 언어
Prolog → 논리형 프로그래밍 언어
XML (eXtensible Markup Language) → 데이터 구조를 선언
SQL (Structured Query Language) → 데이터베이스 질의

PHP는 왜 선언형이 아니고 스크립트 언어인가?
PHP는 절차형(명령형) 언어이자 스크립트 언어로, 프로그램이 실행될 때 순차적으로 명령을 수행하는 방식입니다.
즉, 선언형 언어처럼 "무엇을 할 것인지"만 정의하는 것이 아니라, "어떻게 실행할지"를 명령어로 작성해야 합니다.


정리
선언형 언어: 결과만 선언(예: SQL, HTML, Prolog, Haskell)
명령형 언어: 실행 절차를 작성(예: PHP, C, Python)
PHP는 스크립트 언어이자 명령형 언어로, 실행 흐름을 직접 기술해야 함.


PHP는 한때 웹 개발의 대표적인 서버사이드 언어였지만, 현재는 다른 기술들(Node.js, Python, Go 등)과의 경쟁이 심해지면서 예전만큼 대세는 아닙니다. 하지만 아직도 많이 사용되고 있는 언어이며, 특히 중소기업, 기존 시스템 유지보수, 워드프레스(WordPress) 같은 CMS(콘텐츠 관리 시스템)에서 널리 쓰이고 있습니다.





📌 대표적인 스크립트 언어
✅ 웹 개발

JavaScript → 웹 브라우저에서 실행되는 대표적인 스크립트 언어
PHP → 서버에서 실행되는 웹용 스크립트 언어
✅ 자동화 & 데이터 처리

Python → 데이터 분석, AI, 자동화 스크립트
Shell Script (Bash) → 리눅스 명령어 자동화
✅ 기타

Ruby → 웹 개발(Ruby on Rails)
Lua → 게임 개발 및 임베디드 시스템

 

 

 

미들웨어가 뜻이 뭐야? RPC Remote Procedure Call 응용프로그램의 프로시저를 사용하여 다른 위치(원격)에서 동작하는 프로시저를 로컬 프로시저처럼 호출하기 위한 미들웨어다.

미들웨어(Middleware)란?

미들웨어(Middleware)는 운영체제(OS)와 응용 프로그램(애플리케이션) 사이에서 동작하며, 서로 다른 시스템, 애플리케이션, 서비스 간의 데이터 전달 및 통신을 돕는 소프트웨어 계층을 의미한다.

미들웨어의 역할

  1. 서로 다른 시스템 간의 연결
    • 서로 다른 운영체제(OS), 네트워크 환경, 프로그래밍 언어를 사용하는 애플리케이션 간의 데이터 교환을 가능하게 함.
  2. 통신 및 데이터 변환
    • 클라이언트와 서버 간의 데이터 전달을 중개하며, 프로토콜 변환이나 데이터 변환 등의 역할 수행.
  3. 보안 및 인증
    • 사용자 인증(Authentication), 권한 부여(Authorization), 데이터 암호화 등을 수행하여 보안을 강화.
  4. 성능 최적화 및 부하 분산
    • 캐싱, 로드 밸런싱(Load Balancing) 등을 통해 애플리케이션 성능을 향상시키고, 요청을 적절히 분산하여 부하를 줄임.

RPC(Remote Procedure Call)와 미들웨어의 관계

RPC(Remote Procedure Call)는 네트워크를 통해 원격 시스템의 프로시저(함수)를 로컬에서 호출하는 것처럼 실행할 수 있도록 도와주는 기술이다.
RPC는 미들웨어의 한 유형으로, 서버와 클라이언트가 서로 다른 환경에서도 원격 함수 호출을 쉽게 할 수 있도록 지원하는 미들웨어로 사용된다.

RPC의 특징

  • 로컬 함수 호출처럼 보이지만, 실제로는 네트워크를 통해 원격에서 실행됨.
  • 클라이언트는 원격 프로시저를 호출하면, 미들웨어(RPC 시스템)가 이를 서버로 전달하여 실행하고, 결과를 반환함.
  • 대표적인 RPC 미들웨어 기술: gRPC, XML-RPC, JSON-RPC, CORBA, DCOM

RPC 미들웨어의 예시

  • gRPC: Google에서 개발한 RPC 프레임워크로, **Protocol Buffers(프로토콜 버퍼, Protobuf)**를 사용하여 고성능의 원격 호출을 지원.
  • XML-RPC: XML을 사용하여 원격 프로시저 호출을 수행하는 프로토콜.
  • JSON-RPC: JSON 형식을 사용하여 RPC 호출을 수행하는 프로토콜.

미들웨어의 종류

미들웨어는 용도에 따라 여러 가지 종류가 있다.

  1. 통신 미들웨어
    • RPC(Remote Procedure Call), 메시지 큐(Message Queue)
    • 예: gRPC, Apache Kafka, RabbitMQ
  2. 데이터베이스 미들웨
    • 서로 다른 DBMS를 연결하여 데이터 공유
    • 예: ODBC, JDBC
  3. 웹 미들웨어
    • 웹 애플리케이션과 서버 간의 데이터 처리
    • 예: Express.js(Node.js 기반), Django Middleware, Spring Middleware
  4. 보안 미들웨어
    • 인증, 암호화, 접근 제어 등의 보안 기능 제공
    • 예: OAuth, JWT, Kerberos

정리

  • 미들웨어는 운영체제와 애플리케이션 사이에서 중간 역할을 하며, 데이터 통신과 연동을 돕는 소프트웨어 계층이다.
  • RPC는 원격 프로시저 호출을 가능하게 해주는 미들웨어의 한 종류이다.
  • RPC를 사용하면 로컬에서 함수 호출하듯이 네트워크를 통해 원격 시스템의 함수를 호출할 수 있다.
  • gRPC, XML-RPC, JSON-RPC 등의 기술이 RPC 미들웨어에 해당한다.

 

  • Apache Kafka는 대용량 데이터 스트리밍을 위한 분산 메시지 큐 시스템이며, 메시징 미들웨어 역할을 한다.
  • Java(Spring Boot)에서 Kafka를 연동하여 데이터를 송수신할 수 있다.
  • Kafka는 독립적인 서버로 실행되며, 설치 후 사용해야 한다.
  • spring-kafka 라이브러리를 활용하면 자바 애플리케이션과 쉽게 연동 가능하다.

Apache Kafka를 사용하면 어떤 애플리케이션을 만들 수 있을까?

Kafka는 대용량 데이터 스트리밍 및 메시지 처리를 위한 미들웨어로, 다양한 애플리케이션에서 사용될 수 있다. Kafka를 설치하고 활용하면 메시지 큐 역할을 하는 애플리케이션을 만들 수 있으며, 실시간 데이터 처리 및 이벤트 기반 시스템에 활용할 수 있다.


1. Kafka를 활용한 애플리케이션 예시

1) 실시간 로그 수집 시스템

📌 설명:

  • 웹 서버, 애플리케이션, 데이터베이스 등의 로그를 실시간으로 수집 및 분석하는 시스템 구축 가능.
  • Kafka에 로그 데이터를 보내고, 이를 소비자가 실시간으로 분석하여 대시보드 표시, 경고 알림, 데이터 저장 등을 수행할 수 있음.

📌 활용 예시:

  • ELK 스택 (Elasticsearch + Logstash + Kibana)과 함께 사용하여 실시간 로그 모니터링 구축
  • Splunk, Datadog 같은 로그 분석 시스템과 연동

📌 예제 흐름:

mathematica
복사편집
Application LogsKafka ProducerKafka TopicConsumer (저장, 분석)

2) 실시간 채팅 애플리케이션

📌 설명:

  • Kafka를 메시지 브로커로 사용하여 빠르고 안정적인 실시간 채팅 시스템 구축 가능.
  • 메시지가 Kafka 토픽(Topic)에 저장되고, 채팅방 참여자들이 이를 소비하여 실시간 메시지를 주고받을 수 있음.

📌 활용 예시:

  • WhatsApp, Slack, Discord 같은 실시간 채팅 시스템
  • 라이브 스트리밍 댓글 시스템

📌 예제 흐름:

java
복사편집
User1 메시지 → Kafka Producer → Kafka Topic (채팅방) → Kafka Consumer → User2 수신

3) 실시간 주문 처리 시스템 (이커머스, 결제 시스템)

📌 설명:

  • Kafka를 사용하면 고객의 주문 데이터를 실시간으로 처리하고, 결제 승인, 배송, 재고 관리 등과 연동 가능.
  • 이벤트 기반 시스템으로 주문이 들어오면 자동으로 여러 서비스가 반응하도록 할 수 있음.

📌 활용 예시:

  • Amazon, 쿠팡, 배달의민족 같은 전자상거래 시스템의 주문 및 결제 처리
  • 주문 상태 변경 시 고객에게 실시간 알림 전송

📌 예제 흐름:

java
복사편집
고객 주문 → Kafka Producer → Kafka Topic (Order) → Kafka Consumer (결제 시스템, 배송 시스템)

4) 실시간 IoT 데이터 처리 시스템

📌 설명:

  • IoT 센서에서 수집한 데이터를 Kafka를 통해 실시간으로 처리 및 분석 가능.
  • 스마트 팩토리, 스마트 시티, 헬스케어 기기 등의 데이터 수집 및 분석 시스템 구축 가능.

📌 활용 예시:

  • 스마트 공장의 센서 데이터 수집 및 모니터링
  • 실시간 기상 정보 및 교통 데이터 분석

📌 예제 흐름:

java
복사편집
IoT Sensor → Kafka Producer → Kafka Topic → Kafka Consumer (데이터 저장 및 분석)

5) 실시간 추천 시스템 (Netflix, YouTube 추천 알고리즘)

📌 설명:

  • Kafka를 사용하여 사용자의 행동 데이터를 실시간으로 수집 및 분석하여 추천 시스템을 구축 가능.
  • 사용자가 클릭하거나 시청한 기록을 바탕으로 개인화된 추천을 제공할 수 있음.

📌 활용 예시:

  • YouTube, Netflix, TikTok 같은 추천 알고리즘
  • 이커머스(쇼핑몰)에서 "이런 제품도 좋아할 것 같아요" 추천 기능

📌 예제 흐름:

scss
복사편집
사용자 행동 (클릭, 시청) → Kafka Producer → Kafka Topic → Kafka Consumer (AI 추천 시스템)

2. Kafka를 활용한 애플리케이션의 장점

대량의 데이터를 실시간으로 처리 가능
비동기 방식으로 빠른 데이터 전송 및 처리 가능
여러 개의 서비스가 동일한 데이터를 구독하여 활용 가능
확장성이 뛰어나기 때문에 트래픽이 증가해도 안정적으로 운영 가능

 

 

 

 

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

화이트박스(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 언어의 강력한 기능을 활용하여 복잡한 빌드 로직을 간결하게 작성할 수 있습니다.
 
 
테스트하네스란?

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

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

 

📌 테스트 하네스(Test Harness)란?

테스트 하네스(Test Harness)는 자동화된 테스트를 지원하는 도구로, 프로그램을 유닛(단위) 테스트하고 다양한 조건에서 동작과 결과를 모니터링하기 위한 소프트웨어 구성이다.

💡 쉽게 말하면, 소프트웨어를 테스트하기 위한 "자동화된 테스트 환경"을 제공하는 시스템이다.


테스트 하네스를 설치해서 사용해야 할까?

테스트 하네스를 사용할 때는 필요한 경우 별도로 설치하거나, 기존에 제공되는 테스트 프레임워크를 활용하면 된다.

📌 설치가 필요한 경우

  • 특정 테스트 하네스 도구(예: Google Test, Selenium, TestNG)를 사용해야 한다면 설치가 필요할 수 있음.
  • 예를 들어, 자동화된 UI 테스트를 위한 Selenium, C++용 Google Test 같은 도구는 직접 다운로드 및 설치해야 함.

📌 설치가 필요하지 않은 경우

  • Java에서는 JUnit과 같은 테스트 프레임워크가 내장되어 있어 별도의 설치 없이 사용 가능.
  • 일부 IDE (예: IntelliJ, Eclipse, VS Code)에서는 테스트 도구가 기본 제공됨.


 

테스트하네스의 장점?

- 테스트 프로세스 자동화를 통한 생산성 향상
- 회귀테스트 발생가능성 향상(어? 이건 좋은건가?)
- 소프트웨어 컴포너늩와 어플리케이션의 품질향상
- 테스트의 부절차(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) - 치 종속 제거 (다중 종속 제거) 값이 많아서 죽는다 4번 
           ▼
5정규화 (5NF)  - 인종속 제거 

 

📌 3차 정규화(3NF) - 이행적 함수 종속 제거

👉 "기본키가 아닌 속성끼리 서로 종속되지 않도록 하는 것"


✅ 1. 먼저, 이행적 함수 종속이란?

A → B, B → C 이면 A → C 가 성립하는 관계를 말해.

쉽게 말하면, A를 알면 B를 알 수 있고, B를 알면 C를 알 수 있다면, A를 알면 결국 C도 알 수 있다는 의미야.
그런데 이렇게 되면 B가 C를 결정하고 있어서 문제가 생길 수 있어! (비효율적이고 데이터 중복 발생 가능)


🚀 예제 1: 학생 테이블 (이행적 함수 종속 O, 3NF 위배!)

학번(PK)학생이름학과ID학과이름

2023001 홍길동 CS001 컴퓨터공학과
2023002 김철수 EE001 전자공학과
2023003 이영희 CS001 컴퓨터공학과

🎯 문제점: 이행적 함수 종속 발생!

  • 학번 → 학과ID → 학과이름
    (학번이 학과ID를 결정하고, 학과ID가 학과이름을 결정함)
  • 따라서 "학번 → 학과이름" 이행적 함수 종속이 발생!

✅ 2. 3NF 적용 - 이행적 함수 종속 제거하기

이 문제를 해결하려면 학과 정보를 별도 테이블로 분리하면 됨!

📌 1️⃣ 학생 테이블 (Student)

학번(PK)학생이름학과ID(FK)

2023001 홍길동 CS001
2023002 김철수 EE001
2023003 이영희 CS001

📌 2️⃣ 학과 테이블 (Department)

학과ID(PK)학과이름

CS001 컴퓨터공학과
EE001 전자공학과

📢 정리! 3차 정규화(3NF) 핵심 포인트

"기본키가 아닌 속성끼리 종속되지 않도록 분리!"
이행적 함수 종속(A → B → C) 제거
데이터 중복 줄이고, 삽입/수정/삭제 시 무결성 유지

🔥 즉, 기본키 → 직접 종속된 속성만 남겨두고, 나머지는 따로 테이블을 만들어 정리하면 됨! 🚀

 
 
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번
 

 

4. Queue (큐)

  • 큐는 FIFO (First-In-First-Out) 구조를 가지는 자료구조로, 먼저 들어온 데이터가 먼저 삭제됨.
  • 특징:
    • 입력(Enqueue)은 뒤에서, 삭제(Dequeue)는 앞에서 이루어짐.
    • 스택과 반대로 먼저 들어온 데이터가 먼저 처리됨.
  • 예제:
    • 프린터 작업 대기열, 은행 고객 대기줄, 운영체제의 프로세스 스케줄링


 
 
 
 
 
 
 
 
 
 
 
 
 
 
정답: 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

📌 Apache Ant는 유명한 빌드 자동화 도구인가?

🔹 Apache Ant과거에는 매우 유명했던 빌드 자동화 도구였지만, 현재는 MavenGradle에 밀려 사용이 줄어든 편이다.


✅ Apache Ant란?

  • **Ant(Apache Ant)**는 **"Another Neat Tool"**의 약자로, Java 프로젝트의 빌드를 자동화하는 도구
  • XML 기반의 빌드 스크립트(build.xml)를 사용하여 컴파일, 테스트, 패키징, 배포 등을 자동화
  • 과거에는 Java 빌드 자동화의 표준이었지만, 현재는 Maven과 Gradle이 더 많이 사용됨

 


빌드 자동화 도구
✔️ 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 주소가 어느 네트워크에 속하는지를 식별하고, 호스트 부분은 해당 네트워크 내에서 특정 장치를 식별하는 데 사용됩니다. 이 두 부분을 통해 효율적인 네트워크 통신이 이루어지며, 라우팅 및 패킷 전달이 가능해집니다.



📌 홉(Hop)이란?

네트워크에서 데이터 패킷이 한 장치(라우터)에서 다음 장치로 이동하는 것을 "홉(Hop)"이라고 한다.
즉, 패킷이 목적지까지 가는 동안 거치는 라우터의 수가 홉(hop) 단위로 계산된다.

 

[PC 1] ---> [Router 1] ---> [Router 2] ---> [PC 2]
                                |
                              [PC 3]

 

  • PC 1에서 PC 2로 데이터를 보낸다면?
    • PC 1 → Router 1 (1홉)
    • Router 1 → Router 2 (2홉)
    • Router 2 → PC 2 (3홉)
    • 총 홉 수 = 2
  • PC 1에서 PC 3으로 데이터를 보낸다면?
    • PC 1 → Router 1 (1홉)
    • Router 1 → Router 2 (2홉)
    • Router 2 → PC 3 (3홉)
    • 총 홉 수 = 2

📌 결론: 여러 개의 라우터를 거치면 홉 수가 증가한다.


📌 정리

  • 하나의 라우터에 연결된 경우, 홉 수 = 1
  • 여러 개의 라우터를 거쳐야 한다면, 라우터 개수만큼 홉 수 증가
  • 홉 수 = 데이터가 거치는 "라우터 개수" (PC 포함 X)

💡 즉, 컴퓨터가 3대 있더라도, 라우터 구성 방식에 따라 홉 수는 달라진다! 🚀

 
 

📌 라우터가 15개면 홉(Hop) 수는 15개인가?

네, 맞습니다! 라우터가 15개를 거친다면 홉 수는 15홉이 됩니다.

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비트

DESData Encryption Standard의 줄임말이야.

 

DES (Data Encryption Standard, 데이터 암호화 표준)

  • 1975년 미국 **NBS(National Bureau of Standards, 현재 NIST)**에서 발표
  • 대칭키(양방향) 암호화 알고리즘
  • 블록 크기: 64비트, 키 길이: 56비트
  • 데이터를 64비트 블록 단위로 암호화
  • Feistel 구조 기반으로 16라운드 암호화 수행

DES의 특징과 문제점

✅ 과거 금융 및 보안 시스템에서 많이 사용됨
키 길이가 짧아서(56비트) 현재는 안전하지 않음 → 쉽게 해킹 가능 => 현재 안전한 암호화 알고리즘을 사용하려면 키 길이가 최소 128비트 이상이어야 해!
현재는 AES(Advanced Encryption Standard)로 대체됨

즉, DES(Data Encryption Standard)는 대칭키 방식의 블록 암호화 알고리즘이야!

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

TCP는 전송계층에 있는 것 impo

 

종단간 통신을 다루는 최하위 계층인 전송계층에 대한 말인데 tcp, udp 이거 어떤거야? 얘네들이 전송계층 속한데
 
 

네, 맞아! TCP와 UDP는 전송 계층(Transport Layer)에 속하는 프로토콜이야.

전송 계층 (Transport Layer) 개요

  • 종단 간(end-to-end) 통신을 담당하는 계층
  • 데이터를 송신 측에서 수신 측까지 안정적으로 전송하는 역할
  • 대표적인 프로토콜: TCP, UDP

TCP (Transmission Control Protocol) - 신뢰성 중시

✅ 연결 지향형 (3-way Handshake 사용)
✅ 데이터 순서 보장, 오류 제어 및 흐름 제어 지원
✅ 속도는 상대적으로 느리지만 신뢰성이 높음
✅ 사용 예시: 웹(HTTP/HTTPS), 이메일(SMTP), 파일 전송(FTP)

UDP (User Datagram Protocol) - 속도 중시

✅ 비연결형 (Handshake 없음)
✅ 데이터 순서 보장 X, 오류 제어 거의 없음
✅ 속도가 빠르지만 신뢰성이 낮음
✅ 사용 예시: 실시간 스트리밍, 온라인 게임, VoIP(음성 통화)

결론

TCP와 UDP 둘 다 전송 계층(Transport Layer)에서 동작하는 프로토콜이야!



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): 요청을 객체의 형태로 캡슐화하여 이를 매개변수화하고 다양한 요청, 큐 또는 로깅에 사용할 수 있도록 하는 패턴입니다.

 

커맨드 패턴에서 **"큐 또는 로깅에 사용한다"**는 의미를 이해하려면 먼저 **큐(Queue)**와 **로깅(Logging)**이 뭔지 알아야 해!

1. 큐 (Queue)란?
"줄 서기"랑 비슷해!

선입선출(First In, First Out, FIFO) 구조
먼저 들어온 요청이 먼저 처리됨
✅ 예시:

프린터 대기열 (여러 개의 인쇄 요청이 순서대로 처리됨)
은행 대기번호 (먼저 온 사람이 먼저 처리됨)
메시지 큐 (서버에서 요청을 받아 순서대로 처리)
🛠 커맨드 패턴과 큐의 관계
커맨드 패턴을 사용하면 **"요청을 객체로 저장"**할 수 있어. 이 요청들을 큐에 쌓아 두었다가 순서대로 실행할 수 있음!

2. 로깅 (Logging)란?
"일기 쓰기"랑 비슷해!

프로그램에서 어떤 일이 발생했는지 기록하는 것
에러 발생, 사용자 입력, 시스템 이벤트 등을 남길 수 있음
✅ 예시:

게임에서 "플레이어가 공격 버튼을 눌렀다" 기록
웹사이트에서 "사용자가 로그인했다" 기록
서버에서 "에러 발생"을 로그 파일에 저장
🛠 커맨드 패턴과 로깅의 관계
커맨드 패턴을 사용하면 모든 요청을 객체로 만들어 기록할 수 있음. 즉, 언제 어떤 명령(요청)이 실행되었는지 저장 가능!

 


스테이트 패턴(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를 가진 튜플은 중복되지 않습니다. 이는 데이터베이스의 정규성을 유지하기 위한 중요한 특성 중 하나입니다. 중복된 값을 허용하면 데이터베이스의 일관성과 무결성이 깨질 수 있기 때문에 서로 다른 값을 가지는 것이 중요합니다.


그러니까 모든 튜플은 서로 다른값을 갖고있다는게 행이 행에서도 여러개의 열에 대한 값을 갖고있을 수 있잖아 그게 전부다 달라야한다는 뜻이야? 아니면 식별자만 다르면 된다는 뜻이야?

네, "모든 튜플은 서로 다른 값"이라는 말은 각 튜플이 릴레이션의 다른 튜플과 비교하여 모든 열의 값이 다른지를 의미합니다. 즉, 모든 열의 값이 서로 다른 경우 해당 튜플은 다른 튜플과 중복되지 않는 것입니다.

이 말은 특히 릴레이션에서 하나 이상의 열이 식별자(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번임. 내부 단편화
 

단편화(Fragmentation)란?

운영체제에서 메모리를 효율적으로 관리하지 못해서 사용되지 않는 작은 공간들이 발생하는 현상이야. 이런 현상이 쌓이면 메모리 활용도가 떨어지고 성능이 저하될 수 있어

 

1. 내부 단편화 (Internal Fragmentation)

  • 설명: 할당된 메모리 블록 안에서 사용되지 않는 공간이 생기는 현상
  • 이유: 요청한 크기보다 더 큰 고정된 크기의 블록을 할당하기 때문
  • 예시:
    • 100KB가 필요한데, 시스템이 128KB 블록 단위로만 할당할 수 있다면?
    • 28KB는 사용되지 않고 낭비됨 → 내부 단편화 발생

2. 외부 단편화 (External Fragmentation)

  • 설명: 메모리 전체에 사용하지 못하는 작은 빈 공간여기저기 흩어져 있는 현상
  • 이유: 메모리를 동적으로 할당하고 해제하면서 연속된 빈 공간이 부족해짐
  • 예시:
    • 10MB, 20MB, 10MB의 빈 공간이 흩어져 있지만, 25MB가 필요한 경우
    • 총 40MB 여유 공간이 있어도 연속된 25MB가 없어서 할당할 수 없음 → 외부 단편화 발생

3. 공간 단편화 (Memory Fragmentation)

  • 설명: 내부 단편화 + 외부 단편화를 포괄적으로 지칭하는 개념
  • 즉, 메모리 공간이 비효율적으로 사용되는 모든 현상을 말함

4. 상위 단편화 (High Memory Fragmentation)

  • 설명: 잘 쓰지 않는 상위 메모리 영역(예: OS 제한된 메모리 구역)에서 단편화가 발생하는 경우
  • 거의 사용되지 않는 개념이라 보통 내부/외부 단편화만 기억하면 충분해!


 
이 것도 뭔말인지 모르잖아 
다음 중 피연산자가 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):

aborted: 중단된 

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

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

 
탐색(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

 

반응형