관리 메뉴

CASSIE'S BLOG

2407 정처기 준비 비공개 본문

카테고리 없음

2407 정처기 준비 비공개

ITSCASSIE1107 2024. 6. 25. 10:28
반응형

Cascade는 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한을 연쇄적으로 회수하는 명령이라는데 cascade가 무슨 뜻이야?

Cascade는 원래 “폭포처럼 흐르다”, **“연속적으로 영향을 미치다”**라는 뜻이야.

IT나 데이터베이스 분야에서는 어떤 명령이나 변화가 연쇄적으로 여러 개체에 영향을 미치는 걸 의미해. 예를 들어:
• Cascade Delete: 한 개체를 삭제하면 그와 연결된 다른 개체들도 자동으로 삭제됨.
• Cascade Revoke (권한 회수): A가 B에게 권한을 주고, B가 C에게 같은 권한을 줬다면, A가 B의 권한을 회수하면 B가 C에게 부여한 권한도 같이 회수됨.

즉, Cascade Revoke는 권한을 회수할 때 연쇄적으로 퍼지는 효과가 있는 거야. “도미노처럼 권한이 차례로 사라진다”라고 생각하면 이해하기 쉬울 거야!

객체권한은 많다. Select, insert, update, delete, alter

OTP토큰은 왜 소지기반 인증기술이야? 소지가 손가락아니야?

소지 = having

소지(所持) 기반 인증 기술은 사용자가 물리적으로 가지고 있는 것을 이용해 본인을 인증하는 방식이야. 예를 들어, 보안 카드, 스마트카드, OTP 토큰, 모바일 인증 앱 등이 여기에 해당해.

OTP(One-Time Password) 토큰이 소지 기반 인증 기술로 분류되는 이유는 사용자가 특정한 물리적 장치(토큰, 스마트폰의 OTP 앱 등)를 소유하고 있어야만 인증이 가능하기 때문이야. 즉, 비밀번호 같은 **기억 기반 인증(knowledge-based authentication)**과는 다르게, 단순히 알고 있다고 해서 인증할 수 없고 물리적으로 가지고 있어야만 인증이 가능해.



1. 단일 연결 리스트 (Singly Linked List)
• 각 노드(Node)가 데이터 + 다음 노드의 주소(포인터)만 가지고 있는 리스트
• 한 방향(앞→뒤)으로만 이동 가능

구조

[데이터 | 다음 노드 주소] → [데이터 | 다음 노드 주소] → [데이터 | NULL]

특징

✅ 장점:
• 구조가 단순하고 메모리 사용이 적음
• 삽입, 삭제가 배열보다 빠름 (중간 삽입/삭제 시 데이터 이동이 필요 없음)

❌ 단점:
• 이전 노드로 이동 불가 (뒤에서 앞으로 가려면 처음부터 다시 탐색해야 함)
• 마지막 노드에서 처음 노드로 돌아갈 방법이 없음

2. 이중 연결 리스트 (Doubly Linked List)
• 각 노드가 데이터 + 이전 노드 주소 + 다음 노드 주소를 가지고 있는 리스트
• 앞뒤로 이동 가능

구조

NULL ← [이전 노드 주소 | 데이터 | 다음 노드 주소] ↔ [이전 노드 주소 | 데이터 | 다음 노드 주소] → NULL

특징

✅ 장점:
• 양방향 이동 가능 (이전 노드로 이동할 수 있음)
• 삭제와 삽입이 더 효율적 (특히 뒤쪽에서 데이터를 삭제할 때 단일 연결 리스트보다 빠름)


블록 탐색(Block Search)란?

블록 탐색은 데이터를 일정한 크기의 블록으로 나눈 후, 블록 단위로 먼저 탐색하고, 해당 블록 내에서 다시 탐색하는 방법이야.

블록 탐색의 과정
1. 데이터를 여러 개의 블록(그룹)으로 나눈다.
2. 각 블록의 마지막 값(대표값)만 확인하여, 찾고자 하는 값이 포함된 블록을 찾는다.
3. 찾은 블록 내에서 순차 탐색(Linear Search) 또는 다른 탐색 기법을 사용하여 값을 찾는다.


보간 뜻이 뭐야? 탐색기법 중에서 찾을값-최소값 나누기 최대값-최소값 곱하기 데이터 개수로 탐색을 수행하는 기법은?

보간(Interpolation)의 뜻

**보간(Interpolation)**은 주어진 데이터 사이의 값을 추정하는 과정을 의미해.
즉, 이미 있는 값들을 활용해서 특정한 값이 어디에 위치할지 예측하는 방법이야.

문제에서 설명하는 탐색 기법

“찾을 값 - 최소값 ÷ (최대값 - 최소값) × 데이터 개수”로 탐색을 수행하는 기법

여기서 time slice는 무슨 뜻인데? 낮은 큐일수록 time slice는 커지며 CPU 사용을 마친 프로세스는 낮은 큐로 이동한다

**Time Slice(=Time Quantum)**는 각 프로세스가 CPU를 사용할 수 있는 최대 시간을 의미해.
즉, CPU를 한 번 점유할 때 할당되는 시간 단위야.

“낮은 큐일수록 Time Slice가 커진다”는 의미
• MFO(Multilevel Feedback Queue)에서는 높은 우선순위 큐일수록 짧은 Time Slice를 가짐
• 낮은 우선순위 큐로 내려갈수록 Time Slice가 커짐
• 즉, 처음에는 짧은 시간 동안 실행되지만, 우선순위가 낮아질수록 더 긴 시간 동안 실행 가능

왜 낮은 큐일수록 Time Slice가 커질까?
1. 짧은 작업(반응이 빨라야 하는 작업)을 우선적으로 처리하기 위해
• 초기에는 Time Slice가 짧아 빠른 응답이 필요한 작업을 우선 실행
• CPU를 오래 쓰는 작업은 낮은 큐로 이동
2. CPU를 많이 사용하는 작업을 효율적으로 실행하기 위해
• 짧은 Time Slice에서는 프로세스가 자주 교체되므로 컨텍스트 스위칭(Context Switching) 비용 증가
• CPU를 많이 사용하는 작업은 낮은 큐에서 더 긴 Time Slice를 가지도록 하여 불필요한 문맥 교환을 줄임

“CPU 사용을 마친 프로세스는 낮은 큐로 이동한다”는 의미
• 프로세스가 Time Slice 동안 CPU를 사용했는데도 완료되지 않으면 우선순위가 낮아져서 아래 단계의 큐로 이동
• 결국 오래 실행되는 프로세스는 점점 낮은 큐로 내려가서, 마지막 큐(RR 방식)에서 실행됨

정리
• Time Slice = 한 프로세스가 CPU를 점유할 수 있는 시간
• 낮은 큐일수록 Time Slice가 커짐 = CPU를 많이 쓰는 작업은 더 긴 시간 동안 실행되도록 함
• CPU 사용을 마친 프로세스는 낮은 큐로 이동 = 짧은 작업을 우선 처리하고, 긴 작업은 낮은 큐에서 실행되도록 함

MFO multilevel Feedback Queue 에 대해 설명하고 있는데 RR스케줄링 무슨 뜻아야?

맨 마지막 단계에셔 큐는 RR 스케줄링 방식을 사용한다.

RR (Round Robin) 스케줄링은 **시간 할당(Time Quantum, Time Slice)**을 사용하여 프로세스를 순환(Round Robin) 방식으로 처리하는 스케줄링 기법이야.

MFO(Multilevel Feedback Queue, 다단계 피드백 큐)와 RR 스케줄링 관계

MFO는 여러 개의 큐를 사용하며, 우선순위가 높은 큐에서 실행되지 못한 프로세스는 점점 낮은 우선순위 큐로 이동해.
• 초기에는 높은 우선순위 큐에서 실행
• CPU를 오래 사용하는 프로세스는 점점 낮은 큐로 이동
• 맨 마지막 큐에서는 RR(Round Robin) 스케줄링을 사용

왜 맨 마지막 큐에서 RR을 사용할까?
1. 낮은 우선순위 프로세스라도 무조건 실행되도록 보장하기 위해
• FIFO 방식이면 우선순위 높은 작업이 계속 들어오면 낮은 우선순위 작업이 실행되지 못할 수 있음.
• RR을 사용하면 모든 프로세스가 일정한 시간 동안은 CPU를 사용할 기회를 얻음.
2. CPU를 오래 쓰는 작업이 너무 길게 점유하지 못하도록 제한
• 타임 슬라이스(Time Quantum)마다 프로세스를 바꿔가면서 실행하므로, 한 프로세스가 독점하는 걸 방지함.

결론

“MFO의 맨 마지막 큐에서 RR 스케줄링을 사용한다”는 말은 우선순위가 낮은 프로세스라도 정해진 시간만큼 CPU를 사용할 수 있도록 한다는 의미야.



페이지 교체 알고리즘 중 아래에서 설명하는 것은?

FIFO 기법의 단점을 보완하는 기법이다.
오랫동안 주 기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 기법이다.

보기는 LRU, NUR, OPT, SCR

각 보기에 대해 진짜 간단하고 쉽게 설명해줘

각 보기에 대한 초간단 요약
• LRU (Least Recently Used) → 가장 오랫동안 안 쓰인 페이지를 교체
• 최근에 사용된 페이지는 유지
• 완벽한 방법이지만 구현이 복잡
• NUR (Not Recently Used) → 최근에 사용되지 않은 페이지를 교체
• 하드웨어의 **참조 비트(Reference Bit)**를 사용
• LRU보다 간단한 대체 방법
• OPT (Optimal Page Replacement) → 앞으로 가장 오랫동안 안 쓸 페이지를 교체
• 이론적으로 가장 좋은 방법이지만, 미래를 예측해야 해서 현실적으로 불가능
• SCR (Second-Chance Replacement, 또는 Clock Algorithm) → FIFO 개선 버전, 참조 비트가 1이면 한 번 더 기회를 줌
• 오래된 페이지라도 최근에 사용된 경우 제거하지 않음
• ➡️ 문제의 정답!

이게 Star Topology 설명이 아니고 버스형이래 와 그런거야? 하나의 메인 통신 회선에 다수의 단말기가 연결돠어있는 네트워크 토폴로지는?

하나의 메인 통신 회선(케이블)에 여러 단말기가 연결된 네트워크 토폴로지는 **버스형 토폴로지(Bus Topology)**야.

버스형 토폴로지(Bus Topology)란?
• 중앙의 하나의 통신 회선(버스, Bus)에 여러 개의 단말기(노드)가 연결된 형태

Star(스타) 토폴로지와의 차이
• 스타(Star) 토폴로지는 중앙에 허브(Hub) 또는 스위치(Switch)가 존재하고, 각 단말기가 개별적으로 연결됨.
• 반면, 버스형 토폴로지는 중앙 장치 없이 모든 노드가 하나의 회선(버스)에 직접 연결됨.



sSl 인증서가 뭔데 개인정보를 암호화할 수 있는거야?

SSL(Secure Sockets Layer) 인증서는 웹사이트와 사용자의 브라우저 사이에 주고받는 데이터를 암호화하는 보안 기술이야. 요즘은 SSL의 후속 버전인 **TLS(Transport Layer Security)**가 더 많이 쓰이지만, 여전히 SSL 인증서라는 이름이 일반적으로 사용돼.


에지컴퓨팅
자율 주행 자동차 등 정보를 요청한 장치에서 가까운 위치에서 데이터를 처리하여 지연시간 최소화, 네트워크 부담 최소화




오버레이 네트워크(Overlay Network)는 기존 물리적 네트워크(Underlay Network) 위에 가상적으로 구성된 네트워크를 의미해. 쉽게 말해, 기존 네트워크 인프라를 활용하면서 그 위에 별도의 논리적 네트워크 계층을 추가하는 방식이야.

특징
• 기존 네트워크 인프라를 변경하지 않고 새로운 네트워크를 구축할 수 있음.
• 데이터가 중간 노드를 거쳐 전달되는 구조(예: P2P, VPN, CDN).
• 특정 목적(보안, 부하 분산, 확장성 개선 등)에 맞게 유연하게 구성 가능.



모듈화 설명 중 틀린 것은? 1. 응집도와 결합도에 기반하여 프로그램을 효율적으로 묶는 기법을 모듈화라고 한다. 2. 분할과 지배의 원리를 이용하고 있다. 3. 모듈 내부가 아닌 외부의 모듈과의 연관도를 결합도라고 한다. 4. 낮은 응집도와 높은 결합도가 좋은 모듈화이다. 낮은 응집도가 긍정적인 개념이야 부정적인 개념이야? 설명해줘 응집도가 높아야 좋은 거 아니야? 해설 높은 응집도와 낮은 결합도가 좋은 모듈화방법이다. 결합도가 부정적인 개념이고, 응집도가 긍정적인 개념이야? 개념설명 좀 해줘

 

 

 

✅ 보기별 설명

1️⃣ 응집도와 결합도에 기반하여 프로그램을 효율적으로 묶는 기법을 모듈화라고 한다.
O (맞음)
→ 모듈화는 응집도를 높이고 결합도를 낮춰서 독립적이고 유지보수하기 쉬운 프로그램을 만드는 기법이야.
2️⃣ 분할과 지배의 원리를 이용하고 있다.
O (맞음)
→ "Divide and Conquer(분할과 정복)" 원리에 따라 큰 프로그램을 독립적인 작은 모듈로 나누어 효율적으로 관리하는 게 모듈화의 핵심.
3️⃣ 모듈 내부가 아닌 외부의 모듈과의 연관도를 결합도라고 한다.
O (맞음)
→ 결합도는 **모듈 간의 연결 정도(의존성)**를 의미하는 개념이 맞음.
4️⃣ 낮은 응집도와 높은 결합도가 좋은 모듈화이다.
X (틀림)
높은 응집도, 낮은 결합도가 좋은 모듈화임!
 
 
정답: 4번 (낮은 응집도와 높은 결합도가 좋은 모듈화이다 ❌ → 높은 응집도와 낮은 결합도가 좋은 모듈화)


✅ 응집도(Cohesion)와 결합도(Coupling) 개념

📌 응집도(Cohesion)긍정적인 개념

  • 모듈 내부의 기능들이 얼마나 밀접하게 관련되어 있는지를 나타내는 정도.
  • 응집도가 높을수록 좋은 모듈화 → 하나의 모듈이 하나의 역할(기능)만 담당하면 유지보수와 재사용이 쉬워짐.
  • 응집도가 낮으면 기능이 여기저기 흩어져 있어서 코드의 가독성이 떨어지고 유지보수가 어려워짐.

📌 결합도(Coupling)부정적인 개념

  • 모듈 간 의존성이 얼마나 강한지를 나타내는 정도.
  • 결합도가 낮을수록 좋은 모듈화 → 서로 독립적인 모듈이 많을수록 변경이 용이하고 재사용이 쉬움.
  • 결합도가 높으면 하나의 모듈을 수정할 때 다른 모듈까지 영향을 받아 유지보수가 어려워짐.

 
CPM 네트워크가 다음과 같을 때 임계경로의 소요기일을 찾는 방법을 알아야함
즉 시작부터 종료까지 모든 경로 중에서 가장 오래 소요되는 경로가 임계경로다. 
 

라우팅 대표 프로토콜이 3개 밖에 없다
RIP, OSPF, BGP

✅ BGP(Border Gateway Protocol) → 인터넷 서비스 제공업체(ISP)와 대형 네트워크 간 경로 정보를 교환하는 필수 라우팅 프로토콜로, 인터넷 백본에서 가장 많이 사용됨

Border → 네트워크의 경계(인터넷과 내부 네트워크의 경계)
Gateway → 네트워크 간 데이터를 주고받는 장치(라우터).

RIP(Routing Information Protocol) → 거리 벡터 기반, 홉 카운트(최대 15)로 경로 결정, 소규모 네트워크에 적합하지만 속도가 느리고 확장성이 낮음.

OSPF(Open Shortest Path First) → 링크 상태 기반 라우팅 프로토콜, 계층적 구조(Area) 사용, 컨버전스 속도 빠름.

✅ 거리 벡터 기반 (Distance Vector)

라우터가 자신과 직접 연결된 이웃 라우터와 거리(홉 수) 정보를 주고받으며 경로를 결정함.
예: RIP → 홉 수가 적은 경로를 선택함.
단점: 네트워크 규모가 커지면 경로 수렴이 느리고 루프가 발생할 위험이 있음.

✅ 링크 상태 기반 (Link State)

라우터가 전체 네트워크의 토폴로지(구조)를 직접 학습하여 최적 경로를 계산함.
예: OSPF → Dijkstra 알고리즘을 사용해 최단 경로를 찾음.
장점: 빠른 경로 수렴, 안정적인 라우팅, 대규모 네트워크에 적합.
 
 
 
공동 모듈의 재사용 범위에 따른 분류가 아닌 것은?
보기: 컴포넌트 재사용, 더미 코드 재사용, 함수와 객체 재사용, 애플리케이션 재사용

내답: 애플리케이션 재사용

해설: 더미 코드를 재사용하지는 않는다.

더미 코드가 무슨 뜻인데?

**더미 코드(Dummy Code)**란, 실제 기능을 수행하지 않지만 테스트나 개발 과정에서 임시로 사용하는 코드야.

📌 더미 코드란?
👉 **"가짜 코드"**라고 생각하면 돼!
👉 시스템이 완성되지 않았을 때, 특정 기능이 있는 것처럼 형식만 갖춘 코드를 작성해서 테스트하는 용도로 사용돼.


📌 애플리케이션 재사용이 가능한 이유
네 말대로, **애플리케이션(Application)**은 보통 하나의 독립적인 시스템을 의미해.
하지만 재사용 관점에서 보면, 완성된 애플리케이션을 전체 또는 일부를 그대로 활용하는 것도 재사용이야.

예를 들어:
✅ ERP 시스템을 다른 회사에서도 그대로 사용 → 애플리케이션 재사용
 이미 만든 쇼핑몰 플랫폼을 다른 고객에게 판매 → 애플리케이션 재사용
✅ 기존의 웹사이트 템플릿을 복사해서 새로운 서비스에 적용 → 애플리케이션 재사용

즉, 하나의 완전한 애플리케이션을 그대로 사용하거나 일부를 수정하여 다시 활용하는 것도 재사용의 한 형태야!
 
 
선언형언어 
개념:
특정 선언만 명시하여 프로그램을 동작시키는 프로그래밍 언어이다. 

종류:
Html: 인터넷을 위한 하이퍼텍스트 문서를 만들기 위해 사용되는 언어
Haskal: 함수형언어들을 통합 정리하여 만든 일반적인 순수함수형언어
Prolog: 논리식을 토대로 하여 오브젝트와 오브젝트 간의 관계에 관한 문제를 해결하기 위한 언어
 
osi 계층에서 단말기 사이(ex. 컴퓨터-단말기)에 오류 수정과 흐름 제어를 수행하여 신뢰성 있고 명확한 데이터를 전달하는 계층은?
보기 전송계층, 응용계층, 세션 계층, 표현 계층

내 답: 전송계층

해설: 전송 계층은 프로세스 간 논리적 통신서비스를 제공하는 osi-7계층의 4번째 단계로, 오류 검출과 복구, 흐름 제어를 수행해 신뢰성 있는 통신을 보장한다.

다른 보기도  한줄로 간단하게 다 설명해줘

✅ 전송계층 (Transport Layer) → 오류 검출, 복구, 흐름 제어를 통해 신뢰성 있는 통신을 제공함. (정답!)
✅ 응용계층 (Application Layer) → 사용자와 네트워크가 직접 상호 작용하는 계층 (예: 웹 브라우저, 이메일 등).
✅ 세션계층 (Session Layer) → 두 장치 간 세션(연결) 설정, 유지, 종료를 담당함.
✅ 표현계층 (Presentation Layer) → 데이터의 형식(인코딩/디코딩)과 암호화를 담당함.

📌 결론: 신뢰성 있고 오류 수정 및 흐름 제어를 수행하는 계층은 전송계층이 맞아

세션 연결을 쉽게 설명하면, 두 장치(예: 컴퓨터, 스마트폰)가 일정 기간 동안 데이터를 주고받을 수 있도록 연결을 관리하는 것이야.

📌 세션 연결이란?
세션(Session)은 **대화(통신)**을 위한 연결이야!
예를 들어, 우리가 전화를 걸면 전화를 거는 순간 세션이 시작되고, 전화를 끊으면 세션이 종료되는 것과 비슷해.

📌 세션 연결 예시 (Airdrop과 비교)

세션 연결 예시
1️⃣ 온라인 게임 → 게임 서버와 플레이어 간 연결 유지
2️⃣ 화상 통화 (줌, 팀즈) → 영상·음성 데이터를 끊기지 않게 유지
3️⃣ 웹사이트 로그인 상태 유지 → 로그인한 상태로 페이지 이동 가능
 
각 보기에 대해서도 설명해줘

일정 관리 기법 중 낙관치, 평균치, 비관치의 평균으로 일정을 산출하는 기법은?

CPM, 3점 산정, Function Point, 유사 산정

위험을 고려하여 낙관치, 평균치, 비관치로 일정을 산출하는 기법은 3점 산정 기법이다. 

각 보기에서 제시된 일정 산정 기법들에 대해 설명해 줄게!


1️⃣ CPM (Critical Path Method, 크리티컬 패스 방법)

  • 프로젝트의 **최장 경로(크리티컬 패스, Critical Path)**를 찾아내어 일정을 관리하는 방법.
  • 활동(Task) 간의 선후 관계를 고려하여 전체 프로젝트의 최소 소요 기간을 계산함.
  • 일정 단축이 필요하면 크래싱(Crashing) 또는 패스트 트래킹(Fast Tracking) 같은 기법을 사용하여 조정할 수 있음.

특징

  • 낙관치, 평균치, 비관치를 사용하지 않고, 작업 간의 관계 및 경로 기반으로 일정 산정
  • 일정 지연이 허용되지 않는 **필수 작업(크리티컬 경로에 속한 작업)**을 중점적으로 관리

2️⃣ 3점 산정 (PERT, Three-Point Estimation)

  • 일정 산정을 위해 낙관치(Optimistic), 비관치(Pessimistic), 평균치(Most Likely) 3가지를 고려하는 기법.
  • 주로 **PERT (Program Evaluation and Review Technique)**에서 사용됨.
  • 베타 분포 공식을 사용하여 예상 소요 시간을 산정함.

공식
 

  • EE = 기대값(평균 예상 시간)
  • OO = 낙관적 예상 시간
  • MM = 가장 가능성이 높은 예상 시간
  • PP = 비관적 예상 시간

👉 위험을 고려한 일정 산출 기법으로, 정답이 바로 ‘3점 산정 기법’!


3️⃣ Function Point (FP, 기능 점수)

  • 소프트웨어 개발에서 기능의 크기를 기준으로 일정 및 비용을 산정하는 기법
  • 입력, 출력, 파일, 인터페이스 등 소프트웨어 기능 요소를 점수화하여 프로젝트 규모를 측정함.

특징

  • 일정 산정이 아니라, 소프트웨어의 크기를 측정하는 방법
  • 개발 비용과 인력을 산정하는 데 사용됨
  • 일정 자체를 계산하는 기법은 아니라서 정답이 아님!

4️⃣ 유사 산정 (Analogous Estimation)

  • 과거의 유사한 프로젝트의 일정 데이터를 참고하여 현재 프로젝트 일정을 산정하는 기법.
  • 프로젝트 경험이 많을수록 정확도가 높아짐.

특징

  • 데이터 기반으로 일정 추정 가능하지만, 프로젝트별 차이로 인해 정확성이 떨어질 수 있음.
  • 위험을 직접 고려하지 않음 → 3점 산정 기법과 차이점

📌 결론

👉 정답: 3점 산정 기법 (Three-Point Estimation, PERT)
👉 낙관치, 평균치, 비관치를 고려하는 유일한 기법!
📌 참고로, **CPM(크리티컬 패스 방법)**과 **PERT(3점 산정 기법)**은 종종 함께 사용되기도 해.

  • CPM: 결정적 일정 관리 (크리티컬 경로 중심)
  • PERT (3점 산정): 일정의 불확실성을 고려한 일정 산정

 

 
 
 
 
바커표기법이 정보처리기사에서 많이 나오는 개념이야?
바커표기법의 구성요소에 대한 설명으로 옳지않은 것은?

속성(Attribute) 의 표현 시 필수는 Mandatory로, 선택적표현은 Optiomal로 표현할 수 있다.

개체(Entity)는 네 모서리가 둥근 박스로 표현하며, 한 개의 속성으로만 구성된다.

관계(Relationship)의 표현 시 필수는 실선으로, 옵션은 점선으로 표기한다.

서브타입(Sub-type)은 슈퍼 타입 안에 서브타입 형태로 나타내며, 상호 배타적 관계이다. 
 

🔹 "상호 배타적 (Mutually Exclusive)"이란?

"상호 배타적"이라는 말은 하나를 선택하면 다른 것은 선택할 수 없는 상태를 의미해.

📌 예제: 슈퍼타입과 서브타입

예를 들어, **직원(Employee)**이라는 슈퍼타입이 있고,
그 아래에 **정규직(Full-time)**과 **계약직(Contract)**이라는 서브타입이 있다고 해.
상호 배타적이면?

  • 어떤 직원이 정규직이면 계약직이 될 수 없음! (한 가지만 선택 가능)

상호 배타적이지 않으면?

  • 어떤 직원이 정규직이면서 계약직일 수도 있음 (동시에 여러 개 가능)

즉, 상호 배타적인 서브타입은 서로 겹치지 않는 관계를 말하는 거야!
 
 
 
전원관리는 왜 운영체제의 기능이 아니야?
운영체제의 기본기능은
파일관리, IO관리, 메모리 관리래. 

하드웨어 레벨에서 직접 제어하는 부분이 크기 때문에, OS의 기본 기능 목록에서는 보통 따로 언급되지 않는 거야.
 
 
 
안드로이드가 개발한 임베디드용 운영체제가 안드로이드인데 휴대폰에만 안드로이드 운영체제 쓰는거지?

아니! 안드로이드는 원래 임베디드 기기를 위해 개발된 운영체제라서, 휴대폰뿐만 아니라 여러 가지 기기에서도 사용되고 있어.

📌 안드로이드가 사용되는 기기들
스마트폰 & 태블릿 📱

우리가 가장 익숙한 형태! 삼성, 구글 픽셀, 샤오미 같은 스마트폰에서 사용됨.
스마트 TV (Android TV) 📺

소니, 샤오미, TCL 같은 브랜드의 스마트 TV에서 사용됨.
구글 크롬캐스트 같은 셋톱박스에도 탑재됨.
스마트 워치 (Wear OS) ⌚

삼성 갤럭시 워치, 핏빗, 모토로라 같은 스마트 워치에서 사용됨.
자동차 (Android Automotive OS) 🚗

볼보, 폴스타, GM 같은 자동차에 내장된 운영체제로 사용됨.
구글 어시스턴트, 내비게이션, 미디어 컨트롤 등을 지원함.
IoT 기기 & 스마트홈 🏠

스마트 냉장고, 스마트 스피커, 보안 카메라, 로봇청소기 등에서도 사용됨.
게임 콘솔 & 휴대용 기기 🎮

닌텐도 스위치 같은 건 자체 OS를 쓰지만, 일부 휴대용 게임기(예: 안드로이드 기반의 GPD XP)에서 안드로이드가 사용됨.
POS 시스템 & 키오스크 🏪

매장에서 쓰는 결제 단말기, 키오스크(셀프 주문기) 같은 데도 안드로이드 기반 시스템이 많음.
즉, 안드로이드는 단순히 스마트폰 전용이 아니라, 임베디드 시스템을 포함한 다양한 기기에서 활용되는 범용 운영체제라고 보면 돼! 
 
 
 
**트랜잭션(Transaction)**은 하나의 작업 단위를 이루는 연산들의 집합이야. 쉽게 말해, "올바르게 완료되거나, 전혀 실행되지 않거나" 하는 원칙을 따르는 작업 단위라고 보면 돼.
 
 
트랜잭션 상태에 해당하지않는 것은?
실행 (Active)
완료 (Committed)
성공 (Success)
실패 (Failed)

트랜잭션은 실행, 부분 완료, 완료, 실패, 철회의 상태를 가질 수 있다.
성공이라는 상태는 없는건가?부분완료는 영어로 뭐라고해?

맞아! 트랜잭션 상태 중에 "성공 (Success)"는 일반적으로 사용되지 않는 개념이야.

보통 트랜잭션 상태는 다음과 같아:

실행 (Active) - 트랜잭션이 실행 중
부분 완료 (Partially Committed) - 모든 연산이 수행되었지만 아직 최종 커밋 전
완료 (Committed) - 트랜잭션이 성공적으로 수행되고 영구적으로 저장됨
실패 (Failed) - 오류로 인해 트랜잭션이 중단됨
철회 (Aborted / Rolled Back) - 실패한 트랜잭션이 롤백됨
📌 "부분 완료"는 영어로 **"Partially Committed"**라고 해!
즉, **"Success"**라는 상태는 따로 존재하지 않고, "Committed" 상태가 성공을 의미하는 거야. 
DB 설계 시 물리 환경 조사 분석 단계에서 진행하는사항이 아닌 것은?
1. 하드웨어 자원 분석
2. 운영체제 분석
3. 정규화
4. 시스템 조사 분석

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

