-
유니티 멀티 데디케이티드 서버 무료로 호스팅하기 (Netcode for gameobjects와 오라클 클라우드)유니티 2026. 6. 18. 16:32

유니티 멀티 데디케이티드 서버를 호스팅하기 위해 해당 블로그를 찾아와 주셨다면 잘 찾아 왔습니다.
끝까지 보고 따라하시면 큰 문제없이 Netcode for gameobjects의 서버를 호스팅하실 수 있을 거예요.
유니티가 지원했던 Multiplay 데디케이티드 서버가 2026년 3월 31일부로 공식 종료되었습니다.
그래서 멀티플레이를 타겟하는 분들은 길을 잃으셨을 수 있습니다.
일부는 포톤으로 넘어가기도 했고, 비싼 돈 내고 데디케이티드 서버를 빌리기도 했을 것입니다.
그러나 오라클 클라우드 무료 티어 구간으로 해소해 보실 수 있습니다.

이번 강의의 결과물입니다.
클라우드 리눅스 서버에서 데디케이티드 서버를 돌리고 클라이언트가 해당 아이피로 접속에 성공한 모습입니다.
오라클 클라우드 무료 티어
글로벌 기업인 오라클(Oracle)이 전 세계 데이터 센터 네트워크를 통해 제공하는 엔터프라이즈급 클라우드 컴퓨팅 서비스입니다.
여기에서 무료 티어를 제공하는 구간이 있습니다.

https://www.oracle.com/kr/cloud/free/
에서 확인하실 수 있으며 무료여도 꽤 괜찮은 서버로 쓸 수 있습니다.
https://www.oracle.com/kr/cloud/sign-in.html
위 사이트에 들어가 가입하기로 회원가입을 합니다.
틀린 내용이 없이 잘 입력합니다.
주소 입력란에는 영문주소로 입력합니다.
마스터 카드나 비자카드 등의 신용카드 인증이 필요하니 준비하고 인증합니다.
서버 리전은 여러분이 살고 있는 지역과 가까운 곳 또는 타겟하는 지역으로 선택합니다.
하나만 선택할 수 있으며 나중에 수정이 불가하니 신중히 선택해주세요.
'내 무료 체험판 시작하기' 체크하여 계정 생성을 완료합니다.
회원가입이 완료되고 로그인을 시도하면 이번에는 2단계 인증으로 모바일 앱 인증까지 하라고 합니다.
구글 플레이 스토어 또는 앱스토어에서 Oracle Mobile Authenticator를 다운받고 PC와 QR로 연결해 인증합니다.
인스턴스 생성하기

VM (Virtual Machine) 가상 머신에 컴퓨터를 할당받겠습니다.
메뉴 (햄버거 아이콘) - Compute - Instances - Create Instance

이름을 정해줍니다.
Advanced options에서 전용 서버를 대여할 것이므로 Dedicated host를 선택합니다.

대여할 서버의 템플릿을 선택하는 곳입니다.
Change Image 클릭

Ubuntu로 선택합니다.
우분투는 그래픽 인터페이스(GUI)를 제외하고 터미널 기반의 환경을 제공하여 자원 효율성과 보안성을 극대화한 서버 전용 에디션입니다.

Free가 써진 것을 클릭합니다. 1순위는 Ubuntu 2순위는 Oracle Linux로 합니다.
Select image를 클릭합니다.

그리고 이번에는 Change Shape를 누릅니다.
Instance type을 Virtual machine을 선택합니다.
가상 머신은 한 하드웨어에 여러 서버를 실행할 수 있지만, 베어메탈 머신은 한 하드웨어를 통째로 빌립니다.
Ampere의 VM.Standard.A1.Flex를 선택하면 너무 좋지만 비어있는 경우에만 선택이 되니 새벽시간 등이라던가 노려볼 수 있습니다.

VM.M.Standard.E2.1.Micro로 OCPU 1, Memory 1GB로 저는 진행하겠습니다.
반드시 Always Free-eligible를 선택해야만 무료 티어입니다.
Select shape 클릭

Security는 안 건들고 넘어가겠습니다.

VNIC (Virtual Network Interface Card)는 IP 주소나 방화벽 규칙 등을 설정해주는 가상 카드입니다.
이름을 설정하고 Create new virtual cloud network로 새로 할당합니다.
Subnet은 부분 네트워크로 Public과 Private이 있는데요.
Public은 인터넷을 통해 누구나 접근할 수 있는 열린 공간이며, Private는 인터넷이 차단된 내부에서 통신하는 망입니다.
Create new public subnet으로 새로 할당합니다.

