[WIL] ์˜์А๋žญ๐Ÿ’ซ, ์ฃผ๊ฐ„ ํ•™์Šต๋Ÿ‰ ์ด์ •๋ฆฌ

๊น€์˜๊ด‘ยท2026๋…„ 1์›” 9์ผ

flutter ์•ฑ ๊ฐœ๋ฐœ ์ˆ™๋ จ ์ฃผ์ฐจ์— ๋“ค์–ด์˜ค๋ฉฐ ๋ถ€์ฉ ํ•™์Šตํ•ด์•ผ ํ•  ์–‘์ด ๋งŽ์•„์กŒ๋‹ค.
ํฌ๊ฒŒ ์ฑ•ํ„ฐ๋ฅผ ๋‚˜๋ˆ ๋ณด๋ฉด, MVVM, api ํ†ต์‹ , firebase ์—ฐ๋™์ด๋‹ค.
์ถ”๊ฐ€์ ์œผ๋กœ ์›น ์†Œ์ผ“๊ณผ GPS๊ฐ€ ์žˆ์ง€๋งŒ, ๊ทธ๋ถ€๋ถ„์€ ๊ฐœ์ธ๊ณผ์ œ์— ๋จผ์ € ์ง„๋„๋ฅผ ๋งž์ถ˜ ๋’ค ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

โญ MVVM, riverpod_generator : 2๏ธโƒฃ

์ „์ฒด์ ์ธ ์•„ํ‚คํ…์ฒ˜๋Š” compose์™€ ๋งค์šฐ ํก์‚ฌํ•˜๋‹ค.
๋‹ค๋งŒ riverpod ํŠน์œ ์˜ ์‚ฌ์šฉ๋ฒ•๋ผ๋˜์ง€, flutter ํŠน์œ ์˜ MVVM ๊ตฌ์กฐ ๊ด€๋ฆฌ๋ผ๋˜์ง€.
์ด๋Ÿฐ ๋ถ€๋ถ„์—์„œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒƒ๋“ค์ด ์žˆ์—ˆ์ง€๋งŒ, ๊ตฌ๊ธ€๋ง๊ณผ ํŠœํ„ฐ๋‹˜ ๋“ฑ ์ฃผ๋ณ€์˜ ๋„์›€์„ ํ†ตํ•ด ์กฐ๊ธˆ์”ฉ ์•Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ชจ๋“  viewmodel์€ ์ตœ์ข…์ ์œผ๋กœ ํ•˜๋‚˜์˜ ์ƒํƒœ๋งŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด์—ˆ๋‹ค.
Generator ๋ฐฉ์‹์€ provider๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
Counsumer๋งŒ ์ž˜ ์‚ฌ์šฉํ•ด์ค˜๋„ ์ƒํƒœ๊ด€๋ฆฌ์˜ ์–ด๋ ค์›€์€ ์—†์—ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต๋ถ€ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์€ ๋ ˆ๊ฑฐ์‹œ ๋ฐฉ์‹์ด๋‹ค.
notifier์™€ AsyncNotifier ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ถ”๊ฐ€์ ์ธ Provider ๊ตฌํ˜„์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด๊ธฐ์— ๋” ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.

โญ HTTP ํ†ต์‹  : 2๏ธโƒฃ

HTTP ํ†ต์‹ ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค๋‹ค.
Client ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
Uri.parse๋ฅผ ํ†ตํ•ด Uri ์ฃผ์†Œ(String)์„ Client์— ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค.
์ดํ›„, Client๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค.

  • URi๋ฅผ IP ์ฃผ์†Œ๋กœ ๋ฐ”๊พผ๋‹ค.
  • 3-way handshake, ์ด 3๋ฒˆ์˜ ์—ฐ๊ฒฐ ํ™•์ธ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.
  • HTTP ์š”์ฒญ ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ํ™•์ธํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ต ๋ฉ”์„ธ์ง€์— ๋‹ด์•„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.

โญ firebase ์—ฐ๋™ : 1๏ธโƒฃ

flutter์—์„œ firebase ์‹œ, ํ•„์ˆ˜์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

flutter pub add cloud_firestore
flutter pub add firebase_core

์ดํ›„ CRUD์— ๋”ฐ๋ผ firestroe DB ๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•œ๋‹ค.

abstract class TodoRepository {
  Future<void> addTodo(ToDoEntity todo);
  Future<void> updateTodo(ToDoEntity todo);
  Future<void> deleteTodo(ToDoEntity todo);
  Future<List<ToDoEntity>> getTodos();
}

firebase์˜ firestore๋Š” colletion, doc์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ, colletion์ด ํ…Œ์ด๋ธ”์„ ์˜๋ฏธํ•˜๊ณ  doc๋Š” ๊ฐ ํŠœํ”Œ์„ ์˜๋ฏธํ•œ๋‹ค.
๋‹น์—ฐํžˆ NoSQL์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ๋ฐฉ์‹์ด ๋‹ค๋ฅด์ง€๋งŒ, ์กฐ๊ธˆ์€ ๋น„์Šทํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

โ“ QueryDocumentSnapshot

colletion์„ ์ฐธ์กฐํ•  ๋•Œ, QueryDocumentSnapshot์„ ํ”์น˜ ์•Š๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ด๋Š” ๋ฌธ์„œ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌถ์Œ ๋‹จ์œ„์ด๋ฉฐ, .data ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์•ˆ์˜ ๋ฌธ์„œ๋“ค(DocumentSnapshot)์„ ์–ป์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

โ“ DocumentSnapshot

DocumentSnapshot์€ document ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

profile
์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€