포스트

CS 면접 노트를 지식 그래프로 만들어 학습 순서 정하기

허브 개념과 커뮤니티, 원문에 없던 연결까지 드러내기

문서가 여덟 페이지로 늘자 어느 개념이 어디에 붙는지 안 보였다. 문서를 그래프로 바꿔 연결이 가장 많은 허브 개념과 함께 공부해야 할 묶음, 원문에 없던 연결까지 드러낸 기록.

CS 면접 노트를 지식 그래프로 만들어 학습 순서 정하기

CS 면접 준비 문서가 여덟 페이지까지 늘어나자, 정작 필요한 순간에 어느 개념이 어느 개념과 붙어 있는지를 못 찾겠다는 문제가 생겼다. 문서는 페이지 단위로 끊겨 있는데 면접 질문은 개념을 가로질러 들어오기 때문이다. 이 글에서는 그 문서들을 지식 그래프로 바꿔 연결 구조를 눈으로 본 과정을 이야기하려 한다 — 구축 파이프라인이 앞이고, 그래프가 실제로 드러낸 것(허브 개념, 학습 단위 커뮤니티, 원문에 없던 연결)이 뒤다.

왜 그래프인가 — 문제의식

기존에 CS 면접 준비를 Notion에 페이지별로 정리해 왔는데 다음 문제가 있었다.

  • 교차 연결이 안 보임: virtual 소멸자virtual destructor 페이지에도, new vs malloc에도, vtable에도 등장하는데 각자 섬처럼 존재
  • 우선순위가 주관적: 어떤 개념이 실제로 “허브”인지는 체감으로만 추측
  • 꼬리질문 대비 약함: 면접에서 “그럼 vtable은?” “그럼 RTTI는?”으로 이어질 때 경로가 머릿속에 없음
  • 매번 전문을 다시 뒤져야 함: 참조할 때마다 원본 md 전체를 훑어야 해 비효율

→ 관계를 그래프로 바꾸면 이 문제들이 전부 해결된다.






graphify 파이프라인

설치 & 연동

1
2
py -m pip install graphifyy
py -m graphify install   # 프로젝트 규칙 파일 + PreToolUse 훅 자동 세팅

스킬 정의를 배치하고, 프로젝트 설정(JSON)에 검색 훅을 등록.


Notion → 로컬 덤프

Notion 연동으로 CS 면접 준비 루트 + 7개 서브페이지를 한 번에 가져와 로컬 마크다운으로 저장.

1
2
3
4
5
6
7
8
9
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단계내용
1detect파일 스캔 (8 docs · 9,637 words · 이미지/코드 0)
2AST 추출코드 없음 → 스킵
3시맨틱 추출8개 md를 일괄 처리해 JSON 청크 생성
4병합AST(빈 것) + 시맨틱 → .graphify_extract.json
5빌드 · 클러스터 · 분석networkx 그래프, Louvain 커뮤니티 탐지(연결이 촘촘한 노드끼리 자동으로 묶는 알고리즘), god 노드 계산
6커뮤니티 라벨링13개 커뮤니티에 직접 이름 부여
7HTML 시각화graph.html 생성


산출물

파일용도
graphify-out/GRAPH_REPORT.md사람이 읽는 리포트 (god 노드, 서프라이즈, 커뮤니티)
graphify-out/graph.jsonGraphRAG 쿼리용 JSON (BFS/DFS 경로 탐색)
graphify-out/graph.html브라우저로 여는 대화형 시각화





그래프가 밝혀낸 연결 구조

숫자

  • 102 노드 · 126 엣지 · 3 하이퍼엣지
  • 92% EXTRACTED (원문 명시) / 8% INFERRED (합리적 추론) / 0% AMBIGUOUS
  • 13개 커뮤니티로 자동 분할


전체 그래프 시각화

전체 그래프 — 102노드, 13커뮤니티 색상 구분

13개 커뮤니티가 색상으로 구분되어 있고, 노드 크기는 연결도(엣지 수)에 비례. 중앙 빨간색 허브가 virtual 소멸자(god 노드 1위, 15개 엣지).


중심부 상세 — god 노드 클러스터

중심부 상세 — virtual 소멸자를 중심으로 vtable, RTTI, dynamic_cast, typeid 연결

virtual 소멸자를 중심으로 vtable, RTTI (Runtime Type Information), dynamic_cast, typeid, 다형성 이 방사형으로 연결. Community 2 (Runtime Typing & Virtual Destructor) 와 Community 1 (Virtual Dispatch & vtable) 이 교차하는 핵심 지점.


god 노드 TOP 10

연결도 = 해당 노드에 연결된 엣지 수. 숫자가 클수록 그래프의 허브.

순위개념엣지 수
1virtual 소멸자15
2vtable (가상 함수 테이블)12
3CS 면접준비 인덱스7
4Unreal 가비지 컬렉터 (GC)7
5class vs struct 차이6
6new vs malloc 차이6
7다형성 (Polymorphism)6
8RTTI5
9동적 디스패치5
10Undefined Behavior (UB)5

→ 면접 빈출 포인트가 그래프 구조로 증명됨. virtual 소멸자 하나가 전체의 허브.


13개 커뮤니티 — 학습 단위

응집도(cohesion) 점수로 각 묶음의 탄탄함을 정량화.

#이름노드 수응집도
0OOP & Class Design190.12
1Virtual Dispatch & vtable140.18
2Runtime Typing & Virtual Destructor140.18
3Unreal GC & TObjectPtr110.22
4new Expression & Allocation100.22
5Smart Pointers & RAII90.31 (최고)
6References & Runtime Errors7
7C-Style Allocation & POD6
8SOLID Principles6
9Empty Base Optimization2
10Class & Object Basics2
11Void Type1
12Pointer Size1

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_dispatch0.95
OOP 4대 원칙encapsulation + inheritance + polymorphism + abstraction1.00
스마트 포인터 3종 + 순환참조unique_ptr + shared_ptr + weak_ptr + circular_ref0.95





검색 훅 연동 — 참조 접근을 빠르게

PreToolUse 훅

프로젝트 설정(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"
      }]
    }]
  }
}

동작: 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는 신뢰 지표 — 자동 추출이 지어낸 관계가 아니라 원문에 명시된 관계 비중이 높아야 실전 답변에 사용 가능

  • PreToolUse 훅은 “규칙을 시스템에 새긴다” — 내가 매번 “먼저 리포트 읽어”라고 지시할 필요 없이 자동 주입

  • 서프라이즈 엣지 = 꼬리질문 사전 — 원문이 직접 링크하지 않은 연결은 면접관이 “그러면 X는?”으로 파고드는 지점과 일치

  • 하이퍼엣지로 “세트 암기” — 동적 디스패치 3요소, OOP 4원칙처럼 묶음으로 기억해야 할 개념은 그룹으로 보존

  • Notion 마스터 + 로컬 그래프 분리 — 편집은 Notion, 분석/쿼리는 로컬 (서로 역할이 다르므로 git은 둘 다 추적 안 함)

  • 응집도 점수로 학습 강도 조절 — 응집도 낮은 커뮤니티(OOP 0.12)는 개념이 넓으므로 시간을 더 투입, 높은 곳(Smart Pointers 0.31)은 짧게 훑어도 OK






핵심 요약 — 페이지 단위로 흩어져 있던 CS 면접 노트를 지식 그래프로 바꾸면, 어떤 개념이 실제 허브인지(virtual 소멸자, vtable)와 파일 경계를 넘는 숨은 연결(서프라이즈 엣지)이 수치로 드러난다. 학습 우선순위를 감이 아니라 연결도로 정할 수 있게 됐다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.