본문 바로가기
유니티/서버

Unity 기반 게임에서 서버와 클라이언트를 어떻게 나누고 운영하느냐

by 유니티세상 2025. 6. 16.

✅ Unity + Mirror에서 "서버"란 무엇인가?

Mirror는 Unity 안에서 서버도 클라이언트처럼 돌아가는 구조야.
즉, Unity 빌드 자체가 서버가 되는 것이지,
무조건 리눅스에서만 돌리는 따로 짠 "백엔드 서버"를 의미하지 않음


✅ Mirror의 서버 구조는 이렇게 나뉜다:

 

타입 설명 실행 방식
Host 서버와 클라이언트가 같은 Unity 인스턴스 로컬 테스트용
Dedicated Server 서버 전용 Unity 빌드 (UI 없음) 리눅스/윈도우 빌드
Client 순수 클라이언트 유저가 실행
 

즉, Mirror는 서버도 Unity에서 돌아간다는 게 핵심.


✅ 그럼 "서버 로직"은 어떻게 구성해?

1. 따로 구현하는 건 아니다

  • 동일한 Unity 프로젝트 안에 [Server], [Command] 같은 속성으로 서버 전용 로직을 구분해서 작성한다.
  • 이 코드는 클라이언트 빌드에도 들어가지만, 실행은 안 된다 (isServer 체크)

 

[Server]
void DamagePlayer(int amount)
{
    health -= amount;
}
 
 

2. 리눅스에 빌드할 때는?

  • Unity에서 Headless Mode (서버용, 그래픽 없음)로 빌드해서 리눅스에 배포
  • Build Settings → Linux + Server Build 체크

✅ Unity Mirror 서버 운영 시 요약

 

항목  설명
서버는 Unity에서 돌아감 맞아, Unity 빌드 = 서버
리눅스에 설치 가능 Headless 전용 빌드 사용
서버 전용 로직이 따로 있는가? 따로 프로젝트가 있는 건 아님, 같은 코드 안에 [Server], [Command]로 분리
따로 "백엔드 서버" 필요? 대부분의 게임에서는 필요 없음. 단, DB나 로그인 관리가 필요하면 따로 만들기도 함
 


Q. 서버는 누가 조작하는 게 아닌데 어떻게 Rpc 함수를 호출해?

 

A.

 

 

 

 

 

🎯 결론

Mirror에서는 "서버 로직"도 Unity 프로젝트 안에서 같이 짠다.
단지 [Server], [Command] 같은 태그로 서버 전용 코드를 구분하고,
빌드할 때 Linux 전용 서버 빌드를 만들어서 리눅스에 올리는 것뿐이야.