웹서비스 개발자가 게임개발에 필요한 입문서를 작성해보았으며 추후 바이브에 지식을 참고해 만들수 있는 기초 개념 문서 생성을 시도해보았습니다. 액터모델이 게임서버의 코어로 이용할 계획이기때문에 이 중심으로 필요한 입문서를 저의 약간의 경험과 함께 LLM을이용해 생성해보았습니다. |
제가 액터 모델을 처음 접한 시점은 C++ IOCPSOCK을 활용해 고성능 서버를 개발하고, 북미 기준 동일 카테고리 TOP3 트래픽을 처리하던 때였습니다. (Java 7 시점 기준)
웹과 모바일 중심으로 생태계가 전환되던 시기에 Java로 전환이 필요했지만, 당시 Java 7은 현재 널리 사용되는 Netty 기반 고성능 IO와 같은 기능을 대부분의 웹 프레임워크에서 제대로 지원하지 못했습니다.
스프링 시리즈도 성능 한계가 커 실서비스에는 적합하지 않았습니다.
그 결과 선택한 것이 바로 JVM진영에서 당시에 거의 알려지지도 않은 Play(+Akka) 기반의 프레임워크였습니다. ( 아마 국내개발사가 이것을 이용해 상용화한것도 국내기준 최초사례일듯 , 임백준의 akka책소개이전에 채택해 상용화 되었으며 특정카테고리에서는 알만한 게임사.. )
최근 자바는 WebFlux 및 **가상 스레드(Virtual Thread)**를 포함하여, 스레드 의존도가 낮고 더 적은 리소스로도 높은 효율을 내는 고성능 동시성 IO가 크게 발전했습니다.
이는 과거와 달리 자바가 단순히 전통적인 스레드 풀 기반의 병렬 처리 모델에 머물지 않고, 언어 차원에서 반응형(reactive) 아키텍처와 동시성 개선을 지원하도록 진화한 결과입니다.
여담이지만, 넷플릭스 또한 비슷한 문제를 겪으면서 .NET의 Rx 인터페이스를 자바로 이식하여 Reactive Stream과 WebFlux의 기반을 마련했습니다.
이 과정에서 (구)Lightbend, Akka와 함께 Reactive Streams 연합이 결성되었고, 자바 진영 전반에 고성능 IO 처리 방식이 확산되는 계기가 되었습니다.
이러한 변화는 단순히 기술의 진화만이 아니라 생태계의 구조적 변화와도 맞닿아 있습니다.
Reactive Streams는 본래 Akka 진영이 주도했고, 자바의 강력한 기업들이 오픈소스 아키텍처 지원을 통해 발전시켜왔습니다. 그러나 최근 Akka가 오픈소스 탈퇴와 유료화 선언을 하면서, 그동안의 협력적 발전 모델이 약화되었습니다.
결국 이는 Reactive Stream의 위상이 약화되고, 자바가 자체적인 고성능 동시성 IO 모델을 언어 차원에서 흡수·발전시키는 방향으로 이어진, 일종의 나비효과라 할 수 있습니다.
Akka는 원래 Scala/Java 진영에서 시작된 오픈소스 프레임워크로, 액터 모델 기반의 고성능 동시성 처리를 지원했습니다.
분산 시스템, 멀티스레드, 메시지 기반 아키텍처를 손쉽게 구현할 수 있도록 설계되어 많은 고성능 서버 애플리케이션에서 사용되었습니다.
이후 .NET 생태계에서도 동일한 패러다임을 필요로 하면서 Akka.NET이 등장했습니다.
이는 Akka의 철학과 설계를 .NET/C# 환경에 맞게 이식한 프로젝트로, 자바 진영에서 검증된 액터 모델 아키텍처를 닷넷 환경에서도 그대로 적용할 수 있게 되었습니다.
정리하면, Akka와 Akka.NET은 언어와 플랫폼은 다르지만 동일한 액터 모델 철학을 공유하는 "쌍둥이 프로젝트"라 할 수 있습니다.
액터 모델은 동시성과 분산 처리를 단순화하기 위한 추상화 모델입니다. 전통적인 스레드 기반 프로그래밍과 달리, "액터"라는 독립적인 단위가 다음과 같은 특징을 가집니다.
상태 캡슐화
비동기 메시지 전달
자율적인 동작 단위
Java / Scala 진영
.NET 진영
기존 소스와 문서를 바탕으로 보강된 새로운 문서를 작성하려고합니다. 기존 프로젝트는 온라인 기반의 다중접속자의 대화를 처리하며, 그래픽으로 표현하는 채팅서비스입니다.
-doc/ko : 하위폴더에 기존 문서가 있습니다. -BlazorChatApp : 하위에 프로젝트 소스가 있으며 서버/클라이언트 프로젝트로 분리되어 구성되어있으며 닷넷 Balzor로 작성되었습니다.
클로드 코드를 이용해 문서생성이 시도되었으며 클로드 코드의 단기기억을 장기기억화하는 , 자체구축한 MCP메모리를 위해 문서생성 완료후 다음을 추가수행 지금까지 문서를 파트별로 분리하여 메모리에 저장하고 연관관계를 설정할것~ > 게임 개발 문서를 파트별로 분리하여 메모리에 저장하고 연관 관계를 설정하겠습니다. |
웹서비스 개발자에게 필요한 입문서를 위해 과거에 작성한 그래픽 웹채팅을 참고해 만들면 좋겠다란 생각이 문득 들어 시도되었습니다. |

웹영역이야 자바/닷넷이던 상호영향을 주고 발전해 공통영역이 많으며 동시성 처리는 자바/닷넷이 완전 다른 노선을 걸었기때문에 상이합니다. -자바는 await를 채택하지않음 , 닷넷과 유사한 동시성처리를 하려면 코틀린을 채택해야 await사용가능 액터모델의 컨셉은 언어가 달라도 컨셉이 거의 유사하며 akka/akka.net은 닷넷진영에서 포팅했기때문에 추후 클러스터 개념으로 확장해 분산처리 할때도 유사합니다. 그래서 이러한 웹서비스 게임개발(RPG)에서 스프링/ASP.net 에서 유사하게 멀티플레이어 처르를 액터모델로 생성할수 있을것으로 보여집니다. ( 트라이예정을 위한 프레임웍에서의 조사차 기본 듀토리얼을 먼저생성) |