X-World 아이디어 구상

X-World 아이디어 구상

2025년 9월 8일

X-World #

프로젝트를 시작하는 이유 #

이력서를 쓰면서 매번 포트폴리오란에 프로젝트들을 급조해서 만들거나 비워놓고 블로그 링크로 대신하는 등 너무 빈약하게 제출해왔다.
이대로는 항상 이직에 포트폴리오가 발목을 잡을 것 같았고, 한번에 여러 토끼를 잡을 수 있는 계획에서 게임을 만들어보는 것으로 결정하게 됐다.

1. 내 고민을 녹여넣은 프로젝트 #

순수 프로그래밍으로 개발한 프로젝트(cub3d, minishell, MinOS)들을 보면서 고민의 흔적이 거의 없다는 것을 알게 됐다.

42에서는 빠르게 구현하고 과제를 끝내는 것을 목표로 해서 당연히 사용해야하는 알고리즘들을 인용하며 정상적인 동작만 하도록 구현했기 때문에 논리적으로 기능을 분리하는 정도에서만 고민했었다.
MinOS의 경우엔 책을 보며 대부분의 코드를 따라적었고, 책 내용에 문제가 있거나 MacOS 포팅에서 발생하는 문제들을 디버깅하며 해결하는 방식으로 개발했기에 고민의 흔적 자체가 없었다.

많은 레퍼런스를 보면서 개발하고 AI로 인해서 스스로 생각하지 않아도 해결되는 세상이 왔지만, 이 프로젝트에서 만큼은 처음 프로그래머를 희망했을 때 생각하던 방식으로 프로그래밍을 해보려고 한다.


2. 프로그래밍 언어(C++ 또는 rust)의 숙련도 향상 #

지금은 분석 업무만 하다보니 파이썬을 제외한 프로그래밍 방법이나 언어에 대해 숙련도가 떨어지고 있다는 생각이 들었다.
이론은 이해하고 있지만, 자료구조나 알고리즘에 대해 제대로 써본적도 없고 멀티스레드도 실무에서 어떻게 사용하는지에 대한 고민도 해본적이 없다.

제품의 성공보다는 언어의 숙련도를 높이며, 내가 어떤 코드를 작성해봤는지를 보여주는 것이 우선이다.


3. 자료구조, 알고리즘, 디자인패턴 #

넥토리얼 채용설명회에서 면접관 입장에서는 자료구조, 알고리즘, 디자인패턴을 왜 적용했는지, 다른 방법은 없었는지를 고민해봐야 한다고 했다.
모든 자료구조와 알고리즘은 특정 상황에서 효율적이지 못할 수 있기 때문에 여러 방식이 존재하는거고, 그 특정 상황에 맞춰서 장단점을 알고있는 상태에서 구현하는 것도 중요하다고 생각한다.

해결해야되는 문제의 상황과 방법에 대해 명확히 고민해보고, 다른 사람의 의견이나 경험을 무작정 반영하는 것 보다 속도를 비교하고 더 나은 방법을 적용하는 근거를 명확히 할 것이다.


프로젝트 구상 #

ed92efb0-da4b-4df7-8e76-209bb25dd6d1

모티브가 되는 게임은 ‘울티마온라인’과 ‘켄시’이다.
자유도가 높아야 구현할 기능들이 많고, 여러 알고리즘을 넣을 수 있을거라 생각했고 AI를 끼워넣어 혼자서 해도 즐거운 게임을 만들고 싶었다.

플레이어(AI포함)는 web 게임으로 많이 하던 지렁이 키우기, 탱크 키우기 게임처럼 랜덤한 월드의 랜덤한 위치에서 시작되며 특정 목표를 만족해서 탈출하거나 혼자 남게되면 승리하는 목표로 만들것이다.

현실시간 2~3일 정도로 롱텀 생존게임을 만들어보면 어떨까? 늦게 들어온 사람도 이길 수 있도록 역전의 발판을 만들어줘야한다.


클라이언트 #

  • 게임 기능은 3D를 기반으로 구현
    • 그래픽은 2D여도 네이버맵 지도의 등고선처럼 산을 표현하는 등
  • 게임 로직과 렌더러 로직을 잘 분리해서 설계
    • 선택적으로 구린 3D그래픽(켄시)으로 게임할 수 있어야한다.
      • DirectX, Vulkan…
    • 나중에 내가 구현한 운영체제에서 실행시킬 수 있도록 복잡한 렌더링을 하지 않고 2D로 게임을 즐길 수 있어야한다.
      • WinAPI 버전, 내 운영체제 버전. 점 하나 찍거나 텍스트 찍는걸로 렌더링해두면 그 기능만 대체하면 포팅이 쉽게 가능함
    • 렌더링 방식마다 키보드나 마우스의 입력을 다르게 받아서 월드 입력으로 변환하도록 구현하면 될 것 같다.
  • 인간과 구분되지 않는 AI 구현
  • 상대방에게 의사를 전달할 수 있는 상호작용 행동?
  • (나중에) 게임 런처 구현
    • WDK로 커널드라이버 보안 솔루션?

백엔드 (Spring 웹서버) #

  • HTTP API 로직
    • 로비에서 랭킹확인
    • 로그인 (google, guest)
    • 친구 창, 신고 등
  • 웹소켓 로직 WebFlux(Netty)
    • 런타임 데이터 전송? 클릭이벤트나 이런거 계산해서 전송하고 응답을 위치좌표로 받나?
    • 런타임에 클라이언트는 입력을 서버에 보내고 서버가 검증한 결과를 받아서 그리기만 하는건가.. *
  • 메시징 Kafka
comments powered by Disqus