Add SSH keys 탭에서 Generate a key pair for me를 선택합니다.
Download private key로 SSH인증서 키를 받아서 내 컴퓨터에 잘 보관해 둡니다.
해당 키를 잃어버리면 추후 서버 접근이 불가능해지며 오직 인스턴스를 삭제하고 다시 만드는 방법밖에 없습니다.
다운받은 파일은 "ssh-key-2026-06-20.key" 처럼 파일이름이 부여된 것을 확인하실 수 있습니다.

Storage, Review는 안 건들고 넘어가겠습니다.
끝까지 오시면 Create를 눌러 생성합니다.

만약 이렇게 shape 도메인 용량이 부족하다고 하면 Image의 Free 중 다른 것을 선택해주면 됩니다.

성공적으로 인스턴스가 만들어졌습니다.

Compute - Instances 에 보시면 인스턴스가 생성된 것을 볼 수 있습니다.
Public IP가 외부에서 접근할 수 있는 아이피입니다.
포트포워딩 설정
포트포워딩은 외부에서 보내온 통신 요청을 내부 네트워크에 있는 서버의 특정 포트로 정확하게 전송해 주는 이정표 역할을 합니다.

Compute - Instances - 내 인스턴스 이름 클릭 - Details - Instance details - Virtual cloud network의 vcn-xxxxxx로 쓰인 이름 클릭

Security - Security Lists - Defaut Security List for vcn-xxxxxx 이름 클릭

Security Rules - Add Ingress Rules

Source Type: CIDR
Source CIDR: 0.0.0.0/0
IP Protocol: UDP
Source Port Range: 비어있어야 합니다
Destination Port Range: 7777 (유니티 넷코드 포 게임오브젝트에서 기본설정된 포트입니다)
Add Ingress Rules을 클릭해 포트포워딩을 완료합니다.
유니티 멀티 구현
Window - Package Management -Package Manager - Unity Registry에서
Netcode for GameObjects, Multiplayer Tools, Multiplayer Play Mode를 설치합니다.

빈 게임오브젝트 NetworkManager로 이름을 변경하고 NetworkManager컴포넌트를 붙힙니다.
Log Level을 Developer로 하면 상세한 로그가 나옵니다.
Select transport - UnityTransport로 선택합니다.

플레이어가 될 캡슐을 하나 만들고 이름을 NetworkPlayer로 변경합니다.
NetworkObject, NetworkTransform, PlayerMove, PlayerInput 컴포넌트를 달아줍니다.
NetworkTransform은 Position x와 z만 동기화 하도록 했고, Authority Mode를 Owner로 했습니다.
PlayerMove는 뉴인풋 시스템으로 움직임을 처리할 아래 나올 스크립트입니다. PlayerInput을 필드에 연결합니다.
PlayerInput은 플레이어의 입력을 받습니다. 리모트 플레이어는 컴포넌트를 비활성화 해야합니다.
그리고 프리팹으로 만듭니다.
PlayerMove.cs
using UnityEngine; using Unity.Netcode; using UnityEngine.InputSystem; public class PlayerMove : NetworkBehaviour { [SerializeField] PlayerInput playerInput; [SerializeField] float moveSpeed = 5f; InputAction moveAction; public override void OnNetworkSpawn() { if (IsOwner) { moveAction = playerInput.actions["Move"]; } else { playerInput.enabled = false; } } void Update() { if (!IsOwner) return; Vector2 move = moveAction.ReadValue<Vector2>(); transform.Translate(new Vector3(move.x, 0, move.y) * Time.deltaTime * moveSpeed); } }NetworkBehaviour를 상속받으면 MonoBehaviour에서 네트워크 쪽으로 간편하게 확장됩니다.
OnNetworkSpawn에서는 Move입력을 액션으로 받고 소유자가 아닌경우 PlayerInput 컴포넌트를 비활성화 합니다.
Update에서는 xz평면으로 움직입니다.

