졸작을 진행할 때 만들 수 있는 가장 최악의 팀은 무엇일까요???😁😁😁😁

profile image 02BBQ 2025. 6. 17. 23:53

내 팀 내 팀 내 팀 내 팀

내 팀이 진짜 레전드인게 그냥 이게 원래 QA교실 가기 싫어서 만든 팀이지만 나름 기획도 괜찮게 했는데

어떤놈이 그냥 일을 하나도 안하는데 맨날 그래서 멘토링 때 개털렸는데

맨날 개털리고 맨날 이 플젝 계속 할꺼야 안 할꺼야 멘토쌤이 물으면 ㅈㄴ 고민하다가 한다고 하고 ㅅㅂ 하루종일 유튜브 봄

기획자는 그냥 없어짐

 

그래서 지금 마지막 월간 발표가 3월인데 지금 거의 7월 되가는데 월간 발표 할 게임이 걍 3월이랑 상태가 별로 안다름 ㅅㅂ 근데 그때도 내가 다함

아니 그리고 진짜 줘패고 싶은게 지 일 할거 없데서 서버 하라니까 서버도 몰라서 못한다 하는데 이 시발럼

이미 내 플젝 코드를 유튜브 튜토리얼 보고 처 만들어서 코드 구조 개 좆같고 싱글톤 이미 7-8개는 되서 과의존 ㅈㄴ심해서 기능 추가 할 때마다 이새끼 코드 수정 존나 내가 다하는게 그냥 개 죽여버리고 그냥 다 죽여버리고 싶고 내가 풀리퀘 ㅈㄴ 올리는 동안 메인 머지 메인 커밋 처하다가 메인 버그났다고 갑자기 우리 리포지터리 히스토리 ㅅㅂ 다 없애고 플젝 다 없애서 빈 리포지터리 만들고 이김에 플젝 그만하자고 징징거리다가 지가 고친게 걍 개 븅신새끼이다.

 

시발련이 걸어다니는 것도 튜토리얼 보고 만들고 인벤토리도 유튭 보고 만들어서 갸 ㅇ아이템은 실질적인건 없고 그냥 스프라이트 드래그 엔 드롭 시뮬레이터만듬 개 시발련

 

그래도 개발 블로그니 웹서버 기반 낚시게임 네트워킹 구조 처음 해봤지만 어떻게 했는지 써본다 어.

 

UnityWebRequest 막 쓰는 게 아니라,
Result 래핑,
지수 백오프 리트라이,
인터페이스 기반 확장
요 세 가지에 초점 맞춰서 구조화해봄.

기본 구조

FishingServerService → RetryPolicy → UnityWebRequest → Result<T>

public class Result<T>
{
    public bool IsSuccess { get; }
    public T Data { get; }
    public Error Error { get; }
}

 

성공 실패 여부를 확실하게 리턴하여 똥코드 반복을 줄이자!

public enum ErrorType
{
    Network,
    Server,
    Validation,
    Unknown
}

어 이건 에러 타입을 좀 나누었고 어

 

using System;
using System.Threading.Tasks;

namespace fishing.Network
{
    public interface IRetryPolicy
    {
        Task<T> ExecuteAsync<T>(Func<Task<T>> action);
    }

    public class ExponentialBackoffRetryPolicy : IRetryPolicy
    {
        private readonly int _maxRetries;
        private readonly float _initialDelay;
        
        public ExponentialBackoffRetryPolicy(int maxRetries, float initialDelay)
        {
            _maxRetries = maxRetries;
            _initialDelay = initialDelay;
        }
        
        public async Task<T> ExecuteAsync<T>(Func<Task<T>> action)
        {
            var delay = _initialDelay;
            for (int i = 0; i < _maxRetries; i++)
            {
                try
                {
                    return await action();
                }
                catch (Exception) when (i < _maxRetries - 1)
                {
                    await Task.Delay(TimeSpan.FromSeconds(delay));
                    delay *= 2; // 지수 백오프
                }
            }
            return await action(); // 마지막 시도
        }
    }
}

이런 리트라이 정책도 만들어 보았도다. 어 이건 좀 괜찮고 다만 너무 장풍코드이다.

지수 백오프 리트라이인데 이게 IRetryPolicy로 인터페이스로다가 했기때문에

 

이후에 FixedRetry같은 여러 종류의 리트라이를 구현할 수 있다.

 

이제 직접적인 서비스는

 

public interface IFishingServerService
    {
        Task<Result<StartFishingResponse>> StartFishing();
        Task<Result<FishJson>> EndFishing(string guid, bool success);
        Task<Result<InitData>> GetData(string userId);
    }

 

어 갑자기 그냥 GPT에서 복사해왔는데 이거 좀 이쁘네

아무튼 이렇게 추상화를 하여 따로 코드에서 만든 기능들을 짬뽕하여 구현하였다. 혹시모를 확장성을 위해 인터페이스로 빼놨는데 지금은 조금 오바긴 하고 어 아무튼.

 

웹서버는 이렇게 역할을 잘 부담하였다.

 

이게 뭐 읽는 당신에게 도움 되진 않지만. 나는 성장했다 음하하하하.

서버게임을 처음 구현하면서 여러가지 새로운 것들을 배우게 되었다.

 

일단 졸작팀은 어떻게 될 지 모르겠다!!