[C#] 남는 윈도우 컴퓨터에 게임 서버 배포

Arthur·2023년 12월 11일
0
post-thumbnail

진행하게 된 계기


문제점 발견

멀티플레이 게임을 만들면서 테스트를 위해 게임 서버를 계속 껐다가 켜는 번거로움이 있었습니다.

이 문제는 팀 프로젝트를 할 때 다른 팀원의 생산성도 떨어지게 만들었습니다.
그래서 해결 방법을 고민하게 되었습니다.

방법은 남는 노트북 컴퓨터에 테스트용 게임 서버를 구축하는 것입니다.
테스트 시간에 맞춰서 게임 서버는 계속 켜져있기 때문에 로컬에서 껐다가 키는 번거로움이 사라집니다.


클라우드를 사용하면 훨씬 편하고 좋지 않나?

클라우드를 사용하면 편하겠지만, 편한만큼 금액을 지불해야 하는 문제가 있었습니다.

그리고 우분투를 직접 설치하고 쉘 명령어(Command)를 직접 입력하면서 많은 것을 배웠습니다.
vi 에디터를 사용해 문서를 직접 편집하는 것도 재미있으면서도 색다른 경험이였습니다.



시행착오를 거치면서 여러번 반복해보니까 버전이랑 환경에 따라 조금씩 다르지만,
어느정도의 틀은 비슷하다는 것을 알게 되었습니다.

그래서 글로 한 번 정리를 잘 해놓으면 가이드라인을 따라 좀 더 쉽게 구축 및 배포할 수 있겠다고 생각해서 이렇게 글로 작성하게 되었습니다.


진행 순서



1. 남는 컴퓨터에 우분투 설치하기


1) 우분투 설치 USB 만들기

준비물

  • USB
    • 부팅용 USB, iso 파일이 4.05 기가를 넘기 때문에 용량이 넉넉한 걸로 구매합니다.
  • 우분투.iso 파일
    • 우분투 설치에 필요한 iso 파일
  • Rufus
    • 부팅용 USB 드라이브 생성을 위해 사용합니다.

위 준비물 중에서 우분투.iso 파일과 Rufus 다운로드 링크와 방법을 아래에 정리했습니다.



우분투 iso 파일 다운로드

mirror.kakao 링크

mirror.kakao에서 우분투 20.04LTS 버전을 다운로드 받습니다.
(4.05기가 정도의 용량이라 다운로드 받는데 시간이 꽤 걸립니다.)



Rufus 다운로드

Rufus 사이트 링크

각자 개인 컴퓨터에 맞는 버전을 다운로드 받습니다.
(저는 4.2 버전을 사용했습니다.)



설치 USB 만들기

  1. 설치 USB를 컴퓨터 USB 포트에 연결합니다.
  1. Rufus 파일을 실행해서 '선택' 버튼을 클릭합니다.
  2. 다운로드 받은 우분투.iso 파일을 선택합니다.
  1. '시작' 버튼을 누릅니다.

USB를 포맷하고 시작하기 때문에 기존 USB 내에 있는 파일은 미리 옮겨놓는 것을 추천드립니다.



2) 바이오스 접속 USB 우선으로 부팅 후 우분투 설치

바이오스 접속 방법은 각 컴퓨터 제조사마다 다릅니다.
(보통 접속방법은 부팅 시 F2, F10, F11, F12, DEL 키로 BIOS 진입합니다)

  • Dell 컴퓨터 사용 시 공식 영상 가이드 => 링크

여기서 우분투 부팅용 USB만 연결해서 재부팅하면 바로 설치까지 스무스하게 진행되는 컴퓨터도 있습니다.

하지만 제 Dell 노트북은 몇 가지 설정을 해주는 부분이 있어서 시간을 꽤 많이 잡아먹었습니다.



중요!!) SSD 설정을 RAID 에서 AHCI 로 변경!!

잘 정리되어 있는 블로그 글 => 링크

저는 부팅 우선 순위는 잘 변경했지만, SSD 설정을 AHCI로 변경하지 않았었습니다.

위에 잘 정리되어 있는 블로그 링크를 꼭 참고해서 시도해보시길 추천드립니다.

RAID와 AHCI가 무엇인지 궁금해서 자료를 찾아봤습니다.
(게임 서버 배포와 연관성이 적기 때문에 궁금하신 분들만 읽어 보시는 것을 추천드립니다.)

RAID란?

