클래스를 어떻게 분리할 것인가?

 

일반적으로 객체 지향 프로그래밍 중 클래스에 코드를 구현하다 보면 어? 코드가 너무 많은데? 하는 순간이 찾아옵니다.
보통은 별개의 클래스로 나누어 작업을 진행합니다. 하지만 partial class를 사용하면 하나의 클래스를 여러 파일로 나누어 작업을 진행할 수 있습니다.

 

 

작업을 별도의 클래스로 분리하는 경우:

 

별도의 클래스로 분리하는 경우 단일 책임 원칙 (Single Responsibility Principle)을 지킬 수 있다는 장점이 있습니다.

클래스는 하나의 책임만 가져야 한다는 원칙에 따라, 작업을 별도의 클래스로 분리하면 각 클래스는 더 작은 하나의 책임만 지도록 할 수 있습니다..

 

또한 모듈화를 통한 재사용성 향상을 기대할 수 있습니다.

작업을 별도의 클래스로 분리하면 해당 작업을 다른 부분에서 재사용하기 용이합니다.

 

이로 인해 테스트 용이성이 향상됩니다.

분리된 클래스는 독립적으로 테스트하기 쉽기 때문에 단위 테스트가 용이합니다.

 

하지만 클래스 수 증가로 인한 복잡도 증가가 발생할 수 있습니다.

여러 작업을 별도의 클래스로 나누면 클래스 수가 증가하게 됩니다. 클래스가 많아지면 전체적인 코드의 이해와 유지보수가 어려워질 수 있습니다.

 

 

 

partial 클래스로 나누어 구현하는 경우:

 

partial 클래스를 사용하면 단일 클래스 내에서 논리적 구분이 가능해집니다.

partial 클래스를 사용하면 논리적으로 관련된 코드를 동일한 클래스 내에서 나누어 구현할 수 있습니다. 이로써 클래스의 응집성(cohesion)을 높일 수 있다는 장점을 갖게 됩니다.

 

또한 모듈화 시켜 코드를 작성함과 동시에 컴파일 시 통합되기 때문에 코드의 가독성을 높일 수 있습니다.

partial 클래스를 컴파일 시에 하나의 클래스로 통합되기 때문에 코드를 나누어 작성하더라도 최종적으로는 하나의 클래스로 구현됩니다. 따라서 코드의 가독성을 높일 수 있습니다.

 

 

결론

 

만약 프로젝트에 대한 미리 정의된 코딩 가이드가 있다면 그것을 따르는 것이 좋습니다.

일반적으로는 단일 책임 원칙을 준수하고 모듈화와 재사용성을 높일 수 있는 방향으로 작업을 분리하는 것이 좋습니다. 

하지만 프로젝트의 구조나 특정한 상황에 따라서는 partial 클래스를 사용하여 클래스의 일부를 나누는 것이 효과적일 수 있습니다. 

가장 좋은 방법은 둘 다 사용해 본 뒤 자신의 상황에 적절한 방식을 선택하는 것입니다.

 

반응형

 

 

팔월드 멀티 비밀번호방 접속 방법에 대해 알아봅니다. 해당 글은 현재 얼리액세스 버전인 v.0.1.2 버전에 맞춰서 작성하였습니다.

 

게임이 아직 얼리액세스이다 보니 전용서버에 암호와 함께 직접 접속하는 방법이 없습니다. 따라서 커뮤니티 서버에서 검색해서 게임에 접속하시거나 다음 방법을 사용하시면 됩니다.

 

 

먼저 "멀티 플레이 참가하기(전용서버)"를 클릭 한 뒤 "커뮤니티 서버"에서 IP 및 포트를 직접 입력해 접속을 시도합니다.

 

 

그럼 위와 같이 암호를 입력해야 한다는 오류와 함께 방 입장에 실패합니다. 만약 타임아웃 메시지가 나왔다면 서버에 문제가 있는것으로 서버 호스트에 문의해야 합니다.

 

 

