Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

웹서비스 개발자가 게임개발에 필요한 입문서를 작성해보았으며  추후 바이브에 지식을 참고해 만들수 있는 기초 개념 문서 생성을 시도해보았습니다.

액터모델이 게임서버의 코어로 이용할 계획이기때문에 이 중심으로 필요한 입문서를 저의 약간의 경험과 함께 LLM을이용해 생성해보았습니다.

...


액터 모델과 자바 생태계의 변화

제가 액터 모델을 처음 접한 시점은 C++ IOCPSOCK을 활용해 고성능 서버를 개발하고, 북미 기준 동일 카테고리 TOP3 트래픽을 처리하던 때였습니다. (Java 7 시점 기준)

웹과 모바일 중심으로 생태계가 전환되던 시기에 Java로 전환이 필요했지만, 당시 Java 7은 현재 널리 사용되는 Netty 기반 고성능 IO와 같은 기능을 대부분의 웹 프레임워크에서 제대로 지원하지 못했습니다.
스프링 시리즈도 성능 한계가 커 실서비스에는 적합하지 않았습니다.
그 결과 선택한 것이 바로 PlaFrameJVM진영에서 당시에 거의 알려지지도 않은  Play(+Akka) 기반의 프레임워크였습니다.  ( 아마 국내개발사가 이것을 이용해 상용화한것도 국내기준 최초사례일듯  , 임백준의 akka책소개이전에 채택해 상용화 되었으며 특정카테고리에서는 알만한 게임사.. )

...

자바의 발전: WebFlux와 가상 스레드

최근 자바는 WebFlux 및 **가상 스레드(Virtual Thread)**를 포함하여, 스레드 의존도가 낮고 더 적은 리소스로도 높은 효율을 내는 고성능 동시성 IO가 크게 발전했습니다.

...

  • Java 7 시절: 고성능 IO 부재 → PlaFrame(+Akka) 채택
  • Java 11: WebFlux 완성 → Reactive Streams와 함께 주목
  • Java 21~23: Reactive Streams 없이도 고성능 IO 가능
  • Akka 유료화 → 자바 생태계의 주도권 변화


...

Akka와 Akka.NET의 관계

Akka는 원래 Scala/Java 진영에서 시작된 오픈소스 프레임워크로, 액터 모델 기반의 고성능 동시성 처리를 지원했습니다.
분산 시스템, 멀티스레드, 메시지 기반 아키텍처를 손쉽게 구현할 수 있도록 설계되어 많은 고성능 서버 애플리케이션에서 사용되었습니다.

이후 .NET 생태계에서도 동일한 패러다임을 필요로 하면서 Akka.NET이 등장했습니다.
이는 Akka의 철학과 설계를 .NET/C# 환경에 맞게 이식한 프로젝트로, 자바 진영에서 검증된 액터 모델 아키텍처를 닷넷 환경에서도 그대로 적용할 수 있게 되었습니다.

정리하면, Akka와 Akka.NET은 언어와 플랫폼은 다르지만 동일한 액터 모델 철학을 공유하는 "쌍둥이 프로젝트"라 할 수 있습니다.

...

액터 모델의 핵심 개념

액터 모델은 동시성과 분산 처리를 단순화하기 위한 추상화 모델입니다. 전통적인 스레드 기반 프로그래밍과 달리, "액터"라는 독립적인 단위가 다음과 같은 특징을 가집니다.

  1. 상태 캡슐화

    • 액터는 자신의 상태를 외부에서 직접 접근할 수 없게 하고, 메시지를 통해서만 상태를 변경합니다.
  2. 비동기 메시지 전달

    • 액터 간 통신은 비동기 메시지 전달로만 이루어집니다.
    • 이는 락(lock)이나 공유 메모리에 의존하지 않아도 안전한 병렬 처리가 가능하게 합니다.
  3. 자율적인 동작 단위

    • 각 액터는 독립적으로 실행되며, 메시지를 수신하면 내부 로직에 따라 새로운 액터를 생성하거나, 다른 액터에게 메시지를 전달하거나, 상태를 변경할 수 있습니다.

...

자바 진영과 닷넷 진영에서의 활용

  • Java / Scala 진영

    • 대표적으로 Akka가 액터 모델 구현체로 사용되었고, 이후 Reactive Streams와 결합하여 고성능 분산 시스템 개발에 널리 활용되었습니다.
    • Spark, Kafka 같은 빅데이터/스트리밍 프레임워크와도 잘 어울렸습니다.
  • .NET 진영

    • Akka.NET은 C# 환경에서도 동일한 개발 패턴을 제공하여, 서버 사이드 애플리케이션, 마이크로서비스, 게임 서버 등에서 활용되었습니다.
    • 최근에는 Orleans와 같은 액터 모델 기반 프레임워크도 성장하며, 닷넷 생태계의 분산 컴퓨팅 기반을 강화하고 있습니다.

...

정리

  • Akka: Scala/Java 기반 액터 모델 프레임워크
  • Akka.NET: C#/.NET으로 이식된 액터 모델 프레임워크
  • 공통점: 메시지 기반, 상태 캡슐화, 비동기 동작으로 동시성/분산 시스템을 단순화
  • 의의: 자바 진영과 닷넷 진영 모두에서 동일한 아키텍처 패턴을 공유할 수 있게 함

