์ฑ„๋„ํ†ก ์•„์ด์ฝ˜

ํ™•์žฅ์„ฑ ์žˆ๋Š” Flutter App: Supabase, Clean Architecture & Bloc

ํ”Œ๋Ÿฌํ„ฐ ๊ธฐ์ดˆ๋ฅผ ๋„˜์–ด ์‹ค๋ฌด ์ˆ˜์ค€์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ „๋ฌธ๊ฐ€๋กœ ๋„์•ฝํ•˜์„ธ์š”. ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜, Supabase, Bloc, ๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•ฑ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

(5.0) ์ˆ˜๊ฐ•ํ‰ 2๊ฐœ

์ˆ˜๊ฐ•์ƒ 35๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

ํ”Œ๋Ÿฌํ„ฐ
ํ”Œ๋Ÿฌํ„ฐ
ํด๋ฆฐ์•„ํ‚คํ…์ฒ˜
ํด๋ฆฐ์•„ํ‚คํ…์ฒ˜
์ƒํƒœ๊ด€๋ฆฌ
์ƒํƒœ๊ด€๋ฆฌ
์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ
ํ”Œ๋Ÿฌํ„ฐ
ํ”Œ๋Ÿฌํ„ฐ
ํด๋ฆฐ์•„ํ‚คํ…์ฒ˜
ํด๋ฆฐ์•„ํ‚คํ…์ฒ˜
์ƒํƒœ๊ด€๋ฆฌ
์ƒํƒœ๊ด€๋ฆฌ
์‹ค์Šต ์ค‘์‹ฌ
์‹ค์Šต ์ค‘์‹ฌ

์ˆ˜๊ฐ• ํ›„ ์ด๋Ÿฐ๊ฑธ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”

  • ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ์‹ค๋ฌด ์ ์šฉ: ์ด๋ก ์„ ๋„˜์–ด Presentation, Domain, Data ๊ณ„์ธต์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด ๊ฒฌ๊ณ ํ•œ ์•ฑ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค.

  • Supabase ํ’€์Šคํƒ ๊ฐœ๋ฐœ: ๋ฐฑ์—”๋“œ ์ฝ”๋“œ ์ž‘์„ฑ ์—†์ด๋„ Supabase๋ฅผ ํ™œ์šฉํ•ด ์ธ์ฆ(Auth), ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์Šคํ† ๋ฆฌ์ง€, ์‹ค์‹œ๊ฐ„(Realtime) ๊ธฐ๋Šฅ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ์—ฐ๋™ํ•ฉ๋‹ˆ๋‹ค.

  • BLoC๊ณผ Event Bus๋ฅผ ํ™œ์šฉํ•œ ์ƒํƒœ ๋™๊ธฐํ™”: ๋Œ€๊ทœ๋ชจ ์•ฑ์—์„œ ์—ฌ๋Ÿฌ ํ™”๋ฉด์— ํฉ์–ด์ง„ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Event Bus ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„์ž…ํ•˜๊ณ  BLoC ๊ฐ„์˜ ์šฐ์•„ํ•œ ํ†ต์‹  ๋ฐฉ๋ฒ•์„ ์ตํž™๋‹ˆ๋‹ค.

  • ๋ชจ๋…ธ๋ ˆํฌ(Monorepo) ํ™˜๊ฒฝ ๊ตฌ์ถ•: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ‚ค์ง€ ๋‹จ์œ„๋กœ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ „๋ฌธ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ฒฝํ—˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์‹ค์ „ํ˜• ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„: Debounce๋ฅผ ์ ์šฉํ•œ ๋ฐ˜์‘ํ˜• ๊ฒ€์ƒ‰, ๊ณตํ†ต ๋กœ์ง์„ ํ™œ์šฉํ•œ ๋ฌดํ•œ ์Šคํฌ๋กค, ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๋“ฑ ์‹ค์ œ ์„œ๋น„์Šค ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

"Flutter ๊ธฐ์ดˆ๋ฅผ ๋„˜์–ด, ์‹ค๋ฌด ์ˆ˜์ค€์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ „๋ฌธ๊ฐ€๋กœ ๋„์•ฝํ•˜์„ธ์š”."

