퍼시스턴트 월드와 인스턴스 월드

아무렇지도 않게 사용해 온 퍼시스턴트 월드와 인스턴스 월드는 각각 무슨 의미일까요? 또 게임에서 어떻게 사용되어 왔으며 현대에는 어떻게 변해 가고 있을까요?

퍼시스턴트 월드와 인스턴스 월드

멀티플레이 온라인 게임을 만들면서 자주 사용하게 되는 표현 중 퍼시스턴트 월드와 인스턴스 월드라는 말이 있습니다. 온라인 게임을 개발하면서 너무 당연하게 아무런 설명 없이 이 말을 사용하곤 했고 말을 들은 상대 역시 딱히 질문한 적이 없었기 때문에 이 각각의 의미나 정의를 생각해본 적이 없었습니다. 그러다가 최근 서로 다른 용어를 사용하는 상황에서 프로젝트의 표준 용어를 알아보는 대신 이전까지 사용해 왔던 편안한 용어를 그대로 사용해 문서에 퍼시스턴트 월드와 인스턴스 월드라는 표현을 사용했다가 이 각각이 무슨 의미인지 질문을 받은 적이 있습니다. 처음에는 온라인 개발을 아예 안 해본 분일 수 있겠다는 생각을 했었지만 이후 프로젝트에서 이들 각각을 필드와 던전이라고 부르고 있다는 것을 알게 되어 썩 마음에 들지는 않았지만 다음부터는 프로젝트의 용어를 사용하고 있습니다. 이런 경험을 하고 난 다음 어느 날 블로그에 유입된 검색어를 살펴보다가 퍼시스턴트 월드와 인스턴스 월드가 무엇인지, 서로 어떤 차이가 있는지 알아보려던 검색어의 흔적이 남아 있어 지금까지 아무렇지도 않게 사용해 왔지만 제 스스로가 이 말들을 제대로 이해하고 있기는 한 것인지 시험해보고 또 그 과정에서 만든 텍스트를 남겨 두면 미래에 비슷한 의문을 가진 누군가를 위한 설명이 될 수도 있지 않을까 싶은 생각이 들었습니다.

퍼시스턴트 월드는 온라인 멀티플레이 게임에서 모든 사용자들이 공유하는 영속적인 세계를 말합니다. 사용자들은 온라인 멀티플레이 게임을 플레이 할 때 각자 서로 다른 상태를 경험할 수 있습니다. 가령 레벨이 낮거나 높을 수 있고 어떤 스킬을 사용할 수 없거나 사용할 수 있는 상태일 수 있으며 진행에 따라 어떤 레벨에 진입할 수 없거나 있을 수 있습니다. 이런 사용자 각자의 서로 다른 경험은 근본적으로 사용자 자기 자신의 상태에 따라 달라지는 요소입니다. 성장 정도, 스킬의 언락 여부, 레벨 진입 가능 여부 등은 모두 사용자 개인의 상태에 따라 달라지며 이 개인의 경험이 다른 사람들이나 세계에 영향을 끼치지 않습니다. 다만 파티 시스템 등을 통해 서로 진행 상태가 다른 둘 이상의 플레이어가 한 파티로 묶여 플레이 할 때 어느 한쪽만 진입 가능한 레벨이 있을 경우에 대비해 파티 시스템을 설계할 때 이런 상황에 부드럽게 대응하는 규칙을 만들 필요는 있습니다. 이런 작은 예외를 제외하면 사용자 각각의 상태에 따라 서로 다른 경험을 할 수는 있지만 이 경험이 세계 전체에 영향을 끼치지 않기 때문에 모든 사용자들은 퍼시스턴트 월드에서 모두 같은 레벨을 보고 모두 같은 경험을 하게 됩니다. 이 세계는 어지간하면 변하지 않으며 모든 사용자에게 영속적으로 유지됩니다.

