스루나루 2024. 4. 3. 21:37
728x90
728x90

 

1) SQL

 - 웹이랑 똑같이 앱에서도 데이터베이스를 사용할 때 큰 틀은 같음 

 - 테이블 구조로 이루어져 있으며 행과 열로 구분 

 - 여기선 드리프트 플러그인을 사용하여 SQL을 구현 

 - ORM이라고 객체 - 관계 매핑을 활용해서 SQL문을 일일 작성하지 않고 코드를 통해서 구현이 가능해짐 

 

2) 드리프트 

 - ORM으로 SQL을 작성하여 코드로 테이블 데이터를 조작 가능하게 해주는 라이브러리 

 - 기본적인 틀을 코드로 정의하고 메서드를 정의하면 자동적으로 알아서 SQL관련된 코드를 작성해주고 우리는 메서드나 변수를 사용해서 해당 테이블에 있는 레코드를 제어할 수 있다. 

// private값까지 불러올 수 있음
part 'drift_database.g.dart';  // part 파일 지정

@DriftDatabase(  // 사용할 테이블 등록
  tables: [
    Schedules,
  ],
)
class LocalDatabase extends _$LocalDatabase {
  LocalDatabase() : super(_openConnection());

  Stream<List<Schedule>> watchSchedules(DateTime date) =>
      (select(schedules)..where((tbl) => tbl.date.equals(date))).watch(); // ➊ 데이터를 조회하고 변화를 감지

  Future<int> createSchedule(SchedulesCompanion data) =>
      into(schedules).insert(data);

  Future<int> removeSchedule(int id) =>
      (delete(schedules)..where((tbl) => tbl.id.equals(id))).go();

  int get schemaVersion => 1;
}

LazyDatabase _openConnection() {
  return LazyDatabase(() async {
    final dbFolder = await getApplicationDocumentsDirectory(); // ➊ 데이터베이스 파일 저장할 폴더
    final file = File(p.join(dbFolder.path, 'db.sqlite'));
    return NativeDatabase(file);
  });
}

 

2) 상태관리 

 - 지금까지는 setState라는 기본적인 상태관리 방식을 통해서 앱을 재빌드하면서 수행했음

 - 다만 이 방법은 재빌드를 실행할 때 그 하위 위젯까지 전체가 새로 랜더링 되기에 프로젝트 덩치가 큰 곳에서는 적합한 방식이 아님 

 - EX) Provider , RiverPod , Gex 등등 

 

3) 캐시 관리 

 - 서버에서 응답을 요청하고 받을 때 물리적인 제약으로 인한 지연이 생길 수 있다. 해당 지연을 줄이기 위해서 캐시관리를 하는데 캐시 관리를 통해서 이미 기존에 실행했던 로직이라면 해당 결과를 저장해 서버 응답없이 바로 로컬에 저장되어 있는 값을 활용하여 사용하는 것을 캐시라고 한다 . 

 

 

이 글은 골든래빗 《Must Have 코드팩토리의 플러터 프로그래밍 2판》의 스터디 내용 입니다. 

728x90
728x90