protobuf-net 이란? protobuf-net은 .NET 코드용 계약 기반 직렬 변환기로, Google에서 설계한 "프로토콜 버퍼" 직렬화 형식으로 데이터를 작성합니다. 그러나 API는 Google과 매우 다르며 일반적인 .NET 패턴을 따릅니다. (사용 면에서 XmlSerializer, DataContractSerializer, 등) 표준 유형을 작성하고 특성을 사용할 수 있는 대부분의 .NET 언어에서 작동해야 합니다. .proto 파일을 생성 하지 않아도 됩니다. NuGet 패키지 다운로드 protobuf-net 은 Nuget Package 관리자를 통해서 다운로드 받을 수 있습니다. 제가 받았을때 버전은 3.1.17 이였네요. 사용방법 [ProtoContract] public class A..
들어가며 처음으로 SignalR 을 이용해서 채팅 서버를 구현한 것이라, 이를 위해 성능을 검증해야 하는 상황이 생겼습니다. 어찌보면 당연한 프로세스 였는데요. 저희가 진행한 성능검증은, 1대의 IIS 서버에 어느정도의 Request를 감당할 수 있는지, 최대 동접인원을 기준으로 한대의 서버에 몇명의 유저를 감당할 수 있는지 등등 이였습니다. 진행하는 과정에서 SignalR의 성능 튜닝을 아래와 같이 진행하였습니다. ※ SignalR 2.x 버전의 IIS 환경임을 참고해주세요. IIS 구성 수정 SignalR의 성능 튜닝을 위해서는, 어플리케이션당 최대 동시 요청자 수를 늘립니다. IIS 관리자에서 SignalR로 설정되어 있는 사이트 선택시, 하단부에 구성편집기 메뉴를 선택하면, 아래와 같은 화면이 보..
들어가며 단일 서버로 구성을 하게 된다면, 여러뭐로 고민할 내용이 줄어들지만 현실은 그렇지 않죠. 다양한 failover 상황을 고려해야 하고, 부하분산 상황에 대한 상황도 같이 고려해야 합니다. SignalR을 이용하여 채팅서버를 구성할 때에도 위와같은 상황을 고려해서 설계를 진행해야 하는데요. IIS 환경에서 웹서버는 스케일 아웃, 그리고 그 안에서 메시지를 전달하는 부분은 Redis 의 Pub/Sub을 이용한 BackPlane 을 이용해서 설계를 진행했었습니다. 아래 SignalR 채팅 시스템을 개발했을때, 고려했던 내용을 정리하였습니다. 웹서버 스케일 아웃 SignalR은 웹서버로 IIS를 사용하는데요. 일반적으로 웹서버의 경우 성능을 확장하기 위한 방식으로 스케일 업, 스케일 아웃 방식중에 선택..
들어가며 SignalR을 이용해서, 채팅시스템을 구현할 일이 생겼는데요. 그러는 과정에서 Client 에서 동작하는 라이브러리를 검색했었습니다. https://github.com/jenyayel/SignalR.Client.20 GitHub - jenyayel/SignalR.Client.20: SignalR protocol 1.2 client for .NET 2.0 SignalR protocol 1.2 client for .NET 2.0. Contribute to jenyayel/SignalR.Client.20 development by creating an account on GitHub. github.com 위 소스가 .NET 2.0 환경에서 동작하는 SignalR 클라이언트 라이브러리 입니다. 하지만..
System.Math 의 Round 메소드의 경우 기본적으로 소수점 이하 자리수를 파라메터로 제공을 하지만, 올림 (Ceiling), 버림(Truncate) 메소드의 경우에는 제공을 하지 않습니다. 그렇기 때문에 해당 처리를 별도로 해줘야 하는데요. 간단한 방법으로 특정 소수점 이하의 올림, 버림 처리를 할 수 있습니다. 특정 소수점 올림 원하는 소수점까지의 표현을 위해 값을 곱해주고 나눠주는 방식으로 표현이 가능합니다. double value = 132.15469; //소수점 두자리 올림 Console.WriteLine($"Ceiling : {Math.Ceiling(value * 100) / 100}"); //소수점 세자리 올림 Console.WriteLine($"Ceiling : {Math.Ceili..
C#을 이용해서 개발을 진행하다보면, System.Math 를 통해서 수학함수를 사용할 일이 생기는데요. 그중 가장 많이 사용하는 부분이 수치를 이용한 올림/반올림/버림 처리가 아닐까합니다. 자주 사용하지만, 한번 만들어 놓으면 다시 보지 않기에 정리해봅니다. 올림 올림의 경우 Math.Ceiling(double a) 메소드를 사용합니다. double value = 132.15469; Console.WriteLine($"Ceiling : {Math.Ceiling(value)}"); //출력 Ceiling : 133 버림 버림의 경우 Math.Truncate(double a) 메소드를 사용합니다. double value = 132.15469; Console.WriteLine($"Truncate : {Mat..