적대적 도시 시뮬 vs 샌드박스 시뮬: NIMBY 도시 모델링
도시가 플레이어에게 맞서는 도시 빌더. NIMBY 반대를 게임 메카닉으로 옮긴 사례로, 적대적 시뮬과 샌드박스 시뮬이 각각 무엇을 잘 모델링하는지 정리합니다.

누군가 샌프란시스코에서 주택 개발업자가 되는 도시 빌더를 만들었는데, 여기서 도시 자체가 최종 보스입니다. 아파트를 지으려고 하면 용도지역 규정, 도시계획위원회, 이웃 주민, 항소 절차가 전부 당신을 막아섭니다. 한 플레이어는 시뮬레이션 16년 동안 청문회 16번, 항소 3번, 소송 4번을 버텨내고 4,147채를 지어 "그럭저럭 뭔가를 지은 개발자" 등급을 받았습니다. 도시가 필요로 하는 주택은 8만 2천 채가 넘었죠. 정치 풍자로는 꽤 웃기지만, 시뮬레이션 설계로 보면 정말 흥미롭습니다. SimCity 이후 모든 도시 빌더에 깔려 있던 전제, 즉 플레이어는 전지전능한 시장이고 시뮬레이션은 최적화 대상일 뿐이라는 가정을 뒤집기 때문입니다. 여기서는 시뮬레이션 자체가 상대방입니다.
전지전능한 시장 모델: SimCity와 그 후계자들
전통적인 도시 빌더는 샌드박스 시뮬입니다. 용도를 지정하고, 세금을 매기고, 도로를 깔면 작은 시민 시뮬레이션 캐릭터들이 그 결정에 반응하죠. 흥미로운 점은 이 장르가 40년 동안 내부 모델을 놀라울 만큼 일관되게 유지해 왔다는 것입니다. 토지 가치, 오염, 교통 흐름, 서비스 커버리지는 격자 위의 필드이고, 에이전트(심)는 그 필드를 보고 단순한 결정을 내립니다. 현재 대표작인 Cities: Skylines II는 생애 주기, 직장, 통근을 가진 개별 가구를 시뮬레이션하지만, 그들이 당신을 상대로 소송을 걸지는 않습니다. 걸 수가 없으니까요. 시스템 안에서 그들의 역할은 영향을 받는 것이지 행동하는 것이 아닙니다.
이런 설계 선택에는 은근한 정치 철학이 담겨 있습니다. SimCity에서 어떤 동네를 가로지르는 고속도로를 놓고 싶으면 그냥 놓으면 됩니다. 그 동네 주민은 기껏해야 행복도 계기판의 작은 하락으로만 표현되죠. 게임의 피드백 루프는 처리량을 보상합니다. 구역이 늘고, 인구가 늘고, 세수가 늘어나는 식입니다. 이런 게임을 백 시간쯤 플레이한 사람은 좋은 도시계획을 가로막는 장애물이 플레이어의 선견지명 부족이라는 세계관을 자연스럽게 체득하게 됩니다. 그런데 실제 도시 정책 논쟁이 바로 그 세계관에 관한 것입니다. 게임은 당신을 로버트 모지스처럼 생각하게 만들고, 실제 도시는 로버트 모지스 때문에 지금의 규칙이 생겼다고 일깨워 줍니다.
장르를 깎아내리려는 건 아닙니다. 샌드박스 시뮬은 본래 목적에는 아주 훌륭합니다. 인프라, 토지 이용, 용도지역 지정의 2차 효과에 대한 시스템 직관을 키워 주죠. 주거지 옆에 공업 지역을 섞으면 토지 가치가 떨어지고, 혼잡은 도로 폭이 아니라 도로 위계에서 생긴다는 것도 배울 수 있습니다. 이런 교훈은 실제로 유용합니다. 다만 샌드박스 모델에는 계획 부서만큼이나 큰 맹점이 있습니다. 거버넌스 마찰을 시스템의 일부가 아니라 잡음으로 취급한다는 점입니다.
적대적 모델: 상대방이 된 도시
NIMBY 도시 빌더는 이 구도를 뒤집습니다. 당신은 자본, 시간, 투자자의 인내심을 자원으로 가진 개발업자입니다. 상대는 절차적 관료제입니다. 재량적 심사 청문회, 환경 영향 검토, 주민 항소, 언제나 도사리고 있는 소송 위협이 여기에 해당하죠. 당신의 임무는 도시의 행복도를 최대화하는 것이 아니라, 자금이 바닥나거나 투자자가 떠나기 전에 세대수를 인허가받아 짓는 것입니다. 승인 관문 하나하나가 해당 지구의 정치적 성격에 따라 가중치가 달라지는 주사위 굴림이 됩니다.
메카닉 측면에서 이 게임은 도시 빌더보다는 로그라이크에 가깝습니다. 한 번의 런이 있고, 자본이나 인내심이 바닥나면 런이 끝납니다. 여기서 절차적 콘텐츠는 지형이 아니라 프로세스입니다. 그리고 이 점이 가져갈 만한 통찰입니다. 관료제는 파악 가능하고 메카닉으로 옮길 수 있는 시스템입니다. 청문회에는 대기열이 있고, 항소에는 타이머가 있고, 관문마다 처리량과 실패율이 있습니다. 눈을 가늘게 뜨고 보면 인허가 파이프라인은 과부하된 서비스 여러 개를 거치는 요청과 똑같습니다. 재시도가 있고, 백프레셔가 있고, 가끔 패킷이 떨어져서 11개월이 날아갑니다. 이 글을 읽는 백엔드 엔지니어라면 회사에서 이미 이런 시스템을 만들어 봤을 겁니다. 다만 의도는 더 좋았겠지요.
사람들이 농담처럼 이야기하는 Factorio 모드가 있습니다. 서류 처리를 레시피 트리로 만들어서, 행정 적체를 해소하지 않으면 조립기가 멈추고 벌레들이 민원 서류를 들고 줄을 선다는 설정입니다. 농담이지만 거의 농담이 아니라서 웃깁니다. 적대적 프로세스 시뮬이 플레이하면 확연히 다르게 느껴지는 이유는 대기를 핵심 자원 문제로 만들기 때문입니다. 샌드박스 시뮬에서 시간은 대체로 공짜입니다. 빨리 감기를 누르면 되니까요. 적대적 시뮬에서는 상대가 빼앗으려는 것이 바로 시간입니다. 거부권 행사 지점이 가장 확실하게 프로젝트를 죽이는 방법이 지연이기 때문입니다. 이건 게임 추상화가 아닙니다. 주택 정치가 실제로 작동하는 방식입니다. 프로젝트를 정면으로 무너뜨리는 경우는 드물고, 대부분은 기다리게 만들어서 죽입니다.
각 모델이 실제로 포착하는 것
솔직하게 비교해 보겠습니다. 어느 모델도 도시에 대한 "진실"이 아닙니다. 각 모델은 서로 다른 인과 층위를 포착하고, 실패하는 방향도 정반대입니다.
- 샌드박스 시뮬은 물리적 시스템을 잘 포착합니다. 교통, 오염, 토지 가치, 서비스 커버리지, 밀도의 네트워크 효과 같은 것들이죠. 이것들은 연속적인 필드와 흐름이며, 격자 위의 에이전트 기반 모델은 혼잡 붕괴나 젠트리피케이션 압력 같은 창발 현상을 실제로 재현합니다.
- 샌드박스 시뮬은 정치 시스템을 형편없이 포착합니다. 반대를 행복도 수치로 환원하는 것은 권력에 대한 모델이 아닙니다. 소수의 조직화된 오랜 거주자가 분산되어 있고 바쁜 다수를 지배할 수 있다는 사실을 표현할 수 없습니다. 지역 토지 이용 정치에서 가장 중요한 사실인데도 말이죠.
- 적대적 시뮬은 거부권 행사 지점을 잘 포착합니다. 재량 심사, 항소, 소송 위험, 지연을 무기로 쓰는 전략은 이산적이고 상태를 가지며 공략 가능합니다. 메카닉으로 만들기 딱 좋죠. 이 게임은 경험적 결과도 제대로 재현합니다. 모든 프로젝트가 협상이 되면 결국 소송 변호사를 고용할 수 있는 대형 개발사만 살아남고, 그 결과 주택은 줄고 프로젝트 규모만 커집니다.
- 적대적 시뮬은 물리적 시스템을 형편없이 포착합니다. 건물을 다 지으면 시뮬레이션은 그 동네가 실제로 제대로 돌아가는지 신경 쓰지 않습니다. 교통, 학교, 하수도는 추상화되거나 무시됩니다. 게임에서는 이겨도 제대로 작동하지 않는 무언가를 지어 놓을 수 있습니다.
- 둘 다 반사실적 질문에서 실패합니다. 어떤 모델도 다른 규칙 아래 존재했을 도시를 보여 주지 못합니다. 그런데 정책 담당자들이 실제로 논쟁하는 질문이 바로 그것입니다.
마지막 지점은 강조할 가치가 있습니다. 여기서 비교는 게임 이야기를 벗어나기 시작하기 때문입니다. 용도지역 완화법을 두고 다투는 사람들, 예컨대 최근 캘리포니아에서 대중교통 인근의 지방 재량을 빼앗는 주 차원 선점 법안이 쏟아지는 상황을 생각해 봅시다. 찬반 양측은 사실상 반사실적 시뮬레이션을 돌리고 있습니다. 한쪽은 거부권 지점을 없애면 공급이 풀리는 도시를 모델링하고, 다른 쪽은 같은 조치가 가격은 건드리지 못한 채 동네의 성격만 망가뜨리는 도시를 모델링합니다. 거부권 층위를 플레이 가능하게 만든 게임은 이 논쟁에 실질적으로 기여합니다. 분위기가 아니라 메커니즘을 직접 다루게 만들기 때문입니다. 플레이어가 8만 2천 채 중 4,000채를 짓고 런을 끝냈다면, 교훈은 "개발자는 탐욕스럽다"나 "이웃이 이기적이다"가 아닙니다. 처리량은 누군가의 의도가 아니라 프로세스의 속성이라는 것입니다.