어떤 설계가 또 있어? 물리적 설계, 논리적 설계말고?

DB 설계 과정에서 일반적으로 다음과 같은 주요 설계 단계가 있습니다.

개념적 설계 (Conceptual Design)
사용자 요구사항을 분석하고, 개념적 모델(예: ERD, 개체-관계 다이어그램)로 표현하는 단계
데이터의 주요 개체(Entity), 속성(Attribute), 관계(Relationship)을 정의
 
쉽게 말하면 개념적 설계는 "데이터베이스에 들어갈 주요 요소들을 큰 그림으로 정리하는 단계"야.

이 단계에서는 **"어떤 데이터를 저장해야 하는지?"**를 고민하고, 이를 시각적으로 표현하기 위해 **ER 다이어그램(ERD)**을 만든다고 보면 돼.


논리적 설계 (Logical Design)
개념적 설계를 기반으로 논리적인 데이터 모델(예: 관계형 모델)로 변환하는 단계
정규화를 적용하여 데이터 중복을 최소화하고 무결성을 유지
테이블, 속성, 기본 키, 외래 키 등을 정의

물리적 설계 (Physical Design)
논리적 설계를 실제 데이터베이스 관리 시스템(DBMS)에 맞춰 구현하는 단계
저장 구조, 인덱스, 파티셔닝, 성능 최적화 등의 고려
 
DB 백업에 대한 설명으로 옳은 것은?
DB 백업은 DB 백업 주체와 DB 백업 범위를 기준으로 나눌 수 있다.

DB 백업 중 전체 백업은 원하는 DB전체를 백업한다

OS 물리백업은 로그파일을 사용하는 방법과 사용하지않는 방법이 있다.
차분 백업은 전체 백업 이후 변경된 부분만 백업하는 기법이다.

내답: OS 물리백업은 로그파일을 사용하는 방법과 사용하지않는 방법이 있다.
정답: 차분백업업은 이전 백업 이후 "변경 부분만" 백업하는 기법이다.
전체 백업 이후 변경된 부분만 백업하는 기법이다.=> 이 설명은 증분백업에 대한 설명이다. 
 
 
 
정보공학표기법이 정보처리기사에서 중요한개념이야?
사용자는 정보공학표기법의 구상대상이 왜 아니야?
개체 (Entity), 속성(Attribute), 서브타입(Sub-type)은 구성대상이라고하는데.

 왜 사용자는 정보공학표기법의 구성 대상이 아닐까?
👉 정보공학 표기법은 데이터 모델을 설계하는 방법이기 때문에, "데이터 구조"를 표현하는 것이 핵심임.

💡 즉, 사용자는 데이터를 저장하는 대상이 아니라, 데이터를 이용하는 주체이므로, 정보공학표기법에서 다루지 않음!

📌 구성 대상 정리
✔ 개체(Entity) → 정보로 저장할 대상 (예: 고객, 주문, 제품)
✔ 속성(Attribute) → 개체의 특징 (예: 고객명, 주문일, 가격)
✔ 서브타입(Sub-type) → 개체를 세부적으로 분류 (예: 직원 개체 → 정규직, 계약직 서브타입)
 
ER모델에서 다중값 속성을 의미하는 것은 두 개의 타원이 겹쳐진 것이다. 
 
 
이벤트에 대한 설명으로 올바르지 않은 것은?
1. 이벤트가 수행되면 리턴값을 받을 수 있다.
2. DML를 주된 목적으로 하여 프로시저와 유사하다
3. 이벤트 명령어를 통해 트리거 실행을 위한 이벤트를 인지한다.
4. 특정한 상황이나 시간에 프러시저, 트리거, 함수 등을 실행시킨다.

이벤트는 프로시저와 다르게 리턴값이 없다.
프로시저가 뭔데 리턴값이 있는거야?

 프로시저(Procedure)란?
**프로시저(Stored Procedure)**는 SQL에서 미리 정의된 쿼리의 집합으로, 특정 작업을 수행하는 코드 블록이야.

📌 프로시저 특징

미리 저장된 SQL 실행 블록 (함수처럼 사용 가능)
**입력값(Parameter)**을 받을 수 있음
리턴값(RETURN) 사용 가능 → 하지만 대부분의 DBMS에서 SELECT 결과를 반환하는 방식을 주로 씀

 이벤트와의 차이점
**이벤트(Event)**는 특정 시간이나 상황에서 실행되는 예약된 작업 (스케줄링 기능)
**프로시저(Procedure)**는 필요할 때 호출해서 실행하는 SQL 코드 블록
**트리거(Trigger)**는 특정 DML(INSERT, UPDATE, DELETE) 작업이 수행될 때 자동 실행되는 코드
📌 이벤트는 리턴값이 없지만, 프로시저는 리턴값을 가질 수 있음! 

리턴값이 있는 프로시저 예시 (MySQL 기준)
DELIMITER //
CREATE PROCEDURE GetUserCount(OUT userCount INT)
BEGIN
    SELECT COUNT(*) INTO userCount FROM users;
END //
DELIMITER ;

 
 
적용상 특징이라는게 무슨 말이야?

애플리케이션의 적용상 특성이 아닌 것은?
1. 특정 환경에서 사용
2. 모듈화
3. 버전 관리
4. 사용자 중심

해설: 특정 환경이 아닌 다양한 환경에서 사용가능해야한다.

**"적용상 특징"**이라는 말은 어떤 것이 실제로 적용될 때 가지는 특징을 의미해.

즉, 애플리케이션이 개발되고, 배포되고, 사용될 때 나타나는 특성을 뜻하는 거야.

✅ 문제 풀이
**"애플리케이션의 적용상 특성이 아닌 것"**을 고르는 문제인데, 해설을 보면:

특정 환경에서 사용 → ❌ (다양한 환경에서 사용 가능해야 함)
모듈화 → ✅ (코드를 분리하여 효율적으로 개발하는 특성)
버전 관리 → ✅ (소프트웨어 업데이트 및 변경 사항을 관리하는 특성)
사용자 중심 → ✅ (사용자의 요구를 고려하여 개발하는 특성)
 
 
impo

데이터 모델링을 할 때 도출되어 표현되는 관계의 종류가 아닌 것은?
1. 1:1 관계
2. 1:0 관계
3. 다:다 관계
4. 1:다 관계

해설: 다:다 관계는 불특정 관계로, 해소되어야할 관계이다.
 
DB 보안목표와 가장 거리가 먼 것은?
1. 기밀성
2. 무결성
3. 가용성
4. 사용성

..음......내답 사용성..?
해설: DB 보안 3대 목표는 기밀성, 무결성, 가용성이다. 


✅ 기밀성(Confidentiality)이란?
**기밀성(Confidentiality)**은 허가된 사용자만 데이터에 접근할 수 있도록 보호하는 것을 의미해.
즉, 권한이 없는 사람이 데이터를 보거나 유출하는 것을 방지하는 것이 핵심이야.
**무결성(Integrity)**은 데이터의 **일관성(consistency), 정확성(accuracy), 신뢰성(reliability)**을 유지하는 것을 의미해.
즉, 데이터가 변형되거나 손상되지 않고, 허가된 방식으로만 수정되도록 보호하는 것이야.
**가용성(Availability)**은 사용자가 필요할 때 데이터베이스(DB)를 사용할 수 있도록 보장하는 것을 의미해.
 
DBA: DB제품에 대한 전문 지식이 필요하며, 데이터 모델에 대한 해독능력을 갖춰야한다. => 데이터 관리자.
 
 
🔹 트리거에서 COMMIT / ROLLBACK이 불가능한 이유
트리거 내부에서는 명시적으로 COMMIT이나 ROLLBACK을 수행할 수 없어!
그 이유는 트리거가 실행되는 트랜잭션의 일부이기 때문이야.
1️⃣ 트리거는 원래 실행된 SQL(INSERT, UPDATE, DELETE)의 일부이기 때문

  • 트리거는 트랜잭션 내부에서 실행되므로, 만약 트리거 내부에서 COMMIT을 해버리면 원래 SQL과 분리된 트랜잭션이 되어버림
  • 이러면 트리거가 실행된 후 원래 SQL이 실패하더라도 트리거가 적용된 변경사항은 롤백되지 않는 문제 발생

트리거 작성 시의 주의사항에 해당하지 않는 것은?

왜 트리거 스크립트 구성 시 commit, rollback를 할 수 없는거야? 

트리거(Trigger) 작성 시 주의사항 및 COMMIT/ROLLBACK 불가능한 이유
✅ 트리거(Trigger)란?
트리거는 특정 이벤트(INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 데이터베이스 객체야.
예를 들어, 주문 테이블에서 데이터가 삭제되면 자동으로 로그 테이블에 기록하는 등의 작업을 수행할 수 있어

.
 
HIERACHICAL 3 LAYER 모델이 정보처리기사 시험에서 많이 나오는 개념ㅇ이야?


(0) 코어계층은 디스트리뷰션 계층에서 오는 데이터를 인터넷에 연결한다
(X) 큰 네트워크를 만들 수 있지만 확장하는데 어려움이 있다..
(0) 디스트리뷰션 계층은 라우팅 기능을 수행한다
(0) 엑세스 계층은 사용자가 최초로 연결되는 지점이다.


네트워크를 3계층으로 나누어서 관리함
코어 계층 (Core Layer)
역할: 네트워크의 백본 (back bone)역할
주요기능: 고속 데이터 전달, 인터넷 연결

Distribution Layer (디스트리뷰션 계층)
트래픽 관리 및 라우팅 수행

Access Layer (엑세스 계층)
역할: 사용자와 네트워크를 연결
주요 기능: 스위칭, VLAN 지원 

스위칭 (Switching) 개념 쉽게 설명!
**스위칭(Switching)**은 네트워크에서 데이터를 목적지까지 가장 효율적으로 전달하는 방법이야.
쉽게 말하면, 네트워크 장비(스위치)가 들어온 데이터를 어디로 보낼지 결정하는 과정이야!

VLAN (Virtual Local Area Network) 개념 쉽게 설명!
VLAN은 네트워크를 논리적으로 나누는 기술이야.
쉽게 말하면, 하나의 물리적인 네트워크(스위치)를 여러 개의 가상 네트워크로 분리하는 기술이야.

🚀 예제
👉 회사에 한 개의 스위치가 있다고 가정해보자.
💼 부서별로 네트워크를 따로 나누고 싶어! (IT팀, 회계팀, 마케팅팀)
✅ 하지만, 스위치를 부서별로 따로 구매하는 건 비효율적이야!
✅ 그래서 VLAN을 사용하면 논리적으로 네트워크를 분리할 수 있음.



 
오탐의 종류
FAR: False Acceptance Ratio
비인자리를 정상적으로 인가된 사용자로 판단하여 비인가자를 인가자로 판단하는 오류이다.
보안 요구 사랑이 낮은 조직에서 많이 발생

FRR
False Rejected Ratio
인가된 사용자이나 비상적으로 판단하여 허가받지 못하는 탐지 오류이다.
보안요구  사항이 높은 조직에서 발생한다. 
 
XOP랑 VPN 도 라우팅 관련된 네트워크 프로토콜이랑 연관된 개념이야? 쉽게 설명해줄래?

XOP와 VPN은 네트워크와 관련된 개념이긴 하지만, 라우팅과의 연관성은 조금 다르다. 쉽게 설명해줄게.

1. XOP (XML-binary Optimized Packaging)
XOP는 네트워크 프로토콜이 아니라 XML 데이터를 최적화해서 전송하는 기술이야.
XML 문서 안에 바이너리 데이터를 효율적으로 포함할 수 있도록 도와주는 방식인데, 예를 들면 이미지 파일이나 큰 데이터를 XML에 넣어 보낼 때 XOP를 사용하면 더 효율적으로 압축해서 전송할 수 있어.
네트워크에서 데이터를 주고받을 때 사용되긴 하지만, 라우팅과는 직접적인 관련이 없다.

2. VPN (Virtual Private Network)
VPN은 인터넷을 통해 사설 네트워크를 확장하는 기술이야.
예를 들어, 집에서 회사 네트워크에 안전하게 접속하려면 VPN을 사용할 수 있어.
네트워크 트래픽을 암호화하고, 특정 경로(터널)를 통해 데이터를 전송하는데, 이 과정에서 라우팅이 사용되긴 하지만 VPN 자체가 라우팅 프로토콜은 아니야.
오히려 VPN은 라우팅을 우회하거나 특정 네트워크로 연결하는 역할을 한다고 보면 돼.


VPN 이용해서 한국에서 미국 인척 해서 넷플릭스 보는 게 그게 VPN 맞지?
ChatGPT의 말:
맞아! 그게 바로 VPN을 이용한 대표적인 사례야. 😊

어떻게 작동하냐면:
한국에서 VPN을 설정할 때, 미국에 있는 VPN 서버에 접속해.
그러면 네트워크 트래픽이 미국 VPN 서버를 거쳐서 가는 것처럼 보이게 됨.
넷플릭스 입장에서는 "오! 이 사용자는 미국에서 접속했네?"라고 인식하고, 미국에서만 볼 수 있는 콘텐츠를 보여주는 거야.
핵심 포인트:
✅ VPN이 인터넷 트래픽을 암호화하고, IP 주소를 변경해주는 역할을 함.
✅ 결과적으로 한국에서 접속해도 미국에서 접속한 것처럼 보이게 만들 수 있음.
✅ 넷플릭스 같은 서비스들은 이걸 막으려고 VPN 서버를 차단하기도 함.

그러니까 VPN은 단순한 라우팅 개념이 아니라, 트래픽을 우회하고 보안을 강화하는 네트워크 기술이라고 보면 돼!


노드 VPN 써서 IP주소를 미국으로 바꾸는데 사용자가 데이터를 보내야해?
좋은 질문이야! 정확히 말하면, 사용자가 데이터를 보내는 게 아니라, 사용자의 인터넷 트래픽이 VPN을 거쳐 가는 구조야. 설명을 조금 더 명확하게 해볼게.


VPN을 사용할 때 데이터 흐름
VPN 연결을 설정하면

사용자의 기기(PC, 스마트폰)가 **VPN 서버와 안전한 연결(터널)**을 만듦.
이 연결을 통해 모든 인터넷 트래픽이 VPN 서버를 거쳐 감.
인터넷에 요청을 보낼 때

예를 들어, 넷플릭스에 접속하면, 보통은 →
📌 내 PC → 내 ISP(인터넷 제공업체) → 넷플릭스 서버
하지만 VPN을 사용하면 →
📌 내 PC → VPN 서버(미국) → 넷플릭스 서버
넷플릭스는 VPN 서버에서 요청이 왔다고 생각하고, **VPN 서버의 IP 주소(미국 IP)**를 기준으로 콘텐츠를 제공함.
응답 데이터(예: 넷플릭스 영상)가 돌아올 때

넷플릭스는 요청을 보낸 VPN 서버로 데이터를 보냄.
VPN 서버가 그 데이터를 내 PC로 다시 전달함.
사용자는 VPN을 통해 전달된 데이터를 받아서 정상적으로 볼 수 있음.

 
 
네트워크 구성일 때
소규모는 RIP
대규모는 OSPF 이다. 이렇게 외웠는데 OSPF는 어떤 영어의 줄임말이야?

OSPF는 Open Shortest Path First의 약어야.
대규모 네트워크에서 가장 빠른 경로를 동적으로 계산하고, 경로 변경이 발생하면 빠르게 반영해.
대규모 네트워크에서 최적의(가장 빠른) 경로를 자동으로 찾아서 효율적으로 데이터를 전송하는 프로토콜!

OSPF는 링크 상태 라우팅 프로토콜로, 대규모 네트워크에서 빠르고 효율적인 경로를 찾기 위해 사용돼.

✅ 대규모 네트워크에 적합 (라우팅 테이블 최적화)
✅ Dijkstra 알고리즘 기반으로 최단 경로 계산
✅ 빠른 수렴 속도 (변경 사항을 신속하게 반영)
✅ 다양한 계층 구조 지원 (Area를 나눠서 관리 가능)

**일반적인 윈도우나 MacBook에서 OSPF를 직접 사용하지 않아. OSPF는 라우터(네트워크 장비)에서 작동하는 라우팅 프로토콜이야.

대신 우리가 주로 사용하는 네트워크 설정 방식
DHCP (IP 자동 할당)
DNS (도메인 네임 변환)
Wi-Fi 또는 이더넷을 통한 네트워크 연결


DHCP(Dynamic Host Configuration Protocol)는 정보처리기사에서 자주 나오는 개념이야!
특히 네트워크 관리 및 운영 관련 문제에서 고정 IP vs. 동적 IP 개념과 함께 출제돼.

 정보처리기사에서 자주 나오는 DHCP 관련 개념
DHCP의 역할: 클라이언트에게 자동으로 IP 주소 및 네트워크 설정 정보 할당
DHCP 서버와 클라이언트 구조
DHCP 서버: IP 주소를 관리하고 할당
DHCP 클라이언트: IP 주소를 요청하는 장치(PC, 스마트폰, 프린터 등)
DHCP의 장점 vs. 단점
✅ 장점: 네트워크 관리가 편리함, 충돌 방지
❌ 단점: 서버 장애 시 IP 할당 불가, 보안 문제(무단 접속 가능성)

IP 할당 과정(DORA 과정)
Discover (클라이언트 → 서버: IP 요청)
Offer (서버 → 클라이언트: IP 제안)
Request (클라이언트 → 서버: IP 요청 확인)
Acknowledge (서버 → 클라이언트: IP 할당 완료)
정적 IP vs. 동적 IP 비교
정적 IP: 사용자가 직접 설정
동적 IP: DHCP 서버가 자동 할당
💡 시험에 자주 나오는 포인트

DORA 과정 순서 문제
정적 IP vs. 동적 IP 차이
DHCP 서버 장애 시 문제점
✅ 결론: 정보처리기사 시험에서 DHCP는 기본 개념으로 꼭 알고 있어야 해! 🚀
 
시스템 카탈로그는 어디에서 볼 수 있는거야? SQL에서 시스템 카탈로그를 지원해? 

테이블에 대한 정보를 구성하고 있으며 데이터 사전이라고도 부른다. 시스템의 사용자 정보, 뷰, 인덱스, 
통계에 대한 정보를 저장하고 있으며 시스템을 관리한다. 
 

📌 시스템 카탈로그란?
시스템 카탈로그(System Catalog)는 데이터베이스 시스템 내부에서 테이블, 뷰, 인덱스, 사용자, 권한, 통계 등 메타데이터(데이터에 대한 데이터)를 저장하는 특별한 테이블이야.
SQL에서는 보통 데이터 사전(Data Dictionary) 이라고도 부르며, 데이터베이스를 관리하는 데 중요한 역할을 해.


📌 SQL에서 시스템 카탈로그 확인 방법
SQL에서 시스템 카탈로그는 DBMS마다 다르게 지원되지만, 대표적인 것들은 다음과 같아.
1️⃣ MySQL / MariaDB

SHOW TABLES FROM information_schema;
SELECT * FROM information_schema.tables WHERE table_schema = 'database_name';
  • INFORMATION_SCHEMA 라는 데이터베이스가 시스템 카탈로그 역할을 함

2️⃣ PostgreSQL

SELECT * FROM pg_catalog.pg_tables;
SELECT * FROM pg_catalog.pg_indexes;
  • pg_catalog가 시스템 카탈로그 역할

3️⃣ Oracle

SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'YOUR_TABLE';
SELECT * FROM DBA_INDEXES;
  • DBA_, ALL_, USER_로 시작하는 뷰들이 시스템 카탈로그 역할

4️⃣ SQL Server

SELECT * FROM sys.tables;
SELECT * FROM sys.indexes;
  • sys.가 붙은 테이블들이 시스템 카탈로그

📌 시스템 카탈로그가 저장하는 정보
시스템 카탈로그는 데이터베이스의 모든 구조적 정보를 포함하고 있어. 주요 정보는 다음과 같아.
테이블 정보 (pg_tables, sys.tables, INFORMATION_SCHEMA.TABLES)
컬럼 정보 (pg_attribute, sys.columns, INFORMATION_SCHEMA.COLUMNS)
뷰 정보 (pg_views, sys.views, INFORMATION_SCHEMA.VIEWS)
인덱스 정보 (pg_indexes, sys.indexes, DBA_INDEXES)
사용자 및 권한 정보 (pg_roles, sys.database_principals, DBA_USERS)
통계 정보 (pg_stat_all_tables, sys.dm_db_index_usage_stats)


📌 결론
SQL에서 시스템 카탈로그는 INFORMATION_SCHEMA, pg_catalog, sys. 등의 테이블을 통해 확인 가능!
DBMS마다 시스템 카탈로그의 이름과 구조가 다르므로, 사용하는 DB에 맞춰 조회하면 됨!

 
 
이거 문제 보기를 아예 이해를 못하겠는데
슈퍼타입은 뭐고 서브타입은 뭐야?

논리 데이터모델의 물리 데이터 모델변환에서 슈퍼타입 변환은 서브타입을 슈퍼타입으로 변환하여 하나의 테이블을 만드는 것이다. 이에 대한 장점에 해당하지 않는 것은?

1. 뷰를 이용한 서브타입만 액세스, 수정가능하다.
2. 다수의 서브타입 통합 시 조인이 감소한다.
3. 수행속도가 좋아진다.
4. 처리마다 서브타입에 대한 구분이 필요하다.

해설: 처리마다 서브타입에 대한 구분이 필요한 점은 단일 테이블통합의 단점이다. 
 
슈퍼타입(Supertype)과 서브타입(Subtype) 개념
데이터 모델에서 **슈퍼타입(Supertype)**과 **서브타입(Subtype)**은 상속 관계처럼 이해하면 쉬워요.

슈퍼타입(Supertype): 공통 속성을 가진 상위 개념 (예: "직원" 테이블)
서브타입(Subtype): 슈퍼타입을 기반으로 한 세부적인 개념 (예: "정규직 직원", "계약직 직원" 테이블)
즉, 슈퍼타입 = 부모 / 서브타입 = 자식 관계예요.

문제 풀이: "슈퍼타입 변환"이란?
여러 개의 서브타입을 하나의 슈퍼타입 테이블로 합치는 방식이에요.
예를 들어:

원래는
정규직 직원 테이블
계약직 직원 테이블
인턴 직원 테이블
이렇게 여러 개의 서브타입 테이블이 있었다면
이를 하나의 "직원(Employee)" 테이블로 합치는 것이 "슈퍼타입 변환"이에요.


문제 보기 해석 및 정답
**"슈퍼타입 변환의 장점이 아닌 것"**을 찾는 문제예요.

뷰를 이용한 서브타입만 액세스, 수정 가능하다. ✅ (장점)

하나의 테이블로 만들었어도 뷰(View)를 활용하면 특정 서브타입만 접근 가능함.
다수의 서브타입 통합 시 조인이 감소한다. ✅ (장점)

원래는 정규직, 계약직, 인턴 테이블을 조인해야 했지만, 하나의 테이블로 통합하면 조인이 줄어듦.
수행 속도가 좋아진다. ✅ (장점)

조인이 줄어들고, 하나의 테이블에서 데이터를 가져오므로 성능이 향상될 수 있음.
처리마다 서브타입에 대한 구분이 필요하다. ❌ (단점 → 정답!)

원래는 테이블이 분리돼 있어서 "정규직 직원 테이블"만 조회하면 됐지만,
이제는 하나의 테이블에서 "이 직원이 정규직인지, 계약직인지" 구분해야 함
따라서 "서브타입 구분이 필요하다"는 것이 단점이 됨.
🔹정답: ④ 처리마다 서브타입에 대한 구분이 필요하다.

WHERE 절을 이용해서 특정 서브타입만 걸러내는 뷰(View) 를 만들 수 있기 때문에 각 서브타입을 마치 독립적인 테이블처럼 볼 수 있다는 의미야.

계약직 직원만 보고 싶다면?

CREATE VIEW 계약직_직원 AS
SELECT 직원_ID, 이름, 계약_기간
FROM 직원
WHERE 직원_유형 = '계약직';

💡 정리하면:
✔ 뷰(View)는 원본 데이터를 저장하지 않고, 테이블을 가상으로 보여주는 역할
✔ CREATE VIEW 한 후에도 삭제하지 않아도 무방함
✔ 필요하면 DROP VIEW 뷰이름; 으로 삭제 가능
✔ 뷰를 삭제해도 원본 테이블에는 영향 없음

즉, 뷰는 만들어 놓고 필요할 때만 삭제하면 돼! 🚀
 
 
 
xUnit은 또 인터페이스 관련된 도구야? 아주 쉽고 간단하게 뭔지 설명해줘 

xUnit은 단위 테스트(Unit Test)를 쉽게 작성하고 실행할 수 있도록 만든 테스트 프레임워크의 모음이에요.

✔ JUnit (Java), NUnit (.NET), PyTest (Python) 같은 여러 언어별 테스트 도구가 xUnit 계열이에요.
✔ 개발자가 테스트 코드를 쉽게 작성하고 자동화할 수 있도록 도와줘요.
✔ 인터페이스 구현 도구가 아니라, 코드의 동작을 검증하는 테스트 도구예요.

즉, **"xUnit = 단위 테스트를 위한 표준 구조를 제공하는 프레임워크"**라고 보면 돼요!

xUnit에서 **"x"**는 **"어떤 프로그래밍 언어에서도 사용될 수 있음"**을 의미하는 일반화된 표기예요.

어원
xUnit의 원조는 JUnit (Java 기반 단위 테스트 프레임워크)
이후 C#, Python, C++ 등 다양한 언어로 확장되면서 NUnit(C#), PyTest(Python), CppUnit(C++) 등 여러 버전이 생김
이를 통칭해서 **"어떤 언어든 적용할 수 있는 Unit 테스트 프레임워크"**라는 의미로 xUnit이라고 부르게 됨
즉, "x"는 특정 언어를 의미하는 변수를 뜻하는 기호라고 보면 돼요! 
 
 
 
FitNesse는 어떤건지 쉽게 설명해줘 이것도 인터페이스 구현도구랑 관련있는건가? 한단락안에 다 간단하게 설명해줘 

FitNesse는 소프트웨어의 **수용 테스트(Acceptance Test)**를 쉽게 작성하고 실행할 수 있도록 도와주는 위키 기반 테스트 프레임워크예요. 개발자와 비개발자(예: 기획자, QA)가 협업하여 테스트 케이스를 문서처럼 작성하고 실행할 수 있어요. 주로 Java 기반이지만, 인터페이스 구현 도구라기보다는 테스트 자동화 도구에 가까워요. 개발된 시스템이 요구사항을 충족하는지 검증하는 용도로 많이 사용돼요.

개발자가 테스트코드 쉽게 쓸 수 있게 틀을 제공해주는 도구네?
ChatGPT의 말:
맞아요! FitNesse는 개발자가 테스트 코드를 쉽게 작성할 수 있도록 틀을 제공하는 도구예요. 위키(Wiki) 기반으로 테스트 케이스를 문서처럼 작성하면, 이를 자동으로 실행할 수 있도록 해줘요. 특히, 비개발자도 테스트 시나리오를 이해하고 수정할 수 있도록 설계된 점이 특징이에요. JUnit 같은 코드 기반 테스트보다는 요구사항 검증 및 협업 중심의 자동화 테스트 도구라고 보면 돼요.

FitNesse라는 이름은 **"FIT" + "Nes"**에서 유래했어요.

FIT (Framework for Integrated Test, 통합 테스트 프레임워크)

원래 FitNesse는 **FIT(Famework for Integrated Test)**라는 테스트 프레임워크를 기반으로 만들어졌어요.
FIT은 비개발자가도 이해할 수 있는 형식으로 테스트를 작성하고 실행할 수 있도록 설계된 도구예요.
Nes (Wiki 기반 확장성, Ease of Use)

FitNesse는 기존 FIT보다 더 사용하기 쉽고(wiki 기반), 확장성이 뛰어나도록 개선된 버전이에요.
"Fit + Ease"라는 의미도 내포하고 있다고 볼 수 있어요.
즉, "FIT(FIT 프레임워크) + Ness(Ease, 편리함)" → 더 쉽게 테스트할 수 있도록 만든 도구라는 의미에서 FitNesse라는 이름이 붙었어요!
 
프로토콜을 제공한다는 말이 무슨 말이야?
예를 들어 어떤 프로토콜?
외부에서 해당 기능을 이용하거나 애플리케이션을 구현할 수 있도록 함수, 프로토콜, 기능 등을 제공할 수 있는게 API라는데

“프로토콜을 제공한다”는 말은, 어떤 시스템이나 서비스가 정해진 방식으로 통신하거나 동작할 수 있도록 규칙(약속)을 정의해서 제공한다는 뜻이야.

프로토콜이란?

프로토콜은 데이터를 주고받는 형식과 절차를 정한 규칙이야.
네트워크 프로토콜: 인터넷에서 데이터를 주고받는 규칙 (예: HTTP, TCP/IP)
• 프로그래밍 언어에서의 프로토콜: 객체나 클래스가 따라야 할 메서드나 속성의 집합 (예: Swift의 Protocol, Java의 Interface)

예제 1: 네트워크 프로토콜 제공

HTTP 프로토콜을 제공하는 웹 서버
• 웹 서버는 HTTP라는 프로토콜을 제공해서, 클라이언트(브라우저)가 서버에 요청을 보낼 수 있음
• 예를 들어, GET /index.html HTTP/1.1 같은 요청을 하면 서버가 HTML을 응답

예제 2: 프로그래밍에서의 프로토콜 제공

Swift에서 프로토콜을 제공하는 경우
• 어떤 클래스나 구조체가 특정 기능을 구현할 수 있도록, 인터페이스(설계도)를 정의하는 것
• 예를 들어, Comparable 프로토콜을 제공하면, 크기 비교가 필요한 데이터 타입들이 이를 따르고 정렬 가능해짐

protocol Drivable {
    func drive()
}

class Car: Drivable {
    func drive() {
        print("Car is driving")
    }
}

Drivable 프로토콜을 제공하면, Car뿐만 아니라 다른 탈것들도 이 프로토콜을 따를 수 있어.

API와 프로토콜의 관계

API(Application Programming Interface)는 외부에서 특정 기능을 사용할 수 있도록 함수, 프로토콜, 데이터 형식 등을 제공하는 것이야.
• API가 단순히 함수만 제공하는 게 아니라, 어떤 방식으로 호출하고 데이터를 주고받아야 하는지 **규칙(프로토콜)**도 포함할 수 있음
• 예를 들어, OAuth 2.0은 “인증”을 위한 프로토콜이고, 카카오 로그인 API는 OAuth 2.0을 기반으로 동작함

즉,
✅ API는 기능을 제공하는 것
✅ 프로토콜은 그 기능을 어떻게 사용할지 정해진 규칙(약속)

이제 개념이 좀 정리됐어?


**주공정법:

**주공정법(CPM, Critical Path Method)**은 프로젝트에서 가장 오래 걸리는 작업 경로(주공정, Critical Path)를 찾아 일정을 관리하는 방법이야.
1. 모든 작업과 소요 시간을 정리하고, 어떤 작업이 어떤 순서로 진행되는지 분석해.
2. **가장 오래 걸리는 경로(주공정)**를 찾아 일정 계획을 세워.
3. 주공정에 포함된 작업이 지연되면 전체 프로젝트가 지연되므로 집중 관리해야 해.
4. 반대로 주공정에 없는 작업은 일정 조정이 가능해서 여유(버퍼)를 둘 수 있어.
5. 효율적인 일정 관리를 위해 공사, 소프트웨어 개발 등 여러 프로젝트에서 사용돼.

프로그래밍 일정관리법 중에 주공정연쇄법:

**주공정연쇄법(CCPM, Critical Chain Project Management)**은 프로젝트를 효율적으로 관리하기 위한 방법 중 하나야. 기존의 **주공정법(CPM, Critical Path Method)**에서 더 나아가 리소스(자원) 관리까지 고려하는 방식이라고 보면 돼.

쉽게 설명하면?
1. 기존 방식(CPM) 문제점
• 프로젝트 일정은 “가장 오래 걸리는 작업 경로”를 따라 진행됨.
• 하지만 실제로는 사람, 장비, 예산 같은 자원이 부족해서 일정이 지연되는 경우가 많음.
2. 주공정연쇄법(CCPM)의 해결 방법
• 작업을 배치할 때 리소스를 고려해서 작업을 연결함.
• 일정 지연을 방지하기 위해 **여유시간(Buffer)**을 전체 프로젝트 단위에서 따로 관리함.

예제
• 만약 프로젝트가 A → B → C 순서로 진행되고, A와 B는 같은 사람이 해야 한다고 하자.
• 기존 방식(CPM)은 A와 B를 동시에 시작하는 걸 가정하지만, 사실 한 사람이 동시에 할 수 없으니까 B가 지연될 수도 있어.
• CCPM은 A가 끝나야 B를 시작하도록 조정하고, 전체 프로젝트 일정에 버퍼를 추가해서 여유를 둠.

즉, 주공정연쇄법(CCPM)은 리소스 부족으로 인한 지연을 막고, 프로젝트 일정을 좀 더 현실적으로 관리하는 방법이라고 보면 돼!




Putnam 모델은 소프트웨어 비용 산정 기법 중 하나로, 소프트웨어 개발 노력(Man-Month), 일정(Duration), 인력(Staffing)을 예측하는 경험적 모델이다.



LOC : 기대치에 곱하기 4
예측치 = (낙관치 + 4* 4기대치 + 비관치) / 6

LOC(Line of Code) 기법에서 낙관치(O), 기대치(M), 비관치(P)를 사용하여 예상되는 코드 라인 수를 계산하는 방법은 PERT(Program Evaluation and Review Technique) 추정 기법을 기반으로 한다.

1. 공식

LOC 추정값(𝐸) = (낙관치 + 4 × 기대치 + 비관치) ÷ 6


E = \frac{O + 4M + P}{6}


추정의 표준편차(𝜎)도 계산할 수 있다.

\sigma = \frac{P - O}{6}


2. 예제

예를 들어, 한 모듈의 LOC를 다음과 같이 추정했다고 하자.
• 낙관치(O) = 300 LOC
• 기대치(M) = 500 LOC
• 비관치(P) = 900 LOC

1) 예상 LOC 계산


