[[분류:마인크래프트]] [[분류:통신 소프트웨어]] [[파일:external/cdn.pocketmine.net/PocketMine-h.png]] ||<-2><:> '''PocketMine-MP'''|| ||<:>'''개발'''||<:>비공식 [[오픈 소스]] 프로젝트|| ||<:>'''라이선스'''||<:>[[GPL]], [[LGPL]]|| ||<:>'''지원 운영체제''' ||<:>[[Microsoft Windows]], [[Linux]],[br][[macOS]]|| ||<:>'''언어'''||<:>[[PHP]]|| ||<:>'''공식'''||<:>[[https://pmmp.io/|홈페이지]] [[https://forums.pmmp.io/|포럼]] [[https://github.com/pmmp|GitHub]] [[https://crowdin.com/project/pocketmine|Crowdin 프로젝트[* 아래의 구 공식 프로젝트와 같은 페이지다.]]]|| ||<:>'''구 공식'''||<:>[[https://www.pocketmine.net/|홈페이지]] [[https://forums.pocketmine.net/|포럼]] [[https://github.com/PocketMine|GitHub]] [[https://twitter.com/PocketMine|Twitter]] [[https://twitter.com/PocketMineDev|GitHub 저장소[br]커밋 업데이트 알림 Twitter]] [[https://translate.pocketmine.net/|Crowdin 프로젝트[* 위의 공식 프로젝트와 같은 페이지다. 다만 한 가지 다른 것은 이쪽은 구 도메인이라는 것.]]]|| [목차] == 개요 == 구 공식 홈페이지 영문 > Put '''no limits''' to your imagination. > '''Control all''' aspects of gameplay. > Play on multiple worlds, '''for free'''. 한국어[* 아래의 한국어 번역은 PocketMine-MP 구 웹사이트에서 현재 사용되는 번역이 아니라 PocketMine-MP Crowdin에서 승인된 번역이다. 구 웹사이트는 후술할 내용으로 인해 나중에도 거의 갱신이 없을 것이다.] > 상상력에 '''한계'''를 두지 마세요. > 게임 플레이의 모든 측면을 '''제어'''할 수 있습니다. > 여러 개의 세계에서 '''무료로''' 플레이하세요. 공식 홈페이지 > Limitless customization, full gameplay control. 100% open source and free. 번역하면 > 한계 없는 사용자 정의, 전체 게임 플레이 제어. 100% 오픈 소스이고 무료입니다. [[PocketMine-MP]]는 소히 세르반테스(Shoghi Cervantes)[* 후에 [[MCBE]] 개발자로 스카웃되었다.][*이름 본 개발자는 스페인인이다. [[스페인어]]에서 H는 묵음이 되고 G는 단어의 끝에 있거나 E나 I 앞에 있으면 끓는 소리(/x/)가 된다. C도 E나 I 앞에 있으면 영어의 TH(예:'''th'''row) 같은 발음이 나나 한글에서는 ''ㅅ''으로 표기된다. [[영어]]에서는 ''쇼기 서밴티즈''이다. (네이버 어학사전)]를 필두로 한, [[PHP]]로 제작된 비공식 [[오픈 소스]][* [[GitHub]]에 소스 코드가 [[https://github.com/pmmp/PocketMine-MP|공개되어 있다.]] [[라이선스]]는 [[LGPL]].][* 주의할 점은 PocketMine-MP 하위 submodule인 RakLib은 '''GPL'''이다. 예외적으로, PocketMine-MP 및 관련 플러그인에서 간접적으로 사용하는 것에는 GPL이 적용되지 않는다.] [[마인크래프트/베드락 에디션|마인크래프트: 베드락 에디션]] [[서버]] 프로그램으로, 확장성 높은 플러그인 API를 지원하기 때문에 다양한 기능을 추가할 수 있는 것이 가장 큰 특징이다. 주로 [[PMMP#s-1]]라고 줄여 부른다. [[마인크래프트]] 자바 에디션 버전을 좀 해 본 사람들은 [[MCBE|BE]]판 [[마인크래프트/플러그인|Bukkit]]이라고 생각하면 편하다.[* 소스 코드를 보면 알겠지만 Bukkit을 거의 그대로 베꼈다(!)][* 1.4때 코드를 갈아엎으면서 API 구조를 Bukkit과 비슷하게 디자인했다.] == 지원 기기 == * [[Microsoft Windows]] * [[Linux]][* [[Ubuntu]], [[CentOS]] 같은 운영체제 사용을 권장한다.] * [[macOS]] == 장점 == === 간편한 설치 === [[Microsoft Windows]]의 경우 Microsoft Visual C++ 2010 Redistributable Package[* [[https://www.microsoft.com/en-us/download/confirmation.aspx?id=5555|x86 다운로드]][br][[https://www.microsoft.com/en-us/download/details.aspx?id=14632|x64 다운로드]] ]를 설치한 후에 PocketMine-MP 실행기 ZIP 파일을 압축만 풀어서 실행하면 서버가 실행된다. 자세한 설치법은 이 [[https://cafe.naver.com/minecraftgame/1753066|가이드]]를 참고하자. [[Linux]], [[macOS]]의 경우 관련 라이브러리 설치[* [[Perl]], [[GCC|gcc]], [[make]] 등] 후 PocketMine-MP 설치 스크립트만 실행하면 자동으로 설치된다. 설치 후엔 바로 실행이 가능하다. 한때는 [[iOS]]를 지원했으나 지금은 하지않는다. ~~애초에 Android든 iOS든 간에 휴대전화에서 서버를 실행한다는 생각 자체가 미친 짓이다.~~ 현재 안드로이드 운영체제에서 플레이스토어로 쉽게 다운받고 실행이 가능하다 === 기능 확장(플러그인) === 위에서 말했듯이 API를 제공하고 있어 이를 통하여 기능을 확장할 수 있다. 전세계적으로 쓰이는 구동기이다보니 예시로 볼 플러그인도 상당하다. 경제, 미니게임 등등은 대부분 플러그인을 통해서 구현된 것이다. 거의 모든 PocketMine-MP들은 이미 최소한이라도 플러그인을 사용하고 있다. ~~너무 많이 넣으면 마인크래프트가 아니라 새로운 게임이 돼버린다.~~ ~~이쯤 되면 마인크래프트는 단순한 GUI 제공자 ~~ === 성능 향상과 장기간 가동이 쉬움 === [[마인크래프트/베드락 에디션|MCBE]]를 통해서 여는 서버는 상대방이 할 때 서버를 연 사람도 동시에 플레이해야 했기 때문에 24시간 서버를 계속 돌리기도 어려웠을뿐더러, 렌더링 같은 성능을 많이 잡아먹는 기능들도 함께 돌아가고 있었으며, 모바일은 상대적으로 PC보다 성능이 떨어지기 때문에 많은 플레이어를 수용하기 힘들었다. 하지만, PocketMine-MP의 등장으로 PC에서도 서버를 돌릴 수 있게 되어 위와 같은 문제점들이 해결됐다. 그러나 서버를 계속 켜두면 과부하가 있기 마련이다. 서버 재부팅을 수시로 해주자. == 문제점 == === PHP 언어 채택 === [[PHP]]는 태생적으로 [[스크립트 언어]]이기 때문에, 성능 한계가 '''엄연히''' 존재한다. 위에 서술하였듯, PocketMine-MP 1.3.12까지는 이러한 성능 한계가 드러나지 않았지만 1.4부터 상당히 많은 기능이 추가되면서[* 화살, 눈덩이 투척, Anvil 세계 형식 지원 등. Anvil은 [[마인크래프트]] 자바 버전에서 사용되는 것인데, 성능에 페널티가 있다. 이로 인해 PMAnvil이라는 Anvil 기반으로 제작된 PocketMine-MP 전용 형식이나 ChunkUtils 같은 확장이 제작되었다. 참고로 4.0.0부터는 LevelDB(MCBE가 사용하는 레벨 형식) 이외의 형식은 버리고 LevelDB만을 사용하게 된다. LevelDB 이외의 형식을 사용하는 세계는 불러올 때 LevelDB 형식으로 자동으로 변환된다. LevelDB만을 사용하게 된 이유는 256 이상의 블록 ID 등을 활용하기 위해서이다.] 점점 무거워지기 시작했다. 최근에 PHP 7이 나오면서 어느 정도 나아지기는 했다. ==== 성능의 한계 ==== 이러한 성능 하락을 해결하려면 코드를 경량화하거나 런타임 바이너리를 최적화해야 한다. 전자의 경우에는 [[https://github.com/PocketMine/PocketMine-Soft|PocketMine-Soft]]가 시도하고 있지만, 이쪽은 기존 PocketMine-MP 소스를 패치하는 형태라 소스 코드가 크게 변하는 현재는 사용하기 힘들고, 그마저도 청크 로드와 같은 설정 변경 정도이기 때문에 큰 성능 향상은 기대하기 힘들다. 문제는 이쪽도 5월 31일 이후로 업데이트가 멈췄다(...). 후자의 경우, JIT 컴파일러를 탑재한 [[PHP]] 7이 1.5에 적용되며 개편되었다. 2015년 9월 현재 최신 버전인 RC3의 경우 안정성은 ~~개판이지만~~떨어지지만 50% 이상의 성능 향상이 '''확연히''' 존재하며, 사용자들의 희망을 사고 있다. 또한, PHP 7에서는 ?? 연산자와 같은 코드 간결화를 위한 기능이나, 반환값 타입 명시와 같은 기능이 포함되어 있어 개발자들도 기대하고 있다. ~~물론 바꿔 말하면 그동안 작업한 플러그인을 뜯어고쳐야 할 수도 있다는 소리~~ 지금은 [[PHP]] 8이 나오며 그에 대한 적용이 예정되어 있다. ==== PHP 자체의 기능 부실 ==== '''그러나,''' 아무리 코드를 경량화하고 런타임을 교체한다 해도 [[PHP]] 고유의 한계가 분명히 존재한다. PHP는 애초에 코딩에 미숙한 초보자를 위한 단순한 웹 스크립트 언어였으며, 함수 이름의 비일관성, 보안 문제 등은 상당히 많은 비판을 받아왔다. 하지만 이러한 문제보다 PocketMine-MP에 가장 치명적인 문제는, '''동시성 지원이 부족하다'''는 것이다. 현재 PHP는 공식적으로 멀티스레딩을 지원하지 않는다. 다중 세션 처리가 필요한 웹 서버들은 프로세스를 여러 개 생성하는 방식으로 PHP-FPM을 사용하고, PocketMine-MP는 [[https://github.com/pmmp/pthreads|krakjoe의 pthreads 확장 모듈]]을 포크해[* krakjoe가 pthreads 확장 모듈 대신 [[https://github.com/krakjoe/parallel|parallel]] 확장 모듈을 만들어 dktapps가 직접 유지 보수중이다.] 사용한다. 하지만 이는 [[Java]]의 Thread 객체나, [[Python]]의 multiprocessing 모듈보다 떨어지며[* 심지어 스레드끼리 자료 공유도 Threaded 객체를 통한 배열밖에 사용할 수 없다! ~~Thread로 짜본 사람들은 알겠지만 이게 상당히 암 걸린다~~], [[Go(프로그래밍 언어)|Go]]의 고루틴보다는 한참 먼 기능이다.[* 비동기 스레드에 인스턴스를 넣으면 오류 나는 것부터가 [[답이 없다]].] 애초에 언어의 기본 기능이 아닌 것을 확장 모듈로 추가한 것은 감사해야 할 일이지만, 현재 PocketMine에서 스레드를 사용하는 방식은 소켓이나 맵 생성기와 같은 부분만 비동기로 처리하고, 아이템 처리와 같은 주요 기능은 메인 스레드에서 Tick을 이용한 '''루프'''로 처리하는 방식이다. 시분할도 사용하지 않는다. 이래서는 아무리 CPU 코어가 많아도 성능 향상을 기대하기 어렵다. 차라리 1코어당 성능이나 클럭 수를 높여야 한다. [* 물론 여러 개의 서버를 여는 곳은 멀티코어를 통해서 성능이 향상되겠지만, 그런 서버가 그리 흔한 것은 아니다.] 사실, 이러한 문제점을 가지고 초기 개발자인 Shoghi Cervantes나 pthreads 모듈 개발자인 krakjoe를 비난할 수는 없다. 애초에 PocketMine-MP는 '''서버용으로 제작된 물건이 아니'었'기 때문이다.''' 원래 PocketMine-MP는 서버-클라이언트 간의 네트워크 프로토콜을 [[리버싱]]하기 위해 개발되었으며, 사용자들이 실제 서버로 사용하기 시작하자 그때야 서버로 전향하여 게임플레이 기능을 추가한 것이기 때문이다. == 이야깃거리 == 한때 메인 개발자인 Shoghi Cervantes가 넉 달 가까이(!) 작업을 하지 않고 있더니 PocketMine-MP를 떠나버렸다. 심지어 개발에 많은 도움을 주던 PEMapModder마저 PocketMine-MP 포럼 자체를 [[https://forums.pocketmine.net/threads/farewell.16590/|탈퇴했다]][* 현재는 SOF3라는 이름으로 활동중이다. [[https://github.com/SOF3]]] 그 뒤 PocketMine-MP는 결국 GitHub 저장소를 옮겨서 업데이트하고 있다.[[https://github.com/pmmp/PocketMine-MP/|#]] 현재 메인으로 프로젝트를 주도하는 개발자는 [[https://github.com/dktapps|dktapps]][* 원래 iTXTech의 Genisys를 개발하던 사람이다.]이고 이 사람과 함께 몇몇 개발자가 같이 제작 중이다.[* 사실상 모든 것이 dktapps에 의해 유지되고 있다 해도 무방하다.] PocketMine-MP의 1대 메인 개발자인 Shoghi Cervantes는 상당히 기이한 행보를 보이고 있는데, PocketMine-MP 개발을 떠날 때 사람들에게 아무런 말도 하지 않고 떠났으며, Twitter 등으로 PocketMine-MP에 대해 하는 질문은 다 무시하고 있다. 2017년 10월 무렵부터는 2대 메인 개발자인 dktapps의 PocketMine-MP 관련 트윗과 기타 일부 트윗에 반응을 보였다. 그리고 마침내, 2017년 11월 18일에 Twitter에 PocketMine-MP와 관련된 트윗을 직접 올렸으며, 사람들과 이에 대해 대화를 했다. [[https://twitter.com/shoghicp/status/931944287780122629|링크]] Shoghi Cervantes의 별명으로 '''Blame Shoghi(#BlameShoghi)'''가 있는데, 이는 해석하면 '''Shoghi를 비난해라'''라는 뜻이다. 이 별명은 2015년 무렵(추정)에 [[https://account.lbsg.net/blameshoghicp.php|Lifeboat 웹사이트에 Shoghi Cervantes를 비난하는(?) 페이지]]가 생긴 것에서 유래되었으며[* 현재는 페이지가 삭제되었다.], 현재까지도 계속 사용되고 있다. 심지어는 [[마인크래프트/베드락 에디션|베드락 에디션]]의 시작 메시지에도 '''Blame shogchips!'''라는 메시지가 있고, [[https://twitter.com/SeargeDP/status/922446729705816064|Mojang 내 직원도 Twitter에 이 해시 태그를 사용해서 글을 올린다.]] 왜 욕을 먹는지 이유라도 알려 달라며 댓글을 단 Shoghi는 덤. ~~뭐든지 '''Blame Shoghi'''~~ == 그외 다른 서버 구동기 == [include(틀:상세 내용,문서명=마인크래프트/멀티플레이/베드락 에디션,문단=3.2)]