본문 바로가기
취미/컨퍼런스

Flutter에서 Riverpod + Dio + Retrofit 으로 소통하기 (CuroGom - Flutter Seoul) - Flutter In Production Extended Seoul

by WooHey 2025. 1. 12.

본 게시글은 Flutter in Production 컨퍼런스 참여 후 작성한 글입니다.

Flutter In Production Extended Seoul 컨퍼런스 후기

 

 

Client 는 왜 server 를 필요로할까

그냥 단기적으로 보여주고 끝내는 휘발성 데이터로만 서비스를 구성할게 아니라면

지금 요청한 사람이 누구인지에 대한 정보, 그리고 이 사용자가 어떠한 액션을 취했을 때에 대한 기대값 등을 저장하고 나중에 다시 불러와야 한다는 등의 사용자 경험을 향상시키기 위해서 서버는 거의 필수이다.

 

그리고 서버와 클라이언트는 네트워크 위에서 서로 소통하며, API 를 통해 데이터를 주고 받는다.

 

 

 

Flutter 에서 Rest API 를 위한 라이브러리는?

http

dart 공식 팀에서 제공 중인 라이브러리이다.

때문에 신뢰도가 높고 효율성이 좋다. 

 

특징으로, http 연결에만 집중하고 있기 때문에 의존성이 적다.

하지만 에러처리와 디버깅이 조금 아쉬우며 기능이 제한적이다. (인터셉터, 요청 취소 등)

 

 

dio

flutter 중국 커뮤니티에서 개발하였으며, http 에 비해 다소 무겁고 의존성이 높다. (dio 로 인해 특정 패키지나 기능을 못 쓴다든지 등)

 

retroit?

Android 에서 쓰는 통신 라이브러리로 동적 프록시를 활용해 request 객체를 쉽게 만드는 도구이다.

때문에 적지 않은 유저들이 dio 와 retroit 을 연계해서 많이 사용하고 있다.

 

그리고 build runner 라는 것을 통해 실질적으로 이 코드를 쓰기 위한 호출부를 자동으로 만들게 된다.

 

 

 

build_runner 란?

플러터에서 코드 생성 작업을 자동화하는데 사용되는 도구이다.

주로 json 직렬화, http 요청을 위한 REST API 클라이언트, 모델 클래스 등의 코드를 자동으로 작성해준다.

 

 

 

그렇다면 build_runner 를 꼭 해야하나?

찬성의견

  • 개발 생산성 향상
  • 코드 품질 일정/향상
  • 유지 보수성 용이
    • 내가 작성한 코드가 몇줄 안되기 때문에

반대 의견

  • 빌드 시간 증가
  • 초기 설정 복잡함
    • part 절 등
  • 어려운 디버깅
    • 구현체가 내가 쓴 코드가 아니라 생성된 코드라서..
  • 제한적인 기능
    • freezed 를 상속할 수 없음
    • 객체끼리 상속이 필요한 경우에는 freezed 안쓰고 내가 만드는게 나음

 

 

 

build_runner 대안은?

macro(실험용)

 

mcro 또한 build_runner 처럼 코드를 생성하준다.

하지만 컴파일 시점에 코드를 생성하기 때문에 빌드 시간 단축하는데 효과적이다.

 

근데 언제나올지 모르기 때문에 아직 기다리고 있다.. (올해 나왔으면 함)

  •