Unsplash API를 활용하여 사진을 검색하고 좋아요 할 수 있는 앱
-
기간 :
2024.07.22 ~ 2024.08.05
(약 2주) -
개발 인원 :
iOS 1명
-
기술 스택 및 라이브러리 :
UIKit
Network
Swift Concurrency
SnapKit
Then
Alamofire
Kingfisher
Realm
DGCharts
Toast
-
프로젝트 주요 기능
-
토픽별 트렌드 사진 화면
-
당겨서 새로고침하여 랜덤 토픽 업데이트
-
Unsplash 사이트에서의 사진 좋아요 수 정보 제공
-
-
랜덤 사진 화면
-
사진 작가 프로필 및 게시일 정보 제공
-
사진 좋아요 기능
-
-
사진 검색 화면
-
색감 필터 및 관련순 / 최신순 정렬 기능
-
Unsplash 사이트에서의 사진 좋아요 수 정보 제공
-
사진 좋아요 기능
-
-
좋아요 리스트 화면
- 최신순 / 과거순 정렬 기능
-
사진 상세 정보 화면
-
사진 작가 프로필 및 게시일 / 사진 크기, 조회수, 다운로드 수 정보 제공
-
30일 간 조회 수 및 다운로드 수에 대한 차트 제공
-
사진 좋아요 기능
-
-
토픽별 트렌드 화면 | 랜덤 사진 화면 | 검색 화면 | 좋아요 리스트 화면 | 상세 정보 화면 |
---|---|---|---|---|
-
Repository 패턴을 사용함으로써
외부와 로컬 데이터소스 접근 작업 추상화
-
Service 패턴을 사용함으로써 Repository에서 받아온
데이터들의 조합 및 가공 작업 추상화
-
Custom Observable과 Input-Output 패턴을 사용하여
VC와 VM간의 데이터 바인딩
구현
-
이미지를
FileManager
를 활용해Documents
폴더에 저장- Photo ID를 파일 이름으로 설정
-
Photo ID를 Primary Key로 지정하여 저장
- Photo ID를 조회하여 Documents 폴더에서 이미지를 가져옴
-
싱글턴
패턴과라우터
패턴을 사용하여 네트워크 작업과 API Request 추상화 -
네트워크 작업 메서드에 제네릭 적용
-
Swift Concurrency와 Result 타입을 적용하여 가독성 개선
-
NWPathMonitor를 통해 네트워크 연결 상태를 모니터링하여 네트워크 재연결 여부 판단
- API 통신 재요청 이벤트를 VieModel Input으로 넣어주는 completionHandler 등록
- 좋아요 Array를
Set
으로 변환하여 시간복잡도를O(N)
으로 개선
- UIWindowScene을 활용하여 rootViewController을 교체하는 방식으로 구현
-
ViewController마다 NWPathMonitor 객체를 따로따로 만들어서 관리하였고, 이렇게 되면 엄청난 리소스 낭비 같다는 생각을 하게 됨
- SceneDelegate에서 NWPathMonitor 객체를 하나만 만들어 관리하고, ViewController들에서 네트워크 상태 변화를 관찰하게 하는 것이 좋을 것 같다고 생각
-
이번 프로젝트에서는 Result 타입의 failure에서 error.localizedDescription를 그저 출력하기만 함
-
각각의 API 엔드포인트에서 반환하는 에러 상태 코드에 대한 커스텀 에러 타입을 지정하여 관리하는 방법을 고민해봐야겠다는 생각