복수 배열 디스크(RAID)는 여러 개의 하드 디스크에 일부 중복된 데이터를 나눠서 저장하는 기술이다. 디스크 어레이(disk array)라고도 한다. 데이터를 나누는 다양한 방법이 존재하며, 이 방법들을 레벨이라 하는데, 레벨에 따라 저장장치의 신뢰성을 높이거나 전체적인 성능을 향상시키는 등의 다양한 목적을 만족시킬 수 있다.
<위키백과 - RAID>

RAID는 각 레벨에 따라 여러 개의 디스크를 묶는 방법이 달라진다고 합니다.

자세한 내용이 궁금하신 분은 아래 링크를 읽어 보시는 것을 추천드립니다.
=> RAID 정리 1. RAID 기본 설명 및 RAID Level (레이드 레벨)


AHCI란?

고급 호스트 컨트롤러 인터페이스(AHCI)는 소프트웨어가, 병렬 구조의 ATA(PATA)에서 제공되지 않는 기능(핫 플러깅 등)을 제공하도록 설계된 호스트 버스 어댑터와 같은 시리얼 ATA (SATA) 장치들과 신호를 주고 받을 수 있도록 만든 하드웨어 구조를 뜻한다. 이 규격은 시스템 메모리와 장치 사이의 데이터 전송을 목적으로 컴퓨터 하드웨어 제조업체들을 위한 시스템 메모리 구조를 자세하게 명시해 놓고 있다.
<위키백과 - AHCI>

SSD 같은 경우 AHCI 모드를 사용해야 제대로된 성능이 발휘될 수 있다고 합니다.
하지만 위 내용도 정확하게 측정을 해야 나오는 것이기 때문에 확실하지는 않습니다.

❗여기서 중요한 것은 RAID에서 AHCI로 변경 후 재부팅을 해서 윈도우로 시작하면 실행이 되지 않습니다.

윈도우에서 설정을 변경해서 AHCI 모드에서도 시작할 수 있게 하는 방법이 있다고 합니다.

저는 번거롭더라도 윈도우 사용 할때는 RAID로 변경하고, 우분투 사용 할때는 AHCI 모드로 변경해서 사용했습니다.



2. SSH 설치 및 접속


SSH란?

네트워크 상 다른 컴퓨터의 쉘을 사용할 수 있게 해주는 프로그램 혹은 프로토콜을 의미합니다.

여기서 쉘은 사용자 명령을 커널(Kernel)에 전달하고, 그 처리 결과를 다시 사용자에게 알려주는 프로그램을 뜻합니다. 쉘은 커널을 마치 껍질처럼 감싸고 있어, 사용자는 이 껍질을 통해야만 커널과 통신할 수 있어 이렇게 이름을 붙였다고 합니다.

  • CLI(Command Line Interface) : csh, bash, ksh, zsh, cmd.exe 등
  • GUI(Graphic User Interface) : Gnome, KDE 등

GUI도 있지만 일반적으로 쉘이라 하면 CLI 환경의 쉘을 의미합니다.

SSH를 활용해서 네트워크 상 다른 컴퓨터의 쉘을 사용 수 있습니다.
매번 게임 서버를 돌리는 컴퓨터에 직접 가서 명령어를 입력 할 필요 없이 SSH를 사용해 원하는 작업을 할 수 있습니다.


SSH 설치

$ sudo apt update
$ sudo apt install openssh-server

우분투 터미널에 위 명령어를 순서대로 입력해주면 간단하게 설치가 진행됩니다.


SSH 설치 확인 및 실행 명령어

$ sudo systemctl status ssh

위 명령어를 입력해서 설치가 되어 있는지 확인합니다.

Active : active(running) 상태가 아니라면 아래의 명령어를 입력해서 실행합니다.

$ sudo systemctl enable ssh
$ sudo systemctl start ssh

systemctl이란?

Linux OS는 부팅되면 데몬이라는 사용자가 직접 제어하지 않는 백그라운드 여러 작업을 하는 프로그램이 실행됩니다.
이러한 데몬들을 Linux에서는 service 파일로 설정하여 실행하고 있으며, systemd라는 프로세스가 관리하고 있습니다.

여기서 Service는 시스템 데몬 및 사용자 정의 데몬을 의미하며,
systemctl은 service(데몬)들을 관리하는 명령어 입니다.


ufw 방화벽 SSH 허용

ufw란?

iptables과 같이 기본적인 방화벽 명령어입니다.
ufw는 iptables에 비해 훨씬 쉽고 직관적인 명령어로 다룰 수 있습니다.

