라이브러리 정리

김동연·2026년 4월 3일

개발기록일지(Flutter)

목록 보기
32/32

HTTP 클라이언트

http

  • 역할: 가볍고 단순한 HTTP. GET/POST, 헤더·바디 문자열 수준.
  • 장점: 의존성 적음, 동작이 직관적, 학습·소규모에 적합.
  • 단점: 베이스 URL·타임아웃·인터셉터·재시도·업로드 진행률 등은 직접 조합해야 함.
  • 선호: 토이·강의·호출 수가 적을 때. 실서비스에서도 “최소 의존성”을 밀면 남는 경우 있음.

dio

  • 역할: HTTP를 기능 많이 감싼 클라이언트.
  • 장점: BaseOptions베이스 URL·타임아웃·공통 헤더, Interceptor로 로깅·토큰 첨부·401 처리·에러 공통화, FormData/MultipartFile로 업로드, 대량 호출에 유리한 구조.
  • 단점: 개념이 http보다 많음. 인터셉터 남용 시 디버깅 어려움.
  • 선호: API가 많고 인증·로깅·에러 정책을 한곳에 묶고 싶을 때 실무에서 많이 고른다 (팀마다 다름).

retrofit (+ retrofit_generator / dio)

  • 역할: 인터페이스에 어노테이션 달면 Dio 호출 코드 생성 (메서드·경로·쿼리 파라미터를 타입에 가깝게).
  • 쓰는 때: 엔드포인트가 많고 반복 보일러플레이트를 줄이고 싶을 때.
  • 선호: 백엔드가 OpenAPI로 잘 정리돼 있으면 효율적. 작은 앱은 과할 수 있음.

JSON · 모델

dart:convert (기본 라이브러리)

  • 역할: jsonEncode / jsonDecode만. 의존성 없음.
  • 쓰는 때: 필드 적음, 프로토타입.

json_annotation + json_serializable + build_runner

  • 역할: fromJson / toJson 코드 생성. 필드·이름 규칙 맞추기 쉬움.
  • 선호: 가장 흔한 정식 모델링 경로.

freezed (+ json_serializable)

  • 역할: 불변 모델, copyWith, 합 타입(union) 등까지.
  • 쓰는 때: 상태·도메인 모델이 복잡할 때.
  • 선호: 규모 큰 팀·장기 유지보수에서 선호하는 경우 많음. 생성 코드·빌드 시간은 늘어남.

equatable

  • 역할: == / hashCode값 비교로 쉽게.
  • 쓰는 때: Bloc 상태·리스트 diff 등 같은 내용인지 비교할 때 자주 씀.

라우팅

go_router

  • 역할: 선언적 라우트, 경로 문자열·중첩·리다이렉트, 딥링크·웹 URL에 강함.
  • 선호: 신규 앱에서 채택이 많아진 편.

auto_route

  • 역할: 코드 생성 기반, 타입 안전한 라우트·스택.
  • 단점: 보일러플레이트·생성 단계 부담.
  • 선호: 대규모·라우트가 매우 많을 때.

(작은 앱은 내장 Navigator만으로도 충분한 경우 많음.)


의존성 주입 (DI)

get_it

  • 역할: 서비스 로케이터. Dio, ApiClient, Repository 등록 후 한곳에서 꺼냄.
  • 쓰는 때: Riverpod 없이도 싱글톤·테스트 대체 주입이 필요할 때.

injectable (+ get_it)

  • 역할: 등록 코드 자동 생성.
  • 선호: 모듈이 많을 때.

참고: Riverpod만 쓰는 팀은 Provider로 Dio/Repository를 주입하고 get_it을 안 쓰기도 함.


로컬 저장

shared_preferences

  • 역할: 키–값 소량 (문자열 등). OS 제공 저장소에 가깝게 매핑.
  • 쓰는 때: 온보딩 완료 플래그, 테마 모드, 최근 검색어 수준.

sqflite

  • 역할: SQLite. 관계·쿼리 필요할 때.

drift (구 Moor)

  • 역할: SQLite + 타입·쿼리 빌더 + 스트림. 보일러플레이트 많지만 강함.

hive

  • 역할: NoSQL 박스. 서버 없이 빠른 로컬 객체 저장. 플러그인 없이 쓰기 쉬웠던 장점(버전에 따라 확인).

