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판》의 스터디 내용 입니다.
'프로그래밍 > 플러터' 카테고리의 다른 글
21장 (0) | 2024.04.17 |
---|---|
20장 (0) | 2024.04.17 |
16장 17장 (0) | 2024.03.27 |
Google API & Photo (0) | 2024.03.20 |
비디오 및 영상 통화 (0) | 2024.03.20 |
하고 싶은 걸 하고 되고 싶은 사람이 되자!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!