[협업/Git/Jira 기초] #2 컴공 팀 프로젝트가 처음인 분들께... 🧡Pakage Convention(프론트 한정)
~제가 작성한 노션을 블로그에도 옮긴 내용입니다!~
목차
- Pakage Convention
- file, folder name convention
- 폴더명
- 폴더명 예시
1. Pakage Convention
🍎 사용 목적 클린 아키텍처의 개념을 요약하면 아래와 같습니다.
- 변경이 용이하고(유연) + 의존성을 줄이고 + 테스트 가능하고 + 유지 관리 쉽게 하기 위한 개념
- 소스 코드를 보는 것만으로 프로그램이 수행하는 작업을 식별할 수 있는 소프트웨어 개발 방법
MVVM이란, (Model - View - View Model)으로 로직을 사용자 인터페이스 제어에서 분리하는 소프트웨어 설계 프레임워크입니다.
MVVM 패턴을 사용한 클린 아키텍처의 장점은 아래와 같습니다.
- 표준 MVVM보다 테스트 쉬움
- 완벽하게 큐레이션된 분리(가장 큰 장점)
- 사용하기 쉬운 패키지 구조
- 프로젝트를 쉽게 실행 가능
- 새 기능 빠르게 구현 가능
위 장점을 위해 패키지 구조를 아래와 같이 지키고자 합니다.
이 부분은 어렵고 깊은 내용이기 때문에 아래 포스트들을 다 읽어보시길 추천드립니다!
- Clean Architecture 란 ?
- 구글에 clean architecture를 검색해서 영어로 보시는 것도 추천드립니다.
- [Flutter] Clean Architecture & DI 샘플앱 개발 후기
- An Introduction to Flutter Clean Architecture
- [Flutter] 프로젝트에 아키텍처 적용하기 (MVC, MVP, MVVM)
- Flutter 앱 개발을 위한 MVVM아키텍처 - 1부 MVVM이란?
- Flutter 앱 개발을 위한 MVVM아키텍처 - 2부 View와 ViewModel
- 이 부분도 이해가 어려울 수 있으니 flutter mvvm 등을 검색하여 몇 포스트들을 더 보는 것을 추천드립니다. 서버 연결과 아주 관련이 깊습니다.
아래는 MVVM 패턴과 클린 아키텍처를 적용한 패키지 구조입니다.
이런 구조는 다양하게 있을 수 있지만 큰 틀은 비슷합니다.
저희는 사람들이 많이 쓰는 구조를 사용할 예정입니다.
위 내용이 이해가 어렵다면, 지금은 기능/목적별로 패키지를 나누어 놓았다고 이해하셔도 됩니다.
아래는 저희가 사용할 패키지를 용도를 설명해 놓은 것입니다.
위 그림과 조금 다른 것을 확인할 수 있는데, 큰 틀은 같습니다.
(저도 플러터로는 패키징이 처음이라 개발하면서 달라질 수 있는데, 그럴 때마다 다시 공지하겠습니다. 저도 추가 공부가 필요한 부분이지만, 큰 변화는 없을 거 같고 빨리 보내는 거 좋을 거 같아 일단 보내드립니다.)
- assets: 정적 파일(Static Contents)를 포함
- fonts: 폰트
- icons: 아이콘 모음
- images: 이미지 모음
- lib
- src
- constants : 앱의 전반적 구성요소들, 전역 정적 설정 정보
- colors.dart: ui 제작 시 사용되는 색을 모아둔 곳
- 시용할 컬러는 colors.dart에 있는지 확인하고, 없으면 추가하여 사용하기!
- theme.dart: 앱에서 사용되는 Theme을 모아둔 곳
- colors.dart: ui 제작 시 사용되는 색을 모아둔 곳
- core : 앱에서 전역적으로 사용되는 요소들
- params : API호출시 필요한 파라미터 모아둔 클래스
- resources : API호출시 결과를 갖는 wrapper class. 통신 성공/실패 케이스를 쉽게 챙길수있다.
- utils : 공용 Utility, Helper 성격의 파일
- data : data layer 관련 요소들
- datasources : api호출 클래스
- local: 앱 내 DB에서 호출
- remote: 서버 api 호출
- models : Model 성격의 Data Class, api결과 데이터 관련 클래스(DTO)
- repositories : api 클래스를 주입받아 사용하는 레포지토리 구현체
- datasources : api호출 클래스
- domain : domain layer 관련 요소들 < 저희 플젝에선 안 쓸 거 같지만 그냥 읽어만 보셔요.
- entities : POJO (data폴더의 model과 달리 데이터 파싱, 변환에 영향을 받지않는 근본적인 데이터 구조를 나타내는 클래스)
- repositories : api호출 인터페이스.
- usecases : repository를 주입받아서 하나의 액션 수행하는 클래스
- ui : ui layer 관련 요소들
- blocs : BLOC
- screens: 화면 파일
- widgets: 각 화면을 구성하는 위젯 파일이 포함
- providers : model과 ui의 상호작용을 처리
- injector.dart
- constants : 앱의 전반적 구성요소들, 전역 정적 설정 정보
- main.dart
- src
2. flie, floder name convention
🍎 사용이유: 가독성을 높이고, 서로의 코드를 잘 이해하기 위한 약속입니다. 이를 잘 지키면 파일, 폴더 이름만으로 특정 파일을 쉽게 찾을 수 있고, 해당 파일의 내용도 예측이 가능해집니다. 이는 리펙토링에도 도움이 되겠지요!
2-1. 폴더명
파일명은 snake_case로 작성합니다.
운영체제에 따라 대소문자 처리 규칙과 허용 특수문자가 다르기 때문에, 사전에 문제를 방지하기 위해 항상 소문자, 언더바만 사용합니다. 다른 특수문자(공백, 하이픈 등)은 사용하지 않습니다.
2-2. 폴더명 예시
- [기능]_[뷰]: home_screen.dart
- [피키지명][기능][뷰]: home_item_widget.dart
// ex
screens
- auth
- login_screen.dart
- register_screen.dart
- home
- home_screen.dart
- about_screen.dart
- widgets
- custom_loading_widget.dart
- home_item_list_widget.dart
- assets : 정적 파일(Static Contents)를 포함
- icons: ic_로 시작합니다.
- images: img로 시작합니다.
- [ic/img][패키지명(여러 화면에서 쓰이는 경우 생략 가능)][역할]
// ex
assets
-icons
- ic_logo.png
- images
- img_home_banner.jpeg
- fonts
- customfont.ttf
- fontawesome.ttf
관련 포스트:
~주저리~
두 번째로 안내한 건,
1. 패키지는 어떤 식으로 나누는지,
2. 파일을 만들 때 어떤 이름의 파일로 만들어야 하는지
3. 이런 파일은 어느 패키지 안에 들어가야 하는지
에 대해서 안내했다.
이러면 코드 통일성을 지킬 수 있지 않을까 + 서버 연결이나 크게 보면 프로젝트 관리에도 큰 도움이 될 거 같았다.
이 설명에서 아쉬운 거는 클린 아키텍처와 MVVM 패턴에 대한 설명을 짧은 설명으로 끝내버린 것이다.
사실 나는 위 두 개념이 프론트에서 가장 중요한 부분이라고 생각한다.
(이거에 대한 글도 따로 포스팅했을 정도)
그래서 팀원들도 이거에 대해 공부해줬으면 했는데,
프로젝트 시작일이 진짜 일주일??도 안 남은 거임..
그래서 이렇게 짧게밖에 설명할 수밖에 없었음,,너무 아쉽다.
클린 아키텍처와 MVVM 패턴은 저렇게 한줄 요약이 불가능할 정도로 많은 내용을 담고 있는데 ㅜ-ㅜ 아쉽,,,
담에,,, 졸프 시작 전에 시간 남으면 더 공부해보면 좋다고 재공지해야지.
플러터가 아닌 다른 툴 사용하시는 분들도 마찬가지로 클린 아키텍처, MVVM 패턴 검색해보시면 될 거 같다!
그리고 시간이 되면 하고싶었던 거는,,,
폴더링할 때
constants, ui이런 네이밍도 같이 정하고 싶었다.
내가 덧붙인 링크 보면은 이것도 팀마다 뭔가 네이밍이 비슷하지만 다르다.
나는 빠른 프로젝트 시작을 위해 위와 같이 내 맘대로 정했지만ㅋ
다음에 기회가 된다면
저희는 뭐가 좋을까요? 하고 같이 얘기해보는 것도 재밌을 거 같다.ㅎㅎ