개요

Dynmap은 마인크래프트에서 웹 지도를 렌더링하고 사용할 수 있게 해주는 플러그인이다. 다이나믹맵이라고도 부른다. 서버의 지도를 웹으로 볼 수 있기 때문에 건축 서버에서 특히 유용한 플러그인이다.

특징

지도 렌더링 플러그인인 만큼 서버 자원을 많이 소모한다는 것이 특징이다. 그렇기 때문에 대형 서버에서는 일정 수준 이상의 서버 성능을 필요로 할 수 있다.

다이나믹맵은 각 청크를 배율별로 사진 찍듯 렌더링하는 방식이기 때문에 서버에 각기 다른 이미지 파일로 저장되며, 따라서 맵이 큰 서버의 경우 렌더링 시간이 오래 걸리는 것은 물론 서버에 저장되는 파일 수도 기하급수적으로 늘어나 서버 이전 또는 파일 삭제에 애를 먹을 수도 있다. 향후 다이나믹맵 렌더링 이미지 타일을 삭제하거나 이동시킬 때는 SSD를 사용하는 것이 속도 향상에 도움이 될 것이다.

설정

웹 설정

내부 서버를 사용하는 경우

마인크래프트 서버를 구동하는 서버와 다이나믹맵이 렌더링한 타일과 웹 구성 파일을 저장하는 서버가 동일한 경우를 말한다. 대부분의 사례가 이에 해당할 것이며, 플러그인을 설치하고 별도의 설정을 하지 않았다면 기본적으로 플러그인 폴더 내에 웹 구성 파일과 맵 타일 이미지가 저장된다.

외부 서버를 사용하는 경우

반면에 외부 서버를 이용해 마인크래프트 서버를 구동하는 컴퓨터와 다른 서버에서 웹 지도를 운영할 수도 있는데, 다이나믹맵 서버를 굴리기 위해서는 어느 정도 감당 가능한 트래픽 용량과 성능이 필요하다는 것을 감안하여야 한다. 만약 서버가 켜져있지 않은 상태에서도 웹 지도를 계속 구동하고 싶다면 본 문단에서 소개하는 방법을 사용하면 된다. 물론 지도 타일 이미지가 별도 서버에 저장되는 만큼 서버 파일 이동도 비교적 자유롭다.

이 문단은 백엔드 웹 개발에 대한 지식을 어느정도 갖추었다는 가정하에 작성되었습니다.

MySQL/MariaDB 설정하기

데이터베이스 기능을 활용하기 위해서는 MySQL 또는 MariaDB[1] 설정이 필요합니다.

데이터베이스 만들기

다음 쿼리 문을 이용해 데이터베이스를 생성해줍니다.

mysql -u 유저이름 -p 비밀번호(존재할 경우)

mysql> CREATE DATABASE 생성할데이터베이스이름;

mysql> exit

Dynmap 플러그인 설치

마인크래프트 서버에 Dynmap 플러그인을 설치하고 서버 실행 후 종료합니다.

configuration.txt 파일 수정

다이나믹맵 플러그인 폴더 내에 있는 configuration.txt을 수정합니다. 만일을 대비해 수정하기 전 파일을 미리 다른 곳에 백업해주세요.

수정 전:

storage:
  # Filetree storage (standard tree of image files for maps)
  type: filetree
  # SQLite db for map storage (uses dbfile as storage location)
  #type: sqlite
  #dbfile: dynmap.db
  # MySQL DB for map storage (at 'hostname':'port' with flags "flags" in database 'database' using user 'userid' password 'password' and table prefix 'prefix')
  #type: mysql
  #hostname: localhost
  #port: 3306
  #database: dynmap
  #userid: dynmap
  #password: dynmap
  #prefix: ""
  #flags: "?allowReconnect=true"

수정 후:

storage:
  # Filetree storage (standard tree of image files for maps)
  #type: filetree <- 꼭 주석 처리하세요!
  # SQLite db for map storage (uses dbfile as storage location)
  #type: sqlite
  #dbfile: dynmap.db
  # MySQL DB for map storage (at 'hostname':'port' with flags "flags" in database 'database' using user 'userid' password 'password' and table prefix 'prefix')
  type: mysql
  hostname: <mysql 서버 ip주소>
  port: <mysql 서버포트: 대개 3306>
  database: <앞서 생성했던 데이터베이스 이름>
  userid: <mysql 사용자명>
  password: <mysql 사용자비밀번호>
  prefix: "" #접두어를 달고 싶다면 이 부분을 수정하세요.
  flags: "?allowReconnect=true"

컴포넌트 설정 변경하기

configuration.txt 폴더에서

- class: org.dynmap.InternalClientUpdateComponent

이 부분을 찾아 다음과 같이 수정합니다.

모두 주석 처리해주는 것입니다.

수정 전:

  - class: org.dynmap.InternalClientUpdateComponent
    sendhealth: true
    sendposition: true
    allowwebchat: true
    webchat-interval: 5
    hidewebchatip: true
    trustclientname: false
    includehiddenplayers: false
    # (optional) if true, color codes in player display names are used
    use-name-colors: false
    # (optional) if true, player login IDs will be used for web chat when their IPs match
    use-player-login-ip: true
    # (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
    require-player-login-ip: false
    # (optional) block player login IDs that are banned from chatting
    block-banned-player-chat: true
    # Require login for web-to-server chat (requires login-enabled: true)
    webchat-requires-login: false
    # If set to true, users must have dynmap.webchat permission in order to chat
    webchat-permissions: false
    # Limit length of single chat messages
    chatlengthlimit: 256
  # # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky)
  # hideifshadow: 4
  # # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky)
  # hideifundercover: 14
  # # (Optional) if true, players that are crouching/sneaking will be hidden
    hideifsneaking: false
    # If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self)
    protected-player-info: false
    # If true, hide players with invisibility potion effects active
    hide-if-invisiblity-potion: true
    # If true, player names are not shown on map, chat, list
    hidenames: false