저 에러 메시지를 본 뒤 다시 "멀티 플레이 참가하기(전용서버)"를 클릭 한 뒤 "최근 접속한 서버"로 이동하면 아까 입장에 실패했던 방이 있습니다.

 

 

이제 저 방을 클릭하고 암호를 입력 한 뒤 게임을 즐기시면 됩니다.

 

 

 

 

 

반응형

 

요즘 핫한 게임 팔월드. 친구들과 함께 즐기기 위해 전용 서버를 구축하며 발생한 시행착오와 구축 방법에 대해 정리합니다.

 

 

 

0. 준비

 

전용 서버를 구동할 PC 혹은 서버

** 전 Ubuntu 서버에 구축하였습니다. SteamCmd를 설치하는 방법부터 설명하오니 Windows를 사용하는 분은 "2. PalWorld Dedicated Server 설치"부터 읽어주시면 됩니다.

 

 

 

1. SteamCmd 설치

 

당연하지만 가장 먼저 스팀을 설치해야 합니다. 만약 GUI가 지원되는 PC라면 웹 브라우저를 열고 Steam 페이지로 들어가 Steam을 설치합니다.

 

만약 GUI를 지원하지 않으면 CMD를 설치해야 합니다.  다음 명령어로 steam이라는 유저를 생성(Steam 로그인 계정이 아닙니다.)합니다.

 

> sudo useradd -m steam
> sudo passwd steam

 

유저를 생성한 뒤 권한을 부여해야 합니다. 다음 명령어를 수행해 sudoers를 열어줍니다.

 

> sudo vi /etc/sudoers

 

이제 생성한 steam 유저에 권한을 부여합니다. " root ALL=(ALL:ALL:) ALL"를 찾아 그 아래애 다음과 같이 추가합니다.

...
root ALL=(ALL:ALL:) ALL
steam ALL=(ALL:ALL) ALL
...

 

다음엔 생성한 steam 유저로 로그인해 SteamCmd를 설치합니다.

 

> sudo useradd -m steam
> sudo passwd steam
> sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
> sudo apt install steamcmd

 

 

 

 

2. PalWorld Dedicated Server 설치

 

먼저 Windows나 Ubuntu Desktop(GUI)를 사용한다면 Steam을 열고 라이브러리로 이동한 다음 " PalWorld Dedicated Server"를 설치하면 됩니다.

 

 

간단하게 PalWorld Dedicated Server 설치가 끝났습니다. "3. 서버 설정"으로 가서 나머지 글을 읽어주세요.

 

만약 Ubuntu Server(CLI)를 사용한다면 다음 명령어를 통해 PalWorld Dedicated Server를 설치해야 합니다.

 

> steamcmd +login anonymous +app_update 2394010 validate +quit
> cd ~/Steam/steamapps/common/PalServer
> ./PalServer.sh

 

./PalServer.sh 명령어를 수행하면 자동으로 전용 서버가 시작됩니다. 만약 다음과 같은 오류가 발생한다면 추가 명령어 수행이 필요합니다.

 

.steam/sdk64/steamclient.so: cannot open shared object file: No such file or directory

 

터미널에 위와 같은 오류가 있다면 다음 명령어를 수행해 줍시다.

 

> mkdir -p ~/.steam/sdk64/
> steamcmd +login anonymous +app_update 1007 +quit
> cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/

 

이제 다시 ./PalServer.sh를 수행하면 정상적으로 서버가 구동됩니다.

 

** 참고: 다음과 같은 오류가 발생하는 것은 정상으로 서버 구동에 문제가 없습니다.

$ ./PalServer.sh
Shutdown handler: initalize.
Increasing per-process limit of core file size to infinity.
dlopen failed trying to load: steamclient.so with error: steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/ubuntu/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so')

 

 

 

 

3. 서버 설정

 

이제 다른 친구들이 내 서버에 접속할 수 있게 만들어야 합니다. 만약 자신이 퍼블릭 IP를 직접 사용하고 있다면 이 설명은 스킵하셔도 됩니다.

 

하지만 내 전용 서버가 공유기에 연결되어 있는 경우에는 포트포워딩이 필요합니다. 포트포워딩의 개념이나 원리에 대해서는 스킵하고 설정하는 방법에 대해서만 설명합니다.

 