E = \frac{300 + (4 \times 500) + 900}{6} = \frac{300 + 2000 + 900}{6} = \frac{3200}{6} \approx 533.33


즉, 예상 LOC는 533라인이다.

2) 표준편차 계산


\sigma = \frac{900 - 300}{6} = \frac{600}{6} = 100


표준편차는 100이다.
이를 통해 LOC 예측값의 신뢰 범위를 계산할 수도 있다.
• 낮은 범위 (E - 𝜎) = 533 - 100 = 433
• 높은 범위 (E + 𝜎) = 533 + 100 = 633

즉, 예상 LOC는 433 ~ 633 라인 정도가 될 가능성이 크다.

3. 활용

이 계산법을 사용하면 LOC뿐만 아니라 프로젝트의 작업량, 일정, 비용 예측에도 활용할 수 있다.
특히 여러 기능별로 LOC를 계산한 후 합산하면, 전체 프로젝트의 코드량을 예측하는 데 도움이 된다.

필요하면 LOC 계산을 자동화하는 엑셀 수식이나 코드도 만들어줄 수 있어!



RubyNode는 보통 Ruby의 내부 AST(Abstract Syntax Tree) 노드를 다루는 개념으로, Ruby 코드의 구조를 분석하거나 Ruby 내부적으로 코드를 해석하는 과정에서 사용돼. 인터페이스(interface)와 관련된 개념이라기보다는, Ruby 코드의 파싱, 분석, 또는 실행 과정에서 활용되는 도구라고 볼 수 있어.

인덱스는 별도의 인덱스 데이터를 저장하기 위한 공간과 색인이 기록되는 영역, 오버플로 (페이지 분할)처리를 위한 공간이 필요하다. 

오버플로(Overflow)와 페이지 분할(Page Split) 관계
인덱스는 데이터를 정렬된 구조로 유지하기 위해 특정한 공간을 필요로 하는데, **오버플로(Overflow)**는 데이터가 예상보다 많아져 기존 구조를 유지할 수 없을 때 발생하는 현상을 의미합니다.

📌 오버플로가 페이지 분할과 관련 있는 이유

인덱스는 일반적으로 B-트리(Balanced Tree) 구조를 사용하며, 각 노드는 페이지(Page) 단위로 저장됩니다.
하나의 페이지가 가득 차면, 새로운 데이터를 삽입하기 위해 **기존 페이지를 두 개로 나누는 과정(= 페이지 분할, Page Split)**이 발생합니다.
이때 추가적인 저장 공간이 필요하며, 이를 오버플로 공간이라고도 부릅니다.
 
인터페이스 오류 처리 방법 순으로 나열한 것은?

로그파일 수집 -> 로그 파일 분석 -> 해결 방안 수집 -> 재처리 
 
SDN (Software-Defined Networking)란?
SDN: 가상화된 네트워크 자원을 개방형 네트워크 API (OPENFLOW 등)을 이용하여 통합 관리 및 제어한다.
NFV: 스위치, 라우터, 방화벽, 로드밸런서 등 네트워크의 주요 기능을 x86서버 기반으로 가상화하고 소프트웨어로 관리한다. 

운영관리
프로비저닝: 시스템 리소스에 대하여 할당 및 관리 기능을 제공한다.
Auto Scalling: 자원 사용률에 따라 동적으로 시스템 자원을 증설 및 회수하여 효율적인 IT 투자에 대한 기반을 제공한다. 

프로비저닝(Provisioning) 쉽게 설명하기
프로비저닝은 필요한 IT 자원을 미리 준비하고 할당하는 것이야.
쉽게 말해, **"필요한 만큼 시스템 자원을 배분해 주는 과정"**이라고 생각하면 돼!

예제 1: 클라우드 서버
예를 들어, 네이버나 구글 같은 클라우드 서비스를 사용한다고 해보자.

처음에 서버가 없으면, 새로운 서버를 만들어서(할당) 줘야 해.
사용자가 늘어나면 더 많은 서버를 추가(확장) 해야 하고,
사용자가 줄어들면 불필요한 서버를 정리(회수) 해야 해.
➡️ 이 모든 과정을 자동으로 해주는 것이 "프로비저닝"이야!
예제 2: 휴대폰 개통
새로운 유심을 끼웠는데, 바로 전화가 안 되잖아?
통신사가 네트워크를 연결하고 번호를 부여하는 과정이 필요해.
➡️ 이것도 통신 네트워크 프로비저닝이라고 할 수 있어!
쉽게 기억하는 방법
✅ "필요한 자원을 미리 준비하고, 적절한 곳에 배치하는 과정"
✅ "서버, 네트워크, 소프트웨어를 필요한 만큼 자동으로 할당해 주는 것"

즉, IT 자원을 자동으로 세팅하고 관리해 주는 시스템이라고 보면 돼! 
 
 
 
 
트랙잭션 결과 관련있는 모든 연산들은 완전히 실행되거나 전혀 실행되지않아야한다. 내용이 의미하는 트랙잭션의 요구사항이
ALL or Nothing이래 .

All or Nothing"이 원자성인 이유
"All" → 트랜잭션의 모든 작업이 완료되면 결과를 확정(Commit)해야 함.
"Nothing" → 트랜잭션 중 일부 작업이라도 실패하면 전체를 취소(Rollback) 해야 함.

👉 원자성이 보장되지 않는다면?

A 계좌에서 100달러가 차감되었는데 B 계좌에 입금이 안 되면? → 데이터 불일치 발생
반대로 B 계좌에 100달러가 입금되었는데 A 계좌에서 차감되지 않으면? → 데이터 불일치 발생
✅ 원자성(Atomicity)이 보장되면?

1과 2가 모두 성공하면 트랜잭션을 커밋(Commit)
하나라도 실패하면 전체를 롤백(Rollback) → "All or Nothing"
 
 
 
SONET (Syncronous Optical Network)에 대한 설명으로 틀린 것은?
1. 광전송망 노드와 망 간의 접속을 표준화한 것이다.
2. 다양한 전송기기를 상호 접속하기 위한 광신호와 인터페이스 표준을 제공한다.
3. STS-12의 기본 전송 속도는 622.08.Mbps이다.
4. 프레임 중계 서비스와 프레임 교환 서비스가 있다. 

4번이 틀렸다는데
트레임 중계서비스와 프레임 교환 서비스는 프레임 릴레이 프로토콜에서 처리된다는데
STS-12는 또 뭐야? 

, 4번이 틀린 이유는 **프레임 중계 서비스(Frame Relay Service)와 프레임 교환 서비스(Frame Switching Service)**가 SONET의 기능이 아니라 프레임 릴레이(Frame Relay) 프로토콜에서 처리되는 개념이기 때문입니다.

STS-12란?
STS-12(Synchronous Transport Signal level 12)는 SONET에서 사용되는 전송 계층 신호 등급 중 하나입니다.

**STS(Synchronous Transport Signal)**는 SONET 네트워크에서 사용하는 기본적인 신호 계층입니다.
STS-12의 전송 속도는 622.08 Mbps이며, 이는 STS-1(기본 단위)의 12배입니다.
 
 
TP Monitor은 트랜잭션 발생이 빈번한 곳에서 각트랜잭션이 올바르게 처리되고 있는지 감시하기 적합한 트랜잭션이다. TP가 어떤 말 줄임말이야?

TP : Transaction Processing Monitor
 
 
Db구조에서 Columns도 (attribute 이거 열 똑같은 말임, fields도 열이라는 뜻인라는데?)  
field를 한국말로 번역하면 데이터항목이라는 말이 맞다고함. 

 
각 합의 알고리즘 쉽게 설명
1️⃣ PBFT (Practical Byzantine Fault Tolerance)

  • 네트워크 참가자를 미리 알고 있어야 함.
  • 한 명이 리더가 되어 요청을 보내고, 참가자들이 투표하여 다수의 결과를 사용.
  • 빠르고 효율적이지만, 네트워크 규모가 크면 부담이 커짐.
  • (예: Hyperledger Fabric 같은 프라이빗 블록체인에서 사용됨.)

2️⃣ PoW (Proof of Work, 작업 증명)

  • 블록을 추가하려면 복잡한 수학 문제를 풀어야 함.
  • 가장 먼저 푼 사람이 블록을 추가하고 보상을 받음.
  • 안전하지만 전력 소비가 큼.
  • (예: 비트코인에서 사용됨.)

3️⃣ PoS (Proof of Stake, 지분 증명)

  • 블록 추가는 더 많은 코인을 가진 사람이 유리함.
  • 수학 문제를 푸는 대신, 코인을 많이 가진 사람이 검증을 수행.
  • PoW보다 에너지 효율적이지만, 부자가 유리할 수도 있음.
  • (예: 이더리움 2.0에서 사용됨.)

4️⃣ DPoS (Delegated Proof of Stake, 위임된 지분 증명)

  • 일반 참가자들이 대표 노드를 선출하고, 그들이 블록을 검증.
  • PoS보다 더 빠르고, 네트워크 참여자 수가 적어 효율적.
  • 하지만 중앙화될 위험이 있음.
  • (예: EOS, TRON에서 사용됨.)

📌 정리하면:

  • PBFT: 소규모 네트워크에 적합, 빠름, 리더가 있음.
  • PoW: 매우 안전하지만 전력 소모 많음.
  • PoS: 코인을 많이 가진 사람이 유리, PoW보다 효율적.
  • DPoS: 대표를 선출하여 빠르게 검증하지만 중앙화 위험 있음.

 
 
네트워크 모든 참가자를 미리 알고 있어야하고 참가자 중 1명이 리더가 되어 모든 참가자에게 요청을 ㅂ내고 다수의 결과값을 사용하는 합의 알고리즘이다.

Practical Byzantine Fault Tolerance 프랙티컬 비잔틴 퍼울트 톨러런스

다른 보기인 작업 증명 PoS (Proot of Work), 지분 증명 PoS (Proof of Shake), 위임된 지분 증명 (DPoS : Delegated Proof of Shake)

여기서 Shake가 무슨 뜻이야? 

각각 보기도 쉽게 설명해줘  

 
뷰위의 뷰 정의가능
스크립트언어의 특징이 아닌것은?

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

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




ROLLUP에서 “하나 더 큰 레벨의 중간 집계 값 생성” 뜻

✅ 올바른 설명:
• ROLLUP은 그룹별 중간 집계를 자동 생성하는 기능을 한다.
• 그룹화된 데이터에서 칼럼 수보다 하나 더 큰 레벨의 집계를 만든다.
• 즉, 특정 칼럼으로 GROUP BY를 하면 해당 칼럼의 조합별 집계 + 추가적인 상위 레벨 집계까지 만들어진다는 의미.

ROLLUP 예제

SELECT region, product, SUM(sales) AS total_sales
FROM sales_data
GROUP BY ROLLUP(region, product);

➡ GROUP BY region, product를 실행하면 일반적으로 아래와 같은 그룹이 만들어짐.

region product total_sales
Asia A 100
Asia B 200
Europe A 150
Europe B 250

하지만 ROLLUP을 사용하면 자동으로 중간 집계가 추가됨:

region product total_sales
Asia A 100
Asia B 200
Asia NULL 300  (Asia 전체 합)
Europe A 150
Europe B 250
Europe NULL 400  (Europe 전체 합)
NULL NULL 700 (전체 합)

✅ “하나 더 큰 레벨” 의미
• GROUP BY (region, product) → 원래 그룹
• ROLLUP(region, product) →
• 1단계 추가: region 전체 합계
• 1단계 더 추가: 전체 합계

결론:
✔ ROLLUP은 단순한 GROUP BY보다 하나 더 큰 레벨(중간 집계, 전체 집계)을 자동 생성하는 기능이 있음.


FIRST_VALUE 설명이 틀린 이유

틀린 설명:

“FIRST_VALUE: 파티션 윈도우에서 가장 먼저 나오는 값에 대한 그룹 함수값을 출력한다.”

✅ 올바른 설명:
FIRST_VALUE()는 윈도우 함수(OLAP 함수)이며, **그룹 함수(Aggregate Function)**가 아니다.
• 그룹 함수(Aggregate Function): SUM(), AVG(), MAX(), MIN() 등 그룹 단위로 값을 집계하는 함수.
• 윈도우 함수(Window Function): 개별 행에 대해 특정 범위(윈도우) 내에서 계산하는 함수.

FIRST_VALUE() 특징
• 윈도우(파티션) 내에서 가장 첫 번째 값을 반환하는 함수이다.
• 그룹 전체의 값을 집계하는 것이 아니라, 각 행마다 계산된 윈도우에서 첫 번째 값을 반환한다.




다음 중 그룹 함수의 유형이 아닌 것은?
1. ROLLUP
2. HAVING
3. CUBE
4. GROUPING SETS

Cube. Grouping sets 설명해줘

그룹 함수의 유형이 아닌 것은?

정답: 2. HAVING

이유:
• HAVING은 그룹화된 결과에 대한 조건을 필터링하는 절이지, 그룹 함수를 수행하는 기능이 아니야.
• 반면, ROLLUP, CUBE, GROUPING SETS는 그룹 함수의 일부로 사용되며, 다차원 집계를 수행하는 기능을 한다.

CUBE와 GROUPING SETS 설명

1. CUBE
• CUBE는 모든 가능한 조합의 그룹을 생성하는 기능이야.
• 다차원 분석을 위해 사용되며, 여러 개의 속성 조합을 기반으로 집계를 계산해.
• ROLLUP보다 더 많은 조합을 생성함.
• 예를 들어, GROUP BY CUBE(A, B)를 실행하면 다음과 같은 그룹별 집계를 수행해:
1. (A, B) 별 집계
2. (A) 별 집계
3. (B) 별 집계
4. 전체 집계

예제

SELECT region, product, SUM(sales)
FROM sales_data
GROUP BY CUBE(region, product);

➡ region, product의 모든 조합에 대해 합계(SUM)를 계산함.

2. GROUPING SETS
• GROUPING SETS는 사용자가 지정한 여러 개의 그룹 조합만을 선택적으로 계산하는 기능이야.
• CUBE나 ROLLUP보다 더 유연하며, 필요하지 않은 조합을 제거할 수 있어.
• GROUPING SETS를 사용하면 여러 개의 GROUP BY를 하나의 쿼리로 처리할 수 있음.

예제

SELECT region, product, SUM(sales)
FROM sales_data
GROUP BY GROUPING SETS ((region, product), (region), (product));

➡ 이 경우,
1. (region, product) 별 집계
2. (region) 별 집계
3. (product) 별 집계
이렇게 3개의 그룹 조합만 집계됨.

즉, GROUPING SETS는 원하는 조합만 골라서 집계할 수 있어 효율적이야.

CUBE vs GROUPING SETS 차이점

기능 CUBE GROUPING SETS
모든 조합 자동 생성 여부 O X (사용자가 직접 지정)
필요 없는 조합 제거 가능? X O
다차원 분석 목적 O O (더 유연함)

👉 CUBE는 모든 조합을 자동 생성하고, GROUPING SETS는 사용자가 직접 필요한 조합만 선택할 수 있어!





정량자

관계대수에서  A^R 처럼  A 를 거꾸로 쓰는 표기(예:  \pi_A  또는  \sigma_A 에서  A 를 뒤집는 경우)를 볼 수 있는데, 이때 연산자(operator)와 정량자(quantifier)의 차이를 이해하는 것이 중요해.

1. 연산자 (Operator)
• 연산자는 입력 값을 받아서 새로운 결과를 만들어내는 함수 같은 개념이야.
• 관계대수에서 연산자의 예시는 다음과 같아:
• 선택 (Selection, \sigma): 특정 조건을 만족하는 튜플을 선택.
• 투영 (Projection, \pi): 특정 속성만 선택하여 새로운 릴레이션을 생성.
• 조인 (Join, \(\bowtie\)): 두 개의 릴레이션을 합치는 연산.

2. 정량자 (Quantifier)
• 정량자는 논리에서 사용되는 개념으로, “어떤 속성이 얼마나 많은 개체에 적용되는가”를 나타내는 표현이야.
• 대표적인 정량자는:
• 존재 정량자 (\exists): “적어도 하나의 튜플이 조건을 만족한다.”
• 보편 정량자 (\forall): “모든 튜플이 조건을 만족한다.”

3. 거꾸로 든 A가 정량자인 이유

관계대수에서  A^R 처럼 쓰는 경우는 대체로 “어떤 속성 A에 대해 특정 조건을 만족하는지 여부를 표현할 때” 사용돼.
예를 들어,

\forall A (P(A))

라는 표현은 **“모든 A에 대해 P(A)가 성립한다”**는 의미야.
이런 경우  A 가 논리적인 범주에서 정량자(quantifier) 역할을 한다고 볼 수 있어.

즉, 관계대수에서  A 를 거꾸로 표기하는 것이 단순한 연산자 적용이 아니라 **“모든 A에 대해 적용되는지, 일부 A에 대해 적용되는지”**를 결정하는 논리적인 정량자로 작동하기 때문에 그런 구분이 생긴 거야.

X 카티션 곱

아래는 관계대수의 여러 연산을 구체적인 테이블 예시와 함께 설명한 것입니다.

1. 선택 (Selection, σ)

목적:
특정 조건을 만족하는 튜플(행)만 선택합니다.

예시 테이블:
학생 정보를 담은 Students 테이블

StudentID Name Age Major
1 Alice 20 CS
2 Bob 22 Math
3 Carol 19 Physics
4 Dave 21 CS

연산:
σ_{Major = 'CS'}(Students)

결과 테이블:
Major(전공)이 “CS”인 학생만 선택

StudentID Name Age Major
1 Alice 20 CS
4 Dave 21 CS

2. 투영 (Projection, π)

목적:
특정 속성(열)만 선택하여 새로운 릴레이션을 만듭니다.

예시 테이블:
동일한 Students 테이블

StudentID Name Age Major
1 Alice 20 CS
2 Bob 22 Math
3 Carol 19 Physics
4 Dave 21 CS

연산:
π_{Name, Age}(Students)

결과 테이블:
이름과 나이만 추출

Name Age
Alice 20
Bob 22
Carol 19
Dave 21

3. 합집합 (Union, ∪)

목적:
두 릴레이션의 모든 튜플을 결합합니다. (두 릴레이션은 같은 속성 구조여야 합니다.)

예시 테이블:
두 개의 학생 테이블 (Students_A와 Students_B)

Students_A

StudentID Name Age
1 Alice 20
2 Bob 22

Students_B

StudentID Name Age
3 Carol 19
2 Bob 22

연산:
Students_A ∪ Students_B

결과 테이블:
두 테이블의 모든 튜플(중복 제거)

StudentID Name Age
1 Alice 20
2 Bob 22
3 Carol 19

4. 차집합 (Set Difference, −)

목적:
첫 번째 릴레이션에는 존재하지만 두 번째 릴레이션에는 존재하지 않는 튜플을 선택합니다.

예시 테이블:
앞서 사용한 Students_A와 Students_B

연산:
Students_A − Students_B

결과 테이블:
Students_A에만 있는 튜플

StudentID Name Age
1 Alice 20

(Bob은 두 테이블 모두에 존재하므로 결과에 포함되지 않습니다.)

5. 데카르트 곱 (Cartesian Product, ×)

목적:
두 릴레이션의 모든 튜플 쌍을 결합하여 새로운 릴레이션을 만듭니다.

예시 테이블:

Students

StudentID Name
1 Alice
2 Bob

Courses

CourseID Title
C1 Database
C2 Algebra

연산:
Students × Courses

결과 테이블:
모든 학생과 모든 과목의 조합

StudentID Name CourseID Title
1 Alice C1 Database
1 Alice C2 Algebra
2 Bob C1 Database
2 Bob C2 Algebra

6. 조인 (Join)

목적:
두 릴레이션의 공통 속성을 기준으로 관련 튜플들을 결합합니다.

예시 테이블:

Students

StudentID Name
1 Alice
2 Bob
3 Carol

Courses

CourseID Title
C1 Database
C2 Algebra

Enrollment (학생의 수강 정보를 담은 테이블)

StudentID CourseID
1 C1
1 C2
2 C1

자연 조인 과정을 단계별로 보겠습니다.
1. Students와 Enrollment의 자연 조인
기준: StudentID
연산:
Students ⋈ Enrollment
중간 결과 테이블:

StudentID Name CourseID
1 Alice C1
1 Alice C2
2 Bob C1


2. 위 결과와 Courses 테이블의 자연 조인
기준: CourseID
연산:
(Students ⋈ Enrollment) ⋈ Courses
최종 결과 테이블:

StudentID Name CourseID Title
1 Alice C1 Database
1 Alice C2 Algebra
2 Bob C1 Database

7. 이름 바꾸기 (Renaming, ρ)

목적:
릴레이션 또는 그 속성의 이름을 바꿉니다. 이는 복잡한 연산에서 테이블 이름이 겹치거나 명확성을 위해 자주 사용됩니다.

예시:
Students 테이블의 이름을 S로 바꾸고 싶을 때,

연산:
ρ_S(Students)

결과:
이제부터 Students 대신 S라는 이름으로 테이블을 참조할 수 있습니다.
예를 들어,
π_{Name}(ρ_S(Students))
는 S 테이블에서 Name 속성만 추출하는 연산이 됩니다.

이와 같이, 관계대수의 각 연산은 테이블(릴레이션)에서 원하는 데이터를 선택, 변환, 결합하는 데 유용하게 사용됩니다. 각 연산을 적절히 조합하면 복잡한 질의도 효과적으로 표현할 수 있습니다.

두릴레이션에서 division이 어떤 뜻이야? 관계대수에서?

관계대수(Relational Algebra)에서 Division(나눗셈, ÷) 연산은 특정 조건을 만족하는 튜플을 찾는 연산입니다.

1. Division 연산의 의미
• 입력: 두 개의 릴레이션  R(A, B) 와  S(B)
• 출력:  S 에 있는 모든  B  값을 가진  A  값들의 집합

즉,  R 에 있는 모든  (A, B)  조합에서  S(B) 에 있는 모든 값과 매칭되는  A  값만 선택합니다.

2. 예제

입력 릴레이션
• R(A, B) : 학생이 수강한 과목

A (학생) B (과목)
철수 수학
철수 영어
영희 수학
영희 영어
영희 과학
민수 영어


• S(B) : 필수 과목

B (과목)
수학
영어



결과 릴레이션
• R ÷ S 를 수행하면 S(B)에 있는 모든 과목을 수강한 학생들만 반환

A (학생)
철수
영희



설명
• 철수: 수학, 영어 → 모든 필수 과목 수강 → 포함 ✅
• 영희: 수학, 영어, 과학 → 모든 필수 과목 수강 → 포함 ✅
• 민수: 영어만 → 수학 없음 → 제외 ❌

3. 수식 표현

R(A, B) ÷ S(B) 는 다음과 같이 표현할 수 있습니다.

R ÷ S = \{ a \mid \forall b \in S(B), (a, b) \in R \}

즉,  S 에 있는 모든  B  값을 가지는  A  값만 포함합니다.

4. Division 연산의 특징
• “모든”을 만족하는 연산 → 부분 집합 관계를 확인하는 데 유용
• JOIN, PROJECTION, DIFFERENCE를 조합하여 구현 가능
• 응용 예시:
• 학생이 필수 과목을 모두 수강했는지 확인
• 공급자가 모든 부품을 제공하는지 확인
• 직원이 모든 필요한 기술을 가지고 있는지 확인

5. Division 연산의 SQL 구현

SQL에는 직접적인 DIVISION 연산자가 없지만, GROUP BY와 HAVING을 활용하여 구현할 수 있습니다.

SELECT R.A
FROM R
WHERE R.B IN (SELECT B FROM S)
GROUP BY R.A
HAVING COUNT(DISTINCT R.B) = (SELECT COUNT(*) FROM S);

이 쿼리는 R에서 S의 모든 B 값을 포함하는 A 값을 찾아줍니다.





관계 대수(Relational Algebra) 연산에서 사용하는 기호(연산자)와 의미를 정리해 줄게!

📌 관계 대수 연산 기호 정리

1️⃣ 순수 관계 연산 (Pure Relational Operations)

관계형 데이터베이스에서 기본적으로 사용하는 연산

