포스트

TIL 2026-04-21

TIL 2026-04-21

2026-04-21 CS 면접 준비 지식 그래프 구축

목차


오늘 한 일 요약

  1. graphify 스킬을 Claude Code에 설치 — 지식 그래프 파이프라인 확보
  2. Notion CS 면접 준비 페이지 8개를 로컬 md로 덤프 → graphify로 그래프화
  3. 그래프로 CS 개념 간 연결 구조 시각화 + god 노드 기반 학습 우선순위 도출
  4. 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단계내용
1detect파일 스캔 (8 docs · 9,637 words · 이미지/코드 0)
2AST 추출코드 없음 → 스킵
3시맨틱 추출general-purpose 서브에이전트 1개에 8개 md 위임, JSON 청크 생성
4병합AST(빈 것) + 시맨틱 → .graphify_extract.json
5빌드 · 클러스터 · 분석networkx 그래프, Louvain 커뮤니티 탐지, god 노드 계산
6커뮤니티 라벨링13개 커뮤니티에 직접 이름 부여
7HTML 시각화graph.html 생성


산출물

파일용도
graphify-out/GRAPH_REPORT.md사람/AI 모두 읽는 리포트 (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





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

  • 선결: 에셋 탐색 결과 공유 (감염도·대쉬·무기·상점 오브젝트 후보)
  • 안건: 캐릭터 컨셉, 상태이상 체계, 업그레이드 방식 최종 확정, 맵 구조 확정

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