본문 바로가기
Flutter

Hot Reload, Hot Restart, 그리고 전체 재빌드의 차이점

by alaxhenry 2025. 3. 13.
반응형
SMALL

Flutter 개발 과정에서 코드 변경 사항을 적용하는 세 가지 주요 방법인 Hot Reload, Hot Restart, 그리고 전체 재빌드(Stop 후 다시 빌드)는 각각 다른 수준의 앱 상태 초기화와 성능 특성을 가지고 있습니다.

1. Hot Reload (🔥)

작동 방식:

  • 변경된 소스 코드를 Dart Virtual Machine(VM)에 주입합니다.
  • VM은 변경된 클래스를 업데이트하고 위젯 트리를 재구성합니다.
  • 앱의 상태는 유지됩니다.

징:

  • 가장 빠름 (보통 1초 이내)
  • 앱 상태 유지: 변수 값, 네비게이션 상태 등이 보존됩니다.
  • 제한된 변경만 적용: 메서드 본문, 함수 구현 등의 변경만 적용됩니다.

적합한 상황:

  • UI 디자인 조정
  • 서드 구현 변경
  • 빠른 반복 개발

용되지 않는 변경:

  • 클래스 구조 변경
  • 역 변수 추가/제거
  • 열거형 추가/변경
  • 생성자 변경

2. Hot Restart (🔄)

작동 방식:

  • 앱 코드를 완전히 다시 컴파일합니다.
  • 앱을 처음부터 다시 시작합니다.
  • 모든 상태가 초기화됩니다.

특징:

  • 중간 속도 (보통 몇 초 소요)
  • 상태 초기화: 모든 변수와 상태가 초기 값으로 재설정됩니다.
  • 더 많은 변경 적용: 클래스 구조, 전역 변수 등의 변경도 적용됩니다.

적합한 상황:

  • 클래스 구조 변경
  • 상태 관리 로직 변경
  • 전역 변수 추가/제거
  • 앱을 초기 상태로 테스트해야 할 때

3. 전체 재빌드 (Stop 후 다시 빌드)

작동 방식:

  • 앱을 완전히 중지합니다.
  • 네이티브 코드와 Dart 코드를 모두 다시 컴파일합니다.
  • 앱을 처음부터 다시 설치하고 시작합니다.

특징:

  • 가장 느림 (수십 초에서 몇 분까지 소요)
  • 모든 상태 초기화: 앱이 완전히 새로 시작됩니다.
  • 모든 변경 적용: 네이티브 코드, 플러그인, 에셋, 종속성 등 모든 변경사항이 적용됩니다.

적합한 상황:

  • pubspec.yaml 변경 (패키지 추가/제거)
  • 네이티브 코드 변경 (iOS/Android 코드)
  • 에셋 추가/변경
  • 러그인 설정 변경
  • 빌드 구성 변경

주요 차이점 요약

| 특성 | Hot Reload | Hot Restart | 전체 재빌드 |

|------|------------|-------------|------------|

| 속도 | 가장 빠름 (1초 이내) | 중간 (몇 초) | 가장 느림 (수십 초~몇 분) |

| 상태 유지 | ✅ 유지 | ❌ 초기화 | ❌ 초기화 |

| Dart 코드 변경 | 일부 적용 | 모두 적용 | 모두 적용 |

| 네이티브 코드 변경 | ❌ 적용 안 됨 | ❌ 적용 안 됨 | ✅ 적용 |

| 패키지/에셋 변경 | ❌ 적용 안 됨 | ❌ 적용 안 됨 | ✅ 적용 |

실제 개발 시 고려사항

  • Hot Reload 문제 해결: Hot Reload가 예상대로 작동하지 않을 때는 Hot Restart를 시도해보세요.
  • 상태 관련 버그: 상태 관리 관련 버그를 디버깅할 때는 Hot Restart가 더 정확한 결과를 제공합니다.
  • 메모리 누수: 메모리 누수나 초기화 문제를 확인하려면 전체 재빌드가 필요할 수 있습니다.
  • GetX 사용 시: GetX와 같은 상태 관리 라이브러리를 사용할 때는 Hot Reload 후 상태가 예상치 못하게 동작할 수 있으므로 주의해야 합니다.

Hot Reload는 개발 속도를 크게 향상시키지만, 때로는 더 완전한 재시작이 필요한 상황이 있습니다. 개발 중 문제가 발생하면 점진적으로 Hot Reload → Hot Restart → 전체 재빌드 순으로 시도해보는 것이 좋습니다.

반응형
LIST