SwiftUI @Observable에 클로저를 저장하면 EXC_BAD_ACCESS가 발생하는 이유

뭘 하려고 했냐면 iOS 음악 스트리밍 앱을 만들고 있었는데요. NavigationDestination으로 이동하는 상세 화면마다 ViewModel을 두고, API 호출 로직을 클로저로 주입하는 구조를 쓰고 있었어요. 대충 이런 식이었거든요: @Observable final class PlaylistDetailVM { var songs: [Song] = [] var isLoading = false // API 클라이언트의 메서드를 클로저로 주입 private let fetchSongs: (String) async throws -> [Song] private let addToPlaylist: (String, [String]) async throws -> Void init( fetchSongs: @escaping (String) async throws -> [Song], addToPlaylist: @escaping (String, [String]) async throws -> Void ) { self.fetchSongs = fetchSongs self.addToPlaylist = addToPlaylist } } NavigationDestination에서 @State로 VM을 생성하고요: ...

2026년 4월 21일 · 3 분 · Young

Remember Me: Vector DB 비용 40배 절감하는 LLM 클라이언트 메모리 스타트업 아이디어

문제: Vector DB의 비용과 복잡성 LLM 애플리케이션을 개발할 때 “메모리” 기능은 필수입니다. 사용자와의 대화 기록, 컨텍스트 유지, 지식 검색 등 다양한 용도로 활용됩니다. 현재 대부분의 개발자들은 이를 위해 Vector Database를 사용합니다: Pinecone (클라우드) Chroma (로컬) pgvector (PostgreSQL 확장) Milvus, Qdrant 등 하지만 이 접근 방식에는 문제가 있습니다: 비용: 클라우드 Vector DB 비용이 빠르게 증가 복잡성: 임베딩 생성, 인덱싱, 검색 파이프라인 구축 필요 지연: 네트워크 RTT 추가 인프라: 서버 관리 부담 솔루션: 클라이언트 사이드 O(1) 메모리 Remember Me는 Vector DB 없이 클라이언트 사이드에서 동작하는 LLM 메모리 라이브러리입니다. ...

2026년 1월 24일 · 2 분 · Young