$ sudo ufw allow ssh

위 명령어를 입력해서 방화벽 활성과 ssh의 포트를 허용해줍니다.

$ sudo ufw status
Status: inactive

ufw 방화벽이 활성화 되어있는지 위 명령어를 통해 확인이 가능합니다.

sudo ufw enable
sudo ufw disable

ufw 방화벽 활성화 및 비활성화 명령어는 위 명령어를 통해 설정이 가능합니다.


TCP 허용

$ sudo ufw allow 22/tcp

저는 게임 서버를 C#으로 TCP/IP 통신을 사용해 구현했습니다.
TCP 포트도 동일하게 방화벽을 허용합니다.



3. 공유기 포트포워딩


포트 포워딩이란?

특정한 포트로 들어오는 데이터 패킷을 다른 포트로 바꿔서 다시 전송해주는 작업

공유기의 포트를 통해 이 공유기와 연결된 기기들의 특정 포트에 진입할 수 있게 하는 기능입니다.
클라이언트가 특정 포트로 접근 시 공유기에 연결된 게임 서버의 특정 포트로 전달(Forwarding)해 주는 것입니다.


DHCP 서버

Dynamic Host Configuration Protocol(동적 호스트 구성 프로토콜)의 약자로 IP 네트워크에 사용되는 네트워크 프로토콜입니다. DHCP는 IP 주소 및 기타 통신 매개변수를 네트워크에 연결된 장치에 자동으로 할당합니다. 대부분의 가정용 네트워크에서는 라우터가 IP 주소를 장치에 할당하는 DHCP 서버의 역할을 합니다.
<출처 - NordVPN>

쉽게 말해 가정집에서는 공유기가 DHCP 서버의 역할을 합니다.
공유기에 연결된 네트워크 기기들에게 IP 주소들을 할당해줍니다.


공유기 공인IP의 특정 포트로 접속을 시도하면 포트 포워딩 되어있는 진입할 수 있게 합니다.

내부 기기의 IP와 게임 서버의 배포로 사용할 내부 포트를 포트 포워딩 해야 합니다.
아래는 공유기 별로 포트 포워딩을 하는 방법이 작성되어 있는 블로그입니다.

제조사주소가이드 링크
ipTIME192.168.0.1링크
LG U+192.168.219.1링크
SKT192.168.45.1링크
KT172.30.1.254링크
ASUS192.168.1.1 또는 192.168.50.1링크

고정IP 할당

공유기의 DHCP 서버가가 접속할 내부 기기들의 아이피 주소를 할당해줍니다.
이 때 공유기는 한 번 아이피를 할당해 주었던 기기는 맥 주소를 기준으로 저장해 두었다가,
나중에 다시 연결을 요청할 경우 같은 아이피를 부여해 줍니다.

하지만 아이피 충돌로 인해 원래 배정했던 아이피와 다른 아이피를 배정해 줄 수 있습니다.

허용되지 않는 클라이언트의 접속을 막고 보안을 위해 유동적으로 아이피가 할당 된다는 얘기도 있습니다.


LG U+ 고정 IP 할당 방법

저는 LG U+를 사용해서 해당 제조사의 방법만 정리를 해봤습니다.

  • 상태정보 => DHCP 할당정보 탭을 눌러 이동합니다.

  • DHCP 고정 할당 클릭
  • 할당할 IP 주소 입력 후 추가 버튼 클릭
  • DHCP 고정 할당 목록에서 해당 IP 주소 On 처리

❗❗주의 사항 설정 적용 버튼 클릭 후 진행을 하면 해당 공유기 껐다 켜지게 됩니다. ❗❗

  • 설정 적용 버튼 클릭

위 단계를 전부 마무리 하면 포트 포워딩 적용이 완료된 것입니다.


중요한 네트워크 세팅은 이제 끝이 났습니다.
아래부터는 게임 서버를 배포를 위해 빌드 파일을 우분투에 옮기기 위한 FTP 세팅,
게임 서버를 우분투에서 실행 시키기 위한 .NET 세팅이 남았습니다.



4. FileZilla 설치 및 SFTP 포트 열기


vsftpd 설치 명령어

  • vsftpd : Very Secure FTP, 보안을 강화한 FTP입니다.
$ sudo apt-get install vsftpd

vsftpd.config 파일 수정 - 설정하기

$ sudo vi /etc/vsftpd.conf
  1. write_enable=YES 주석해제
  2. xferlog_file=/ver/log/vsftpd.log 주석 해제
  3. :wq를 입력해서 저장 후 종료