연산 기호 설명 SQL 대응
선택 (Selection) σ (시그마) 조건을 만족하는 튜플(행)만 선택 WHERE

투영 (Projection) π (파이) 특정 속성(열)만 선택 SELECT (열 선택)

조인 (Join) ⨝ (⋈, Join) 두 릴레이션을 공통 속성 기준으로 결합 JOIN

디비전 (Division) ÷ 특정 릴레이션에서 나누어 떨어지는 튜플만 선택 없음 (보통 NOT EXISTS로 구현)


“사용자 데이터(User Data)“가 데이터 품질관리 프레임워크에서 데이터값에 해당하지 않는다는 해석은 특정 맥락에서 가능할 수 있어.

📌 데이터 품질관리 프레임워크에서 “데이터값”이란?

데이터 품질을 평가할 때, **데이터값(Data Value)**은 데이터 항목이 실제로 가지는 값을 의미해.
예를 들어, 고객 정보 데이터에서:
• 이름: 홍길동 → 데이터값 (O)
• 이메일: hong@example.com → 데이터값 (O)

📌 각 개념과 데이터값 여부

개념 데이터값에 해당하는가? 설명
사용자 데이터 (User Data) ❌ (답) 사용자가 입력하는 데이터 전체를 뜻하며, 데이터값이 아니라 데이터의 한 범주로 봄
표준 데이터 (Standard Data) ✅ 특정 기준에 따라 정리된 값이므로 데이터값으로 인정
관리 데이터 (Master Data) ✅ 시스템에서 참조하는 핵심 데이터로 데이터값이 될 수 있음
모델 데이터 (Model Data) ✅ (맥락에 따라 다름) 데이터의 구조나 관계를 정의하지만, 특정 경우에는 데이터값으로 쓰일 수도 있음

📌 왜 “사용자 데이터”가 데이터값이 아닐까?
• “사용자 데이터”는 개별적인 데이터값이 아니라 전체적인 데이터 카테고리를 의미하기 때문이야.
• 즉, “사용자 데이터”는 고객 정보, 트랜잭션 정보 등을 포함하는 데이터 집합이므로, 개별적인 데이터값이 아니다라고 볼 수 있어.

👉 정리하면!

“데이터값”이 아니라 데이터의 한 범주를 묻는 문제라면, “사용자 데이터”가 정답!

외웠다.
단위 -> 통합 -> 시스템 -> 인수

기능명세분석이 시스템테스트라는데 나는 단위테스트라고 생각했는데 헷갈리는데 안 헷갈리는 방법과 각 테스트 간단하게 설명해줄래?

기능 명세 분석이 시스템 테스트라고 하는 이유는, 기능 명세는 보통 시스템 전체가 요구사항을 충족하는지 검증하는 과정이기 때문이야. 반면 **단위 테스트(Unit Test)**는 개별 모듈이나 함수가 정상적으로 동작하는지를 확인하는 단계고.

테스트 개념 간단 정리

✅ 단위 테스트 (Unit Test)
• 개별 함수, 모듈, 클래스가 올바르게 동작하는지 확인
• 개발자가 직접 작성하며, 보통 Junit, pytest 같은 테스트 프레임워크 사용
• 예) AuthService.login() 메서드가 올바르게 동작하는지 테스트

✅ 통합 테스트 (Integration Test)
• 서로 다른 모듈이나 서비스가 제대로 연동되는지 확인
데이터베이스, API 호출 같은 실제 환경과의 상호작용 테스트
• 예) AuthService.login()이 UserRepository와 정상적으로 작동하는지 테스트

✅ 시스템 테스트 (System Test)
• 전체 애플리케이션이 요구사항을 만족하는지 확인
• 실제 사용 시나리오와 유사한 환경에서 실행됨
• 예) 사용자가 로그인 → 대시보드 진입 → 로그아웃까지 정상 동작하는지 테스트

✅ 인수 테스트 (Acceptance Test)
• 최종 사용자가 요구한 대로 동작하는지 확인하는 최종 테스트
• 주로 QA 팀 또는 실제 사용자가 진행
• 예) 고객이 로그인하고 주문할 때 정상적으로 처리되는지 검증

헷갈리지 않는 방법

1. 테스트 대상이 작은지, 큰지 구분해라!
• 작은 단위(메서드, 클래스)만 테스트 → 단위 테스트
• 여러 모듈이 잘 연결되는지 테스트 → 통합 테스트
• 전체 시스템이 정상 작동하는지 테스트 → 시스템 테스트
• 최종 사용자가 만족할지를 테스트 → 인수 테스트

2. 테스트 주체를 생각해라!
• 개발자가 직접 코드 레벨에서 테스트 → 단위/통합 테스트
• QA 또는 사용자가 요구사항을 기준으로 테스트 → 시스템/인수 테스트

이렇게 보면 기능 명세를 분석하는 건 개별 함수보다는 시스템 전체가 요구사항을 충족하는지 확인하는 과정이기 때문에 시스템 테스트라고 보는 게 맞아!

연산자를 찾는 순서는 고정된 것이 아니라, 후위표기법에서 연산자가 등장하는 순서대로 처리하는 거야!

1. 후위표기법에서는 연산자가 “등장하는 순서”대로 계산

후위표기법(Reverse Polish Notation, RPN)은 왼쪽에서 오른쪽으로 읽으며, 연산자가 나오면 직전의 두 개 피연산자를 사용해서 연산을 수행해.

2. 예제 분석 (후위표기법 → 전위표기법 변환 과정)

후위표기법: ABC+*D/E-

(1) 왼쪽에서 오른쪽으로 읽으면서 연산자를 찾는다

A B C + * D / E -

• + 연산자가 먼저 나오니까 B + C 먼저 변환
• 그다음 * 연산자가 나오니까 A * (B + C) 변환
• / 연산자가 나오면 (A * (B + C)) / D 변환
• 마지막으로 - 연산자를 적용

(2) 변환 과정 정리

읽은 문자 변환 내용
A B C (아직 연산자 없음)
A B C + + B C (B와 C를 더함)
A * + B C * A + B C (A와 (B + C)를 곱함)
A * + B C D / / * A + B C D ((A * (B + C)) ÷ D)
A * + B C D / E - - / * A + B C D E (((A * (B + C)) ÷ D) - E)

(3) 최종 전위표기법 결과

- / * A + B C D E

3. 결론: 연산자 등장 순서대로 처리
• 후위표기법에서는 연산자가 나오는 즉시, 앞의 두 피연산자를 사용해서 변환!
• 따라서, 연산자 찾는 순서는 후위표기법에 나오는 순서에 따라 달라짐.
• +가 먼저 나온다면 먼저 변환하고, *가 먼저 나오면 먼저 변환하는 방식이야.

이제 이해됐어? 추가 질문 있으면 말해줘!

트리(또는 일반적인 그래프)에서 **vertex(정점)**는 각 노드를 의미하며, 보통 동그라미로 표시됩니다.

또한 **차수(degree)**는 각 정점에 연결된 간선(edge)의 개수를 뜻합니다. 예를 들어, 어떤 정점에 세 개의 간선이 연결되어 있다면 그 정점의 차수는 3이라고 합니다.

Db 설계 단계 중 저장 레코드 양식 설계, 레코드 집중의 분석 및 설계, 접근 경로 설계와 관계되는 것은?

보기 논리적 설계, 요구 조건 분석, 물리적 설계, 개념적 설계

난 요구 분석 설계했는데 답이 왜 물리적 설계야 보기별로 아주 간단히 설명해줘

정답: 물리적 설계

데이터베이스(DB) 설계는 여러 단계로 나뉘며, 각 단계마다 초점이 다른 부분에 있습니다. 각 보기 항목이 무엇을 의미하는지 아주 간단히 설명하면 다음과 같습니다.
1. 요구 조건 분석
• 설명: 사용자나 시스템의 요구사항, 기대하는 기능 등을 파악하는 단계입니다.
• 해당 영역: DB의 전체적인 필요성과 기능을 정의하지만, 구체적인 저장 방식이나 접근 경로 설계는 포함하지 않습니다.

2. 개념적 설계
• 설명: 현실 세계의 데이터를 개념적으로 모델링하여, 엔터티, 속성, 관계 등을 정의하는 단계입니다.
• 해당 영역: 데이터의 구조와 관계를 전체적으로 설계하지만, 실제 저장 형식과 세부적인 접근 경로 등은 다루지 않습니다.

3. 논리적 설계
• 설명: 개념적 모델을 기반으로 데이터베이스의 스키마(테이블, 뷰, 키 등)를 설계하는 단계입니다.
• 해당 영역: 데이터 모델의 논리적 구조를 다루며, 정규화 등을 통해 데이터 중복을 최소화하지만, 물리적인 저장 구조나 성능 최적화는 포함하지 않습니다.

4. 물리적 설계
• 설명: 실제 데이터를 저장할 때의 구조를 설계하는 단계입니다.
• 해당 영역:
• 저장 레코드 양식 설계: 데이터를 실제 저장할 때 레코드의 형태를 결정합니다.
• 레코드 집중(클러스터링) 분석 및 설계: 관련 데이터들을 물리적으로 가까운 위치에 배치하여 검색 성능을 향상시킵니다.
• 접근 경로 설계: 인덱스, 파티셔닝 등 데이터를 빠르게 검색할 수 있는 방법을 구체적으로 설계합니다.

왜 답은 물리적 설계인가?

문제에서 언급한 저장 레코드 양식 설계, 레코드 집중의 분석 및 설계, 접근 경로 설계는 모두 데이터가 실제 저장되는 물리적 구조와 관련된 작업입니다.
• 요구 조건 분석은 DB가 가져야 할 기능이나 요구사항을 파악하는 단계이지, 데이터의 물리적 저장 방법이나 성능 최적화를 다루지 않습니다.
• 따라서, 이와 같은 세부 설계 작업은 물리적 설계 단계에서 수행됩니다.

결론적으로, 정답은 물리적 설계입니다.




다음에서 설명하고 있는 클라우드 컴퓨
팅 유형은 무엇인가?
프로그램이나 애플리케이션을 개발하는 데 필 요한 도구나 프레임워크 등을 제공하여 개발 에 필요한 환경을 서비스로 제공하는 플랫폼
1. SaaS (Software as a Service)
2. PaaS(Platform as a Service)
3 IaaS (Infrastructure as a Service)
4 DaaS(Desktop as a Service)
해설
Paas에 대한 설명이다. PaaS는 개발에 필요한 가 발 환경을 제공하는 클라우드 플랫폼이며, 국내 기 업의 기술 경쟁력 강화와 클라우드 공공부문 선도 를 위하여 파스타(PaaS-TA)를 구축하였다.

나는 정답이 IaaS인줄 알았는데 왜 정답이 안되는지 설명해줘

정답이 IaaS가 아닌 이유는 다음과 같이 설명할 수 있어:
1. IaaS (Infrastructure as a Service)
• 제공 내용: 가상 머신, 스토리지, 네트워크 등 기본 인프라를 서비스로 제공함.
• 개발 환경: 사용자가 운영체제(OS)나 미들웨어, 개발 도구 등을 직접 설치하고 구성해야 함.
• 요약: 하드웨어 리소스 중심의 서비스.
2. PaaS (Platform as a Service)
• 제공 내용: 애플리케이션 개발에 필요한 도구, 프레임워크, 미들웨어 등 통합된 개발 및 배포 환경을 서비스로 제공함.
• 개발 환경: 개발자가 바로 애플리케이션 코딩과 배포에 집중할 수 있도록 개발 플랫폼을 제공함.
• 요약: 소프트웨어 개발 환경 중심의 서비스.

문제에서 설명하는 내용:

“프로그램이나 애플리케이션을 개발하는 데 필요한 도구나 프레임워크 등을 제공하여 개발에 필요한 환경을 서비스로 제공하는 플랫폼”

이 설명은 개발 환경과 관련된 것이므로 PaaS에 해당된다.
반면, IaaS는 단순히 인프라 자원만 제공하기 때문에, 개발에 필요한 도구나 프레임워크 등은 포함되지 않는다.

따라서 정답은 PaaS이며, IaaS는 정답이 될 수 없다.


고가용성(HA)에 대한 설명이다.
다음에서 설명하는 고가용성 유형은?
1개의 가동 중인 Active 시스템과 1개의 백업 시스템인 Standby 시스템으로 구성되어 가동 중인 시스템이 중단되면 백업 시스템을 가동 시키며 가용성을 유지한다.
• Hot Standby
2 Mutual Take-Over
3 Concurrent Access
• Fault Tolerance
해설
Hot Standby는 Active Standby 구조로, Acive 상 태의 시스템이 중단되면 Standby 상태의 시스템을 Active 상태로 가동하여 고가용성을 유지한다.


수많은 스마트 기기 또는 지능형 기기에서 발생하는 모든 데이터를 클라우드로 보내서 처리하는 것보다는 데이터가 생성되는 가까운 위치에서 데이터를 처리하기 위한 기술
보기는 SDN, 오픈플로, 네트워크 기능 가상화, 에지컴퓨팅 보기를 아주 쉽고 간단하게 설명해줘 답은 에지컴퓨팅이래

**코어네트워크가 아닌 에지에서 (Edge)


보기 개념 간단 정리
1. SDN (소프트웨어 정의 네트워크)
네트워크를 중앙에서 소프트웨어로 제어하는 기술 (네트워크 관리 자동화)
2. 오픈플로 (OpenFlow)
SDN을 구현하는 핵심 기술, 네트워크 장비를 중앙에서 제어할 수 있도록 함.
3. 네트워크 기능 가상화 (NFV, Network Function Virtualization)
하드웨어 장비 없이, 소프트웨어로 네트워크 기능(방화벽, 라우터 등)을 구현하는 기술
4. 에지 컴퓨팅 (Edge Computing) ✅ 정답
→ 데이터를 클라우드까지 보내지 않고, 가까운 곳(기기 근처)에서 처리하는 기술

왜 정답이 에지 컴퓨팅인가?
• 문제에서 말한 핵심 키워드는 “데이터가 생성되는 가까운 위치에서 처리”
• 클라우드 대신 데이터가 발생하는 근처에서 바로 처리하는 개념이 “에지 컴퓨팅”
• 예시: 스마트 공장, 자율주행차, IoT 기기에서 데이터를 실시간 처리할 때 사용됨.

Virtual Private Network는 정답이 왜 안되는거야?

기존 무선 랜의 한계 극복을 위해 등장하였으며 대규모 디바이스의 네트워크 생성에 최적화되어 차세대 이동통신, 홈네트워킹, 공공안전 등의
특수목적을 위한 새로운 방식의 네트워크 기술을
의미하는 것은?

문제 분석

기존 무선 LAN의 한계를 극복하고, 대규모 디바이스 네트워크 생성에 최적화된 새로운 네트워크 기술
차세대 이동통신, 홈네트워킹, 공공안전 등의 특수 목적을 위한 기술

이 문제에서 핵심 키워드는 “기존 무선 LAN의 한계 극복”, “대규모 디바이스 네트워크”, **“특수 목적 네트워크”**야.

보기 분석
1. Software Defined Perimeter (SDP)
• 보안 강화를 위한 네트워크 접근 제어 기술.
• 사용자의 인증이 완료되기 전까지 네트워크의 존재 자체를 숨김.
• 기존 무선 LAN 한계를 극복하는 기술이라 보기 어려움.
• ❌ 오답.
2. Virtual Private Network (VPN)
인터넷을 통해 암호화된 가상 사설 네트워크를 구축하는 기술.
주로 보안 목적으로 사용됨.
• 기존 무선 LAN의 한계를 극복하는 기술은 아님.
• 대규모 디바이스 연결과 직접적인 관련이 없음.
• ❌ 오답.
3. Local Area Network (LAN)
• 소규모 네트워크 기술로, 물리적 범위가 제한적임.
• 대규모 네트워크를 구성하는 기술이 아니므로 ❌ 오답.
4. Mesh Network
다중 노드 간 직접 연결을 통해 대규모 네트워크를 구축하는 기술.
• 기존 무선 LAN의 단점을 보완하고, 대규모 디바이스 연결에 최적화됨.
• 차세대 이동통신, 홈네트워킹, 공공안전 네트워크에 사용됨.
• ✅ 정답!

결론: 정답은 Mesh Network

VPN은 보안을 강화하는 기술이지, 무선 LAN의 한계를 극복하거나 대규모 네트워크 형성을 위한 기술이 아니기 때문에 정답이 될 수 없어. Mesh Network는 대규모 디바이스 연결과 관련이 있기 때문에 정답이야!

보디 Software Defined Perimeter, Virtual Private Network, Local Area Network, Mesh Network.




보기에서 공간적 지역성이 아닌 것은?
보기가 Fetch 알고리즘 구현에 사용, Trashing 해결, 페이지교체 알고리즘, 페이지 재배치 알고리즘 구현에 이용되는 알고리즘

“페이지 재배치 알고리즘 구현”이 공간적 지역성과 관련이 없는 것이라고 판단하는 이유는 다음과 같아.

1. 공간적 지역성 (Spatial Locality)
• 공간적 지역성은 한 번 접근한 데이터 근처의 데이터를 곧바로 접근할 가능성이 높은 성질을 의미함.
• 즉, 메모리 주소의 공간적 분포와 관련된 개념임.
• 대표적인 예:
• 배열 순차 접근
• 함수 내부 명령어 실행
• 캐시 메모리 활용

2. 보기 항목 분석

보기 항목 공간적 지역성과의 관계
Fetch 알고리즘 구현에 사용 O (데이터를 일정한 패턴으로 가져오면서 공간적 지역성을 활용할 수 있음)
Trashing 해결 O (메모리 지역성을 향상시켜 페이지 폴트 감소)
페이지 교체 알고리즘 O (공간적 지역성을 고려하여 최근 사용된 페이지 유지)
페이지 재배치 알고리즘 구현 X (메모리 배치를 최적화하는 작업이지만, 공간적 지역성을 직접적으로 활용하는 개념은 아님)

3. 왜 “페이지 재배치”가 공간적 지역성과 관련이 없는가?
• 페이지 재배치 (Page Relocation) 알고리즘은 프로세스의 메모리 주소 배치를 최적화하는 역할을 함.
• 하지만 프로그램이 실행될 때 실제로 참조하는 데이터의 공간적 분포와는 직접적인 관련이 없음.
• 반면, 페이지 교체 알고리즘이나 Trashing 해결 방식은 지역성을 높이는 데 직접적으로 기여함.

결론

“페이지 재배치 알고리즘 구현”이 공간적 지역성과 관련이 없는 항목이며, 정답이 맞음!


Thrashing 해결방법이 working set라는데 설명해줘

Thrashing과 Working Set을 활용한 해결 방법

1. Thrashing이란?

Thrashing은 운영체제의 메모리 페이징(paging) 관리 문제로 인해 발생하는 현상으로, 프로세스가 실행보다는 페이지 교체(page swapping)에 더 많은 시간을 소비하는 상태를 의미한다.

즉, 프로세스가 필요한 페이지가 자주 메모리에서 누락(missing)되어 계속해서 디스크에서 불러오게 되면 페이지 부재(Page Fault) 가 빈번하게 발생하고, CPU가 이를 처리하느라 과부하가 걸려 전체적인 성능이 급격히 저하된다.

2. Thrashing의 원인
• 메모리가 부족하여 프로세스가 필요한 페이지를 충분히 유지하지 못할 때
• 너무 많은 프로세스를 동시에 실행하려 할 때
• 페이지 교체 알고리즘이 비효율적으로 동작할 때
• 워킹 셋(Working Set) 크기가 제대로 설정되지 않았을 때

3. Working Set을 활용한 Thrashing 해결 방법

Working Set은 프로세스가 일정 시간 동안 자주 참조하는 페이지의 집합을 의미한다.

⇒ 해결 방법:
1. 각 프로세스의 Working Set을 계산하여 메모리에 유지
• 특정 시간 동안 프로세스가 필요로 하는 페이지 수(Δ)를 측정하여, 이를 충분히 메모리에 유지하도록 한다.
• 운영체제는 프로세스별 Working Set 크기를 모니터링하면서, 필요하면 페이지 프레임을 늘려주거나 줄인다.
2. Working Set이 메모리에 유지되지 않으면 프로세스 수를 조절
• 시스템 전체의 메모리가 부족하여 모든 프로세스의 Working Set을 유지할 수 없다면, 일부 프로세스를 스왑 아웃(swap out)하여 실행 중인 프로세스의 수를 줄인다.
• 이를 통해 남은 프로세스들이 자신의 Working Set을 충분히 메모리에 유지할 수 있도록 한다.
3. Page Fault Rate 기반의 조정
• Page Fault 발생 빈도를 모니터링하여, 일정 임계치를 넘으면 Working Set 크기를 늘려주는 방식으로 최적화한다.

4. 정리

✔ Thrashing 문제는 페이지 부재(Page Fault)가 너무 자주 발생하여 CPU가 페이지 교체에만 집중하는 현상
✔ Working Set은 프로세스가 일정 시간 동안 자주 참조하는 페이지의 집합
✔ 해결 방법은 프로세스별 Working Set을 메모리에 유지하고, 메모리가 부족하면 실행 중인 프로세스 수를 조정하는 것

즉, Thrashing을 방지하려면 각 프로세스의 Working Set이 충분히 유지되도록 보장하는 것이 중요하다.

Thrashing 문제를 해결하기 위한 방법은 Working Set 외에도 여러 가지가 있습니다. 대표적인 방법들은 다음과 같습니다.

1. 페이지 폴트 빈도(Page Fault Frequency, PFF) 제어
• 원리: 각 프로세스의 페이지 폴트 발생률을 지속적으로 모니터링하여, 페이지 폴트가 너무 자주 발생하면 해당 프로세스에 추가 메모리(프레임)를 할당하고, 반대로 페이지 폴트가 드물면 불필요한 프레임을 회수하는 방식입니다.
• 장점: 동적으로 프로세스의 메모리 요구량을 조절할 수 있어, 프로세스가 필요한 만큼의 메모리를 유지하도록 돕습니다.

2. 다중 프로그래밍 수준(Multiprogramming Level) 조절
• 원리: 동시에 메모리에 상주하는 프로세스의 수를 제한하여, 각 프로세스가 충분한 메모리 프레임을 확보할 수 있도록 하는 방법입니다.
• 장점: 너무 많은 프로세스가 동시에 실행될 경우 메모리 경쟁이 심해져 Thrashing 현상이 발생할 수 있는데, 프로세스 수를 조절하면 각 프로세스의 요구를 충족시킬 가능성이 높아집니다.
• 실행 방법: Thrashing 징후가 보이면 일부 프로세스를 스왑 아웃하거나, 스케줄링을 통해 동시에 실행되는 프로세스 수를 줄입니다.

3. Pre-paging (사전 페이징)
• 원리: 프로세스가 앞으로 필요로 할 가능성이 높은 페이지들을 미리 메모리로 로드하는 방법입니다.
• 장점: 페이지 부재(Page Fault)가 발생하기 전에 필요한 페이지들을 미리 불러와 Thrashing 가능성을 낮출 수 있습니다.
• 주의점: 예측이 부정확하면 불필요한 페이지를 로드하여 오히려 메모리 자원을 낭비할 수 있으므로, 정확한 예측 알고리즘이 필요합니다.

4. 개선된 페이지 교체 알고리즘 사용
• 원리: LRU(Least Recently Used)나 Clock 알고리즘과 같이, 프로세스가 앞으로 사용할 가능성이 높은 페이지를 유지하도록 설계된 페이지 교체 알고리즘을 사용합니다.
• 장점: 이러한 알고리즘은 페이지 부재를 줄이는 데 도움을 주어, 결과적으로 Thrashing 현상을 완화시킬 수 있습니다.
• 예시: 최근에 참조되지 않은 페이지를 우선 교체하는 LRU 알고리즘, 혹은 근사 LRU인 Clock 알고리즘 등이 있습니다.

이와 같이 Thrashing 문제는 Working Set 개념 외에도 여러 가지 방법을 통해 접근할 수 있으며, 실제 운영체제에서는 여러 기법들을 상황에 맞게 조합하여 사용합니다. 각 방법은 시스템의 특성과 부하 상황에 따라 장단점이 있으므로, 적절한 정책을 선택하는 것이 중요합니다.


비선점: 할당된 자원의 사용이 끝날 때까지 회수 불가
상호 배제
점유와 대기
환형 대기: 프로세스 간 자원 요구가 하나의 원형 구성




하이퍼바이저는 물리적 서버 자원을 추상화하여 Guest OS 가상화를 지원한다.

하이퍼바이저(Hypervisor)는 하나의 물리 서버를 여러 개의 가상 컴퓨터(가상 머신)로 나누어 실행할 수 있도록 도와주는 소프트웨어다.

즉, 서버의 CPU, 메모리, 저장공간 같은 자원을 가상으로 나누어 각 가상 머신(Guest OS)이 독립적으로 실행되도록 관리하는 역할을 한다.

예를 들어, 하나의 서버에서 Windows, Linux 여러 개의 운영체제를 동시에 실행할 수 있도록 해주는 것이 하이퍼바이저다.



가상화기술에 대힌 설명 중


가상화방식에 따라 가상 머신과 컨테이너 방식으로 나눌 수 있다.

이 말이 뭔지 설명해줘

가상화 기술은 하나의 물리적인 컴퓨터(서버)에서 여러 개의 독립적인 환경을 실행할 수 있도록 하는 기술이다. 이를 구현하는 방식에 따라 가상 머신(Virtual Machine, VM) 방식과 컨테이너(Container) 방식으로 나눌 수 있다.

1. 가상 머신(VM) 방식

가상 머신 방식은 **하이퍼바이저(Hypervisor)**라는 소프트웨어를 사용하여 하나의 물리 서버에서 여러 개의 가상 컴퓨터를 실행하는 방식이다.
• 각 가상 머신은 **운영체제(OS)**를 개별적으로 설치하여 실행됨.
• 서로 다른 운영체제(예: 하나는 Windows, 하나는 Linux)를 동시에 운영할 수 있음.
• 완벽한 독립성을 보장하지만, 운영체제(OS)별로 자원이 필요하여 상대적으로 무겁고 성능 오버헤드가 큼.

예시: VMware, VirtualBox, Microsoft Hyper-V, KVM 등

2. 컨테이너(Container) 방식

컨테이너 방식은 호스트 운영체제(OS)의 커널을 공유하면서, 각 애플리케이션을 격리된 환경에서 실행하는 방식이다.
• 개별 운영체제(OS)를 실행하는 것이 아니라 애플리케이션과 필요한 라이브러리만 패키징하여 실행함.
• 가상 머신보다 가볍고 빠름.
• OS 커널을 공유하기 때문에 서로 다른 운영체제 사용이 불가능(예: Linux 컨테이너는 Windows에서 직접 실행 불가).

예시: Docker, Kubernetes, LXC 등

3. 비교 정리

구분 가상 머신(VM) 컨테이너(Container)
실행 단위 운영체제(OS) 단위 애플리케이션 단위
운영체제 포함 여부 개별 OS 포함 호스트 OS 공유
실행 속도 느림 (OS 부팅 필요) 빠름 (프로세스 실행)
리소스 사용량 많음 (OS 별 메모리/CPU 필요) 적음 (커널 공유)
격리 수준 강력한 독립성 가벼운 격리
대표 기술 VMware, VirtualBox, Hyper-V Docker, Kubernetes

4. 정리

“가상화 방식에 따라 가상 머신과 컨테이너 방식으로 나눌 수 있다.“라는 말은
• 가상 머신 방식: 독립적인 OS를 실행하는 무거운 방식
• 컨테이너 방식: OS를 공유하는 가벼운 방식

으로 나뉜다는 의미다.
따라서, 어떤 방식이 적합한지는 사용 목적에 따라 결정된다.




클러스터(Cluster)란?

**클러스터(Cluster)**는 **“비슷한 데이터를 물리적으로 가까운 위치에 저장하는 기술”**을 의미합니다.
즉, 연관된 데이터들을 동일한 저장 공간(디스크 블록)에 묶어서 저장하여 성능을 최적화하는 방식입니다.

클러스터의 개념

클러스터는 데이터를 저장하는 방식을 의미하며, 크게 두 가지로 나눌 수 있습니다.

1️⃣ 테이블 클러스터(Table Cluster) → 여러 테이블의 데이터를 동일한 저장 공간에 배치
2️⃣ 클러스터 인덱스(Clustered Index) → 특정 컬럼을 기준으로 데이터가 물리적으로 정렬됨

1️⃣ 테이블 클러스터 (Table Cluster)
• 같은 속성을 가진 데이터들을 같은 물리적 공간에 저장하는 방법
• 조인이 자주 발생하는 테이블들을 한 공간에 저장하여 성능을 최적화
• 조인이 많을수록 성능이 좋아짐

✅ 예시
고객(Customer) 테이블과 주문(Order) 테이블이 자주 조인됨 → 같은 블록에 저장

CREATE CLUSTER customer_order_cluster (customer_id INT);

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(50)
) CLUSTER customer_order_cluster (customer_id);

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    amount DECIMAL(10,2)
) CLUSTER customer_order_cluster (customer_id);

