๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Flutter + Dart/Flutter + Dart ๊ณต๋ถ€

flutter ๋กœ์ปฌ DB ๊ณ ๋ฅด๊ธฐ

by GREEN๋‚˜๋ฌด 2025. 5. 7.
728x90

๐Ÿ“Š Flutter ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๊ตํ‘œ

๊ตฌ๋ถ„ DB ์ด๋ฆ„ ํƒ€์ž… ์žฅ์  ๋‹จ์  ์‚ฌ์šฉ ์˜ˆ์‹œ
Key-Value shared_preferences Key-Value Storage - ์„ค์ •๊ฐ’ ๋“ฑ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ
- ๋น ๋ฅธ ์†๋„
- ๋ณต์žกํ•œ ๊ตฌ์กฐ ์ €์žฅ ๋ถˆ๊ฐ€- ๋น„๋™๊ธฐ ๋™์ž‘ ์ œํ•œ ๋กœ๊ทธ์ธ ์ •๋ณด, ํ…Œ๋งˆ ์„ค์ • ๋“ฑ
Key-Value Hive Key-Value + Box ๊ธฐ๋ฐ˜ NoSQL - ๋งค์šฐ ๋น ๋ฆ„
- ๊ตฌ์กฐํ™”๋œ ์ €์žฅ ๊ฐ€๋Šฅ
- ์›น/๋ฐ์Šคํฌํƒ‘ ์ง€์›
- ๋Œ€๊ทœ๋ชจ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ์—” ๋ถ€์ ํ•ฉ ๋ฉ”๋ชจ ์•ฑ, ์บ์‹œ ์ €์žฅ์†Œ ๋“ฑ
Key-Value + DB Isar ๊ณ ์„ฑ๋Šฅ NoSQL DB - Hive๋ณด๋‹ค ๋น ๋ฆ„
- ์ฟผ๋ฆฌ ๋ฌธ๋ฒ• ์ง๊ด€์ 
- ๊ด€๊ณ„ํ˜• ๊ตฌ์กฐ ์ผ๋ถ€ ์ง€์›
- ์ƒ๋Œ€์ ์œผ๋กœ ์ƒํƒœ๊ณ„ ์ž‘์Œ ์ค‘๊ฐ„ ๊ทœ๋ชจ ์•ฑ, ๊ฐ์ฒด ์ง€ํ–ฅ DB
SQLite ๊ธฐ๋ฐ˜ sqflite ๊ด€๊ณ„ํ˜• DB - ์ „ํ†ต์ ์ธ SQL ์ง€์›
- ์ œ์•ฝ ์กฐ๊ฑด, ๊ด€๊ณ„ํ˜• ํ‘œํ˜„ ์šฐ์ˆ˜
- ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ˆ˜๋™ ์ž‘์„ฑ ํ•„์š”
- ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ์ง์ ‘ ํ•ด์•ผ ํ•จ
์ผ์ • ๊ด€๋ฆฌ, ์ผ๊ธฐ์žฅ, ๊ธˆ์œต ์•ฑ ๋“ฑ
ORM ๊ธฐ๋ฐ˜ Drift (moor) SQLite + ORM - SQL + Dart ํ†ตํ•ฉ- ํƒ€์ž… ์•ˆ์ „์„ฑ
- ๊ด€๊ณ„ํ˜• ๊ตฌ์กฐ ์ง€์›
- ์„ค์ • ๋ณต์žก
- ๋นŒ๋“œ ๋‹จ๊ณ„ ํ•„์š”
๋ณต์žกํ•œ ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ, ๋ถ„์„ ์•ฑ
ORM ๊ธฐ๋ฐ˜ Floor SQLite + ๊ฐ„๋‹จ ORM - ๊ฐ„๋‹จํ•œ ORM ์‚ฌ์šฉ- Android Room ์œ ์‚ฌ - ๊ธฐ๋Šฅ ์ œํ•œ์ - ๊ด€๊ณ„ ๋ณต์žก์„ฑ ์ทจ์•ฝ ๋‹จ์ˆœ CRUD ์•ฑ
๊ฐ์ฒด DB ObjectBox ๊ณ ์„ฑ๋Šฅ ๊ฐ์ฒดํ˜• DB - ๋น ๋ฅธ ์“ฐ๊ธฐ/์ฝ๊ธฐ
- ๊ด€๊ณ„ํ˜• ๊ฐ์ฒด ์—ฐ๊ฒฐ ์šฐ์ˆ˜
- ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ง€์› ์ œํ•œ์ 
- ์ƒํƒœ๊ณ„ ์ž‘์Œ
IoT ์•ฑ, ์„ผ์„œ ๋กœ๊ทธ, ์ค‘๋Œ€ํ˜• ์•ฑ

