본문 바로가기
Flutter

Flutter 프로젝트 폴더 구조 가이드

by 안될개발 2025. 2. 28.

Flutter 프로젝트 폴더 구조 가이드

Flutter 프로젝트 폴더 구조 가이드

Flutter 프로젝트를 효율적으로 관리하려면 적절한 폴더 구조를 갖추는 것이 중요합니다. 이번 글에서는 유지보수성과 확장성을 고려한 Flutter 프로젝트 폴더 구조를 소개합니다.

기본 Flutter 폴더 구조

Flutter 프로젝트를 생성하면 기본적으로 다음과 같은 폴더 구조가 생성됩니다.

my_flutter_project/
│── android/        # Android 네이티브 코드
│── ios/            # iOS 네이티브 코드
│── lib/            # 주요 Dart 코드 (앱 로직)
│── test/           # 테스트 코드
│── web/            # 웹 관련 코드 (웹 프로젝트 포함 시)
│── build/          # 빌드된 파일 (자동 생성됨)
│── pubspec.yaml    # 프로젝트 설정 및 의존성
│── README.md       # 프로젝트 설명 파일

위 구조는 Flutter 프로젝트의 기본적인 형태이며, 실제 개발에서는 lib/ 폴더 내부를 효율적으로 구성하는 것이 중요합니다.

추천하는 lib/ 폴더 구조

Flutter 프로젝트의 lib/ 폴더는 앱의 핵심 코드가 위치하는 곳으로, 일반적으로 다음과 같이 구성할 수 있습니다.

lib/
│── main.dart               # 앱 실행 진입점
│── core/                   # 공통 유틸리티 및 설정
│   │── constants/          # 상수 정의
│   │── theme/              # 앱 테마 및 스타일 설정
│   │── utils/              # 유틸리티 함수
│   │── config.dart         # 환경 설정 파일
│── data/                   # 데이터 관련 코드
│   │── models/             # 데이터 모델
│   │── repositories/       # 데이터 저장소 (API, DB 등)
│── domain/                 # 비즈니스 로직
│   │── entities/           # 엔티티 (도메인 모델)
│   │── usecases/           # Use Case (비즈니스 규칙)
│── presentation/           # UI 및 화면 관련 코드
│   │── pages/              # 주요 화면
│   │── widgets/            # 공통 UI 위젯
│── providers/              # 상태 관리 관련 코드 (Riverpod, Bloc 등)
│── routes/                 # 앱 내 라우트 관리
│── main.dart               # 앱 실행 진입점

폴더 구조 설명

  1. core/: 프로젝트 전반에서 사용되는 공통 기능 및 설정을 포함합니다.
  2. data/: API, 데이터베이스, 로컬 캐시 등의 데이터를 처리하는 레이어입니다.
  3. domain/: 비즈니스 로직을 담당하며, 엔티티와 유즈케이스를 정의합니다.
  4. presentation/: UI 관련 코드가 위치하는 곳으로, 화면과 위젯이 포함됩니다.
  5. providers/: 상태 관리를 담당하는 코드가 포함됩니다. (Riverpod, Bloc 등 사용 가능)
  6. routes/: 앱의 네비게이션과 관련된 경로를 관리합니다.

상태 관리 방식에 따른 추가 고려 사항

Flutter에서 사용하는 상태 관리 방식(Riverpod, Bloc, Provider 등)에 따라 폴더 구조를 조정할 수 있습니다.

Riverpod을 사용할 경우 (providers/ 활용)

Riverpod을 사용한다면 providers/ 폴더를 만들어 상태 관리 로직을 따로 분리하는 것이 좋습니다.

lib/
│── providers/
│   │── auth_provider.dart
│   │── user_provider.dart
│   │── settings_provider.dart

Bloc을 사용할 경우 (bloc/ 폴더 추가)

Bloc 패턴을 사용할 경우, bloc/ 폴더를 만들어 각 기능별 Bloc을 관리할 수 있습니다.

lib/
│── presentation/
│   │── pages/
│   │── widgets/
│── blocs/
│   │── auth_bloc/
│   │── user_bloc/
│   │── settings_bloc/

마무리

Flutter 프로젝트의 폴더 구조는 팀의 개발 스타일과 프로젝트의 규모에 따라 다를 수 있습니다. 하지만 유지보수성과 확장성을 고려하면 위와 같은 구조가 효과적입니다. 프로젝트의 복잡도가 증가할수록 모듈화된 구조를 유지하는 것이 중요하며, 각 폴더의 역할을 명확히 구분하는 것이 도움이 됩니다.

올바른 폴더 구조를 설계하여 가독성과 유지보수성을 높이고, 효율적인 개발을 진행해 보시기 바랍니다!