개발중인 프로젝트 구성안 - 2

먼저, Repository에 대해. Repository client-dash 유니티 클라이언트 프로젝트 Unity 2019.4x, .Net 4.x data-dash, lib-dash server-dash 로비서버, 매치서버, 인게임 서버등 서비스에 필요한 서버들의 모음 .Net Core 3.x data-dash, lib-dash admin-dash 관리자툴, 유저 및 게임 서비스에 대한 제어 .Net Core 3.x data-dash, lib-dash dummyclient-dash 더미 클라이언트. 인게임 전투, API 요청, 특수한 시나리오등을 수행하는 클라이언트 .Net Core 3.x data-dash, lib-dash etc AWS Lambda 에서 실행되는 MicroService 등 눈치 채신 분들도 있겠지만, data-dash, lib-dash는 Submodule 이다....

October 2, 2020 · 2 min · 281 words · penspanic

개발중인 프로젝트 구성안 - 1

이번 프로젝트 리드를 하며 아키텍쳐를 잡을 때 최우선 사항은 생산성 이었다. 대형 프로젝트도 아니고, 소수의 프로그래머가 지속적으로 바뀌는 요구사항과 짧은 일정을 소화하려면 생산성이 가장 중요하다고 생각했다. 유려한 아키텍쳐 및 프로젝트 구성 샐틈없는 강력한 보안의 코드 / 동기화 모델 엄청난 Throughput을 보여주는 고성능 프로그램 을 다 충족시키며 우리 팀의 목적 달성은 현실적으로 어렵다고 판단했다. 결국 선택과 집중이 필요한 부분인데.. 게임 개발 경력이 아직 길진 않지만, 재밌는 게임을 만들기 위해선 수많은 수행 착오를 거쳐야 하고...

October 1, 2020 · 1 min · 136 words · penspanic

C# Unmanaged Memory

Managed Memory CLR(Common Language Runtime)이 관리하는 메모리. Garbage Collection의 대상이 된다. Unmanaged Memory Managed Memory가 아닌 것. C# 에서도 C++ 에서처럼 직접 메모리를 할당 할 수 있다. IntPtr memory = Marshal.AllocHGlobal(100); for (int i = 0; i < 100; ++i) { ((byte*) memory)[i] = (byte)(i + 1); } Marshal.FreeHGlobal(memory); stackalloc 표현식 Stack 에 메모리가 할당됨. 그 Stack을 벗어날 때 자동으로 메모리 해제. 일시적인 계산을 위한 메모리를 사용할 때, stackalloc을 사용함으로써 Managed Heap에 할당되지 않게 하여 최적화 가능....

September 28, 2020 · 1 min · 179 words · penspanic

C# - Reflection에 대한 고찰

C# 프로그래밍 씬에서 가장 흔한 오해중 하나는 “Reflection은 느리니까 자제해야 한다.” 라는 것. 처음엔 그냥 그런가보다 했다. C#에 대한 이해도가 많이 부족했으니. 하지만 필요에 의해 Reflection을 사용하게 됐고, 그것 없이 C# 프로그래밍을 하기에 불편함에 이르렀다. 제대로 이해하고 적절히 사용해야 할 때가 온 것이다. 깊게 파보고, 프로파일링 - 최적화 해보고. 그 과정들을 통해 지금은 올바른 Reflection 사용은 현대적이고 발전된 코드를 작성할 수 있다. 라고 생각하게 됐다. 느리다는 것 처리 시간이 오래 걸린다....

September 25, 2020 · 3 min · 587 words · penspanic

C# 람다 내부 구현

마법은 없다. Lambda를 컴파일러가 어떤식으로 구현하는지 알아둘 필요가 있다. public static class LambdaExample { public static void Run() { int localInt = 123456789; string localString = "LocalString"; ActionRunner(() => { Console.WriteLine($"{localInt}, {localString}"); }); } private static void ActionRunner(Action action) { action?.Invoke(); } } Decompiled il source // Type: CSharpExamples.LambdaExample // Assembly: CSharpExamples, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null // MVID: B420F7F8-9269-4798-8719-2A8ECDC7FBCA // Location: /Users/geunheepark/Projects/private/CSharpExamples/CSharpExamples/bin/Debug/netcoreapp3.1/CSharpExamples.dll // Sequence point data from /Users/geunheepark/Projects/private/CSharpExamples/CSharpExamples/bin/Debug/netcoreapp3.1/CSharpExamples.pdb .class public abstract sealed auto ansi beforefieldinit CSharpExamples....

September 20, 2020 · 4 min · 725 words · penspanic