본문 바로가기
C.W.K.
Stream
Lesson 06 of 06 · published

창 상태 영속화

~11 min · tauri, windows, plugin, persistence

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"켤 때마다 창을 어디 뒀는지 까먹는 데스크톱 앱은 고장 난 것처럼 느껴져 — 아무 문제 없는데도."

제일 작은데 제일 크게 느껴지는 마감

사용자는 앱이 두고 간 그 자리에 다시 열리길 기대해. 같은 위치, 같은 크기로. 이걸 손으로 짜려면(이동이랑 리사이즈를 듣고, 너무 자주 안 쓰게 묶고, 디스크에 쓰고, 시작할 때 읽고, 창이 보이기 전에 적용하고) 은근히 까다롭고 미묘하게 틀리기 쉬워. Tauri엔 딱 이 일만 하는 공식 플러그인 tauri-plugin-window-state가 있어. 창마다 위치랑 크기를 종료할 때 저장하고 다음 실행에 되돌려놔. 알아서.

등록하고 잊어버려

이 플러그인의 아름다움은 등록 말고는 앱 코드가 사실상 0줄이라는 거야. Builder 체인에 한 줄 얹으면 창 생애주기에 알아서 붙어. 짤 command도, 엮을 이벤트도 없어 — 열 때 되돌리고 나갈 때 저장하는 게 그냥 벌어져. 한 가지 일을 잘해서 네가 그걸 다시 만들 필요를 없애주는, 플러그인의 정석이야.

세 표면 규칙 맛보기

이 플러그인을 넣으면 세 군데를 건드리게 되는데, 지금 그 패턴을 알아채두면 plugins 트랙에서 값을 톡톡히 해. Cargo.toml 의존성, lib.rs빌더 등록, 그리고 (프론트엔드에 command를 열어주는 플러그인이라면) capabilities 권한. window-state는 대부분 알아서 되는 편인데도 capabilities에 window-state:default로 얼굴을 내밀어. Cinder가 이 플러그인을 딱 그렇게 등록해둬서 창이 제자리에 다시 열려 — 세 표면, 한 가지 동작.

Code

표면 2: 빌더에 등록·rust
// lib.rs — 플러그인 등록; 복원/저장이 자동으로 일어나.
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_window_state::Builder::default().build())
        // ...다른 플러그인, command...
        .run(tauri::generate_context!())
        .expect("error while running app");
}
표면 1: Cargo 의존성·toml
# Cargo.toml — 표면 1: 의존성.
[dependencies]
tauri-plugin-window-state = "2"

External links

Exercise

앱에 tauri-plugin-window-state를 넣어(의존성이랑 빌더 줄). 돌리고, 창을 옮기고 크기를 바꾸고, 종료했다가 다시 켜 — 두고 간 자리에 정확히 다시 열리는지 확인해. 그다음 적어봐. 이 저장 기능에 '네' 코드가 몇 줄 들었어? 그 거의 0에 가까운 숫자가 플러그인의 핵심이야.
Hint
Cargo.toml에 크레이트를 넣고 체인에 .plugin(tauri_plugin_window_state::Builder::default().build())를 얹어. 플러그인의 프론트엔드 command가 필요하면 capabilities에 window-state:default를 더하지만 — 기본 저장이랑 복원은 등록만으로 돌아가.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.