Netflix
Source
https://github.com/doyeonjeong/Netflix-iOS
![1](https://private-user-images.githubusercontent.com/108422901/266779466-0ffd8c95-bec4-446e-8691-abc3702342e5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyNDM3MjAsIm5iZiI6MTcyMjI0MzQyMCwicGF0aCI6Ii8xMDg0MjI5MDEvMjY2Nzc5NDY2LTBmZmQ4Yzk1LWJlYzQtNDQ2ZS04NjkxLWFiYzM3MDIzNDJlNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwODU3MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1hNmYyNGYxOTU3ZGI1ZWIyODI5MzU5ODFlM2Y3NjI3MWQwNzlmNzliMjkzYTRhOWUwMzY4OTczMjRlZjEwMzA0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.RasqUHH_LhwqcBItVbCFGoEgu-DzKVkb3T7Qm2Vu9dc)
![2](https://private-user-images.githubusercontent.com/108422901/266779468-aac0a37f-a103-44fc-8e35-30dafd0993d7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyNDM3MjAsIm5iZiI6MTcyMjI0MzQyMCwicGF0aCI6Ii8xMDg0MjI5MDEvMjY2Nzc5NDY4LWFhYzBhMzdmLWExMDMtNDRmYy04ZTM1LTMwZGFmZDA5OTNkNy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwODU3MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMmQwNjE1MzUwNGViMTY0MTk3YzYzNmU1NzEyYzhjNDkzY2M0NTE0YjQ4MGE2YTE0ODFjMWVhZTQzZWE1ZWViJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.-suvlB2oXTDUa-nM-MhI6yrcBHfaMFhadprvAnD-jn8)
![Transition 구현](https://private-user-images.githubusercontent.com/108422901/266779797-2512a73e-edb2-4aaf-9a25-d35151d235ee.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyNDM3MjAsIm5iZiI6MTcyMjI0MzQyMCwicGF0aCI6Ii8xMDg0MjI5MDEvMjY2Nzc5Nzk3LTI1MTJhNzNlLWVkYjItNGFhZi05YTI1LWQzNTE1MWQyMzVlZS5naWY_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyOVQwODU3MDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02N2M3YmFiZDQzODdlNjE0NDM0NzVhYmUzMWViNWU4MTQ0N2MyZWE0MmFkMzRjY2RhOTJjOTgyMjkxMzY1Y2Y0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.4742Jh7hBsQsnQZyCdrOjDLp0GWeGJBV2MX6dP07opI)
선배 개발자인 Arex가 Netflix Clone을 강의 없이
Compositional Layout, Diffable DataSource, MVVM을 적용하여 구현해보라는 3주짜리 미션을 주셔서 진행해본 개인 프로젝트입니다.
진행했던 내용을 순차적으로 기록하기 위해 주차별 PR을 완료한 상태입니다.
코드리뷰 후 Merge 하기로 했습니다.
- Swift, iOS
- UIKit
- KMDB API
- Lottie
- Postman
- UICompositionalLayout, UICollectionViewDiffableDataSourse, NSDiffableDataSourceSnapshot
- NSCache, DispatchQueue, async/await, Task, URLSession
- NSLayoutConstraint를 사용한 오토 레이아웃
- Lazy 초기화
- private 메서드 및 extension 로직 분리
- CompositionalLayout과 DiffableDataSourse를 사용한 UI 구현
async/await
문법은 비동기 작업을 도우나 그 자체로는 새로운 스레드를 생성하지 않음Task { await }
구문으로 비동기 작업을 백그라운드에 요청하여 멀티스레딩 상황을 관리함DiffableDataSource
를 이용하여 동적인 UI 업데이트가 가능함DispatchQueue
를 이용하여 메인 스레드와 백그라운드 스레드를 적절한 시점에 사용NSCache
를 이용하여 불러온 이미지 데이터의 캐시를 저장하면 빠른 로딩이 가능함URLSession.dataTask
가 기본적으로httpMethod
의 GET 요청을 한다는 것을 학습함