[Flutter] Isar 패키지에 대한 짧막한 설명

2026. 3. 10. 13:52·Flutter

isar란?

isar는 Flutter와 Dart 전용으로 설계된 고속 크로스플랫폼 NoSQL 로컬 데이터베이스입니다. 내부 코어 엔진이 Rust로 작성되어 있어 처리 속도가 압도적으로 빠르며, 모든 작업이 비동기로 처리되어 앱의 UI가 멈추는 현상을 방지합니다. 또한 강력한 타입 안정성을 지원하여 컴파일 시점에 에러를 방지할 수 있습니다.

  • 고속 & 비동기 처리 : 내부 코어 엔진이 Rust로 작성되어 있어 속도가 압도적으로 빠릅니다. 게다가 모든 쿼리와 작업이 완전히 비동기로 처리되어 있어 앱의 UI가 버벅거리지 않습니다.
  • 타입 안정성(Type-safe) : Realm이나 SwiftData처럼, 모델 클래스만 정의해두면 컴파일러가 강력하게 타입을 체크해줍니다.
  • 반응형 : 쿼리 결과에 .watch()를 붙이면 데이터가 변경될 때마다 자동으로 스트림(Stream)을 쏴줍니다. 데이터를 직접 갱신할 필요없이 UI가 알아서 바뀝니다.
  • 코드 제너레이션(Code Generation) : 앱빌드 시점에 모델 구조를 보고 효율적인 내부 코드를 싹 다 자동으로 만들어줍니다.(build_runner 사용)
  • 탁월한 검색 기능 : 풀텍스트 검색, 다중 조건 필터링 등이 매우 쉽고 강력합니다.

설치

dependencies:
    flutter:
        sdk: flutter
    isar: ^3.1.0
    isar_flutter_libs: ^3.1.0
    path_provider: ^2.1.1

dev_dependencies:
    build_runner: ^2.4.6
    isar_geneartor: ^3.1.0

사용

  1. 스키마(모델) 정의하기 (user.dart)

    import 'package:isar/isar.dart';
    
    part 'user.g.dart' // 반드시 '파일명.g.dart'로 선언해야 자동 생성이 가능
    
    @Collection()
    class User {
        Id id = Isar.autoIncrement; // 자동 증가하는 고유 ID (Primary Key)
    
        late String name;
        short? age;
    }

    터미널에서 flutter pub run build_runner build 명령어를 실행하면 user.g.dart 파일이 생성됩니다.

  2. 초기화 및 데이터 저장하기

    import 'package:path_provider/path_provider.dart';
    
    // 1. DB 인스턴스 열기
    final dir = await getApplicationDocumentsDirectory();
    final isar = await Isar.open(
        [UserSchema], // 생성한 스키마 등록
        directory: dir.path,
    );
    
    // 2. 새 유저 객체 생성
    final newUser = User()
        ..name = "홍길동"
        ..age = 28;
    
    // 3. 쓰기 작업 (반드시 writeTxn 트랜잭션 안에서 실행)
    await isar.writeTxn(() async {
        await isar.users.put(newUser);
    });
    
    // 4. 데이터 읽기 (전체 가져오기)
    final allUsers = await isar.users.where().findAll();

Swift와 비교

Flutter(isar) Swift(CoreData, Realm, SwiftData) 역할
@Collection @Model/Object 서브클래싱/Entity DB에 저장될 하나의 테이블(객체) 선언
Id @Attribute(.unique)/UUID() 각 요소를 구분하는 고유 식별자
Isar.open() ModelContainer/Realm()생성 DB 파일을 열고 연결(인스턴스화)
isar.writeTxn() context.save()/realm.write 데이터를 쓰고/수정/삭제하는 트랜잭션 블록
.watch() @Query/@ObservedResults DB의 데이터 변화를 감지하여 UI 자동 갱신

사용 흐름

  1. 모델 클래스 생성(@Collection) : 저장할 데이터의 형태를 다트 클래스로 정의합니다.
  2. 코드 제너레이팅(build_runner) : 명령어를 실행하여 isar가 쿼리 및 파싱에 사용할 보일러플레이트 코드(*.g.dart)를 자동 생성합니다. (모델이 수정될 때마다 실행 필수)
  3. DB 인스턴스 초기화 (Isar.open) : 앱 시작 지점(주로 main() 내부 또는 상태관리자 초기화 시점)에서 로컬 디렉토리 경로에 DB를 연결합니다.
  4. 비동기 트랜잭션 (writeTxn) : 데이터의 삽입(put), 수정(put), 삭제(delete) 등 쓰는 작업은 반드시 트랜잭션 블록 내부에서 비동기(await)로 처리하여 무결성을 유지합니다.
  5. 반응형 스트림 감지 (.watch) : 쿼리 결과에 .watch()를 사용하여 데이터 변경이 일어날 때마다 Stream으로 변경 사항을 받아 UI를 자동으로 다시 그립니다.
'Flutter' 카테고리의 다른 글
  • [Flutter] dio 패키지에 대한 짧막한 설명
  • [Flutter] go_router 패키지에 대한 짧막한 설명
  • [Flutter] Riverpod 패키지에 대한 짧막한 설명
  • [Flutter] Provider
GwanSon
GwanSon
귀찮음과 불편함을 해결하는 개발자가 되자.
  • GwanSon
    관슨의 개발일지
    GwanSon
  • 전체
    오늘
    어제
    • 분류 전체보기 (57)
      • iOS (5)
      • swift (16)
      • UIKit (0)
      • swiftUI (3)
      • 알고리즘 (9)
      • CS (8)
      • 면접 (0)
      • Flutter (11)
      • 회고 (3)
      • 잡담 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    Dio
    구슬 탈출2
    SwiftUI
    네이버 부스트캠프
    부스트캠프
    cached_network_image
    토스
    모듈화
    Provider
    boj
    백준
    go_router
    부스트캠프 10기
    android
    fluuter
    챌린지
    SDK
    Riverpod
    UIImagePickerController
    Firebase
    fatal error
    2025 토스 Next
    후기
    ISAR
    Swift
    ios
    네이버 부스트캠프 후기
    Flutter
    FirebaseAuth
    tuist
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
GwanSon
[Flutter] Isar 패키지에 대한 짧막한 설명
상단으로

티스토리툴바