๋‹จ์ˆœํ•œ ์นด์šดํ„ฐ ์•ฑ์ด๋‚˜ TODO ๋ฆฌ์ŠคํŠธ ์˜ˆ์ œ๋ฅผ ๋„˜์–ด, ์‹ค์ œ ์„œ๋น„์Šค์—์„œ ๋งˆ์ฃผํ•˜๋Š” ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ค€๋น„๊ฐ€ ๋˜์…จ๋‚˜์š”? ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ• ์ˆ˜๋ก ์ฝ”๋“œ๊ฐ€ ์—‰ํ‚ค๊ณ , ์ž‘์€ ์ˆ˜์ • ํ•˜๋‚˜์—๋„ ์•ฑ์ด ํ”๋“ค๋ฆฌ๋Š” ๊ฒฝํ—˜์„ ํ•ด๋ณด์…จ๋‹ค๋ฉด ์ด ๊ฐ•์˜๊ฐ€ ๊ทธ ๋‹ต์ด ๋˜์–ด์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณธ ๊ฐ•์˜๋Š” ๋‹จ์ˆœํžˆ ํ•˜๋‚˜์˜ ์•ฑ์„ ์™„์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ํ”๋“ค๋ฆฌ์ง€ ์•Š๋Š” 'ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์€ ์•ฑ'์„ ๋งŒ๋“œ๋Š” ๊ฒฌ๊ณ ํ•œ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์„ ์ „์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ—๏ธ AI ์‹œ๋Œ€, ์™œ ์—ฌ์ „ํžˆ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ฐฐ์›Œ์•ผ ํ• ๊นŒ์š”?

AI๊ฐ€ ๋‹จ ๋ช‡ ์ดˆ ๋งŒ์— ์ฝ”๋“œ๋ฅผ ์งœ์ฃผ๋Š” ์‹œ๋Œ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ฌด์—‡์— ์ง‘์ค‘ํ•ด์•ผ ํ• ๊นŒ์š”?

  • ์กฐ๊ฐ์ด ์•„๋‹Œ ์ „์ฒด๋ฅผ ๋ณด๋Š” ํž˜: AI๋Š” ๋‹จ์ผ ํ•จ์ˆ˜๋‚˜ ์œ„์ ฏ์€ ์ž˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜๋งŒ ์ค„์˜ ์ฝ”๋“œ๊ฐ€ ์–ฝํžˆ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ ๋ถ€ํ’ˆ์ด ์–ด๋””์— ์œ„์น˜ํ•ด์•ผ ํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ ์ธ๊ฐ„ ๊ฐœ๋ฐœ์ž์˜ ๋ชซ์ž…๋‹ˆ๋‹ค.

  • AI์˜ ์ฝ”๋“œ๋ฅผ ๋‹ด๋Š” ๋‹จ๋‹จํ•œ ๊ทธ๋ฆ‡: AI๊ฐ€ ์ƒ์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๊ด€๋ฆฌ๊ฐ€ ์•ˆ ๋˜๋Š” '์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ'๊ฐ€ ๋  ์œ„ํ—˜๋„ ์ปค์ง‘๋‹ˆ๋‹ค. ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์™€ ๋ชจ๋…ธ๋ ˆํฌ๋Š” AI๊ฐ€ ๋งŒ๋“  ์ฝ”๋“œ ์กฐ๊ฐ๋“ค์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋‹ด์•„ ์•ˆ์ „ํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š” ๋‹จ๋‹จํ•œ ๊ทธ๋ฆ‡์ด ๋˜์–ด์ค๋‹ˆ๋‹ค.

  • ๋Œ€์ฒด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฐ์ •๊ถŒ์ž: AI๋Š” ์˜ต์…˜์„ ์ œ์‹œํ•  ๋ฟ, ๋น„์ฆˆ๋‹ˆ์Šค ์ƒํ™ฉ์— ๋งž๋Š” ์ตœ์ ์˜ ๊ธฐ์ˆ ์  ํŒ๋‹จ์€ ๋‚ด๋ฆฌ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ•์˜๋Š” ์—ฌ๋Ÿฌ๋ถ„์„ ๋‹จ์ˆœํ•œ '์ฝ”๋”'์—์„œ AI๋ฅผ ๋„๊ตฌ๋กœ ๋ถ€๋ฆฌ๋Š” '์•„ํ‚คํ…ํŠธ'๋กœ ์ง„ํ™”์‹œ์ผœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.



