[ios]이미지 캐싱처리 개념

감자·2020년 10월 13일
1

ios

목록 보기
9/9
post-custom-banner

why

->
사이드 프로젝트를 진행하면서 이미지를 매번 서버로부터 불러올 필요가 없음을 생각하고 이를 위한 방법으로 예전에 사용한 SDWebImage를 사용할까 하다가 그냥 Kingfisher라는 새로운 라이브러리를 사용하기로 결정하였다. 그리고 캐싱과 관련된 부족한 지식을 정리하려고한다.

Kingfiher VS SDWebImage

  • 킹피셔가 나오기전에는 sd가 많이 사용되었지만 킹피셔가 나오면서 많은 개발자들이 sd에서 이동하였다.
  • kingFisher -> swift / sdWebImage -> objective C 로 되어있기 때문에 swift 네이티브로 구현되어 있는 앱은 사용자에겐 kingFisher가 더 빠른 체감을 느끼게 한다.
  • 사용자들이 kingFisher를 채용한 가장 큰 이유는 캐싱된 이미지들을 삭제하는 로직자체에서 사이드이슈가 많이 발생해서 kingFisher를 더 많이 사용한다.

what

->

1. 캐싱?

캐싱은 영어 단어 뜻대로 저장하는 것이다. 좀 더 자세하게 설명하자면 오래걸리는 작업을 저장해두었다가 동일한 작업을 수행해야할 때 저장된 결과를 가져와서 사용하는 것을 의미한다. 캐싱을 활용하는 사례는 아래와 같이 정리할 수 있다. (이건 정확한 내용이 아닌 내가 실제 작업을 하면서 이 부분은 캐싱을 활용하면 좋겟다고 생각한 부분들이다.)

  • 이미지 캐싱
  • 웹페이지 접속할 때 도메인으로 접속할 경우(기본적으로 웹페이지에 접속할 때 도메인을 통해 접속을 하는데 이 도메인만을 이용해서 원하는 곳에 접급할 수는 없다. 왜냐면 도메인은 접속하고자하는 곳에 IP를 알려주기 위한 키값에 불과하다. 즉 도메인으로 접속을 하면 IP값을 반환해주고 반환된 IP값을 이용해서 페이지에 접속하게되는 것이다. 이때 IP를 캐싱해두고 다음에 동일한 IP에 접속할 일이 있다면 저장된 IP를 사용하면 좀 더 빠르게 작업을 할 수 있다.)

이제 본격적으로 이미지 캐싱에 대해서 정리를 해보겠다. 이미지 캐싱은 한번 다운로드된 이미지를 메모리 캐시/ 디스크 캐시에 저장해두었다가 같은 이미지를 불러올 일이 생기면 내부적으로 해당 이미지가 존재하는지 확인하고 있다면 해당 이미지를 반환해주는 방식으로 동작된다.

ios에서 이러한 이미지 캐싱 처리를 할 때는 대표적으로 NSCache와 FileManager라는 2개의 클래스 이용한다. 그리고 KingFisher는 이 2개의 클래스를 이용해서 좀 더 쉽게 이미지 캐싱을 할 수 있도록 만들어진 라이브러리이다.

메모리 캐싱

  • ios에서 자체적으로 재공해주는 기능으로 기기를 끄면 캐싱된 내용이 사라진다.
  • NSCache를 이용해서 구현할 수 있다.
  • 처리속도가 빠르지만 저장공간이 작다.

디스크 캐싱

  • 캐싱할 데이터를 기기 내부에 아카이빙하는 것 방법으로써 기기를 껏다 켜도 저장되어있다.
  • 앱을 삭제할 때 캐싱된 데이터도 삭제하게 만들수도 있고 그렇지 않고 계속 남아있게 만들 수 있다.
  • 저장공간은 상대적으로 크지만 파일 입출력으로 인해 처리 속도가 메모리 캐싱 방식보다는 느리다.(그래도 매번 네트워크를 통해 파일을 읽어오는 것 보다는 훨씬 빠르다.)

NSCache(메모리 캐싱 방식)

Apple에서 제공되는 기능으로 캐싱과 관련되 작업을 할 때 사용된다. 이 클래스는 데이터를 key-Value로 저장하는 컬렉션으로 캐싱된 데이터가 너무 많은 메모리를 사용하면 시스템에서 자동으로 캐시된 메모리를 삭제해준다.

FileManager(디스크 캐싱 방식)

캐싱된 데이터가 자체 디렉토리를 만들어서 아카이빙 되도록 해준다.

finish

->
이 후에 실제 프로젝트에서 이미지 캐싱을 하는 과정에 대해서 정리해서 작성할 예정이다.

post-custom-banner

0개의 댓글