✅ 특징
• 같은 클러스터 키(예: customer_id)를 가진 데이터들이 같은 블록에 저장됨
• 조인을 수행할 때 디스크 탐색이 줄어들어 성능 향상
• 단점: 클러스터를 만들면 삽입/삭제 시 추가적인 오버헤드가 발생할 수 있음

2️⃣ 클러스터 인덱스 (Clustered Index)
• 테이블의 데이터를 특정 컬럼 기준으로 정렬하여 저장하는 인덱스
• 인덱스 순서대로 데이터가 물리적으로 정렬됨
• 한 테이블에 하나만 생성 가능 (데이터 자체가 정렬되어 저장되므로)
• 검색 성능이 우수하지만, 삽입/삭제 시 성능 저하 가능

✅ 예시

CREATE CLUSTERED INDEX idx_employee_name ON employees(name);

✅ 특징
• 테이블 자체가 인덱스 순서대로 정렬됨
• 범위 검색, 정렬이 빠름
• 삽입/삭제 시 데이터 정렬 유지가 필요하므로 성능 저하 가능
• 한 테이블에 하나만 생성 가능 (기본 키 또는 자주 사용하는 검색 키로 설정하는 것이 일반적)

정리: 클러스터(Cluster) vs 클러스터 인덱스(Clustered Index)

개념 설명 예제
클러스터 (Table Cluster) 조인이 자주 발생하는 테이블을 같은 저장 공간에 배치 여러 개의 테이블을 같은 클러스터에 저장 (예: 고객 & 주문)
클러스터 인덱스 (Clustered Index) 특정 컬럼을 기준으로 정렬된 상태로 저장하는 인덱스 CREATE CLUSTERED INDEX idx_name ON employees(name);

시험 대비 핵심 포인트

✅ 클러스터(Cluster)는 데이터 저장 방식을 최적화하는 개념
✅ 클러스터 테이블은 연관된 테이블을 같은 저장 공간에 배치하는 방식
✅ 클러스터 인덱스는 테이블 자체를 특정 컬럼 기준으로 정렬하는 방식
✅ 클러스터 인덱스는 한 테이블에 하나만 생성 가능
✅ 일반적인 RDBMS에서는 클러스터 테이블을 많이 사용하지 않지만, 클러스터 인덱스는 자주 사용됨

시험에서는 클러스터와 클러스터 인덱스의 차이점을 이해하는 것이 중요합니다!



저장 공간 설계 단계에서 진행하는 테이 블 설계 중 테이블 설계 유형이 아닌 것
은?
① 일반 유형 테이블(Heap-Organized
Table)
② 클러스터 인덱스 테이블(Clustered
Index Table)
③ 해시 테이블(Hash Tabie)
④ 파티셔닝 테이블(Partitioned Table)

저장 공간 설계 단계에서 일반 유형. 클러스터 인덱스, 파티셔닝, 외부 테이블, 임시 테이블에 대한 설계를 진행한다.

✅ 후보키(𝐶𝑎𝑛𝑑𝑖𝑑𝑎𝑡𝑒 𝐾𝑒𝑦)란?

테이블에서 각 행을 유일하게 식별할 수 있는 속성(컬럼)들의 최소 집합!
즉, "이것만 있으면 레코드를 100% 구별할 수 있다!" 하는 키 중 가장 작은(최소한의) 키.


📌 후보키의 조건

  1. 유일성(Unique) → 같은 값을 가지는 행(레코드)이 없어야 함!
  2. 최소성(Minimality) → 불필요한 속성이 포함되면 안 됨! (최소한의 속성만 포함)

🚀 예제 1: 학생 테이블

학번이름전화번호
2023001 홍길동 010-1234-5678
2023002 김철수 010-5678-1234
2023003 이영희 010-9999-8888

🎯 후보키 찾기

  • 학번 → ✅ 유일함(각 학생마다 다름) & 최소성 충족 → 후보키 O
  • 이름 → ❌ 같은 이름이 있을 수 있음 → 후보키 X
  • 전화번호 → ✅ 각 학생마다 다름 & 최소성 충족 → 후보키 O

👉 즉, "학번"과 "전화번호"가 후보키!


🚀 예제 2: 직원 테이블

직원ID이름부서사번
A001 김민수 인사팀 1001
A002 박지훈 영업팀 1002
A003 이수진 개발팀 1003

🎯 후보키 찾기

  • 직원ID → ✅ 유일 & 최소성 → 후보키 O
  • 사번 → ✅ 유일 & 최소성 → 후보키 O
  • 이름 → ❌ 같은 이름 있을 가능성 → 후보키 X

👉 "직원ID"와 "사번"이 후보키!


📢 정리! 후보키 핵심 포인트

각 행을 유일하게 식별할 수 있는 최소한의 속성
유일성 + 최소성 둘 다 만족해야 함
후보키가 여러 개일 수도 있음! (예: 학번, 전화번호)
이 중에서 하나를 기본키(Primary Key)로 선택! 🚀

 
 
 
제5정규형: 후보키를 통하지않은 조인종속을 제거한 릴레이션 스키마이다. 
릴레이션에 존재하는 모든 조인종속성이 릴레이션 후보키를 통해서만 성립된다면 5nf이다. 

 
논리적 설계의 물리적 설계 변환 관계로
올바르지 않은 것은?
① 엔티티는 테이블로 변환된다.
② 속성은 칼럼으로 변환된다.
③ 주 식별자는 후보 키로 변환된다.
④ 외래 식별자는 외래 키로 변환된다.
해설
주 식별자는 기본 키로 전환된다.

논리적설계를 물리적 설계 변환 이거 설명해줘

논리적 설계 → 물리적 설계 변환 과정

데이터베이스 설계 과정에서 논리적 설계(Logical Design) 단계에서 설계된 개념을 물리적 설계(Physical Design) 로 변환하는 과정이 필요합니다.
이 과정에서 엔티티, 속성, 식별자 등이 테이블, 컬럼, 키 등의 데이터베이스 구조로 바뀌게 됩니다.

논리적 설계 → 물리적 설계 변환 관계

논리적 설계 (ERD 개념) 물리적 설계 (DB 개념) 설명
엔티티(Entity) 테이블(Table)
ERD에서 개체(Entity)는 테이블로 변환됨

속성(Attribute) 칼럼(Column)
엔티티의 속성(Attribute)은 테이블의 컬럼(Column)으로 변환됨

주 식별자(Primary Identifier) 기본 키(Primary Key, PK)
엔티티의 주 식별자는 테이블의 기본 키로 변환됨

외래 식별자(Foreign Identifier) 외래 키(Foreign Key, FK)
다른 엔티티를 참조하는 외래 식별자는 외래 키로 변환됨
관계(Relationship) 참조(Reference) 또는 외래 키(FK)
두 엔티티 간의 관계는 테이블 간의 외래 키로 구현됨

시험 문제 해설

❌ ③ 주 식별자는 후보 키로 변환된다. (오답)
✅ 주 식별자는 기본 키(Primary Key, PK)로 변환됨!

✔ 논리적 설계 → 물리적 설계 변환이 올바른 예시
• ✅ 엔티티 → 테이블
• ✅ 속성 → 컬럼
• ✅ 주 식별자 → 기본 키 (PK)
• ✅ 외래 식별자 → 외래 키 (FK)

시험 대비 핵심 포인트

✅ 논리적 설계 → 물리적 설계 변환 관계 암기하기
✅ 주 식별자는 기본 키(PK)로 변환된다는 점 주의!
✅ 외래 식별자는 외래 키(FK)로 변환됨
✅ 테이블 간의 관계는 외래 키를 통해 표현됨

시험에서는 논리적 설계를 물리적 설계로 변환하는 개념이 자주 출제되므로,
변환 관계를 정확히 이해하는 것이 중요합니다!


데이터베이스 로그(log)를 필요로 하는
회복 기법은?
① 즉각 갱신 기법
② 다수적 로딩 기법
③ 타임 스탬프 기법
④ 폴딩 기법
즉각 갱신 및 지연 갱신 기법을 통한 회복 시 로그가 필요하다.


네트워크 토폴로지 (Network Topology)란?

네트워크 토폴로지는 컴퓨터, 서버, 네트워크 장비(스위치, 라우터) 등이 어떻게 연결되어 있는지 나타내는 구조(형태) 를 의미합니다.

즉, 네트워크의 물리적 또는 논리적 연결 방식을 설명하는 개념입니다.

시험 대비 핵심 포인트

✅ 버스형 → 하나의 메인 케이블 공유, 저렴하지만 장애에 취약
✅ 스타형 → 중앙 장비(스위치, 허브) 중심, 가장 많이 사용됨
✅ 링형 → 원형으로 연결, 토큰 패싱 방식 사용
✅ 메시형 → 가장 안정적이지만 구축 비용 높음
✅ 트리형 → 계층적 구조, 확장성이 뛰어남

주요 네트워크 토폴로지 유형

① 버스형 (Bus Topology)

🚌 “한 개의 중앙 케이블(버스)을 모든 장비가 공유하는 방식”

🔹 특징
• 네트워크가 하나의 메인 케이블(버스) 로 연결됨
• 모든 장비가 동일한 데이터 전송 경로를 공유
• 신호가 양쪽 끝에서 반사되지 않도록 종단 저항(Terminator)이 필요

🔹 장점
✅ 설치가 간단하고 저렴함
✅ 소규모 네트워크에 적합

🔹 단점
❌ 한 곳에서 장애 발생 시 전체 네트워크에 영향을 줌
❌ 트래픽 증가 시 속도가 느려짐

📌 사용 사례: 초기 LAN 환경, 소규모 사무실

② 스타형 (Star Topology)

⭐ “중앙 장비(스위치, 허브)를 통해 모든 장비가 연결되는 방식”

🔹 특징
• 중앙에 허브(Hub) 또는 스위치(Switch) 를 두고, 모든 장비가 개별적으로 연결됨
• 데이터는 중앙 장비를 거쳐 다른 장비로 전달됨

🔹 장점
✅ 한 장비가 고장 나도 전체 네트워크에는 영향 없음
✅ 트래픽 관리가 효율적이며 속도가 빠름

🔹 단점
❌ 중앙 장비(스위치, 허브)가 고장 나면 전체 네트워크가 마비됨
❌ 구축 비용이 상대적으로 비쌈

📌 사용 사례: 현재 대부분의 기업 네트워크, 가정용 네트워크

③ 링형 (Ring Topology)

⭕ “모든 장비가 고리(링) 형태로 연결된 방식”

🔹 특징
• 데이터가 한 방향(단방향) 또는 양방향으로 순환하며 전달됨
토큰 패싱(Token Passing) 기법을 사용하여 충돌 방지

🔹 장점
✅ 충돌 없이 일정한 속도로 데이터 전송 가능
✅ 네트워크 부하 관리가 용이함

🔹 단점
❌ 한 장비가 고장 나면 전체 네트워크가 다운됨 (단방향 링의 경우)
❌ 유지보수가 어렵고 구축 비용이 높음

📌 사용 사례: 예전 IBM Token Ring 네트워크 (현재 거의 사용되지 않음)

④ 메시형 (Mesh Topology)

🕸 “각 장비가 다른 장비들과 직접 연결된 방식”

🔹 특징
• 모든 장비가 서로 직접 연결됨
• 데이터는 최적 경로를 선택해 전달됨

🔹 장점
✅ 장애 발생 시 다른 경로로 우회 가능 (고장에 강함)
✅ 보안성이 높고 데이터 충돌 가능성이 낮음

🔹 단점
❌ 연결선이 많아 설치 비용이 매우 높음
❌ 설정 및 유지보수가 어려움

📌 사용 사례: 군사 통신, 금융 기관, 대형 데이터센터

⑤ 트리형 (Tree Topology)

🌳 “스타형 + 버스형을 결합한 방식”

🔹 특징
• 계층 구조로 구성됨 (최상위 노드 → 하위 노드)
• 대형 네트워크에서 자주 사용됨

🔹 장점
✅ 네트워크 확장이 용이함
✅ 관리가 상대적으로 용이

🔹 단점
❌ 상위 노드가 장애를 일으키면 전체 네트워크에 영향

📌 사용 사례: 대기업, 대학 캠퍼스 네트워크



라우팅 프로토콜 (Routing Protocol) 정리

라우팅 프로토콜은 네트워크에서 최적의 경로를 찾아 데이터 패킷을 전달하는 역할을 합니다.
주요 프로토콜로 RIP, OSPF, BGP가 있으며, 각각의 특징을 정리해볼게요.

1. RIP (Routing Information Protocol) - 거리 벡터 방식

🌍 “최단 홉(Hop) 수를 기준으로 경로를 선택하는 프로토콜”

✔️ 특징
• 거리 벡터(Distance Vector) 알고리즘 사용
• 최대 홉 수 15 → 16 홉 이상이면 도달 불가 (소규모 네트워크에 적합)
• 주기적으로 라우팅 정보를 브로드캐스트(모든 라우터에 전송)
• 라우팅 업데이트 속도가 느림 (30초마다 업데이트)

✔️ 장점 & 단점
✅ 장점
• 설정이 간단하고 소규모 네트워크에서 사용 가능
• 동적 라우팅을 지원하여 경로 변경 시 자동 업데이트

❌ 단점
• 최대 15 홉까지만 가능 → 대규모 네트워크에서는 사용 불가
• 네트워크 트래픽 증가 (주기적인 업데이트 때문)
• 컨버전스(경로 안정화) 속도가 느림

📌 사용 사례: 소규모 네트워크, 사무실 LAN

2. OSPF (Open Shortest Path First) - 링크 상태 방식

🔍 “네트워크 토폴로지를 기반으로 최단 경로를 찾는 프로토콜”

✔️ 특징
• 링크 상태(Link State) 알고리즘 사용
• 다익스트라(Dijkstra) 알고리즘을 이용해 최단 경로 계산
• 홉 수 제한 없음 → 대규모 네트워크에 적합
• 라우팅 정보를 멀티캐스트(필요한 라우터에만 전송)
• 빠른 컨버전스 속도

✔️ 장점 & 단점
✅ 장점
대규모 네트워크에서 사용 가능 (홉 제한 없음)
• 최적의 경로를 빠르게 찾을 수 있음
• 컨버전스 속도가 빠름

❌ 단점
• 설정이 복잡함
RIP보다 더 많은 리소스를 사용함

📌 사용 사례: 기업 네트워크, ISP 내부 네트워크

3. BGP (Border Gateway Protocol) - 경로 벡터 방식

🌎 “인터넷에서 서로 다른 네트워크 간 경로를 설정하는 프로토콜”

✔️ 특징
• 경로 벡터(Path Vector) 알고리즘 사용
• 자율 시스템(AS, Autonomous System) 간 경로 설정
• 가장 긴 경로도 허용하며, 네트워크 정책에 따라 경로 선택
• 인터넷의 기본 라우팅 프로토콜 (ISP 간 통신에 사용)

✔️ 장점 & 단점
✅ 장점
• 대규모 네트워크에서도 안정적으로 동작
• 정책 기반 라우팅 가능 (최적 경로 선택 기준 설정 가능)
• 대륙 간 네트워크 연결에 사용됨

❌ 단점
설정이 매우 복잡함
• RIP, OSPF보다 속도가 느림 (컨버전스 속도 ↓)
• 잘못된 설정 시 인터넷 전체 장애 가능

📌 사용 사례: 인터넷 백본, ISP 간 연결, 글로벌 네트워크

정리

프로토콜 방식 특징 장점 단점 사용 사례
RIP 거리 벡터 홉 수(최대 15) 기준 경로 선택 설정 간단, 자동 업데이트 느린 컨버전스, 15 홉 제한 소규모 네트워크 (LAN)
OSPF 링크 상태 다익스트라 알고리즘으로 최단 경로 찾음 빠른 컨버전스, 홉 제한 없음 설정 복잡, 리소스 소모 기업 네트워크, ISP 내부
BGP 경로 벡터 AS 간 경로 설정, 인터넷 기본 라우팅 프로토콜 정책 기반 라우팅 가능, 대규모 네트워크 지원 설정 매우 복잡, 속도 느림 ISP 간 연결, 글로벌 네트워크

✅ 핵심 요약
• RIP → 소규모 네트워크, 홉 수 제한 있음 (최대 15)
• OSPF → 중·대규모 네트워크, 다익스트라 알고리즘 사용, 빠른 컨버전스
• BGP → 인터넷에서 사용, AS 간 경로 설정, 정책 기반 라우팅

시험 대비 TIP
• RIP은 15 홉 제한이 있는 거리 벡터 방식
• OSPF는 다익스트라 알고리즘을 이용한 링크 상태 방식
• BGP는 인터넷에서 사용되는 경로 벡터 방식

이 정도 개념을 확실히 이해하면 정보처리기사 시험에서 라우팅 프로토콜 문제는 쉽게 풀 수 있을 거예요!



• CPU 스케줄링 알고리즘: FCFS, SJF, RR, 우선순위 이거에 대해 쉽게 설명해줘

CPU 스케줄링 알고리즘은 CPU를 어떤 순서로 할당할지 결정하는 방법이에요. 쉽게 설명하면 줄 서서 음식 받는 순서를 정하는 방법과 비슷합니다.

1. FCFS (First-Come, First-Served) - 먼저 온 순서대로 처리
• 줄 서 있는 순서대로 CPU를 할당하는 방식
• 가장 단순한 방식이지만, 긴 작업이 앞에 있으면 뒤에 있는 짧은 작업이 오래 기다려야 하는 단점이 있음 (Convoy Effect)

✅ 예시

프로세스 실행 시간
A (먼저 옴) 10초
B 3초
C 2초

• A가 먼저 왔으므로 10초 동안 실행
• 그다음 B가 실행 (3초)
• 마지막으로 C가 실행 (2초)

📌 단점: 짧은 작업이 긴 작업 때문에 오래 기다릴 수도 있음

2. SJF (Shortest Job First) - 짧은 작업 먼저 처리
• 실행 시간이 가장 짧은 작업을 먼저 처리
• 전체적인 평균 대기 시간을 줄일 수 있음
• 하지만 긴 작업은 계속 뒤로 밀릴 가능성(Starvation, 기아 현상) 있음

✅ 예시 (실행 시간이 짧은 것부터 실행)

프로세스 실행 시간
A 10초
B 3초
C 2초

• C (2초) → B (3초) → A (10초) 순서로 실행
• 평균 대기 시간이 짧아짐

📌 단점: 실행 시간이 긴 작업이 계속 밀릴 수도 있음

3. RR (Round Robin) - 일정한 시간만큼 번갈아 가며 실행
• 타임 퀀텀 (Time Quantum, 시간 할당량) 을 정해서 모든 프로세스가 차례로 일정 시간씩 실행됨
• 공평한 방식이지만, 타임 퀀텀이 너무 길면 FCFS처럼 되고, 너무 짧으면 오버헤드(스위칭 비용)가 증가

✅ 예시 (타임 퀀텀이 4초라고 가정)

프로세스 실행 시간
A 10초
B 3초
C 2초

• A (4초) → B (3초, 끝) → C (2초, 끝) → A (남은 6초 실행)
• 모든 프로세스가 기회는 공평하게 받지만, 긴 작업은 여러 번 나눠서 실행됨

📌 장점: 모든 작업이 정기적으로 CPU를 받음
📌 단점: 타임 퀀텀이 너무 짧으면 문맥 전환(Context Switching)이 자주 발생해서 성능 저하

4. 우선순위 스케줄링 - 중요한 작업 먼저 실행
• 우선순위(priority) 를 기준으로 CPU를 할당
• 숫자가 낮거나 높은 것이 중요도를 나타낼 수 있음 (설정 방식에 따라 다름)
• 우선순위가 낮은 작업은 계속 밀릴 가능성(Starvation, 기아 현상)이 있음

✅ 예시

프로세스 실행 시간 우선순위 (낮을수록 높음)
A 10초 3
B 3초 1
C 2초 2

• B (우선순위 1, 제일 높음) → C (우선순위 2) → A (우선순위 3) 순서로 실행

📌 단점: 낮은 우선순위의 작업은 계속 밀려서 실행되지 않을 수도 있음 (기아 현상)
📌 해결책: Aging(에이징, 우선순위 점진적 증가 기법) → 오래 기다린 프로세스의 우선순위를 자동으로 높여주는 방식

정리

알고리즘 설명 장점 단점
FCFS (먼저 온 순서) 먼저 도착한 순서대로 실행 간단함 긴 작업이 있으면 짧은 작업이 오래 기다림 (Convoy Effect)
SJF (짧은 작업 우선) 실행 시간이 짧은 것부터 실행 평균 대기 시간 최소화 긴 작업이 계속 밀릴 수 있음 (기아 현상)
RR (타임 퀀텀) 일정 시간씩 번갈아 실행 공평함 타임 퀀텀이 너무 짧으면 오버헤드 증가
우선순위 높은 우선순위 먼저 실행 중요한 작업을 빨리 처리 낮은 우선순위 작업이 계속 밀릴 가능성 (기아 현상)

💡 핵심 정리
짧은 작업 먼저 → SJF
• 순서대로 실행 → FCFS
• 공평하게 실행 → RR
• 중요한 작업 먼저 → 우선순위 스케줄링

각 알고리즘의 장단점을 잘 이해하면 시험에서도 쉽게 적용할 수 있어요!


맵리듀스(MapReduce) 는 정보처리기사에서 핵심 개념은 아니지만, 분산 처리 관련 문제에서 출제될 가능성이 있습니다.
특히, 빅데이터 처리 기법과 관련된 문제에서 간략하게 등장할 수 있어 개념 정도는 알고 있는 것이 좋습니다.

맵리듀스(MapReduce)란?
• 구글에서 개발한 대용량 데이터 분산 처리 기법
• 맵(Map) → 셔플(Shuffle) → 리듀스(Reduce) 과정으로 데이터 처리
• 하둡(Hadoop)에서 주로 사용됨
• 대량의 데이터를 여러 서버에서 병렬 처리하여 속도를 향상시킴

✅ 예제: 단어 개수 세기
1. Map 단계: 문장을 단어별로 나누고 (단어, 1) 형태로 출력

"hello world hello"
→ (hello, 1), (world, 1), (hello, 1)


2. Shuffle 단계: 같은 키(단어)끼리 그룹화

(hello, 1), (hello, 1), (world, 1)
→ (hello, [1, 1]), (world, [1])


3. Reduce 단계: 값을 합산하여 최종 결과 출력

(hello, 2), (world, 1)

정보처리기사에서 자주 출제되는 개념

다음 개념들은 정보처리기사 시험에서 자주 등장하는 핵심 개념들입니다.

1. 데이터베이스(DB)
• 정규화(Normalization): 데이터 중복 최소화, 이상(Anomaly) 방지
• 이상(Anomaly): 삽입 이상, 삭제 이상, 갱신 이상
• 트랜잭션(Transaction): 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability) → ACID 특성
• 트랜잭션 상태: 활동(Active), 부분 완료(Partially Committed), 완료(Committed), 실패(Failed), 철회(Aborted)
• 동시성 제어 기법: 로킹(Locking), 타임스탬프, 다중 버전 병행 제어(MVCC)
• SQL: DDL(테이블 생성), DML(데이터 조작), DCL(권한 관리)

2. 운영체제(OS)
• CPU 스케줄링 알고리즘: FCFS, SJF, RR, 우선순위
• Deadlock(교착 상태): 상호 배제, 점유와 대기, 비선점, 환형 대기
• 메모리 관리 기법: 페이징, 세그먼테이션

3. 네트워크(Network)
• OSI 7계층: 물리, 데이터 링크, 네트워크, 전송, 세션, 표현, 응용
• TCP/IP 4계층: 네트워크 인터페이스, 인터넷, 전송, 응용
• IP 주소 체계: IPv4, IPv6
• 라우팅 프로토콜: RIP, OSPF, BGP

4. 소프트웨어 공학
• 애자일 개발(Agile): 스크럼(Scrum), XP(eXtreme Programming)
• UML 다이어그램: 유스케이스, 클래스, 시퀀스 다이어그램
• 테스트 기법: 블랙박스, 화이트박스 테스트

5. 보안(Security)
• 암호화 기법: 대칭키(AES, DES), 비대칭키(RSA)
• 해시 알고리즘: SHA, MD5
• 공격 유형: SQL 인젝션, XSS, DoS/DDoS


동시성 제어 기법 (Concurrency Control)

동시성 제어는 여러 개의 트랜잭션이 동시에 실행될 때, 데이터의 일관성과 무결성을 유지하는 기법이에요.
데이터베이스에서는 여러 사용자가 동시에 데이터를 읽고 수정할 수 있기 때문에 충돌(Conflict) 방지가 중요합니다.

1. 로킹 (Locking) - 잠금 기법

🔒 “잠금(Lock) 걸고 다른 트랜잭션이 접근하지 못하게 막는 방법”

✔️ 개념
• 하나의 트랜잭션이 데이터를 수정할 때 다른 트랜잭션이 접근하지 못하도록 잠금(Lock)을 거는 방식
• 충돌을 방지할 수 있지만, 병목 현상(Block)과 교착 상태(Deadlock) 가 발생할 가능성이 있음

✔️ 주요 개념
✅ 공유 잠금 (Shared Lock, S-lock):
• 읽기(SELECT)는 허용, 쓰기(UPDATE, DELETE)는 금지
• 여러 트랜잭션이 동시에 읽을 수 있음 (공유 가능)

✅ 배타 잠금 (Exclusive Lock, X-lock):
• 읽기 & 쓰기 모두 다른 트랜잭션이 불가능
• 한 트랜잭션이 데이터를 수정할 때 다른 트랜잭션이 접근하지 못하도록 막음

✔️ 장점 & 단점
✅ 장점
• 데이터 무결성을 강하게 보장
• 충돌을 확실하게 방지

❌ 단점
• 잠금이 걸린 동안 다른 트랜잭션이 기다려야 함 (성능 저하)
• 잘못된 잠금 설정 시 교착 상태(Deadlock) 발생 가능

2. 타임스탬프 기법 (Timestamp Ordering) - 시간 순서대로 처리

⏳ “각 트랜잭션에 타임스탬프를 부여하고, 실행 순서를 보장하는 방식”

✔️ 개념
• 트랜잭션이 시작될 때 고유한 타임스탬프(TS, Timestamp)를 부여
• 나중에 시작한 트랜잭션이 먼저 시작한 트랜잭션보다 먼저 실행되지 못하도록 보장

✔️ 주요 원칙
✅ W-TS (Write Timestamp): 해당 데이터에 마지막으로 쓰기(Write) 를 수행한 트랜잭션의 타임스탬프
✅ R-TS (Read Timestamp): 해당 데이터에 마지막으로 읽기(Read) 를 수행한 트랜잭션의 타임스탬프
• 나중에 시작한 트랜잭션이 먼저 실행되려 하면 롤백됨 (재시도 필요)

✔️ 장점 & 단점
✅ 장점
• 교착 상태(Deadlock)가 발생하지 않음 (순서가 정해져 있기 때문)
• 읽기 작업이 많을 때 성능이 좋음

❌ 단점
• 충돌이 발생하면 롤백이 자주 발생 → 성능 저하
• 오래된 트랜잭션이 자주 무효화될 수 있음 (Starvation, 기아 현상)

3. 다중 버전 병행 제어 (MVCC, Multi-Version Concurrency Control) - 여러 개의 데이터 버전 유지

📄 “데이터의 여러 버전을 유지해서, 읽기 작업이 쓰기 작업을 방해하지 않도록 하는 방식”

✔️ 개념
• 데이터를 수정할 때 기존 데이터를 즉시 변경하지 않고, 새로운 버전을 생성
• 읽기(SELECT)는 과거 버전 사용, 쓰기(UPDATE, DELETE)는 새로운 버전 생성
• PostgreSQL, MySQL (InnoDB) 등 대부분의 DBMS에서 사용

✔️ 동작 방식
1. 트랜잭션이 데이터를 수정하면 새로운 버전의 데이터 생성
2. 읽기 작업을 수행하는 트랜잭션은 가장 최근에 커밋된 버전을 참조
3. 쓰기 작업이 완료되면 새로운 버전이 기존 데이터를 대체

✔️ 장점 & 단점
✅ 장점
• 읽기 작업(SELECT)이 쓰기 작업(UPDATE, DELETE)을 방해하지 않음 (높은 동시성)
• 읽기와 쓰기가 동시에 수행 가능
• Deadlock이 발생하지 않음

❌ 단점
여러 개의 데이터 버전을 유지해야 하므로 공간(메모리, 스토리지) 사용 증가
• 오래된 버전을 정리하는 GC(Garbage Collection) 작업이 필요

정리

기법 개념 장점 단점
로킹 (Locking) 데이터를 잠그고 다른 트랜잭션이 접근하지 못하게 함 데이터 무결성 보장 교착 상태 발생 가능, 성능 저하
타임스탬프 (Timestamp Ordering) 타임스탬프를 부여해 실행 순서를 보장 교착 상태 없음, 읽기 성능 좋음 롤백 자주 발생, 기아 현상 발생 가능
MVCC (다중 버전 병행 제어) 여러 개의 데이터 버전을 유지하여 읽기 & 쓰기 충돌 방지 읽기 & 쓰기 동시에 가능, Deadlock 없음 메모리 & 저장 공간 많이 사용

