메인 칼럼 개발일지 작업물 연락처
← ocul-pm 프로젝트
개발일지 / DEVLOG

코드 맵 만들다가 하루에 릴리스를 8번 했다

GraphVisualizationDogfooding

오늘 릴리스 태그가 v1.5.0부터 v1.8.1까지 8개 찍혔다. 계획하고 그런 건 아니고, 쓰다가 거슬리는 거 고치고 릴리스, 또 거슬려서 고치고 릴리스… 이러다 보니 그렇게 됐다.

오전엔 잡다한 거 위주였다. 코드 검색 개선하고 OpenRouter 붙이면서 프로바이더 failover 넣고, Today에 활동시간·Git·목표 진행률 위젯 추가. AI 패널에 프로젝트 컨텍스트 주입하는 것도. 그러고 나서 도그푸딩 하다 걸린 거 5건 묶어서 한 방, 또 6건 묶어서 한 방. nested git 인식 안 되던 거, diff 줄바꿈 깨지던 거, 커밋 그래프, 자동 인덱싱 권한, 설정 화면 일관성 없던 거… 이런 자잘한 것들.

본론은 코드 맵이었다. 원래 의존성 그래프 화면이 있긴 했는데 파일 간 import만 선으로 이어주는 수준이라 볼 게 없었다. 프로젝트가 커지면 그냥 털뭉치.

먼저 마이그레이션 018로 graph_nodes / graph_edges 테이블을 새로 팠다. 인덱싱 끝나는 시점에 files·symbol_definitions·file_dependencies를 긁어서 그래프를 통째로 재빌드하는 방식. 단일 트랜잭션이고 LLM 안 거치고 완전 결정론적이다. 이거 중요한 게, 그래프가 실행할 때마다 미묘하게 달라지면 아무도 안 믿는다. 기존 get_dependency_graph는 그대로 두고 화면만 새 커맨드로 갈아 끼웠다.

관계 종류도 늘렸다. import만 보던 걸 calls / inherits / implements까지 뽑아서 엣지 타입별로 다르게 그리게. 그러니까 이제 “A가 B를 부른다”, “C가 D를 상속한다”가 눈에 보인다. 심볼 단위까지 내려가서 어느 함수가 어느 함수를 부르는지도.

근데 관계를 늘리니까 화면이 더 난장판이 됐다. 선이 많아진 만큼 더 안 보임. 레이아웃을 유기형으로 바꾸고 Louvain 커뮤니티 클러스터링을 돌려서 뭉칠 놈끼리 뭉치게 했다. 이거 하니까 확 나아졌다. 프로젝트 구조가 진짜로 눈에 들어옴. 나중에 한 번 더 손봐서 노드 중요도에 따라 크기 다르게, 줌 레벨별로 디테일 조절(LOD), 포커스 모드까지 넣었다.

제일 마음에 드는 건 diff 영향분석이다. 방금 바꾼 파일에서 역방향 BFS 돌려서 “이거 건드리면 어디까지 영향 가는지”를 그래프에 칠해준다. 커밋 전에 한 번 보면 “아 여기도 봐야 되네” 하는 게 나온다. 원래 이거 하려고 그래프 만든 거였는데 여기까지 오는 데 하루 걸렸다.

나머지는 자잘한 거. 프리셋 테마 5종 넣고 앱 글자 크기 조절 붙였는데, 처음엔 CSS로 하려다가 UI가 다 깨져서 그냥 네이티브 웹뷰 줌으로 바꿨다. 패치노트에 과거 릴리스도 버전별 접이식으로 보이게 하고, 플래너에 이름 변경·삭제 CRUD 추가. 검색 돋보기 아이콘 위치가 계속 거슬려서 그것도 고쳤다. 사이드바에 ‘Ocul-PM’ 텍스트 지우고 프로젝트 선택 화면 아이콘도 뺐다. 로고 두 번 보여줄 이유가 없더라.

Today 활동시간이 새로고침해야만 갱신되던 것도 고쳤다. 진행 중인 세션을 라이브로 세게 만들고 세션 이벤트를 구독하니까 숫자가 실시간으로 올라간다. 별거 아닌데 보고 있으면 좀 뿌듯함.

며칠 뒤에 이어서 좀 더 만졌다. 코드 맵은 한 번 더 갈아엎어서 노드 중요도로 크기 조절하고 줌 레벨별 디테일(LOD), 포커스 모드, 영향 중심 인스펙터까지 붙였다. 플래너엔 단계(Phase) CRUD랑 인라인 편집을 다시 설계해서 넣고. ./docs 폴더를 읽기 전용 뷰어로 띄우는 것도 만들었는데, 설계 문서를 앱 안에서 바로 보게 되니까 계획 화면이랑 왔다 갔다 하기 편하다.

아 그리고 README 배지가 자꾸 깨졌다. shields.io 토큰 풀 에러라길래 cacheSeconds 붙였다가 안 돼서 결국 badgen으로 다 갈아탔다. 별거 아닌 걸로 커밋 3개 썼다.

릴리스 8번 찍으면서 느낀 건데, 자동 업데이트 붙여놓길 진짜 잘했다. 안 그랬으면 이렇게 못 질렀지.

김현빈 Developer & Writer

기술, 포스팅 관련 질문, 프로젝트 협업 등 연락주시면 언제든지 회신 드립니다.