사전 권위 서버
개념

권위 서버

gabury1고친 사람 github-actions[bot]

권위 서버는 온라인 게임에서 무슨 일이 일어났는지를 혼자 정하는 서버입니다. 플레이어의 컴퓨터는 누른 키만 보냅니다. 화면에는 서버가 내린 결과를 받아 그립니다. 그래서 자기 게임 프로그램을 고쳐도 게임 속 결과는 바뀌지 않습니다. 같은 이름을 다른 분야에서도 씁니다. 도메인 이름을 주소로 바꿔 주는 체계에서는 주소의 정답을 쥔 서버를 이렇게 부릅니다.

쉽고 빠른 이해

게임 속 정답을 서버 한 곳이 정하는 방식입니다. 총을 쏘면 맞았는지를 내 화면이 아니라 서버가 정합니다.

플레이어의 컴퓨터는 플레이어 손에 있습니다. 마음먹으면 프로그램을 고쳐 「맞혔다」고 우길 수 있습니다. 판정을 서버가 쥐면 그런 거짓말이 통하지 않습니다.

  1. 플레이어의 컴퓨터는 누른 키만 서버에 보냅니다
  2. 서버는 짧은 간격마다 모인 키 입력으로 세계를 한 걸음 계산합니다
  3. 계산 결과를 모두에게 보냅니다. 각자 그 결과를 화면에 그립니다

대가는 기다림입니다. 서버를 다녀와야 결과가 오니 내 캐릭터가 조금 늦게 움직입니다. 그래서 답을 기다리지 않고 먼저 그려 두는 요령을 함께 씁니다.

결과에 순위나 돈이 걸린 대전 게임은 이 방식을 씁니다. 속여서 얻을 것이 적은 협동 게임은 꼭 쓰지는 않습니다.

상세

축구 경기에서 공이 선을 넘었는지는 선수가 아니라 심판이 정합니다. 선수 스물두 명이 저마다 다르게 봤어도 심판이 내린 판정 하나로 경기가 이어집니다.

권위 서버는 멀티플레이어 게임에서 이 심판 노릇을 하는 서버입니다. 캐릭터가 어디 있는지, 체력이 얼마 남았는지, 총알이 맞았는지를 서버가 계산해서 정합니다. 서버가 낸 값이 그 게임의 유일한 정답이 됩니다.

두 플레이어가 거의 동시에 바닥의 아이템 하나를 집으려 했다고 합시다. 두 사람의 화면이 무엇을 보여 주든 아이템을 받을 사람은 서버가 정합니다. 서버는 먼저 도착한 쪽에 아이템을 줍니다. 다른 쪽에는 아이템이 이미 없다는 결과를 보냅니다.

「권위」는 영어 authoritative 를 옮긴 말입니다. 어떤 값을 최종으로 정할 권한이 그 서버에 있다는 뜻입니다. 같은 구성을 「서버 권위」 방식이라고도 부릅니다.

클라이언트가 보내는 입력과 받는 상태

플레이어의 컴퓨터와 서버 사이에는 두 가지가 오갑니다. 서버로 올라가는 것은 입력입니다. 서버에서 내려오는 것은 상태입니다. 둘을 차례로 봅니다.

클라이언트는 플레이어의 기기에서 도는 게임 프로그램입니다. 권위 서버 구성에서 클라이언트가 서버로 보내는 것은 입력뿐입니다. 「앞으로 가는 키를 눌렀다」·「이 방향으로 쐈다」 같은 것입니다. 「나는 지금 이 좌표에 있다」처럼 결과를 보내지는 않습니다.

서버가 내려보내는 것은 게임 상태입니다. 게임 상태는 어느 한순간 게임 세계를 이루는 값의 모음입니다. 캐릭터마다의 위치·방향·체력, 남은 시간, 점수가 여기에 듭니다. 클라이언트는 이 값을 받아 화면을 그립니다.

이렇게 나누는 까닭은 결과를 내는 계산을 서버에만 두려는 것입니다. 클라이언트가 보내는 입력은 「이렇게 하고 싶다」는 부탁일 뿐입니다. 부탁을 받아 줄지, 받아 주면 세계가 어떻게 바뀔지는 서버가 계산합니다.

서버가 세계를 계산하는 단위

서버는 입력이 올 때마다 바로 계산하지 않습니다. 시간을 같은 간격으로 잘라 한 칸마다 한 번씩 계산합니다. 이 한 칸을 틱이라고 합니다.

1초에 서른 번 계산하는 서버라면 한 틱은 1초를 서른으로 나눈 길이입니다. 서버는 그 한 틱 동안 들어온 입력을 모읍니다. 틱이 끝나면 모은 입력을 한꺼번에 반영해 세계를 한 걸음 계산합니다. 그다음 새 상태를 플레이어들에게 보냅니다.

아래 그림은 플레이어 A 의 입력 하나가 B 의 화면까지 가는 길입니다. A 는 자기 캐릭터가 움직인 결과를 스스로 그리지 않습니다. 서버를 한 번 다녀온 상태를 받고 나서야 그립니다.

