๐ฑ ๊ฐ๋ฐ์ผ์ง
์ด์ ์ค์ ํญ๊ณต๊ถ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ ์ํ ์์
์ ํด๋ณผ ๊ฒ์ด๋ค. ๋จผ์ ํญ๊ณต๊ถ์ด ํ๋งค๋๋ ์์คํ
๋ถํฐ ์์๋ณด๋ฉด, ํญ๊ณต์ฌ ์์ฒด ํํ์ด์ง์์ ํ๋งคํ๋ ํญ๊ณต๊ถ์ด ์๊ณ ์ค์นด์ด์ค์บ๋๊ฐ์ ์ฌ์ดํธ์ ์ ๊ณตํ๋ ํญ๊ณต๊ถ๋ฑ์ด ๋ฐ๋ก ์์ด์ ์ด๋์๋ ์ฌ๋ผ์์๋๋ฐ ์ด๋์๋ ์๊ฑฐ๋, ๊ฐ์ ํญ๊ณตํธ์ด๋ผ๋ ๊ฐ๊ฒฉ์ด ๋ค๋ฅธ ์ํฉ์ด ๋ฐ์ํ๋ค. ๊ทธ๋์ ์ต๋ํ ๋ง์ ๊ณณ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ ๋ค, ํ๋งค์ฒ๋ณ๋ก ๊ฐ๊ฒฉ์ ๋ณด์ฌ์ฃผ๋ ์์ผ๋ก ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค. ๋จผ์ ์๋ฒ์ธก์ ์์ฒญ, ๋ฐํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ ํด์ค๋ค.from fastapi import FastAPIfrom pydantic import BaseModelfrom typing import Listfrom search_naver import search_naver_flightsapp = Fast..
๐ฑ ๊ฐ๋ฐ์ผ์ง
ํญ๊ณต๊ถ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๊ฑด๋ฐ, ํ๋ฌํฐ์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ฉด ํญ๊ณต์ฌ์์ ์ฐจ๋จํ ์ ์์ด์ ๋์ ์ค๊ฐ ์๋ฒ๊ฐ ํ์ํ๋ค. ๋จผ์ ํ์ด์ฌ์ด ์ค์น๋์ด์๋ค๋ ๊ฐ์ ํ์ ํฐ๋ฏธ๋์์ pip install fastapi uvicorn๋ก ์๋ฒ๋ฅผ ๋ง๋๋ ํ๋ ์์ํฌ์ธ FastAPI๋ฅผ ์ค์นํ๋ค. ์ดํ server๋ฅผ ๋ด๋นํ ํ์ผ์ ๋ค๋ฅธ ๊ฒฝ๋ก์ ๋ง๋ค๊ณ (๋ฐ์ดํฐ๋ ์ผ๋จ ํ๋์ฝ๋ฉ)from fastapi import FastAPI, Queryapp = FastAPI()@app.get("/search")def search(from_city: str = Query(..., alias="from"), to_city: str = Query(..., alias="to"), date: str = Query(...)): ret..
๐ฑ ๊ฐ๋ฐ์ผ์ง
์ด๋ฒ์ ํญ๊ณต๊ถ ๊ฒ์ ๊ธฐ๋ฅ์ ๋ง๋ค ๊ฒ์ด๋ค.๋จผ์ ํ์ํ UI ์์๋ฅผ ์๊ฐํด๋ณด๋ฉด ์ฌํ์ง ์ ํ (๋๋กญ๋ค์ด) ๋ ์ง ์
๋ ฅ (์บ๋ฆฐ๋) ๊ฒ์ ์์ (๋ฒํผ) ์ถ๋ฐํธ / ๋์ฐฉํธ (ํ ๊ธ) 1. ํญ๊ณต์ฌ ์ด๋ฆ 2. ์ถ๋ฐ ์๊ฐ 3. ๊ฐ๊ฒฉ 4. ์๋งค ๋ฒํผ (์ 4๊ฐ์ง๋ฅผ ๋ฌถ์ด ๊ฐ๊ฒฉ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฆฌ์คํธ)์ ๋๊ฐ ์์ ๊ฒ ๊ฐ๋ค. ์
๋ ฅ ์์๋ถํฐ ๊ตฌํํด๋ณด์.class SearchPage extends StatefulWidget { const SearchPage({super.key}); @override State createState() => _SearchPageState();} ๋๋กญ๋ค์ด์ด๋ DatePicker, Switch๋ฑ์ ์ํ๊ฐ ๋ฐ๋๋ UI์ด๊ธฐ ๋๋ฌธ์ setState()๋ก ์ ํ๊ฐ์ ํ๋ฉด์ ๋ฐ์ํ๊ธฐ ์ํด ๊ฒ์ํ์ด์ง๋ State..
๐ฑ ๊ฐ๋ฐ์ผ์ง
์ฒซ ๋ฒ์งธ ๊ธฐ๋ฅ์ธ ์ด๋ฒคํธ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ๋ถํฐ ๊ตฌํํด๋ณด์. ์ธ๋ถ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ์ฑ ๋ด๋ถ์์ ์ด๋ฒคํธ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด '์น ๋ทฐ' ํ์์ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋ค. ๋จผ์ pubspec.yaml ํ์ผ์ ์ข
์์ฑ(dependencies)์dependencies: flutter: sdk: flutter webview_flutter: ^4.13.1์ด๋ฐ์์ผ๋ก ์ต์ ๋ฒ์ ์ ์ถ๊ฐํด์ฃผ๊ณ ํฐ๋ฏธ๋์์ flutter pub get ์ผ๋ก ์น ๋ทฐ ํจํค์ง๋ฅผ ์ค์นํด์ค๋ค. ์ค์น๊ฐ ์๋ฃ๋์๋ค๋ฉด ์น๋ทฐ ๊ถํ ์ค์ ์ ์ํดandroid/app/src/main/AndroidManifest.xml ํ์ผ์android:usesCleartextTraffic="true"๋ ๊ถํ์ ์ถ๊ฐํด์ค๋ค. ์ด์ ์ฝ๋๋ก ๋์๊ฐ์class AirlineEvent ..
๐ฑ ๊ฐ๋ฐ์ผ์ง
๋ณธ๊ฒฉ์ ์ผ๋ก ๊ฐ๋ฐ์ ์ํด UI ๊ตฌ์กฐ๋ถํฐ ์๊ฐํด๋ณด์.ํฌ๊ฒ ์ด๋ฒคํธํ์ด์ง ํญ, ํญ๊ณต๊ถ ๊ฒ์ ํญ 2๊ฐ์ง๋ก ๋๋ ์ ๋ณด์ฌ์ฃผ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ์๋ ์ผ๋จ ํ๋ฌํฐ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ตํ๊ณ , ํญ ๊ตฌ๋ถ๊น์ง ๊ตฌํํด ๋ณผ ์์ ์ด๋ค. ์ฝ๋ ๋ถ๋ถ์ผ๋ก ๋ค์ด๊ฐ์ main.dart ํ์ผ์ ๋ณด๋ฉด ์ฌ๋ฌ ํด๋์ค๊ฐ ์๋๋ฐ, '์์ ฏ' ๋จ์๋ก ํด๋์ค๋ฅผ ์ ์ํ๋ค๊ณ ํ๋ค. ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก main() ํจ์๊ฐ ์์์ ์ด ๋๊ณ , ๊ฐ ํด๋์ค์ ๋ํด ์ค๋ช
ํ๋ฉดclass MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'ํญ๊ณต๊ถ ๊ฐ๊ฒฉ ๋น๊ต', th..
๐ฑ ๊ฐ๋ฐ์ผ์ง
์ฑ์ ๊ฐ๋ฐํ๋ ค๋ฉด ์๋ฐ๋ ์ฝํ๋ฆฐ ์ธ์ด๋ก ๊ฐ๋ฐํด์ผํ๋ ์ค ์์๋๋ฐ, ์์ฆ์๋ ๋ฆฌ์กํธ๋ ํ๋ฌํฐ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค. ํ๋ฌํฐ์ ๋ํด์ ์์๋ณด๋ Dart๋ผ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๊ณ ํ๋์ ์ฝ๋๋ก iOS, ์๋๋ก์ด๋์์ ๋ชจ๋ ์๋์ด ๊ฐ๋ฅํ๋ฉฐ ์ฑ๋ฅ๋ ์ข๋ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฑ ๊ฐ๋ฐ์ ๋ฐฐ์ธ ๋ ์
๋ฌธํ๊ธฐ ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ํด์ ํ๋ฌํฐ๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐํด ๋ณผ ๊ฒ์ด๋ค. [ ์ค์น ๋จ๊ณ ]ํฌ๊ฒ 3๊ฐ์ง๋ฅผ ์ค์นํด์ผ ํ๋ค.1. VSCode2. Flutter3. Android Studio ๋จผ์ VSCode๋ ๊น๋ ค์์ด์ Flutter extension์ ์ค์นํ๊ณ ํ๋ฌํฐ ์ ํ๋ก์ ํธ ์์ฑํ๊ธฐ๋ฅผ ๋๋ฌ SDK๋ ์ค์นํ๋ค.๋ค์์ผ๋ก ์์คํ
ํ๊ฒฝ๋ณ์๋ ์ถ๊ฐํ ํ, ์์ฑํ ํ๋ก์ ํธ์์ ํฐ๋ฏธ๋์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌflutter pub get์์กด์ฑ(ํจ..