먼저 크롬과 같은 웹 브라우저를 열고 http://192.168.0.1/의 주소(IPTime 공유기 기준)로 이동합니다.

 

 

보안 인증을 하고 로그인 한 뒤 관리도구 > 고급설정 > NAT/라우터 구성 > 포트포워드 설정으로 이동합니다.

 

 

이제 위와 같이 PalServer에 대한 포트포워드 구성을 진행합니다. 최소 하나의 항목을 추가해야 합니다.

 

 

1. 규칙이름: 포트포워드 설정을 구성하는 이름입니다. 

2. 내부 IP 추소: 전용 서버가 설치된 PC의 IP 주소입니다. 만약 관리페이지를 전용 서버가 설치된 PC에서 들어갔다면 체크박스를 클릭해 간단하게 설정합니다.

3. 프로토콜: 해당 포트를 사용하는 프로토콜입니다. PalWorld는 기본적으로 UDP를 사용하는 것으로 알려져 있습니다  전 그냥 둘 다 활성화시켜놨습니다.

4. 외부 포트: 외부망에서 공유기로 접속할 때 사용하는 포트입니다. 포트포워드 설정에 겹치지 않게 적절하게 수정하셔도 됩니다.

5. 내부포트: 전용서버가 사용하는 포트입니다. PalWorld는 기본적으로 8211 포트를 사용합니다

 

** 참고: 내부포트 8211은 서버에서 사용하고 27015는 Query에, 25575는 RCON에 사용된다고 알려져 있습니다. 서버만 구동하는 데에는 8211 포트만 설정해도 서버는 구동됩니다. 

 

 

 

4. 게임 설정

 

이제 서버 설정이 끝났습니다. 이제 인게임 설정을 진행합시다. 내가 만든 서버가 공개되어 아무나 들어오게 하고 싶진 않습니다. 방정보와 비밀번호를 설정해 봅시다.

 

서버 설정파일은 다음에 위치하고 있습니다.

Windows: \Steam\steamapps\common\PalServer\Pal\Saved\Config\WindowsServer\PalWorldSettings.ini

Linux: ~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini

 

서버 설정의 기본값은 다음에 위치하고 있습니다.

Windows: \Steam\steamapps\common\PalServer\DefaultPalWorldSettings.ini

Linux:  ~/Steam/steamapps/common/PalServer/DefaultPalWorldSettings.ini

 

DefaultPalWorldSettings.ini에 있는 내용을 복사해 PalWorldSettings.ini에 적용시키면 됩니다.

[/Script/Pal.PalGameWorldSettings]
OptionSettings=(Difficulty=None,DayTimeSpeedRate=1.000000,NightTimeSpeedRate=1.000000,ExpRate=1.000000,PalCaptureRate=1.000000,PalSpawnNumRate=1.000000,PalDamageRateAttack=1.000000,PalDamageRateDefense=1.000000,PlayerDamageRateAttack=1.000000,PlayerDamageRateDefense=1.000000,PlayerStomachDecreaceRate=1.000000,PlayerStaminaDecreaceRate=1.000000,PlayerAutoHPRegeneRate=1.000000,PlayerAutoHpRegeneRateInSleep=1.000000,PalStomachDecreaceRate=1.000000,PalStaminaDecreaceRate=1.000000,PalAutoHPRegeneRate=1.000000,PalAutoHpRegeneRateInSleep=1.000000,BuildObjectDamageRate=1.000000,BuildObjectDeteriorationDamageRate=1.000000,CollectionDropRate=1.000000,CollectionObjectHpRate=1.000000,CollectionObjectRespawnSpeedRate=1.000000,EnemyDropItemRate=1.000000,DeathPenalty=All,bEnablePlayerToPlayerDamage=False,bEnableFriendlyFire=False,bEnableInvaderEnemy=True,bActiveUNKO=False,bEnableAimAssistPad=True,bEnableAimAssistKeyboard=False,DropItemMaxNum=3000,DropItemMaxNum_UNKO=100,BaseCampMaxNum=128,BaseCampWorkerMaxNum=15,DropItemAliveMaxHours=1.000000,bAutoResetGuildNoOnlinePlayers=False,AutoResetGuildTimeNoOnlinePlayers=72.000000,GuildPlayerMaxNum=20,PalEggDefaultHatchingTime=72.000000,WorkSpeedRate=1.000000,bIsMultiplay=False,bIsPvP=False,bCanPickupOtherGuildDeathPenaltyDrop=False,bEnableNonLoginPenalty=True,bEnableFastTravel=True,bIsStartLocationSelectByMap=True,bExistPlayerAfterLogout=False,bEnableDefenseOtherGuildPlayer=False,CoopPlayerMaxNum=4,ServerPlayerMaxNum=32,ServerName="Default Palworld Server",ServerDescription="",AdminPassword="",ServerPassword="",PublicPort=8211,PublicIP="",RCONEnabled=False,RCONPort=25575,Region="",bUseAuth=True,BanListURL="https://api.palworldgame.com/api/banlist.txt")

 

