1. Flutter의 렌더링 파이프라인 이해하기
Flutter는 운영체제의 네이티브 위젯을 사용하지 않고, 스스로 픽셀을 그립니다. Widget 트리부터 시작해 Element, RenderObject를 거쳐 실제 화면에 그려지기까지의 과정을 이해하는 것은 성능 최적화의 첫걸음입니다.

Pro-tip: `RepaintBoundary`를 활용하여 페인트 침범(Paint Overlap)을 방지하세요. 변경이 잦은 부분만 별도로 그리도록 강제하면 성능을 비약적으로 높일 수 있습니다.
2. Skia의 한계: 런타임 셰이더 컴파일(Jank)
기존 Skia 엔진은 셰이더(Shader)를 앱 실행 중에 컴파일합니다. 이 과정에서 발생하는 CPU 점유율 스파이크가 바로 우리가 느끼는 애니메이션 버벅임의 원인이었습니다. 이를 해결하기 위해 셰이더 프리워밍(Pre-warming) 같은 대안이 있었지만, 근본적인 해결책은 아니었습니다.
The ‘Bad’ Way: Runtime Shader Compilation (Skia)
// 애니메이션 시작 시점에 셰이더 컴파일 발생 (프레임 드랍 유발)
// iOS 환경에서 특히 두드러지는 문제
3. Impeller: 빌드 타임 컴파일로의 혁신
**Impeller**는 모든 셰이더를 앱 빌드 시점에 미리 컴파일(AOT)합니다. 또한 최신 그래픽 API인 Metal(iOS)과 Vulkan(Android)을 최대한 활용하도록 설계되었습니다. 이는 런타임 부하를 0에 가깝게 줄이며, 모든 프레임이 일관되게 60Hz/120Hz를 유지하도록 보장합니다.

4. 실전: Impeller 활성화 및 성능 체감
최신 버전의 Flutter에서는 iOS에서 Impeller가 기본으로 활성화되어 있으며, Android에서도 점진적으로 확대되고 있습니다. 실제로 Impeller를 적용했을 때 복잡한 커스텀 페인팅이나 블러(Blur) 효과에서도 끊김 없는 사용자 경험을 제공합니다.

5. 그래픽스 최적화를 위한 개발자의 자세
엔진이 좋아졌다고 해서 모든 최적화 고민이 끝나는 것은 아닙니다. `CustomPainter`를 사용할 때는 `shouldRepaint`를 정교하게 구현하고, 이미지 에셋(Asset)의 해상도를 실제 사용 크기에 맞춰 최적화하는 기본기를 잊지 마세요.
Lesson Learned: 기술의 변화를 이해하는 것은 단순히 도구를 잘 다루는 것을 넘어, 더 나은 품질의 프로덕트를 만드는 원동력이 됩니다. Impeller가 가져온 변화를 통해 모바일 UI의 한계를 시험해 보세요.
결론: 더 빠르고, 더 아름다운 Flutter 앱
Skia에서 Impeller로의 전환은 Flutter가 모바일 앱 프레임워크의 왕좌를 굳히기 위한 전략적 결정입니다. 이제 ‘Elite’ 개발자라면 새로운 엔진의 특성을 이해하고, 이를 통해 사용자에게 최고의 몰입감을 선사하는 ‘Jank-free’ 앱을 만들어야 합니다.