๐Ÿ›ก๏ธ ๊ฐ•์˜๋ฅผ ์ง€ํƒฑํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ธฐ๋‘ฅ (Three Pillars)

์‹ค์ „ ๋ฌด๋Œ€์ธ 'Community Board' ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๋ฉฐ, ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€ํƒฑํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ธฐ์ˆ ์„ ๋งˆ์Šคํ„ฐํ•ฉ๋‹ˆ๋‹ค.

  1. ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜ (Clean Architecture): ๋’ค์ฃฝ๋ฐ•์ฃฝ๋œ ์ฝ”๋“œ์— ์งˆ์„œ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ํ…Œ์ŠคํŠธ์™€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•œ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ชจ๋˜ ๋ฐฑ์—”๋“œ (Supabase): ๋ณต์žกํ•œ ์„œ๋ฒ„ ์„ค์ • ์—†์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์ธ์ฆ, ์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ๊นŒ์ง€ ์ œ๊ณตํ•˜๋Š” Supabase๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ๊ตฌ์ถ• ์‹œ๊ฐ„์„ ํš๊ธฐ์ ์œผ๋กœ ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

  3. ํšจ์œจ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ (BLoC & Event Bus): Flutter ํ‘œ์ค€ ์ƒํƒœ ๊ด€๋ฆฌ์ธ BLoC๊ณผ ๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” Event Bus ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ, ์•ฑ ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์šฐ์•„ํ•˜๊ฒŒ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.





๐Ÿš€ ์ฃผ์š” ํ•™์Šต ๋‚ด์šฉ ๋ฐ ํŠน์ง•

  • ์‹ค๋ฌดํ˜• ์ปค๋ฎค๋‹ˆํ‹ฐ ์•ฑ ๊ตฌ์ถ•: ์ธ์ฆ, ๊ฒŒ์‹œ๋ฌผ CRUD, ์‹ค์‹œ๊ฐ„ ๋Œ“๊ธ€/์ข‹์•„์š”, ํ”„๋กœํ•„ ๊ด€๋ฆฌ, ๋ฐ˜์‘ํ˜• ๊ฒ€์ƒ‰ ๋“ฑ ์‹ค์ œ ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์Šคํฌ๋ž˜์น˜๋ถ€ํ„ฐ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋…ธ๋ ˆํฌ(Monorepo) ํ™˜๊ฒฝ: ๊ธฐ๋Šฅ์„ ๋…๋ฆฝ๋œ ํŒจํ‚ค์ง€ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ  ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ๊ฐ์„ ์ตํž™๋‹ˆ๋‹ค.

  • ๊ณ ๊ธ‰ ์ŠคํŠธ๋ฆผ ๋ฐ ์‹ค์‹œ๊ฐ„ ์ œ์–ด: Supabase Realtime์„ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ, ๊ฒ€์ƒ‰ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ Debounce ๋ฐ switchMap ๋“ฑ ์‹ค๋ฌด ์ˆ˜์ค€์˜ ๊ธฐ์ˆ ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • ์•„ํ‚คํ…์ฒ˜์˜ ์ •์ˆ˜, ํ™•์žฅ์„ฑ: ํ˜„์žฌ์˜ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•œ ์ฑ„ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋งŒ ๋ฐ”๊ฟ”์„œ ์ƒˆ๋กœ์šด ์•ฑ์„ ์ถœ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์˜ ์„ค๊ณ„ ๋Šฅ๋ ฅ์„ ๊ฐ–์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


์ฃผ์š” ํ•™์Šต ๋‚ด์šฉ ๋ฐ ์•ฑ ํŠน์ง•

