Release Version 1.0.0
CachingKit v1.0.0
고성능 이미지 캐싱을 위한 Swift Package 라이브러리 첫 번째 릴리스입니다.
✨ 주요 기능
2단계 하이브리드 캐싱
- 메모리 캐시: NSCache 기반 초고속 메모리 캐싱
- 디스크 캐시: FileManager 기반 영구 저장
- 메모리 부족 시 자동 캐시 정리
지능형 캐시 관리
- LRU+LFU 하이브리드 제거 정책: 최근 사용(70%) + 사용 빈도(30%) 가중치 기반
- ETag 기반 HTTP 재검증: 304 Not Modified로 불필요한 다운로드 방지
- TTL(Time To Live): 만료 시간 기반 자동 캐시 무효화 (기본 7일)
메모리 최적화
- 이미지 다운샘플링: CGImageSource를 이용한 효율적 리사이징
- 메모리 워닝 감지 및 자동 정리
- 물리 메모리의 25% 이내 자동 제한 (최대 150MB)
유연한 저장소 설정
// 기본 캐시 디렉토리
StoragePathProvider.default
// App Groups (위젯, 익스텐션과 공유)
StoragePathProvider.appGroups(identifier: "group.com.yourapp.shared")
// 커스텀 경로
StoragePathProvider.custom(url: customURL)
UIImageView Extension
imageView.ck_setImage(
with: url,
placeholder: placeholderImage,
targetSize: CGSize(width: 300, height: 300),
cacheStrategy: .both
)
📦 설치 방법
Swift Package Manager
Package.swift
dependencies: [
.package(url: "https://github.com/yourusername/CachingKit.git", from: "1.0.0")
]
Xcode
1. File → Add Package Dependencies
2. Repository URL 입력
3. Version: 1.0.0 선택
🚀 빠른 시작
기본 사용
import CachingKit
// 기본 설정으로 사용
let image = await CachingKit.shared.loadImage(
url: imageURL,
targetSize: CGSize(width: 300, height: 300)
)
커스텀 설정
let config = CacheConfiguration(
storageProvider: .appGroups(identifier: "group.com.yourapp.shared"),
memoryLimit: 100 * 1024 * 1024, // 100MB
diskLimit: 200 * 1024 * 1024, // 200MB
ttl: 3 * 24 * 60 * 60 // 3일
)
let cachingKit = CachingKit(configuration: config)
let image = await cachingKit.loadImage(
url: imageURL,
targetSize: CGSize(width: 300, height: 300),
cacheStrategy: .both // .memoryOnly, .diskOnly, .both
)
UIImageView Extension
import CachingKit
imageView.ck_setImage(
with: imageURL,
placeholder: UIImage(named: "placeholder"),
targetSize: imageView.bounds.size
)
// 이미지 로딩 취소
imageView.ck_cancelImageLoad()
캐시 통계
if let stats = await CachingKit.shared.getStatistics() {
print("메모리 히트율: \(stats.memoryHitRate)")
print("디스크 히트율: \(stats.diskHitRate)")
print("ETag 히트율: \(stats.etagHitRate)")
print("다운로드 횟수: \(stats.totalDownloads)")
print("절약한 바이트: \(stats.totalBytesSaved)")
}
캐시 정리
// 메모리 캐시만 정리
CachingKit.shared.clearMemoryCache()
// 디스크 캐시만 정리
CachingKit.shared.clearDiskCache()
// 전체 캐시 정리
CachingKit.shared.clearAll()
🏗️ 아키텍처
Actor 기반 동시성
- 모든 캐시 작업은 Actor로 보호되어 스레드 안전 보장
- Swift Concurrency (async/await) 전면 지원
계층 구조
CachingKit (Public API)
↓
CacheManager (Actor)
↓
┌─────────────┬─────────────┐
MemoryCache DiskCache NetworkLoader
(Actor) (Actor) (Actor)
📊 기술 사양
- 언어: Swift 5.9+
- 최소 버전: iOS 17.0 / macOS 14.0 / tvOS 17.0 / watchOS 10.0
- 동시성: Swift Concurrency (Actor 기반)
- 의존성: 없음 (Foundation, UIKit만 사용)
🎯 성능 특징
- 중복 요청 방지: 동일 URL 동시 요청 시 하나의 네트워크 호출만 실행
- 자동 리사이징: targetSize 기반 자동 다운샘플링으로 메모리 절약
- 점진적 로딩: 메모리 → 디스크 → 네트워크 순서로 폴백
- ETag 재검증: 304 응답으로 대역폭 절약
📝 전체 변경사항
Core
- ✨ CachingKit 메인 API 클래스
- ✨ CacheManager Actor (메모리/디스크 조율)
- ✨ CacheConfiguration (설정 관리)
- ✨ CacheMetadata (메타데이터 + 통계)
- ✨ CacheStrategy enum (캐싱 전략)
- ✨ CachingKitError (에러 타입)
Disk
- ✨ DiskCacheActor (디스크 캐시)
- ✨ DoublyLinkedList (LRU+LFU 알고리즘)
- ✨ StoragePathProvider (경로 추상화)
Memory
- ✨ MemoryCacheActor (메모리 캐시)
Network
- ✨ NetworkLoader (ETag 재검증)
Resize
- ✨ ImageResizer (다운샘플링)
Extensions
- ✨ UIImageView+CachingKit (편의 메서드)
Utils
- ✨ CacheStatistics (통계)
- ✨ String+Hash (SHA256)
🔗 링크
- 📖 https://github.com/yourusername/CachingKit/blob/main/README.md
- 📦 https://github.com/yourusername/CachingKit/blob/main/Package.swift
- 🐛 https://github.com/yourusername/CachingKit/issues
---
Full Changelog: https://github.com/yourusername/CachingKit/commits/v1.0.0