TIL(Today I Learned)

3월 22일(월)

학습내용

  • Kahoot
    • UIView에서 Core Graphics 등을 통해 사용자 정의 인터페이스를 구현할 수 있도록 제공하는 메서드는 draw(rect:)이다.
    • UIView의 draw(rect:) 메서드는 뷰가 새로 그려질때마다 호출된다.
    • 오토레이아웃의 제약은 상대치 관계로 설정하는 것보다 절대치로 설정하는 것이 좋다. 상대적으로 제약을 설정하면 레이아웃 엔진이 상대적 제약에 대한 값을 구하기 위해서 계산을 해야하므로 성능상 안좋을 수 있다.
    • 레이아웃 관련 메서드 중, 뷰의 갱신주기와 무관하게 layoutSubviews를 발동시키는 메서드는 layoutIfNeeded이다.
    • 로컬 노티피케이션 등록을 위해 사용하는 프레임워크는 User Notification이다. UNNotifications는 User Notification 프레임워크의 클래스이다.
    • 각각의 노티피케이션의 제목과 내용이 같아도 고유의 ID를 활용하여 노티피케이션을 구분하고 관리할 수 있다.
    • 애플의 원격 알림을 지원하는 서비스 이름은 APNs이다.
    • APNs를 통해 전달하는 원격 알림의 JSON 객체의 “aps” 객체 외부의 key-value는 NotificationContent의 userInfo 프로퍼티로 실려 들어온다.
  • OAuth
    • 접근 권한을 부여할 수 있는 공통적인 수단으로서, 접근 위임을 위한 개방형 표준이라고 한다.
    • Authentication은 사용자를 인증하는 것이고, Authorization은 서비스 제공자가 특정 권한을 허가하는 것이다.
    • 사용자는 실제 사용자, 소비자는 3rd party 서비스를 제공하는 회사, 서비스 제공자는 구글, 페이스북 등 사용자와 소비자에게 서비스를 제공하는 회사이다.
    • 요청토큰은 Consumer가 Service Provider에게 접근 권한을 인증받기 위해 사용되며, 접근 토큰은 인증 후 Consumer가 Service Provider의 자원에 접근하기 위해 사용된다.
  • 디스크 캐시 및 Kingfisher 코드 분석
    • Alamofire는 URLCache를 이용하여 캐시를 한다.
    • Kingfisher는 FileManager를 이용해 캐시를 저장할 경로를 생성하고, 해당 경로에 Data write하여 캐시를 한다.
    • Kingfisher는 이미지를 메모리와 디스크에 캐싱한다.
    • 디스크 저장소의 기본 저장 기한은 7일이다.
    • 디스크 캐시의 기본 경로는 FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)의 “com.onevcat.Kingfisher.ImageCache.configName”이다.
    • 파일이름을 해싱하여 이를 key로 사용하여 이미지를 캐싱할 수 있다.

문제점/고민한점

  1. Constraint, Layout, Display의 차이는?
  2. Hash란? 로컬에 캐시를 저장할때 Hash를 사용하는 이유는?

해결방법

  1. Constraint은 수식이며, 한개 또는 두개 View의 특성 간의 관계를 의미한다. Layout은 뷰들의 위치와 크기를 결정하는 것이다. 즉, 뷰가 차지할 좌표를 결정하는 것이다. Display는 뷰를 화면에 나타내는 것이다.
  2. Hash는 Hash Function과 Hash Table을 이용하여 데이터를 저장하고 보다 더 빠르게 접근하기 위한 방법이다. Hash Table은 Key-Value 형태로 구성되어있으며, 각각의 Key에 대응하는 buckets이 존재한다. 이 buckets에 데이터를 저장한다. Key는 Hash Function으로 생성된다. Hash Function는 어떤 데이터를 고정된 사이즈의 값으로 변환해주는 함수이다. 즉, 데이터를 저장하고 데이터의 인덱싱을 Hash Function가 반환해주는 값으로 하는 것을 Hash라고 한다. 검색, 삽입, 삭제가 Array에 비해 더 빠르기 때문에 캐시를 할때 Hash를 사용한다.

참고

https://en.wikipedia.org/wiki/OAuth

https://d2.naver.com/helloworld/24942

https://en.wikipedia.org/wiki/Hash_function

https://en.wikipedia.org/wiki/Hash_table

https://namu.wiki/w/해시?from=해쉬