프로젝트를 시작하기에 앞서 여러가지 세팅할 것들을 세팅했다.
앱 이름
우선 프로젝트를 시작하려면 프로젝트의 이름을 설정해야 파일도 만들고, Github Repository도 만들수 있어서 앱 이름부터 결정하게 되었다. Solved.ac 와의 연관성과 뜻을 고려하여 Solver 라는 간단한 앱 이름을 우선 설정했다.
앱 디자인 및 기획
앱 디자인의 경우 최대한 기본 컴포넌트를 활용하여 만들것이고, 어떠한 정보를 표시할지, 어떻게 화면에 표시할지는 개인프로젝트의 장점(?)을 살려 프로젝트 생성후 빠르게 기획할 예정이라 우선 프로젝트부터 생성하였다.
커밋 룰
레포지토리는 public으로 할 예정이고, 커밋은 gitmoji를 활용하여 영어로 작성하기로 했다. gitmoji의 경우 아래의 룰을 따르기로 했다.
브랜치
브랜치의 경우 main, develop 두 브랜치를 만들어 프로젝트를 진행하기로 했다. main 브랜치는 배포하는 브랜치이고, 나머지 개발은 develop 브랜치를 만들어 그곳에서 작성하기로 했다. 추후 개발이 어느정도 진행된 후 큰 기능을 추가할 일이 생긴다면 gitflow를 참고해 기능별 브랜치를 만들 예정이다.
앱의 기본 설계
소프트웨어의 기본 구조를 결정하고 시작해야겠다는 생각이 들었다. 세부적인 것들은 추후 리팩토링을 통해 보완이 가능하지만 기초적인 틀을 만들어 놓지 않는다면 코드가 스파게티처럼 이리저리 얽히게 된다. 다소 시간이 걸리더라도 공부도 할겸 이부분은 확실하게 짚고 넘어가야 겠다고 생각했다.
Android 문서에서 앱 아키텍처 가이드가 한글로 잘 설명이 되어있어서 참고해보았다.
현재 내가 생각한 앱의 상황은 아래와 같다. 화면을 표시하는 UI와 UI를 표시하기 위한 Data는 최소한의 구성요소이다. 그리고 이 데이터를 저장하는 곳은 한군데가 되어야 하고, 데이터 흐름은 단방향이 되는 것이 좋다고 한다.
문제점은 다음과 같이 정리되었다.
1. API를 통해 가져온 json파일을 파싱해서 Data에 넣는 과정을 어떻게 할 것인가?
2. 최신 데이터를 어떻게 보존할 것인가?
2. Data에서 UI로 데이터를 전달하여 표기하는 과정을 어떻게 할 것인가?
API를 통해 가져온 json파일을 파싱해서 Data에 넣는 과정을 어떻게 할 것인가?
이부분은 앱 아키텍처 가이드의 아래 문단을 보고 네트워크에서 데이터를 로드하는 클래스를 만들어야 겠다고 생각했다.
이것을 어떻게 구현할 것인가의 문제는 두가지정도 선택지가 있었다. Swift에서 제공하는 URLSession으로 구현할 것인지, Alamofire 라이브러리를 사용할 것인지 선택해야 했는데, 이 프로젝트에서는 URLSession으로 구현하기로 했다.
캐싱의 경우 데이터가 바뀔 가능성이 충분히 있어 유저의 프로필 이미지를 저장하는게 아닌 이상 구현하지 않기로 했다.
최신 데이터를 어떻게 보존할 것인가?
가져온 데이터를 앱에 보관해야 한다는 생각이 들었다. 왜냐하면 데이터를 가져오지 못할 경우 기존의 데이터를 표시해줘야 하기 때문이다. 큰 데이터들이 아니기 때문에 앱을 처음 시작하게 되거나, Background에서 돌아왔을 때 최신데이터를 가져오는 것이 좋다고 생각했기 때문에 데이터를 만약 못가져왔을 경우 기존의 데이터를 가지고 있어야 한다.
고려했던 것은 UserDefaults, CoreData, SwiftData인데 문제에 대한 디테일 정보등 다양한 정보가 있기 때문에 Key값으로 저장하는 UserDefaults로는 무리가 있을 것이라 생각했고, SwiftData를 통해 저장을 구현하기로 했다.
Data에서 UI로 데이터를 전달하여 표기하는 과정을 어떻게 할 것인가?
가장 고민을 많이했던 부분인데, 왜냐하면 아키텍처와 관련된 부분이었기 때문이다. MVC, MVP, MVVM, MVVM + Clean Architecture 등...
여러가지 검색을 해보다가 아래와 같은 MVVM쓰지마세요! 라는 좋은 영상도 있었고,
Clean Architecture에 대한 글도 보았다.
이렇게 찾아보면서 느꼈던 점은... 간단한 프로젝트에서는 오버엔지니어링이 아닐까? 그냥 일단 만들어 볼까? 하고 생각했지만 이 앱을 개발하게된 계기중 하나가 공부의 개념이었기 때문에 부족하긴 하지만 최대한 아키텍처를 적용해서 프로젝트를 만들어보기로 했다.
많은 고민 끝에 UI, Domain, Data Layer을 가진 Clean Architecture를 최대한 반영하여 프로젝트를 만들어보기로 했다.
'→ Solver' 카테고리의 다른 글
[Project-Solver] 프로젝트 1차 배포 (v1.0.1) (0) | 2024.05.01 |
---|---|
[Project-Solver] SwiftData 문제 기록 (0) | 2024.04.25 |
[Project-Solver] 앱 기본 설계 (2) | 2024.04.22 |
[Project-Solver] 아키텍처 설계 (0) | 2024.04.21 |
[Project-Solver] 프로젝트 시작 (0) | 2024.04.17 |