앱 설명




경험한 것
- CoreML을 도입하여 물체 인식에 도전해보았습니다.
- Repository 패턴을 사용하여, 상황에 따라 Network 통신과 Persistence 요청을 구분하는 객체를 만들어 사용해보았습니다.
UICompositionalLayout
, DiffableDataSource
를 사용해보았습니다.
- VIPER 구조를 도입해보았습니다.
고민한 것
- API가 복잡하여, 사용자가 데이터를 받아보는데 시간이 오래걸렸습니다. 따라서 Repository에서, 네트워크 통신의 결과를 Coredata에 저장하고, 해당 데이터가 있을 경우 이 데이터를 보여주는 방식으로 개선하여 반응성을 향상시켰습니다.
- VIPER 구조를 사용하면서 Scene 단위로 폴더구조를 나누어서 사용하였습니다. 각각의 화면 단위에서 사용하는 파일을 나누는 것이 보다 협업에 있어서 직관적일 것이라 생각했습니다.
- 실제 스타벅스 앱의 상품 세부화면을 동일하게 따라하는 것에 집중했습니다. 해당 화면의 경우, NavigationBar가 clear 상태였다가, 화면을 내리는 경우 Bar가 재등장하게 되는데, 이러한 부분을 만족시키기 위해서 동적으로 화면이 이동한 정도를 측정하여 천천히 등장하도록 하였습니다.
아쉬운 점과 배운점
- Repository를 사용하여 local에 응답을 저장해두어 반응성을 향상시켰지만, 만약 새로운 데이터가 들어온다면 이에 대해서 앱은 변경되었는지 파악하는 것이 어렵다는 문제가 발생했습니다. 데이터 베이스에서 계속해서 데이터가 변화되는 경우, 이러한 방식을 쓰는 것이 좋지 않다는 생각이 들었습니다. 서버의 요청을 바탕으로 변경사항이 발생했는지를 기준으로 데이터를 저장하는 로직을 짰어야 했는데, 그러지 못한 것이 아쉽습니다.
- Scene 단위로 폴더를 나누었을 때, 폴더 구조를 보았을 때는 굉장히 직관적이었지만, 비슷한 화면을 보여주기 위해 사용하는 Usecase가 동일할 경우, 해당 파일을 어느곳에 위치해야 할지 문제가 생겼습니다. 이런 부분에 대해 계속해서 코드를 복사하여 파일을 새로만들었습니다. 이후 클린 아키텍쳐에 대해 알게되었고, Layer 별로 폴더구조를 가져가는 것이 코드의 중복성을 해결할 수 있는 방법이라 생각했습니다.
구체적인 세부사항들