(vi 명령어 가이드 블로그 => 링크)


설정 저장 후 vsftpd 재시작하기 명령어 입력

$ sudo service vsftpd restart

설정을 적용하기 위해 위 명령어를 입력해 vsftpd를 재시작합니다.


FileZilla 설치

FileZilla 다운로드 링크


위와 같이 클릭 후에 설치 파일을 다운로드 받아 설치를 진행합니다.


FileZilla를 사용해 SFTP 서버 접속

설치가 완료되면 FileZilla를 실행합니다.

  • 좌측 상당에 있는 파일 관리자 열기 버튼을 클릭합니다.

꼭 프로토콜을 SFTP로 변경 후에 접속을 시도합니다.

이제 IP를 입력 하고 우분투 사용자 계정 아이디 입력 후 연결을 시도합니다.
우분투 사용자 계정의 비밀번호를 입력하는 창이 나오면 입력 합니다.

접속이 완료되면 우분투가 설치된 컴퓨터의 디렉터리가 성공적으로 조회 됩니다.


FileZilla까지 설치 후 접속 및 세팅이 완료되면 빌드 파일을 우분투에 전송을 하면 됩니다.

만약에 우분투의 SFTP 서버를 같은 공유기 내에 접속해 있는 기기가 아니고,
외부 기기에서 접속하기 위해서는 동일하게 포트 포워딩을 진행해야 합니다.

하지만 저는 SFTP 서버를 외부에서 접속하게 하는 것은 너무 위험하다고 생각해서 진행하지 않았습니다.



5. 우분투에 .NET SDK 또는 .NET 런타임 설치


Microsoft 패키지 리포지토리 추가

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

먼저 .NET이 포함되어 있는 Microsoft Repository를 추가해야 합니다.
위 명령어를 입력해 패키지 서명 키를 추가합니다.


.NET SDK 혹은 .NET Runtime 설치

.NET SDK

sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-8.0

.NET Runtime

sudo apt-get update && \
  sudo apt-get install -y aspnetcore-runtime-8.0

설치 완료 후 dotnet을 입력하면 위와 같이 나오게 됩니다.

이제 C#으로 만든 게임 서버가 빌드된 폴더의 ddl 파일을 가동시키기면 됩니다.

명령어 예시

$ dotnet dll파일명.dll

위와 같이 진행하면 C#으로 만든 게임 서버를 가동 시킬 수 있습니다.



이 글의 핵심 키워드


  • 우분투, BIOS, SSD, systemd와 systemctl, service, 데몬(백그라운드 작업)
  • DHCP, SSH, 쉘(껍질), 커널, CLI
  • ufw, iptables, TCP/IP, 포트포워딩, 포트, 고정IP와 동적(유동)IP, SFTP
  • .NET SDK, .NET Runtime


작성하면서 느낀 점


이전 프로젝트에서는 EC2에 그냥 배포를 하고 간단한 가이드 라인만 따르면 쉽게 배포를 했습니다.

이번에는 네트워크에 대한 실습과 우분투에 대해 직접 하면서 배우기 위해 진행해 봤습니다.

아직 책으로 우분투 리눅스와 네트워크를 깊게 공부하지는 않았지만,
이렇게 한 번 직접 세팅을 하고 배포를 해보는 경험이 크게 도움이 되었다고 생각합니다.

네트워크와 우분투의 방대한 지식을 이해하는 것도 도움을 주지만,
우선 실습을 하면서 하나씩 익혀 보는게 더욱 재미있고 접근성이 좋은 것 같습니다.



참고 자료


  • Dell 공식 유튜브 채널 - USB를 통해 Ubuntu를 설치하는 방법 => 링크
  • 우분투 Ubuntu 설치 USB 만들기 및 windows 멀티부팅 셋팅 => 링크
  • 집에서 홈서버 구축해보자 - 3 (우분투 설치 및 SSH, 공유기 포트 포워딩) => 링크
  • MS Docs - Ubuntu 20.04에 .NET SDK 또는 .NET 런타임 설치 => 링크
  • [포트포워딩] LG U+ 공유기 => 링크
  • SSH란? => 링크
  • service, systemctl 란? => 링크
  • [Ubuntu] FileZilla 연결해서 파일 전송 - FTP => 링크
profile
기술에 대한 고민과 배운 것을 회고하는 게임 서버 개발자의 블로그입니다.

0개의 댓글