[말랑 퀴즈] 26/04/06 해답
카테고리: MallangQuiz
태그: Quiz
제 말랑말랑 퀴즈 생성기는 이곳에서 확인하실 수 있습니다.
말랑말랑 퀴즈 — 해답지 ✅
날짜: 2026-04-06 문제 수: 5문제
Q1. 🟡 보통
문제: 빈칸을 채우시오.
NAT(네트워크 주소 변환)는 하나의 공인 IP를 여러 내부 기기가 공유하게 해주는 기술이다. 아래는 내부 기기가 외부 서버와 통신할 때의 동작 과정이다.
- 내부 기기(
192.168.0.5:10)가 외부 서버(11.22.33.44:1000)로 패킷을 보내면, NAT 라우터는 내부 기기의 끝점에 대응하는 외부 끝점(55.66.77.88:2010)을 만들어 ___①에 저장한다. 192.168.0.5:10처럼 내부망의 주소를 __②라 하고,55.66.77.88:2010처럼 NAT 라우터가 생성한 공인망 주소를 __③이라 한다.- ①이 생성되는 과정 자체를 ___④이라 한다.
- 응답 패킷이 NAT 라우터에 돌아오면, 라우터는 ①를 참조해 수신자 주소를 ___⑤하여 내부 기기에 전달한다.
- 모바일(LTE/5G) 환경처럼 대규모 사용자를 지원하기 위해 쓰는 대형 NAT 라우터를 ___⑥이라 한다.
정답:
① 포트 매핑 엔트리 ② 내부 주소 ③ 외부 주소 ④ 홀펀칭(Hole Punching) ⑤ 역변환(내부 주소로 변환) ⑥ Carrier-grade NAT
해설:
NAT 라우터는 내부 기기가 외부로 패킷을 보낼 때 내부 주소 ↔ 외부 주소 매핑 정보를 포트 매핑 엔트리에 기록한다. 이 엔트리가 만들어지는 과정이 홀펀칭이다. 이후 외부에서 응답이 오면 라우터는 포트 매핑 엔트리를 조회해 외부 주소를 다시 내부 주소로 역변환하여 내부 기기에 전달한다. 이 구조 덕분에 하나의 공인 IP로 여러 내부 기기가 동시에 인터넷을 사용할 수 있다. LTE/5G처럼 수백만 기기를 지원해야 하는 환경에서는 Carrier-grade NAT를 사용한다.
출처:
server/game_server/2/2025-12-10-game_server_2_9.md
Q2. 🟢 쉬움
문제: C++에서 “인스턴스화”에는 두 가지 종류가 있다. 다음 중 두 인스턴스화에 대한 설명으로 옳은 것은?
- A. 객체 인스턴스화는 컴파일 타임에 발생하며, 특정화된 클래스 정의나 함수의 이진 코드를 결과물로 만든다
- B. 템플릿 인스턴스화는 런타임에 발생하며, 데이터를 담는 실체(객체)를 결과물로 만든다
- C. 객체 인스턴스화는 주로 런타임에 발생하며, 클래스(설계도)를 바탕으로 데이터를 담는 실체를 만든다
- D. 템플릿 인스턴스화와 객체 인스턴스화는 모두 런타임에 발생한다
정답: C
해설:
| 종류 | 발생 시점 | 결과물 |
|---|---|---|
| 객체 인스턴스화 | 런타임 (주로) | 데이터를 담는 실체 (객체/인스턴스) |
| 템플릿 인스턴스화 | 컴파일 타임 | 특정화된 클래스 정의 또는 함수의 이진 코드 |
A와 B는 두 종류의 발생 시점과 결과물이 서로 뒤바뀐 설명이다. D는 두 가지 모두 런타임이라는 잘못된 기술이다. C가 정답으로, 객체 인스턴스화는 클래스라는 설계도를 바탕으로 런타임에 실제 데이터를 담는 실체(인스턴스)를 생성하는 과정이다. 일반적으로 “인스턴스화”라 하면 객체 인스턴스화를 의미한다.
출처:
game_dev/cpp/etc/2025-10-30-cpp_instantiation.md
Q3. 🔴 어려움
문제: 분산 매치메이킹 시스템에서 여러 로비 서버가 있을 때, 서로 다른 로비 서버에 접속한 플레이어들을 한 게임방에 매칭하려면 서버 간 데이터 공유가 필요하다.
- 로비 서버 간 통신 방법 3가지와 각각의 채택 여부 및 이유
- 데이터 불일치(스테일 데이터) 문제의 시나리오와 해결법 2가지
정답:
1. 로비 서버 간 통신 방법 3가지
| 방법 | 채택 | 이유 |
|---|---|---|
| 동기 분산 처리 | ❌ | 플레이어 수가 많으면 서버 간 통신 횟수가 폭발적으로 증가해 처리 불가 |
| 비동기 분산 처리 | ❌ | 다른 서버에 요청을 보내도 응답을 받을 방법이 없어 매칭 완료를 확인할 수 없음 |
| 데이터 복제 기반 로컬 처리 | ✅ | 로비 서버들이 플레이어 목록(실력, 대기 상태)을 서로 동기화해 각 서버가 로컬 데이터로 처리. 서버 간 통신을 최소화하면서 매칭 가능 |
2. 데이터 불일치(스테일 데이터) 시나리오
- 클라이언트 1이 로비 서버 1에 매칭 대기를 요청한다.
- 클라이언트 2가 로비 서버 2에 매칭 대기를 요청하고, 두 서버가 플레이어 목록을 동기화한다.
- 클라이언트 1이 매칭 취소를 요청해, 로비 서버 1은 클라이언트 1의 대기 상태를
FALSE로 변경한다. - 동기화가 아직 완료되기 전, 로비 서버 2는 클라이언트 1이 아직 대기 중이라 판단해 게임방을 생성하고 클라이언트 1·2를 매칭시킨다.
- 나중에 동기화가 이루어지지만, 클라이언트 1은 이미 원치 않는 게임방에 입장한 상태이다.
해결법 2가지:
- 자동 매치메이킹 재시작: 매칭이 성사된 이후 클라이언트 1이 취소했음을 서버가 뒤늦게 인식하면, 로비 서버 2에 원상복구를 알리고 다른 플레이어들의 매치메이킹을 다시 시작한다.
- 메모리 저장 서버 활용: 별도의 중앙 메모리 저장 서버(예: Redis)에 모든 로비 서버가 접근하여 플레이어 상태를 읽고 쓴다. 항상 최신 데이터를 보장하지만, 데이터 접근마다 서버 간 통신이 발생하므로 로비 서버 연산량이 많고 메모리 저장 서버 연산량이 적을 때 효율적이다.
출처:
server/game_server/9/2026-03-27-game_server_10_3.md
Q4. 🟡 보통
문제: 다음 명제가 참(O)인지 거짓(X)인지 판단하라.
일관된 해시 알고리즘(Consistent Hashing)을 사용하면 DB 샤드를 추가하거나 제거할 때 재배치가 필요한 레코드 수가 크게 줄어든다. 따라서 샤드 개수 변동이 아무리 크더라도 항상 전체 레코드 중 극히 일부(샤드 1개 분량)만 리해시하면 된다.
정답: X
해설:
앞 문장(“재배치 레코드 수가 크게 줄어든다”)은 맞지만, 뒷 문장(“변동이 아무리 크더라도 항상 샤드 1개 분량만 리해시하면 된다”)은 틀렸다. 일관된 해시 알고리즘은 샤드 개수 변동 1개당 샤드 1개의 범위만 재배치하면 된다는 개념이다. 즉, 샤드 10개에서 11개로 늘릴 때는 1개 분량만 재배치하면 되지만, 10개에서 20개로 한꺼번에 늘리면 그만큼 더 많은 샤드 분량을 재배치해야 한다. 샤드가 크게 늘거나 줄면 결국 많은 양의 리해시가 필요하다.
출처:
server/game_server/9/2026-03-26-game_server_10_2.md
Q5. 🟡 보통
문제: 레이턴시 마스킹 기법에는 세 가지가 있다: 값 검증, 예측/보정, 분할 연출.
이 중 예측/보정 방식에 대한 설명으로 옳지 않은 것은?
- A. 클라이언트가 서버 응답을 기다리지 않고 먼저 이동을 처리하고, 서버 검증 결과에 따라 나중에 위치를 보정한다
- B. 레이턴시가 100ms를 초과하면 캐릭터 움직임이 손상될 수 있다
- C. 세 가지 기법 중 치터 방지(해킹 방어) 측면에서 가장 우수하다
- D. 레이턴시가 불균일하고 높은 환경(200ms 이상)에서도 끊김 없이 적용할 수 있어 고레이턴시 게임에 가장 적합하다
정답: D
해설:
예측/보정은 레이턴시가 균일하고 낮을 때(50ms 이하) 사용하는 것이 가장 좋다. 레이턴시가 100ms를 넘으면 즉시 이동한 클라이언트 예측과 서버 보정값 사이의 차이가 커져 캐릭터 움직임이 끊기거나 튀는 현상이 발생한다(B는 옳음). 따라서 D처럼 고레이턴시 환경에서 가장 적합하다는 설명은 틀렸다. 고레이턴시 환경에는 오히려 분할 연출(모션 먼저, 이펙트 나중) 기법이 더 적합하며, 스타크래프트·디아블로 3 같은 RTS/ARPG에서 활용된다. A와 C는 모두 옳은 설명이다.
출처:
server/game_server/5/2026-02-14-game_server_5_3.md
댓글남기기