여느 온라인 멀티플레이 게임에 등장하는 마을을 예로 들어 구체적으로 설명해보겠습니다. 일단 마을은 웬만한 게임에서 사용자 각각의 상태에 관계 없이 진입할 수 있는 경우가 많습니다. 게임에 따라 마을에 들어갈 수 없는 상태를 허용하는 경우도 있지만 현대에 가까워지며 그런 사례는 점차 줄어들고 있는 것처럼 보입니다. 마을 안에 있는 NPC들은 항상 그 자리에서 24시간 일하며 모든 사용자들에게 똑같은 서비스를 제공합니다. 종종 사용자들의 레벨에 따라 특정 서비스를 제한할 수는 있지만 이는 사용자 개개인의 상태에 따른 변화로 조건을 만족한 사용자는 이전에 사용할 수 없었던 서비스에 접근할 수 있게 되며 시간이 지나면 모든 사용자들이 같은 서비스에 접근할 수 있는 상태가 됩니다. 마을의 여러 건물, 자연물, NPC 등은 실제 세계의 시간이 흘러도 변하지 않으며 모두가 같은 경험을 할 수 있습니다. 종종 이벤트로 마을을 이전과 다른 장식으로 꾸밀 때도 있는데 마을의 겉모습이 변했지만 기능 거의 대부분은 동일하며 이 변화는 모든 사용자들이 같은 경험을 하게 해 줍니다. 퍼시스턴트 월드의 가장 중요한 점은 사실상 게임 상에서 시간이 흐르지 않는 것처럼 행동한다는 점인데 시간이 흐르지 않기 때문에 실제 세계에서 시간의 흐름에 따라 겪는 경험 일체를 겪지 않습니다.

퍼시스턴트 월드가 이런 특징을 가지게 된 이유는 멀티플레이 환경에서 아주 많은 사람들에게 동시에 세계의 상태 변화를 동기화하기 아주 어렵기 때문입니다. 가령 던전에서 진행을 통제하기 위해 종종 사용하는 도개교 같은 구조물은 퍼시스턴트 월드에서는 어지간하면 사용하지 않는데 던전에서는 보다 적은 사람들에게만 도개교의 현재 상태와 상태 변화를 동기화 하면 되기 때문에 상대적으로 동기화에 대한 기술적 난이도가 낮고 문제가 생길 가능성이 적습니다. 하지만 마을에서는 한 번에 세 자릿 수가 넘는 사람들에게 도개교의 현재 상태와 상태 변화를 동기화 해야 하는데 이는 여러 가지 문제를 일으킬 수 있습니다. 가령 마을에 설치한 도개교가 열려 배가 지나갈 수 있게 되고 사람은 지나갈 수 없는 상태가 되면 온라인 게임 서버는 주변에 있는 사람들에게 도개교의 현재 상태를 알립니다. 도개교가 열릴 때 도개교의 상태가 변했음을 알게 된 사람들의 클라이언트에는 도개교가 열려 지나갈 수 없는 상태가 되는데 이는 도개교 주변에 있는 사람들에 한해서는 같은 경험을 하고 문제가 일어날 가능성이 적습니다. 하지만 도개교의 일정 반경 바깥에 있던 사람들에게는 도개교가 열렸다는 변화가 전달되지 않으며 이들이 도개교에 가까워질 때 게임 서버가 변경된 상태를 알려줘야 하는 물체에 한해 현재 상태를 알려주는데 여기에 도개교가 포함됩니다. 즉 도개교에 가까이 있던 사람들은 도개교의 상태가 변하는 즉시 이 사실을 알게 되지만 도개교에서 멀리 떨어져 있거나 아예 마을에 있지 않은 사람들에게는 이 사실이 즉시 전달되지 않으며 이 사실은 이들이 도개교에 가까이 다가와 관측할 수 있게 될 때 전달됩니다.

