์๋ง๊ฐ ๋ชจ๋ฐ์ผ ์น์ ์ด๋ ค์ํด์ ์ฑ๊ณผ ์น์ ๋๋ด๋ค โ Flutter ๋์ Compose, Firestore ๋์ ์ง ์๋ฒ DB๋ฅผ ๊ณ ๋ฅธ ๊ณผ์
1. ์ํฉ
์๋ง ๊ทธ๋ฆผ์ ์ฌ๋ฆฌ๋ ๊ฐค๋ฌ๋ฆฌ ์น์ฌ์ดํธ(Next.js)๋ฅผ ๋ง๋ค์ด ๋ ์ํ์๋๋ฐ, ์ ์์ด ๋ณด๋ฅ๋ผ ์์๋ค. ์ด์ ๋ ํ๋์๋ค. ์๋ง๋ ๊ฑฐ์ ํธ๋ํฐ๋ง ์ฐ๋๋ฐ, ๋ชจ๋ฐ์ผ์์ ์น์ฌ์ดํธ๋ก ๋ค์ด๊ฐ ๊ด๋ฆฌํ๋ ๊ฑธ ์ด๋ ค์ํ๋ค. ์ธ๋ถ์์ ์ฐพ์์ค๊ธฐ ์ฝ๊ฒ ํ๋ ค๊ณ ์น์ผ๋ก ๋ง๋ค์๋๋ฐ, ์ ์ ๊ทธ๋ฆผ์ ์ฌ๋ฆฌ๋ ์ฌ๋์ด ์น์ ์ฐ๊ธฐ ํ๋ ์ํฉ์ด์๋ค.
๊ทธ๋์ AI(Claude)์๊ฒ ์ด๋ ๊ฒ ๋ฌผ์๋ค. ์๋ง์ ์ฌ์ดํธ ๊ด๋ฆฌ๋ ์ฑ์ผ๋ก ํ๊ณ , ์ธ๋ถ ์ ์ ์ ์น์ผ๋ก ๋ฐ๊ณ , ์ฑ์ ํตํด ๋ค์ด์ค๋ ๊ธธ๋ ์ด์ด ๋๊ณ ์ถ์๋ฐ ์ด๋ป๊ฒ ํ๋ฉด ๋๋๊ณ .
2. AI๊ฐ ์ฒ์ ๋ด๋์ ๊ตฌ์กฐ
์ฒซ ์ ์์ ๋ฐ์ดํฐ๋ฅผ Firebase(Auth, Firestore, Storage)์ ๋๊ณ , ๊ด๋ฆฌ๋ ์๋ง ์ ์ฉ ์ฑ, ๋ ธ์ถ์ ์ง๊ธ์ ์น์ผ๋ก ๋๋๋ ๊ตฌ์กฐ์๋ค.
[์๋ง ํฐ: ๊ด๋ฆฌ ์ฑ] โโ์ฐ๊ธฐโโโถ Firebase โโโ์ฝ๊ธฐโโ [์น์ฌ์ดํธ] โโโ ์ธ๋ถ ๋ฐฉ๋ฌธ์์ฑ์ ๋ ๊ฐ์ง ๋ชจ๋๋ก ๋ง๋ค์๋ ์ ์๋ ๊ฐ์ด ๋์๋ค.
- ์ฑ ์ฒซ ํ๋ฉด์ ๋๊ตฌ๋ ๋ณด๋ ๊ณต๊ฐ ๊ฐค๋ฌ๋ฆฌ(์๊ฐ ์๊ฐ, ์ํ ๋ชฉ๋ก, ์ํ ์์ธ)
- ์๋ง ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ๋ฉด ์ํ ์ฌ๋ฆฌ๊ธฐ, ์์ , ์ญ์ ๋ฉ๋ด๊ฐ ์ด๋ฆผ
- ์น ๋งํฌ๋ฅผ ๋๋ ์ ๋ ์ฑ์ด ์์ผ๋ฉด ์ฑ์์, ์์ผ๋ฉด ์น์์ ์ด๋ฆฌ๋ ๋ฅ๋งํฌ(Android๋ App Links)
Flutter Web์ผ๋ก ์น๊น์ง ํ ์ฝ๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ๋ ํ๋ณด๋ก ๋์๋ค. ํ์ง๋ง ๊ฒ์ ๋ ธ์ถ(SEO)๊ณผ ์ฒซ ๋ก๋ฉ์ด ์ฝํด์, ์ธ๋ถ ์ ์ ์ด ๋ชฉ์ ์ด๋ฉด ๊ธฐ์กด Next.js ์น์ ์ ์งํ๋ ์ชฝ์ด ๋ซ๋ค๋ ์ค๋ช ์ด์๋ค. ์ฌ๊ธฐ๊น์ง๋ "๊ด๋ฆฌ๋ ์ฑ, ๋ ธ์ถ์ ์น, ๋ฐ์ดํฐ๋ ํ ๊ณณ"์ด๋ผ๋ ํฐ ํ์ด ์กํ ๋จ๊ณ๋ค.
3. ๋๋ฌผ์ด์ ๋ฐ๋ ์ฒซ ๋ฒ์งธ: Flutter์์ Jetpack Compose๋ก
AI๋ ๊ด๋ฆฌ ์ฑ์ Flutter๋ก ์ถ์ฒํ๋ค. ๋๋ ์ด๋ ๊ฒ ๋๋ฌผ์๋ค. "๊ทธ๋ผ ํ๋ก์ ํธ ์์ฒด๊ฐ ๊ณต์ ๋ฅผ ์ํ๋๋ฐ ํ๋ฃจํฐ๋ก ํ ์ด์ ๊ฐ ์์ด?"
AI์ ๋ต์ ์ด๋ฌ๋ค. ์น๊ณผ ์ฑ์ด ์ฝ๋๋ฅผ ๊ณต์ ํ์ง ์์ผ๋ฉด Flutter๋ฅผ ๊ณ ๋ฅผ ๊ธฐ์ ์ ์ด์ ๋ ์๊ณ , ๋จ๋ ์ด์ ๋ ๋ด๊ฐ ์ด๋ฏธ Flutter/Dart๋ก ์ฑ์ ์ฌ๋ฌ ๊ฐ ์ถ์ํด ๋ดค๋ค๋ ์ต์ํจ ํ๋๋ฟ์ด๋ผ๊ณ ํ๋ค. ๊ทธ๋ฌ๋ฉด์ Expo(React Native)์ PWA/Capacitor๋ ๊ฐ์ด ๋น๊ตํ๋ค.
- Expo: ํ์ ๊ณผ Firebase ๋ก์ง ์ผ๋ถ๋ ๊ณต์ ํ ์ ์์ง๋ง UI๋ ์ด์ฐจํผ ๋ฐ๋ก ๋ง๋ค์ด์ผ ํด์, ๋ชจ๋ ธ๋ ํฌ๊น์ง ๊ตฌ์ฑํ๋ ๊ฑด ์ด ๊ท๋ชจ์๋ ๊ณผํจ
- PWA/Capacitor: ์๋ก ๋ฐฐ์ธ ๊ฒ ๊ฐ์ฅ ์ ์ง๋ง ๊ฒฐ๊ตญ ์น๋ทฐ๋ผ์ ์ฑ๋งํผ ๋งค๋๋ฝ์ง ์์
์ฌ๊ธฐ์ ๋ด๊ฐ ํ ์ค์ ๋ํ๋ค. "๋ ์ปดํฌ์ฆ๊ฐ ๋ ์ต์ํด". AI๊ฐ ์ธ์ด ๊ธฐ์ค("์ต์ํ ๋๊ตฌ๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๋ค")์ด ๊ทธ๋๋ก Compose๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค. ๋จ์ ์ iPhone์์๋ ์ฑ์ ์ธ ์ ์๋ค๋ ์ ์ธ๋ฐ, ๋ฐฉ๋ฌธ์๋ ์น์ด ํญ์ ์ด๋ ค ์์ผ๋ ์ฑ์ "Android ์ฌ์ฉ์๋ฅผ ์ํ ์ถ๊ฐ ๊ฒฝ๋ก"๋ก ๋๋ฉด ๋๋ค๊ณ ์ ๋ฆฌ๋๋ค.
[ํ์ธ ํ์: ์๋ง ํฐ์ด Android์ธ์ง โ AI๊ฐ ๋ ๋ฒ ๋ฌผ์๋๋ฐ ์ด ๋ํ์์๋ ๋ต์ด ํ์ธ๋์ง ์์]
4. ๋๋ฌผ์ด์ ๋ฐ๋ ๋ ๋ฒ์งธ: Firestore์์ ์ง ์๋ฒ DB๋ก
๋ฐ์ดํฐ ์ ์ฅ์๋ ์ฒ์์ Firebase๋ก ๊ฐ๋ ํ๋ฆ์ด์๋ค. ๊ทธ๋ ๋๋ ์ง์ ์๋ฒ๊ฐ ์๋๋ฐ ๊ฑฐ๊ธฐ์ DB๋ฅผ ๋๊ณ ์ฐ๋ฉด ๋์ง ์๋๊ณ ๋ฌผ์๋ค.
AI๋ Firestore๊ฐ ํ์๋ ์๋๋ผ๊ณ ์ธ์ ํ๊ณ , ์ค์ ๋ก ๊ฐ๋ฆฌ๋ ๊ฑด ๋ ๊ฐ์ง๋ผ๊ณ ์ง์๋ค.
- ๊ฐ๋ ์๊ฐ: ์ ์ , ๊ณต์ ๊ธฐ ์ฌ๋ถํ , ์ธํฐ๋ท ์ฅ์ , DDNS ๊ฐฑ์ ์ง์ฐ์ด ์๊ธฐ๋ฉด ์น๊ณผ ์ฑ์ด ๊ฐ์ด ๋ฉ์ถ๋ค
- ์ด๋ฏธ์ง ํธ๋ํฝ: ๋ฌด๊ฑฐ์ด ๊ฑด DB๊ฐ ์๋๋ผ ์ด๋ฏธ์ง์ด๊ณ , ๊ฐ์ ์ฉ ์ธํฐ๋ท์ ์ ๋ก๋ ์๋๊ฐ ๋๋ฆด ์ ์๋ค
Firestore์ ์ฅ์ ์ ์๋ฒ ์ด์๊ณผ ๋ฐฑ์ ๋ถ๋ด์ด ์๊ณ ์ฑ ์คํ๋ผ์ธ ์บ์๊ฐ ๊ธฐ๋ณธ์ด๋ผ๋ ์ , ๋จ์ ์ ๊ตฌ๊ธ ์๋น์ค์ ๋ฌถ์ด๊ณ ์ฟผ๋ฆฌ๊ฐ ์ ํ์ ์ด๋ผ๋ ์ ์ด์๋ค.
์ด์ด์ Next.js๋ฅผ ์น์ผ๋ก ์ฐ๋ฉด์ ๋ฐฑ์๋ ๊ธฐ๋ฅ๋ ์ด๋ ์ ๋ ๊ฐ์ด ํ ์ ์์ง ์๋๊ณ ๋ฌผ์๋ค. ๊ฐ๋ฅํ๋ค๋ ๋ต์ด ์๋ค. Next.js์ Route Handlers(app/api/.../route.ts)๋ก REST API๋ฅผ ๋ง๋ค๋ฉด ์น์ด ์ฐ๋ ๋ฐ์ดํฐ์ ์ฑ์ด ์ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ์๋ฒ์์ ๋ด์ค ์ ์์ด์, ๊ฐค๋ฌ๋ฆฌ์ฉ NestJS ์๋ฒ๋ฅผ ๋ฐ๋ก ๋ ํ์๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ "์ผ๋จ ์ง์์ ํ๊ณ ์ถํ ์ธ๋ถ ๊ณ ๋ ค"๋ก ์ ํ๋ค. ์คํ์ Next.js + Docker + PostgreSQL + Prisma๋ก ๊ฐ๋ค. SQLite๊ฐ ์๋๋ผ PostgreSQL์ธ ์ด์ ๋ก AI๊ฐ ๋ ๊ฑด, SQLite๋ ํ์ผ DB๋ผ์ ๋์ค์ ์น๋ง ์ธ๋ถ๋ก ์ฎ๊ธฐ๋ฉด ์ ๊ทผํ ๋ฐฉ๋ฒ์ด ๋ง๋ ์น ์๋ค๋ ์ ์ด์๋ค.
๋์ค์ ์ฎ๊ธธ ๋๋ฅผ ์ํ ์์น๋ ๋ ๊ฐ์ง ์ ํ๋ค.
- DB ์ ๊ทผ์
lib์๋น์ค ๋ ์ด์ด๋ก๋ง ํ๊ณ , ํ๋ฉด๊ณผ API๋ DB๋ฅผ ์ง์ ๊ฑด๋๋ฆฌ์ง ์๋๋ค - ์ฑ์ด ์ฐ๋ API ๊ฒฝ๋ก๋ ์ฒ์๋ถํฐ
/api/v1/...์ฒ๋ผ ๋ฒ์ ์ ๋ถ์ธ๋ค. ํ๋ฒ ๋ฐฐํฌํ ์ฑ์ ์ฌ์ฉ์๊ฐ ์ ๋ฐ์ดํธํ๊ธฐ ์ ๊น์ง ์ API๋ฅผ ๊ณ์ ๋ถ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค
[๋ณด๊ฐ: ๋ด๊ฐ Firestore ๋์ ์ง ์๋ฒ DB๋ฅผ ์ต์ข ์ ํํ ์ด์ โ ์ง์ ์ด ํ๋ ๋ฌธ์ฅ]
5. ํ๋ฉด ๊ตฌ์กฐ์ ์ฑ ์๊ตฌ์ฌํญ
- ๋ฉ์ธ ํ๋ฉด์ ์ด์ ์ฌ์ดํธ์ฒ๋ผ ์ ์ฒด ํ๋ฉด ์ฌ๋ผ์ด๋๋ก ์ฐ์ถ๋ง ๋งก๊ธฐ๊ณ , ์ค์ ๊ทธ๋ฆผ ๊ฐ์์ ๋ณ๋ "์ํ" ์ฝ๋(
/artworks)์์ ํ๊ธฐ๋ก ํ๋ค. - ์ฑ์ ๋ฐฉ๋ฌธ์์ฉ๊ณผ ์๋ง์ฉ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํ ์ฑ์ ํฉ์น๊ณ , ๋ค์ดํฐ๋ธ Android(Kotlin)๋ก ๋ง๋ ๋ค. ์๋ง๊ฐ ์ฐ๋ ์ฑ์ด๋ผ ์ฌ์ฉ๊ฐ์ด ์ข์์ผ ํ๊ณ , ์๋ ๋ก๊ทธ์ธ์ด ๋์ด์ผ ํ๋ค๋ ๊ฒ ์๊ตฌ์ฌํญ์ด์๋ค.
- ์น์ PC์ฉ๊ณผ ๋ชจ๋ฐ์ผ์ฉ์ ๋ฐ๋ก ๋ง๋ค์ง ์๊ณ ๋ฐ์ํ ํ๋๋ก ๊ฐ๋ค. ์ ์ฝ๋์์ ๋ชจ๋ฐ์ผ์์ ๊นจ์ง ๊ณณ์ผ๋ก๋ ๋ค๋น๊ฒ์ด์
(๋ฉ๋ด 5๊ฐ๊ฐ ํ ์ค์ด๋ผ ํ๋ฒ๊ฑฐ ๋ฉ๋ด ํ์), ์ต์์
h-screen์min-h-screen์ผ๋ก, ์ฌ๋ผ์ด๋์100vh๋ฅผ100dvh๋ก, ์๊ฐ ์๊ฐ์<br />์ ๊ฑฐ์break-keep์ ์ฉ์ด ์ง์๋ค.
์ ๋ฆฌ
- ์น์ ์ ์ (๊ฒ์, ๊ณต์ ), ๊ด๋ฆฌ๋ ์ฑ, ๋ฐ์ดํฐ๋ ํ ๊ณณ์ผ๋ก ์ญํ ์ ๋๋๋ "์๋ง๊ฐ ์ฐ๊ธฐ ํ๋ ์น" ๋ฌธ์ ๊ฐ ํ๋ ธ๋ค
- ์น๊ณผ ์ฝ๋๋ฅผ ๊ณต์ ํ์ง ์์ผ๋ฉด ํฌ๋ก์ค ํ๋ซํผ์ ๊ณ ๋ฅผ ์ด์ ๊ฐ ์ฝํ๋ค. ๊ฒฐ๊ตญ ์ต์ํ ๋๊ตฌ๊ฐ ๊ธฐ์ค์ด ๋๋ค
- Firestore๋ ํ์๊ฐ ์๋์๋ค. ๊ฐ๋ ์๊ฐ๊ณผ ์ด๋ฏธ์ง ํธ๋ํฝ์ ๊ฐ์ํ๋ฉด ์ง ์๋ฒ DB๋ก๋ ๋๋ค
- ๋์ค์ ์ฎ๊ธธ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉด DB ์ ๊ทผ์ ์๋น์ค ๋ ์ด์ด๋ก ๋ชจ์ผ๊ณ API์ ๋ฒ์ ์ ๋ถ์ฌ ๋๋ค
๋ค์ ๊ธ ์๊ณ
๋ค์ ๊บผ๋ธ ์ ์ฝ๋๋ฅผ ๋ก์ปฌ์์ ์ฒ์ ๋๋ฆฌ๋ค npm install๋ถํฐ ๋งํ ์ด์ผ๊ธฐ๋ฅผ ์ด๋ค.