반대를 모델링하는 공학
시뮬레이션 공학 관점에서 적대적 모델이 흥미로운 이유는 반대가 이질적인 행위자성이기 때문입니다. 이웃은 필드가 아닙니다. 기억, 관심도, 비대칭적 동기를 가진 행위자입니다. 이를 잘 모델링하려면 도시 빌더가 보통 쓰지 않는 AI 도구 상자의 다른 부분에서 아이디어를 가져와야 합니다. 몇 가지 패턴이 자주 나옵니다.
- 히스테리시스가 있는 활성화 임계값. 대부분의 주민은 인허가 신청에 전혀 개입하지 않습니다. 반대는 체감 영향이 임계값을 넘을 때 활성화되고, 일단 활성화되면 상황이 나아져도 비활성화되지 않습니다. 이 비대칭성은 모델링하기 쉽고, 실제 역학을 재현하는 대부분의 일을 해냅니다.
- 대기열 기반 프로세스 관문. 각 심사 단계는 처리율을 가진 대기열입니다. 지연은 악의가 아니라 부하에서 생깁니다. 이것이 현실에 충실하면서도 게임의 핵심 긴장감이 되는 이유입니다. 계획 부서 전체를
M/M/1대기열 몇 개로 모델링해도 놀랄 만큼 정확하게 느껴지는 동작을 얻을 수 있습니다. - 지속 피해처럼 작동하는 지연. 보유 비용이 매달 쌓입니다. 이 메카닉 하나로 절차적 지연이 플레이어가 눈으로 확인할 수 있는 압박이 되고, 올바른 전략적 적응을 만들어 냅니다. 개발자들은 재량 심사가 필요 없는 부지에 과다 지불하고, 재량 심사 지구는 아예 피하게 됩니다.
- 기억을 가진 무작위 충격. 소송은 돈만 쓰게 하는 게 아니라 지구의 정치 상태를 바꿉니다. 지속되는 지구 상태는 일회성 사건을 경로 의존성으로 바꿔 줍니다.
핵심 루프의 최소 스케치는 대략 이런 모습일 수 있습니다.
class Project:
def __init__(self, units, district):
self.units = units
self.district = district # has: opposition_level, backlog, discretion
self.stage = "application"
self.months_in_process = 0
def tick(self, month):
self.months_in_process += 1
# carrying costs: land, loans, staff. delay is the killer.
burn = self.units * 900 # $/unit/month while entitled is pending
if self.stage == "application":
if self.district.backlog < self.district.staff_capacity:
self.stage = "hearing"
self.district.backlog += 1
elif self.stage == "hearing":
self.district.backlog -= 1
p_appeal = min(0.85, self.district.opposition_level
* (1 + self.district.past_appeals * 0.2))
self.stage = "appeal" if random.random() < p_appeal else "entitled"
elif self.stage == "appeal":
if self.months_in_process % 6 == 0: # appeals resolve slowly
self.stage = "entitled" if random.random() < 0.5 else "lawsuit"
return burn
40줄 정도면 되는데, 이것만으로도 장르 특유의 결과가 재현됩니다. 반대가 큰 지구는 수요와 무관하게 아무것도 지어지지 않고, 개발자는 마찰이 적은 지구에 몰리며, 승인까지 걸리는 시간이 프로젝트 경제성을 좌우합니다. 명세와 창발적 행동 사이의 간극은 명세와 구현의 간극에서 다룬 것과 정확히 같은 종류의 문제입니다. 주택 부족을 용도지역 규정에 쓰는 사람은 없지만, 주택 부족은 결국 그 규칙에서 저절로 나옵니다.
창발적 행동 대 스크립트된 난이도
여기서 중요한 설계 분기점은 하나입니다. 반대를 스크립트로 짤 것인가, 아니면 창발하게 둘 것인가? 스크립트된 난이도, 즉 레벨이 오를수록 도시가 임의로 더 방해하는 방식은 밸런싱하기는 쉽지만 잘못된 교훈을 줍니다. 시스템이 의도적으로 조작되어 있다고 플레이어에게 알려 주기 때문입니다. 반면 대기열, 임계값, 보유 비용으로 만들어진 창발적 반대는 훨씬 진실에 가깝고 훨씬 불편한 교훈을 줍니다. 모든 개별 행위자가 합리적으로 행동하더라도 시스템은 이런 결과를 만들어 낸다는 것입니다. 9개월치 적체를 안고 있는 계획 담당자는 악당이 아니라 인력이 부족한 것입니다. 당신의 프로젝트에 항소한 이웃도 만화 속 NIMBY가 아닙니다. 그에게는 집이 한 채 있고, 그 집이 그의 순자산 전부이며, 게임이 그에게 지렛대를 쥐여 줬기 때문에 그는 그 지렛대를 당기는 것입니다. 방어적 엔지니어링에 관한 글에서 이야기했듯이, 시스템은 설계자가 바란 행동이 아니라 인센티브가 허용하는 행동을 보여 줍니다.
창발은 이 게임을 논쟁의 반대편에 있는 사람들에게도 이해 가능하게 만듭니다. 이 게임을 플레이하는 YIMBY는 절차 개혁이 개별 프로젝트보다 왜 더 중요한지 몸으로 배웁니다. 보존론자는 거부권 지점이 나쁜 프로젝트만 골라 막는 것이 아니라 타임라인이 충분히 긴 모든 것을 막는다는 사실, 즉 무차별적이라는 사실을 알게 됩니다. 이건 오피니언 기사로 전하기 어려운 내용이지만, 40턴째에 보유 비용이 피처럼 빠져나가는 것을 지켜보면 자연스럽게 이해됩니다.
지연은 거부권 행사 지점이 가장 확실하게 쓰는 살상 메카닉입니다. 프로젝트를 정면으로 무너뜨리는 경우는 드물고, 기다리게 만들어서 죽입니다.
진지한 게임 대 풍자: 각각이 이기는 때
이 장르가 우리에게 정말 강요하는 비교는 샌드박스 대 적대적이 아니라 풍자 대 진지한 모델링입니다. NIMBY 게임은 풍자입니다. 매개변수가 코미디와 절망을 위해 튜닝되어 있고, 실제 승인 기간에 맞춰 보정된 것이 아닙니다. 진지한 버전은 어느 시의원이 연습용 도구로 쓰고 싶다고 말한 적이 있는 그런 것인데, 관문 처리율, 항소 확률, 보유 비용을 실제 인허가 데이터에 맞춰 보정하는 것입니다. 일부 계획 부서와 연구자들은 바로 이 목적으로 참여형 시뮬레이션과 진지한 게임을 운영하고 있지만, 보통은 파워포인트 수준의 제작 완성도에 머뭅니다.
목표가 관심과 직관일 때는 풍자가 이깁니다. 보정된 계획 모델을 소셜 네트워크에 공유하는 사람은 없습니다. 샌프란시스코가 과정으로 당신을 파묻어 버리는 브라우저 게임은 과장이 논지를 실어 나르기 때문에 공유됩니다. 풍자는 정확성의 기준도 낮습니다. 크기가 아니라 방향에 대한 주장을 하면 되니까요. 하지만 질문이 "무엇을 바꿔야 하는가?"로 바뀌면 풍자는 집니다. 그 질문에는 지루한 버전, 즉 켜고 끌 수 있는 매개변수화된 규칙이 필요합니다. 모델에서 재량 심사를 없애고 처리량 변화를 지켜보세요. 계획 인력을 두 배로 늘리고 적체가 빠지는 모습을 보세요. 이 토글-관찰 루프가 게임이 해설을 멈추고 정책 도구가 되기 시작하는 지점입니다. 이 장르의 최선은 두 모드를 모두 제공해서, 플레이어가 그 사이를 오가며 먼저 절망을 느끼고 그다음에 기계를 고치게 하는 것일 겁니다.
게임이 오피니언 기사보다 논쟁을 잘하는 이유
설명 시스템을 만드는 사람이라면 더 넓은 교훈도 있습니다. 오피니언 기사는 메커니즘을 주장하지만, 플레이 가능한 모델은 메커니즘을 보여 주고 사용자가 그것을 반증해 볼 수 있게 합니다. 주택 정치에 대한 당신의 멘탈 모델이 "누군가 그냥 더 지으면 된다"라면, 적대적 시뮬에서 30분 보내는 것이 연간 인허가 세대수 차트를 아무리 봐도 못 바꾸는 생각을 바꿔 놓을 겁니다. 이는 셸을 직접 만들어 보는 것이 맨 페이지를 읽는 것보다 Unix를 더 잘 가르쳐 주는 이유와 같습니다. 장난감 같은 시스템이라도 직접 운용해 보면 추상화가 구체적인 것이 되어야 합니다. 이 게임에 대한 Hacker News 댓글도 흥미롭습니다. 사람들은 곧바로 자기 도시를 위한 버전을 제안했습니다. 의무적인 야생동물 완화 조치가 붙는 고속철도, 데이터센터 같은 것들이죠. 이 패턴이 일반화되는 이유는 거부권 지점의 구조가 일반화되기 때문입니다. 순차적 승인 관문, 비대칭적 동기, 비용으로서의 지연이 있는 곳이라면 어디든 이 게임이 있습니다.
더 나아가 말하면, 적대적 시뮬은 엔지니어링 커뮤니케이션 전반에서 덜 활용되는 장르입니다. 신입 엔지니어에게 조직의 변경 관리 프로세스를 이 게임으로 체험하게 한다고 상상해 보세요. 변경을 배포하면 CAB 리뷰, 보안 승인, 배포 동결 기간 뒤에서 줄을 서게 되고, 열정이 점점 식어 가는 것을 느낍니다. 그러면 사람들이 왜 섀도 IT에 손을 뻗는지 이해하게 됩니다. 익숙하게 들린다면, 그건 리뷰의 모든 계층이 팀을 느리게 만든다는 우리의 주장과 같은 직관입니다. 누군가 그 마찰을 직접 통과해 봐야 비로소 보이기 때문입니다.
추천
그래서 샌드박스 시뮬이냐 적대적 시뮬이냐? 둘 다 플레이해 보되, 무언가를 만들어 본다면 적대적인 쪽을 만드세요. 샌드박스 장르는 성숙했고 상업용 타이틀이 충분하며, 그 교훈(밀도, 네트워크, 외부효과)은 이미 문화 속에 스며 있습니다. 탐험되지 않은 설계 공간과 진짜 설명 가치는 적대적 장르에 있습니다. 날카로운 사이드 프로젝트를 원하는 개발자라면, 당신이 잘 아는 무언가의 프로세스 층을 모델링해 보세요. 도시의 인허가 파이프라인, 회사의 구매 절차, 비자 제도 같은 것들이죠. 대기열, 히스테리시스가 있는 임계값, 보유 비용을 쓰고, 지연을 적대자로 만들고, 결과는 스크립트하지 말고 창발하게 두세요. 회의론자가 자기 가정을 직접 테스트할 수 있도록 숫자는 조정 가능하게 두세요. 그 시스템의 장난감 버전을 만들어 보면 수년간 논쟁만 하던 것보다 많이 배우게 되고, 당신의 버전을 플레이하는 모든 사람도 그럴 것입니다. 이 작은 게임이 해내는 진짜 재주가 바로 그겁니다. 보통은 열기만 뿜어내는 논쟁을 찔러 볼 수 있는 기계로 바꿔 놓는 것이죠. 우리의 주장들도 기계가 될 자격이 있습니다.


