패스잇
모바일 개발 · 심화

Flutter 앱에서 위젯이 화면에 그려지기까지의 전체 렌더링 파이프라인(Build, Layout, Paint, Composite) 과정을 상세히 설명하고, 각 단계에서 발생할 수 있는 성능 병목 현상과 이를 진단하고 최적화하는 방안에 대해 논하시오.

힌트 · Flutter의 렌더링은 Widget tree, Element tree, RenderObject tree의 세 가지 트리 구조를 기반으로 합니다. 각 단계별 책임과 데이터 흐름, 그리고 DevTools를 활용한 진단 방법을 설명해야 합니다.

BuildLayoutPaintCompositeRepaintBoundary

모범답안

네, Flutter 앱 렌더링 파이프라인에 대해 설명드리겠습니다.

Flutter는 위젯 트리를 기반으로 Build, Layout, Paint, Composite 단계를 거쳐 화면을 렌더링합니다.

Build 단계에서는 위젯 트리를 Element 트리로 변환합니다. 이 과정에서 build() 메서드가 호출되며, 불필요한 위젯 재빌드는 성능 저하를 유발할 수 있습니다. const 키워드나 shouldRebuild()를 활용하여 최적화할 수 있습니다.

Layout 단계에서는 Element 트리를 RenderObject 트리로 변환하고, 각 RenderObject의 크기와 위치를 결정합니다. 복잡한 레이아웃 계산은 성능 병목의 원인이 될 수 있으며, RepaintBoundary로 레이아웃 범위를 제한하여 최적화할 수 있습니다.

Paint 단계에서는 각 RenderObject를 캔버스에 그립니다. 불필요한 영역까지 다시 그리는 것을 방지하기 위해 RepaintBoundary를 사용하거나, CustomPainter에서 shouldRepaint()를 구현하여 최적화할 수 있습니다.

Composite 단계에서는 그려진 레이어를 GPU에 업로드하여 화면에 합성합니다. 이 단계는 일반적으로 성능에 큰 영향을 미치지 않지만, 과도한 투명도 효과나 블렌딩 모드는 성능 저하를 유발할 수 있습니다.

DevTools의 Performance 탭을 사용하여 각 단계별 소요 시간을 측정하고, 문제점을 파악하여 최적화할 수 있습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 Flutter / Dart 면접 질문

← Flutter / Dart 면접 질문 전체 보기