개발입문서 생성 프롬프트

기존 소스와 문서를 바탕으로 보강된 새로운 문서를 작성하려고합니다. 기존 프로젝트는 온라인 기반의 다중접속자의 대화를 처리하며, 그래픽으로 표현하는 채팅서비스입니다.

지침

  • 기존정보에서 문서와 소스코드를 참고해 학습할수 있습니다.
  • 새로운 문서는 doc/game 폴더하위에 md스타일로 문서를 작성합니다.
  • 새로운 문서는 채팅웹서비스를 참고해, 게임개발에 필요한 게임웹서비스를 만들고자할때 도움되는 문서여야하며 기존 기술을 활용할수 있습니다.
  • 만드려고 하는 게임은 2D기반의 간단한 RPG게임으로, 캐릭터가 맵에서 이동하고, 채팅을 할수 있는 기능이 포함되어야 합니다.
  • 그리고 배경,지형처리,아이템획득,미니맵,퀘스트,인벤토리등의 기본적인 게임기능이 포함되어야 합니다.
  • 문서작성은 게임개발 경험없는 웹서비스 개발자가 게임개발의 컨셉을 이해할수 있도록 쉽게 작성되어야 합니다.
  • 문서작성은 게임개발에 필요한 기술과 개념을 중심으로 작성되어야 합니다.
  • 서버에 사용되는 기술은 멀티스레드보다 , 이 프로젝트가 이미 이용하고 있는 액터모델을 활용하는 방향으로 작성되어야 합니다.
  • 클라이언트는 웹을 통해 제공하기때문에 성능이 좋은 Blazor WebAssembly를 활용, 브라우저 GPU가속을 활용하는 방향으로 작성되면 좋습니다.
  • 문서작성은 개념설명,기술설명,예시코드,실제적용방법등을 포함해야 합니다. 코드가 실제 작동가능한 정도로 너무 자세할 필요는 없습니다.

기존정보

-doc/ko : 하위폴더에 기존 문서가 있습니다. -BlazorChatApp : 하위에 프로젝트 소스가 있으며 서버/클라이언트 프로젝트로 분리되어 구성되어있으며 닷넷 Balzor로 작성되었습니다.


Info

클로드 코드를 이용해 문서생성이 시도되었으며  클로드 코드의 단기기억을 장기기억화하는 , 자체구축한 MCP메모리를 위해

문서생성 완료후 다음을 추가수행

지금까지 문서를 파트별로 분리하여 메모리에 저장하고 연관관계를 설정할것~

> 게임 개발 문서를 파트별로 분리하여 메모리에 저장하고 연관 관계를 설정하겠습니다.



Info

웹서비스 개발자에게 필요한 입문서를 위해 과거에 작성한 그래픽 웹채팅을 참고해 만들면 좋겠다란 생각이 문득 들어 시도되었습니다.

Image Added

  • gpt 3시절에 만든것으로 그 당시 LLM으로는 이와같은 다중그래픽 채팅서비스 코드를 만들지 못한듯 
    • 이제 LLM모델이 프로그래밍의 능력이 뛰어나 동시접속 다중처리를 만들어내지 않을까?
  • 배경 그래픽 정도만 AI에게 그려달라함
    • 2D게임에 도트그래픽을 이용한 캐릭애니메이션 연출이 필수이나~ 현재의 이미지 생성형도 픽셀아트는 하지 못함
      • 나노바나나는 해주지 않을까? 기대감
    • 이것도 캐릭터 스프라이트를 다운받아, 내코드에 맞는 애니영역을 맞추기위해 그림판 수작업 신공을 했음
      • 1픽셀이라도 어긋나면 캐릭터가 가진 손이 엉덩이에오거나~ 갑자기 시공간을 이동하는 듯한 깜빡임 현상이 발생할수 있음


Info

웹영역은 자바/닷넷 상호영향을 주고 발전해 공통영역이 많으며

동시성 처리는 자바/닷넷이 완전 다른 노선을 걸었기때문에 상이합니다. -자바는 await를 채택하지않음  , 닷넷과 유사한 동시성처리를 하려면 코틀린을 채택해야 await사용가능

액터모델의 컨셉은 언어가 달라도 컨셉이 거의 유사하며 akka/akka.net은 닷넷진영에서 포팅했기때문에 추후 클러스터 개념으로 확장해 분산처리 할때도 유사합니다.

그래서 이러한 웹서비스 게임개발(RPG)에서 스프링/ASP.net 에서 유사하게 멀티플레이어 처르를 액터모델로 생성할수 있을것으로 보여집니다. ( 트라이예정을 위한 프레임웍에서의 조사차 기본 듀토리얼을 먼저생성)


이 활동에 의해 생성된 문서

웹 개발자를 위한 2D RPG 게임 개발 입문서


NEXT 도전

  • 샘플 게임 프로젝트 바이브로 시도
    • 다중처리 플레이어 게임서버 성능 고려한 버전으로 바이브가 가능한가? 
    • 서버-클라이언트 개념에서 실시간 처리를 위해 서비스-프론트 웹서비스형태의 게임개발이 바비으로 가능한가?