TIL 2026-04-21
2026-04-21 CS 면접 준비 지식 그래프 구축
목차
- 2026-04-21 CS 면접 준비 지식 그래프 구축
오늘 한 일 요약
- graphify 스킬을 Claude Code에 설치 — 지식 그래프 파이프라인 확보
- Notion CS 면접 준비 페이지 8개를 로컬 md로 덤프 → graphify로 그래프화
- 그래프로 CS 개념 간 연결 구조 시각화 + god 노드 기반 학습 우선순위 도출
- Claude Code PreToolUse 훅으로 검색 시 그래프 리포트를 자동 참조하도록 연동
왜 그래프인가 — 문제의식
기존에 CS 면접 준비를 Notion에 페이지별로 정리해 왔는데 다음 문제가 있었다.
- 교차 연결이 안 보임:
virtual 소멸자는 virtual destructor 페이지에도, new vs malloc에도, vtable에도 등장하는데 각자 섬처럼 존재 - 우선순위가 주관적: 어떤 개념이 실제로 “허브”인지는 체감으로만 추측
- 꼬리질문 대비 약함: 면접에서 “그럼 vtable은?” “그럼 RTTI는?”으로 이어질 때 경로가 머릿속에 없음
- Claude가 매번 전부 읽어야 함: 질문할 때마다 원본 md를 뒤지므로 토큰 낭비
→ 관계를 그래프로 바꾸면 이 문제들이 전부 해결된다.
graphify 파이프라인
설치 & 연동
1
2
py -m pip install graphifyy
py -m graphify claude install # CLAUDE.md + PreToolUse 훅 자동 세팅
~/.claude/skills/graphify/SKILL.md 에 스킬 정의 배치, 프로젝트 .claude/settings.json 에 훅 등록.
Notion → 로컬 덤프
Notion MCP notion-fetch 로 CS 면접 준비 루트 + 7개 서브페이지를 한 번에 가져와 raw/cs-notion/ 에 저장.
1
2
3
4
5
6
7
8
9
raw/cs-notion/
├── 00_index.md (루트 + 꼬리질문 Q&A)
├── 01_runtime.md (런타임/컴파일타임, RTTI, 힙/스택)
├── 02_class_vs_struct.md
├── 03_new_vs_malloc.md
├── 04_oop.md (OOP 4원칙 + SOLID)
├── 05_vtable.md (vtable/vptr 메모리 레이아웃)
├── 06_virtual_destructor.md
└── 07_pointer_reference.md (포인터 vs 레퍼런스 + UE5 TObjectPtr)
graphify 실행 — 7단계
| STEP | 단계 | 내용 |
|---|---|---|
| 1 | detect | 파일 스캔 (8 docs · 9,637 words · 이미지/코드 0) |
| 2 | AST 추출 | 코드 없음 → 스킵 |
| 3 | 시맨틱 추출 | general-purpose 서브에이전트 1개에 8개 md 위임, JSON 청크 생성 |
| 4 | 병합 | AST(빈 것) + 시맨틱 → .graphify_extract.json |
| 5 | 빌드 · 클러스터 · 분석 | networkx 그래프, Louvain 커뮤니티 탐지, god 노드 계산 |
| 6 | 커뮤니티 라벨링 | 13개 커뮤니티에 직접 이름 부여 |
| 7 | HTML 시각화 | graph.html 생성 |
산출물
| 파일 | 용도 |
|---|---|
graphify-out/GRAPH_REPORT.md | 사람/AI 모두 읽는 리포트 (god 노드, 서프라이즈, 커뮤니티) |
graphify-out/graph.json | GraphRAG 쿼리용 JSON (BFS/DFS 경로 탐색) |
graphify-out/graph.html | 브라우저로 여는 대화형 시각화 |
그래프가 밝혀낸 연결 구조
숫자
- 102 노드 · 126 엣지 · 3 하이퍼엣지
- 92% EXTRACTED (원문 명시) / 8% INFERRED (합리적 추론) / 0% AMBIGUOUS
- 13개 커뮤니티로 자동 분할
전체 그래프 시각화
13개 커뮤니티가 색상으로 구분되어 있고, 노드 크기는 연결도(엣지 수)에 비례. 중앙 빨간색 허브가 virtual 소멸자(god 노드 1위, 15개 엣지).
중심부 상세 — god 노드 클러스터
virtual 소멸자를 중심으로 vtable, RTTI (Runtime Type Information), dynamic_cast, typeid, 다형성 이 방사형으로 연결. Community 2 (Runtime Typing & Virtual Destructor) 와 Community 1 (Virtual Dispatch & vtable) 이 교차하는 핵심 지점.
god 노드 TOP 10
연결도 = 해당 노드에 연결된 엣지 수. 숫자가 클수록 그래프의 허브.
| 순위 | 개념 | 엣지 수 |
|---|---|---|
| 1 | virtual 소멸자 | 15 |
| 2 | vtable (가상 함수 테이블) | 12 |
| 3 | CS 면접준비 인덱스 | 7 |
| 4 | Unreal 가비지 컬렉터 (GC) | 7 |
| 5 | class vs struct 차이 | 6 |
| 6 | new vs malloc 차이 | 6 |
| 7 | 다형성 (Polymorphism) | 6 |
| 8 | RTTI | 5 |
| 9 | 동적 디스패치 | 5 |
| 10 | Undefined Behavior (UB) | 5 |
→ 면접 빈출 포인트가 그래프 구조로 증명됨. virtual 소멸자 하나가 전체의 허브.
13개 커뮤니티 — 학습 단위
응집도(cohesion) 점수로 각 묶음의 탄탄함을 정량화.
| # | 이름 | 노드 수 | 응집도 |
|---|---|---|---|
| 0 | OOP & Class Design | 19 | 0.12 |
| 1 | Virtual Dispatch & vtable | 14 | 0.18 |
| 2 | Runtime Typing & Virtual Destructor | 14 | 0.18 |
| 3 | Unreal GC & TObjectPtr | 11 | 0.22 |
| 4 | new Expression & Allocation | 10 | 0.22 |
| 5 | Smart Pointers & RAII | 9 | 0.31 (최고) |
| 6 | References & Runtime Errors | 7 | — |
| 7 | C-Style Allocation & POD | 6 | — |
| 8 | SOLID Principles | 6 | — |
| 9 | Empty Base Optimization | 2 | — |
| 10 | Class & Object Basics | 2 | — |
| 11 | Void Type | 1 | — |
| 12 | Pointer Size | 1 | — |
Smart Pointers & RAII 커뮤니티가 가장 탄탄, OOP는 넓지만 느슨 (개념이 방대해서 서로 약한 연결).
서프라이즈 엣지 — 원문에 명시 안 된 연결
graphify가 파일 경계를 넘어 발견한 관계. 면접 꼬리질문 경로와 겹침.
new 표현식→힙 vs 스택 메모리(03번 파일 → 01번 파일)UObject operator new 오버로딩→Unreal GC(03 → 01)override 키워드→virtual 소멸자(03 → 06)다형성→virtual 소멸자(04 → 06)캡슐화 (Encapsulation)↔캡슐화 원칙— 2개 파일에서 거의 같은 개념 사용 중
→ 복습 시 이 경로를 따라가면 자연스럽게 꼬리질문까지 커버 가능.
하이퍼엣지 — 3개 이상 집합 관계
일반 엣지로는 표현 못 하는 “같이 쓰이는 3~4개 개념 묶음”.
| 이름 | 구성 | 신뢰도 |
|---|---|---|
| 동적 디스패치 3요소 | virtual + vtable + vptr + dynamic_dispatch | 0.95 |
| OOP 4대 원칙 | encapsulation + inheritance + polymorphism + abstraction | 1.00 |
| 스마트 포인터 3종 + 순환참조 | unique_ptr + shared_ptr + weak_ptr + circular_ref | 0.95 |
Claude Code 연동 — 참조 접근을 빠르게
PreToolUse 훅
.claude/settings.json 에 추가된 훅.
1
2
3
4
5
6
7
8
9
10
11
{
"hooks": {
"PreToolUse": [{
"matcher": "Glob|Grep",
"hooks": [{
"type": "command",
"command": "[ -f graphify-out/graph.json ] && echo '{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"additionalContext\":\"graphify: Knowledge graph exists. Read graphify-out/GRAPH_REPORT.md for god nodes and community structure before searching raw files.\"}}' || true"
}]
}]
}
}
동작: Claude가 Glob/Grep으로 파일 검색을 시도하면 훅이 자동으로 “먼저 GRAPH_REPORT.md 읽어라”는 힌트를 주입. 원본 md 전수조사 대신 그래프 구조로 네비게이션.
쿼리 명령 — 면접 연습용
1
2
3
4
5
6
7
8
# BFS로 관련 개념 모아 답변 초안 생성
py -m graphify query "virtual 소멸자가 왜 필요한가"
# 두 개념 사이 최단 경로 (답변 스크립트 골격)
py -m graphify path "virtual 소멸자" "vtable"
# 이웃 노드 포함 자연어 설명
py -m graphify explain "RTTI"
오늘 배운 것 정리
그래프는 “검색”을 “탐색”으로 바꾼다 — 파일을 뒤지는 대신 god 노드에서 BFS로 관련 개념 수집
community detection은 무료 TOC 생성기 — 13개 커뮤니티가 곧 13개 면접 챕터가 됨
92% EXTRACTED는 신뢰 지표 — LLM이 지어낸 관계가 아니라 원문에 명시된 관계 비중이 높아야 실전 답변에 사용 가능
PreToolUse 훅은 “규칙을 시스템에 새긴다” — 내가 Claude한테 매번 “먼저 리포트 읽어”라고 말할 필요 없이 자동 주입
서프라이즈 엣지 = 꼬리질문 사전 — 원문이 직접 링크하지 않은 연결은 면접관이 “그러면 X는?”으로 파고드는 지점과 일치
하이퍼엣지로 “세트 암기” — 동적 디스패치 3요소, OOP 4원칙처럼 묶음으로 기억해야 할 개념은 그룹으로 보존
Notion 마스터 + 로컬 그래프 분리 — 편집은 Notion, 분석/쿼리는 로컬 (서로 역할이 다르므로 git은 둘 다 추적 안 함)
응집도 점수로 학습 강도 조절 — 응집도 낮은 커뮤니티(OOP 0.12)는 개념이 넓으므로 시간을 더 투입, 높은 곳(Smart Pointers 0.31)은 짧게 훑어도 OK
Ch3 팀 회의 — 업그레이드/장르/맵 방향 논의
오늘 팀 회의에서 Ch3 팀플(가제 “Infected”) MVP의 업그레이드 시스템 · 게임 톤 · 맵 구조에 대해 1차 브레인스토밍. 아직 확정된 건 없고 04/23 2차 회의에서 에셋 탐색 결과와 함께 정립 예정.
업그레이드 방식 후보
| 방식 | 설명 | 장점 | 고민 포인트 |
|---|---|---|---|
| 카드 선택형 (뱀서류) | 레벨업 시 3장 카드 중 1장 선택 | 템포 빠름, 진입 쉬움 | 선택 풀이 방대해지면 밸런싱 난이도↑ |
| 웨이브 종료 업그레이드 | 웨이브 클리어 후 카드 선택 | 호흡 명확, 중간 정비 가능 | 웨이브 중에는 빌드 변경 불가 |
| 키오스크 상점 (RoR2) | 맵 상 특정 오브젝트 접근 시에만 업그레이드 | 탐색 동기 부여, 위치 리스크 | 쿨한 오브젝트 에셋 필요, 동선 설계 필수 |
→ 현재는 카드 선택 + 웨이브 종료 타이밍 조합 가능성이 가장 유력. 키오스크는 탐색형 맵으로 갈 경우 재검토.
무기 시스템 — 과열로 차별화
- 시작 무기 선택 후 진행 → 중간에 무기 드롭/카드로 추가 획득 + 스왑 가능
- 카드를 골랐을 때 “새 무기 획득 + 기존 무기 업그레이드” 선택지를 섞는 형태
- 뱀서류와의 차별점으로 과열 시스템 도입
- 무기별 과열 게이지 → 일정 이상 사격 시 쿨다운
- 무기 스왑 = 과열 관리 수단으로 자연스럽게 연결
- 획득한 무기 중 선택해 업그레이드 (모든 무기를 업그레이드하는 게 아님)
게임 장르 톤 — 뱀서류 vs RoR2
| 축 | 뱀서류 스타일 | Risk of Rain 2 스타일 |
|---|---|---|
| 전투 시작 | 바로 띄워주기 | 웨이브 사이 상점/정비 페이즈 |
| 밀도 | 적 수 밀도 폭발 | 스파이크 + 정비 반복 |
| 업그레이드 | 자동 레벨업 카드 | 상점 구매/오브젝트 상호작용 |
→ 둘 중 어느 쪽에 무게를 둘지가 맵 구조와 직결. 다음 회의에서 결정 필요.
맵 구조 — 박스형 vs 선형
- 박스형 (우선도 ↑): 고정 박스 공간 + 무한 웨이브. 에셋 부담 최소, MVP 적합
- 선형형 (스페이스 마린 레퍼런스): 레벨을 제작해 구간별 난이도 상승. 제작 비용 크지만 진행감 명확
→ MVP는 박스형으로 먼저 수렴 가능성 높음. 선형은 이후 확장 옵션.
미해결 질문 / 결정 필요
- 무기 교체 시 업그레이드 수치 처리 — 유지? 초기화? 부분 승계?
- 감염도/대쉬 시스템 — 시그니처 훅이지만 에셋 탐색 + 플레이 양상 확인 후 구체화
- 캐릭터 컨셉 + 버프/디버프/상태이상 설계 (감염도와 상호작용)
다음 회의 — 04/23 17:00
- 선결: 에셋 탐색 결과 공유 (감염도·대쉬·무기·상점 오브젝트 후보)
- 안건: 캐릭터 컨셉, 상태이상 체계, 업그레이드 방식 최종 확정, 맵 구조 확정