๐Ÿ“… ์ปค๋ฆฌํ˜๋Ÿผ ๋กœ๋“œ๋งต (Learning Path)

  1. Foundation: ์‹ค๋ฌด ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š” VS Code ํ™˜๊ฒฝ๊ณผ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ํ•„์ˆ˜ ๋„๊ตฌ ๋งˆ์Šคํ„ฐ

  2. Architecture: ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ์™€ ์˜์กด์„ฑ ๊ทœ์น™ ๋“ฑ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ์›์น™ ์ •๋ฆฝ

  3. Infrastructure: ํ™•์žฅ์„ฑ์„ ์œ„ํ•œ ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์ถ• ๋ฐ Supabase ๋ฐฑ์—”๋“œ(SQL, RLS, Functions) ์„ค๊ณ„

  4. Development: BLoC๊ณผ Event Bus๋ฅผ ํ™œ์šฉํ•œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ(Auth, Post, Search) ๊ตฌํ˜„

  5. Advanced: ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ฐ์ง€ ๋ฐ UI ๋ฐ˜์˜์„ ์œ„ํ•œ Supabase Realtime ์‹ฌํ™” ์ ์šฉ

  6. Next Level: ์ „์ฒด ํ”„๋กœ์ ํŠธ ํšŒ๊ณ  ๋ฐ ํƒ€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์˜ ํ™•์žฅ ์ „๋žต ๋…ผ์˜

๐ŸŽฏ ์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค

  • Flutter๋กœ ๊ธฐ๋ณธ์ ์ธ ์•ฑ์€ ๋งŒ๋“ค์–ด๋ดค์ง€๋งŒ, ๋” ํฌ๊ณ  ์ฒด๊ณ„์ ์ธ ํ”„๋กœ์ ํŠธ์— ๋„์ „ํ•˜๊ณ  ์‹ถ์€ ๋ถ„

  • ์‹ค๋ฌด์—์„œ ํ™œ์šฉ๋˜๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‹ค์ œ ์ฝ”๋“œ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•œ ๋ถ„

  • Supabase๋ฅผ ํ™œ์šฉํ•ด ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ  ์‹ถ์€ 1์ธ ๊ฐœ๋ฐœ์ž ๋˜๋Š” ์Šคํƒ€ํŠธ์—… ๊ฐœ๋ฐœ์ž

  • ์ทจ์—…/์ด์ง์„ ์œ„ํ•ด 'ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•ฑ ์„ค๊ณ„ ๋Šฅ๋ ฅ'์ด ๋‹ด๊ธด ํฌํŠธํด๋ฆฌ์˜ค๊ฐ€ ํ•„์š”ํ•œ ๋ถ„

๐Ÿ“‹ ์ˆ˜๊ฐ• ์ „ ํ™•์ธํ•ด ์ฃผ์„ธ์š” (Prerequisites)

  • Flutter & Dart ๊ธฐ์ดˆ: ๊ธฐ๋ณธ์ ์ธ ์œ„์ ฏ ์‚ฌ์šฉ๋ฒ•๊ณผ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(async/await)์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์ƒํƒœ ๊ด€๋ฆฌ ๊ฒฝํ—˜: Provider, Riverpod, GetX ๋“ฑ ์–ด๋–ค ๋ฐฉ์‹์ด๋“  ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. (BLoC์ด ์ฒ˜์Œ์ด๋”๋ผ๋„ ์ถฉ๋ถ„ํžˆ ๋”ฐ๋ผ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)

  • ๊ธฐ๋ณธ SQL ์ง€์‹: ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ธฐ์ดˆ์ ์ธ CRUD ๋ฌธ๋ฒ•์„ ์•Œ๊ณ  ๊ณ„์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์ •์ฑ…์€ ๊ฐ•์˜์—์„œ ํ•จ๊ป˜ ๋ฐฐ์›๋‹ˆ๋‹ค.

