
데이터 시각화, 예쁜 게 다가 아닙니다: Flame Graph vs Tree Map vs Sunburst 비교
시스템 성능 및 리소스 분석을 위한 시각화 도구인 Flame Graph, Tree Map, Sunburst의 실무적 장단점을 비교하고 상황에 맞는 도구 선택 가이드를 제시합니다.
김영태
테크리드

안녕하세요. 풀링포레스트 테크리드 김영태입니다.
개발자라면 누구나 한 번쯤 "도대체 디스크 용량이 어디서 다 나가는 거지?" 혹은 "이 CPU는 왜 이렇게 바쁜 거야?"라는 질문 앞에서 막막해 본 적이 있을 겁니다. 저도 8년 전, 로그 파일 하나가 서버를 터뜨릴 뻔했던 아찔한 기억이 나네요. 그때 터미널에서 du -h 명령어를 치며 식은땀을 흘렸던 기억이 아직도 생생합니다.
오늘은 시스템 성능이나 리소스 사용량을 분석할 때 우리가 자주 마주치는 시각화 도구들에 대해 이야기해 보려 합니다. 단순히 예쁜 그래프를 고르는 게 아니라, '문제 해결을 위해 어떤 도구가 가장 효율적인가'에 대한 실무적인 관점에서요. 특히 성능 분석의 대가인 Brendan Gregg가 2017년에 비교했던 내용을 바탕으로, 제 경험을 섞어 풀어보겠습니다.
막막했던 그날, 무엇을 보시겠습니까?
서버에 장애 알림이 울리고, 팀원들이 슬랙에서 웅성거리기 시작합니다. 디스크나 메모리 누수가 의심되는 상황. 여러분은 어떤 도구를 켜시나요?
보통 우리는 데이터를 시각화해서 범인을 찾으려 합니다. 하지만 모든 그래프가 정답을 알려주는 건 아닙니다. 잘못된 시각화는 오히려 우리를 혼란에 빠뜨리기도 하죠.
자, 여기 리눅스 커널 소스 코드(linux-4.9-rc5)라는 똑같은 데이터를 가지고 그린 세 가지 그래프가 있습니다. 하나씩 뜯어보며 장단점을 비교해 봅시다.
1. Flame Graphs: 한눈에 들어오는 '범인'

제가 가장 즐겨 쓰는 도구이자, 풀링포레스트 팀원들에게도 입이 닳도록 추천하는 Flame Graph입니다.
특징: 가로축은 전체 리소스(여기선 파일 크기)의 비율을 나타냅니다. 맨 아래가 전체(root)고 위로 갈수록 하위 디렉터리나 함수 호출 깊이를 나타내죠.
장점: 직관적입니다. "어? 저기 뚱뚱한 막대기 뭐지?" 하고 보면 그게 범인일 확률이 높습니다. 예를 들어,
drivers디렉터리가 전체의 50%를 차지한다는 걸 1초 만에 파악할 수 있죠. 라벨(글자)이 바로 보여서 별도의 마우스 오버 없이도 큰 흐름을 읽기 좋습니다.단점: 아주 작은 파일이나 함수는 너무 얇게 표시되어 라벨이 안 보일 수 있습니다. 하지만 솔직히 말해, 성능 튜닝이나 용량 분석에서 0.1% 차지하는 녀석은 당장 중요하지 않죠.
실무에서 CPU 프로파일링을 할 때, 이 플레임 그래프만큼 "어디를 고쳐야 할지"를 명확하게 보여주는 도구는 드뭅니다. 스크린샷 한 장만 찍어서 팀에 공유해도 상황 설명이 끝나거든요.
2. Tree Maps: 세부 정보 탐색에는 좋지만...

GrandPerspective나 Baobab 같은 도구에서 흔히 보는 Tree Map입니다.
특징: 화면을 사각형 영역으로 분할해서 크기를 표현합니다.
장점: 공간 낭비 없이 화면을 꽉 채웁니다. 특정 디렉터리 안에 있는 개별 대용량 파일을 찾아낼 때는 유리합니다. "아, 이 구석에 있는 빨간 박스 하나가 엄청 크네?" 하는 식이죠.
단점: 계층 구조의 전체적인 비율을 한눈에 파악하기가 어렵습니다.
drivers폴더가 전체의 몇 퍼센트인지 직관적으로 감이 오시나요? 게다가 마우스를 올려보지 않으면 뭔지 알 수 없는 경우가 많아서, 빠른 상황 파악이 필요한 장애 대응 시점에는 조금 답답할 수 있습니다.
3. Sunburst: 예쁘지만 속지 마세요

가장 화려하고 "와, 멋지다" 소리가 절로 나오는 Sunburst 차트입니다.
특징: 중심에서 바깥쪽으로 퍼져 나가는 원형 구조입니다. 파이 차트의 다층 버전이라고 보시면 됩니다.
치명적인 단점: 각도(Angle) 비교는 어렵습니다. 인간의 눈은 길이 비교는 잘하지만, 각도나 면적 비교에는 서툽니다.
실제로 Brendan Gregg의 분석에 따르면, 바깥쪽 레이어는 부채꼴 모양 때문에 실제 데이터 크기보다 시각적으로 더 커 보이는 착시가 일어납니다. 25MB짜리 데이터가 27MB짜리보다 더 커 보이는 황당한 경우가 생기죠.
결론: 보고서용으로 임원진에게 보여주기엔 최고입니다. 하지만 엔지니어가 문제를 진단해야 할 때는? 글쎄요, 저는 추천하지 않습니다. 예쁜 데이터에 속아 엉뚱한 곳을 파게 될 수도 있으니까요.
텍스트 기반 도구 (ncdu, du): 구관이 명관?
물론 화려한 GUI 도구 없이 터미널만 붙잡고 있을 때도 많습니다.
ncdu: 텍스트 기반이지만 막대그래프를 보여줘서 꽤 쓸만합니다. 다만 한 번에 한 뎁스(Depth)만 볼 수 있어서 전체 구조를 보려면 계속 엔터를 쳐서 들어가야 하는 번거로움이 있죠.
du -hs * | sort -hr: 우리의 영원한 친구입니다. 가장 빠르고, 설치도 필요 없죠. 급할 땐 이게 최고지만, 전체적인 숲을 보기엔 뇌내 렌더링이 좀 필요합니다.
테크리드의 조언: 목적에 맞는 도구를 꺼내세요
만약 여러분이 파일 시스템 분석 도구나 대시보드를 만들어야 한다면, 혹은 어떤 도구를 도입할지 고민 중이라면 제 추천은 이렇습니다.
기본은 Flame Graph: 전체적인 병목 구간이나 리소스 점유율을 파악할 때 가장 정직하고 효율적입니다. "큰 그림"을 놓치지 않게 해 줍니다.
개별 파일 탐색은 Tree Map: 특정 파일 하나가 문제인 경우(예: 미친 듯이 커진 로그 파일 하나)를 찾을 땐 유용할 수 있습니다.
Sunburst는 신중하게: 예쁘다고 무작정 도입하지 마세요. 정확한 데이터 비교가 필요한 상황에서는 독이 될 수 있습니다.
기술은 결국 문제를 해결하기 위해 존재합니다. 화려한 시각화보다 더 중요한 건, "이 그래프가 나에게 지금 당장 필요한 정보를 주는가?"입니다.
오늘도 모니터링 대시보드 앞에서 고군분투하는 여러분, 부디 여러분의 도구가 문제의 원인을 1초라도 빨리 가리키길 바랍니다. 그래야 우리도 칼퇴하고 진짜 '불멍'을 즐길 수 있지 않겠습니까?
감사합니다.