✅ 핵심 요약
• 로킹 → 안전하지만 동시성 낮음 (교착 상태 가능)
• 타임스탬프 → 시간 순서대로 처리 (충돌 시 롤백 발생)
• MVCC → 읽기 & 쓰기 동시 가능 (공간 사용 증가)

각 기법의 특성을 잘 이해하면 데이터베이스 성능 최적화에 도움이 될 거예요!




맺음말
• 맵리듀스는 빅데이터 처리 개념으로 중요도가 낮지만, 간단한 개념 정도는 숙지하는 것이 좋습니다.
• 정보처리기사 시험에서는 데이터베이스, 운영체제, 네트워크, 소프트웨어 공학, 보안 개념이 자주 출제됩니다.
• 특히 정규화, 트랜잭션, ACID 특성, 교착 상태, OSI 7계층, 암호화 기법은 거의 필수 개념입니다.

다음 중 데이터베이스 무결성의 종류에
해당하지 않는 것은?
① 실체 무결성
② 영역 무결성
③ 참조 무결성
④ 칼럼 무결성
컬럼 무결성 아님

정답은 ④ 칼럼 무결성입니다.
데이터베이스 무결성의 주요 종류는 실체 무결성, 영역 무결성, 참조 무결성입니다.

1. 실체 무결성 (Entity Integrity)
• 테이블의 각 행(Row) 이 고유하게 식별될 수 있도록 보장하는 규칙
• 기본 키(Primary Key) 에 해당하는 속성이 NULL이거나 중복될 수 없음
• 예: 학생 테이블에서 학번(Student_ID)이 기본 키라면, 같은 학번이 두 번 들어가거나 NULL이 될 수 없음

✅ 예시

Student_ID Name Age
1001 Kim 20
1002 Lee 21
NULL Park 22

2. 영역 무결성 (Domain Integrity)
• 각 컬럼이 정의된 데이터 타입과 허용된 값 범위 내에서 값을 가져야 하는 규칙
• 예: 나이(Age) 컬럼이 0~120 범위의 정수여야 한다면, -1이나 150 같은 값은 입력 불가

✅ 예시

Name Age
Kim 25
Lee -5
Park 200

3. 참조 무결성 (Referential Integrity)
• 외래 키(Foreign Key)가 올바르게 참조되도록 보장하는 규칙
• 즉, 부모 테이블의 기본 키가 존재해야 자식 테이블에서 참조 가능
• 부모 테이블에서 삭제된 값이 자식 테이블에 존재하면 무결성이 깨짐

✅ 예시
부모 테이블 (학생 테이블)

Student_ID Name
1001 Kim
1002 Lee

자식 테이블 (성적 테이블)

Grade_ID Student_ID Score
1 1001 90
2 1003 85

4. 칼럼 무결성 (X)
• “칼럼 무결성”이라는 개념은 데이터베이스 무결성의 공식적인 분류에 포함되지 않음
• 컬럼과 관련된 무결성은 보통 영역 무결성(Domain Integrity) 이 담당

요약

번호 무결성 유형 설명 예제
① 실체 무결성 기본 키(PK)가 NULL이거나 중복되면 안 됨 중복된 학번 ❌
② 영역 무결성 컬럼 값이 데이터 타입과 범위 내에 있어야 함 나이에 -1 ❌
③ 참조 무결성 외래 키(FK)는 부모 테이블의 기본 키를 참조해야 함 없는 학번 참조
④ ❌ 칼럼 무결성 공식적인 개념 아님 영역 무결성과 겹침

따라서 ④ 칼럼 무결성은 무결성의 종류가 아닙니다.


물리 데이터베이스 설계 중 검색의 최적 화를 위해 데이터베이스 내의 로우들을 기준으로 정보를 구성하는 설계 단계는
무엇인가?
① 인덱스 설계
② 칼럼 구조 설계
③ 데이터베이스 구조 설계
④ 조회 속도 향상 설계

컬럼 구조 설계는 어떻게 다른데? 이거는 인덱스 설계래

정답은 ① 인덱스 설계입니다.

인덱스 설계는 검색 최적화를 위해 데이터베이스 내의 행(로우)들을 기준으로 정보를 구성하는 과정입니다. 인덱스를 적절히 설계하면 검색 속도를 크게 향상시킬 수 있습니다.

컬럼 구조 설계와의 차이점

컬럼 구조 설계는 테이블의 열(컬럼) 을 어떻게 구성할지 결정하는 과정입니다.
• 데이터 타입을 결정 (예: INT, VARCHAR, DATE 등)
• 각 컬럼의 제약 조건 설정 (NOT NULL, UNIQUE, DEFAULT 등)
• 정규화 여부를 고려하여 데이터 중복을 최소화

반면, 인덱스 설계는 검색 성능 향상을 목표로 특정 컬럼에 인덱스를 적용하는 작업입니다.
• 자주 검색되는 컬럼에 인덱스를 추가 (B-Tree, Hash, Full-Text Index 등)
• 인덱스가 너무 많으면 오히려 성능이 저하될 수 있으므로 최적의 인덱스 전략을 설계

즉, 컬럼 구조 설계는 데이터의 저장 구조를 정의하는 단계이고, 인덱스 설계는 빠른 검색을 위해 특정 컬럼에 대한 검색 최적화를 수행하는 단계입니다.




네트워크 가상화 구성요소
NFVI NFV Infrastructure
가상 네트워크 기능을 수행하는데 필요하다.
가상화된 가상자원을 제공하다.

VNFs
Visual Network Funtions
소프트웨어로 개발된 네트워크 기능들의 집합
NFVI에서 실행할 수 있는 네트워크 기능들을 구현한 소프트웨어 패키지이다.

MANO
NFV Management & Orchestration
NFVI 물리 및 가상자원과 VNF의 제어 및 라이프 사이클 관리를 담당한다.

다음 중 분산 데이터베이스 관리 시스템
의 투명성이 아닌 것은?
① 위치 투명성
② 장애 투명성
③ 분할 투명성
④ 조회 투명성
조회 투명성은 분산 데이터베이스의 투명성이 아니다.

분산 데이터베이스 관리 시스템(DDBMS, Distributed Database Management System)에서는 여러 개의 데이터베이스가 네트워크를 통해 분산되어 있지만, 사용자는 이를 하나의 데이터베이스처럼 사용할 수 있어야 해. 이를 위해 분산 데이터베이스의 투명성이 중요해.

다음은 각각의 **투명성(Transparency)**에 대한 설명이야.

1. 위치 투명성 (Location Transparency)
• 사용자가 데이터가 어디에 저장되어 있는지 알 필요 없이 접근할 수 있도록 함.
• 예를 들어, 사용자가 SELECT * FROM users;를 실행하면, 데이터가 서울 서버에 있든 뉴욕 서버에 있든 상관없이 동일한 방식으로 조회됨.
• 사용자는 물리적 데이터 위치를 신경 쓰지 않아도 됨.

2. 장애 투명성 (Failure Transparency)
• 시스템 내 일부 서버가 고장 나거나 네트워크 오류가 발생해도 사용자는 이를 인식하지 않고 정상적으로 작업을 수행할 수 있어야 함.
• 예를 들어, 한 노드(서버)가 다운되더라도 다른 노드가 대신 처리해서 시스템이 계속 동작함.
• 장애 발생 시에도 연속성을 유지하는 기능.

3. 분할 투명성 (Partition Transparency)
• 데이터가 여러 개의 분할(Fragment)로 나누어져 저장되더라도, 사용자는 이를 단일 데이터베이스처럼 사용할 수 있어야 함.
예를 들어, 고객 데이터가 아시아 서버와 유럽 서버에 나누어 저장되어 있어도, 사용자는 이를 하나의 테이블처럼 조회할 수 있음.
• 데이터가 분산되어 있어도 하나의 논리적 데이터베이스처럼 보이는 것.

4. 조회 투명성 (Query Transparency) (→ 분산 데이터베이스의 투명성이 아님)
• 이 개념은 분산 데이터베이스의 주요 투명성 개념이 아님.
• 보통 질의(Query) 최적화, SQL 변환, 데이터 접근 방식의 최적화와 관련됨.
• 분산 데이터베이스의 주요 투명성 개념에는 포함되지 않음.

결론

**조회 투명성(④)**은 분산 데이터베이스의 핵심 투명성이 아니므로, 정답은 ④ 조회 투명성이야.






CRUD 매트릭스의 구성 요소가 아닌 것
은?
① 엔티티 타입
② 단위 프로세스
③ CRUD
④ 프러시저

CRUD 매트리스의 구성은 엔티티 타입, 단위 프로세스, CRUD이다.

다음 중 CRUD 매트릭스의 검증 모델
규칙이 아닌 것은?
① 모든 엔티티에 'CRUD'가 존재한다.
② 모든 엔티티에 'C가 존재한다.
③ 모든 엔티티에 'D'가 존재해야 한다.
④ 모든 엔티티에 'R이 한번 이상 존재
해야 한다.

엔티티의 D에 대한 조건은 검증 규칙에 포함되지않는다.




클라이언트와 서버간의 통신을 담당하는 시스템 소프트웨어를 미들웨어라고 함

