8. 설정 파일 (MANIFEST.json) 상세

MANIFEST.json 에서 dependency 항목에 추가할 수 있는 아이펀 엔진 기능들과 설정 가능한 파라미터는 다음과 같습니다.

Tip

기능 리스트는 알파벳 순으로 정렬되어있고 설정 파라미터는 자주 쓰이는 것들을 위에 나열하였습니다.

Tip

아래 기능들은 /usr/share/funapi/manifests/*/MANIFEST.json 에 정의되어있습니다.

8.1. 성능 최적화

8.1.1. EventDispatcher

아이펀 엔진에서 event 처리를 담당합니다.

  • event_threads_size: 메인 이벤트 쓰레드 갯수. (type=uint64, default=4)
  • enable_event_profiler: 이벤트 프로파일러의 활성화 여부 (type=bool, default=true)
  • enable_outstanding_event_profiler: 현재 실행되는 이벤트들을 프로파일링할지 여부 (type=bool, default=true)

직접 설정을 바꿀 일이 거의 없는 파라미터들

  • slow_event_log_threshold_in_ms: 어느 정도로 느린 이벤트들을 로그로 남길지 지정 (type=uint64, default=300)
  • event_timeout_in_ms: 이벤트를 타임 아웃시킬 때까지 걸리는 밀리초 시간 (type=uint64, default=30000)
  • enable_inheriting_event_tag: Event::Invoke() 를 호출할 때 별도의 event tag 를 지정하지 않을 경우, 호출한 event 의 event tag 를 상속 받을지 여부 (type=bool, default=true)
  • enable_random_event_tag: enable_inherit_event_tag 마저 활성화되지 않은 경우 Event::Invoke() 를 아무 event tag 없이 호출할 때 랜덤하게 event tag 를 생성해서 부여할지 여부. 만일 false 이면 null event tag 를 부여함 (type=bool, default=true)
  • enable_event_thread_checker: 만일 true 이면 event thread 가 처리 중 blocking 됐는지 여부를 1초에 한번씩 체크함 (type=bool, default=true)

8.1.2. IoService

I/O 처리를 위한 스레드 관리를 담당합니다. 내부적으로 boost::asio 의 io_service 에 대응합니다.

직접 설정을 바꿀 일이 거의 없는 설정들

  • internal_threads_size: 엔진 내부의 공용 쓰레드 갯수. (type=uint64, default=4)

8.1.3. Object

게임 object 를 관리하는 ORM 을 담당합니다. 이는 게임 object 를 다루기 위한 lock, database 등의 복잡한 코드를 직접 구현하지 않아도 되도록 자동으로 처리합니다. 자세한 내용은 ORM Part 1: Overview 를 참고해주세요.

  • enable_database: 실제 데이터베이스와의 연동을 활성화합니다. 간단한 테스트 또는 개발 단계에서는 false 로 지정하면 DB 를 준비하지 않아도 됩니다. (type=bool, default=false)
  • db_mysql_server_address: ORM 이 사용할 DB 주소. (type=string, default=”tcp://127.0.0.1:3306”)
  • db_mysql_id: ORM 이 사용할 MySQL user id (type=string, default=””)
  • db_mysql_pw: ORM 이 사용할 MySQL password (type=string, default=””)
  • db_mysql_database: ORM 이 사용할 MySQL database 이름 (type=string, default=””)
  • cache_expiration_in_ms: DB 에서 읽어들여서 캐싱하고 있는 오브젝트를 캐시에서 내릴 때까지 밀리초 (type=int64, default=300000)
  • copy_cache_expiration_in_ms: 원격 서버로부터 오브젝트를 복사해온 경우 이 오브젝트를 캐시에서 내릴때까지 밀리 초 (type=int64, default=700)
  • enable_delayed_db_update: DB 업데이트를 그때마다 하지 않고 딜레이 했다가 batch 처리할지 여부 (type=bool, default=false)
  • db_update_delay_in_second: DB 업데이트를 바로 하지 않고 batch 하는 경우, 작업을 딜레이 하는 초단위 시간 (type=int64, default=10)
  • db_read_connection_count: 읽기 작업을 위한 DB 연결 갯수 (type=int64, default=8)
  • db_write_connection_count: 쓰기 작업을 위한 DB 연결 갯수 (type=int64, default=16)
  • db_key_shard_read_connection_count: object_subsystem_sharding 사용시 key database 에 읽기 작업을 위한 DB 연결 갯수 (type=int64, default=8)
  • db_key_shard_write_connection_count: object_subsystem_sharding 사용시 key database 에 쓰기 작업을 위한 DB 연결 갯수 (type=int64, default=16)
  • db_character_set: DB 의 character set. 아이펀 엔진은 DB 의 설정이 아닌 이 설정 값을 따름. (type=string, default=”utf8”)
  • export_db_schema: 만일 true 인 경우 DB 스키마 생성 스크립트를 출력하고 종료. 필요한 DB 권한 참고. (type=bool, default=false)

직접 설정을 바꿀 일이 거의 없는 설정들

  • db_string_length: 문자열 속성의 경우 대응되는 SQL VARCHAR 길이 (type=int32, default=4096)
  • db_key_string_length: Key 인 문자열 속성의 경우 대응되는 SQL CHAR 의 길이 (type=int32, default=12)
  • use_db_stored_procedure: RAW SQL 문장 대신 stored procedure 를 사용할지 여부 (type=bool, default=true)
  • use_db_stored_procedure_full_name: 축약된 이름 대신 긴 이름의 stored procedure 를 사용할지 여부 (type=bool, default=true)
  • use_db_char_type_for_object_id: Object ID 를 표시하기 위해서 SQL DB 상에 BINARY(16) 대신 CHAR(32) 를 사용함 (type=bool, default=false)
  • enable_assert_no_rollback: 코드 상에 AssertNoRollback() 체크를 활성화 시킴. 원하지 않는 롤백 감지 참고. (type=bool, default=true)
  • use_db_select_transaction_isolation_level_read_uncommitted: Select 쿼리를 실행할 때 TRANSACTION ISOLATION LEVELREAD UNCOMMITTED 로 설정. false 일 경우에는 mysql 의 기본값이 사용됨. (type=bool, default=true)

8.1.4. SessionService

아이펀 엔진의 네트워킹을 제어합니다. Networking 에 대해서는 네트워킹 Part 1: 세션 을 참고하시면 됩니다.

포트 관련 설정들

  • tcp_json_port: JSON 패킷을 주고 받을 서버의 TCP 포트 번호. 0 이면 비활성화입니다. (type=uint64, default=8012)
  • udp_json_port: JSON 패킷을 주고 받을 서버의 UDP 포트 번호. 0 이면 비활성화입니다. (type=uint64, default=0)
  • http_json_port: JSON 패킷을 주고 받을 서버의 HTTP 포트 번호. 0 이면 비활성화입니다. (type=uint64, default=8018)
  • tcp_protobuf_port: Protobuf 패킷을 주고 받을 서버의 TCP 포트 번호. 0 이면 비활성화입니다. (type=uint64, default=0)
  • udp_protobuf_port: Protobuf 패킷을 주고 받을 서버의 UDP 포트 번호. 0 이면 비활성화입니다. (type=uint64, default=0)
  • http_protobuf_port: Protobuf 패킷을 주고 받을 서버의 HTTP 포트 번호. 0 이면 비활성화입니다. (type=uint64, default=0)

세션 관리 관련 설정들

  • session_timeout_in_second: 세션을 폐기하기 위해서 기다릴 초단위 유휴 시간. (type=uint64, default=300)
  • use_session_reliability: 세션 수준의 reliability 기능을 켬. 이는 세션을 다시 연결 할 때에도 패킷 손실이 발생하지 않는 것을 보장함. 자세한 내용은 세션의 메시지 전송 안정성 를 참고하세요. (type=bool, default=false)
  • use_sequence_number_validation: 만일 메시지의 시퀀스 번호가 잘못된 경우 메시지를 처리하지 않음. 이는 메시지 replay attack 을 막기 위함임. TCP 와 HTTP 에서만 동작함. 자세한 내용은 메시지 리플레이 공격 차단 를 참고하세요. (type=bool, default=false)

암호화 관련 설정들

암호화 관련해서 자세한 내용은 메시지 암호화 을 참고하세요.

  • use_encryption: 암호화 기능을 끄고 켬. (type=bool, default=false)

  • tcp_encryptions: 암호화 기능이 켜졌을 때, TCP 프로토콜에 적용될 암호화 방식들의 리스트.

    빈값으로 설정하여 암호화 하지 않거나 ife1, ife2, chacha20, aes128 중 하나 또는 모두 사용 가능함. 예) [] 또는 ["ife1", "ife2"], ["chacha20"]

  • udp_encryptions: 암호화 기능이 켜졌을 때, UDP 프로토콜에 적용될 암호화 방식들의 리스트.

    빈값으로 설정하여 암호화 하지 않거나 ife2 사용 가능. 예) [“ife2”]

  • http_encryptions: 암호화 기능이 켜졌을 때, HTTP 프로토콜에 적용될 암호화 방식들의 리스트

    빈값으로 설정하여 암호화 하지 않거나 ife2 사용 가능. 예) [“ife2”]

  • encryption_ecdh_key: 암호화 기능이 켜졌을 때, AES 와 ChaCha20 의 세션 키 교환을 위해 사용되는 서버 측 비밀키

TCP 관련된 설정들

  • disable_tcp_nagle: TCP 세션을 사용할 때 TCP_NODELAY 소켓 옵션을 세팅함으로써 Nagle 알고리즘 을 끔. (type=bool, default=true)

디버깅 및 모니터링 관련된 설정들

  • enable_http_message_list: 이 옵션이 켜져 있으면, HTTP 를 사용해서 GET /v1/messages 을 할 때 RegisterHandler() 함수로 등록된 message type 들을 볼 수 있게 해줍니다. 자세한 내용은 (고급) 아이펀 엔진의 네트워크 스택 의 HTTP 관련 내용을 참고하세요. 개발에 편리하지만 보안상 이유로 라이브 단계에서는 false 로 설정할 것을 권장합니다. (type=bool, default=true)

  • session_message_logging_level: 세션 메시지 로그 레벨. 0 은 로그를 남기지 않음. 1 은 패킷 타입과 길이 정보만 남김. 2는 패킷의 내용까지 남김. (type=uint64, default=0)

    Tip

    2 로 세팅하면 개발과정 중에 주고 받는 메시지를 확인할 때 유용합니다. 단, 서버에 부하를 줄 수 있으므로 상용 서비스에서는 권장하지 않습니다.

  • enable_per_message_metering_in_counter: Counter 를 통해서 클라이언트-서버간의 통신량에 대한 정보를 HTTP RESTful 로 제공합니다. 자세한 내용은 Counter 를 참고하세요. 개발에 편리하지만 서버에 상당한 과부하를 초래하기 때문에 false 로 설정할 것을 권장합니다. (type=bool, default=false)

  • json_protocol_schema_dir: 패킷 형식으로 JSON 을 사용할 때, JSON 패킷의 유효성을 검증할 스키마 파일이 들어있는 디렉토리 경로. 자세한 내용은 JSON 메시지 스키마 자동 검증 를 참고해주세요. (type=string, default=””)

  • ping_sampling_interval_in_second: RTT 계산을 위한 ping 샘플링 인터벌을 초단위로 지정합니다. 0 은 동작을 끕니다. 세션 Ping(RTT) 을 참고해주세요. (type=uint64, default=0)

  • ping_message_size_in_byte: 전송할 ping 메시지 크기. 세션 Ping(RTT) 을 참고해주세요. (type=uint64, default=32)

  • ping_timeout_in_second: 만일 지정된 시간 동안 Ping 응답이 오지 않을 경우 연결을 끊습니다. 0 은 동작을 중단함. 세션 Ping(RTT) 을 참고해주세요. (type=uint64, default=0)

직접 설정을 바꿀 일이 거의 없는 설정들

  • close_transport_when_session_close: 세션을 닫을 때 딸려있는 Transport(연결)도 같이 종료함. (type=bool, default=true)

  • send_session_id_as_string: 클라이언트-서버 통신 중에 세션 ID 를 보낼 때 이를 binary 로 할지 문자열로 할지 결정. (type=bool, default=true)

    Important

    이 기능을 쓰기 위해서는 클라이언트 플러그인 버전이 다음 이상이여야 합니다.

    • Unity3D: 190
    • Unreal4: 35
    • Cocos2d-x: 35
  • send_session_id_only_once: 클라이언트-서버 TCP, UDP 통신 중에 세션 ID 를 첫 메시지에서만 보내고 그 이후 메시지에는 생략하여 네트워크 트래픽을 줄일지 결정. (type=bool, default=false)

  • network_io_threads_size: 클라이언트-서버 패킷 처리를 담당할 쓰레드 갯수. (type=uint64, default=4)

8.2. 서버 관리 기능

8.2.1. ApiService

관리용 RESTful API 서버에 대응됩니다. 아이펀 엔진은 안전한 서버 관리를 위해서 클라이언트가 사용하는 HTTP 포트와 분리하여 별도의 포트에 관리용 API 서비스를 지원합니다.

  • api_service_port: 관리용 RESTful API 서비스를 돌리기 위한 로컬 TCP 포트 번호. (type=uint64, default=8015)
  • api_service_logging_level: 관리용 RESTful API 메시지들의 로그 레벨. 0 은 로그를 남기지 않음. 1은 에러인 경우만 남김. 2는 모든 요청에 대해 로그를 남김 (type=uint64, default=2)

직접 설정을 바꿀 일이 거의 없는 설정들

  • api_service_event_tags_size: 관리용 RESTful API 서비스를 동시에 돌리는 갯수 (type=uint64, default=1)

8.2.2. CounterService

Server 내부의 각종 상태정보를 HTTP RESTful API 로 노출합니다. 자세한 내용은 Counter 를 참고해주세요.

  • counter_flush_interval_in_sec: 외부에 노출되는 counter 값을 주기적으로 갱신하는데, 이 시간 간격을 초단위로 지정 (type=uint64, default=0)

직접 설정을 바꿀 일이 거의 없는 설정들

  • counter_monitoring_interval_in_sec: 단순히 외부로 내보내는 것 외에 값들을 모니터링하는 초단위 시간 간격 (type=uint64, default=30)
  • warning_threshold_event_queue_length: 카운터 모니터링 시 이 값 이상으로 이벤트 큐가 길어지면 경고 메시지를 출력함 (type=uint64, default=3000)
  • warning_threshold_outstanding_fetch_query: 카운터 모니터링 시 이 값 이상으로 DB 읽기 큐가 길어지면 경고 메시지를 출력함 (type=uint64, default=5000)
  • warning_threshold_outstanding_update_query: 카운터 모니터링 시 이 값 이상으로 DB 쓰기 큐가 길어지면 경고 메시지를 출력함 (type=uint64, default=5000)
  • warning_threshold_slow_query_in_sec: 카운터 모니터링 시 DB 읽기 또는 쓰기에 소요되는 시간(단위: 초)이 기준 값보다 길어질 때 경고 메세지를 출력함(type=uint64, default=1)
  • warning_threshold_slow_distribution_in_sec: 카운터 모니터링 시 분산 처리에 사용되는 Zookeeper/Redis 처리 시간(단위: 초)이 기준 값보다 길어질 때 경고 메세지를 출력함(type=uint64, default=3)

8.2.3. HardwareInfo

게임 서버 코드에서 하드웨어 정보를 읽어올 때 도움을 주는 기능입니다.

  • external_ip_resolvers: 공인 IP 를 얻어내기 위한 방법들을 나열합니다. 콤마로 구분되어야 하며, 먼저 기술된 것이 높은 우선 순위를 갖습니다. 만일 현재 방법이 실패하면 다음 방법을 시도하게 됩니다.

    NAT 설정의 경우는 공인 IP 를 수동으로 설정해야되며, 게임에 사용되는 프로토콜 별로 포트 번호 역시 기술할 수 있습니다. 기술할 수 있는 프로토콜 타입은 tcp+pbuf, tcp+json, udp+pbuf, udp+json, http+pbuf, http+json 이 있습니다. 자세한 내용은 서버의 IP 주소 알아내기 를 참고해주세요. (type=string, default=”aws,nic:eth0,nat:192.0.2.113:tcp+pbuf=8012:http+json=8018”)

  • discover_public_ip_from_aws_instance: 만일 게임 서버가 아마존 웹 서비스 (AWS) 상에서 동작한다면, 이 플래그는 AWS 의 http://169.254.169.254/latest/meta-data/public-ipv4 를 GET 함으로써 자신의 공인 IP 주소를 알아내게 함. (type=bool, default=false)

8.2.4. Logging

Logging 기능을 제어합니다. Logging 에 대한 자세한 내용은 게임 운영 Part 3: 플레이어 행동 로그 를 참고해주세요.

  • activity_log_output: 액티비티 로그 저장 경로. 다음의 값들이 가능합니다.

    • mongodb://user:passwd@host:port
    • json://path/to/file
    • file://path/to/file
    • syslog://name
    • stdout
    • glog

    json 이나 file, glog 의 경우는 –log_root_dir 아래 상대 경로로 생성됩니다.

    Syslog 는 Linux 에서만 동작합니다.

    MongoDB의 경우 user, password, port 정보는 선택적인 정보이며, 레플리카 셋을 사용하기 위해서 콤마로 구분해서 호스트 여럿을 쓸 수도 있습니다. (예, mongodb://user:passwd@host1,host2,user:passwd@host3) (type=string, default=”glog”)

  • activity_log_rotation_interval: 액티비티 로그를 로테이션할 초단위 시간 주기. (type=int32, default=60)

  • activity_log_write_schema: 액티비티 로그에 스키마 정보도 출력할지 여부 (type=bool, default=true)

직접 설정을 바꿀 일이 거의 없는 설정들

  • glog_flush_interval: 구글 로깅을 플러쉬하기 위한 초단위 시간 주기. (type=int32, default=1)
  • glog_retention_period_in_days: 구글 로그 파일의 보관 기간. 보관 기간이 지난 glog 파일은 삭제됩니다. (type=int32, default=30)

8.2.5. MaintenanceService

게임 서버를 정기 점검 모드로 바꿀 수 있는 기능입니다.

  • under_maintenance: 정기점검 모드로 전환할지 여부 (type=bool, default=false)
  • maintenance_data_path: 정기 점검 정보를 담고 있는 JSON 파일. 이 파일의 내용이 클라이언트에게 전송됩니다. (type=string, default=””)

8.2.6. RuntimeConfiguration

MANIFEST.json 의 일부 내용을 서버가 동작 중에도 동적으로 오버라이드 할 수 있게 해주는 기능입니다.

  • enable_runtime_configuration: Run-time 에 아이펀 엔진 설정을 수정할 수 있게 할지를 지정 (type=bool, default=true)

8.2.7. SystemInfo

서버의 메모리 사용량, CPU 사용량 등 OS 정보를 CounterService 를 통해 외부로 노출해주는 기능입니다.

  • systeminfo_refresh_interval_in_sec: 시스템 정보 갱신을 위한 초단위 주기. (type=int32, default=5)

8.3. 서버 측 임시 저장소

8.3.1. CrossServerStorage

서버간 데이터 공유를 지원하는 기능입니다. 자세한 내용은 분산처리 Part 2: 서버간 데이터 공유 를 참고해주세요.

  • enable_cross_server_storage: 해당 기능을 활성화시킬지 여부. Redis 기능 설정 파라미터enable_redis 도 true 로 세팅해야됨.(type=bool, default=false)
  • redis_tag_for_cross_server_storage: 서버간 데이터 공유를 위한 스토리지로 사용될 Redis 서버의 태그 값. (Tag 로 Redis Server 구분 참조) (type=string, default=””)

8.3.2. Redis

아이펀 엔진은 Redis 와의 손쉬운 연동을 지원합니다. 이 기능은 Redis 와의 연결을 제어합니다. 자세한 내용은 DB 접근 Part 2: Redis 를 참고해주세요.

  • enable_redis: Redis 기능을 활성화 시킴. (type=bool, default=false)

  • redis_mode: 사용할 Redis mode. redissentinel 입력 가능 (type=string, default=”redis”)

  • redis_servers: redis_moderedis 일 때, Redis 서버들의 주소와 인증 비밀 번호를 입력함.

    예시

    "redis_servers": {
      "": {
        "address": "127.0.0.1:6379",
        "auth_pass": ""
      }
    }
    
  • redis_sentinel_servers: redis_modesentinel 일 때, Redis senitnel 서버들의 주소와 인증 비밀 번호를 입력함.

    예시

    "redis_sentinel_servers": {
      "": {
        "master_name": "mymaster",
        "addresses": ["127.0.0.1:26379"],
        "auth_pass": ""
      }
    }
    

직접 설정을 바꿀 일이 거의 없는 설정들

  • redis_async_threads_size: Redis 비동기 명령어를 처리하는데 사용될 쓰레드 숫자. (type=uint64, default=4)

8.4. 인증과 빌링

8.4.1. AuthenticationClient

아이펀 엔진은 인증 처리를 위한 별도의 agent 를 가지고 있습니다. (Deprecated - iFun Authenticator 을 참고하세요.) 이 기능은 그 agent 와의 통신을 설정합니다.

  • use_authenticator: iFun Authenticator agent 와의 통신을 활성화시킬지 여부. 만일 false 이면 모든 검증 과정을 bypass 하고 성공으로 간주함. (type=bool, default=false)
  • remote_authenticator_ip_address: iFun Authenticator 가 돌고 있는 원격 호스트의 IP 주소. (type=string, default=”0.0.0.0”)
  • remote_authenticator_port: iFun Authenticator 가 돌고 있는 원격 호스트의 포트 번호. (type=uint64, default=0)

8.4.2. BillingClient

인증과 유사하게 아이펀 엔진은 별도의 billing agent 를 제공합니다. (외부 서비스 지원 Part 2: 결제 검증 를 참고해주세요.) 이 기능은 그 agent 와의 통신을 설정합니다.

  • use_biller: iFun Biller agent 와의 통신을 활성화시킬지 여부. 만일 false 이면 모든 검증 과정을 bypass 하고 성공으로 간주함. (type=bool, default=false)
  • remote_biller_ip_address: iFun Biller 가 돌고 있는 원격 호스트의 IP 주소. (type=string, default=”0.0.0.0”)
  • remote_biller_port: iFun Biller를 돌리고 있는 원격 호스트의 포트번호. (type=uint64, default=0)

빌링 처리별 추가로 필요한 설정들

  • googleplay_refresh_token: 구글 플레이 리프레시 토큰. (자세한 내용은 구글 플레이 개발자 정보 참고). (type=string, default=””)
  • googleplay_client_id: 구글 플레이의 클라이언트 아이디. (자세한 내용은 구글 플레이 개발자 정보 참고). (type=string, default=””)
  • googleplay_client_secret: 구글 플레이의 클라이언트 시크릿. (자세한 내용은 구글 플레이 개발자 정보 참고). (type=string, default=””)

8.5. 게임 내 소셜 기능

8.5.1. LeaderboardClient

인증과 유사하게 아이펀 엔진은 별도의 leaderboard agent를 제공합니다. (콘텐츠 지원 Part 1: 리더보드(랭킹) 를 참고해주세요.) 이 기능은 그 agent 와의 통신을 설정합니다.

  • use_leaderboard: iFun Leaderboard agent 와의 통신을 활성화시킬지 여부. false 로 지정할 경우 모든 랭킹 관련된 요청을 dummy 값으로 응답하는 테스트모드로 작동함. (type=bool, default=false)

  • leaderboard_agents: 접속하려는 리더보드 에이전트들의 연결 정보를 다음과 같은 format 으로 입력함.

    "leaderboard_agents": {
      // iFun Leaderboard agent를 tag 로 구분해서 각각의 접속 정보를 입력합니다.
      "<tag>": {
        // iFun Leaderboard 의 MANIFEST.json 에 기술된 server_tcp_port 를 입력합니다.
        "address": "127.0.0.1:12820"
      },
      ...
    }
    

8.5.2. MatchmakingServer

매치 메이킹 서버 기능을 담당합니다. 매치 메이킹 서버는 게임 서버와 별도로 존재할 수도 있고, 게임 서버 내에 같이 포함되어 동작할 수도 있습니다. 가령 이 MatchMakingServer 기능를 게임 서버의 MANIFEST.json 에 포함시키면 게임 서버 자체가 매치 메이킹 서버 기능을 포함해서 동작합니다. 만일 이 기능만 들어있는 별도의 서버를 만들면 별도로 동작합니다. 자세한 내용은 콘텐츠 지원 Part 2: 매치메이킹 을 참고해주세요.

  • enable_dynamic_match: 완결되지 않은 매치들끼리 합병해서 매치를 더 빨리 만들어낼지 여부 (type=bool, default=true)
  • enable_match_progress_callback: 매치메이킹이 진행되는 동안 진행 상황 알림을 받을지 여부. 만일 이 값이 true 이면 MatchmakingClient::StartMatchmaking() 에 넘겨진 progress_cb 가 주기적으로 호출되게 됨. (type=bool, default=false)

직접 설정을 바꿀 일이 거의 없는 설정들

  • concurrent_number_of_players_threshold: 매치 메이킹 서버가 동시에 처리할 수 있는 플레이어 수 지정. 내부 메모리 구조 할당을 위해서 설정이 필요. (type=int64, default=3000)

8.6. 분산 처리 및 서버 확장

8.6.1. AccountManager

플레이어의 로그인, 로그아웃, 서버간 이동 등의 기능을 담당합니다. 이 기능은 서버가 여러대 있는 분산 환경에서도 동작합니다.

  • redirection_strict_check_server_id: 클라이언트가 다른 서버로 이동해서 연결하는 경우 서버 ID 체크를 함. (type=bool, default=true)
  • redirection_secret: 클라이언트가 다른 서버로 이동해서 연결하는 경우 검증하기 위한 비밀 키 (type=string)

8.6.2. MulticastServer

멀티캐스팅과 채팅 기능을 제어합니다.

  • max_member_count_per_channel: 채널 당 유저 정원을 지정합니다. 0 이면 무제한으로 지정됩니다. 0 이 아닌 경우 2 이상 부터 지정 가능합니다. (type=uint64, default=0)

8.6.3. RpcService

서버간 통신을 제어합니다.

  • rpc_enabled: RPC 기능 및 RPC 에 의존적인 다른 기능들도 활성화 시킴. (type=bool, default=false)

  • rpc_threads_size: RPC 처리를 담당하는 쓰레드 숫자 (type=uint64, default=4)

  • rpc_port: RPC 서비스에 이용될 TCP 포트 번호. (type=uint64, default=8015)

  • rpc_nic_name: RPC 통신에 사용될 네트워크 인터페이스(NIC). 보안상의 이유와 클라우드 외부 네트워크 사용량 감소를 위해 내부망에 연결되는 네트워크 카드를 선택하는 것이 좋음. (type=string, default=””)

  • rpc_use_public_address: RPC 처리를 위해 NIC 주소가 아닌 public IP 를 사용할 것을 강제. 이는 클라우드 환경처럼 NIC 의 IP 가 private IP 이고 public IP 가 별도인 경우 유용함. (type=bool, default=false)

  • rpc_tags: 해당 서버에 지정된 태그들. 코드 안에서 특정 태그를 가진 서버 리스트를 가져오는 것이 가능함

    예시: 아래처럼 지정할 경우 코드에서 dungeon_server 태그를 가진 서버 리스트나, level:1-5 태그를 가진 서버만 뽑아올 수 있음.

    "rpc_tags": [ "dungeon_server", "level:1-5" ]
    
  • rpc_message_logging_level: RPC 메시지들의 로그 레벨. 0 이면 로그를 남기지 않음. 1이면 트랜잭션 ID, 상대 서버 ID, 메시지 타입, 길이를 남김. 2이면 앞의 정보에 메시지 바디까지 남김. (type=uint64, default=0)

직접 설정을 바꿀 일이 거의 없는 설정들

  • rpc_backend_zookeeper: RPC 통신을 하는데 Zookeeper 를 활용함 (type=bool, default=true)
  • rpc_disable_tcp_nagle: TCP 세션을 사용할 때 TCP_NODELAY 소켓 옵션을 세팅함으로써 Nagle 알고리즘을 끔. (type=bool, default=true)
  • enable_rpc_reply_checker: true 로 세팅되면 5초 이내 RPC 응답이 없을 경우 경고 메시지를 출력함. (type=bool, default=true)

8.6.4. ZookeeperClient

아이펀 엔진이 서버간 통신을 위해 Zookeeper 를 사용할 때 Zookeeper 와의 연결을 제어합니다.

  • zookeeper_nodes: Zookeeper 서버 리스트들. 콤마로 구분된 ‘아이피:포트’ 형태의 리스트. (type=string, default=”localhost:2181”)
  • zookeeper_client_count: Zookeeper 에 한번에 몇개의 연결을 맺을지 지정. (type=uint64, default=4)
  • zookeeper_session_timeout_in_second: Zookeeper 세션 타임아웃 시간. (type=uint64, default=60)
  • zookeeper_log_level: Zookeeper 라이브러리의 로그 레벨. (type=uint64, default=1)

8.7. 클라이언트 지원

8.7.1. AppInfo

현재 버전이나 허용되는 과거 버전 등을 관리할 수 있고, 패치가 필요한 경우 URL 등을 기술할 수 있습니다. 또한 인증이나 billing 은 어떻게 처리해야되는지도 지정할 수 있습니다.

클라이언트 버전 관련 설정들

  • client_current_version: 현재 게임 클라이언트 버전. (type=string, default=”000”)

  • client_compatible_versions: 최신 버전은 아니지만, 접속 가능한 클라이언트 버전 리스트

    예시

    "client_compatible_versions": ["0.1", "0.2"]
    
  • client_update_info: 클라이언트 업데이트 정보. (type=string, default=””)

  • client_update_uri: 업데이트된 클라이언트를 받아올 수 있는 URI. (대개 앱 장터) (type=string, default=””)

인증 방식에 대한 설정들

  • app_auth_service_provider: 클라이언트 인증을 처리하는 방식을 지정합니다. 이에 따라 AuthenticationService 가 동작합니다. (type=string, default=””)
  • app_id: 인증을 처리하는 쪽에서 인식할 수 있는 애플리케이션 ID 입니다. 예를 들어 앱 장터에서 애플리케이션 ID 등이 됩니다. (type=string, default=””)
  • app_password: 인증 처리를 위해서는 애플리케이션 ID 외에도 그에 따른 비밀 번호를 같이 입력해야될 수도 있습니다. 이 설정은 그 비밀 번호를 지정합니다. (type=string, default=””)

8.7.2. ClientResourceService

클라이언트의 리소스 데이터가 최신인지 확인하거나 패치 URL 을 전송해주는 등의 도움을 주는 기능입니다. 자세한 내용은 클라이언트 지원 Part 2: 클라 리소스 를 참고해주세요.

  • use_client_resource_service: 기능을 활성화 시킬지 여부 (type=bool, default=false)
  • client_resource_service_port: 클라이언트 리소스 서비스가 바인딩할 HTTP 포트. (type=uint64, default=0)
  • client_resource_dir: Client 가 다운로드 받을 리소스를 저장하는 디렉토리 경로. (type=string, default=””)
  • client_resource_url_base: 클라이언트 리소스를 받기 위한 베이스 URL (예, CDN 베이스 경로) 만일 이것이 세팅되면, 클라이언트 리소스 서비스는 파일 리스트만 클라이언트에게 전송하고 실제 파일은 해당 베이스 URL 에서 받게 redirect 한다. (type=string, default=””)
  • client_resource_list_url: 클라이언트 리소스들의 리스트를 담고 있는 파일의 URL. 만일 이 값이 설정되어있으면, client_resource_dir 은 무시됨. (type=string, default=””)
  • client_resource_max_file_size: 한 클라이언트 리소스 파일의 최대 사이즈. 바이트 단위. (type=uint64, default=10485760)

직접 설정을 바꿀 일이 거의 없는 설정들

  • client_resource_service_threads_size: 클라이언트 리소스 서비스에 할당된 쓰레드 갯수. (type=uint64, default=2)

8.8. 게임 콘텐츠 구현

8.8.1. ResourceManager

게임 서버에 기획 데이터를 읽어들이는데 도움이 되는 기능입니다. 자세한 내용은 콘텐츠 지원 Part 4: 기획 데이터 를 참고해주세요.

  • game_json_data_dir: JSON 형태로 된 게임 기획 데이터가 있는 디렉토리 경로. (type=string, default=””)
  • enable_game_data_mysql: 게임 기획 데이터를 MySQL 에서 읽을지 여부. (type=bool, default=false)
  • game_data_mysql_server: 게임 기획 데이터를 담고 있는 MySQL 서버 연결 정보. (type=string, default=”localhost:3306”)
  • game_data_mysql_username: 게임 기획데이터를 담고 있는 MySQL 서버의 유저명. (type=string, default=”funapi”)
  • game_data_mysql_password: 게임 기획데이터를 담고 있는 MySQL 서버의 비밀번호. (type=string, default=”funapi”)
  • game_data_mysql_database: 게임 기획 데이터를 담고 있는 MySQL 데이터베이스 이름. (type=string, default=”game_data”)
  • game_data_mysql_character_set: 게임 기획 데이터 DB 와의 연결에 사용될 character set (type=string, default=”utf8”)
  • game_data_mysql_tables: 게임 기획데이터에 해당되는 MySQL 테이블들 이름. 콤마로 구분됨. (type=string)

8.9. 기타

아래 기능들은 설정 파라미터 없이 유무 만으로 동작이 결정되는 기능 혹은 굉장히 저수준의 기능라 일반적으로 다룰 일이 없는 기능들입니다.

8.9.1. Curl

아이펀 엔진에 내장되어있는 HTTP 클라이언트에 대응하는 기능입니다.

  • curl_threads_size: CURL 에 할당된 쓰레드 갯수 (type=int64, default=1)

8.9.2. RandomGenerator

Random 숫자를 생성하기 위한 component 입니다.

8.9.3. Timer

게임 프로그래머가 사용할 수 있는 Timer 입니다. 게임 내 Tick 처럼 주기적으로 처리되어야 하는 작업들은 Timer 의 핸들러 안에서 처리하면 됩니다.

8.9.4. WallClock

아이펀 엔진은 시간 동기화로 인해 시계가 뒤로 돌아가는 것을 방지하기 위해서 monotonic clock 을 사용합니다. 하지만 monotonic clock 은 사람이 읽는 것이 어렵기 때문에, 이를 위해 WallClock 도 제공합니다.