->
사이드 프로젝트를 진행하면서 이미지를 매번 서버로부터 불러올 필요가 없음을 생각하고 이를 위한 방법으로 예전에 사용한 SDWebImage를 사용할까 하다가 그냥 Kingfisher라는 새로운 라이브러리를 사용하기로 결정하였다. 그리고 캐싱과 관련된 부족한 지식을 정리하려고한다.
->
캐싱은 영어 단어 뜻대로 저장하는 것이다. 좀 더 자세하게 설명하자면 오래걸리는 작업을 저장해두었다가 동일한 작업을 수행해야할 때 저장된 결과를 가져와서 사용하는 것을 의미한다. 캐싱을 활용하는 사례는 아래와 같이 정리할 수 있다. (이건 정확한 내용이 아닌 내가 실제 작업을 하면서 이 부분은 캐싱을 활용하면 좋겟다고 생각한 부분들이다.)
- 이미지 캐싱
- 웹페이지 접속할 때 도메인으로 접속할 경우(기본적으로 웹페이지에 접속할 때 도메인을 통해 접속을 하는데 이 도메인만을 이용해서 원하는 곳에 접급할 수는 없다. 왜냐면 도메인은 접속하고자하는 곳에 IP를 알려주기 위한 키값에 불과하다. 즉 도메인으로 접속을 하면 IP값을 반환해주고 반환된 IP값을 이용해서 페이지에 접속하게되는 것이다. 이때 IP를 캐싱해두고 다음에 동일한 IP에 접속할 일이 있다면 저장된 IP를 사용하면 좀 더 빠르게 작업을 할 수 있다.)
이제 본격적으로 이미지 캐싱에 대해서 정리를 해보겠다. 이미지 캐싱은 한번 다운로드된 이미지를 메모리 캐시/ 디스크 캐시에 저장해두었다가 같은 이미지를 불러올 일이 생기면 내부적으로 해당 이미지가 존재하는지 확인하고 있다면 해당 이미지를 반환해주는 방식으로 동작된다.
ios에서 이러한 이미지 캐싱 처리를 할 때는 대표적으로 NSCache와 FileManager라는 2개의 클래스 이용한다. 그리고 KingFisher는 이 2개의 클래스를 이용해서 좀 더 쉽게 이미지 캐싱을 할 수 있도록 만들어진 라이브러리이다.
- ios에서 자체적으로 재공해주는 기능으로 기기를 끄면 캐싱된 내용이 사라진다.
- NSCache를 이용해서 구현할 수 있다.
- 처리속도가 빠르지만 저장공간이 작다.
- 캐싱할 데이터를 기기 내부에 아카이빙하는 것 방법으로써 기기를 껏다 켜도 저장되어있다.
- 앱을 삭제할 때 캐싱된 데이터도 삭제하게 만들수도 있고 그렇지 않고 계속 남아있게 만들 수 있다.
- 저장공간은 상대적으로 크지만 파일 입출력으로 인해 처리 속도가 메모리 캐싱 방식보다는 느리다.(그래도 매번 네트워크를 통해 파일을 읽어오는 것 보다는 훨씬 빠르다.)
Apple에서 제공되는 기능으로 캐싱과 관련되 작업을 할 때 사용된다. 이 클래스는 데이터를 key-Value로 저장하는 컬렉션으로 캐싱된 데이터가 너무 많은 메모리를 사용하면 시스템에서 자동으로 캐시된 메모리를 삭제해준다.
캐싱된 데이터가 자체 디렉토리를 만들어서 아카이빙 되도록 해준다.
->
이 후에 실제 프로젝트에서 이미지 캐싱을 하는 과정에 대해서 정리해서 작성할 예정이다.