본문 바로가기
flutter

[플러터]Flutter / Hot Reload와 Hot Restart 의 차이점

by ch5c 2024. 10. 12.
반응형

우리가 앱을 디버깅할 때 한 번쯤은 겪는 상황이 있다. 바로 Ctrl + S 한 다음에 에뮬레이터에서 동작이 잘 되는지 테스트해보려고 했는데 아예 클릭조차 되지 않는 상황 말이다.

 

이런 문제가 보통 발생하는 원인은 지금 테스트해보려고 하는 그 코드가 외부 코드, 예를 들어 컨트롤러 같은 외부 코드와 연결되어 있는 코드(글로벌 상태)라서 그렇다.

우리는 이런 문제가 발생했을 때 대게 그냥 다시 flutter run을 하거나 안드로이드 스튜디오라면 시작버튼을 다시 누를 것이다. 

 

그럼 왜 외부 코드와 연결된 위젯은 Ctrl + S 같은 걸로 상태가 업데이트되지 않는 것일까?

그 이유는 Ctrl + S가 하는 동작은 Hot Reload이기 때문이다. 

 

그렇다면 Hot reload라는 것은 무엇일까? 먼저 Hot Reload에 대해서 알아보자.

 

Hot Reload

Hot Reload는 코드 변경 사항을 즉시 반영하여 UI를 다시 렌더링 하는 기능이다.

 

앱의 상태, 즉 State를 유지한 채로 UI 변경을 빠르게 적용할 수 있기 때문에 개발 환경에서 흔히들 쓴다.

 

그렇다면 어떻게 작동하는가?
  • 현재 실행 중인 앱의 상태를 유지하면서 변경된 빌드 메서드나 위젯 트리만 다시 빌드한다.
언제 사용하는가?
  • UI 요소를 빠르게 수정하거나 스타일이 필요할 때
  • 복잡한 상태나  데이터 로드를 방해하지 않고 UI의 즉각적인 피드백을 보고 싶을 때
한계
  • State가 유지된다. 즉 UI는 변경되지만 앱의 로직이나 상태가 변경된 부분은 반영되지 않을 수 있다.

 

이렇듯 우리가 보통 알고 있는 그대로 기능 그대로인데 이 Hot Reload는 한계점이 명확하다.


 

그렇다면 State를 초기화하고 싶으면 어떻게 해야 하냐? 그냥 재시작하면 된다.

그럼 재시작, Hot Restart를 알아보자.

Hot Rstart

Hot Restart앱을 완전히 다시 시작하는 기능이다.

 

이 과정에서 앱의 상태는 모두 초기화되고, 앱이 실행되는 것과 동일하게 다시 빌드된다.

그렇다면 어떻게 작동하는가?
  • 앱이 처음부터 새로 실행되며, 모든 위젯, 상태, 컨트롤러 등이 재구성된다.
  • 기존의 상태, 변수 값, 데이터 로딩 상태 등은 모두 초기화된다.
언제 사용하는가?
  • 상태관리나 컨트롤러에서 중요한 변경이 있을 때, 특히 iniState() 같은 것이 다시 실행되어야 할 때.
  • 앱 로직이나 글로벌 상태가 변했을 때.
  • 상태 초기화가 필요할 때.

근데 사실 말만 거창하지 실상은 그냥 flutter run이다. 

 

허나 shared_preferences 같은 패키지로 앱 캐시에 저장하는 데이터가 있다면

그건 Hot Restart로는 초기화가 되지 않고 에뮬레이터에서 직접 앱을 삭제해야 한다.


 

Hot Reload(Ctrl + S)와 Hot Restart(flutter run)에 대해서 알아봤는데 마지막으로 정리하자면

 

Hot Reload는 UI 변경 사항을 즉시 반영하고, 상태를 유지한 채로 빠르게 결과를 볼 수 있어 개발 속도를 크게 향상하는 대신에 상태는 그대로 유지되기 때문에 상태나 로직에 영향을 미치는 변경 사항은 완전히 반영되지 않을 수 있다.


Hot Restart는 앱을 처음부터 다시 시작하기 때문에 상태 초기화가 필요한 경우나 로직의 변경을 반영할 때 유용하고 앱 전체가 다시 빌드되기 때문에, 비교적 더 많은 시간이 소요될 수 있다.

 

표를 하나 만들어 보자면

  Hot Reload Hot Restart
상태(State) 유지됨 초기화 됨
적용 대상 UI 변경사항 및 빌드 메서드 앱 전체 (위젯 트리 및 상태 모두 재구성)
속도 매우 빠름 상대적으로 느림
사용 상황 UI 레이아웃, 스타일, 텍스트 등의 변경 시 적합 상태 관리, 글로벌 상태, 로직 변경 시 적합 
한계 상태 초기화 불가, 논리 변경 반영 불가 상태 유지 불가, 앱 전체를 다시 시작해야 함

 

 

이렇게 간단하게 Hot Reload와 Hot Restart에 대해서 알아봤다.

개발 환경에 있어서 상황에 알맞은 방식을 사용해서 개발하길 바라며 이번 포스팅 마치겠다.

반응형

 

반응형