가끔 보자, 하늘.

Flutter 로 앱 개발 및 릴리즈 - 02. 폴더 구조 정리 본문

개발 이야기/개발 및 서비스

Flutter 로 앱 개발 및 릴리즈 - 02. 폴더 구조 정리

가온아 2025. 5. 8. 09:00

오늘은 프로젝트의 폴더 구조를 정리해 봤습니다. 

프로젝트를 처음 만들면 다음과 같은 폴더 구조를 볼 수 있는데 처음 보니 어질어질하네요. 

저 수 많은 폴더를 관리해야 하나 싶어 찾아보니 그건 아닌 듯 했는데, 꽤 손이 많이 가긴 하는 듯 합니다. (아직은 추측이네요. 아무리 Gemini가 아니라고 하지만.. -_-;) Gemini는 다음과 같이 말하네요. 조금 길지만 한번 알고는 넘어가야 할 듯 합니다. 


간단한 시작 템플릿이라고 하기에는 폴더 구조가 복잡해 보일 수 있습니다. 특히 여러 OS를 지원하는 프로젝트는 일반적인 Android 프로젝트보다 파일과 폴더가 더 많이 포함되는 경향이 있습니다. 하지만, 모든 폴더를 직접 관리할 필요는 없으니 너무 걱정하지 않으셔도 됩니다.

각 폴더의 역할 및 관리:

