앱 설명




- 회원 가입, 상품 목록 보기, 세부 화면, 주문 기능
경험 한 것
- Dynamic framework로 네트워크 코드를 분리하여 적용해 보았습니다.
- 연결성에 따라 사용자가 인지할 수 있도록 표현했습니다.
- 스크롤 뷰를 통해 이미지 페이지네이션을 구현하였습니다.
- 다크모드 대응을 시도해보았습니다.
고민한 것
- 네트워크 통신시, 이미지가 많아 이 부분에 대해서 어떻게 해야 데이터 통신량을 줄일 수 있을지 고민했습니다. 이에 이미지 캐시를 사용하여, 디스크에 이미지가 있을 경우에는 바로 로드하고, 그렇지 않을 경우 네트워크 요청을 하는 방식으로 구현하였습니다.
- 세부화면에 들어갔을 때, 상품의 세부 이미지를 표현해야 합니다. 이때, 표현되는 이미지의 순서가 존재하는데, 네트워크 요청의 특성상 비동기로 진행되기 때문에, 요청 순서와 응답 순서가 달라지는 문제가 발생하여 표현되는 이미지의 순서가 보장되지 않는다는 문제가 발생했습니다. 이러한 부분에 대해 DispatchGroup을 사용하여 요청 순서에 맞는 이미지가 모두 다운로드 된 시점에 콜백함수를 호출하여 순서를 보장하였습니다.
아쉬운 점과 배운 점
- Cache를 저장하는데 있어서 모든 이미지를 저장합니다. 하지만 FileCache를 할 때, 특정한 정책이 있거나, 사용자로부터 캐시메모리를 삭제할 수 있어야 합니다. 해당 부분을 적용하지 못해 아쉽습니다. 또한 메모리 캐시 역시 사용하지 않아 불완전한 캐시 입니다.
- DispatchGroup을 사용하여 이미지의 순서를 보장하였으나, 만약 세부 이미지가 많은 경우, 네트워크 속도가 느린 경우, 사용자는 모든 이미지가 받아지기 전까지 어떠한 화면도 볼 수 없게 됩니다. 이러한 점은 UX에 있어서 치명적일 수 있다고 생각합니다. 이에 해당 이미지의 개수만큼의 빈 이미지를 만들어두고, 순서 정보를 바탕으로 그 순서에 이미지를 대체하는 방식으로 구현한다면 보다 UX 측면에서 개선할 수 있을 것 같습니다.
- 모든 UI 요소를 스토리보드를 활용하여 구현했습니다. 추후 협업에 있어서 같은 스토리보드를 수정할 경우 협업이 어렵다는 정보를 들었습니다. 추후 프로젝트에서는 코드로 모든 화면을 구현하는 도전을 해보고 싶습니다.
- 최신 기술인
Diffable DataSource
, compositionalDataSource
를 사용해보고 싶습니다.