๐Ÿ† ์ถ”์ฒœ ๊ธฐ์ค€

๐Ÿ“Œ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ (์„ค์ •, ํ† ๊ธ€, ๋กœ๊ทธ์ธ ์ •๋ณด):

  • shared_preferences → ๋ณต์žกํ•œ ๊ตฌ์กฐ ํ•„์š” ์—†๋‹ค๋ฉด ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฆ„.

๐Ÿ“Œ ๋น ๋ฅธ ์„ฑ๋Šฅ + ๊ฐ„๋‹จ ๊ตฌ์กฐ (์ค‘์†Œํ˜• ์•ฑ):

  • Hive
    → ํ•™์Šต ๋‚œ์ด๋„ ๋‚ฎ๊ณ  ์†๋„ ๋น ๋ฆ„. ๊ฐ์ฒด ์ €์žฅ ๊ฐ€๋Šฅ.
    → ๋‹จ์ ์€ ๊ด€๊ณ„ํ˜• ๊ตฌ์กฐ๊ฐ€ ์•ฝํ•จ.

๐Ÿ“Œ Hive๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ ๋Œ€์ฒด์ œ ์ฐพ๋Š”๋‹ค๋ฉด:

  • Isar
    → ์„ฑ๋Šฅ, ๊ตฌ์กฐํ™”, ๊ด€๊ณ„์„ฑ, ์ฟผ๋ฆฌ ์–ธ์–ด ๋ชจ๋‘ ๊ท ํ˜• ์žกํž˜.
    → ์ตœ๊ทผ ํŠธ๋ Œ๋“œ์—์„  Hive๋ณด๋‹ค ๋” ์ถ”์ฒœ๋˜๋Š” ๊ฒฝ์šฐ ๋งŽ์Œ.

๐Ÿ“Œ SQL ๋ฌธ๋ฒ•์— ์ต์ˆ™ํ•˜๊ณ  ์ „ํ†ต์ ์ธ DB ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด:

  • sqflite → ๋ช…ํ™•ํ•œ ๊ด€๊ณ„ ์„ค์ •, ์ œ์•ฝ ์กฐ๊ฑด ํ•„์š”ํ•  ๋•Œ ์ข‹์Œ.

๐Ÿ“Œ SQL + ORM ์Šคํƒ€์ผ, ํƒ€์ž… ์•ˆ์ •์„ฑ ํ•„์š”:

  • Drift → ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ.

๐Ÿ“Œ Android์˜ Room DB์™€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ ์›ํ•œ๋‹ค๋ฉด:

  • Floor → ๊ฐ„๋‹จํ•œ ORM ๊ตฌ์กฐ ์›ํ•  ๋•Œ ์‚ฌ์šฉ.

๐Ÿ“Œ ๊ด€๊ณ„ํ˜• ๊ฐ์ฒด ์ง€ํ–ฅ + ์ดˆ๊ณ ์† ์“ฐ๊ธฐ/์ฝ๊ธฐ ์›ํ•œ๋‹ค๋ฉด:

  • ObjectBox → ๋Œ€๊ทœ๋ชจ ๋กœ๊น…, ์‹ค์‹œ๊ฐ„ DB ์ฒ˜๋ฆฌ ๋“ฑ์— ์ ํ•ฉ.

 


 