sequenceDiagram
    participant A as 플레이어 A
    participant S as 서버
    participant B as 플레이어 B
    A->>S: 입력 · 앞으로 가기
    Note over S: 틱이 끝나면 모은 입력으로 세계를 계산
    S->>A: 새 상태
    S->>B: 새 상태
    Note over A,B: 받은 상태로 화면을 그린다

판정을 서버가 쥐는 까닭

권위 서버를 쓰는 첫째 이유는 플레이어가 결과를 속이지 못하게 하려는 것입니다. 클라이언트를 믿을 수 없는 까닭부터 봅니다.

클라이언트는 플레이어의 컴퓨터에서 돕니다. 플레이어는 그 프로그램을 고치거나 메모리 값을 바꿀 수 있습니다. 게임 프로그램을 거치지 않고 서버로 보낼 데이터 덩어리인 패킷을 직접 지어낼 수도 있습니다. 클라이언트가 보내는 것은 무엇이든 거짓일 수 있다는 뜻입니다.

판정을 클라이언트가 쥐면 이 거짓이 곧 결과가 됩니다. 「내 체력은 100」이라고 보내면 체력이 다시 찹니다. 「벽 너머에 있다」고 보내면 벽을 지나갑니다. 이렇게 프로그램을 조작해 이득을 보는 일을 치트라고 합니다.

권위 서버에서는 클라이언트가 결과를 보내지 않습니다. 그래서 이런 거짓을 끼워 넣을 데가 없습니다. 이동 속도를 바꾸는 조작을 해도 위치는 서버가 자기 규칙대로 계산합니다.

백엔드 개발자에게는 익숙한 원칙입니다. 브라우저가 주문 금액을 보내도 서버는 가격표로 금액을 다시 계산합니다. 권위 서버는 이 원칙을 게임 세계의 모든 값에 적용한 구성입니다.

권위 서버도 모든 치트를 막지는 못합니다. 서버가 보낸 상태를 들여다보는 조작은 막을 수 없습니다. 벽 뒤에 숨은 적의 위치가 상태에 들어 있으면 고친 클라이언트는 그 적을 벽 너머로 그려 보입니다. 이런 조작을 월핵이라고 부릅니다.

사람 대신 프로그램이 조준해 입력을 만드는 조작도 있습니다. 서버가 보기에는 정상 입력과 다르지 않습니다. 이 조작은 에임봇이라고 부릅니다.

서버 왕복이 낳는 지연

권위 서버의 대가는 기다림입니다. 키를 누른 결과가 서버를 한 번 다녀와야 화면에 나옵니다.

요청이 서버에 갔다가 답이 돌아오기까지 걸리는 시간을 왕복 시간이라고 합니다. 왕복에 0.1초가 걸린다면 키를 누르고 0.1초 뒤에야 캐릭터가 움직입니다. 거기에 서버가 틱이 끝나기를 기다리는 시간이 더해집니다. 이만큼 늦으면 플레이어는 조작이 굼뜨다고 느낍니다.

그래서 권위 서버를 쓰는 게임은 이 지연을 메우는 기법을 함께 씁니다. 세 기법 모두 판정은 서버에 남겨 두고 화면에 보이는 것만 손봅니다.

기법 메우는 지연 하는 일
클라이언트 측 예측 내 캐릭터가 늦게 움직인다 서버 답을 기다리지 않고 입력 결과를 먼저 그린다. 답이 오면 서버 값으로 맞춘다
보간 남의 캐릭터가 뚝뚝 끊겨 움직인다 받은 상태 두 개 사이를 메워 부드럽게 그린다
지연 보상 내가 겨눈 적이 서버에서는 이미 옮겨 갔다 총알을 판정할 때 쏜 사람이 보던 시점으로 세계를 되감아 본다

표의 첫 줄에서 먼저 그린 값이 서버 값과 다르면 화면을 서버 값으로 고칩니다. 이 일을 서버 재조정이라고 합니다. 고치는 순간 캐릭터가 살짝 튀어 보이기도 합니다.

표의 셋째 줄은 남의 캐릭터를 그리는 방식에서 생깁니다. 남의 캐릭터는 서버를 다녀온 지난 상태로 그려집니다. 그래서 내 화면의 적은 서버에 있는 적보다 조금 뒤에 있습니다. 서버는 총알을 판정할 때 쏜 사람이 보던 그 시점으로 세계를 되감아 맞았는지를 봅니다.

서버를 띄우는 두 방식

권위 서버는 게임 세계 전체를 혼자 계산합니다. 게임이 열려 있는 동안 서버를 계속 띄워 두어야 해서 운영 비용이 듭니다. 그래서 이 서버를 어느 컴퓨터에서 돌릴지도 골라야 합니다. 갈래는 둘입니다.

게임 회사가 데이터센터에 서버 프로그램만 따로 띄우는 방식을 전용 서버라고 합니다. 서버를 손댈 수 있는 플레이어가 없으니 판정을 믿을 수 있습니다. 대신 서버 비용을 회사가 냅니다.

