프로젝트 내용

아쿠아포닉스 기술을 활용한 실제 스마트팜 인프라와 연동되는 시뮬레이션 게임입니다. 게임 내 활동이 실물 채소 수령으로 이어지는 구조를 목표로 기획, 디자인, 개발 전 과정을 총괄했습니다.

1. 프로젝트 개요

  • 성격: 스마트팜 연동 실물 보상 게임
  • 기간: 2024.12 - 2025.11
  • 규모: 팀 규모 5명 (총괄 및 개발 담당)
  • 플랫폼: PC/Mobile (Unity 기반)

2. 기술 스택

  • Client: Unity 2022.3.23f, C#
  • Server: ASP.NET Core 8.0 (Ubuntu 22.0.3)
  • Database: MariaDB
  • API Documentation: Swagger

3. 주요 기술적 성과 및 해결 방안

효율적인 UI 관리 아키텍처 설계

다양한 UI 화면을 안정적으로 제어하기 위해 시스템을 구조화했습니다.

  • UI Manager & Pool Manager: Singleton 패턴을 적용한 UI 매니저를 통해 인스턴스를 관리하고, PoolManager를 도입하여 UI 요소의 무분별한 생성을 방지하고 재사용성을 높였습니다.
  • 유연한 행동 정의: 추상 클래스와 제네릭을 활용하여 UI 함수를 모듈화했으며, 콜백(Callback)을 통해 UI 액션을 동적으로 정의했습니다.
  • 의존성 분리: UnityEngine.UI에 대한 직접적인 의존성을 줄이기 위해 각 컴포넌트별로 Wrapper 클래스를 생성하여 중복 기능을 관리했습니다.

리소스 관리 및 초기화 최적화

유니티 엔진의 특성을 고려하여 커플링을 줄이고 안정성을 확보했습니다.

  • 인스펙터 의존성 제거: 인스펙터에 직접 참조를 넣는 방식은 변수명 변경이나 메타파일 수정 시 바인딩이 깨질 위험이 있습니다. 이를 방지하기 위해 ResourceManager를 구축하여 런타임에 리소스를 로드하도록 설계했습니다.
  • 초기화 순서 제어: 유니티의 MonoBehaviour 이벤트 함수(Start 등)는 객체 간 실행 순서를 보장하지 않습니다. 이를 해결하기 위해 Lazy Init 기법을 도입하여 객체들이 의도한 순서대로 안전하게 초기화되도록 구현했습니다.

백엔드 인프라 및 API 서버 구축

실제 서비스 운영을 위한 인프라 전반을 경험했습니다.

  • 서버 환경 구성: Linux 환경에서 ASP.NET Core와 MariaDB를 활용하여 백엔드 인프라를 구축했습니다.
  • 데이터 자동화: ORM을 사용하여 데이터베이스 작업을 자동화하고, Swagger를 도입하여 API 명세를 효율적으로 관리했습니다.

4. 트러블슈팅 및 시행착오

인프라 관리의 중요성

  • 서버 복구 경험: OS 환경 설정 오류로 네트워크 드라이버가 작동하지 않는 문제를 겪으며, 가상화 시스템 활용과 이미지 기반 서버 백업의 필수성을 학습했습니다.
  • 하드웨어 디버깅: 서버 쿨러 고장 이슈를 겪으며 소프트웨어적 접근뿐만 아니라 하드웨어적 관점까지 디버깅의 범위를 넓혀야 한다는 점을 깨달았습니다.

개발 전략과 기술적 선택

  • 리팩터링 시점: 개발 과정에서 지나치게 완벽한 구조를 추구하여 개발 속도가 저하되는 경험을 했습니다. 이를 통해 좋은 코드 구조가 성공의 필요조건일 수 있으나 충분조건은 아니라는 점을 배우고, 비즈니스 일정과 품질 사이의 균형을 고민하게 되었습니다.
  • 2D Grid 시스템의 한계: 2D 환경에서 발생하는 Z-fighting 문제 등 그리드 시스템의 고질적인 이슈를 경험했습니다. 이를 통해 그리드가 핵심인 게임은 3D 기반의 2.5D 기법이 더 효율적일 수 있다는 기술적 통찰을 얻었습니다.

[본 프로젝트는 실제 스마트팜 인프라 확장을 위한 프로토타입 및 상용화 단계로 진행되었습니다.]