โœ… ์ผ๊ธฐ ์•ฑ – ์–ด๋–ค DB๊ฐ€ ์ ํ•ฉํ• ๊นŒ?

์ถ”์ฒœ DB – Isar
  ์ผ๊ธฐ ์•ฑ์€ ๊ตฌ์กฐํ™”๋œ ๊ธ€, ๋‚ ์งœ๋ณ„ ์ •๋ ฌ, ๊ฐ์ • ๋ฐ ํƒœ๊ทธ ๊ฒ€์ƒ‰ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์š”๊ตฌํ•˜๋ฏ€๋กœ, ๊ฐ์ฒด ๊ธฐ๋ฐ˜ ์ €์žฅ๊ณผ ๊ฐ•๋ ฅํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” Isar๊ฐ€ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ด์œ  – ์„ฑ๋Šฅ๊ณผ ์œ ์—ฐ์„ฑ ๋ชจ๋‘ ์šฐ์ˆ˜
  Isar๋Š” ๊ธด ํ…์ŠคํŠธ(2000์ž ์ด์ƒ)๋„ ๋ฌธ์ œ์—†์ด ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ์ •, ํƒœ๊ทธ, ๋‚ ์งœ ๋“ฑ์„ ์กฐํ•ฉํ•œ ๊ฒ€์ƒ‰๊ณผ ์ •๋ ฌ๋„ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ž… ์•ˆ์ „์„ฑ๊ณผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ง€์› ๋•๋ถ„์— ์œ ์ง€๋ณด์ˆ˜๋„ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

์žฅ์  – ํ™•์žฅ์„ฑ ์žˆ๋Š” ๊ตฌ์กฐํ™”๋œ ์ €์žฅ์†Œ
  Dart ๊ฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ณ , ์ฟผ๋ฆฌ ๊ธฐ๋Šฅ(where, filter, sortBy ๋“ฑ)์ด ๋›ฐ์–ด๋‚˜๋ฏ€๋กœ ๊ฐ์ • ํ•„ํ„ฐ, ๋‚ ์งœ ์ •๋ ฌ, ํƒœ๊ทธ ๊ฒ€์ƒ‰ ๋“ฑ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ฆ๊ฒจ์ฐพ๊ธฐ, ์ด๋ฏธ์ง€ ์ฒจ๋ถ€, ์ž ๊ธˆ ๊ธฐ๋Šฅ ๋“ฑ ํ–ฅํ›„ ๊ธฐ๋Šฅ ํ™•์žฅ๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์  – ์ดˆ๊ธฐ ์„ค์ • ํ•„์š”
  ์ฝ”๋“œ ์ƒ์„ฑ(build_runner)์ด ํ•„์š”ํ•˜๊ณ  ๋ชจ๋ธ ์ •์˜ ์‹œ ์•ฝ๊ฐ„์˜ ์ง„์ž… ์žฅ๋ฒฝ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์•ˆ – Hive (๋‹จ์ˆœ ๊ตฌ์กฐ์ผ ๊ฒฝ์šฐ)
  Hive๋Š” ์„ค์ •์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด์ง€๋งŒ, ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•œ ์•ฑ์—์„œ๋งŒ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ๊ธฐ๋Šฅ์ด ์ œํ•œ์ ์ด๋ฏ€๋กœ ๊ฐ์ •/ํƒœ๊ทธ ๊ฒ€์ƒ‰, ์ •๋ ฌ ๋“ฑ์—๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… ์œ„์น˜ ๊ธฐ๋ฐ˜ ๊ธธ์ฐพ๊ธฐ ์•ฑ – ์–ด๋–ค DB๋ฅผ ์จ์•ผ ํ• ๊นŒ?