๐Ÿ“‚ ๊ฐ•์˜ ์ž๋ฃŒ ๋ฐ ์†Œ์Šค ์ฝ”๋“œ ์ œ๊ณต

  • ๊ณ ํ’ˆ์งˆ PDF ์Šฌ๋ผ์ด๋“œ: ๊ฐ ์„น์…˜๋ณ„ ํ•ต์‹ฌ ์ด๋ก  ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ์ด ํฌํ•จ๋œ PDF ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์ž๋ฃŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (๊ฐ ์„น์…˜์˜ โ€˜์ž๋ฃŒโ€™ ํƒญ์—์„œ ๋‹ค์šด๋กœ๋“œ)

  • ์ œ๊ณต๋˜๋Š” ์ตœ์ข… ์†Œ์Šค ์ฝ”๋“œ:


    ๊ธฐ์ดˆ ๋ ˆ๋ฒจ: ์„น์…˜ 3์—์„œ ๋‹ค๋ฃจ๋Š” ์ƒ์‚ฐ์„ฑ ๋„๊ตฌ ๋ฐ ํ•ต์‹ฌ ๊ตฌ๋ฌธ(์˜ˆ: data_class)์˜ ์™„์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ: ์ œ4์žฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒŒ์‹œํŒ ์•ฑ ์ „์ฒด์˜ ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์กฐ ๋ฐ ์ตœ์ข… ๊ตฌํ˜„ ์ฝ”๋“œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

  • ์†Œ์Šค ์ฝ”๋“œ ๋งํฌ์™€ ์‚ฌ์šฉ๋ฒ• ์•ˆ๋‚ด๋Š” ์ œ3์žฅ ๋ฐ ์ œ4์žฅ์˜ ์ฒซ ๊ฐ•์˜์—์„œ ์ƒ์„ธํžˆ ์ œ๊ณต๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.