웹 애플리케이션을 지원하는 미들웨어
로서 사용자의 요구에 바로 적용할 수 있는 동적 콘텐츠를 처리하기 위해 사용
되는 미들웨어는?
• RPC(Remote Procedure Call)
( TP-Monitor(Transaction Processing
Monitor)
© DB(Database)
A WAS(Web Application Server)
WAS(Web Application Server 0/.
| RPC는 원격 프러시저를 호출하는 방식이며 TP-MONITOR 는 분산환경에서 각 트랜잭션을 감시하는 미들웨어다. DB는 애플리케이션과 데이터베이스 서버 사이에 원격접속 연결해주는 미들웨어다.


미들웨어 솔루션의 유형에 포함되지 않
는 것은?
1. WAS
2. RPC
2 Web Server
A ORB

미들웨어 솔루션의 유형에 포함되지 않는 것?

정답: 3. Web Server

이유:
• Web Server는 HTML 문서, 이미지, 동영상 등의 정적(Static) 콘텐츠를 제공하는 서버로, 일반적으로 미들웨어 솔루션으로 간주되지 않는다.
• 반면, **WAS(Web Application Server), RPC(Remote Procedure Call), ORB(Object Request Broker)**는 모두 미들웨어에 해당한다.

미들웨어(Middleware)란?

미들웨어는 클라이언트와 서버 사이에서 데이터 교환, 서비스 호출, 분산 처리 등을 중계하는 소프트웨어를 의미한다.

ORB(Object Request Broker)
• ORB는 분산 객체(Object-Oriented Middleware) 기반 미들웨어의 한 유형이다.
• 서로 다른 네트워크에 있는 객체(Object)들이 서로 호출하고 응답할 수 있도록 지원한다.
• 예시:
• CORBA(Common Object Request Broker Architecture): 분산 환경에서 객체 간 통신을 지원하는 대표적인 ORB 구현체.
• Java의 **RMI(Remote Method Invocation)**도 ORB와 유사한 개념으로 작동.

RPC(Remote Procedure Call)
• 원격 프로시저 호출(Remote Procedure Call, RPC)은 네트워크를 통해 다른 컴퓨터에서 실행되는 함수(프로시저)를 호출하는 방식의 미들웨어이다.
• 예시:
• gRPC: 구글에서 개발한 RPC 프레임워크로, Protocol Buffers를 사용.
• XML-RPC, JSON-RPC: XML이나 JSON을 이용한 경량 RPC 방식.

WAS(Web Application Server) vs Web Server 차이

구분 Web Server WAS
역할 정적 콘텐츠 제공 (HTML, 이미지, JS, CSS 등) 동적 콘텐츠 처리 (비즈니스 로직 실행)
예시 Apache, Nginx Tomcat, WebLogic, JBoss
특징 빠른 응답, 리소스 제공 데이터베이스 연동, 세션 관리, 트랜잭션 처리

결론
• 미들웨어에 포함됨: WAS, RPC, ORB
• 미들웨어가 아님: Web Server (단순 리소스 제공)

따라서, Web Server는 미들웨어 솔루션의 유형에 포함되지 않는다.

Web Server는 클라이언트가 요청하는 HTML 문서
나 각종 리소스를 전달하는 일반적인 서버이다.

ORB, RPC는 어떤 미들웨어 솔루션이야?

ID/PW를 종합적으로 관리해주는 역할기반의 사용자 계정 솔루션

IAM 정답 Identity Access Management

통합 위협 관리(UTM) : 물리적인 하나의 장비에 서 여러 보안 기능을 통합적으로 제공하는 네트 워크 보안 장비로 IDS, IPS 등 기능을 포함한다.
- 패치 관리 시스템(PMS) : 보안 취약점을 보완하기 위해 배포되는 보안 패치 파일을 원격에서 자동으로 설치 관리하는 시스템이다.
- 기업 보안 관리(ESM) : 다양한 보안 시스템과 보 안 장비를 연동하여 운영하는 통합 보안 관리 시스템이다.

무결성 강화방법이 뭐야? 무결성이 무슨 뜻인데?
트리거를 통한 무결성 강화, 애플리케이션을 통한 강화, 제약 조건을 이용한 무결성 강화, 조회조건을 통한 무결성 강화


조회조건을 통해서는 무결성 강화 불가능


무결성(integrity)이란?

무결성이란 데이터가 정확하고 일관성을 유지하며, 불법적인 변경이나 손상 없이 유지되는 성질을 의미한다. 즉, 데이터의 신뢰성을 확보하기 위한 개념이다.

무결성 강화 방법
1. 트리거(Trigger)를 통한 무결성 강화
• **트리거(Trigger)**는 특정 테이블에서 INSERT, UPDATE, DELETE 같은 데이터 변경이 발생할 때 자동으로 실행되는 SQL 구문이다.
• 트리거를 사용하면 데이터가 입력되거나 수정될 때 자동으로 특정 조건을 검사하여 무결성을 유지할 수 있다.
• 예시:
• 고객의 잔액이 0 이하로 내려가면 자동으로 변경을 취소하는 트리거
• 직원의 급여가 특정 금액 이하로 내려가지 않도록 제한하는 트리거
2. 애플리케이션을 통한 무결성 강화
• 데이터베이스 자체가 아니라 **애플리케이션 코드(예: Java, Python, C# 등)**를 통해 데이터의 무결성을 보장하는 방법이다.
• 예를 들어, 사용자가 입력한 데이터가 올바른지 애플리케이션에서 검증하고, 잘못된 데이터는 데이터베이스에 저장되지 않도록 할 수 있다.
• 예시:
• 회원가입 시 중복된 이메일이 없는지 애플리케이션에서 검사한 후 저장
• 쇼핑몰에서 재고 수량이 부족하면 주문 처리를 막는 로직
3. 제약 조건(Constraint)을 이용한 무결성 강화
• **제약 조건(Constraint)**은 데이터베이스에서 특정 규칙을 설정하여 무결성을 유지하는 방법이다.
• 대표적인 제약 조건:
• PRIMARY KEY: 테이블의 각 행이 고유해야 함
• FOREIGN KEY: 다른 테이블과의 관계를 유지
• UNIQUE: 중복 값을 허용하지 않음
• NOT NULL: 반드시 값이 입력되어야 함
• CHECK: 특정 조건을 만족해야 저장 가능
• 예시:
• 학생의 학번이 중복되지 않도록 PRIMARY KEY 설정
• 주문 테이블에서 존재하지 않는 고객 ID를 참조하지 않도록 FOREIGN KEY 설정
4. 조회 조건을 통한 무결성 강화
• 데이터를 조회할 때 올바른 조건을 적용하여 정확한 데이터만 가져오는 방법
• 이는 데이터 입력과는 직접적인 관련이 없지만, 잘못된 데이터가 조회되지 않도록 방지할 수 있다.
• 예시:
• 회원 목록을 조회할 때 탈퇴한 회원을 제외하고 가져오기 (WHERE status = 'active')
• 미납된 주문 내역만 가져오도록 조건을 설정하기 (WHERE payment_status = 'unpaid')

정리
• 트리거(Trigger): 특정 이벤트 발생 시 자동 실행하여 데이터 검증
• 애플리케이션: 코드에서 데이터를 검증하여 무결성 유지
• 제약 조건(Constraint): 데이터베이스 차원에서 무결성을 보장


각 방법을 조합하면 더욱 강력한 무결성 관리를 할 수 있다.

병행성이 여기서 긍정적인 말이야 부정적인 말이야? 그리고 로깅이 무슨 말이야?

로킹의 단위가 작아지면 병행성 수준이 높아진다. 
즉, 작은 단위로 수행할 수 있어 병행(동시에 수행할 수 있는 프로세스) 수준이 높아진다.

더 빨리 뭘 처리할 수 있다는 말이야? 로깅이 무슨 말인데?

🔹 병행성 (Concurrency) → 긍정적인 말일까, 부정적인 말일까?
➡ 긍정적인 개념이야! 🎯

병행성이 높아진다는 것은 여러 개의 프로세스(작업)를 동시에 실행할 수 있다는 의미야.
즉, 성능이 좋아지고, 시스템 자원을 효율적으로 사용할 수 있음을 의미하기 때문에 긍정적인 개념이야.
💡 예시:
✔ "로킹의 단위가 작아지면 병행성 수준이 높아진다."

여기서 로킹 단위가 작아진다는 건 데이터를 잠그는 범위가 줄어든다는 뜻
즉, 여러 프로세스가 더 자유롭게 동시에 실행될 수 있음 → 처리 속도가 빨라짐!
🔹 로깅 (Logging)이란?
➡ **"기록을 남기는 것"**을 의미해!

시스템에서 발생하는 이벤트, 트랜잭션, 오류 등의 정보를 로그(log) 파일에 저장하는 것
데이터베이스, 서버, 애플리케이션 등에서 **추적(Tracking)과 문제 해결(Debugging)**을 위해 사용돼
💡 예시:
✔ "데이터베이스에서 로깅을 활성화하면 모든 변경 사항이 기록된다."

트랜잭션이 언제, 어떻게 실행되었는지 추적 가능
장애 발생 시 데이터 복구 가능
🔹 결론:
병행성 (Concurrency) → 긍정적인 개념 (작업을 더 빠르게 수행 가능)
로깅 (Logging) → 기록을 남기는 것 (트랜잭션, 오류 등을 추적하는 용도)
📌 즉, 로킹 단위가 작아지면 병행성이 증가해서 더 많은 작업을 동시에 처리할 수 있어, 결과적으로 성능이 향상되는 거야! 
 
 
인터페이스 구현 시 사용하는 기술 중 다음 내용이 설명하는 것은?

자바스크립트를 사용한 비동기 통신 기술로 클라이언트와 서버 간에 XML 데이터를 주고받는 기술

AJAX

다른 보기인 GREEDY, TRIGGER, PROCEDURE은 어떤 건지 설명해줘 

1. AJAX (Asynchronous JavaScript and XML)
자바스크립트를 사용한 비동기 통신 기술
서버와 클라이언트 간에 XML, JSON 등의 데이터를 주고받음
웹페이지를 새로고침하지 않고도 데이터를 불러올 수 있음
예: 검색 자동완성, 실시간 채팅


2. GREEDY (탐욕 알고리즘)
최적해를 구하는 알고리즘 기법 중 하나
매 순간 **가장 좋은 선택(최적의 해)**을 하는 방식
하지만 항상 최적의 결과를 보장하지는 않음
예: 거스름돈 문제, 다익스트라 알고리즘


3. TRIGGER (트리거)
**데이터베이스(DBMS)**에서 특정 조건이 충족될 때 자동으로 실행되는 명령어
주로 데이터 변경(INSERT, UPDATE, DELETE) 시 특정 작업을 수행
예: 직원이 퇴사하면 자동으로 관련 데이터 삭제


4. PROCEDURE (저장 프로시저)
데이터베이스에서 미리 저장해 놓고 실행할 수 있는 SQL 문장의 집합
매번 같은 SQL을 실행하는 대신, 프로시저를 호출하면 됨
장점: 성능 향상, 코드 재사용 가능
예: 사용자 로그인 시 인증 절차를 수행하는 프로시저

정리
AJAX → 비동기 통신 기술
GREEDY → 탐욕 알고리즘 (매 순간 최적 선택)
TRIGGER → DB에서 자동 실행되는 명령어
PROCEDURE → DB에서 미리 저장된 SQL 실행
 
 
TCP가 뭐가 전송되는데?

TCP/IP 프로토콜 중 전송 계층 프로토콜은?
Http, SMTP, FTP, TCP

TCP가 전송하는 것

TCP(Transmission Control Protocol)는 데이터 패킷을 신뢰성 있게 전송하는 프로토콜입니다.
애플리케이션 계층에서 전달받은 데이터를 **세그먼트(Segment)**로 나누고, 이를 IP 프로토콜을 통해 목적지로 보냅니다.

TCP는 신뢰성 보장을 위해 다음과 같은 기능을 수행합니다.
• 패킷 분할 및 재조립: 데이터를 작은 단위로 나누어 전송하고, 도착한 데이터를 다시 원래대로 조립
• 오류 검사 및 복구: 손상된 데이터 재전송
• 흐름 제어: 송신 속도를 조절하여 네트워크 과부하 방지
• 혼잡 제어: 네트워크 트래픽이 많을 경우 전송 속도를 조절

전송 계층 프로토콜

TCP/IP 프로토콜 중 전송 계층 프로토콜은?
✅ TCP, UDP

다른 선택지들의 계층은 다음과 같습니다.
• ❌ HTTP, SMTP, FTP → 애플리케이션 계층
• ✅ TCP → 전송 계층

즉, TCP는 전송 계층 프로토콜이며, HTTP, SMTP, FTP는 애플리케이션 계층 프로토콜입니다.

제1정규형 (원자), 제2정규형(부분함수종속적), 제3정규형(이행적함수종속적), boy(후보키제거), 4(다치종속제거 여러값이 있어서 죽음 4), 5(조인종속 joy)

이 문제도 틀림
정규화과정에서 다치 종속을 제거한 상태에 해당하는 것은 무엇인가?
제5정규형, 제4정규형, 보이스 코트 정규형, 제1정규형

웹서비스 프로토콜에 해당하지 않는 것은?
Https, http, s-http, smtp
왜 smtp는 웹서비스프로토콜이 아니고 이게 뭔데?

SMTP (Simple Mail Transfer Protocol)는 웹 서비스 프로토콜이 아니라 이메일 전송을 위한 프로토콜입니다

웹 서비스 프로토콜
• HTTP (HyperText Transfer Protocol): 웹 브라우저와 웹 서버 간에 데이터를 주고받는 프로토콜
• HTTPS (HTTP Secure): HTTP에 SSL/TLS 암호화를 적용한 보안 프로토콜
S-HTTP (Secure HTTP): 개별 메시지 단위로 암호화하는 보안 HTTP 프로토콜

❌ SMTP (Simple Mail Transfer Protocol)
• 이메일을 송신하는 데 사용되는 프로토콜
• 클라이언트(사용자) → 메일 서버 또는 메일 서버 간 이메일 전송을 담당
• 웹 브라우저가 아닌 메일 서버에서 동작

즉, SMTP는 웹 브라우징이나 API 호출에 사용되지 않고 이메일 전송 용도이므로 웹 서비스 프로토콜에 해당하지 않습니다.

TensorFlow
구글에서 개발한 오픈 소스 기계 학습 (machine learning) 엔진이다.
텐서플로는 c++언어로 작성되었고 파이썬 응용 프로그래밍 인터페이스를 제공한다.


왜 IP가 비신뢰성과 비연결성이 특징이야?
IP(Internet Protocol)가 **비신뢰성(Unreliable)**과 **비연결성(Connectionless)**을 가지는 이유는 다음과 같아.

1. 비신뢰성(Unreliable)

IP는 데이터를 전달할 뿐, 정확한 도착을 보장하지 않음.
즉, 패킷이 손실되거나 순서가 뒤바뀌어도 자체적으로 복구하지 않아.

비신뢰적인 이유
• 오류 제어 없음 → 패킷이 손실되거나 손상되어도 IP는 자동으로 재전송하지 않음.
• 흐름 제어 없음 → 송신 속도가 빠르고, 수신 속도가 느려도 조절하지 않음.
• 순서 보장 없음 → 여러 개의 패킷이 전송될 때 도착 순서가 바뀔 수 있음.

➡ 해결 방법: 신뢰성이 필요한 경우 TCP(Transmission Control Protocol) 같은 상위 계층 프로토콜이 오류 검출 및 재전송을 담당함.

2. 비연결성(Connectionless)

IP는 데이터를 보낼 때 사전에 연결을 설정하지 않음.
즉, 각 패킷이 독립적으로 전달되며, 서로 다른 경로로 이동할 수도 있음.

비연결적인 이유
• 패킷마다 목적지 결정 → 각 패킷은 독립적으로 IP 헤더의 목적지 주소를 기반으로 라우팅됨.
• 경로가 다를 수 있음 → 동일한 출발지-목적지라도 네트워크 상태에 따라 다른 경로로 이동할 수 있음.
• 전용 회선이 없음 → 전화망(PSTN)처럼 통신 전에 연결을 설정하지 않고, 필요할 때마다 패킷을 보냄.

➡ 해결 방법: 연결이 필요한 경우 TCP가 연결 설정(3-way handshake)을 수행하여 신뢰성을 보장함.

정리

특징 설명 보완 방법
비신뢰성 패킷 손실, 순서 뒤바뀜, 흐름 제어 없음 TCP가 오류 검출 및 재전송
비연결성 패킷마다 독립적으로 전송, 사전 연결 없음 TCP가 연결 설정(3-way handshake)

IP가 이렇게 동작하는 이유는 최대한 빠르게 데이터를 전달하는 것이 목표이기 때문이야. 신뢰성과 연결을 필요로 하면 TCP 같은 상위 계층 프로토콜이 이를 보완하는 구조라고 보면 돼!

왜 ARP가 네트워크 계층에 속하는거야? 설명해줘
IPSec, ARP, IP (네트워크 계층)

ATM은 데이터 계층에 속한다는데 이것도 설명해줘

1. ARP가 네트워크 계층에 속하는 이유

Resolution은 여기서 “해결” 또는 “변환”이라는 의미로 쓰여.

ARP(Address Resolution Protocol)는 IP 주소 → MAC 주소를 매핑하는 프로토콜이야.

네트워크 계층에서 ARP가 필요한 이유
• IP 주소는 네트워크 계층에서 사용되지만, 실제 데이터 전송은 **데이터 링크 계층(MAC 주소 기반)**에서 이루어짐.
• 패킷을 목적지까지 보내려면 IP 주소에 해당하는 MAC 주소를 알아야 하는데, 이때 ARP가 사용됨.
• ARP는 IP 패킷을 전달하기 위해 필요한 MAC 주소를 찾는 역할을 하므로, 네트워크 계층에 속하지만, 데이터 링크 계층과도 밀접한 관련이 있음.

IPSec, ARP, IP가 네트워크 계층에 속하는 이유
• IP (Internet Protocol): 데이터를 패킷 단위로 네트워크를 통해 전송하는 핵심 프로토콜.
• IPSec (IP Security): 네트워크 계층에서 보안을 제공하는 프로토콜.
• ARP (Address Resolution Protocol): IP 주소를 MAC 주소로 변환하여 패킷을 실제로 전송 가능하게 함.

2. ATM이 데이터 링크 계층에 속하는 이유
**ATM (Asynchronous Transfer Mode)**은 네트워크에서 데이터를 **고정된 크기의 셀(Cell)**로 전송하는 방식이야.
비동기 전송 방식

ATM이 데이터 링크 계층에 속하는 이유
• ATM은 데이터 전송을 위한 물리적인 경로 설정 및 데이터 프레이밍을 담당함.
• 전송 단위를 **고정 크기(53바이트 셀)**로 나누어 일정한 속도로 전송하는 것이 특징.
• 데이터 링크 계층의 역할인 에러 감지, 흐름 제어, 프레임 전송을 수행함.
• IP와 같은 네트워크 계층의 프로토콜과 함께 작동하여 데이터를 전송함.

즉, ATM은 네트워크 계층의 데이터 전송을 돕는 역할을 하므로 데이터 링크 계층에 속하는 거야.

인터넷의 필수요소가 보안이 아니라는데 종단시스템은 또 뭐야?
통신링크, ip주소, 종단시스템 (필수요소들)

인터넷의 필수 요소로 보안을 포함하지 않는 것은, 인터넷이 기본적으로 연결성과 데이터 전송을 목표로 하기 때문이야. 보안은 중요한 요소지만, 필수적으로 갖춰야 인터넷이 작동하는 것은 아니지.

인터넷의 필수 요소
1. 통신 링크 (Communication Links):
• 데이터를 전달하는 물리적인 경로 (광섬유, Wi-Fi, 이더넷 등).
2. IP 주소 (IP Address):
• 네트워크 상에서 각 장치를 식별하는 고유한 주소.
3. 종단 시스템 (End Systems):
• 인터넷에 연결된 장치들 (PC, 스마트폰, 서버 등).

종단 시스템 (End Systems)이란?
네트워크에서 데이터를 송·수신하는 장치를 말해. 예를 들어, 네가 사용하는 스마트폰, 노트북, 웹 서버 같은 것들이야. 결국 인터넷은 여러 종단 시스템이 통신 링크를 통해 IP 주소로 데이터를 주고받는 구조로 작동하는 거지.


접근통제보안정책에 해당하지 않는 것은 무엇인가?
Dac, IDC, mac, Rbac
내답 mac
정답 IDC

접근 통제 보안 정책(Access Control Security Policies)에 대해 각 보기(DAC, IDC, MAC, RBAC)를 설명해 줄게.

✅ 1. DAC (Discretionary Access Control, 임의적 접근 통제)
• 사용자가 직접 권한을 부여하거나 변경할 수 있는 방식
• 파일의 소유자가 다른 사용자에게 읽기/쓰기 등의 권한을 부여할 수 있음
• 예시:
Windows에서 파일 속성에서 특정 사용자에게 읽기/쓰기 권한을 부여하는 경우

✅ 2. MAC (Mandatory Access Control, 강제적 접근 통제)
보안 등급(Security Level)에 따라 접근이 결정되는 방식
• 사용자가 직접 권한을 변경할 수 없음
주로 군사/정부 기관에서 사용
• 예시:
• 기밀문서(Top Secret)는 보안 등급이 낮은 사용자는 접근 불가

✅ 3. RBAC (Role-Based Access Control, 역할 기반 접근 통제)
• 사용자의 역할(Role)에 따라 권한을 부여하는 방식
• 개별 사용자에게 직접 권한을 부여하는 것이 아니라, 역할(Role)을 만들고 역할별로 권한을 부여함
• 예시:
• 회사에서 ‘일반 직원’은 문서 조회만 가능하고, ‘관리자’는 문서 수정이 가능한 경우

❌ 4. IDC (해당 없음)
• IDC는 보안 정책이 아님
• 보통 **Internet Data Center(인터넷 데이터 센터)**를 의미
• 다른 보기들은 접근 통제 방식인데, IDC는 보안 정책이 아니므로 정답

✅ 정답: IDC

IDC는 보안 정책이 아니므로 접근통제 보안정책에 해당하지 않는다.

FDDI : 토큰링기반, 백업용 토큰 링 추가, 넓은 지역을 광섬유로 연결하는 네트워크라는데 토큰링이 뭐야? 이 네트워크에 대해 쉽게 설명해줘

FDDI란?
**FDDI(Fiber Distributed Data Interface)**는 광섬유(Fiber Optic)를 이용한 네트워크 기술로, 빠르고 안정적인 데이터 전송을 위해 사용됩니다. 주로 **대규모 네트워크(기업, 캠퍼스, 도시 등)**에서 사용되며, 데이터 전송 속도는 100Mbps입니다.

토큰링(Token Ring)이란?

FDDI는 **토큰링(Token Ring)**이라는 방식을 기반으로 합니다.

1. 토큰(Token)이란?
• 네트워크에서 데이터를 보낼 수 있는 허가권(권한) 같은 것
• 네트워크에 연결된 컴퓨터들이 토큰을 돌려가며 사용
• 토큰을 가진 컴퓨터만 데이터를 보낼 수 있음
2. 토큰링 방식이 어떻게 작동하는지?
• 모든 컴퓨터가 원형(링) 구조로 연결됨
• 하나의 **토큰(Token)**이 네트워크를 계속 순환함
• 데이터가 필요 없는 컴퓨터는 토큰을 그냥 넘김
• 데이터를 보내야 하는 컴퓨터는 토큰을 가져가서 데이터를 목적지까지 전송

✅ 특징
✔ 충돌(Conflict) 없이 안정적인 네트워크 운영 가능
✔ 순서대로 데이터가 전달되므로 효율적

FDDI의 특징
1. 백업용 토큰 링 추가
FDDI는 **이중 링 구조(Dual Ring)**를 사용
• 하나의 링이 고장 나도 **백업 링(보조 링)**이 작동하여 네트워크 유지
2. 넓은 지역을 연결 가능
• 기존 토큰링 네트워크보다 **더 넓은 거리(최대 200km)**를 지원
• 기업, 대학 캠퍼스, 공장, 도시 네트워크에 적합
3. 광섬유 사용
기존의 구리선(Copper)보다 빠르고 노이즈에 강함
• 데이터 전송 속도: 100Mbps

FDDI 쉽게 이해하기

▶ 네트워크가 ‘전철’이라고 생각해보자!
• 토큰(Token) = 전철 승차권
→ 승차권이 있어야 전철(데이터)을 보낼 수 있음
• 토큰링(Token Ring) = 순환하는 전철 노선
→ 전철이 순환선으로 계속 돌면서, 사람들이 순서대로 탑승(데이터 전송)
• FDDI = 이중 순환선(2개의 전철 노선)
→ 한 노선이 고장 나면 예비 노선이 있어서 계속 운행 가능

✅ 정리하면?
FDDI는 광섬유로 연결된 빠르고 안정적인 네트워크이며, **토큰링 방식(전철처럼 순서대로 데이터 전송)**을 사용하여 충돌 없이 효율적으로 동작합니다.

다음 중 SW 개발 보안 특성에 해당하지 않는 것은 무엇인가?
Non-repudiation
Integrity
Sharing
Availabilty


내답 availability 틀림 가용성
정답 Sharing

Non-repudiation (부인 방지)란?

Non-repudiation은 어떤 행위나 이벤트가 발생했음을 부인할 수 없도록 보장하는 보안 특성입니다. 즉, 시스템에서 발생한 특정 행위(예: 메시지 전송, 데이터 변경 등)가 나중에 부정되지 않도록 증거를 남기는 것을 의미합니다.

예제
• 전자 서명(Digital Signature)
→ 문서를 서명한 사람이 나중에 “내가 서명한 게 아니다”라고 주장할 수 없도록 보장함.
• 이메일 송·수신 기록(Log Recording)
→ 송신자가 이메일을 보냈음을 나중에 부정할 수 없도록 로그를 저장함.
• 블록체인 거래 기록
→ 한 번 기록된 거래는 변경할 수 없고, 모든 거래 내역이 남아 있기 때문에 거래를 부인할 수 없음.

SW 개발 보안 3대 요소 (CIA triad)

소프트웨어 보안의 기본 특성은 다음과 같습니다.
1. Confidentiality (기밀성) → 허가된 사용자만 정보에 접근 가능
2. Integrity (무결성) → 데이터가 변조되지 않고 정확성을 유지
3. Availability (가용성) → 필요할 때 정보와 시스템을 사용할 수 있음

문제에서 “Sharing”이 보안 특성이 아닌 이유

**Sharing(공유)**은 시스템의 보안 요소라기보다는 운영 방식이나 개념적인 요소입니다. 보안 특성은 보안을 유지하는 목적을 가지지만, Sharing은 오히려 정보 접근을 쉽게 만들어 보안 위험을 증가시킬 수 있습니다.

✅ 정답: Sharing (공유) → 보안 특성이 아님

Application 응용계층
주요프로토콜: Http, FTP, Telnet, DNS

DNS(도메인 네임 시스템, Domain Name System)는 도메인 이름을 IP 주소로 변환하는 역할을 합니다.

네트워크 엑세스 계층:
물리적 장치들을 연결하기 위한 기계적, 전기적, 물리적계층 연결
주요 프로토콜: CSMA/CD, MAC, LAN

CSMA/CD (Carrier Sense Multiple Access with Collision Detection)는 이더넷(Ethernet)에서 충돌을 감지하고 데이터 전송을 조정하는 프로토콜입니다.



프로그램 개발에서 Spiral Model과 Evolutionary Model은 소프트웨어 개발의 접근 방식 또는 개발 모델을 의미합니다. 각각에 대해 간단히 설명드리면:

Spiral Model (나선형 모델):

개념: 이 모델은 반복적이고 점진적인 개발 접근법으로, 각 개발 주기가 '나선형'으로 진행됩니다. 초기 개발 단계에서는 간단한 프로토타입을 만들고, 이후 각 단계에서 점차적으로 소프트웨어를 발전시킵니다.
특징: 위험 관리(risk management)를 강조하며, 개발이 진행될수록 시스템을 반복적으로 개선하고 업데이트합니다.
주요 단계: 계획 수립, 위험 분석, 개발 및 테스트, 평가 및 피드백. 이 네 단계를 반복하면서 점점 더 완성된 시스템을 만들어 나갑니다.

Evolutionary Model (진화 모델):

개념: 이 모델은 소프트웨어가 반복적으로 진화하면서 개발되는 접근법입니다. 초기에는 기본적인 기능을 갖춘 버전을 출시하고, 사용자 피드백을 바탕으로 점진적으로 개선해 나갑니다.
특징: 소프트웨어가 작은 부분부터 개발되며, 점진적인 개선과 변경을 통해 시스템을 완성해 갑니다. 주로 요구 사항이 명확하지 않거나 변동이 큰 경우에 유용합니다.
주요 특징: 초기 버전이 사용자에게 제공되고, 이후에 피드백을 받아 점차 개선됩니다. 이는 프로토타입 모델과 비슷하지만, 더 지속적이고 반복적인 진화를 강조합니다.
두 모델 모두 반복적이고 점진적인 개발을 강조하지만, Spiral Model은 위험 분석에 더 집중하고, Evolutionary Model은 주로 사용자 피드백을 통해 소프트웨어를 개선하는 데 중점을 둡니다.


JRP, JAD를 통하여 짧은 개발주기동안 소프트웨어를 개발하는 모델이 RAD (RAPID APPLICATION MODEL)이라는데 JRP랑 JAD가 뭔지 그리고 RAD에 대해서도 설명해줄래?

JRP와 JAD는 소프트웨어 개발 프로세스에서 사용자 참여를 강조하는 기법으로, 특히 RAD (Rapid Application Development) 모델에서 중요한 역할을 합니다. 각각의 용어와 RAD 모델에 대해 간단히 설명하겠습니다.

1. JRP (Joint Requirements Planning):
개념: JRP는 소프트웨어 개발 프로젝트에서 사용자와 개발자가 함께 모여 요구 사항을 도출하는 기법입니다. 주요 목표는 사용자의 요구를 명확히 이해하고, 개발자가 요구 사항을 잘 파악하여 개발 방향을 설정하는 것입니다.

특징:
사용자의 요구 사항을 명확히 이해하고, 이를 개발 과정에 반영하기 위해 사용자와 개발자가 긴밀히 협력합니다.
회의를 통해 다양한 아이디어를 공유하고, 우선순위에 따라 요구 사항을 정리합니다.
종종 워크숍 형식으로 진행되며, 사용자의 의견을 직접적으로 반영하는 것이 특징입니다.

2. JAD (Joint Application Development):
개념: JAD는 JRP에서 발전된 형태로, 주로 소프트웨어 시스템을 설계하고 개발하는 과정에서 사용자의 참여를 강조하는 기법입니다. 이 기법에서는 사용자와 개발자가 함께 회의를 통해 시스템의 요구 사항과 기능을 정의하고, 시스템 설계 및 개발을 진행합니다.

특징:
개발자와 사용자가 함께 앉아 직접 설계를 논의하고 결정합니다.
집중적인 워크숍 방식으로 진행되며, 주로 고급 설계와 요구 사항 정의에 중점을 둡니다.
사용자와 개발자 간의 상호작용을 통해 명확한 시스템 사양을 도출해내는 과정이 중요합니다.
프로토타입 방식으로 개발을 진행할 수도 있습니다.

3. RAD (Rapid Application Development):
개념: RAD는 빠른 시간 안에 고품질의 소프트웨어를 개발하기 위해 프로토타입 개발 및 사용자 피드백을 빠르게 반영하는 애자일 기반의 소프트웨어 개발 모델입니다. RAD는 짧은 개발 주기와 사용자 참여를 중시하는 모델로, 기능이 우선인 소프트웨어 개발 방법론입니다.

특징:
짧은 개발 주기: 일반적으로 몇 주 안에 프로토타입을 만들고, 빠르게 수정하면서 개발을 진행합니다.
사용자 참여: 초기 개발 단계부터 끝날 때까지 사용자가 계속 참여하여 요구 사항을 빠르게 반영합니다. JRP나 JAD 세션을 통해 요구 사항을 도출하고, 피드백을 얻습니다.
프로토타입: 초기 프로토타입을 신속하게 개발하여, 사용자 피드백을 받으면서 점차적으로 시스템을 개선합니다.
소프트웨어 툴: RAD는 개발 도구와 프레임워크의 활용을 극대화하여 빠르게 애플리케이션을 개발합니다. GUI 기반의 도구나 RAD 툴(예: Microsoft Access, Visual Basic)을 사용해 개발 속도를 높입니다.
유연성: 요구 사항 변경이 자주 발생할 수 있기 때문에, 변경에 유연하게 대응할 수 있습니다.

RAD 프로세스:
요구 사항 정의: 사용자의 요구 사항을 빠르게 수집하고 분석합니다 (JRP, JAD 세션 활용).
프로토타입 개발: 초기 프로토타입을 빠르게 만들고 사용자의 피드백을 반영합니다.
사용자 평가 및 수정: 사용자가 프로토타입을 평가하고, 그에 따른 수정 작업을 반복합니다.
완성: 최종 버전을 개발하여 배포합니다.

RAD의 장점과 단점:
장점:
빠른 개발 주기와 빠른 피드백을 통해 짧은 시간 내에 프로덕트를 출시할 수 있습니다.
사용자 참여로 시스템의 품질과 사용자의 만족도를 높일 수 있습니다.
변경 관리가 용이하여 요구 사항이 변해도 빠르게 대응할 수 있습니다.

단점:
대규모 프로젝트에는 적용이 어려울 수 있습니다.
초기 개발에 많은 리소스를 투자해야 하므로 비용이 높을 수 있습니다.
긴밀한 협업이 필요하기 때문에, 팀워크나 커뮤니케이션이 중요한 요소입니다.

요약: JRP와 JAD는 모두 사용자와 개발자가 협력하여 소프트웨어 개발의 요구 사항을 도출하고 명확히 정의하는 기법입니다. 이들이 중요한 이유는 RAD 모델이 빠르게 발전하고 최종 결과물을 제공하는 데 중요한 역할을 하기 때문입니다. RAD는 빠른 개발, 프로토타입을 통한 사용자 피드백, 짧은 개발 주기를 강조하는 소프트웨어 개발 방법론입니다.
 
 
Thrashing이 무슨 뜻이야? 
정보처리기사에서 Thrashing의 해결방법으로는 working set, PFF (Page-Fault Frequency) 방식이 있다. 이러는데 Thrashing이 뭔지도 모르겠어 설명해줘 


Thrashing은 컴퓨터 시스템, 특히 운영 체제에서 메모리 관리와 관련된 개념입니다. 주로 가상 메모리 시스템에서 발생하며, 너무 많은 페이지 교체가 발생하는 상태를 의미합니다.

Thrashing이란?
Thrashing은 시스템이 필요한 데이터를 자주 페이지 교체하면서 너무 많은 시간을 소모하게 되는 현상입니다. 즉, CPU가 실제 작업을 수행하기보다는 메모리에서 데이터를 교체하는 데 대부분의 시간을 소비하는 상태입니다.


Thrashing의 해결 방법
Working Set 방식:

Working Set은 프로그램이 실행되는 동안 실제로 자주 사용하는 페이지들을 의미합니다.
이 방식은 필요한 메모리만큼만 할당하고, 나머지는 교체하여 메모리 효율을 높입니다.
PFF (Page-Fault Frequency) 방식:

PFF는 페이지 결함의 빈도를 기준으로 메모리 크기를 동적으로 조정하는 방법입니다.
페이지 결함 빈도가 너무 높으면 메모리를 늘리고, 낮으면 메모리를 줄여 Thrashing을 방지하는 방식입니다.

**페이지 교체 (Page Replacement)**는 가상 메모리 시스템에서 사용되는 개념으로, **물리적 메모리(RAM)**에 여유가 부족할 때, 사용하지 않는 메모리의 일부를 디스크에 저장하고, 필요할 때 다시 불러오는 과정을 의미합니다.
 
하향식 통합테스트의 경우 스텁 (STUB)를 사용한다는데 스텁이 뭐야?

**스텁 (Stub)**은 **하향식 통합 테스트 (Top-down integration testing)**에서 사용되는 대체 모듈입니다. 하향식 통합 테스트는 상위 모듈부터 테스트를 시작하고, 하위 모듈들을 점진적으로 통합하는 방식입니다. 이 과정에서 하위 모듈이 아직 개발되지 않았거나 완성되지 않은 경우에, 그 하위 모듈의 동작을 대체하는 코드로 사용되는 것이 바로 스텁입니다.

스텁 (Stub)의 역할
하위 모듈의 대체: 하향식 통합 테스트에서는 상위 모듈을 먼저 테스트하고 싶지만, 하위 모듈이 아직 구현되지 않았을 수 있습니다. 이때 하위 모듈을 대신할 수 있는 코드인 스텁을 사용하여 상위 모듈의 기능을 테스트합니다.

모듈 간의 상호작용 시뮬레이션: 스텁은 단순한 응답만 반환하는 방식으로, 하위 모듈이 정상적으로 동작하는 것처럼 시뮬레이션합니다. 실제 로직은 포함되지 않고, 대체로 함수 호출에 대한 간단한 응답만 제공하여 상위 모듈을 테스트할 수 있게 합니다.

상위 모듈의 독립적인 테스트 가능: 하위 모듈이 구현되지 않았더라도 스텁을 사용하면 상위 모듈의 기능을 독립적으로 테스트할 수 있기 때문에, 개발 초기 단계에서 테스트를 시작할 수 있습니다.

예시
상위 모듈: 사용자 로그인 처리
하위 모듈: 데이터베이스에서 사용자 정보 조회
데이터베이스 모듈이 아직 구현되지 않았다면, 스텁을 사용하여 데이터베이스 대신 고정된 사용자 정보를 반환하는 방식으로 상위 모듈인 로그인 처리를 테스트할 수 있습니다.
스텁과 목(Mock)의 차이점
스텁 (Stub): 주로 단순한 반환값을 제공하여, 상위 모듈이 하위 모듈을 호출했을 때 예상되는 응답만 반환합니다.
목 (Mock): 테스트에서 행위 기반으로 사용되며, 호출된 메소드나 함수의 동작을 확인할 수 있습니다. 즉, 목 객체는 호출된 메소드의 횟수나 파라미터를 검증할 수 있습니다.
요약:
**스텁 (Stub)**은 하향식 통합 테스트에서 하위 모듈이 구현되지 않았을 때 그 대체로 사용되는 코드입니다. 스텁은 실제 로직을 대신하지 않고, 주로 고정된 응답을 반환하여 상위 모듈을 테스트할 수 있도록 돕습니다.
 
 
워크스루: 
검토회의전에 명세서를 미리 배포하여 개발자가 코드를 읽고 동료가 결함을 발견하거나 개선안을 제시하는 사전검토회의다. 

"워크스루"는 사실 "훑어본다"는 뜻을 내포하고 있지만, 단순히 읽기만 하는 것이 아니라, 함께 논의하고 검토하는 활동을 포함합니다. 회의 전에 미리 자세히 검토하고 피드백을 주고받는 과정으로, 이로 인해 실제 회의에서 더 효과적인 논의가 이루어지도록 돕습니다.
 
교착상태(데드락, Deadlock)는 여러 프로세스가 서로 자원을 기다리며 무한 대기 상태에 빠지는 현상을 말해. 교착상태가 발생하려면 다음 네 가지 조건이 모두 만족되어야 해:
1. 상호 배제(Mutual Exclusion): 자원이 한 번에 한 프로세스만 사용할 수 있어야 해.
2. 점유와 대기(Hold and Wait): 자원을 점유한 프로세스가 추가 자원을 요청하며 대기해야 해.
3. 비선점(Non-preemption): 프로세스가 점유한 자원을 강제로 빼앗을 수 없어야 해.
4. 환형 대기(Circular Wait): 프로세스들이 원형으로 자원을 대기해야 해.

교착상태를 예방하기 위해서는 이 네 가지 조건 중 하나를 부정하면 돼. 그중 비선점 조건 부정은 프로세스가 점유한 자원을 강제로 회수할 수 있도록 하는 것을 의미해. 즉, 한 프로세스가 자원을 점유하고 있을 때, 다른 프로세스가 해당 자원을 필요로 하면 운영체제가 강제로 자원을 회수하여 다른 프로세스에 할당할 수 있도록 하는 거야. 이렇게 하면 비선점 조건이 성립하지 않아 교착상태를 예방할 수 있어.

그러나 현실적으로 모든 자원을 선점 가능하게 만드는 것은 어렵고, 시스템의 안정성과 효율성에 부정적인 영향을 미칠 수 있어. 따라서 교착상태 예방 기법은 시스템의 특성과 요구에 맞게 신중하게 적용해야 해.




유닉스의 환경변수를 출력하는 명령어 아닌 것은? 이러는데

Configenv, printenv, env, setenv 답은 setenv인데 유닉스의 환경변수가 어떤거를 말하는거야?

1. 유닉스의 환경 변수(Environment Variables)란?

유닉스에서 **환경 변수(environment variables)**는 시스템이나 사용자 세션에서 설정된 값으로, 프로그램 실행에 영향을 주는 변수야.

예를 들어:

echo $HOME  # 현재 사용자의 홈 디렉터리 출력
echo $PATH  # 실행 가능한 파일이 있는 디렉터리 목록 출력

대표적인 환경 변수

환경 변수 설명
HOME 사용자의 홈 디렉터리
PATH 실행 파일을 찾는 경로 목록
USER 현재 로그인한 사용자
SHELL 사용 중인 셸 프로그램 (ex: /bin/bash)
LANG 시스템 언어 설정
PWD 현재 작업 디렉터리

2. 주어진 명령어들의 역할
1. printenv → 환경 변수를 출력하는 명령어 ✅

printenv

→ 환경 변수 목록을 출력함.

2. env → 환경 변수를 출력하고 변경할 수 있는 명령어 ✅

env

→ 현재 설정된 환경 변수를 출력함.

env VAR=value command

→ 특정 환경 변수 값을 설정한 후 command 실행 가능.

3. configenv → 존재하지 않음 ❌
• 아마도 오타이거나 특정 시스템에서만 사용되는 커스텀 명령어일 가능성이 높아.
4. setenv → 유닉스 기본 명령어가 아님 ❌ (정답!)
• setenv는 **C 셸(CSH, TCSH)**에서 환경 변수를 설정할 때 사용되는 명령어야.
• 하지만 Bash, Zsh, Ksh 같은 대부분의 유닉스 셸에서는 setenv가 존재하지 않아!
• 대신 export VAR=value를 사용함.

3. 정답: setenv

✅ printenv, env는 환경 변수를 출력하는 유닉스 명령어.
❌ setenv는 Bash나 일반 유닉스 셸에서 환경 변수를 출력하는 명령어가 아님.
👉 따라서 정답은 setenv!




리눅스 명령어
cat: 화면 내용을 화면에 표시하는 명령어
Uptime: 시스템 가동시간과 현재 사용자 수, 평균 부하량 등을 확인하는 명령어
cp: 파일을 복사하는 명령어
Set: bash의 셀 변수를 관리하는 명령어
Last: 시스템부팅부터 현재까지의 모든 사용자의 로그인 로그아웃 정보표시 명령어


1. Bash란?

**Bash(Bourne Again Shell)**은 리눅스에서 가장 많이 사용하는 **셸(Shell)**이야. 셸은 사용자가 명령어를 입력하면 운영체제(OS)가 실행할 수 있도록 중간에서 해석해 주는 프로그램이야.

2. 셸 변수란?

셸 변수(Shell Variable)는 Bash에서 데이터를 저장하는 공간(변수)인데, 특정 프로세스나 스크립트에서 값을 저장하고 사용할 수 있어.

셸 변수의 역할
• 실행 중인 셸 세션(터미널)에서 특정 값을 저장하고 활용할 수 있어.
• 환경 변수를 설정하여 프로그램 실행 방식에 영향을 줄 수 있어.
• 스크립트에서 변수 값을 활용하여 자동화 작업을 할 수 있어.

셸 변수 예시

name="Cassie"  # name 변수에 "Cassie" 저장
echo $name     # 변수 값을 출력 ("Cassie")

3. 셸 변수를 관리하는 set 명령어

set 명령어는 현재 셸 세션에서 사용 중인 모든 변수와 함수 목록을 출력하거나, 변수를 설정하는 데 사용돼.

셸 변수를 확인하는 방법

set  # 현재 셸에 설정된 모든 변수와 함수 목록 출력

셸 변수 설정 예시

set -x  # 실행하는 명령어를 출력하면서 실행 (디버깅용)
set +x  # 실행하는 명령어 출력 안 함

셸 변수 관련 다른 명령어
• env: 현재 환경 변수 목록 출력
• export: 변수를 환경 변수로 설정 (다른 프로세스에서도 사용 가능)
• unset: 특정 변수를 삭제

4. 셸 변수를 관리하면 무슨 일이 일어날까?

셸 변수를 활용하면 환경을 설정하거나 스크립트에서 동적인 값을 다룰 수 있어. 예를 들어:

예제 1: 특정 환경 변수 설정

export PATH=$PATH:/home/user/bin  # 실행 가능한 경로 추가

이제 /home/user/bin 디렉터리에 있는 실행 파일을 터미널에서 직접 실행할 수 있어.

예제 2: 스크립트에서 변수 활용

#!/bin/bash
name="Cassie"
echo "Hello, $name!"

이렇게 하면 실행할 때 **Hello, Cassie!**가 출력돼.

5. 정리
• Bash는 리눅스에서 많이 사용하는 셸(Shell) 프로그램.
• 셸 변수는 현재 실행 중인 셸에서 값을 저장하고 활용하는 변수.
• set 명령어는 셸 변수를 확인하고 관리하는 역할.
• 변수 관리를 하면 환경 설정, 자동화 스크립트 작성, 프로그램 실행 방식 조정 등이 가능해.

Bash에서 변수를 다루면 자동화와 시스템 설정을 쉽게 할 수 있어서, 리눅스를 다룰 때 매우 유용해!

echo는 리눅스 명령어이면서 Bash 명령어이기도 해.

1. 리눅스 명령어로서의 echo

리눅스에서는 echo가 쉘 명령어(builtin command)와 외부 명령어(binary command) 둘 다 존재할 수 있어.
• 대부분의 리눅스 배포판에서는 echo가 기본적으로 Bash의 내장 명령어로 동작해.
• 하지만 /bin/echo 같은 실행 파일로도 존재할 수 있어.

예제: echo가 내장 명령어인지 확인하기

type echo

출력 예시:

echo is a shell builtin

→ Bash 내장 명령어로 동작 중임을 의미.

which echo

출력 예시:

/bin/echo

→ 시스템에 /bin/echo라는 외부 실행 파일도 존재함을 의미.

2. Bash 명령어로서의 echo

Bash에서는 echo가 **출력용 내장 명령어(builtin command)**로 동작해.

echo "Hello, World!"

출력:

Hello, World!

Bash 스크립트에서도 동일하게 사용돼.

3. 정리
• echo는 리눅스 명령어(시스템에 존재할 수도 있는 /bin/echo)
• 동시에 Bash의 내장 명령어(shell builtin)
• 일반적으로 Bash에서는 내장 명령어로 동작하지만, 필요하면 /bin/echo를 직접 실행할 수도 있음.

/bin/echo "Hello, World!"

→ 이렇게 하면 Bash의 echo가 아니라 시스템의 /bin/echo 실행 파일을 사용함.


CMD : 윈도우 명령 인터프리터 새 인스턴스 시작
CALL: 다른 일괄 프로그램 호출
CLS: 화면지우는 명령어



하드웨어관련기술
trustZone기술
하나의 프로세스 내에 일반 애플리케이션을 처리하는 일반 구역과 보안이 필요한 애플리케이션을 처리하는 보안구역으로 분할하는 기술이다. 
 
 
db관련기술
 
hadoop: 오픈소스를 기반으로한 분산 컴퓨터 플랫폼이다.
가상화된 대형스토리지를 형성하고 그 안에 보관된 거대한 데이터세트를 병렬로 처리할 수 있도록 개발된 자바 소프트웨어 프레임워크이다.
맵리듀스: 흩어져있는 데이터를 연관성있는 것들끼리 묶는 작업을 수행한 뒤 (map) , 중복된 데이터를 제거(reduce) 하고 원하는 데이터 추출 
스쿱 (sqoop):하둡과 관계형데이터베이스 간에 데이터를 전송할 수 있도록 설계된도구
 
tajo
우리나라가 주도하는 하둡기반의 분산 데이터 웨어하우스 프로젝트이다.
맵리듀스를 사용하지않고 sql를 사용한다.
 
FCFS First Come First Serve

SJF Shortest Job First

HRN Highest Response Next 우선순위 높은 것부터 계산법 있음

우선순위 = (대기 시간 + 서비스 처리 시간) / 서비스 처리 시간




메모리관리의 필요성이 아닌게 멀티프로그래밍 보기인줄 알았는데 그건 필요성이고 필요성인 것들이 동적 공유, 공간확보라는데 왜 주소 관리는 메모리관리의 필요성이 아닌지 설명해줘

메모리 관리의 필요성과 주소 관리의 차이

1. 메모리 관리의 필요성

메모리 관리가 필요한 이유는 CPU와 프로그램이 효율적으로 실행되도록 메모리를 할당하고 최적화하는 것입니다. 주요 필요성은 다음과 같습니다.

✅ 멀티프로그래밍 지원 → 여러 프로그램이 동시에 실행되도록 메모리를 효과적으로 할당
✅ 동적 공유 → 여러 프로세스가 같은 코드나 데이터(예: 라이브러리)를 공유할 수 있도록 관리
✅ 공간 확보 → 프로그램이 실행될 때 필요한 메모리를 확보하고, 사용이 끝나면 해제

2. 주소 관리가 메모리 관리의 필요성이 아닌 이유

주소 관리는 메모리 관리의 개념적인 일부일 수 있지만, 메모리 관리가 필요한 이유(필요성)는 아님입니다.

✔️ 주소 관리란?
프로그램이 실행될 때 사용하는 가상 주소를 실제 물리 주소로 변환하는 과정입니다.
이는 주소 변환(Address Translation), 주소 매핑(Address Mapping) 등을 포함하며, MMU(Memory Management Unit) 같은 하드웨어가 수행합니다.

❌ 하지만, 주소 관리는 메모리를 효율적으로 관리하기 위한 기술이지, 메모리 관리 자체가 필요한 이유는 아닙니다.
즉, 주소 관리는 “어떻게 메모리를 다룰 것인가”에 대한 개념이지, “왜 메모리 관리가 필요한가”를 설명하는 것은 아닙니다.

결론

✅ 멀티프로그래밍, 동적 공유, 공간 확보는 메모리 관리가 필요한 이유(필요성)
❌ 주소 관리는 메모리를 다루는 기술적인 방법이므로 필요성이 아님


DCL 사용자권한을 부여 또는 회수 C가 Control




DDL 대상이 아닌 것은?
스키마, 도메인, 테이블, 데이터베이스

답:

  • 데이터베이스


DDL 대상은 스키마, 도메인, 테이블, 뷰, 인덱스


DDL의 도메인(Domain)이란?

**도메인(Domain)**은 테이블의 컬럼(속성)에 허용되는 값의 범위를 의미합니다.
쉽게 말해, 데이터 타입과 제약 조건을 포함하는 값의 집합이라고 생각하면 됩니다.

1. 도메인의 개념
• 특정 컬럼이 가질 수 있는 값의 범위를 정의함.
• CHECK 제약 조건 등을 사용하여 특정 값만 허용할 수도 있음.
• 관계형 데이터베이스에서 데이터 무결성을 유지하는 중요한 요소.

2. 도메인의 예시

(1) 간단한 도메인 예시

CREATE TABLE 회원 (
    회원ID INT PRIMARY KEY,
    이름 VARCHAR(50),
    나이 INT CHECK (나이 >= 18),  -- 나이 도메인: 18 이상
    이메일 VARCHAR(100) UNIQUE  -- 이메일 도메인: 중복 불가
);

• 나이 컬럼은 정수형(INT)이며, 18 이상만 허용 → 도메인 설정
• 이메일 컬럼은 중복이 허용되지 않음(UNIQUE) → 도메인 설정

(2) 도메인을 별도로 정의하는 방법 (ANSI SQL 표준)

SQL 표준에서는 CREATE DOMAIN을 사용하여 별도로 도메인을 정의할 수도 있습니다.

CREATE DOMAIN 나이_도메인 INT CHECK (VALUE >= 18);

CREATE TABLE 회원 (
    회원ID INT PRIMARY KEY,
    이름 VARCHAR(50),
    나이 나이_도메인,  -- 나이_도메인 사용
    이메일 VARCHAR(100) UNIQUE
);

• CREATE DOMAIN을 사용하여 나이의 범위를 18 이상으로 제한
• 나이 컬럼에서 직접 나이_도메인을 사용함

이렇게 하면 여러 테이블에서 같은 도메인 규칙을 공유할 수 있어 유지보수가 쉬워짐.

3. 도메인 vs 데이터 타입 vs 제약 조건

개념 설명 예시
도메인(Domain) 속성이 가질 수 있는 값의 범위 나이(18 이상), 이메일(중복 불가)
데이터 타입(Data Type) 값의 형태 (정수, 문자열 등) INT, VARCHAR(50)
제약 조건(Constraint) 값의 유효성을 검증하는 규칙 CHECK, UNIQUE, NOT NULL

➡ **데이터 타입과 제약 조건을 포함하는 것이 “도메인”**입니다.

4. DDL에서 도메인이 포함되는 이유

DDL(Data Definition Language)은 데이터베이스 구조를 정의하는 언어입니다.
• CREATE TABLE, ALTER TABLE 등을 사용하여 테이블과 속성을 정의할 때
• 특정 컬럼에 허용할 값의 범위를 설정할 수 있음 (도메인 설정)
• 따라서, DDL의 대상에 “도메인”이 포함됨

결론

도메인(Domain)은 컬럼이 가질 수 있는 값의 범위를 의미하며,
데이터 타입과 제약 조건을 포함하는 개념입니다.
DDL을 사용하여 테이블을 정의할 때 컬럼의 도메인을 설정할 수 있으며,
별도의 CREATE DOMAIN 구문을 사용하여 정의할 수도 있습니다.

테스트 결함 관리 지표
결함 분포: 모듈이나 컴포넌트의 특정 속성에 해당하는 결함의 수를 측정하여 결함의 분포를 분석한다.
결함 추세: 테스트 진행 시간의 흐름에 따른 결함의 수를 측정하여 추세를 분석한다.
결함 에이징: 등록된 결함에 대해 특정한 결함 상태의 지속 시간을 측정하여 분석한다.




디자이너가 설계한 UI나 이미지를 코드화해 개발자와 공유 가능하게하는 도구는 Sketch 다.



JIRA : 프로젝트 일정관리

왜 프레임워크 특징이 Accurancy가 아닌지 설명해줘 다른 보기는 Reusability, Modularity, Inversion of Control인데 나는 프레임워크 특징이 아닌거 inversion of control이라 생각했는데 특징이래 이것도 설명해줘

프레임워크의 특징 중 “Inversion of Control (IoC)“이 포함되는 이유와 “Accuracy”가 포함되지 않는 이유에 대해 설명드리겠습니다.

1. Inversion of Control (IoC)
• Inversion of Control은 프레임워크의 핵심 개념 중 하나입니다. 이는 어플리케이션의 흐름을 제어하는 주체가 개발자가 아닌 프레임워크로 바뀌는 패턴을 의미합니다. 즉, 개발자가 작성한 코드는 특정한 방식으로 프레임워크 내에서 실행되며, 프레임워크가 코드 실행 순서를 제어합니다.
예를 들어, 스프링(Spring) 프레임워크에서는 IoC 컨테이너가 객체의 생성과 의존성 주입을 관리합니다. 개발자는 특정 객체를 생성하거나 제어하지 않고, 스프링이 이를 대신 수행하게 됩니다. 이러한 제어의 역전은 프레임워크가 제공하는 주요 특징 중 하나입니다.
• IoC는 프레임워크에서의 역할 분담과 관련이 있으며, 프레임워크를 효과적으로 사용할 수 있게 해주는 중요한 개념입니다.

2. Accuracy (정확성)
• Accuracy는 프레임워크의 특징으로 적합하지 않습니다. 왜냐하면 정확성은 일반적으로 소프트웨어나 알고리즘의 성능과 관련된 특성이지, 프레임워크가 제공하는 구조적 특성과는 관련이 없습니다. 프레임워크의 주요 특징은 소프트웨어 개발의 구조적 효율성을 높이고, 코드의 재사용성, 모듈성, 제어의 역전 등을 제공하는 것이지, 그 자체의 “정확성”에 초점을 맞추지 않습니다.
• 예를 들어, 프레임워크는 개발자가 시스템을 쉽게 구축하고 관리할 수 있도록 돕는 구조와 도구를 제공하는 것이지, 그 시스템의 계산 정확도나 결과의 정확성을 보장하는 것은 개발자와 해당 시스템의 문제입니다.

3. Reusability (재사용성)
• 프레임워크는 재사용성을 높이는 중요한 역할을 합니다. 동일한 기능을 구현하기 위해 매번 처음부터 코드를 작성하는 것이 아니라, 프레임워크 내에 미리 구현된 코드를 재사용하여 빠르고 효율적으로 개발할 수 있습니다.

4. Modularity (모듈성)
• 모듈성은 프레임워크의 또 다른 중요한 특성입니다. 프레임워크는 코드를 여러 모듈로 나누어 독립적으로 개발하고 관리할 수 있도록 하며, 이는 유지보수와 확장성을 용이하게 만듭니다.

결론:
• **Inversion of Control (IoC)**는 프레임워크의 중요한 특징 중 하나로, 프레임워크가 개발자에게 코드 흐름을 제어하는 권한을 넘겨주는 개념입니다. 이는 프레임워크가 제공하는 기능적 특성에 해당하며, 따라서 특징에 포함됩니다.
• 반면 Accuracy는 소프트웨어 품질의 성능과 관련된 개념이지 프레임워크의 구조적 특성과는 관련이 없기 때문에 프레임워크의 특징으로 적합하지 않습니다.


HIPO도표에 해당하지 않는 것이라는데

총체적, 가시적, 반복적, 세부적 보기에서 아닌게 뭐고 HIPO도표가 뭐야?


이거에 대해서 설명 좀 해줘 수평분할에 사용되는 기법이 데이터베이스에서 해시분할, 범위분할, 복합분할이고 부분분할은 아니라는데 아닌 이유도 설명해줘

수평 분할은 데이터베이스에서 하나의 테이블을 여러 개의 더 작은 테이블로 나누어 데이터를 분산시키는 방식입니다. 이를 통해 성능 향상, 관리 용이성, 데이터 로드 시간 단축 등을 목표로 합니다.

수평분할에 사용되는 기법은 크게 세 가지로 나눌 수 있습니다:
1. 해시 분할 (Hash Partitioning):
해시 함수를 사용하여 데이터를 일정한 수의 파티션으로 나누는 방식입니다. 각 데이터가 어느 파티션에 저장될지는 해시 함수의 결과에 따라 결정됩니다. 예를 들어, 사용자 ID를 해시 함수로 나누면 특정 ID에 해당하는 데이터가 일정한 파티션에 배분됩니다.
2. 범위 분할 (Range Partitioning):
데이터의 값을 기준으로 범위를 설정하고, 각 범위에 해당하는 데이터들을 분할하여 저장하는 방식입니다. 예를 들어, 날짜나 숫자 범위(1-100, 101-200 등)로 데이터를 나누는 방식이 될 수 있습니다.
3. 복합 분할 (Composite Partitioning):
두 가지 이상의 분할 기법을 결합한 방식입니다. 예를 들어, 범위 분할 후 해시 분할을 추가로 적용하거나, 해시 분할 후 범위 분할을 적용할 수 있습니다. 이를 통해 보다 세밀한 분할이 가능합니다.

**부분 분할 (Subpartitioning)**은 수평분할의 하위 개념이 아니라, 주로 파티션을 더 작은 단위로 나누는 과정입니다. 일반적으로, 부분 분할은 이미 수평분할이 적용된 데이터에 대해서 추가적인 분할을 하는 것이기 때문에 수평분할의 기법으로는 분류되지 않습니다.

이유:
부분 분할은 기존의 분할된 데이터(예: 범위 분할된 데이터)에 다시 한번 분할을 추가하는 과정으로, ‘분할’의 개념이 이미 적용된 상태에서 한 번 더 나누는 방식입니다. 따라서, 수평분할의 기법 자체로는 해시, 범위, 복합 분할이 주로 사용되며, 부분 분할은 ‘분할된 데이터에 대한 세분화’로 간주됩니다.


NDBMS Network DBMS
데이터를 네트워크 형태로 관리하는 데이터베이스시스템이다.
HDBMS 상하 종속관계 해결이 가능하지만 구성이 복잡하고 데이터 종속성은 해결하지 못한다.
모든 레코드의 관계는 1:1부터 N:M까지 모두 표현할 수 있다.

아, 그렇군요! 죄송합니다. NDBMS (네트워크 데이터베이스 관리 시스템)에 대해 이야기하고 있는 거였군요. 그럼 NDBMS에 대해 다시 설명드리겠습니다.

NDBMS(네트워크 데이터베이스 시스템)에서 “데이터 종속성 해결 불가”란 무엇인가?

NDBMS는 데이터를 네트워크 형태로 관리하는 시스템입니다. 데이터 간의 관계를 다대다(N:M) 관계까지 지원할 수 있습니다. 예를 들어, 하나의 엔티티(예: 학생)가 여러 다른 엔티티(예: 수업)와 관계를 맺을 수 있습니다.

데이터 종속성 문제

NDBMS에서는 데이터 종속성 문제를 해결하지 못한다고 말하는 이유는, 데이터의 중복과 데이터 수정 시 일관성 문제를 해결하기 어려운 구조 때문입니다.

예시: 학생과 수업 관계

학생과 수업의 관계를 네트워크 데이터베이스로 관리한다고 가정해봅시다. 한 학생이 여러 수업에 등록할 수 있고, 수업도 여러 학생과 관계를 맺을 수 있습니다. NDBMS에서는 이런 관계를 링크나 포인터로 연결합니다.
1. 학생-수업 관계
• 학생1은 수업A와 수업B를 듣고,
• 학생2는 수업A와 수업C를 듣고 있다고 합시다.
2. 데이터 종속성 문제
이때, 수업A와 수업B에 대한 정보가 중복되어 저장될 수 있습니다. 예를 들어, 학생1과 학생2가 각각 수업A를 듣는다면, 수업A에 대한 정보가 여러 곳에 중복되어 저장될 수 있습니다. 만약 수업A의 강사가 바뀌면, 수업A를 듣고 있는 모든 학생 정보를 수정해야 합니다.

왜 해결되지 않나?

NDBMS에서 데이터를 여러 곳에 중복 저장하면, 그 데이터를 수정할 때 일관성을 유지하기 어려워집니다. 예를 들어, 수업A의 강사가 바뀌었을 때, 수업A를 듣는 모든 학생들의 연결된 정보를 모두 수정해야 하기 때문에, 데이터가 일관되지 않게 될 수 있습니다. 자동으로 동기화되지 않기 때문입니다.

RDBMS와의 차이점

반면 **관계형 데이터베이스(RDBMS)**는 데이터를 정규화하여 중복을 최소화하고, 데이터의 변경을 자동으로 일관성 있게 관리할 수 있습니다. 예를 들어, 수업A의 강사가 바뀌면 수업 테이블에서 한 번만 수정하면 되며, 이 정보는 모든 관련 데이터에서 자동으로 반영됩니다.

결론

NDBMS에서는 데이터를 중복해서 저장하고 링크나 포인터로 관계를 맺기 때문에, 데이터 종속성 문제를 해결하지 못한다고 합니다. 즉, 데이터를 변경할 때 중복된 곳에서 일관성 있게 수정하지 않으면, 데이터 간에 불일치가 발생할 위험이 크다는 것입니다.



SSO(Single Sign-On)는 한 번의 로그인으로 여러 개의 서비스나 애플리케이션을 이용할 수 있도록 해주는 인증 방식이다.

예를 들어, 구글 계정으로 Gmail, YouTube, Google Drive 등에 각각 로그인하지 않고 한 번의 로그인으로 모두 접근할 수 있는 것이 SSO의 대표적인 예다.

장점:
• 사용자는 여러 개의 계정 정보를 기억할 필요가 없음
• 보안 강화 (중앙 집중식 관리로 패스워드 관리 용이)
• 로그인 절차 간소화 (사용자 경험 개선)

단점:
• SSO 시스템이 해킹당하면 여러 서비스가 동시에 위험해질 수 있음
• 특정 서비스에서 개별 로그아웃이 어려울 수 있음

기업 환경에서는 OAuth, SAML, OpenID Connect 같은 기술을 활용해 SSO를 구현하는 경우가 많다.


UI 종류에 해당하지 않는 것? 내답 틀림 1번

Cli, Nui, Gui, Sui

각각의 UI 유형을 설명해 줄게!

  1. CLI (Command Line Interface, 명령줄 인터페이스)
    • 텍스트 기반 인터페이스
    • 사용자가 명령어를 입력하여 시스템과 상호작용
    • 예: 터미널, 명령 프롬프트 (cmd), Bash
  2. NUI (Natural User Interface, 자연 사용자 인터페이스)
    • 사용자의 자연스러운 행동(제스처, 음성, 터치)으로 조작하는 인터페이스
    • 예: 터치스크린, 음성 인식 (Siri, Google Assistant), AR/VR 인터페이스
  3. GUI (Graphical User Interface, 그래픽 사용자 인터페이스)
    • 아이콘, 버튼, 창 등의 그래픽 요소로 상호작용하는 인터페이스
    • 예: Windows, macOS, 모바일 앱 UI
  4. SUI (???)
    • 일반적으로 사용되는 UI 개념이 아님


Sui가 인터페이스아니래



구현 검증 도구
xUnit Java(Junit), C++(CppUnit) 등 다양한 언어를 지원
STAF 다양한 환경을 지원
FitNess 웹기반
NTAF FitNess + STAF
watir Ruby 기반

이것들이 어떤 구현 검증 도구야?

이 도구들은 테스트 자동화 및 구현 검증을 위한 프레임워크이며, 각각 다른 방식으로 소프트웨어의 기능을 검증하는 역할을 합니다.
1. xUnit 계열
• JUnit (Java), CppUnit (C++) 등은 유닛 테스트(단위 테스트) 프레임워크로, 특정 모듈이나 클래스의 기능을 검증하는 데 사용됨.
• 다양한 프로그래밍 언어에서 지원하는 테스트 프레임워크들이 존재함 (예: NUnit(C#), PyUnit(Python) 등).

2. STAF (Software Testing Automation Framework)
다양한 플랫폼과 환경에서 테스트 자동화를 지원하는 프레임워크.
• 분산 환경에서 테스트를 실행하고 관리할 수 있는 기능 제공.

3. FitNess
웹 기반의 수행 테스트 프레임워크.
• 개발자와 비즈니스 사용자가 협력하여 테스트 가능한 사양을 문서화하고 실행할 수 있도록 설계됨.
• 테스트 주도 개발(TDD)과 행동 주도 개발(BDD) 스타일의 테스트 작성 가능.

4. NTAF (Next Generation Test Automation Framework)
FitNess + STAF의 조합으로, 두 가지 장점을 결합한 테스트 자동화 프레임워크.
• 다양한 환경에서 실행할 수 있는 기능 제공.

5. Watir (Web Application Testing in Ruby)
Ruby 기반의 웹 애플리케이션 테스트 프레임워크.
• 웹 브라우저를 제어하여 UI 테스트를 수행하며, Selenium과 유사한 역할을 함.

즉, 이 도구들은 소프트웨어 구현을 검증하고 자동화 테스트를 수행하는 다양한 테스트 프레임워크 및 도구라고 할 수 있습니다.

대칭키암호화
DES Data Enctyption Standard
64bit의 블록크기를 가지며 byte별로 1bit의 패리티 bit를 가진다. 
따라서, 실제 비밀키의 크기는 56bit는 16라운드를 진행한다.
 
AES Advanced Enctyption Standard
DES를 대체하는 미국의 표준 대칭키 블록 알고리즘이다. 
128bit의 블록 크기와 가변 길이 키 (128/192/256)를 가진다.
키의 길이에 따라 10/12/14라운드를 진행한다.
 
RC5
다양한 크기의 키, 블록, 라운드를 가질 수 있는 블록 암호화 알고리즘이다.
단순하고 빠르며 메모리 요구량이 낮은 편이다.
블록 크기: 32, 64, 128bit
키 크기: 0~2040bit
라운드: 0~255회
사용 연산: 덧셈, 뺄셈, 시프트, XOR
 
OPT OPTimal replacement
가장 오랫동안 사용하지 않을 페이지를 교체하는 기법
페이지 부재 횟수가 가장 적게 발생하는 가장 효율적인 알고리즘이다.
페이지 적중률 = 1 - (페이지 부재횟수 / 참조횟수)

구조패턴
Composite
객체들의 관계를 트리 구조로 구성하여 단일 객체와 복합객체를 동일하게 다루도록 하는 패턴이다.

Decorator
클래스 변경 없이 주어진 상황에 따라 기능을 추가하는 패턴이다.
기존 클래스의 메소드에 새로운 기능을 추가하거나 확장할 수 있다.

정보보안을 위한 접근통제 정책 종류에 해당하지 않는 것은?
1. 임의적 접근 통제
2. 데이터 전환 접근 통제
3. 강제적 접근 통제
4. 역할 기반 접근 통제

정답 2번

접근통제 정책의 구분
1. 임의적 접근통제정책(DAC ; Discretionary Access Control)
2. 강제적 접근통제정책(MAC ; Mandatory Access Control)
3. 역할기반 접근통제정책(RBAC ; Role-based AccessControl)
 
 

  • DAC → 사용자가 직접 권한 설정
  • MAC → 등급 기반으로 강제 제한
  • RBAC → 역할(부서/직급) 기반으로 관리

 
1. DAC (임의적 접근통제, Discretionary Access Control)
2. MAC (강제적 접근통제, Mandatory Access Control)
3. RBAC (역할 기반 접근통제 Role-Based Access Control)

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

기무가 (기무간으로 외우기)


네트워크 계층에 속하지 않는 것은?
ATM (atm은 Data계층에 속한다.)

IP, ARP, IPsec => 네트워크계층에 속한다
 
ARP (Address Resolution Protocol)
ARP는 네트워크 계층에서 사용되는 프로토콜로, IP 주소를 물리적인 MAC 주소로 변환하는 역할을 합니다.

예를 들어, 네트워크에서 데이터를 전송하려면 IP 주소를 MAC 주소로 변환해야 하는데, 이때 ARP가 사용됩니다.
주로 IPv4 네트워크에서 사용됩니다.
ARP는 OSI 모델에서는 데이터 링크 계층과 네트워크 계층 사이에서 동작한다고 볼 수 있습니다.


네, 맞습니다! 이렇게 생각하면 됩니다.

IP 주소와 MAC 주소의 차이
IP 주소 (Internet Protocol Address)

가상적인 주소: 네트워크에서 데이터를 전송하기 위해 논리적으로 할당된 주소입니다.
변경 가능: 네트워크 환경이나 장치 설정에 따라 쉽게 변경할 수 있습니다.
계층: OSI 모델의 네트워크 계층에서 사용됩니다.
형식: IPv4(예: 192.168.1.1) 또는 IPv6(예: 2001:db8::1).
역할:
장치가 인터넷이나 네트워크 상에서 데이터를 주고받을 때의 경로 지정 역할을 합니다.
"어디로 데이터를 보내야 하는가?"를 결정합니다.
MAC 주소 (Media Access Control Address)

물리적인 주소: 네트워크 인터페이스 카드(NIC)에 하드웨어적으로 부여된 고유한 식별자입니다.
고정적: 일반적으로 장치에 영구적으로 설정되어 있으며 변경이 어렵습니다. (단, 소프트웨어로 임시 변경 가능).
계층: OSI 모델의 데이터 링크 계층에서 사용됩니다.
형식: 6쌍의 16진수(예: 00:1A:2B:3C:4D:5E).
역할:
동일한 네트워크 내에서 장치를 식별합니다.
"이 데이터를 물리적으로 누구에게 보내야 하는가?"를 결정합니다.

간단한 비유
IP 주소: 집주소와 비슷합니다.
예: "서울시 강남구" (인터넷에서 특정 네트워크를 찾는 데 사용).
MAC 주소: 집에 있는 특정 사람의 이름과 같습니다.
예: "홍길동" (네트워크 안에서 특정 장치를 찾는 데 사용).
IP와 MAC 주소의 연결
ARP 프로토콜은 IP 주소를 이용해 해당 IP를 가진 장치의 MAC 주소를 찾아 데이터를 전달합니다.
데이터를 주고받을 때 네트워크 계층(IP)와 데이터 링크 계층(MAC)이 협력하여 데이터를 전달합니다.
이런 구조 덕분에, 네트워크는 유연하고 효율적으로 작동할 수 있습니다.
 


DRM
- 콘텐츠 제공자는 콘텐츠 분배자를 통해 소비자에게 콘텐츠를 제공한다.
- 패키저에서 콘텐츠와 메타 데이터를 패키징한다.
- 콘텐츠 분배자는 암호화된 데이터를 소비자에게
제공한다.

트리거 스트립트를 구현 시 commit, rollback를 사용할 수 없다. 
 


데이터베이스 정규화는 일반적으로 1차 정규화, 2차 정규화, 3차 정규화, BCNF 정규화 4차 정규화, 5차 정규화 단계로 나뉘어 집니다. 각 단계는 이전 단계를 기반으로 하여 테이블의 구조를 더욱 정규화하는 것을 의미합니다.

1차 정규화는 테이블의 컬럼들을 원자적(Atomic)인 값으로 구성하도록 하는 것입니다. 즉, 하나의 칼럼에 여러 개의 값이 들어가지 않도록 하여 중복을 방지합니다.

2차 정규화는 부분 함수 종속성(Partial functional dependency)을 제거하는 것입니다. 이는 테이블에서 기본 키가 아닌 다른 칼럼들이 기본 키의 일부에 의존하도록 하는 것을 말합니다.

3차 정규화는 이행적 함수 종속성(Transitive functional dependency)을 제거하는 것입니다. 이는 테이블에서 컬럼들 사이의 의존성이 불필요하게 복잡하게 얽혀 있는 경우를 의미합니다.

BCNF 정규화는 다치 종속성(Multi-valued dependency)을 제거하는 것을 의미합니다. 이는 테이블에서 한 컬럼의 값이 다른 칼럼의 값에 영향을 주는 경우를 말합니다.

이러한 정규화 과정을 통해 데이터베이스의 구조를 더욱 단순화하고, 중복 데이터나 일관성 없는 데이터를 방지하여 데이터의 무결성을 보장할 수 있게 됩니다.
출처: https://open-n-job.tistory.com/entry/DB-데이터베이스-정규화 [경험을 공유하는 N잡러:티스토리]




100% 나온다고함.

"결합도"라는 개념은 소프트웨어 공학에서 모듈 간의 의존성 정도를 나타냅니다. 결합도가 높다는 것은 한 모듈이 다른 모듈에 강하게 의존한다는 의미입니다. 일반적으로 결합도는 여러 종류가 있으며, 각각의 결합도는 서로 다른 정도의 의존성을 나타냅니다.
결합도의 종류는 다음과 같습니다:

  1. 내용 결합 (Content Coupling): 한 모듈다른 모듈의 내부 데이터나 구현에 직접 접근하는 경우입니다. 이 경우 두 모듈이 매우 강하게 결합되어 있으며, 한 모듈의 변경이 다른 모듈에 직접적인 영향을 미칩니다.
  2. 공통 결합 (Common Coupling): 두 모듈이 전역 변수를 공유하는 경우입니다. 데이터가 공유되기 때문에, 하나의 모듈에서 데이터가 변경되면 다른 모듈에서도 영향을 받을 수 있습니다.
  3. 외부 결합 (External Coupling): 두 모듈이 외부 데이터 구조를 공유하는 경우입니다. 이 경우도 모듈 간의 결합도가 높아질 수 있습니다.
  4. 순서 결합 (Control Coupling): 한 모듈이 다른 모듈의 제어 흐름을 영향을 미치는 경우입니다. 즉, 하나의 모듈이 다른 모듈에 특정 동작을 하도록 지시할 때 발생합니다.
  5. 데이터 결합 (Data Coupling): 두 모듈이 데이터를 인자로 주고받는 경우입니다. 이 경우 데이터는 서로 독립적이며, 결합도가 낮습니다.
  6. 무결합 (No Coupling): 모듈 간에 전혀 의존성이 없는 경우입니다. 이 경우 두 모듈은 완전히 독립적으로 작동합니다.

내용 결합도가 가장 높은 이유는 이 결합 형태가 두 모듈 간의 강한 의존성을 초래하기 때문입니다. 예를 들어, 한 모듈이 다른 모듈의 내부 데이터 구조를 변경하면, 해당 데이터를 사용하는 모든 모듈이 영향을 받게 됩니다. 따라서 내용 결합도는 소프트웨어의 유지보수성과 확장성을 저해할 수 있으며, 소프트웨어 개발에서는 피해야 할 결합도입니다.
결론적으로, 결합도는 소프트웨어 모듈 간의 상호작용과 의존성을 설명하며, 내용 결합도는 가장 높은 결합도 형태로, 모듈 간의 의존성이 강하다는 것을 의미합니다.
 
**인자
"인자"라는 용어는 프로그래밍에서 함수나 메서드가 호출될 때 그 함수나 메서드에 전달되는 값을 의미합니다.
 
 
 
 
출처: https://computer-choco.tistory.com/441

정보처리기사 필기 4과목 - 프로그래밍 언어 활용 (빈출 요점 정리)

정보처리기사 필기 빈출 개념과 기출문제를 정리하였습니다. 공부할 시간이 부족할 경우 아래의 개념을 먼저 학습해보시고, 기출문제들을 최소 3회차를 풀어볼 것을 권장합니다. (기출문제: http

computer-choco.tistory.com

 


메모리관리의 필요성이 아닌게 멀티프로그래밍 보기인줄 알았는데 그건 필요성이고 필요성인 것들이 동적 공유, 공간확보라는데 왜 주소 관리는 메모리관리의 필요성이 아닌지 설명해줘

반응형