์ถ”์ฒœ DB – Isar
  ๊ธธ์ฐพ๊ธฐ ์•ฑ์—์„œ๋Š” ์ขŒํ‘œ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์˜ ์ •๋ ฌ, ๊ฒฝ๋กœ ์บ์‹œ ์ €์žฅ, ์กฐ๊ฑด ๊ฒ€์ƒ‰ ๋“ฑ์ด ์ค‘์š”ํ•œ๋ฐ, Isar๋Š” ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์— ์ตœ์ ํ™”๋œ ์„ฑ๋Šฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์œ  – ๊ณ ์† ์„ฑ๋Šฅ + ์œ„์น˜ ์ •๋ ฌ ์ง€์›
  Isar๋Š” Hive๋ณด๋‹ค 2~5๋ฐฐ ๋น ๋ฅธ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์†๋„๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, startLat, startLng ๊ฐ™์€ ์ขŒํ‘œ ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ ์šฉํ•ด ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์—†์ด๋„ ์˜คํ”„๋ผ์ธ ๊ฒฝ๋กœ ์บ์‹œ๋ฅผ ์ €์žฅํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋ฐ ๊ฐ•๋ ฅํ•œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.

์žฅ์  – ๊ฒฝ๋กœ ์บ์‹œ ๋ฐ ์‹ค์‹œ๊ฐ„ ํ•„ํ„ฐ๋ง์— ๊ฐ•ํ•จ
  ์ด์ „ ๊ฒฝ๋กœ, ์ฆ๊ฒจ์ฐพ๊ธฐ, ์ตœ๊ทผ ๋ฐฉ๋ฌธ ๊ธฐ๋ก ๋“ฑ์„ ์ •๋ ฌํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋งค์šฐ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. API๋กœ ๋ฐ›์€ ๊ฒฝ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ €์žฅํ•ด ๋ฐ˜๋ณต ๊ฒฝ๋กœ ์š”์ฒญ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์  – ์ดˆ๊ธฐ ์„ค๊ณ„ ํ•„์š”
  ์ขŒํ‘œ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰, ์ธ๋ฑ์Šค ์„ค๊ณ„, ์ค‘๋ณต ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ ๋“ฑ ์•ฑ ํŠน์„ฑ์— ๋งž๋Š” ๊ตฌ์กฐ ์„ค๊ณ„๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์•ˆ – Hive (์ฆ๊ฒจ์ฐพ๊ธฐ๋งŒ ์ €์žฅ ์‹œ)
  ์ฆ๊ฒจ์ฐพ๊ธฐ ์œ„์น˜ ์ €์žฅ ๋“ฑ ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—๋Š” Hive๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒฝ๋กœ ๊ฒ€์ƒ‰์ด๋‚˜ ์ •๋ ฌ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ” ์ฐธ๊ณ  ํŒ ๋ฐ ๊ณ ๋ ค ์‚ฌํ•ญ

์™ธ๋ถ€ API ์—ฐ๋™ – ์‹ค์‹œ๊ฐ„ ๊ฒฝ๋กœ ๊ณ„์‚ฐ์€ ์™ธ๋ถ€ API ์‚ฌ์šฉ
๊ธธ์ฐพ๊ธฐ๋Š” Kakao, Google ๋“ฑ ์ง€๋„ API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ฒฐ๊ณผ๋งŒ DB์— ์ €์žฅํ•˜๋ฉด ์„œ๋ฒ„ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DB ํ™œ์šฉ – ์บ์‹œ ๋ฐ ์‚ฌ์šฉ์ž ๊ธฐ๋ก ์ €์žฅ ์ค‘์‹ฌ
DB๋Š” ๊ฒฝ๋กœ ์บ์‹œ, ์ฆ๊ฒจ์ฐพ๊ธฐ, ๋ฐฉ๋ฌธ ์ด๋ ฅ ๋“ฑ์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•˜๊ณ , ์‹ค์‹œ๊ฐ„ ๊ณ„์‚ฐ์€ ์™ธ๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.