때는 2023년 5월... 마인크래프트 1.20 프리릴리즈 7 버전이 출시하게 됨.
패치 내역을 보던 나는 2개 뿐인 변경사항 중 하나에 주목했음...
To improve safety, the game will now detect symbolic links used inside world directory.
안전성 향상을 위해, 이제 게임은 월드 디렉토리 내 심볼릭 링크를 감지함.
용어에 대해 간단히 설명하자면
디렉토리는 폴더로, 심볼릭 링크(이하 심링크)는 프로그램도 따라갈 수 있는 바로가기 정도로 이해하면 되겠음.
그렇다면 말이지.
심링크를 월드 파일에 적용하면 마인크래프트는 심링크를 따라서 가리키고 있는 파일을 불러올 것이고, 그 파일이 다른 월드의 파일이라면?
효과적으로 여러 월드의 다양한 요소를 이리저리 엮을 수 있게 됨.
아니면 완전히 다른 경로의 파일을 가르키게 해서 그 파일 내용을 월드 데이터로 덮어 써버릴 수도 있지!
때문에 보안 취약점으로 1.20에서 패치된 것이고. CVE-2023-33245
1.20 이후의 버전에서 별도로 허용하지 않은 심링크가 포함된 월드는 불러올 수 없고
별도로 허용하려고 해도 상대 경로를 이용하는 심링크는 허용이 안돼서 맵에 쓰기 부적절함. (직접 여러 방법을 시도해봤는데 안됐음. 실제로는 가능할 수 있음.)
굳이 그런게 아니더라도 처음 만들던 포함된 파일의 압축을 풀던 시스템 관리자 권한이 필요하기 때문에 매우 번거롭음.
그래서 실제로 사용할 때는 하드 링크를 사용함.
일반적으로 파일을 복붙하면 내용물만 같은 다른 파일이 만들어짐.
즉, 파일 1을 복붙한 파일을 편집한다고 한들 파일 1의 내용물이 변하지 않음.
마인크래프트에서 상자를 clone 명령어로 복제한 것처럼 말이지.
한편 하드 링크는 엔더 상자 같이 작동함.
파일 1에 대한 하드 링크를 만들고 그 파일을 편집하면 파일 1에도 반영됨.
물론 반대로도 되고.
정확히 "반영된다"라기 보다는 "애초에 같은 파일이다"가 맞겠음.
플레이어의 엔더 상자 공간이 각 엔더 상자마다 있지 않고, 모두 같은 공간인 것처럼.
하드 링크의 이점으로는 일단 관리자 권한이 필요하지 않음.
압축 파일을 해제할 때 귀찮게 추가 단계를 거치지 않아도 되지.
무엇보다 가장 좋은 점은 최신 버전의 마인크래프트에서 따로 설정을 거치지 않고도 실행이 가능하다는 것임.
단점으로는 우선 (반디집 기준으로) 배포 파일이 TAR 포맷으로 고정됨.
얘 밖에 하드 링크 지원을 안해서 다른 포맷으로 월드 파일 1개, 하드 링크 2개를 압축한다 치면 그냥 월드 파일 3개가 따로따로 들어가서 고장남...
게다가 TAR 포맷은 압축을 전혀 안하기 때문에 월드 파일 용량이 줄어들지 않아 상대적으로 큼.
다른 단점으로는 아직 존재하지 않는 파일에 대하여 링크할 수 없고, 상대 경로를 이용할 수 없다 정도인데...
이게 됐으면 같이 막혔을테니 넘기자.
그래서 어떻게 만드냐?
간단함. 검색을 하자.
1. 윈도우 검색 창에서 cmd를 검색해서 명령 프롬프트를 염.
2. cd 월드폴더경로 를 입력해서 링크하고 싶은 파일이 있는 디렉토리로 이동함.
3. mklink /h 생성할링크이름 링크될파일이름 을 입력해서 하드 링크를 생성함. 공백 포함 시 따옴표로 감싸주셈. 예시: mklink /h "this is link!" scoreboard.dat
4. 둘 중 아무거나 다른 월드에 넣으면 됨. 둘이 같은 파일이니까.
배포하는 법 (반디집 기준 - 7.0 이상에서만 하드 링크를 처리할 수 있음.)
1. 반디집으로 압축하기를 선택함.
2. 압축 형식을 TAR로 변경함.
3. 고급 압축 설정을 클릭함.
4. 하드 링크 정보 저장을 체크함.
5. 압축
6. 와! 배포!
하드 링크로 웬만한 파일은 다 엮을 수 있지만
월드를 열 때마다 재작성되는 level.dat은 엮을 수 없음.
그리고 이게 하필이면 싱글 플레이에서의 플레이어 정보, 게임룰, 날씨, 월드보더, 월드 생성 등등을 죄다 때려박아 넣은 파일이라서 해당 부분은 커맨드로 직접 구현해야 함...
data 폴더 안에 scoreboard.dat으로 스코어보드를, command_storage_(네임스페이스).dat으로 각 네임스페이스의 커맨드 스토리지(data get storage로 보는 그거)를 엮을 수 있으니 그나마 수월함.
아니 그냥 이런 방식으로 맵 만들지 마셈
진짜로
이해 못한사람 일단 나
이거 보고 신기해서 한 10분 공부 해봤음. 일단 윈도우에서 cmd에서 mklink라는 명령어로 만들더라구 그리고 이거 할라면 나는 관리자 권한이 필요했음. 대충 하는 법을 설명하자면 '1.txt'라는 파일을 만들고 '2.txt'에 동기화되는 형태?로 만드려면 cmd에서 관리자 권한으로 cmd를 연 뒤, 'cd (경로)'를 침 그 후에 'mklink /h 2.txt 1.txt'를 치면 하드 링크가 생성 되는 것 같음. /h를 빼도 뭔가가 되는 것 같긴 한데.. 일단 그건 옮기면 연결이 없어짐. 내가 볼땐 /h를 빼면 다른 사람의 컴퓨터에 들어가면 연결이 사라질 것 같음
/h를 빼면 글에서 설명한 심링크가 생성됨 상대 경로를 사용하면 맵 파일을 옮겨도 연결을 유지할 수 있지만 설명했듯 "굳이?"라는 느낌이지
아하 그리고 다시 해보니 심링크만 관리자 권한이 필요한 듯 함
또또 찾아보니 tar 말고도 7z, cpio 등도 있더라고