템플릿에서 볼 수 있는 주요 폴더들을 살펴보고, 어떤 폴더를 주로 관리해야 하는지, 어떤 폴더는 시스템에서 자동으로 관리하는지를 설명해 드리겠습니다. (현재 제공된 정보가 부족하여 정확한 폴더 구조를 알수 없지만 일반적인 멀티플렛폼 앱을 기준으로 설명드리겠습니다.)

  1. android 폴더:
    • 역할: Android 앱 프로젝트를 포함합니다. 이 폴더 내에는 Android 플랫폼과 관련된 리소스, 매니페스트, 네이티브 코드, 빌드 구성 파일 등이 있습니다.
    • 관리:
      • 주로 android/app/src/main 폴더 내부의 리소스(레이아웃, 이미지, 문자열 등)를 관리하게 됩니다.
      • android/app/build.gradle.kts 파일은 라이브러리 의존성 관리, 빌드 설정 등에 사용합니다.
      • android/app/src/main/AndroidManifest.xml 파일은 앱의 구성 요소와 권한을 선언하는 데 사용됩니다.
      • 네이티브 코드(Java/Kotlin)를 작성하는 경우, android/app/src/main/java 폴더를 관리합니다.
      • android/app/src/main/res 폴더는 drawable, layout, values등 리소스를 관리합니다.
      • 일반적으로 android 폴더의 나머지 부분은 대부분 빌드 시스템이 관리하며, 직접 수정할 필요는 거의 없습니다.
  2. ios 폴더:
    • 역할: iOS 앱 프로젝트를 포함합니다. Xcode 프로젝트 파일, 리소스, 네이티브 코드가 포함됩니다.
    • 관리:
      • ios/Runner 폴더에서 iOS 앱의 네이티브 코드, 리소스 등을 관리합니다.
      • ios/Runner.xcworkspace 는 Xcode 프로젝트 파일로 Xcode를 통해 관리합니다.
      • 주로 iOS 개발을 할 때 필요한 구성 파일을 관리합니다. 직접적으로 수정할 일은 많지 않을 것입니다.
  3. lib 폴더
    • 역할: 앱의 핵심 소스 코드를 저장하는 폴더입니다. 앱의 대부분의 로직, 위젯, 화면등은 lib 폴더안에 존재합니다.
    • 관리: 사용자가 주로 코드를 작성하고 관리하는 영역입니다.
  4. web 폴더:
    • 역할: 웹 앱 프로젝트를 포함합니다. HTML, CSS, JavaScript 파일이 포함됩니다.
    • 관리: 웹 앱을 빌드하는 경우에만 직접 관리하며, 그 외에는 대부분 빌드 시스템이 관리합니다.
  5. macos 폴더:
    • 역할: macOS 앱 프로젝트를 포함합니다.
    • 관리: macOS 개발을 하는 경우에만 주로 관리하며, 그 외에는 빌드 시스템이 관리합니다.
  6. linux 폴더:
    • 역할: 리눅스 앱 프로젝트를 포함합니다.
    • 관리: 리눅스 개발을 하는 경우에만 주로 관리하며, 그 외에는 빌드 시스템이 관리합니다.
  7. windows 폴더:
    • 역할: 윈도우 앱 프로젝트를 포함합니다.
    • 관리: 윈도우 개발을 하는 경우에만 주로 관리하며, 그 외에는 빌드 시스템이 관리합니다.
  8. test 폴더:
    • 역할: 테스트 코드를 작성하는 폴더입니다.
    • 관리: 단위 테스트나 위젯 테스트를 작성할 때, 여기에 테스트 코드를 추가합니다.
  9. .gradle 폴더:
    • 역할: 프로젝트 빌드와 관련된 정보를 저장하는 폴더입니다.
    • 관리: 직접적으로 관리할 필요는 없습니다.
  10. build 폴더:
    • 역할: 프로젝트를 빌드할 때 생성되는 폴더입니다. 빌드 결과물, 중간 파일 등이 저장됩니다.
    • 관리: 직접 수정하거나 관리할 필요가 없습니다. 필요에 따라 정리만 하면됩니다.
  11. pubspec.yaml, pubspec.lock:
    • 역할: 프로젝트의 메타 정보(프로젝트 이름, 버전, 의존 라이브러리등)를 포함하는 파일입니다.
    • 관리: 사용자가 주로 수정하는 파일입니다. 의존 라이브러리 관리등에 활용됩니다.
  12. README.md
    • 역할: 프로젝트를 설명하는 문서입니다.
    • 관리: 사용자가 주로 수정하는 파일입니다. 프로젝트에 대해 설명이 필요할 때 관리됩니다. 소스 코드 위치:
  13. 핵심 소스 코드: 앱의 핵심 소스 코드는 주로 lib 폴더에 위치합니다. lib/main.dart 파일이 앱의 진입점 역할을 하며, 그 외의 화면, 위젯, 로직 등은 lib 폴더 내의 여러 파일과 하위 폴더에 분산되어 관리됩니다.
  14. 플랫폼별 네이티브 코드: Android 네이티브 코드는 android/app/src/main/java 폴더에, iOS 네이티브 코드는 ios/Runner 폴더 내에 위치합니다. 각 플랫폼과 직접적으로 상호작용하는 코드를 여기에 작성합니다.

결론:

모든 폴더를 직접 관리해야 하는 것은 아닙니다. 주로 lib, android/app/src/main/res, android/app/src/main/java 등의 폴더와 android/app/build.gradle.kts, pubspec.yaml 과 같은 파일을 관리하게 됩니다. build, .gradle 폴더등은 빌드 시스템이 관리하며, 직접 수정할 필요는 없습니다.나머지 플랫폼별 폴더는 각 플랫폼에 맞게 개발하는 경우에만 관리하면 됩니다. lib 폴더가 핵심 소스코드가 위치하는 곳입니다.

복잡해 보이지만, 실제로 앱 개발을 진행하면서 관리해야 할 부분은 생각보다 많지 않습니다. 특히 멀티플랫폼 앱 개발에서는 lib 폴더가 핵심이 됩니다. 천천히 폴더 구조에 익숙해지시면 더 편하게 개발할 수 있을 것입니다.


(Android Studio 내의 Gemini를 이용했는데 복사 기능도 없고 생각보다 포멧이 깔끔하게 복사되지는 않네요.)

이제 주로 작업할 소스 코드의 위치도 알았으니 다음에는 lib/main.dart를 수정하고 코드를 확장하거나 컴포넌트를 어떻게 추가하고 관리해야 하는지 정리해 보겠습니다. 

반응형