diff --git a/sidebar.config.mjs b/sidebar.config.mjs
index 4259267..d793de9 100644
--- a/sidebar.config.mjs
+++ b/sidebar.config.mjs
@@ -1,6 +1,6 @@
export const sidebars = [
{
- label: "π¦ Part 1. μμνκΈ°",
+ label: "π¦ 1. μμνκΈ°",
items: [
{ label: "μκ°", slug: "part1/introduction" },
{ label: "κ°λ° νκ²½ ꡬμ±", slug: "part1/setup" },
@@ -9,7 +9,7 @@ export const sidebars = [
],
},
{
- label: "π‘ Part 2. Dart μΈμ΄ κΈ°μ΄",
+ label: "π‘ 2. Dart μΈμ΄ κΈ°μ΄",
items: [
{ label: "Dart μκ°", slug: "part2/dart-intro" },
{ label: "κΈ°λ³Έ λ¬Έλ² λ° λ³μ", slug: "part2/basic-syntax" },
@@ -23,7 +23,7 @@ export const sidebars = [
],
},
{
- label: "π§± Part 3. Flutterμ κΈ°λ³Έ κ΅¬μ± μμ",
+ label: "π§± 3. Flutterμ κΈ°λ³Έ κ΅¬μ± μμ",
items: [
{ label: "μμ ― κ°λ
κ³Ό μ£Όμ μμ ―", slug: "part3/widgets" },
{
@@ -36,7 +36,7 @@ export const sidebars = [
],
},
{
- label: "π¨ Part 4. μν κ΄λ¦¬",
+ label: "π¨ 4. μν κ΄λ¦¬",
items: [
{ label: "μν κ΄λ¦¬ μ
λ¬Έ", slug: "part4/state-management-intro" },
{
@@ -48,7 +48,7 @@ export const sidebars = [
],
},
{
- label: "π¦ Part 5. λ€λΉκ²μ΄μ
κ³Ό νλ©΄ ꡬμ±",
+ label: "π¦ 5. λ€λΉκ²μ΄μ
κ³Ό νλ©΄ ꡬμ±",
items: [
{ label: "Navigator 1.0", slug: "part5/navigator1" },
{ label: "Navigator 2.0", slug: "part5/navigator2" },
@@ -65,7 +65,7 @@ export const sidebars = [
],
},
{
- label: "π Part 6. μΈλΆμμ μ°λ",
+ label: "π 6. μΈλΆμμ μ°λ",
items: [
{ label: "Dioλ₯Ό ν΅ν API ν΅μ ", slug: "part6/dio" },
{
@@ -75,7 +75,7 @@ export const sidebars = [
],
},
{
- label: "π§ͺ Part 7. ν
μ€νΈμ λλ²κΉ
",
+ label: "π§ͺ 7. ν
μ€νΈμ λλ²κΉ
",
items: [
{ label: "λ¨μ ν
μ€νΈ", slug: "part7/unit-test" },
{ label: "μμ ― ν
μ€νΈ", slug: "part7/widget-test" },
@@ -85,7 +85,7 @@ export const sidebars = [
],
},
{
- label: "π Part 8. μ± λ°°ν¬ λ° μ΄μ",
+ label: "π 8. μ± λ°°ν¬ λ° μ΄μ",
items: [
{ label: "λΉλ λͺ¨λ", slug: "part8/build-modes" },
{ label: "Android / iOS λ°°ν¬", slug: "part8/deploy-procedure" },
@@ -96,14 +96,14 @@ export const sidebars = [
],
},
{
- label: "π§ Part 9. νλ‘μ νΈ κ΅¬μ‘° & μν€ν
μ²",
+ label: "π§ 9. νλ‘μ νΈ κ΅¬μ‘° & μν€ν
μ²",
items: [
{ label: "κΈ°λ₯λ³ vs κ³μΈ΅λ³ ν΄λ ꡬ쑰", slug: "part9/folder-structure" },
{ label: "λ©ν° λͺ¨λ μν€ν
μ²", slug: "part9/multi-module" },
],
},
{
- label: "π Part 10. 보μ νμ΅",
+ label: "π 10. 보μ νμ΅",
items: [
{ label: "CustomPainterμ RenderBox", slug: "part10/custom-painting" },
{ label: "μμ ― μΊμ±", slug: "part10/widget-caching" },
diff --git a/src/content/docs/part1/first-project.md b/src/content/docs/part1/first-project.mdx
similarity index 89%
rename from src/content/docs/part1/first-project.md
rename to src/content/docs/part1/first-project.mdx
index 4735353..d7530f9 100644
--- a/src/content/docs/part1/first-project.md
+++ b/src/content/docs/part1/first-project.mdx
@@ -1,6 +1,7 @@
---
title: 첫 νλ‘μ νΈ μμ± λ° μ€ν
---
+import { FileTree } from '@astrojs/starlight/components';
μ΄μ Flutter SDKμ κ°λ° νκ²½μ΄ μ€μ λμμΌλ―λ‘, 첫 λ²μ§Έ Flutter νλ‘μ νΈλ₯Ό μμ±νκ³ μ€νν΄ λ³΄κ² μ΅λλ€.
@@ -45,27 +46,31 @@ cd my_first_app
Flutter νλ‘μ νΈκ° μμ±λλ©΄, λ€μκ³Ό κ°μ κΈ°λ³Έ νμΌ κ΅¬μ‘°κ° λ§λ€μ΄μ§λλ€:
-```
-my_first_app/
-βββ .dart_tool/ # Dart λꡬ κ΄λ ¨ νμΌ
-βββ .idea/ # IDE μ€μ (Android Studio)
-βββ android/ # μλλ‘μ΄λ νΉν μ½λ
-βββ build/ # λΉλ μΆλ ₯ νμΌ
-βββ ios/ # iOS νΉν μ½λ
-βββ lib/ # Dart μ½λ
-β βββ main.dart # μ±μ μ§μ
μ
-βββ linux/ # Linux νΉν μ½λ
-βββ macos/ # macOS νΉν μ½λ
-βββ test/ # ν
μ€νΈ μ½λ
-βββ web/ # μΉ νΉν μ½λ
-βββ windows/ # Windows νΉν μ½λ
-βββ .gitignore # Git 무μ νμΌ
-βββ .metadata # Flutter λ©νλ°μ΄ν°
-βββ analysis_options.yaml # Dart λΆμ μ€μ
-βββ pubspec.lock # μμ‘΄μ± λ²μ μ κΈ νμΌ
-βββ pubspec.yaml # νλ‘μ νΈ μ€μ λ° μμ‘΄μ±
-βββ README.md # νλ‘μ νΈ μ€λͺ
-```
+
+
+
+- my_first_app/
+ - .dart_tool/ # Dart λꡬ κ΄λ ¨ νμΌ
+ - .idea/ # IDE μ€μ (Android Studio)
+ - android/ # μλλ‘μ΄λ νΉν μ½λ
+ - build/ # λΉλ μΆλ ₯ νμΌ
+ - ios/ # iOS νΉν μ½λ
+ - lib/ # Dart μ½λ
+ - main.dart # μ±μ μ§μ
μ
+ - linux/ # Linux νΉν μ½λ
+ - macos/ # macOS νΉν μ½λ
+ - test/ # ν
μ€νΈ μ½λ
+ - web/ # μΉ νΉν μ½λ
+ - windows/ # Windows νΉν μ½λ
+ - .gitignore # Git 무μ νμΌ
+ - .metadata # Flutter λ©νλ°μ΄ν°
+ - analysis_options.yaml # Dart λΆμ μ€μ
+ - pubspec.lock # μμ‘΄μ± λ²μ μ κΈ νμΌ
+ - pubspec.yaml # νλ‘μ νΈ μ€μ λ° μμ‘΄μ±
+ - README.md # νλ‘μ νΈ μ€λͺ
+
+
+
μ΄ μ€μμ κ°μ₯ μ€μν νμΌμ λ€μκ³Ό κ°μ΅λλ€:
diff --git a/src/content/docs/part1/project-structure.md b/src/content/docs/part1/project-structure.mdx
similarity index 67%
rename from src/content/docs/part1/project-structure.md
rename to src/content/docs/part1/project-structure.mdx
index 0a4c9da..987251d 100644
--- a/src/content/docs/part1/project-structure.md
+++ b/src/content/docs/part1/project-structure.mdx
@@ -1,7 +1,7 @@
---
title: Flutter νλ‘μ νΈ κ΅¬μ‘° μ΄ν΄
---
-
+import { FileTree } from '@astrojs/starlight/components';
Flutter νλ‘μ νΈλ μ¬λ¬ λλ ν 리μ νμΌλ‘ ꡬμ±λμ΄ μμΌλ©°, κ°κ°μ νλ‘μ νΈμ νΉμ μΈ‘λ©΄μ λ΄λΉν©λλ€. μ΄ κ΅¬μ‘°λ₯Ό μ΄ν΄νλ©΄ Flutter μ±μ λ ν¨μ¨μ μΌλ‘ κ°λ°νκ³ κ΄λ¦¬ν μ μμ΅λλ€.
@@ -9,26 +9,27 @@ Flutter νλ‘μ νΈλ μ¬λ¬ λλ ν 리μ νμΌλ‘ ꡬμ±λμ΄ μμΌλ©°,
κΈ°λ³Έμ μΈ Flutter νλ‘μ νΈ κ΅¬μ‘°λ λ€μκ³Ό κ°μ΅λλ€:
-```
-my_flutter_app/
-βββ .dart_tool/
-βββ .idea/
-βββ android/
-βββ build/
-βββ ios/
-βββ lib/
-βββ linux/
-βββ macos/
-βββ test/
-βββ web/
-βββ windows/
-βββ .gitignore
-βββ .metadata
-βββ analysis_options.yaml
-βββ pubspec.lock
-βββ pubspec.yaml
-βββ README.md
-```
+
+- my_flutter_app/
+ - .dart_tool/ # Dart λꡬ κ΄λ ¨ νμΌ
+ - .idea/ # IDE μ€μ (Android Studio)
+ - android/ # μλλ‘μ΄λ νΉν μ½λ
+ - build/ # λΉλ μΆλ ₯ νμΌ
+ - ios/ # iOS νΉν μ½λ
+ - lib/ # Dart μ½λ
+ - main.dart # μ±μ μ§μ
μ
+ - linux/ # Linux νΉν μ½λ
+ - macos/ # macOS νΉν μ½λ
+ - test/ # ν
μ€νΈ μ½λ
+ - web/ # μΉ νΉν μ½λ
+ - windows/ # Windows νΉν μ½λ
+ - .gitignore # Git 무μ νμΌ
+ - .metadata # Flutter λ©νλ°μ΄ν°
+ - analysis_options.yaml # Dart λΆμ μ€μ
+ - pubspec.lock # μμ‘΄μ± λ²μ μ κΈ νμΌ
+ - pubspec.yaml # νλ‘μ νΈ μ€μ λ° μμ‘΄μ±
+ - README.md # νλ‘μ νΈ μ€λͺ
+
μ΄μ κ° λλ ν 리μ νμΌμ μν μ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€.
@@ -38,15 +39,15 @@ my_flutter_app/
`lib/` λλ ν 리λ Flutter νλ‘μ νΈμ ν΅μ¬μΌλ‘, μ±μ Dart μμ€ μ½λκ° μ μ₯λλ μμΉμ
λλ€.
-```
-lib/
-βββ main.dart # μ±μ μ§μ
μ
-βββ models/ # λ°μ΄ν° λͺ¨λΈ
-βββ screens/ # νλ©΄ UI
-βββ widgets/ # μ¬μ¬μ© κ°λ₯ν μμ ―
-βββ services/ # λΉμ¦λμ€ λ‘μ§, API νΈμΆ λ±
-βββ utils/ # μ νΈλ¦¬ν° κΈ°λ₯
-```
+
+- lib/
+ - main.dart # μ±μ μ§μ
μ
+ - models/ # λ°μ΄ν° λͺ¨λΈ
+ - screens/ # νλ©΄ UI
+ - widgets/ # μ¬μ¬μ© κ°λ₯ν μμ ―
+ - services/ # λΉμ¦λμ€ λ‘μ§, API νΈμΆ λ±
+ - utils/ # μ νΈλ¦¬ν° κΈ°λ₯
+
**μ€μ: κΈ°λ³Έμ μΌλ‘ μμ±λλ κ²μ `main.dart` νμΌλΏμ΄λ©°, λλ¨Έμ§ ν΄λ ꡬ쑰λ κ°λ°μκ° νμμ λ°λΌ μμ±νκ³ κ΅¬μ±ν©λλ€.**
@@ -81,12 +82,12 @@ class MyApp extends StatelessWidget {
`test/` λλ ν 리λ μ±μ μλνλ ν
μ€νΈ μ½λλ₯Ό ν¬ν¨ν©λλ€. λ¨μ ν
μ€νΈ, μμ ― ν
μ€νΈ λ±μ μ΄ λλ ν 리μ μμ±ν©λλ€.
-```
-test/
-βββ widget_test.dart # μμ ― ν
μ€νΈ
-βββ unit/
- βββ models_test.dart # λ¨μ ν
μ€νΈ
-```
+
+- test/
+ - widget_test.dart # μμ ― ν
μ€νΈ
+ - unit/
+ - models_test.dart # λ¨μ ν
μ€νΈ
+
κΈ°λ³Έμ μΌλ‘ μμ±λλ `widget_test.dart` νμΌμ μ±μ λ©μΈ μμ ―μ ν
μ€νΈνλ κ°λ¨ν μμ λ₯Ό ν¬ν¨ν©λλ€:
@@ -112,22 +113,22 @@ void main() {
`android/` λλ ν 리λ Android νλ«νΌ κ΄λ ¨ μ½λμ μ€μ μ ν¬ν¨ν©λλ€.
-```
-android/
-βββ app/
-β βββ src/
-β β βββ main/
-β β β βββ AndroidManifest.xml # μ± μ μΈ λ° κΆν
-β β β βββ kotlin/ # Kotlin μμ€ μ½λ
-β β β βββ res/ # 리μμ€ (μμ΄μ½, λ¬Έμμ΄ λ±)
-β β βββ profile/
-β βββ build.gradle # μ± μμ€ λΉλ μ€μ
-β βββ ...
-βββ build.gradle # νλ‘μ νΈ μμ€ λΉλ μ€μ
-βββ gradle/
-βββ gradle.properties
-βββ ...
-```
+
+- android/
+ - app/
+ - src/
+ - main/
+ - AndroidManifest.xml # μ± μ μΈ λ° κΆν
+ - kotlin/ # Kotlin μμ€ μ½λ
+ - res/ # 리μμ€ (μμ΄μ½, λ¬Έμμ΄ λ±)
+ - profile/
+ - build.gradle # μ± μμ€ λΉλ μ€μ
+ - ...
+ - build.gradle # νλ‘μ νΈ μμ€ λΉλ μ€μ
+ - gradle/
+ - gradle.properties
+ - ...
+
νΉν μ€μν νμΌλ€:
@@ -138,16 +139,16 @@ android/
`ios/` λλ ν 리λ iOS νλ«νΌ κ΄λ ¨ μ½λμ μ€μ μ ν¬ν¨ν©λλ€.
-```
-ios/
-βββ Runner/
-β βββ AppDelegate.swift # iOS μ± μ§μ
μ
-β βββ Info.plist # μ± κ΅¬μ± λ° κΆν
-β βββ Assets.xcassets/ # μ΄λ―Έμ§ μμ
-β βββ ...
-βββ Runner.xcodeproj/ # Xcode νλ‘μ νΈ νμΌ
-βββ ...
-```
+
+- ios/
+ - Runner/
+ - AppDelegate.swift # iOS μ± μ§μ
μ
+ - Info.plist # μ± κ΅¬μ± λ° κΆν
+ - Assets.xcassets/ # μ΄λ―Έμ§ μμ
+ - ...
+ - Runner.xcodeproj/ # Xcode νλ‘μ νΈ νμΌ
+ - ...
+
νΉν μ€μν νμΌλ€:
@@ -242,12 +243,12 @@ analyzer:
### assets/ λλ ν 리
-```
-assets/
-βββ images/ # μ΄λ―Έμ§ νμΌ
-βββ fonts/ # ν°νΈ νμΌ
-βββ data/ # JSON, CSV λ±μ λ°μ΄ν° νμΌ
-```
+
+- assets/
+ - images/ # μ΄λ―Έμ§ νμΌ
+ - fonts/ # ν°νΈ νμΌ
+ - data/ # JSON, CSV λ±μ λ°μ΄ν° νμΌ
+
μ΄ λλ ν 리λ `pubspec.yaml`μ λͺ
μμ μΌλ‘ λ±λ‘ν΄μΌ ν©λλ€:
@@ -263,12 +264,12 @@ flutter:
λ€κ΅μ΄ μ§μμ μν λλ ν 리:
-```
-l10n/
-βββ app_en.arb # μμ΄ λ²μ
-βββ app_ko.arb # νκ΅μ΄ λ²μ
-βββ app_ja.arb # μΌλ³Έμ΄ λ²μ
-```
+
+- l10n/
+ - app_en.arb # μμ΄ λ²μ
+ - app_ko.arb # νκ΅μ΄ λ²μ
+ - app_ja.arb # μΌλ³Έμ΄ λ²μ
+
## νλ‘μ νΈ κ΅¬μ‘°ν ν¨ν΄
@@ -278,23 +279,23 @@ Flutter μ±μ ꡬ쑰λ νλ‘μ νΈμ μ±κ²©κ³Ό νμ μ νΈλμ λ°λΌ
μ±μ κΈ°λ₯λ³λ‘ λλ ν 리λ₯Ό ꡬμ±νλ λ°©μ:
-```
-lib/
-βββ main.dart
-βββ features/
-β βββ auth/
-β β βββ screens/
-β β βββ widgets/
-β β βββ models/
-β β βββ services/
-β βββ home/
-β βββ profile/
-β βββ settings/
-βββ shared/
- βββ widgets/
- βββ utils/
- βββ constants/
-```
+
+- lib/
+ - main.dart
+ - features/
+ - auth/
+ - screens/
+ - widgets/
+ - models/
+ - services/
+ - home/
+ - profile/
+ - settings/
+ - shared/
+ - widgets/
+ - utils/
+ - constants/
+
μ΄ κ΅¬μ‘°λ κΈ°λ₯μ΄ λ§μ λκ·λͺ¨ μ±μ μ ν©ν©λλ€.
@@ -302,16 +303,16 @@ lib/
μ±μ μν€ν
μ² κ³μΈ΅λ³λ‘ λλ ν 리λ₯Ό ꡬμ±νλ λ°©μ:
-```
-lib/
-βββ main.dart
-βββ screens/ # λͺ¨λ νλ©΄ UI
-βββ widgets/ # λͺ¨λ μ¬μ¬μ© μμ ―
-βββ models/ # λͺ¨λ λ°μ΄ν° λͺ¨λΈ
-βββ services/ # λͺ¨λ μλΉμ€ λ‘μ§
-βββ repositories/ # λ°μ΄ν° μ‘μΈμ€ λ‘μ§
-βββ utils/ # μ νΈλ¦¬ν° ν¨μ
-```
+
+- lib/
+ - main.dart
+ - screens/ # λͺ¨λ νλ©΄ UI
+ - widgets/ # λͺ¨λ μ¬μ¬μ© μμ ―
+ - models/ # λͺ¨λ λ°μ΄ν° λͺ¨λΈ
+ - services/ # λͺ¨λ μλΉμ€ λ‘μ§
+ - repositories/ # λ°μ΄ν° μ‘μΈμ€ λ‘μ§
+ - utils/ # μ νΈλ¦¬ν° ν¨μ
+
μ΄ κ΅¬μ‘°λ μκ±°λ μ€κ° κ·λͺ¨μ μ±μ μ ν©ν©λλ€.
@@ -319,20 +320,20 @@ lib/
λ³΄λ€ μ²΄κ³μ μΈ μν€ν
μ² ν¨ν΄μ μ μ©ν ꡬ쑰:
-```
-lib/
-βββ main.dart
-βββ ui/
-β βββ screens/
-β βββ widgets/
-βββ viewmodels/
-βββ models/
-βββ services/
-βββ repositories/
-βββ core/
- βββ utils/
- βββ constants/
-```
+
+- lib/
+ - main.dart
+ - ui/
+ - screens/
+ - widgets/
+ - viewmodels/
+ - models/
+ - services/
+ - repositories/
+ - core/
+ - utils/
+ - constants/
+
μ΄ κ΅¬μ‘°λ μ½λμ μ μ§ κ΄λ¦¬μ±κ³Ό ν
μ€νΈ κ°λ₯μ±μ λμ΄λ λ° λμμ΄ λ©λλ€.
@@ -368,41 +369,41 @@ lib/
λ€μν νκ²½(κ°λ°, μ€ν
μ΄μ§, νλ‘λμ
)μ λν ꡬμ±μ μ§μνκΈ° μν΄ λ€μκ³Ό κ°μ μ κ·Ό λ°©μμ μ¬μ©ν μ μμ΅λλ€:
-```
-lib/
-βββ main.dart # κ³΅ν΅ μ§μ
μ
-βββ main_dev.dart # κ°λ° νκ²½ μ§μ
μ
-βββ main_staging.dart # μ€ν
μ΄μ§ νκ²½ μ§μ
μ
-βββ main_prod.dart # νλ‘λμ
νκ²½ μ§μ
μ
-βββ config/
- βββ app_config.dart # νκ²½ μ€μ ν΄λμ€
- βββ dev_config.dart
- βββ staging_config.dart
- βββ prod_config.dart
-```
+
+- lib/
+ - main.dart # κ³΅ν΅ μ§μ
μ
+ - main_dev.dart # κ°λ° νκ²½ μ§μ
μ
+ - main_staging.dart # μ€ν
μ΄μ§ νκ²½ μ§μ
μ
+ - main_prod.dart # νλ‘λμ
νκ²½ μ§μ
μ
+ - config/
+ - app_config.dart # νκ²½ μ€μ ν΄λμ€
+ - dev_config.dart
+ - staging_config.dart
+ - prod_config.dart
+
### λΌμ°ν
ꡬμ±
μ±μ νλ©΄ μ νμ κ΄λ¦¬νκΈ° μν λΌμ°ν
ꡬμ±:
-```
-lib/
-βββ router/
-β βββ app_router.dart # λΌμ°ν° μ€μ
-β βββ routes.dart # λΌμ°νΈ μμ
-```
+
+- lib/
+ - router/
+ - app_router.dart # λΌμ°ν° μ€μ
+ - routes.dart # λΌμ°νΈ μμ
+
### μν κ΄λ¦¬
μ νν μν κ΄λ¦¬ μ루μ
μ λ°λΌ κ΅¬μ‘°κ° λ¬λΌμ§ μ μμ΅λλ€:
-```
-lib/
-βββ providers/ # Riverpod/Provider
-βββ blocs/ # Flutter_bloc
-βββ stores/ # MobX
-βββ state/ # κΈ°ν μν κ΄λ¦¬
-```
+
+- lib/
+ - providers/ # Riverpod/Provider
+ - blocs/ # Flutter_bloc
+ - stores/ # MobX
+ - state/ # κΈ°ν μν κ΄λ¦¬
+
## κ²°λ‘