"command는 기억이 없는 함수야. 여럿이 뭔가를 같이 기억해야 할 땐, 앱한테 기억을 쥐여줘: managed state."
한 번 등록하면 어디서든 받아
command 혼자선 호출과 호출 사이에 아무것도 못 기억해. 데이터를 같이 쓰려면 — 설정이든, DB 풀이든, 카운터든, 캐시든 — Builder에서 .manage(value)로 맡겨. 그다음부턴 어떤 command든 tauri::State<T> 타입 파라미터를 선언해서 달라고 하면 돼. Tauri가 그 파라미터를 보고 맡아둔 인스턴스를 알아서 넣어줘. 프론트엔드는 여기 낄 일이 없어. 전부 코어 안에 살거든.
타입 하나에 값 하나
managed state는 타입으로 찾아. AppConfig 하나, Database 하나, Counter 하나를 맡겨두면 — State<AppConfig>를 달라고 할 때마다 늘 같은 인스턴스가 와. 바탕 타입이 같은 걸 둘 두고 싶으면 각각 newtype으로 감싸(struct ReadPool(Pool)이랑 struct WritePool(Pool)처럼) 타입 시스템이 구분하게 해. 이건 제약이 아니라 기능이야 — '어느 state?'가 모호해질 틈을 안 주거든.
받는 건 공유 참조야
네가 받는 건 맡겨둔 값으로 가는, 같이 쓰는 읽기 전용 손잡이야. 읽기만 하는 것(한 번 불러온 설정 같은)엔 완벽하지. 근데 그걸로 필드를 직접 바꿀 순 없다는 뜻이기도 해. borrow checker가 공유 상태에서의 변경을 안 허락하거든. state가 바뀌어야 하면 interior mutability(Mutex)를 꺼내는데, 그게 바로 다음 레슨이야. 지금은 읽기 위주 state를 맡기고 필요한 command에 받아 쓰는 것부터.