NetworkManager 컴포넌트 - Default Player Prefab에 NetworkPlayer 프리팹을 넣어 클라이언트가 연결되자마자 스폰하도록 합니다.
NetworkConnector.cs
using UnityEngine; using Unity.Netcode; using Unity.Netcode.Transports.UTP; public class NetworkConnector : MonoBehaviour { [SerializeField] string dedicatedServerAddress; [SerializeField] ushort dedicatedServerPort; void Start() { #if !UNITY_EDITOR && UNITY_SERVER StartDedicatedServer(); #endif } public void StartDedicatedServer() { UnityTransport unityTransport = NetworkManager.Singleton.GetComponent<UnityTransport>(); unityTransport.SetConnectionData("0.0.0.0", dedicatedServerPort, "0.0.0.0"); NetworkManager.Singleton.StartServer(); Debug.Log($"Server started on port {dedicatedServerPort}"); } public void StartDedicatedClient() { UnityTransport unityTransport = NetworkManager.Singleton.GetComponent<UnityTransport>(); unityTransport.SetConnectionData(dedicatedServerAddress, dedicatedServerPort); NetworkManager.Singleton.StartClient(); } public void StartServer() { NetworkManager.Singleton.StartServer(); } public void StartHost() { NetworkManager.Singleton.StartHost(); } public void StartClient() { NetworkManager.Singleton.StartClient(); } }에디터가 아닌 리눅스 서버에서는 시작하자마자 데디케이티드 서버를 열도록 했습니다.
이때 IP는 127.0.0.1이 아니라 0.0.0.0으로 설정했다는게 중요합니다.
127.0.0.1은 localhost이며 나 자신의 주소를 참조합니다.
외부 인터넷을 거치지 않는 내부에서만 돌기 때문에 절대 외부에서 접근할 수 없습니다.
0.0.0.0은 모든 주소이며 외부에서도 접근할 수 있도록 모든 신호를 열어둡니다.
StartServer, StartHost, StartClient는 개발용입니다.
NetworkManager - UnityTransport에 있는 Address가 127.0.0.1이고 Port가 7777인 것으로 동작합니다.

씬에 빈 게임오브젝트 NetworkConnector로 이름을 변경하고 NetworkConnector 스크립트를 넣습니다.
클라이언트가 연결할 데디케이티드 서버의 Public IP와 Port를 넣습니다.

오라클 클라우드 - Compute - Instances - Public IP에서 공개 아이피를 확인할 수 있습니다.

캔버스에 오른쪽 위 앵커를 두고 Dedicated Client, Server, Host, Client 버튼을 만듭니다.
각각 클릭시 StartDedicatedClient, StartServer, StartHost, StartClient를 호출하도록 연결합니다.

Window - Multiplayer - Multiplayer Play Mode는 빌드하지 않고 에디터 상에서 멀티가 가능하게 합니다.
Player 2를 체크하면 두번째 창이 나오는 식입니다.

하나는 Host, 하나는 Client로 접속하고 방향키로 움직이면 움직임이 동기화 되는 것을 보실 수 있습니다.
데디케이티드 서버 빌드
데디케이티드 서버는 네트워크 서비스 제공을 전담하는 단독 서버입니다.
Netcode for Gameobjects에는 서버, 호스트, 클라이언트로 접속하는 세가지 방법이 있는데요.
서버 부분을 전담하기 때문에 플레이어들은 클라이언트로 접속하도록 하면 됩니다.

유니티 허브 - 설치 - 사용할 버전 - 관리 - 모듈 추가

Linux Dedicated Server Build Support를 설치해주셔야 리눅스 데디케이티드 서버 빌드가 가능합니다.

File - Build Settings - Linux Server로 Switch Platform 하고 Build를 누릅니다.

.x86_64가 리눅스의 실행파일입니다.
파일질라로 서버 업로드
파일질라는 컴퓨터와 원격 서버 간에 파일을 쉽게 주고받을 수 있게 해주는 무료 오픈소스 FTP(파일 전송 프로토콜) 클라이언트 프로그램입니다.
파일질라(https://filezilla-project.org/) 클라이언트를 다운받습니다.

파일 - 사이트 관리자 - 새 사이트를 만듭니다.
프로토콜: SFTP (SSH인증서로 연결합니다)
호스트: 오라클 클라우드 인스턴스의 Public IP
포트: 비워둡니다
로그온 유형: 키 파일
사용자: ubuntu (Oracle Linux 사용자는 oracle)
키 파일: 찾아보기로 인스턴스를 만드는 중에 저장한 private ssh key의 위치를 지정합니다. 모든 파일로 보기로 해야 볼 수 있습니다.
연결을 누릅니다.

오른쪽에 원격 사이트 폴더가 보입니다.
이 부분이 바로 오라클 클라우드에서 만든 우분투 서버 내부로 들어온 것입니다.

ubuntu 하위에 DedicatedServer라고 디렉터리를 만듭니다.

파일질라 원격에서 DedicatedServer폴더 경로로 이동합니다.
빌드한 리눅스 서버 중 DoNotShip을 제외하고 원격 폴더에 드래그하여 업로드 합니다.

잘 업로드 되었습니다.
명령 프롬프트로 리눅스 우분투 서버 실행하기

시작 - cmd 검색 - 명령 프롬프트 - 우클릭 관리자 권한으로 실행

SSH키가 존재하는 경로까지 이동합니다.
cd [경로]: 경로로 이동
cd ..: 상위 폴더로 이동
경로를 복사한 뒤 우클릭으로 붙혀넣을 수 있습니다.

icacls "[SSH키 이름].key" /grant:r "%username%":"(R)" /inheritance:r
SSH키 파일의 소유권을 현재 로그인한 윈도우 사용자에게 가져옵니다.
ssh -i [SSH키 이름].key ubuntu@[Public아이피]
SSH키로 우분투 서버에 접속합니다. (Oracle Linux는 ubuntu대신 orc 입력합니다)
연결을 계속하겠습니까? 물어보면 yes 입력합니다.
서버에 접속하였습니다.
sudo iptables -F
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 7777 -j ACCEPT
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo netfilter-persistent save보안 규칙을 설정합니다.
명령 프롬프트 포트인 tcp 22와 유니티 넷코드 포트인 udp 7777 번을 열고 나머지 포트는 닫고 저장합니다.
cd 명령어를 사용해 서버 실행파일이 있는 폴더 경로로 이동합니다.
sudo apt update
sudo apt install tmux -y가상 백그라운드 터미널인 tmux를 설치합니다.
tmux new -s unity
unity 라는 이름으로 가상 터미널을 만듭니다.
가상 터미널로 들어가게 되며 하단의 색이 바뀌게 됩니다.

chmod +x [서버이름].x86_64
실행파일에 실행 권한을 부여합니다.
./[서버이름].x86_64 -batchmode -nographics
서버를 실행합니다.
-batchmode: 유니티 화면 GUI를 띄우지 않습니다.
-nographics: 그래픽 장치를 사용하지 않도록 하여 그래픽 연산을 하지 않습니다.

서버가 열렸다는 로그가 떴습니다.

유니티 에디터에서 Dedicated Client 버튼을 눌러 연결해보니 서버와 연결이 되었습니다.
가상 터미널 관련 명령어는 다음과 같습니다.
Ctrl + B 다음에 D를 눌러 백그라운드로 빠져나옵니다. 서버가 실행중이면 터미널을 종료해도 실행중이게 됩니다.
가상 터미널 내 실행중인 서버에서 Ctrl + C 눌러 서버를 종료할 수 있습니다.
가상 터미널에서 exit 입력해 가상 터미널을 종료할 수 있습니다.
tmux attach -t unity 를 입력해 가상 터미널에 다시 들어갈 수 있습니다.
tmux new -s unity 를 입력해 가상 터미널을 새로 생성할 수 있습니다.
웹GL에서 연결하기
리눅스 서버 빌드에는 UnityTransport 컴포넌트의 Use Web Sockets을 체크하고 파일을 올려야 합니다.
웹GL 빌드에는 UnityTransport 컴포넌트의 Use Web Sockets을 체크하고 빌드해야 합니다.
오라클 클라우드 웹에서는 tcp 7777번도 포트포워딩 해야합니다.
sudo iptables -A INPUT -p tcp --dport 7777 -j ACCEPT
sudo netfilter-persistent save우분투 서버 접속해서 tcp 7777번 포트도 접속을 허용해주고 저장합니다.

itch.io에서 제목을 정해주고 Kind of project를 HTML로 설정합니다.

Upload files에 유니티에서 WebGL로 빌드한 결과를 압축해 업로드합니다.
Frame options에는 Automatically start on page load를 체크할게요.

역시나 Dedicated Client로 접속하면 연결이 됩니다.
F12 - Console에 유니티 로그를 볼 수 있습니다.
마무리
Netcode for Gameobjects에 대해 기초부터 마스터하고 싶다면 다음을 참고하세요.
멀티 서버 게임오브젝트 넷코드 마스터하기 / Master Unity Netcode for GameObjects
넷코드(Netcode)란?유니티의 서버용 코드입니다.과거 유넷(Unet)이나 미러(Mirror)의 유니티 최신 상위호환이라고 보면 됩니다.넷코드 자체는 무료입니다.넷코드 만으로는 자체 서버를 돌리는 등의
goranitv.tistory.com
이제 여러분들은 무료로 데디케이티드 서버를 할당받았습니다.
좋아요 하나 부탁드립니다.
'유니티' 카테고리의 다른 글
유니티 Codex CLI 연동하기 / Unity Link Codex CLI (0) 2026.06.09 유니티에 커서 AI와 MCP 연동하기 / Unity Link Cursor AI and MCP (0) 2026.05.21 유니티 커스텀 렌더 피쳐 다루기 / Unity Custom Render Feature (0) 2025.11.12 유니티 개발자를 위한 블렌더 강의 / Blender Tutorial for Unity Developer (0) 2025.10.02 유니티6 구글 플레이 스토어 출시 마스터북 / Unity Google Play Store Publish Masterbook (2) 2025.02.22