이상적으로는 도개교의 상태가 변할 때 가까이 있지 않았더라도 도개교에 접근할 때 도개교 상태에 대한 정보를 받아 다른 사람들과 같은 경험을 할 수 있어야 합니다. 하지만 여기에는 온갖 다양한 예외가 있습니다. 가령 부주의하게 만들어진 어떤 탈것은 처음 게임을 설계할 때 예상한 것보다 더 빠른 속도로 이동하고 있을 수 있는데 라이브 상황에서 이렇게 만들어도 대체로 문제가 발생하지 않으므로 이 탈것이 이전에 예상한 최대 속도보다 더 빨리 이동하고 있어도 쉽게 눈치 채기 어렵습니다. 그런데 이 탈것을 탄 채로 마을에 들어와 도개교를 향해 달려온다면 게임 서버가 도개교의 현재 상태를 알려줘 클라이언트에서 도개교의 상태를 바꾸는 것보다 더 빨리 도개교를 관측할 수도 있습니다. 운이 좋으면 도개교가 닫혀 있다가 갑자기 어색하게 열린 상태로 변하고 이를 지나갈 수 없는 정도로 끝날 수 있지만 운이 나쁘면 아직 도개교의 현재 상태가 클라이언트에서 처리되지 않은 시점에 도개교 위에 올라가 버려 이상한 상황을 유발할 수 있습니다. 또 어떤 사용자는 곤란하게도 도개교 위에서 접속을 종료했을 수 있는데 여러 게임이 퍼시스턴트 월드에서는 접속을 종료한 바로 그 위치에서 다시 시작할 수 있게 해 주기도 합니다. 그러면 도개교가 닫혀 있을 때 도개교 위에 올라가 접속을 종료한 다음 도개교가 열려 있을 때 접속하면 세계에 계속 접속해 있던 사람들에게는 도개교가 닫혀 있다가 열렸기 때문에 도개교 위에 올라갈 수 없지만 이전에 관측했을 때 닫혀 있던 도개교 위에 올라간 사용자 입장에서는 게임을 시작하자마자 물에 빠지거나 다리에 끼이는 이상한 상황을 맞이할 수도 있습니다.

이런 온갖 이상한 상황을 완화하기 위해 여러 사용자들이 상시 드나들 수 있는 퍼시스턴트 월드에는 웬만하면 상태가 변하는 물체를 잘 허용하지 않으며 특히 이동을 제어하는 도개교, 문, 바리게이트 같은 물체를 잘 사용하지 않도록 합니다. 대신 퍼시스턴트 월드는 아무리 빨리 달리는 탈것을 타고 와도 안전하고 또 어디서 접속을 종료했더라도 다시 시작할 때 그 상태가 변하지 않아 항상 안전한 물체들로만 채워집니다. 다리는 항상 고정되어 있고 문은 항상 열려 있으며 건물은 항상 그 자리에 있어 어디서 접속을 종료하든, 또 아무리 빨리 달려오든 항상 안전한 상태를 유지합니다. 퍼시스턴트 월드라고 말할 때는 보통 이런 특징을 함께 의도해서 말하곤 하기 때문에 엔지니어들과 이야기할 때 퍼시스턴트 월드에 도개교, 고정형 탈것, 문 같은 상태가 변하고 이를 여러 사용자에 걸쳐 동기화 해야 하는 물체를 퍼시스턴트 월드에 설치하려고 하면 예상하지 못한 저항을 겪을 수 있습니다. 물론 이런 사례가 아예 없는 것은 아니어서 게임에 따라 대도시에 모두에게 동기화되는 엘리베이터나 모노레일 같은 고정형 탈것을 허용하는 경우도 있는데 이들을 관찰해 보면 이들에 탑승한 상태로 게임을 종료하면 다시 시작할 때 고정된 재시작 위치에서만 재시작되고 또 이들의 이동 속도는 가장 빠른 탈것의 이동속도보다 항상 느리게 설정되어 있음을 알 수 있습니다. 모르긴 몰라도 이런 물체를 대도시에 설치하기 위해 엔지니어들을 잘 설득하고 또 문제가 일어나지 않도록 단단한 게임디자인 규칙을 만들어야만 했을 겁니다.

