# 구성

**URL:** https://heroiclabs.com/docs/kr/nakama/getting-started/configuration/
**Summary:** Nakama 서버에 사용자 지정 구성을 제공하는 방법 및 사용 가능한 모든 구성 속성에 대한 개요.

---


# 구성

YAML 구성 파일에는 Nakama 서버가 실행되는 방식의 다양한 측면이 지정됩니다. 구성 파일을 지정하지 않고 Nakama를 실행할 수 있으며 대신 기본 설정이 사용됩니다.

## 구성 파일 지정

`--config` 플래그를 사용하여 런타임 시 구성 파일을 지정할 수 있습니다.

```sh
nakama --config my-special-config.yml
```

Docker-Compose를 통해 Nakama를 실행하는 경우 Docker에서 사용할 수 있도록 시스템의 폴더를 바인딩해야 합니다. [Docker에서 실행되는 Nakama 구성](../install/docker/#configuration-file) 문서를 참조하세요.

## 서버 포트

Nakama는 매우 유연한 시스템입니다. gRPC, HTTP, Websockets 및 rUDP를 통해 서버와 데이터를 교환할 수 있습니다. 이러한 유연성으로 인해 Nakama는 다음에 바인딩할 때 4개의 포트를 사용할 수 있어야 합니다:

- 포트 7350의 HTTP API 서버. _포트는 구성에서 변경할 수 있습니다._
- 포트 7351에서 임베디드 개발자 콘솔에 전원을 공급하는 HTTP API 서버. _포트는 구성에서 변경할 수 있습니다._
- 포트 7349의 gRPC API 서버. _포트는 API 서버 포트를 기반으로 선택됩니다._
- 포트 7348의 내장 콘솔용 gRPC API 서버. _포트는 API 서버 포트를 기반으로 선택됩니다._

## 일반 속성

대부분의 환경에서 몇 가지 구성 속성을 변경해야 합니다. 예를 들어 실제 프로덕션 환경에 Nakama를 배포하기 전에 **`socket.server_key`**, **`session.encryption_key`** 및 **`runtime.http_key`**의 값을 변경해야 합니다.
전체 구성 목록은 [페이지 하단](#server-configuration)에 있습니다.

{{< table name="nakama.getting-started.configuration.properties" >}}

## 서버 구성

Nakama는 다양한 사용 사례 및 배포 환경에 최대한 유연하게 사용할 수 있도록 구성 옵션을 다양하게 제공합니다.

Nakama는 모든 구성 옵션에 대해 적정한 기본값을 제공하므로 옵션의 일부만 재정의하면 됩니다. 또한 고유한 구성 파일을 설정하고 명령줄 플래그를 통해 구성 파일의 값을 재정의할 수 있습니다. 예를 들어 런타임 경로를 재정의하려면 다음을 수행합니다:

```sh
nakama --runtime.path /tmp/my-modules
```

필드가 구체적이지 않으면 기본값이 사용됩니다. 플래그를 재정의하는 방법에 대한 자세한 내용은 [서버 명령줄](../commands/) 페이지를 참조하세요.

{{< table name="nakama.getting-started.configuration.configuration" >}}

### 클러스터

이 섹션에서는 클러스터를 형성하기 위해 노드를 서로 연결하는 방법을 설명합니다.

{{< note "important" "Nakama Enterprise 전용" >}}
다음 구성 옵션은 Nakama 서버의 Nakama Enterprise 버전에서만 사용할 수 있습니다.

Nakama는 프로덕션 환경에서 고가용성 클러스터로 실행되도록 설계되었습니다. [Nakama Enterprise](https://heroiclabs.com/enterprise)를 실행 중인 경우 개발 머신에서 로컬로 클러스터를 시작할 수 있습니다. 프로덕션에서는 Nakama Enterprise 또는 [Heroic Cloud](https://heroiclabs.com/heroic-cloud/) 서비스를 사용할 수 있습니다.
{{< / note >}}

{{< table name="nakama.getting-started.configuration.cluster" >}}

### 콘솔

이 섹션에서는 임베디드 개발자 콘솔에 관련된 구성을 정의했습니다.

{{< table name="nakama.getting-started.configuration.console" >}}

### 데이터베이스

Nakama를 사용하려면 CockroachDB 서버 인스턴스가 필요합니다. Nakama는 CockroachDB 데이터베이스 내에서 `nakama`(이)라는 자체 데이터베이스를 생성하고 관리합니다.

{{< table name="nakama.getting-started.configuration.database" >}}

다음과 같은 명령을 사용하여 여러 데이터베이스 주소를 Nakama에 전달할 수 있습니다:

```sh
nakama --database.address "root@db1:26257" --database.address "root@db2:26257"
```

### IAP (인앱 구매)

Nakama는 다양한 상점에 연결하여 인앱 구매를 검증할 수 있으며 유효한 구매 원장을 보관합니다. 따라서 유효한 영수증을 통해 일반적인 인앱 구매 재생 공격이 방지되고 필요에 따라 사용자 계정에 대한 구매를 복원할 수 있습니다.

#### Apple

Apple 인앱 구매 구성

{{< table name="nakama.getting-started.configuration.iap-apple" >}}

#### Google

Google 인앱 구매 구성

{{< table name="nakama.getting-started.configuration.iap-google" >}}

#### Huawei

{{< table name="nakama.getting-started.configuration.iap-huawei" >}}

### 순위표

순위표 및 토너먼트 시스템 관련 구성 옵션을 변경할 수 있습니다.

{{< table name="nakama.getting-started.configuration.leaderboard" >}}

### 로거

Nakama는 다양한 시스템이 로그와 상호 작용할 수 있도록 JSON 형식의 로그를 생성합니다. 기본적으로 로그는 표준 출력(콘솔)에 표시됩니다.

{{< table name="nakama.getting-started.configuration.logger" >}}

표준 시작 로그 메시지는 `logger.stdout` 필드 값에 관계없이 항상 콘솔에 표시됩니다.

### 대결

권한 부여 멀티플레이어 런타임 관련 구성 옵션을 변경할 수 있습니다.

{{< table name="nakama.getting-started.configuration.match" >}}

### 메트릭스

Nakama는 메트릭스 정보를 생성합니다. 이 정보는 Prometheus로 내보낼 수 있습니다.

{{< table name="nakama.getting-started.configuration.metrics" >}}

중요한 서버 정보가 포함되어 있으므로 메트릭스 내보내기가 보호되는지 확인합니다.

### 런타임

런타임 엔진 관련 옵션입니다.

{{< table name="nakama.getting-started.configuration.runtime" >}}

런타임 환경은 키-값 쌍입니다. 다음과 같이 `=` 문자로 구분됩니다:

```sh
nakama --runtime.env "key=value" --runtime.env "key2=value2" --runtime.env "key3=valuecanhave=sign"
```

### 세션

토큰 생성에 사용된 암호화 키와 같이 각 사용자에 관련된 구성 옵션을 변경할 수 있습니다.

{{< table name="nakama.getting-started.configuration.session" >}}

### 소셜

Nakama에서는 다양한 소셜 네트워크에 연결하여 사용자 정보를 가져올 수 있습니다. 또한 알림을 전달하고 유지하기 위한 알림 센터 역할도 가능합니다.

#### Apple

Apple iOS/iPadOS 앱에 관련된 구성입니다.

{{< table name="nakama.getting-started.configuration.social-apple" >}}

#### Steam

Steam 네트워크 설정을 구성합니다. Facebook, Google 및 GameCenter의 경우 서버 설정이 필요하지 않습니다.

{{< table name="nakama.getting-started.configuration.social-steam" >}}

#### Facebook 인스턴트 게임

Facebook 인스턴트 게임에 관련된 구성입니다.

{{< table name="nakama.getting-started.configuration.social-facebook" >}}

### 소켓

서버와 클라이언트 간의 연결 소켓 및 전송 프로토콜에 관련된 옵션입니다.

{{< note "important" >}}
제공된 기본값은 소켓 연결에서 "응답형" 느낌에 최적화되어 있으며 경험이 없는 사용자가 수정해서는 안 됩니다. 도움이 필요하면 [Heroic Labs에 문의](mailto:support@heroiclabs.com)하십시오.
{{< / note >}}

{{< table name="nakama.getting-started.configuration.socket" >}}

### 추적기

세션 추적에 관련된 구성 옵션을 변경할 수 있습니다.

{{< table name="nakama.getting-started.configuration.tracker1" >}}

다음 구성 옵션은 Nakama 서버의 Nakama Enterprise 버전에서만 사용할 수 있습니다.

Nakama는 프로덕션 환경에서 고가용성 클러스터로 실행되도록 설계되었습니다. [Nakama Enterprise](https://heroiclabs.com/enterprise)를 실행 중인 경우 개발 머신에서 로컬로 클러스터를 시작할 수 있습니다. 프로덕션에서는 Nakama Enterprise 또는 [Heroic Cloud](https://heroiclabs.com/heroic-cloud/) 서비스를 사용할 수 있습니다.

{{< table name="nakama.getting-started.configuration.tracker2" >}}

### 매치 메이커

매치메이킹에 관련된 구성 옵션을 변경할 수 있습니다.

{{< table name="nakama.getting-started.configuration.matchmaker" >}}

## 예제 파일

전체 파일을 사용하거나 구성의 일부만 사용할 수 있습니다.

```yaml
name: nakama-node-1
data_dir: "./data/"

logger:
  stdout: false
  level: "warn"
  file: "/tmp/path/to/logfile.log"
  rotation: false
  max_size: 100
  max_age: 0
  max_backups: 0
  local_time: false
  compress: false

metrics:
  reporting_freq_sec: 60
  namespace: ""
  prometheus_port: 7354

database:
  address:
    - "root@localhost:26257"
  conn_max_lifetime_ms: 0
  max_open_conns: 0
  max_idle_conns: 100

runtime:
  env:
    - "example_apikey=example_apivalue"
    - "encryptionkey=afefa==e332*u13=971mldq"
  path: "/tmp/modules/folders"
  http_key: "defaulthttpkey"

socket:
  server_key: "defaultkey"
  port: 7350
  max_message_size_bytes: 4096 # bytes
  read_timeout_ms: 10000
  write_timeout_ms: 10000
  idle_timeout_ms: 60000
  write_wait_ms: 5000
  pong_wait_ms: 10000
  ping_period_ms: 8000 # Must be less than pong_wait_ms
  outgoing_queue_size: 16

session:
  encryption_key: "defaultencryptionkey"
  token_expiry_sec: 60
    refresh_encryption_key: "defaultrefreshencryptionkey"
    refresh_token_expiry_sec: 3600

social:
  steam:
  publisher_key: ""
  app_id: 0

console:
  port: 7351
  username: "admin"
  password: "password"

cluster:
  join:
    - "10.0.0.2:7352"
    - "10.0.0.3:7352"
  gossip_bindaddr: "0.0.0.0"
  gossip_bindport: 7352
  rpc_port: 7353
  local_priority: true
  work_factor_interval_ms: 1000

tracker:
  max_delta_sizes:
    - 100
    - 1000
    - 10000

matchmaker:
  max_tickets: 2
  interval_sec: 15
  max_intervals: 3

iap:
  apple:
    shared_password: "password"
  google:
    client_email: "email@google.com"
    private_key: "pk"
  huawei:
    public_key: "pk"
    client_id: "id"
    client_secret: "secret"
```