플레이어 한 명의 컴퓨터가 게임을 하면서 서버 노릇까지 겸하는 방식을 리슨 서버라고 합니다. 서버 비용이 들지 않습니다. 대신 그 플레이어는 왕복 시간이 거의 없어 혼자 유리합니다. 서버를 손댈 수 있으니 판정을 조작할 수도 있습니다.

권위 서버와 맞세워지는 구성

멀티플레이어 게임이 플레이어마다의 세계를 맞추는 방식은 권위 서버 하나가 아닙니다. 누가 결과를 정하는지와 무엇을 주고받는지로 세 구성을 견줘 봅니다.

클라이언트 권위 구성에서는 클라이언트마다 자기 캐릭터의 결과를 정해 남에게 알립니다. 판정이 플레이어 손에 있으니 고친 클라이언트가 보낸 거짓 결과도 그대로 받아들여집니다.

락스텝 구성에서는 판정하는 쪽이 따로 없습니다. 컴퓨터들이 서로 입력을 주고받습니다. 모든 컴퓨터가 같은 입력으로 같은 계산을 각자 돌립니다. 계산이 조금이라도 어긋나면 화면마다 세계가 달라집니다.

구성 결과를 정하는 쪽 주고받는 것 대가
권위 서버 서버 한 대 입력이 올라가고 상태가 내려온다 왕복 지연 · 서버 비용 · 주고받는 양이 많다
클라이언트 권위 각 클라이언트 각자 정한 결과 치트를 막기 어렵다
락스텝 모든 컴퓨터가 같은 계산을 한다 입력만 계산이 조금만 어긋나도 세계가 갈라진다 · 계산이 가장 늦게 끝나는 컴퓨터를 모두가 기다린다

락스텝이 성립하려면 같은 입력에서 언제나 같은 결과가 나오는 계산이 있어야 합니다. 이런 계산을 결정론적 시뮬레이션이라고 합니다. 권위 서버는 서버 한 곳만 계산해 결과를 나눠 주므로 그만큼 엄격한 결정론이 덜 필요합니다. 대신 상태를 보내야 해서 주고받는 양이 늘어납니다.

결과에 순위나 돈이 걸린 대전 게임은 권위 서버를 고릅니다. 수많은 사람이 한 세계를 함께 쓰는 게임도 그렇습니다. 병사 수백 명을 한꺼번에 움직이는 전략 게임은 상태가 너무 커서 락스텝 쪽을 고르곤 합니다. 친구끼리 하는 협동 게임처럼 속여서 얻을 것이 적으면 클라이언트 권위를 쓰기도 합니다.

DNS 에서 쓰는 같은 이름

게임 밖에서 이 이름을 가장 자주 만나는 곳은 DNS(Domain Name System, 도메인 이름 시스템)입니다. DNS 는 example.com 같은 도메인 이름을 컴퓨터가 찾아갈 주소로 바꿔 줍니다.

어떤 도메인의 주소 기록을 직접 들고 있어 최종 답을 내는 서버를 DNS 에서는 권위 서버, 또는 권한 서버라고 부릅니다.

사용자의 질문을 받아 이 서버 저 서버에 물어 답을 모아 오는 리졸버는 권위 서버가 아닙니다. 리졸버가 돌려주는 답은 권위 서버에서 받아 저장해 둔 사본입니다. 최종 답은 늘 권위 서버에 있습니다.

두 뜻은 쓰이는 분야가 다릅니다. 그래도 그 값의 정답을 쥔 곳이라는 뼈대는 같습니다.

관련 항목

권위 서버가 계산해 내려보내는 값과 그 단위

게임 상태 · 입력 · 틱 · 틱레이트 · 스냅샷 · 게임 루프 · 고정 타임스텝

서버 왕복 지연을 메우는 기법

클라이언트 측 예측 · 서버 재조정 · 보간 · 외삽 · 데드 레커닝 · 지연 보상 · 롤백 넷코드

결과를 정하는 쪽이 달라 맞세워지는 구성

클라이언트 권위 · 락스텝 · 결정론적 시뮬레이션 · 피어 투 피어 · 클라이언트-서버 구조

권위 서버를 띄우는 운영 방식

전용 서버 · 리슨 서버 · 게임 서버 호스팅 · 매치메이킹

권위 서버가 막는 부정행위와 못 막는 부정행위

치트 · 스피드핵 · 월핵 · 에임봇 · 안티치트 · 입력 검증

권위 서버의 결과를 클라이언트에 나르는 동기화 기법

상태 동기화 · 델타 압축 · 관심 영역 관리 · 원격 프로시저 호출 · UDP · 패킷 · 왕복 시간

DNS 에서 권위 서버와 함께 도는 서버

DNS · 권한 서버 · 리졸버 · 네임 서버 · 루트 네임 서버 · DNS 캐시

권위 서버가 속하는 상위 분류

게임 개발 · 멀티플레이어 게임 · 네트워크 게임 프로그래밍 · 서버 · 분산 시스템

다른 이름: authoritative server · server authority · server-authoritative · 서버 권위 · 서버 권위 방식 · 권위적 서버 · 권위 있는 서버