한편 인스턴스 월드는 기술적으로는 퍼시스턴트 월드와 비슷하지만 크게 두 가지가 다릅니다. 하나는 월드에 진입하는 인원에 제한이 큰 편입니다. 어지간한 온라인 멀티플레이 게임의 대도시에는 한 번에 아주 많은 사람들이 들어갈 수 있습니다. 이에 비해 인스턴스 월드로 만들어지는 던전은 이보다 훨씬 적은 인원, 가령 최대 4명이나 8명 수준의 인원만을 허용합니다. 그래서 기술적으로 월드에 상태가 변하는 물체가 있을 때 이들의 상태를 던전 안에 있는 여러 사람들에게 똑같이 전달하고 유지하기에 난이도가 상대적으로 낮습니다. 다른 하나는 월드에 진입하는 시점에 대한 제한이 있는 경우가 있습니다. 오래된 게임은 던전이라도 제한 없이 여러 사람이 진입해 상태를 공유하곤 했지만 시간이 흐르며 퍼시스턴트 월드에서는 그런 여러 사람들과 함께하는 경험을 하게 하되 인스턴스 월드에서는 함께 경험하는 인원을 최소화하는 대신 세계의 상태가 다양하게 변하는 풍부한 경험을 하는 방향으로 변화해 오고 있습니다. 이 때 인스턴스 월드는 진입한 다음 플레이 하던 도중 어떤 이유로든 접속이 끊기면 다시 같은 위치로부터 재시작하는데 제한이 있는 경우가 많은데 가장 큰 이유는 앞서 설명한 도시의 도개교 사례와 같이 인스턴스 월드 안에 있는 여러 상태가 변하는 물체들의 현재 상태를 상황에 맞게 동기화 하고 이 상태에서 플레이 불가능하지 않도록 만들기 어렵기 때문입니다.

퍼시스턴트 월드에 문이나 도개교 같은 요소가 개발자들을 골치 아프게 만든다면 인스턴스 월드에서 개발자들을 골치 아프게 만드는 요소에는 파괴되는 다리가 있습니다. 던전을 플레이 하다 보면 이벤트에 의해 다리를 건너고 나면 방금 건너온 다리가 파괴되는 연출을 드물지 않게 볼 수 있습니다. 이는 일단 멋지기도 하고 또 던전 입구 방향으로 되돌아가 단방향으로 진행할 것을 가정하고 만들어 놓은 여러 장치들이 올바르게 동작하도록 하기 위함입니다. 그런데 파티 플레이 도중 파티원 중 일부만 다리를 건넌 상태에서 이벤트가 일어나 다리가 사라져 나머지 인원이 건너오지 못하거나 던전 곳곳에 재시작 위치를 만들어 놓았는데 어떤 사용자에게는 마지막 재시작 위치가 무너진 다리 이전에 있어 재시작 하고 보니 무너진 다리를 건너갈 수 없는 상태에 빠지기도 합니다. 이런 상황들이 일어나지 않게 하기 위해서 꽤 단단한 규칙을 설계해야만 합니다. 또 파티 플레이 상황에서는 모든 파티원들이 다리를 건너간 다음에 다리를 부순다든지 재시작 지점을 항상 밟아야만 재시작 위치가 그 자리로 설정되도록 한 상황이라면 좀 어색하더라도 다리를 건너자마자 어쩔 수 없이 새로운 재시작 위치를 밟아야만 하게 만드는 식으로 회피할 수도 있습니다.