딱 두줄만 복사하면 됩니다. 줄 바꿈을 하시면 안됩니다. 줄바꿈을 하는 경우 설정이 무효화되어 이전 설정값으로 바뀌거나 기본 설정값이 사용됩니다.

(수정) 줄바꿈해도 적용 됩니다. 다만, 게임이 실행중일떄 설정을 바꾼 후 게임을 종료하게되면 기존 게임 설정으로 롤백됩니다. 미리 설정을 바꾸고 서버를 빠르게 재시작하려고 했는데 설정이 롤백되는것을 확인했습니다.

 

자세한 설정값은 공식 홈페이지(Optimize game balance, Settings)에서 확인 후 변경하시면 됩니다.

 

간단하게 방 이름과 암호만 바꾸려면 다음 값을 수정해 주시면 됩니다.

 

1. ServerName="Default Palworld Server" => 방 이름을 변경합니다.

2. ServerPassword="" => 방에 접속할 때 비밀번호를 설정합니다.

3. AdminPassword="" => 방에 접속 후 관리자 명령어를 사용할 떄 필요합니다.

 

관리자 명령어는 마인크래프트에서 tp 같은 명령어를 사용할 때 쓰는 것과 동일하다고 생각하시면 됩니다. 관리자 명령어는 공식 홈페이지(Commands)에서 확인하실 수 있습니다.

 

이제 서버를 구동합시다.

Windows: \Steam\steamapps\common\PalServer\PalServer.exe

Linux: ~/Steam/steamapps/common/PalServer/PalServer.sh

 

 

 

5. 접속: 암호가 있는 방에 IP로 접속하기

 

게임이 아직 얼리액세스이다 보니 전용서버에 암호와 함께 직접 접속하는 방법이 없습니다. 따라서 커뮤니티 서버에서 검색해서 게임에 접속하시거나 다음 방법을 사용하시면 됩니다.

 

* 커뮤니티 서버 검색 후 접속

 

 

가장 기본적인 접속 방법입니다. 방 이름을 검색해 접속하면 됩니다. 방을 선택하면 비밀번호를 입력하는 화면이 나와 비밀번호를 입력하고 접속하면 됩니다.

 

하지만 이 방법의 경우 전용 서버가 제대로 검색되지 않는 경우가 많이 발생합니다. 따라서 다음과 같이 접속하는 방법을 사용해서 비밀 방에 접속할 수도 있습니다.

 

* 직접 접속하기.

 

 

일단 그림과 같이 IP와 포트를 입력해 직접 접속합니다.

 

 

우린 암호를 입력하지 않았으므로 접속에 실패합니다. 다시 전용서버 화면으로 이동합니다. 이번에는 직접 IP를 입력하는 게 아니라 "최근 접속한 서버"를 클릭합니다.

 

 

그럼 방금 전에 접속시도한 서버가 보입니다. 이제 암호를 입력하고 접속해 게임을 즐기시면 됩니다.

 

 

 

 

 

 

반응형

+ Recent posts