์ ์ฒด ๊ธ (154) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ Pagination Pagination ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ๋๋ ๋ถ๋ฌ์ค๋ ๊ธฐ์ ํน์ง - ์ฟผ๋ฆฌ์ ํด๋น๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ค ๋ถ๋ฌ์ค์ง ์๊ณ ๋ถ๋ถ์ ์ผ๋ก ์ชผ๊ฐ์ ๋ถ๋ฌ์จ๋ค - ํด๋ผ์ฐ๋ ์์คํ ์ ๋ฐ์ดํฐ ์ ์ก์ ๋์ด ๋ ๋ค - ๋์ด ์๋ค๋๋ผ๋ ์ ์ต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ณด๋ด๋ฉด ๋ถ๋ช ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฐ์ง ๊ฒ์ด๋ค - ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฐ์ง์ง ์๋๋ผ๋ ๋ฐ์ดํฐ ์ ์ก์ ์๋นํ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ด๋ค Page Based Pagination - ํ์ด์ง ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ผ์ ์์ฒญํ๋ Pagination์ด๋ค - ์์ฒญ ๋ณด๋ผ ๋ ์ํ๋ ๋ฐ์ดํฐ ๊ฐฏ์์ ๋ช๋ฒ์งธ ํ์ด์ง ๊ฐ์ ธ์ฌ์ง ๋ช ์ํ๋ค - ํ์ด์ง ์ซ์ ๋๋ฅด๋ฉด ๋ค์ ํ์ด์ง๋ก ๋์ด๊ฐ๋ ํํ์ UI์์ ๋ง์ด ์ฌ์ฉ๋๋ค - Pagination ๋์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋ ๊ฒฝ์ฐ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๊ฐ ๋๋ฝ๋๊ฑฐ.. Session, Token, JWT, Access Token, Refresh Token Session ์ ์ ์ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ์ํ๋ฅผ ์ ์งํ๋ ๋๊ตฌ - ์ธ์ ์ ํน์ํ ID๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค - ์ธ์ ์ ์๋ฒ์์ ์์ฑ๋๋ฉฐ, ํด๋ผ์ด์ธํธ์์ ์ฟ ํค๋ฅผ ํตํด ์ ์ฅ๋๋ค - ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ ๋ณด๋ผ ๋ ์ธ์ ID๋ฅผ ๊ฐ์ด ๋ณด๋ด๋ฉด ํ์ฌ ์์ฒญํ๋ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ์๋ฒ์์ ์ ์ ์๋ค (์์ฒญํ ๋๋ง๋ค ์์ด๋์ ๋น๋ฐ๋ฒํธ ๋ฌผ์ด๋ณผ ํ์ ์๋ค) - ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ ธ์ถํ ์ํ์ด ์๋ค Session ๋จ์ - ์ธ์ ID๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์์ฒญ ์์ ๋๋ง๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ธํด์ผ ํ๋ค - ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ์ ์ ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ Horizontal Scaling์ด ์ด๋ ต๋ค Token ์ ์ ์ ์ ๋ณด๋ฅผ Base64๋ก ์ธ์ฝ๋ฉ๋ String ๊ฐ์ ์ ์ฅํ๋.. Tab bar, DefaultTabController, Bottom Navigation Bar DefaultTabController() ์ฌ์ฉ์ Controller์์ด Controller ์ฌ์ฉ ๊ฐ๋ฅํ๋ค ์ผ๋ฐ์ ์ผ๋ก ํญ๋ฐ ์ฌ์ฉํ๋ ์ํฉ์์๋ DefaultTabController()๋ก Controller๋ฅผ ์๋์ผ๋ก ๊ตฌํํ๋ ๋ฐฉ์๋ณด๋ค๋ Controller๋ฅผ ์ง์ ๋ฃ์ด์ ์ ์ดํ๋ ์ํฉ์ด ํจ์ฌ ์ฆ๋ค tab controller๋ฅผ ์ง์ ๊ตฌํํ ๋์ ์ฅ์ : ์ข ๋ ์์ ๋ ๋๊ฒ tab ๊ตฌํ ๊ฐ๋ฅํ๋ค ํ๋์ ๋ธ๋ญ์ ์ด์ ์์ ์ ๊ฐ์ ์คํ์ผ๋ง ๋ถ๋ถ์ด๋ค Bottom Navigation Bar ๋ฏธ์ธ๋จผ์ง ์ธก์ ์ฑ #2 - Hive Hive NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฉด์ ๋์์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ฑ์ ์๋ช ์ฃผ๊ธฐ์ ๊ด๊ณ์์ด ๋ฐ์ดํฐ๊ฐ ์ ์ง๋์ง๋ง ์ฑ์ด ์คํ๋๋ ์๊ฐ ํ์ผ์ ์ ์ฅ๋ผ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ๋ค -> ๋น ๋ฅธ ์๋ ์๋! import 'package:hive_flutter/hive_flutter.dart'; ํ๋ฌํฐ ํ์ด๋ธ๋ฅผ import ํด์ค์ผ ๋ ๋ง์ ๊ธฐ๋ฅ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค void main() async { await Hive.initFlutter(); main.dart์์ ํ์ด๋ธ ์ด๊ธฐํ Hive box SQL์ ํ ์ด๋ธ์ฒ๋ผ ๋๊ฐ์ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์๋๋ ๊ณต๊ฐ์ด๋ค ํน์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๋ค๋ฃจ๊ธฐ ์ํด์๋ ๋ฐ์ค๋ฅผ ์ด์ด์ผ ํ๋ค ๋ฐ์ค๋ฅผ ์ด ๋๋ ์ด๋ค ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ง, ๋ฐ์ค ์ด๋ฆ์ ์ง์ ํด์ค.. SQL, NoSQL, Hive SQL (Structured Query Language) ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ์ ์ต์ ํ๋์ด ์๋ค ๋ฐ์ดํฐ ์คํค๋ง๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ๊ณ , ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๊ฐ ๊ณ ์ ๋์ด ์๋ค ๋ฐ์ดํฐ ์ผ๊ด์ฑ ACID (์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ) ํธ๋์ญ์ ์ ์ง์ํ์ฌ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค ์ด๋ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋๋ค ์ค์ผ์ผ๋ง ์์ง ์ค์ผ์ผ๋ง์ด ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, ์๋ฒ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค ์ํ ์ค์ผ์ผ๋ง์ ๋ ๋ณต์กํ๊ณ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค ์ฟผ๋ฆฌ ์ธ์ด SQL ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ฉฐ, ๋ค์ํ ์กฐ์ธ ๋ฐ ์ง๊ณ ์์ ์ ์ํํ ์ ์๋ค NoSQL (Not Only SQL) ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ค์ํ ๋ฐ์ดํฐ ํ์์ ๋ค๋ฃฐ ์ ์์ผ๋ฉฐ, ์คํค๋ง๊ฐ ์ ์ฐํ๋ค ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋์ค์ ๋ณ๊ฒฝํ ์ ์๋ค ๋ฐ์ดํฐ .. HTTP, REST API, RESTful API HTTP (Hypertext Transfer Protocol) ๊ธฐ๊ธฐ ๊ฐ ํต์ ํ๋ ๋ฒ์ ๋ํ ์ผ์ข ์ ์ฝ์ ์น์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ด๋ค ํด๋ผ์ด์ธํธ(์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ )์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ์๋ตํ๋ ๋ฐ ์ฌ์ฉ๋๋ค ์ฃผ๋ก ๋ ๊ฐ์ง ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค GET (๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด) POST (๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ณด๋ด๊ธฐ ์ํด) ์๋ฅผ ๋ค์ด, ์น ํ์ด์ง๋ฅผ ์ด๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์น ์๋ฒ๋ก GET ์์ฒญ์ ๋ณด๋ด๊ณ ํด๋น ํ์ด์ง์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ค URL ์ฃผ์์ URL Query๋ก ์ด๋ฃจ์ด์ง Body Header ์์ฒญ์ ๋ํ ๋ฐ์ดํฐ REST API (Representational State Transfer API) HTTP๋ฅผ ์ฌ์ฉํ๋ ๋ฒ์ ๋ํ ์ผ์ข ์ ์ฝ์ REST๋ ์น ์๋น์ค ์ํคํ ์ฒ ์คํ์ผ ์ค ํ๋๋ก, .. ๋ฏธ์ธ๋จผ์ง ์ธก์ ์ฑ #1 - ๋ ์ด์์ ๋๋ฌด ๊ท์ฌ์ด .. ๋ฏธ์ธ๋จผ์ง ์ธก์ ์ฑ ๐ ์์ง ์ค์๊ฐ ๋ฐ์ดํฐ ๋ฐ์์ค๊ธฐ ์ ์ด๋ผ ์์๋ก ๊ตฌ์ฑํด์ฃผ์๋ค ํฐ๋จธ๋ฆฌ ์ด๋ชจ์ง์ ํตํต ํ๋ ์ ๋๋ฉ์ด์ ๋ฃ์ด๋ ์ข์ ๊ฑฐ ๊ฐ๋ค (ํ๋ฌํฐ์์ ๊ฐ๋ฅํ ๋ถ๋ถ์ด๋ ค๋?) ์ฌ๊ธฐ์๋ถํฐ ์ฃผ์ ์ฝ๋๋ง ์ด์ง์ฟต.. drawer (์๋)์ ๊ตฌ์ฑํ๋ค ๋ฉ์ธ์ด ๋๋ ๋ถ๋ถ์ ์ฑ๋ฐ๋ก ๊ตฌ์ฑํ๋ค ์ฑ๋ฐ ์๋์ CategoryCard์ HourlyCard๊ฐ ์์๋๋ก ์์นํ๋ค DrawerHeader์ ListTile๋ก ๊ฐ๊ฐ ๋ง๋ค์ด์ค๋ค ํ๋ฌํฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํ๋์ด์๋ ๊ธฐ๋ฅ๋ ์ด๋ฏธ ์ธ๋ จ๋์ด ๋ง์ ๋ ๋ค ์กฐ๊ธ๋ง ์๋ด์ฃผ๋ฉด ๋จ.. LayoutBuilder( builder: (context, constraint) { LayoutBuilder๋ฅผ ์ด์ฉํ๋ฉด constraint๋ฅผ ์ฌ์ฉํ ์ ์์ด์ width: constraint.max.. RefreshIndicator RefreshIndicator ์๋๋ก ์คํฌ๋กค ๊ฐ๋ฅํ ํ์ ํญ๋ชฉ์ด ์ค๋ฒ์คํฌ๋กค๋๋ฉด ์ ๋๋ฉ์ด์ ์ํ ์งํ๋ฅ ํ์๊ธฐ๊ฐ ์ฌ๋ผ์ ธ์ ํ์๋๋ค ์คํฌ๋กค์ด ๋๋ ๋ ํ์๊ธฐ๊ฐ ์์ ํ ๋ถํฌ๋ช ํด์ง ๋งํผ ์ถฉ๋ถํ ๋๋๊ทธ๋ ๊ฒฝ์ฐ onRefresh ์ฝ๋ฐฑ์ด ํธ์ถ๋๋ค ์ฝ๋ฐฑ์ ์คํฌ๋กค ๊ฐ๋ฅ ํญ๋ชฉ์ ๋ด์ฉ์ ์ ๋ฐ์ดํธํ ํ ๋ฐํ๋๋ Future๋ฅผ ์๋ฃํ ๊ฒ์ผ๋ก ์์๋๋ค ์ฝ๋ฐฑ์ Future๊ฐ ์๋ฃ๋ ํ ์๋ก ๊ณ ์นจ ํ์๊ฐ ์ฌ๋ผ์ง๋ค https://api.flutter.dev/flutter/material/RefreshIndicator-class.html RefreshIndicator class - material library - Dart API A widget that supports the Material "swipe to refresh" idio.. PREV 1 2 3 4 ยทยทยท 20 NEXT