https://www.youtube.com/watch?v=UQchKVyjNNk
1. 이건 꼭 알아야 한다[^1]
[? 질문] Flutter 프로젝트를 생성하면 폴더/파일들이 어떤 역할로 나뉘어 있고, 개발자는 어디를 주로 수정해야 하는가[^1]
[= 답] Flutter 프로젝트는 android, ios, lib, test 및 여러 설정 파일로 구성되며, 일반적인 Flutter 앱 개발은 주로 lib/main.dart 아래에서 Dart 코드를 작성해 진행한다.[^6][^7] 다만 패키지 의존성/SDK 버전을 관리해야 할 때는 pubspec.yaml을 수정한다.[^18]
[? 질문] android/ios 폴더는 언제 만지게 되며, 평소에는 왜 크게 신경 쓰지 않아도 되는가[^4]
[= 답] android/ios 폴더는 각각 네이티브(Android/iOS) 관련 코드와 설정이 모여 있는 곳으로, 네이티브 설정을 바꾸거나 네이티브 코드를 직접 작성해야 할 때만 만지면 되고, 특별한 요구가 없으면 건드리지 않아도 된다.[^4][^5][^6]
2. 큰 그림[^1]
이 콘텐츠는 Flutter로 프로젝트를 만들었을 때 자동으로 생성되는 **프로젝트 구조(폴더/파일 구성)**를 빠르게 훑으며, 각 구성요소가 무엇을 담당하는지와 “어디를 주로 수정하는지”를 안내한다.[^1][^2] 특히 Flutter 초보자가 처음 마주치는 android/ios/lib/test 및 설정 파일들의 의미를, “평소에는 건드릴 필요가 있는지” 관점에서 정리한다.[^4][^6]
- Flutter 프로젝트에는 플랫폼별 네이티브 영역(android, ios)과 Flutter 앱의 핵심 코드 영역(lib)이 분리되어 있다.[^3][^5][^7]
- 대부분의 앱 로직/화면은 lib/main.dart를 중심으로 Dart 코드를 작성해 구현한다.[^7][^8]
- 패키지 매니저가 쓰는 pubspec.yaml은 예외적으로 알아야 하며, SDK 버전이나 **외부 라이브러리(의존성)**를 정의/변경할 때 수정한다.[^18][^19]
3. 하나씩 살펴보기[^1]
3.1 프로젝트 구조를 “한 번 전체로” 훑어보기[^1]
영상은 “먼저 프로젝트 구조를 살펴보자”는 말로 시작하며, Flutter 프로젝트(예: “플로터 베이직”으로 보이는 프로젝트 루트) 아래에 어떤 폴더들이 기본으로 존재하는지 보여준다.[^1][^2] 화자는 루트에 android, ios, lib, test 폴더가 있고, 그 밖에도 여러 파일들이 함께 들어있다고 설명한다.[^3]
- 루트에 보이는 대표 폴더/영역:
- android[^3]
- ios[^3]
- lib[^3]
- test[^3]
- 그 외 “여러 가지 파일들”[^3]
여기서 핵심은 “Flutter 프로젝트는 한 폴더 안에 모든 것이 섞여 있는 게 아니라, 플랫폼 네이티브 영역과 Flutter(Dart) 영역이 명확히 나뉜다”는 관찰을 초보자 관점에서 확인시키는 것이다.[^3][^5]
3.2 android 폴더: 안드로이드 관련 파일 묶음, 필요할 때만 수정[^4]
화자는 android 폴더에 대해 “안드로이드 관련된 파일들이 모여 있다”고 말한다.[^4] 즉, Flutter로 앱을 만들더라도 프로젝트 안에는 Android Studio/Gradle/Manifest 등 Android 플랫폼에 필요한 네이티브 구성요소가 포함되며, 그것들이 android 폴더에 정리되어 있다는 뜻이다.[^4]
- android 폴더의 성격: “안드로이드 관련 파일들이 모여있다”[^4]
- 언제 만지나: “여기를 만질 일이 있을 때 한번 만져 보도록 하겠다”는 식으로, 필요 상황에서만 접근하면 된다고 안내한다.[^5]
[!IMPORTANT] android 폴더에 대한 사용 가이드
화자는 android 폴더를 “평소 필수로 수정하는 곳”이 아니라, 정말로 네이티브(Android) 쪽을 건드려야 하는 상황에서만 들어가면 되는 영역으로 위치시킨다.[^5]
3.3 ios 폴더: iOS 네이티브 코드/설정, 특별한 일 없으면 건드리지 않기[^6]
ios 폴더도 android와 같은 맥락으로 설명된다. 화자는 ios 폴더를 “ios 쪽 코드를 작성할 수 있는 곳”으로 이해하면 된다고 말한다.[^6] 즉, iOS(예: Xcode 프로젝트, Info.plist 등) 관련 네이티브 설정과 코드가 위치한다.[^6][^7]
또한 화자는 이 폴더에 “네이티브 관련된 설정 파일” 등이 있으며, 특별히 만질 일이 없다면 안 만져도 된다고 강조한다.[^7][^6]
- ios 폴더의 성격: iOS 쪽 코드를 작성할 수 있는 곳[^6]
- 포함 요소(설명 수준): 네이티브 관련 설정 파일 등[^7]
- 권장 접근: 특별한 일이 없다면 건드리지 않아도 됨[^7]
[? 질문] Flutter 개발을 한다면 iOS 네이티브 설정 파일들은 매번 수정해야 하는가[^7]
[= 답] 아니다. iOS 폴더에는 네이티브 설정이 있으나, 특별한 요구(네이티브 수정)가 없다면 건드리지 않아도 된다.[^7]
3.4 lib 폴더와 main.dart: Flutter 앱을 만드는 “주 작업 공간”[^8]
화자는 이어서 lib 폴더를 보여주며, 그 안에 main.dart 파일이 있고 “지금 열려 있는 이 파일의 위치가 되겠다”고 말한다.[^8] 즉, 화면에 열어둔 파일이 바로 lib/main.dart이며 Flutter 개발에서 가장 먼저 접하는 엔트리 포인트 파일임을 알려준다.[^8]
또한 화자는 “이 아래에 Dart 코드를 작성해 가지고 우리가 Flutter 앱을 만들 수 있다”고 설명한다.[^9] 이는 Flutter 앱의 UI/로직이 기본적으로 Dart 코드로 작성되며, 그 코드가 기본적으로 lib 아래에 위치한다는 구조적 원칙을 전달한다.[^9]
- lib 폴더: Dart 코드를 작성하는 중심 영역[^9]
- main.dart: 열려 있는 파일이며, 앱 구현의 시작점으로 제시됨[^8]
- 결과: lib 아래에 Dart 코드를 작성해 Flutter 앱을 만든다[^9]
[!TIP] Flutter 초보자가 “첫 수정”을 하는 곳
프로젝트를 처음 만들고 바로 수정/실행 흐름을 익힐 때는 lib/main.dart에서 시작하는 것이 자연스럽다.[^8][^9]
3.5 test 폴더: 테스트 코드를 작성하는 곳, 샘플 포함[^10]
다음으로 화자는 test 폴더를 “테스트 코드를 작성하는 곳”이라고 설명한다.[^10] 그리고 “이런 쪽으로 샘플이 들어가 있다”고 덧붙여, 기본 생성된 프로젝트에는 테스트 관련 샘플 코드가 함께 제공될 수 있음을 알린다.[^10]
- test 폴더의 목적: 테스트 코드 작성[^10]
- 기본 제공 요소: 샘플 포함(프로젝트 템플릿이 제공하는 예제)이라는 뉘앙스[^10]
3.6 프로젝트 생성 시 자동 생성되는 버전 관리 관련 파일들(신경 덜 써도 됨)[^11]
화자는 이어서, 프로젝트를 만들면 “자동으로 버전 관리”가 되며(말이 다소 부정확/구어적이지만), 그 결과로 자동으로 여러 파일들이 작성된다고 말한다.[^11][^12] 요지는 초보자가 프로젝트 루트에서 보게 되는 여러 파일 중 상당수는 템플릿이 자동 생성한 것이며, 당장 개발 초기에 “특별히 신경 쓰지 않아도 되는 것들이 있다”는 안내다.[^12][^13]
- 프로젝트 생성 직후 자동으로 작성되는 파일들이 존재[^12]
- 그 중 일부는 특별히 신경 쓰지 않아도 됨[^13]
화자는 특정 파일들을 가리키며 “Flutter 2D 사용하는 파일”처럼 들리는 설명을 한다.[^14] 이 구간은 발화가 다소 깨져 있으나, 맥락상 “엔진/렌더링/툴링 관련 자동 생성 파일들”을 가리키며 초보자가 당장 손댈 대상이 아니라는 메시지를 주려는 흐름으로 이어진다.[^14][^15]
3.7 패키지/설정 파일들: 대부분은 건드릴 일 없지만 pubspec.yaml은 예외[^15]
화자는 “패키지” 관련 정보가 들어 있는 것으로 보이는 파일/영역을 언급하면서, “특별히 수정할 일은 없다”고 말한다.[^15] 또한 “플루터 베이직 … 수정할 일 없다”는 식으로, 초보 단계에서는 여러 설정/메타 파일이 있어도 대부분은 그대로 두면 된다고 반복한다.[^16][^17]
- “패키지 정보들이 들어 있는” 무언가가 있으나 특별히 수정할 일 없음[^15]
- 다른 파일들도 “수정할 일 없다 / 신경 쓰지 않아도 된다”는 톤으로 정리[^16][^17]
하지만 바로 이어서 화자는 pubspec.yaml을 특정해 설명한다.[^18] 이 파일은 “Flutter 패키지 매니저가 사용하는 파일”이며,[^18] 여기에서 “Flutter SDK 버전”이나 “외부 라이브러리 같은 것”을 정의할 때 수정할 일이 있다고 말한다.[^19] 따라서 이 파일만큼은 “알고 있어야 될 것 같다”고 명시한다.[^20]
- pubspec.yaml의 정체: Flutter 패키지 매니저가 사용하는 파일[^18]
- 수정하는 이유/상황:
- Flutter의 SDK 버전을 정의/조정할 때[^19]
- **외부 라이브러리(의존성)**를 추가/관리할 때[^19]
- 학습 우선순위: “이거는 알고 계셔야 될 것 같다”[^20]
[!IMPORTANT] pubspec.yaml은 “설정 파일 중 예외적으로 중요한 파일”
많은 파일은 템플릿이 자동으로 만들고 건드릴 일이 적지만, SDK 버전과 외부 라이브러리 의존성을 다루려면 pubspec.yaml을 수정하게 되므로 초보라도 이 파일의 존재와 역할을 알아야 한다.[^18][^19][^20]
[? 질문] Flutter 프로젝트에서 외부 라이브러리를 추가하거나 SDK 버전을 지정하는 곳은 어디인가[^18]
[= 답] Flutter 패키지 매니저가 사용하는 pubspec.yaml에서 SDK 버전과 외부 라이브러리(의존성)를 정의/수정한다.[^18][^19]
3.8 프로젝트 생성 시 작성한 “설명(description)”이 들어가는 파일이 자동 생성됨[^21]
마지막으로 화자는 “자동으로 이런 … 파일이 만들어져 있어요”라고 하며, “우리가 처음에 프로젝트 생성할 때 작성했던 설명이 이쪽에 들어가 있다”고 말한다.[^21] 즉, flutter create 등으로 프로젝트를 만들 때 입력하는 프로젝트 설명(description)이 특정 메타/설정 파일에 반영되어 자동 생성된다는 점을 짚는다.[^21]
- 프로젝트 생성 시 자동 생성 파일 존재[^21]
- 생성 시 입력한 “설명”이 해당 파일에 기록됨[^21]
(영상에서는 파일명이 명확히 들리지는 않지만, “프로젝트 생성 시 넣었던 설명이 어딘가에 들어간다”는 사실 자체를 전달한다.)[^21]
4. 핵심 통찰[^1]
-
[h Flutter 프로젝트는 ‘네이티브 영역(android/ios)’과 ‘Flutter 코드 영역(lib)’이 구조적으로 분리되어 있다.] 이는 한 프로젝트에서 Android와 iOS를 동시에 타깃하되, 앱 로직은 공통(Dart)으로 두고 플랫폼별 요소를 분리해 관리하는 방식임을 보여준다.[^3][^6][^9]
- 실행 시사점:
-
- UI/로직은 우선 lib/main.dart에서 구현하고, 네이티브 수정이 필요할 때만 android/ios로 내려간다.[^8][^9][^7]
-
- 실행 시사점:
-
[h 초보 단계에서 ‘자주 수정하는 곳’과 ‘거의 안 건드리는 곳’을 구분하는 것이 학습 효율을 높인다.] 화자는 android/ios 및 다수 자동 생성 파일은 특별한 일이 없으면 건드리지 말라고 반복한다.[^7][^13][^17]
- 실행 시사점:
-
- 처음에는 루트의 모든 파일을 이해하려고 하기보다, lib와 pubspec.yaml부터 익힌다.[^9][^20]
-
- 실행 시사점:
-
[c pubspec.yaml은 설정 파일 중 반드시 알아야 하는 핵심 파일이다.] 외부 라이브러리 추가와 SDK 버전 지정이 여기서 이루어지기 때문에, 실전 개발에서 수정 빈도가 높아진다.[^18][^19][^20]
- 실행 시사점:
-
- 패키지 추가/업데이트가 필요할 때
pubspec.yaml의 의존성/SDK 항목을 확인하고 수정하는 흐름을 익힌다.[^19][^20]
- 패키지 추가/업데이트가 필요할 때
-
- 실행 시사점:
-
[m test 폴더는 테스트 코드 공간이며, 템플릿 샘플이 포함될 수 있다.] 즉, 프로젝트 구조에 기본적으로 테스트를 위한 자리가 마련되어 있음을 보여준다.[^10]
참고(콘텐츠 정보)
- 제목: Flutter 입문. 안드로이드, iOS 개발을 한 번에 #7 프로젝트 구조[^1]
- 채널: 오준석의 생존코딩[^1]
- 길이: 1분 58초[^1]
- 링크: https://www.youtube.com/watch?v=UQchKVyjNNk[^1]
[^1]: @[00:00] “먼저 프로젝트 구조를 살펴보도록 하겠습니다” [^2]: @[00:03] “프로젝트 구조는 이렇게 되어있는데요” [^3]: @[00:03] “플로터 베이직 아래의 안드로이드 ios lib 테스트 그리고 여러가지 파일들이 들어있습니다” [^4]: @[00:15] “안드로이드는 안드로이드 관련된 파일들이 모여있다고 보시면 되요” [^5]: @[00:20] “그래서 여기를 만질 일이 있을때 한번 만져 보도록 하겠습니다” [^6]: @[00:23] “ios 마찬가지로 ios 쪽 코드를 작성할 수 있는 그런 곳이라고 보시면 되고요” [^7]: @[00:29] “네이티브 관련된 그런 설정 파일이나 그런 것들이 여기에 있는데” [^8]: @[00:40] “그리고 lib 폴더가 있는데 여기에 메인 점 다트 이게 지금 열려있는 이 파일의 위치가 되겠습니다” [^9]: @[00:48] “이 아래에 다트 코드를 작성을 해 가지고 우리가 플로터 앱을 만들 수가 있습니다” [^10]: @[00:54] “다음 테스트 코드를 작성하는 곳이고요 이런 쪽으로 샘플이 들어가 있습니다” [^11]: @[00:59] “일단 프로젝트를 생성하면 자동으로 버전 관리 하게 됩니다” [^12]: @[01:02] “그래서 자동으로 이렇게 이거 파일들이 작성이 되어 있구요” [^13]: @[01:08] “다음에 파일은 특별히 신경쓰지 않으셔도 될꺼 같아요” [^14]: @[01:09] “플로터 2d 사용하는 파일이라고 보시면 되구요” [^15]: @[01:17] “패키지 … 패키 정보들이 들어 있는데 특별히 수정할 이전 없습니다” [^16]: @[01:22] “플루토 베이직 … 이것도 수정할 이런 없다고 보시면 되구요” [^17]: @[01:26] “이것도 신경쓰지 않으셔도 될 것 같아요” [^18]: @[01:33] “이거 … 팩 점 yama 라는 파일은 플루 터 패키지 매니저 가 사용하는 파일이 구요” [^19]: @[01:39] “여기는 어플 루터의 sdk 버전이 라던지 외부 라이브러리 같은거 를 정의할 때 여기를 수정을 할 일이 있습니다” [^20]: @[01:47] “그래서 이거는 알고 계셔야 될거 같고요” [^21]: @[01:50] “자동으로 이런 … 파일이 만들어져 있어요 우리가 처음에 프로젝트 생성할 때 작성했던 설명이쪽에 들어가 있구요”