---
title: 다양한 창과 플랫폼에서의 보안 수준
sidebar:
  order: 11
i18nReady: true
---

import { Steps } from '@astrojs/starlight/components';
import ShowSolution from '@components/ShowSolution.astro';
import Cta from '@fragments/cta.mdx';
import TranslationNote from '@components/i18n/TranslationNote.astro';

이 장은 Tauri 앱의 보안 수준을 사용자 정의하는 방법에 대해 설명합니다.

## 이 장의 내용

- Tauri 앱에서 여러 창 만들기
- 창마다 다른 보안 수준 사용하기
- 플랫폼에 의존하는 보안 수준 사용하기

## 사전 준비

이 장의 연습 내용은 "[플러그인 접근 권한 사용](/ko/learn/security/using-plugin-permissions/)"을 읽은 후에 수행하는 것을 전제로 합니다.

## 절차

<Steps>
1. ### Tauri 앱에서 여러 창 만들기

    이 연습에서는 `first`(첫 번째)와 `second`(두 번째)라는 레이블이 붙은 두 개의 창을 가진 앱을 만듭니다.
    Tauri 애플리케이션에서 창을 만드는 방법은 여러 가지가 있습니다.

    #### Tauri 설정 파일을 사용하여 창 만들기

    Tauri 설정 파일(일반적으로 `tauri.conf.json`이라는 이름)에서는 다음과 같습니다:

        <ShowSolution>
        ```javascript
          "productName": "multiwindow",
          ...
          "app": {
            "windows": [
              {
                "label": "first",
                "title": "First",
                "width": 800,
                "height": 600
              },
              {
                "label": "second",
                "title": "Second",
                "width": 800,
                "height": 600
              }
            ],
          },
          ...
        }
        ```
        </ShowSolution>

    #### 프로그래밍 방식으로 창 만들기

    Rust 코드 내에서 Tauri 앱을 만듭니다:

    <ShowSolution>
    ```rust
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet])
        .setup(|app| {
            let webview_url = tauri::WebviewUrl::App("index.html".into());
            // First window(첫 번째 창)
            tauri::WebviewWindowBuilder::new(app, "first", webview_url.clone())
                .title("First")
                .build()?;
            // Second window(두 번째 창)
            tauri::WebviewWindowBuilder::new(app, "second", webview_url)
                .title("Second")
                .build()?;
            Ok(())
        })
        .run(context)
        .expect("error while running tauri application");
    ```
    </ShowSolution>


2. ### 다른 창에 다른 보안 수준 적용

    Tauri 앱의 창에서는 Tauri 백엔드의 다양한 기능이나 플러그인을 사용할 수 있습니다.
    보안을 더 강화하기 위해 각 창에 필요한 보안 기능만 부여하는 것이 좋습니다.
    이 연습에서는 "첫 번째 `first`" 창에서 파일 시스템과 대화 상자 기능을 사용하고, "두 번째 `second`" 창에서는 대화 상자 기능만 필요로 하는 상황을 가정하고 진행합니다.

    #### 카테고리별 개별 "보안 수준" 파일

    활성화할 작업의 카테고리별로 "보안 수준" 파일을 분할하는 것이 좋습니다.

    <ShowSolution>
    `src-tauri/capabilities` 내의 JSON 파일은 "보안 수준" 시스템에 이미 대응되어 있습니다.
    따라서 파일 시스템과 대화 상자 창과 관련된 보안 수준을 `filesystem.json`과 `dialog.json`으로 분할합니다.

    _Tauri 프로젝트의 파일 트리:_

    ```
    /src
    /src-tauri
      /capabilities
        filesystem.json
        dialog.json
      tauri.conf.json
    package.json
    README.md
    ```
    </ShowSolution>

    #### "첫 번째 `first`" 창에 파일 시스템 보안 수준 부여

    "`first`" 창에 `$HOME` 디렉토리 내용에 대한 읽기 접근 권한을 부여하도록 보안 수준을 설정합니다.

    <ShowSolution>

    하나 또는 여러 개의 창 레이블을 가진 "보안 기능 capability" 파일 내의 "`windows` 필드"를 사용합니다.

    ```json title="filesystem.json"
    {
      "identifier": "fs-read-home",
      "description": "Allow access file access to home directory",
      "local": true,
      "windows": ["first"],
      "permissions": ["fs:allow-home-read"]
    }
    ```

    <TranslationNote lang="ko">

    "filesystem.json" 파일 내용 초역:

    - identifier: 식별자 이름
    - description: 보안 내용 설명(home 디렉토리에 대한 파일 접근 허용)
    - local: true
    - windows: 창 이름
    - permissions: 접근 권한 설정

    </TranslationNote>

    </ShowSolution>

    #### "첫 번째 `first`"와 "두 번째 `second`" 창에 대화 상자 기능 부여

    "`first`"와 "`second`" 창에 "예/아니오" 대화 상자를 만드는 기능을 추가합니다.

    <ShowSolution>

    하나 또는 여러 개의 창 레이블을 가진 "보안 기능" 파일 내의 `windows` 필드를 사용합니다.

    ```json title="dialog.json"
    {
      "identifier": "dialog",
      "description": "Allow to open a dialog",
      "local": true,
      "windows": ["first", "second"],
      "permissions": ["dialog:allow-ask"]
    }
    ```

    </ShowSolution>

3. ### 보안 기능을 플랫폼에 따라 다르게 만들기

    다음으로, 특정 플랫폼에서만 활성화되도록 보안 기능을 사용자 정의합니다.
    아래 예에서는 파일 시스템 보안 기능을 `linux`와 `windows`에서만 활성화합니다.

    <ShowSolution>

    플랫폼별로 설정하려면 보안 기능 파일의 "`platforms` 필드"에서 대상 플랫폼을 지정합니다.

    ```json title="filesystem.json"
    {
      "identifier": "fs-read-home",
      "description": "Allow access file access to home directory",
      "local": true,
      "windows": ["first"],
      "permissions": ["fs:allow-home-read"],
      "platforms": ["linux", "windows"]
    }
    ```

    현재 지정 가능한 플랫폼은 `linux`, `windows`, `macos`, `android`, `ios`입니다.

    </ShowSolution>

</Steps>

## 본 장의 요약 및 참고 자료

Tauri 앱에서 여러 창을 만들고 각각에 별도의 보안 기능을 부여하는 방법을 배웠습니다. 또한 이러한 보안 기능은 특정 플랫폼에 맞게 사용자 정의할 수도 있습니다.

창 기능을 사용한 샘플 애플리케이션은 [Tauri Github 리포지토리](https://github.com/tauri-apps/tauri)의 [`api` 샘플](https://github.com/tauri-apps/tauri/tree/dev/examples/api) 내에 있습니다.
"보안 기능 파일 capability file"에서 사용할 수 있는 필드는 TAURI Doc의 "메뉴 Menu" 내에 있는 "Reference"의 [Capability](/reference/acl/capability/) 부분에 나열되어 있습니다.