๋‹จ์ˆœํžˆ '์–ด๋–ป๊ฒŒ' ๋งŒ๋“œ๋Š”์ง€๋ฅผ ๋„˜์–ด '์™œ' ๊ทธ๋ ‡๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ทธ ๋ณธ์งˆ์„ ์ดํ•ดํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค๋ ฅ์„ ๋‹ค์Œ ๋ ˆ๋ฒจ๋กœ ๋Œ์–ด์˜ฌ๋ฆด ์ด ์—ฌ์ •์— ์ง€๊ธˆ ๋ฐ”๋กœ ํ•ฉ๋ฅ˜ํ•˜์„ธ์š”!

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ๊ธฐ๋ณธ์ ์ธ Flutter ์•ฑ์€ ๋งŒ๋“ค์–ด๋ดค์ง€๋งŒ, ์‹ค์ œ ์„œ๋น„์Šค ์ˆ˜์ค€์˜ ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๊ฐœ๋ฐœ์ž

  • ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜์— ์–ด๋ ค์›€์„ ๋А๊ปด 'ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜'๋ผ๋Š” ํ•ด๊ฒฐ์ฑ…์„ ์–ป๊ณ  ์‹ถ์€ ๋ถ„

  • ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ์‹œ๊ฐ„์„ ์Ÿ๊ธฐ๋ณด๋‹ค Supabase์™€ ๊ฐ™์€ BaaS๋ฅผ ํ™œ์šฉํ•ด ๋น ๋ฅด๊ฒŒ ๊ณ ์„ฑ๋Šฅ ์•ฑ์„ ์ถœ์‹œํ•˜๊ณ  ์‹ถ์€ 1์ธ ๊ฐœ๋ฐœ์ž ๋˜๋Š” ์Šคํƒ€ํŠธ์—… ๊ฐœ๋ฐœ์ž

  • ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ(BLoC)๋ฅผ ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๋„˜์–ด, ์ฒด๊ณ„์ ์ธ ์•„ํ‚คํ…์ฒ˜์™€ ๊ฒฐํ•ฉํ•˜๋Š” ์‹ค์ „ ๋…ธํ•˜์šฐ๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๋ถ„

  • ์ทจ์—… ๋˜๋Š” ์ด์ง์„ ์œ„ํ•ด ํฌํŠธํด๋ฆฌ์˜ค์— 'ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•ฑ ์„ค๊ณ„ ๋Šฅ๋ ฅ'์„ ์ฆ๋ช…ํ•˜๊ณ  ์‹ถ์€ ์ค€๋น„์ƒ

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • Flutter ๊ธฐ์ดˆ: ๊ธฐ๋ณธ์ ์ธ ์œ„์ ฏ(Row, Column, ListView ๋“ฑ)์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ณ , ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(async/await)์— ๋Œ€ํ•œ ๊ธฐ์ดˆ์ ์ธ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • Dart ๊ธฐ๋ณธ ๋ฌธ๋ฒ•: ํด๋ž˜์Šค, ์ƒ์† ๋“ฑ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์•Œ๊ณ  ๊ณ„์‹  ๋ถ„๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ƒํƒœ ๊ด€๋ฆฌ ๊ฒฝํ—˜: ์ƒํƒœ ๊ด€๋ฆฌ(Provider, Riverpod, GetX ๋“ฑ)๋ฅผ ํ•˜๋‚˜๋ผ๋„ ์‚ฌ์šฉํ•ด ๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. (BLoC์ด ์ฒ˜์Œ์ด๋”๋ผ๋„ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ๊ธฐ๋ณธ ์›๋ฆฌ๋ฅผ ์•ˆ๋‹ค๋ฉด ์ถฉ๋ถ„ํžˆ ๋”ฐ๋ผ์˜ค์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

  • ๊ธฐ๋ณธ SQL ์ง€์‹: ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฐ„๋‹จํ•œ SQL CRUD ๋ฌธ๋ฒ•์„ ์•Œ๊ณ  ๊ณ„์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋‚˜ ๋ณด์•ˆ ์ •์ฑ…์€ ๊ฐ•์˜์—์„œ ํ•จ๊ป˜ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.

  • ๋ฐฐ์šฐ๊ณ ์ž ํ•˜๋Š” ์—ด์ •: ๋ชจ๋“  ๊ธฐ์ˆ ์„ ์™„๋ฒฝํžˆ ์•Œ๊ณ  ์‹œ์ž‘ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์„ ๋ฐฐ์šฐ๊ณ ์ž ํ•˜๋Š” ์˜์ง€๋งŒ ์žˆ๋‹ค๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š”
์กฐ์ƒ์šฑ์ž…๋‹ˆ๋‹ค.

1์ธ ๊ธฐ์—… YourDevEdge ๋Œ€ํ‘œ | Flutter ์ „๋ฌธ๊ฐ€ & 'Heavy Fran' ์œ ํŠœ๋ฒ„

์•ˆ๋…•ํ•˜์„ธ์š”. ํ’€์Šคํƒ ๊ต์œก ์ฝ˜ํ…์ธ  ์Šคํƒ€ํŠธ์—… YourDevEdge์™€ Flutter ์ „๋ฌธ ์œ ํŠœ๋ธŒ ์ฑ„๋„ โ€˜Heavy Franโ€™์„ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” ๊ฐ•์‚ฌ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ๊ตญ๋‚ด ์œ ์ˆ˜์˜ ํ†ต์‹ ์‚ฌ์—์„œ 20๋…„ ๋„˜๊ฒŒ ๊ทผ๋ฌดํ•œ ํ›„, ๊ฒฐ์ฝ” ์ ์ง€ ์•Š์€ ๋‚˜์ด์— ๊ฐœ๋ฐœ์ž์˜ ๊ธธ๋กœ ๋ฐฉํ–ฅ์„ ํ‹€์—ˆ์Šต๋‹ˆ๋‹ค. ๋…ํ•™์œผ๋กœ ๋‹ค์–‘ํ•œ ์–ธ์–ด์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ตํžˆ๋ฉฐ ์ง์ ‘ ๋ถ€๋”ชํžˆ๊ณ  ๊นจ๋‹ฌ์€ ๊ฒฝํ—˜์€, ํ˜„์žฌ ์ €๋งŒ์˜ ๊ต์œก ์ฒ ํ•™๊ณผ ๊ฐ•์˜ ์Šคํƒ€์ผ์˜ ๊ธฐ๋ฐ˜์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋™์•ˆ Udemy๋ฅผ ํ†ตํ•ด Flutter Provider, Bloc, Redux, Riverpod, ๊ทธ๋ฆฌ๊ณ  Dart Frog ๊ธฐ๋ฐ˜ Clean Architecture API ๊ฐœ๋ฐœ ๊ฐ•์˜ ๋“ฑ ์ด 5๊ฐœ์˜ ๊ฐ•์˜๋ฅผ ์ถœ์‹œํ•˜๋ฉฐ ์ „ ์„ธ๊ณ„ ์ˆ˜๊ฐ•์ƒ๋“ค๊ณผ ์‹ค๋ฌด ์ค‘์‹ฌ์˜ ํ•™์Šต ๊ฒฝํ—˜์„ ๊ณต์œ ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝํ—˜์„ ํ†ตํ•ด โ€œ์ด๋ก ์ ์œผ๋กœ ๋งž๋Š” ์„ค๋ช…โ€์ด ์•„๋‹ˆ๋ผ, ์‹ค์ œ ํ•™์Šต์ž์™€ ํ˜„์—… ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์„ค๋ช…์ด ๋ฌด์—‡์ธ์ง€ ๋Š์ž„์—†์ด ๊ฒ€์ฆํ•ด ์™”์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์šธ ๋•Œ ๋А๋ผ๋Š” ๋ง‰๋ง‰ํ•จ๊ณผ ์™ธ๋กœ์›€์„ ๋ˆ„๊ตฌ๋ณด๋‹ค ์ž˜ ์•Œ๊ธฐ์—, ์ €๋Š” ๋‹จ์ˆœํžˆ โ€˜๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•โ€™์ด ์•„๋‹ˆ๋ผ ์™œ ์ด ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํ•„์š”ํ•œ์ง€, ์‹ค๋ฌด์—์„œ ๋งˆ์ฃผํ•  ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์กฐ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ทธ ๋ณธ์งˆ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•ฉ๋‹ˆ๋‹ค.

20๋…„ ๋„˜๊ฒŒ ์ฒด๋“ํ•œ ์‹œ์Šคํ…œ ์‚ฌ๊ณ ์™€, ๋Šฆ์€ ์ถœ๋ฐœ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ˜„์—… ๊ฐœ๋ฐœ์ž๋กœ ์ž๋ฆฌ ์žก๊ธฐ๊นŒ์ง€์˜ ์‹œํ–‰์ฐฉ์˜ค์™€ ๋…ธํ•˜์šฐ๋ฅผ ๋ชจ๋‘ ๊ฐ•์˜์— ๋‹ด์•˜์Šต๋‹ˆ๋‹ค.
โ€œ์ดํ•ดํ•ด์•ผ๋งŒ ํ•˜๋Š” ํ•ต์‹ฌโ€๊ณผ โ€œ๋†“์น˜๊ธฐ ์‰ฌ์šด ๋””ํ…Œ์ผโ€์„ ์—ฐ๊ฒฐํ•˜์—ฌ, ์—ฌ๋Ÿฌ๋ถ„์ด ๋” ์ด์ƒ ํ˜ผ์ž ํ—ค๋งค์ง€ ์•Š๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„์•ฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋“ ๋“ ํ•œ ํŽ˜์ด์Šค๋ฉ”์ด์ปค๊ฐ€ ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

145๊ฐœ โˆ™ (18์‹œ๊ฐ„ 24๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

2๊ฐœ

5.0

2๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • litebug๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    litebug

    ์ˆ˜๊ฐ•ํ‰ 1

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    30% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    • khc53590๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      khc53590

      ์ˆ˜๊ฐ•ํ‰ 1

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      30% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      ๋น„์Šทํ•œ ๊ฐ•์˜

      ๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

      ์›” โ‚ฉ21,780

      5๊ฐœ์›” ํ• ๋ถ€ ์‹œ

      โ‚ฉ108,900