하지만 인스턴스 월드에서는 퍼시스턴트 월드에 비해 훨씬 다양한 상태가 변하는 물체를 사용할 수 있습니다. 마을에서는 도개교 하나를 여닫기 위해 주변에 있는 사람들, 그리고 새롭게 주변에 진입하는 사람들, 또 순간이동으로 도개교 주변에 나타난 사람들 모두에게 도개교의 현재 상태롤 전달해야만 합니다. 가능하면 도시 전체에 있는 사람들에게 도개교의 상태를 전달하면 좋겠지만 이러면 서버 입장에서 너무 많은 사람들에게 도개교의 현재 상태를 지속적으로 알려야만 하고 사용자들 각각도 현재 플레이에 아무런 영향을 주지 않는 멀리 떨어진 도개교의 상태를 계속해서 알고 있어야 해서 필요 이상으로 패킷을 주고 받아 게임 좀 했을 뿐인데 인터넷 대역폭을 꽤 많이 사용하고 있는 원하지 않는 상태를 유발할 수 있습니다. 반면 인스턴스 월드에서는 상태가 변하는 물체를 다양하게 사용하더라도 마치 도시에서 도개교의 현재 상태를 도시에 있는 모든 사람들에게 전달하려고 했던 것처럼 던전 안에 있는 모든 사람들에게 던전 안에 있는 모든 상태가 변하는 물건의 현재 상태를 알려줘도 큰 무리가 없습니다. 앞서 설명한 대로 던전 안에는 상대적으로 적은 수의 사람들만 들어와 있기 때문에 이들에게만 여러 물체의 현재 상태를 알려주면 될 뿐 아니라 이들의 수가 적기 때문에 이들의 현재 플레이에 직접 영향을 끼치지 않는 멀리 떨어진 물체라도 이 상태를 사용자들 모두에게 알려줘도 사용자 각각의 입장에서, 그리고 서버 입장에서 별 무리가 아닙니다.

이렇게 퍼시스턴트 월드와 인스턴스 월드는 서로 기술적으로는 비슷하지만 그 사용 방법의 차이로 인해 서로 상당히 다른 경험을 하게 만들 수 있는데 현대에 가까워질수록 이들이 근본적으로 기술적인 관점에서 서로 별로 다르지 않다는 점에 근거해 퍼시스턴트 월드 일부를 개인화하거나 반대로 인스턴스 월드의 상태를 유지했다가 이전 플레이에 의해 상태가 변한 인스턴스 월드를 체험할 수 있게 만드는 사례도 있습니다. 우선 대도시에 모노레일 사례는 앞에서 설명했고 플레이에 따라 특정 NPC가 나타나고 사라지거나 이전에 없던 건물이 나타나는 사례는 이제 쉽게 찾아볼 수 있습니다. 특정 NPC가 나타나거나 나타나지 않는 것은 퍼시스턴트 월드 관점에서 상태가 변하는 물체라기 보다는 NPC 개체 스스로가 사용자의 상태에 따라 나타나거나 사라지는 것으로 퍼시스턴트 월드의 상태 변화라고 보기에는 기술적인 배경이 다른 것은 사실입니다. 한편 특정 건물이 나타나거나 사라지는 것은 퍼시스턴트 월드 관점에서 상태가 변하는 물체에 가까운데 게임에 따라서는 아예 이렇게 월드 자체에 꽤 큰 상태 변화가 필요한 경우 이 상태 변화를 적용 받아야 하는 사용자와 그렇지 않은 사용자들을 서로 논리적으로 격리해 각각이 다른 상태의 세계를 경험하게 만들기도 합니다. 사용자 각각의 상태에 따라 인스턴스 월드 밖에서도 이전보다 더 풍부한 경험을 하게 만드는 시도이기는 하지만 앞서 이 모든 상황을 골치 아프게 만드는 서로 진행 정도가 서로 다른 사람들이 파티를 맺는 등 다양한 예외상황을 처리할 단단한 규칙을 설계하지 않으면 개발하는 사람들 모두를 꽤 고통스럽게 만들 수도 있습니다.

