[말랑 퀴즈] 26/04/05 해답
카테고리: MallangQuiz
태그: Quiz
제 말랑말랑 퀴즈 생성기는 이곳에서 확인하실 수 있습니다.
말랑말랑 퀴즈 — 해답지 ✅
날짜: 2026-04-05 문제 수: 5문제
Q1. 🟡 보통
문제: 다음 명제가 참(O)인지 거짓(X)인지 판단하라.
분산 서버를 설계할 때, 서로 자주 상호작용하는(응집도가 높은) 데이터를 서로 다른 서버에 분산 배치할수록 서버 간 통신 횟수가 줄어들어 성능이 향상된다.
정답: X
해설:
응집도(cohesion)는 데이터와 자주 연관되는 다른 데이터가 얼마나 많은지를 나타낸다. 응집도가 높은 데이터를 서로 다른 서버에 분산하면, 빈번한 상호작용마다 서버 간 메시지 전송이 발생하여 오히려 분산 처리 비용이 증가한다. 성능을 높이려면 반대로 응집도가 높은 데이터는 같은 서버에 두고, 응집도가 낮은 데이터(서로 상호작용이 드문 것)를 서로 다른 서버에 분산해야 분산 처리 횟수를 줄일 수 있다.
출처:
server/game_server/9/2026-03-20-game_server_9_7.md
Q2. 🟡 보통
문제: 빈칸을 채우시오.
컴퓨터 네트워크의 품질을 평가하는 세 가지 기준과 관련 공식을 설명한다.
- 네트워크 품질의 세 가지 기준: __①, __②, ___③
- 두 단말기 사이의 ②는 경로상 네트워크 기기의 ② 값을 모두 ___④한 값과 같다.
- 두 단말기 사이의 ①는 경로상 네트워크 기기 중 ___⑤ ① 값에 의해 결정된다.
- 무선 네트워크에서 전파 충돌을 방지하기 위해 사용하는 방식을 ___⑥이라 한다.
정답:
① 스루풋 (전송 속도, Throughput) ② 레이턴시 (전송 지연 시간, Latency) ③ 패킷 유실률 ④ 합산(총합) ⑤ 최소 ⑥ CSMA (Carrier Sense Multiple Access)
해설:
네트워크 품질은 스루풋·레이턴시·패킷 유실률 세 가지로 평가한다. 레이턴시는 경로상 기기를 모두 거치므로 각 기기의 지연 시간을 합산한 값이 된다(한국-남미 ping 측정에서 약 26개 기기를 거친 사례). 스루풋은 물이 좁은 파이프를 만나면 전체 흐름이 느려지는 것처럼, 경로에서 가장 느린 구간(병목)에 의해 결정된다. CSMA는 무선 환경에서 여러 기기의 신호가 충돌하지 않도록 전파를 보내기 전에 다른 기기의 전파 유무를 먼저 확인하는 방식으로, 이 과정이 레이턴시를 높이는 원인이 된다.
출처:
server/game_server/2/2025-12-03-game_server_2_5.md
Q3. 🟢 쉬움
문제: 다음 중 관계형 데이터베이스(RDBMS)와 NoSQL의 특성에 대한 설명으로 옳은 것은?
- A. RDBMS의 레코드는 트리나 구조체 형태를 가질 수 있어 유연한 스키마를 지원한다
- B. NoSQL의 레코드는 리스트나 배열 구조의 데이터이다
- C. RDBMS에서 레코드가 1억 개인 테이블에 새 필드를 추가할 때,
null을 허용하면 시스템 중단 없이 즉시 처리된다 - D. RDBMS에서 필드 구조를 변경할 때는 외래 키를 사용하더라도 복잡도가 높아질 수 있다
정답: D
해설:
A와 B는 서로 설명이 뒤바뀌었다. 레코드가 리스트·배열 구조인 것은 RDBMS이고, 트리·구조체 형태를 가질 수 있는 것은 NoSQL이다. C는 틀렸다 — null 허용 여부와 무관하게 1억 개 레코드 전체에 필드를 추가하려면 장시간 시스템이 멈출 수 있다. D가 정답으로, RDBMS는 외래 키를 사용하더라도 스키마 변경이 필요할 때마다 점점 복잡해질 수 있다.
출처:
server/game_server/8/2026-03-08-game_server_8_1.md
Q4. 🔴 어려움
문제: 분산 서버 환경에서 PVP(플레이어 간 전투)를 처리할 때 어려운 이유가 있다.
- PVP 상호작용이 분산 처리하기 까다로운 이유 4가지
- 일반적인 설계 결론
- 분산이 불가피한 경우 분산 기준
정답:
1. 분산 처리가 어려운 이유 4가지
| 요인 | 설명 |
|---|---|
| 정확성 | PVP는 간발의 차이로 승부가 결정되므로 결과가 정확해야 한다 |
| 높은 성능 | 빠른 반응 속도와 높은 처리량이 동시에 요구된다 |
| 빈번한 횟수 | 기관총 발사처럼 상호작용이 매우 잦을 수 있다 |
| 원자성 | 전투 결과가 모두 반영되거나 전혀 반영되지 않아야 한다(부분 반영 불가) |
추가로 지연 시간(레이턴시) 이 히트 판정에 큰 영향을 미친다는 점도 어려움을 더한다(서버 간 통신 지연이 생기면 히트 판정 정확도가 떨어진다).
2. 일반적인 설계 결론
이러한 요구사항들을 모두 만족하면서 여러 서버에 분산하는 것은 구현이 매우 복잡하고 실패 위험이 크다. 따라서 플레이어 간 상호작용은 분산하지 않는 것이 일반적이다 — 즉, 상호작용하는 플레이어들을 같은 서버 프로세스에서 처리한다.
3. 분산이 불가피한 경우의 기준
분산을 해야만 한다면, 응집도가 낮은 플레이어들을 분산해야 한다. 서로 상호작용할 일이 드문 플레이어들(예: 지리적으로 멀리 떨어진 지역의 플레이어들)을 서로 다른 서버에 배치하는 지역적 분산 처리가 대표적인 방법이다.
출처:
server/game_server/9/2026-03-29-game_server_10_5.md
Q5. 🟡 보통
문제: 아래 코드를 보고 Circle 파생 클래스에 대한 설명으로 옳은 것을 고르시오.
class Shape {
public:
virtual void draw() const = 0; // 순수 가상 함수
virtual void error(const string& msg); // 단순 가상 함수
int objectID() const; // 비가상 함수
};
class Circle : public Shape { /* draw()만 재정의, error/objectID는 건드리지 않음 */ };
- A.
Circle은draw()를 재정의하지 않아도 컴파일된다 - B.
Circle은error()를 반드시 재정의해야 한다 - C.
Circle은objectID()를 재정의하여 자신만의 구현을 가질 수 있다 - D.
Circle이error()를 재정의하지 않으면Shape::error()의 기본 구현이 그대로 사용된다
정답: D
해설:
- A (오답):
draw()는 순수 가상 함수(= 0)이므로 파생 클래스가 반드시 재정의해야 한다. 재정의하지 않으면Circle도 추상 클래스가 되어 인스턴스화할 수 없다. - B (오답):
error()는 단순 가상 함수로, 재정의는 선택 사항이다. 파생 클래스가 재정의하지 않아도 기본 구현이 사용된다. - C (오답):
objectID()는 비가상 함수이므로 파생 클래스에서 오버라이드(재정의)할 수 없다. 모든 파생 클래스에서 동일한 필수 구현을 사용한다. - D (정답): 단순 가상 함수는 인터페이스와 기본 구현을 함께 상속한다.
Circle이error()를 재정의하지 않으면Shape::error()의 기본 구현이 그대로 호출된다.
출처:
game_dev/cpp/chapter6/2025-10-20-cpp_6_34.md
댓글남기기