유추(YouChu) - 유튜브 추천 서비스 애플리케이션
제작 인원: 3명 (서버, 머신러닝, 클라이언트(IOS 본인))
제작 기간: 4월 ~ 5월 말
사용 기술: UIKit, Alamofire
앱 소개:
유추는 사용자의 유튜브 구독 목록을 기반으로 협업 필터링(Collaborative Filtering)을 통해 맞춤형 채널들을 추천해줍니다.
- 맞춤으로 추천되는 채널을 살펴보세요
- 랜덤으로 추천되는 채널들을 탐색할 수 있습니다
- 카테고리 별 랭킹(구독자 순)을 확인해 보세요.
앱 소개 영상
프로젝트 개요
대학교 동기 두 명과 함께 진행한 졸업 프로젝트이다. 이전에 IOS 앱을 SwiftUI로 만들었기 때문에 이번에는 UIKit을 사용해 보았다. 팀원들은 각각 추천 모델 제작(머신러닝), DB 설계 및 Rest API 서버 제작(서버), IOS 애플리케이션(클라이언트) 세 개의 파트로 나누어 진행하였다.
프로젝트 상세 내용
1. 전체 프로젝트
유추는 협업 필터링 (Collaborative filtering)을 기반으로 사용자의 유튜브 구독 목록을 통하여 유저에게 알맞은 유튜브 채널을 추천해준다. 초반 모델 구성을 위한 구독 목록 데이터로 Youtube Data api v3를 사용하여 임의의 1만 명의 유저들의 데이터를 수집하여 사용하였다.
유저가 IOS 앱에 구글 아이디를 통해 로그인하게 되면 해당 유저의 유튜브 구독 목록을 불러온다. 서버에서는 이를 저장하고 추천 모델 서버에 해당 데이터를 넘겨 다양한 추천 리스트를 얻는다. 해당 채널 추천 목록들은 클라이언트를 통해 유저에게 제공된다. 프로젝트에 대한 상세 설명은 첨부파일의 요구사항 명세서와 상세 설계서를 참고하면 된다.
2. 클라이언트 주요 기능
- 채널 상세 페이지의 Sticky Header 구현, 이외의 Custom View들
위의 3번째 스크린숏 채널 상세페이지를 보면 목록을 위로 스크롤하면 상단의 채널 정보가 사라지고 채널 제목만 navigation bar에 남는 것을 확인할 수 있다. 이는 ScrollviewDelegate에서 위치 값을 계산하여 이에 맞게 상단의 뷰들을 사라지게 하였다. 이외에도 랜덤 페이지의 Custom CardView와 그 안의 Tag 목록을 CollectionView로 구현하였다. 랭킹 페이지와 같이 RestApi 통신이 필요한 리스트의 경우 모두 Paging 기능을 추가하였다.
- 구글, 애플 로그인 구현
GoogleSignIn과 AppleLogin을 사용하여 구현하였다. 처음에는 구글 로그인만 구현하려고 하였으나 애플 정책에 의해 애플 로그인을 필수적으로 구현해야 했다.
- 토큰을 활용한 Rest API 통신, Interceptor 사용
Alamofire를 사용하여 Rest API통신을 하였으며 로그인 시에는 Bearer Token을 사용하였다. Bearer Token을 키체인에 저장하고 유효 기간이 끝나면 서버에 다시 요청하는 방식으로 진행하였으며 이때 확인 작업 이후 다시 요청을 해야 하므로 비동기가 꼬리에 꼬리를 물듯이 이어졌다. 이를 Interceptor를 사용하여 깔끔하게 해결하였다. Interceptor는 가로채다는 뜻 그대로 요청을 보내기 전 가로채어 추가적인 작업을 진행할 수 있고 요청에 대한 응답을 미리 정해놓아 토큰이 만료되면 직관적으로 서버에 재 요청을 할 수 있었다.
후기
처음으로 UIKit을 사용하여 만들어본 프로젝트였다. 스토리보드를 사용할 줄 몰라서 코드로만 제작하였다. 처음에 MVVM패턴을 기반으로 제작하려고 했지만 RxSwift 없이 MVVM을 구현하기 힘들어 MVC패턴으로 제작하였지만 그마저 완벽하지 못하여 아쉬움이 남았다. 이 애플리케이션 또한 앱 스토어에 출시하려고 하였으나 전부 reject 당하였다.. (4.2 기능 부족으로). 리젝 당한 이유를 자세히 얘기하자면 유추의 해당 기능들은 웹앱으로도 충분하며 IOS 앱만의 기능이 부족하다는 것이었다. 이후에 졸업 프로젝트에 사용할 사용자 설문 조사 통계를 위하여 앱스토어 출시 대신 TestFlight 링크를 지인들과 커뮤니티에 제공하는 것으로 마무리하였다.
처음으로 Rest API 통신을 하는 애플리케이션을 예제가 아닌 실제 사용할 서비스를 목적으로 만들어 보았다. 아무래도 서비스 애플리케이션이다 보니 외적으로 나름대로 UI도 최대한 신경 써서 제작해보았다. 현재 추천 리스트가 개인화 추천 리스트, 구독 목록 중 하나의 채널에 대한 추천 리스트 두 가지밖에 없는데 좀 더 다양한 추천 리스트를 제공하였으면 좋지 않았을까 싶다. 그래도 나름대로 만족스러운 프로젝트였다.
'프로젝트 > IOS 앱' 카테고리의 다른 글
[IOS 앱] Hodie - 시간계획표 IOS 앱 (0) | 2021.08.14 |
---|