수정 후:

 # - class: org.dynmap.InternalClientUpdateComponent
    #sendhealth: true
    #sendposition: true
    #allowwebchat: true
    #webchat-interval: 5
    #hidewebchatip: false
    #trustclientname: false
    #includehiddenplayers: false
    # (optional) if true, color codes in player display names are used
    #use-name-colors: false
    # (optional) if true, player login IDs will be used for web chat when their IPs match
    #use-player-login-ip: true
    # (optional) if use-player-login-ip is true, setting this to true will cause chat messages not matching a known player IP to be ignored
    #require-player-login-ip: false
    # (optional) block player login IDs that are banned from chatting
    #block-banned-player-chat: true
    # Require login for web-to-server chat (requires login-enabled: true)
    #webchat-requires-login: false
    # If set to true, users must have dynmap.webchat permission in order to chat
    #webchat-permissions: false
    # Limit length of single chat messages
    #chatlengthlimit: 256
  # # Optional - make players hidden when they are inside/underground/in shadows (#=light level: 0=full shadow,15=sky)
  # hideifshadow: 4
  # # Optional - make player hidden when they are under cover (#=sky light level,0=underground,15=open to sky)
  # hideifundercover: 14
  # # (Optional) if true, players that are crouching/sneaking will be hidden
    #hideifsneaking: false
    # If true, player positions/status is protected (login with ID with dynmap.playermarkers.seeall permission required for info other than self)
    #protected-player-info: false
    # If true, hide players with invisibility potion effects active
    #hide-if-invisiblity-potion: true
    # If true, player names are not shown on map, chat, list
    #hidenames: false

그 다음 바로 아래에 있는 항목의 주석 처리를 제거해줍니다.

수정 전:

  #- class: org.dynmap.JsonFileClientUpdateComponent
  # writeinterval: 1
  # sendhealth: true
  # sendposition: true
  # allowwebchat: true
  # webchat-interval: 5
  # hidewebchatip: false
  # includehiddenplayers: false
  # use-name-colors: false
  # use-player-login-ip: false
  # require-player-login-ip: false
  # block-banned-player-chat: true
  # hideifshadow: 0
  # hideifundercover: 0
  # hideifsneaking: false
  # # Require login for web-to-server chat (requires login-enabled: true)
  # webchat-requires-login: false
  # # If set to true, users must have dynmap.webchat permission in order to chat
  # webchat-permissions: false
  # # Limit length of single chat messages
  # chatlengthlimit: 256
  # hide-if-invisiblity-potion: true
  # hidenames: false

수정 후:

  - class: org.dynmap.JsonFileClientUpdateComponent
    writeinterval: 1
    sendhealth: true
    sendposition: true
    allowwebchat: true
    webchat-interval: 5
    hidewebchatip: false
    includehiddenplayers: false
    use-name-colors: false
    use-player-login-ip: false
    require-player-login-ip: false
    block-banned-player-chat: true
    hideifshadow: 0
    hideifundercover: 0
    hideifsneaking: false
  # # Require login for web-to-server chat (requires login-enabled: true)
    webchat-requires-login: false
  # # If set to true, users must have dynmap.webchat permission in order to chat
    webchat-permissions: false
  # # Limit length of single chat messages
    chatlengthlimit: 256
    hide-if-invisiblity-potion: true
    hidenames: false

Dynmap 내부 서버 중지하기

configuration.txt 파일에서 disable-webserver 항목을 찾아 falsetrue로 바꿔줍니다.

Web Sever URL 변경

수정 전:

url:
    # configuration URL
    #configuration: "up/configuration"
    # update URL
    #update: "up/world/{world}/{timestamp}"
    # sendmessage URL
    #sendmessage: "up/sendmessage"
    # login URL
    #login: "up/login"
    # register URL
    #register: "up/register"
    # tiles base URL
    #tiles: "tiles/"
    # markers base URL
    #markers: "tiles/"

수정 후:

url:
    # configuration URL
    configuration: "웹서버주소/MySQL_configuration.php"
    # update URL
    update: "웹서버주소/MySQL_update.php?world={world}&ts={timestamp}"
    # sendmessage URL
    sendmessage: "웹서버주소/MySQL_sendmessage.php"
    # login URL
    login: "웹서버주소/MySQL_login.php"
    # register URL
    register: "웹서버주소/MySQL_register.php"
    # tiles base URL
    tiles: "웹서버주소/MySQL_tiles.php?tile="
    # markers base URL
    markers: "웹서버주소/MySQL_markers.php?marker="

웹서버주소는 해당 파일이 위치한 경로를 정확하게 입력하여야 합니다.

서버 구동 후 종료

서버 구동 후 정상 작동하는지 확인한 다음 다시 종료합니다.

로그인 기능 활성화하려면

다이나믹맵 로그인 기능을 활성화하려면 SSL을 설치합니다.

각주

  1. MySQL과 완전히 호환되는 기능을 사용할 수 있으며, 일반적으로 더 권장됩니다.