한편 인스턴스 월드는 필요에 따라 생성됐다가 그 역할을 마치고 사람들이 모두 떠나면 사라진 다음 다시 만들어질 때 초기화되곤 했지만 현대에는 이전에 플레이 했던 상태를 유지하기도 합니다. 가령 한 던전에 두 갈래 길이 있었는데 첫 플레이 때는 왼쪽 길로만 갈 수 있었고 그 다음 플레이에는 오른쪽 길로만 갈 수 있도록 하기도 하는데 오래 전에는 이들 각각을 서로 에셋을 공유하지만 레벨은 서로 독립된 모양으로 만들기도 했습니다. 그러다가 같은 에셋을 사용하는 같은 레벨로 만들어 사용자들의 현재 상태에 따라 이전에 왼쪽 길을 통한 플레이를 한 적이 있으면 오른쪽 길을 개방하는 식으로 이전 상태에 따라 같은 던전이라도 던전 내부 물체들의 상태를 바꿔 다른 상태롤 만들어 줍니다. 이는 기술적으로는 그저 사용자의 현재 상태를 살펴보고 이에 따라 던전 내부 물체들의 상태를 바꿔 준 것이지만 사용자 관점에서는 플레이 후에는 사라지고 다음 진입 때 재생성되는 인스턴스 월드의 일반적인 경험과 달리 같은 인스턴스 던전이 이전 플레이에 의한 상태를 유지했다가 이번 플레이에 그 상태가 계속해서 유지되는 것처럼 느끼게 할 수 있습니다. 이는 제작 비용이 높은 던전의 일부분을 여러 경우에 걸쳐 재사용 할 수 있을 여지를 줘 갈수록 에셋과 레벨 제작 비용이 높아지는 환경에서 깊이 살펴볼 가치가 있습니다.

앞서 퍼시스턴트 월드는 마치 시간이 흐르지 않는 것처럼 행동한다고 이야기했는데 현대에는 퍼시스턴트 월드에 시간이 흐르는 모양을 만들기 위한 개념이 등장하고 있습니다. 이전에는 그저 퀘스트 진행에 따라 특정 NPC나 건물이 나타나거나 나타나지 않는 수준에 머물렀다면 이제 퀘스트에 따라 도시의 현재 상태가 완전히 바뀌어 이전에 없던 거리와 상점, 상점 NPC들이 나타나기도 하고 도시를 구성하는 에셋이 완전히 변하기도 합니다. 기술적으로는 사용자들의 현재 상태에 따라 경험해야 할 같은 레벨을 여러 벌 만든 다음 사용자들의 상태에 따라 서로 다른 레벨을 표시하는 것인데 이를 이전과 같이 퀘스트 진행에 의존성을 가지도록 만들면 개발자 관점에서 유지 보수가 복잡해지는 문제가 있습니다. 그래서 퀘스트 진행을 ‘월드 레벨’ 같은 좀 더 단순하고 이해하기 쉬운 중간 형태로 지환해 놓았다가 월드 레벨에 따라 서로 다른 에셋을 사용하는 서로 다른 도시 레벨로 이동시키는데 기술적으로는 퀘스트 진행에 의존성을 가지도록 하는 것과 별로 다르지 않지만 이에 기반해 컨텐츠를 구성하고 경험을 설계하는 관점에서는 특정 퀘스트의 특정 단계 이후부터는 다음 단계 도시가 나타나도록 만드는데 비해 단순히 월드 레벨 3부터는 다음 단계 도시가 나타나도록 만드는 쪽이 이해하기도 쉽고 관리하기도 쉽습니다.

지금까지 퍼시스턴트 월드와 인스턴스 월드를 제가 알고 있는 범위 안에서 설명하며 제 스스로가 이들의 차이를 이해하고 있는지 시험해 보았습니다. 기술적으로 둘은 서로 별로 다르지 않지만 물리적으로 퍼시스턴트 월드는 한번에 훨씬 많은 사람들에게 상태를 전달해야 하고 상태 변화에 따른 다양한 결함이 발생할 수 있어 상태가 변하는 물체를 거의 사용하지 않습니다. 반면 인스턴스 월드는 상대적으로 훨씬 적은 사람들에게 상태를 전달하기 때문에 상태가 변하는 물체를 훨씬 다양하게 사용할 수 있고 적은 사람들에게만 상태를 동기화 하므로 현재 플레이에 직접적인 영향을 끼치지 않는 물체의 상태 역시 동기화 해 던전 전체에 걸쳐 풍부한 경험을 하게 해줄 수 있습니다. 현대에는 퍼시스턴트 월드의 개인화, 인스턴스 월드의 상태 저장, 그리고 사용자의 상태에 따른 적극적인 퍼시스턴트 월드의 변화 같은 이전의 구분을 좀 더 느슨하게 만드는 여러 가지 시도가 일어나고 있습니다.