Languages: ํ๊ตญ์ด | English | ๆฅๆฌ่ช
Tauri๋ฅผ ์ด์ฉํ ๊ฐ๋ฒผ์ด ๋ฐ์คํฌํ ์ ํ๋ฆฌ์ผ์ด์
์ผ๋ก, ์๋ฒ ๋๋ ์น์๋ฒ๋ฅผ ํตํด html/ ํด๋์ HTML/CSS/JS ํ์ผ์ ๋ฐ์คํฌํ ์ ํ๋ฆฌ์ผ์ด์
ํํ๋ก ํ์ํฉ๋๋ค.
GitHub Repository: https://github.com/siriz/tauri_webview
๋น๋ ์์ด ๋ฐ๋ก ํ ์คํธํ๊ณ ์ถ์ผ์ ๊ฐ์?
๐ GitHub Releases์์ ์ต์ ๋ฒ์ ์ tauriwebview-v{version}-windows-x64.zip ํ์ผ์ ๋ค์ด๋ก๋ํ์ฌ ์์ถ ํด์ ํ tauriwebview.exe๋ฅผ ์คํํด๋ณด์ธ์!
- ์์ถ ํ์ผ์๋ ์คํ ํ์ผ, ์ค์ ํ์ผ, ์ํ HTML, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ ๊ฐ์ด๋๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ ์์ด ์ฆ์ ํ ์คํธํ ์ ์์ต๋๋ค.
- Windows x64 ์์คํ ์์ ๋์ํฉ๋๋ค.
- ํญ์ ์ต์ ๋ฆด๋ฆฌ์ค๋ฅผ ํ์ธํ์ธ์.
- ๋ธ๋ผ์ฐ์ ๋ถํ์: Windows ๋ด์ฅ WebView2๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๋ ๋ธ๋ผ์ฐ์ ์์ด HTML์ ๋ฐ์คํฌํ ์ฑ์ผ๋ก ์คํ
- ์ถ๊ฐ ์ค์น ๋ถํ์: ์ธ๋ถ ์ํํธ์จ์ด ์ค์น ์์ด exe๋ง์ผ๋ก ๋ฐ๋ก ์คํ ๊ฐ๋ฅ
- ์๋ฒ ๋๋ ์น์๋ฒ: Rust ๊ธฐ๋ฐ HTTP ์๋ฒ(tiny_http)๋ก ๋์ ํ์ผ ์ ๊ณต ๋ฐ ํฌํธ ์ค์ ์ง์
- ์ค์๊ฐ ์์ : ์คํ ์ค์๋
html/ํด๋ ํ์ผ ์์ ํ F5๋ก ์ฆ์ ๋ฐ์ (์ฌ๋น๋ ๋ถํ์) - ๊ฐํธํ ์ค์ :
config.ini๋ก ์ฐฝ ํฌ๊ธฐ, ํฌํธ, ํญ์ ์ ํ์ ๋ฑ ์์ฝ๊ฒ ์ปค์คํฐ๋ง์ด์ง - Drag & Drop ์ง์: ํ์ผ์ ์ฐฝ์ ๋๋๊ทธํ์ฌ ์ฒ๋ฆฌ ๊ฐ๋ฅ (์ํ ์ฝ๋ ํฌํจ)
- ์๋ ๋ฒ์ ๊ด๋ฆฌ: Git ์ปค๋ฐ ์นด์ดํธ ๊ธฐ๋ฐ ์๋ ๋ฒ์ ๋ฒํธ ์์ฑ
- Single Instance ๋ชจ๋: ์ค๋ณต ์คํ ๋ฐฉ์ง ์ต์
- ํ์ฅ์ฑ: ๊ฐ๋จํ ๊ตฌ์กฐ๋ก ์ ๊ธฐ๋ฅ ์ถ๊ฐ ์ฉ์ด
- Windows 10 ์ด์
- ๊ด๋ฆฌ์ ๊ถํ ๋ถํ์
- ์ธ๋ถ ์ํํธ์จ์ด ์ค์น ๋ถํ์
- Rust ์ค์น: https://www.rust-lang.org/tools/install
- Node.js ์ค์น: https://nodejs.org/
- Tauri CLI ์ค์น:
cargo install tauri-cli
# ์ ์ฅ์ ํด๋ก
git clone <repository-url>
cd TauriWebview
# dev ํด๋์์ ์์กด์ฑ ์ค์น
cd dev
npm install
# ๊ฐ๋ฐ ์๋ฒ ์คํ
npm run dev
# ๋ฆด๋ฆฌ์ค ๋น๋
npm run buildTauriWebview/
โโโ dev/ # ๋ชจ๋ ๊ฐ๋ฐ ์์ค์ฝ๋
โ โโโ src-tauri/ # Rust ๋ฐฑ์๋ ์์ค
โ โ โโโ src/
โ โ โ โโโ main.rs # ๋ฉ์ธ ์ํธ๋ฆฌ ํฌ์ธํธ
โ โ โ โโโ lib.rs # ์๋ฒ ๋๋ ์น์๋ฒ ๋ฐ ํต์ฌ ๋ก์ง
โ โ โโโ html/ # ๊ฐ๋ฐ์ฉ ์น ์ฝํ
์ธ (์์ค)
โ โ โ โโโ index.html # Drag & Drop ์ํ ํฌํจ
โ โ โ โโโ styles.css
โ โ โ โโโ main.js
โ โ โโโ icons/
โ โ โ โโโ icon.ico # ๋ฉํฐ ์ฌ์ด์ฆ ์์ด์ฝ (157KB)
โ โ โโโ Cargo.toml # Rust ์์กด์ฑ (tauri, tiny_http, configparser ๋ฑ)
โ โ โโโ tauri.conf.json # Tauri ์ค์ (dragDropEnabled: false)
โ โ โโโ build.rs # ๋น๋ ์คํฌ๋ฆฝํธ (Git ๋ฒ์ ์๋ ์์ฑ)
โ โ โโโ .cargo/
โ โ โโโ config.toml # ๋น๋ ์ถ๋ ฅ ๊ฒฝ๋ก (../../build)
โ โโโ readme/ # ์ฌ์ฉ์์ฉ ๊ฐ์ด๋ (TXT ํ์)
โ โ โโโ README_KO.txt
โ โ โโโ README_EN.txt
โ โ โโโ README_JA.txt
โ โโโ scripts/ # ์๋ํ ์คํฌ๋ฆฝํธ
โ โ โโโ update-version.js # Git ๊ธฐ๋ฐ ์๋ ๋ฒ์ ์
๋ฐ์ดํธ
โ โ โโโ copy-contents.js # HTML ๋ฐ README ๋ณต์ฌ
โ โ โโโ create-dist.js # ๋ฐฐํฌ ํจํค์ง ์์ฑ
โ โ โโโ create-release-zip.js # ๋ฒ์ ๋ณ zip ํ์ผ ์์ฑ
โ โโโ package.json # npm ์คํฌ๋ฆฝํธ (prebuild/postbuild)
โ โโโ node_modules/ # npm ์์กด์ฑ
โโโ build/ # ๋น๋ ๊ฒฐ๊ณผ๋ฌผ (์๋ ์์ฑ, Git ์ ์ธ)
โ โโโ dist/ # ์ต์ข
๋ฐฐํฌ ํจํค์ง
โ โโโ tauriwebview.exe # ์คํํ์ผ (~9MB)
โ โโโ config.ini # ์ฌ์ฉ์ ์ค์ ํ์ผ
โ โโโ html/ # ์ฌ์ฉ์ ํธ์ง ๊ฐ๋ฅํ ์น ์ฝํ
์ธ
โ โ โโโ index.html
โ โ โโโ styles.css
โ โ โโโ main.js
โ โโโ README_KO.txt # ํ๊ตญ์ด ์ฌ์ฉ ๊ฐ์ด๋
โ โโโ README_EN.txt # ์์ด ์ฌ์ฉ ๊ฐ์ด๋
โ โโโ README_JA.txt # ์ผ๋ณธ์ด ์ฌ์ฉ ๊ฐ์ด๋
โโโ config.ini # ์ฑ ์ค์ ํ์ผ (๊ฐ๋ฐ์ฉ ํ
ํ๋ฆฟ)
โโโ LICENSE # MIT ๋ผ์ด์ผ์ค
โโโ README.md # ๊ฐ๋ฐ์์ฉ ํ๊ตญ์ด ๋ฌธ์
โโโ README_EN.md # ๊ฐ๋ฐ์์ฉ ์์ด ๋ฌธ์
โโโ README_JA.md # ๊ฐ๋ฐ์์ฉ ์ผ๋ณธ์ด ๋ฌธ์
โโโ tauriwebview-v0.2.16-windows-x64.zip # ๋ฐฐํฌ์ฉ ์์ถ ํ์ผ (~3MB)
๋น๋ ์๋ฃ ํ ๋ฐฐํฌ์ฉ ํจํค์ง๋ build/dist/ ํด๋์ ์์ฑ๋ฉ๋๋ค:
build/dist/
โโโ tauriwebview.exe # ์คํํ์ผ (9.2MB, ์๋ฒ ๋๋ ์น์๋ฒ ํฌํจ)
โโโ config.ini # ์ค์ ํ์ผ (ํฌํธ, ์ฐฝ ํฌ๊ธฐ ๋ฑ)
โโโ html/ # ์ฌ์ฉ์๊ฐ ์ง์ ์์ ๊ฐ๋ฅํ ์น ์ฝํ
์ธ
โ โโโ index.html
โ โโโ styles.css
โ โโโ main.js
โโโ README_KO.txt # ํ๊ตญ์ด ์ฌ์ฉ ๊ฐ์ด๋
โโโ README_EN.txt # ์์ด ์ฌ์ฉ ๊ฐ์ด๋
โโโ README_JA.txt # ์ผ๋ณธ์ด ์ฌ์ฉ ๊ฐ์ด๋
๋ฐฐํฌ ๋ฐฉ๋ฒ:
- ๋น๋ ์ ์๋์ผ๋ก
tauriwebview-v{version}-windows-x64.zip์์ฑ๋จ - GitHub Releases์ ์ ๋ก๋ํ์ฌ ๋ฐฐํฌ
- ๋๋
build/dist/ํด๋๋ฅผ ์ง์ ๋ฐฐํฌ
tauriwebview.exe์คํ- ์ ํ๋ฆฌ์ผ์ด์
์ด
http://localhost:8000์์ ์๋์ผ๋ก ์น์๋ฒ ์์ html/ํด๋์ ํ์ผ์ ์ํ๋ ๋๋ก ์์ - ์ ํ๋ฆฌ์ผ์ด์ ์์ F5(์๋ก๊ณ ์นจ)๋ฅผ ๋๋ฌ ๋ณ๊ฒฝ์ฌํญ ์ฆ์ ํ์ธ
- ํ์์
config.ini์์ ํฌํธ ๋ฒํธ๋ ์ฐฝ ํฌ๊ธฐ ๋ณ๊ฒฝ
- F5: ํ์ด์ง ์๋ก๊ณ ์นจ (์์ ๋ HTML/CSS/JS ๋ฐ์)
- F11: ์ ์ฒดํ๋ฉด ํ ๊ธ (์ ์ฒดํ๋ฉด โ ์ฐฝ ๋ชจ๋)
config.ini ํ์ผ๋ก ๋ค์ ํญ๋ชฉ์ ์ค์ ํ ์ ์์ต๋๋ค:
[window]
width=800 # ์ฐฝ ๋๋น (๊ธฐ๋ณธ๊ฐ: 800)
height=600 # ์ฐฝ ๋์ด (๊ธฐ๋ณธ๊ฐ: 600)
center=true # ํ๋ฉด ์ค์์ ๋ฐฐ์น (true/false)
x=100 # ์ฐฝ X ์ขํ (center=false์ผ ๋๋ง ์ฌ์ฉ)
y=100 # ์ฐฝ Y ์ขํ (center=false์ผ ๋๋ง ์ฌ์ฉ)
always_on_top=false # ํญ์ ์์ ํ์ ์ฌ๋ถ
resizable=true # ์ฐฝ ๋ฆฌ์ฌ์ด์ฆ ๊ฐ๋ฅ ์ฌ๋ถ
[app]
name=TauriWebview # ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ (์ฐฝ ์ ๋ชฉ์ ํ์)
version=0.2.16 # ๋ฒ์ (๋น๋ ์ ์๋์ผ๋ก Git ์ปค๋ฐ ์นด์ดํธ ๊ธฐ๋ฐ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธ)
port=8000 # ์น์๋ฒ ํฌํธ ๋ฒํธ (๊ธฐ๋ณธ๊ฐ: 8000)
single_instance=true # ๋จ์ผ ์ธ์คํด์ค ๋ชจ๋ (์ค๋ณต ์คํ ๋ฐฉ์ง)์ฐธ๊ณ :
- ์ฐฝ ์ ๋ชฉ์
{name} v{version} ({git-hash})ํ์์ผ๋ก ํ์๋ฉ๋๋ค version์ ๋น๋ ์ ์๋์ผ๋ก Git ์ปค๋ฐ ์นด์ดํธ ๊ธฐ๋ฐ ๋ฒ์ (์: 0.2.16)์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค
๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํฌํธ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ:
config.iniํ์ผ์ ํ ์คํธ ์๋ํฐ๋ก ์ด๊ธฐ[app]์น์ ์port๊ฐ ๋ณ๊ฒฝ (์:port=8080)- ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์์
config.ini์์ ํฌํธ ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ฆ์ ์ ์ฉ๋จ- ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํฌํธ ์ถฉ๋ ์ ์ฝ๊ฒ ํด๊ฒฐ
- ํ๋์ฝ๋ฉ๋ URL ์ ๊ฑฐ๋ก ์ ์ฐํ ์ค์ ๊ฐ๋ฅ
- ๋น๋ ๊ฒฐ๊ณผ๋ฌผ(zip ํ์ผ)์ Git ์ ์ฅ์์์ ์ ์ธ
- GitHub Releases๋ฅผ ํตํด ๋ฐฐํฌ ํ์ผ ๊ด๋ฆฌ
- README์์ ํญ์ ์ต์ ๋ฆด๋ฆฌ์ค๋ก ์๋ ๋งํฌ
config.ini์์ ๋ฉ์ด์ /๋ง์ด๋ ๋ฒ์ ์ง์ ์ค์ ๊ฐ๋ฅ- Git ์ปค๋ฐ ์นด์ดํธ๋ก ํจ์น ๋ฒ์ ์๋ ์์ฑ
- ๋ฒ์ ํ์:
{major}.{minor}.{commits}(์: 0.2.16)
- ์ด๊ธฐ ์ฐฝ ์ ๋ชฉ์ ์ต์ํํ์ฌ ๊น๋ํ ์์
- config.ini ๋ก๋ ํ ์ฆ์ ์ฌ์ฉ์ ์ ์ ์ ๋ชฉ์ผ๋ก ๋ณ๊ฒฝ
์ํ HTML์ ํ์ผ ๋๋๊ทธ ์ค ๋๋กญ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค:
- ํ์ผ์ ์ฐฝ์ ๋๋๊ทธํ๋ฉด ํ์ผ ์ ๋ณด(์ด๋ฆ, ํฌ๊ธฐ, ํ์ ) ํ์
- ์ฌ๋ฌ ํ์ผ ๋์ ๋๋กญ ๊ฐ๋ฅ
- ํ์ผ ํ์ ๋ณ ์์ด์ฝ ์๋ ํ์
- Remove ๋ฒํผ์ผ๋ก ๋ชฉ๋ก์์ ์ ๊ฑฐ
์ฌ์ฉ ๋ฐฉ๋ฒ:
// HTML5 drag and drop ์ด๋ฒคํธ ์ฌ์ฉ
dropzone.addEventListener('drop', (e) => {
e.preventDefault();
const files = e.dataTransfer.files;
// ํ์ผ ์ฒ๋ฆฌ
});config.ini์์ single_instance=true๋ก ์ค์ ํ๋ฉด:
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ฏธ ์คํ ์ค์ผ ๋ ์๋ก ์คํํ๋ฉด ๊ธฐ์กด ์ฐฝ์ด ํ์ฑํ๋จ
- ์ค๋ณต ์คํ ๋ฐฉ์ง๋ก ๋ฆฌ์์ค ์ ์ฝ
config.ini์์ center=true๋ก ์ค์ ํ๋ฉด:
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋์ผ๋ก ํ๋ฉด ์ค์์ ๋ฐฐ์น๋จ
x,y์ขํ ์ค์ ๋ถํ์
์ ํ๋ฆฌ์ผ์ด์ ์์ด์ฝ์ ๋ณ๊ฒฝํ๋ ค๋ฉด:
| ํด์๋ | ์ฉ๋ | ์ค๋ช |
|---|---|---|
| 16x16 | ํ์ผ ํ์๊ธฐ | ๋ชฉ๋ก ๋ณด๊ธฐ ๋ฐ ์์ ์์ด์ฝ |
| 32x32 | ๋ฐํํ๋ฉด, ์์ ํ์์ค | ์ผ๋ฐ์ ์ธ ํ์์ฉ |
| 48x48 | ์ค๊ฐ ์์ด์ฝ | ์ ์ดํ ๋ฐ ์ค๊ฐ ํฌ๊ธฐ |
| 64x64 | ํ์ผ ๋ณด๊ธฐ | Windows 10/11 ํ์ผ |
| 128x128 | ์ฌ๋ค์ผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ | ํ์ผ ์์ฑ ๋ฐ ํฐ ๋ณด๊ธฐ |
| 256x256 | High DPI ๋์คํ๋ ์ด | 4K ํด์๋ ๋ฐ ๊ณ ํด์๋ |
-
๋ค์ํ ํด์๋์ ์ด๋ฏธ์ง ์ค๋น
- ๊ถ์ฅ ํด์๋: 16x16, 32x32, 48x48, 64x64, 128x128, 256x256
- ํ์: PNG (ํฌ๋ช ๋ฐฐ๊ฒฝ ๊ถ์ฅ)
-
ICO ํ์ผ๋ก ๋ณํ
- ์จ๋ผ์ธ ๋๊ตฌ: https://convertio.co/png-ico/
- ๋๋ ImageMagick ์ค์น ํ:
magick convert icon-16.png icon-32.png icon-48.png icon-64.png icon-128.png icon-256.png icon.ico
-
์์ด์ฝ ํ์ผ ์ ์ฅ
dev/src-tauri/icons/icon.ico์ ์ ์ฅ- ๊ธฐ์กด ํ์ผ์ ๋ฎ์ด์ฐ๊ธฐ
-
๋น๋
cd dev npm run build
- ๋ฐฑ์๋: Rust
- Tauri 2.0 - ๋ฐ์คํฌํ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
- tiny_http - ์๋ฒ ๋๋ HTTP ์น์๋ฒ
- configparser - INI ํ์ผ ํ์ฑ
- ํ๋ก ํธ์๋: HTML5, CSS3, JavaScript
- ๋น๋ ๋๊ตฌ: Cargo, npm
- WebView: Windows WebView2 (Chromium ๊ธฐ๋ฐ)
์คํ ํ๋ฆ:
1. tauriwebview.exe ์คํ
2. config.ini ์ฝ๊ธฐ (ํฌํธ, ์ฐฝ ํฌ๊ธฐ ๋ฑ)
3. Rust ์๋ฒ ๋๋ ์น์๋ฒ ์์ (localhost:8000)
- exe์ ๊ฐ์ ๋๋ ํ ๋ฆฌ์ html/ ํด๋ ์๋น
- MIME ํ์
์๋ ์ค์ (html, css, js, json, ์ด๋ฏธ์ง ๋ฑ)
4. Tauri ์๋์ฐ ์์ฑ ๋ฐ http://localhost:8000 ์ด๊ธฐ
5. ์ฌ์ฉ์๊ฐ html/ ํ์ผ ์์ โ F5๋ก ์๋ก๊ณ ์นจ โ ์ฆ์ ๋ฐ์
- ์์น:
dev/src-tauri/html/ํด๋์์ ์์ - ํ ์คํธ: ์ ํ๋ฆฌ์ผ์ด์ ์คํ ํ F5๋ก ์๋ก๊ณ ์นจ
- ๋น๋:
npm run build๋กbuild/dist/html/์ ์๋ ๋ณต์ฌ
Rust (Cargo.toml):
[dependencies]
tauri = "2"
tiny_http = "0.12" # ์๋ฒ ๋๋ ์น์๋ฒ
configparser = "3" # INI ํ์ผ ํ์ฑ
[build-dependencies]
tauri-build = "2"
embed-resource = "3" # ์์ด์ฝ ์๋ฒ ๋ฉcopy-contents.js:src-tauri/html/โbuild/dist/html/๋ณต์ฌcreate-dist.js: ์ต์ข ๋ฐฐํฌ ํจํค์ง ์์ฑbuild.rs: ์์ด์ฝ ์๋ฒ ๋ฉ ์ฒ๋ฆฌ
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ผ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
- โ ์์ ์ ์ฌ์ฉ ๊ฐ๋ฅ
- โ ์์ ๊ฐ๋ฅ
- โ ๋ฐฐํฌ ๊ฐ๋ฅ
- โ ๊ฐ์ธ/์ฌ์ ์ฌ์ฉ ๊ฐ๋ฅ
โ ๏ธ ๋ผ์ด์ ์ค ๋ฐ ์ ์๊ถ ํ์ ํ์