isar

  • 역할: NoSQL, 빠른 쿼리, 객체 DB. 신규 선택지로 자주 언급됨.

path_provider

  • 역할: 문서·캐시 등 OS 경로 얻기. 다른 저장과 거의 항상 같이 등장.

flutter_secure_storage

  • 역할: 토큰·리프레시 토큰 등 민감값 (키체인/Keystore).

이미지 · 리소스

cached_network_image

  • 역할: 네트워크 이미지 캐시 + placeholder/error.
  • 선호: 리스트·썸네일에 사실상 표준에 가깝게 쓰임.

flutter_svg

  • 역할: SVG 로드. 아이콘·일러스트에.

cached_network_image

  • octo_image: 로딩/에러 위젯 조합(선택).

환경 변수 · 빌드 플레이버

flutter_dotenv

  • 역할: .env 파일에서 키 로드 (API 베이스 URL 등).
  • 주의: 민감 정보는 클라이언트에 두면 유출로 간주. CI·--dart-define과 역할 나누기.

--dart-define / --dart-define-from-file

  • 역할: 빌드별 상수 주입. 공식·가벼운 방식으로 많이 씀.

로깅 · 디버깅

logger

  • 역할: 콘솔 로그 레벨·포맷.
  • 선호: debugPrint 대체로 흔함.

talker / talker_dio_logger

  • 역할: Dio 요청/응답 가독성 로그(선택).

권한 · 하드웨어

permission_handler

  • 역할: 카메라·갤러리·마이크·위치 등 권한 요청 통합 API.

image_picker / file_picker

  • 역할: 갤러리·카메라·파일 선택.

device_info_plus / package_info_plus

  • 역할: 기기/OS·앱 버전 문자열 (고객 지원·로그).

국제화 · 날짜

intl

  • 역할: 날짜·숫자 포맷, 메시지와 함께 쓰기도 함.

flutter_localizations + ARB

  • 역할: Flutter 공식 i18n 경로.

네트워크 주변

connectivity_plus

  • 역할: 와이파이/데이터/오프라인 감지 (UX·재시도).

web_socket_channel

  • 역할: WebSocket 실시간.

internet_connection_checker / 유사 패키지

  • 역할: “연결됨” vs “실제 인터넷” 구분(선택).

백엔드 연동 (BaaS)

Firebase (firebase_core, auth, firestore, messaging, analytics, crashlytics 등)

  • 역할: 인증·DB·푸시·분석·크래시까지 한 생태계.
  • 선호: 스타트업·MVP·빠른 출시에 많음. 벤더 종속은 감수.

지도 · 위치

google_maps_flutter / mapbox

  • 역할: 지도 UI. 키·요금·정책이 큼.

geolocator

  • 역할: 위치 좌표 얻기 (권한과 세트).

딥링크 · URL

  • 역할: 외부 URL로 앱 특정 화면 열기.

UI · UX 보조 (선택)

gap

  • 역할: SizedBox 대신 간격 위젯. 가독성.

shimmer

  • 역할: 스켈레톤 로딩.

pull_to_refresh / 내장 RefreshIndicator

  • 역할: 당겨서 새로고침 (내장으로도 가능).

flutter_screenutil

  • 역할: 해상도별 스케일. 호불호·주의 많음 — 디자인 시스템이 있으면 팀 규칙 따름.

테스트용 (라이브러리 목록에 자주 같이 나옴)

mocktail / mockito

  • 역할: 단위 테스트에서 가짜 구현.

fake_async / clock

  • 역할: 시간·타이머 테스트.

정리

  • HTTP: 소규모·단순 → http / 실무·인터셉터·업로드 많음 → dio (많은 팀 선호). 엔드포인트 폭발 → retrofit 검토.
  • 모델: 필드 늘면 json_serializable, 더 복잡하면 freezed.
  • 라우트: 규모 커지면 go_router.
  • 저장: 작은 설정 → shared_preferences, 구조화·쿼리 → sqflite/drift/isar 중 요구에 맞게.
  • 이미지: 네트워크 → cached_network_image.
  • 토큰: flutter_secure_storage.
  • 권한: permission_handler.
  • 로그: logger.
  • 연결 상태: connectivity_plus.
  • 실시간: web_socket_channel.
  • BaaS: firebase_* 묶음.

0개의 댓글