전체 글

이번 포스팅에서는 대규모 동시 접속을 지원하는 서버를 만드는 테스트 프로젝트를 진행하며, 과정에 대해 적어 보려 합니다. 목표 30000명이 동시에 접속할 수 있는 TCP 서버 만들기 30000명의 클라이언트는 전송 - 수신 - 전송 - 수신 을 반복한다. 30000명의 클라이언트를 켜 놓고, 다음날 서버가 에러 없이 살아 있는 것을 목표한다. 목표를 성취한 후에는 평균 응답 시간을 줄여보도록 하겠다. 프로젝트 Git Hub Repository 링크 https://github.com/MatorMirne/SocketCommunicate-TCP 프로젝트 명명 - 프로젝트:예수 저는 프로젝트에 이름 붙이기를 좋아합니다. 그렇게 하면 더 프로그램에 애정을 가질 수 있기 때문입니다. (저는 무교입니다!) 성경 말..
· Server/C#
??= 는 = 대신에 쓰이는 대입 연산자입니다! 예시 a ??= 1; ??= 는 좌측의 항이 null일 때에만 대입이 됩니다. 예시 int? number = null; int defaultValue = 10; number ??= defaultValue; // number이 null이므로 대입 성공 Console.WriteLine(number); // 출력: 10 number = 20; number ??= defaultValue; // number에 10이 들어가 있으므로 대입하지 않음 Console.WriteLine(number); // 출력: 20
· Server/C#
FirstOrDefault 는 LINQ(Language Integrated Query)의 메서드 중 하나로, 검색을 하다가 가장 처음으로 조건에 부합하는 결과물을 도출할 때 유용합니다! List names = new List { "Alice", "Bob", "Charlie", "Dave" }; string firstMatch = names.FirstOrDefault(name => name.StartsWith("B")); Console.WriteLine(firstMatch); // Output: "Bob"
드디어 이벤트 부분을 배워서 정리해 보도록 하겠습니다! 내가 알고 있던 이벤트 with LUA LUA 에서는 1) 이벤트 타입을 만들고, 2) 그 이벤트를 Event Invoke 함수를 통해 호출시키고, 3) 이벤트를 감지하는 Event Handler 를 추가하여 이벤트를 발생시켰습니다. 이벤트의 장점 저는 이벤트를 정말 사랑했습니다. 한 번의 호출로 여러 함수를 호출할 수 있었거든요. 저는 코드를 작성할 때 가장 중요한 것이 현실과의 유사성이라고 생각하는데, 이벤트를 사용하면 마치 프로그램과 대화를 하는듯한 코딩이 가능했습니다. 다시말해 아래 그림처럼, 각 Manager Class 들이 내 얘기를 듣고 있는 것처럼 코딩할 수 있었습니다. 이벤트의 단점 하지만 이벤트가 좋다고 이벤트를 남발하면, 코드 속..
· Server/C#
글을 열며 드디어 이벤트 사용법을 알아냈습니다! 저는 LUA언어로 미니게임을 만들며 이벤트를 아주 잘 사용했었습니다. 그때의 좋은 기억 덕분에 C# 개발을 하면서도 "이거 이벤트로 만들면 진짜 딱인데..." 싶은 것들이 나올 때마다 서적을 펼쳐 이벤트 부분을 무작정 읽었습니다. 하지만 앞부분을 읽지 않으면 이벤트를 이해할 수 없었고, 그 앞부분 또한 앞부분의 앞부분을 읽지 않으면 이해하기 난해했습니다. 결국 드디어 서적의 앞부분을 다 읽고 이벤트까지 오게 되었는데, 이걸 설명하려면 델리게이트 정도는 정리하고 넘어가야 할 것 같습니다. 서적에서 왜 바로 이벤트부터 말해주지 않고 델리게이트를 먼저 설명하고 넘어가는지 글 작성자 입장이 되어 보고 나니 이해가 됩니다. 델리게이트란 ? 델리게이트는 함수를 저장하..
· Server/C#
1. Nuget 패키지를 설치한다. 2. NLog.Config 파일을 만들어 줍니다. 아무데나 원하는 곳에 NLog.Config 파일을 만들어 줍니다. 파일 내용은 이렇게 적습니다. 3. 코드 작성 이제 코드를 아래와 같이 작성합니다. path는 위에서 만들어 준 NLog.Config 의 절대 경로를 입력했습니다. 프로세스를 실행하면 로그가 파일에 저장됩니다. public class Program { private static readonly NLog.Logger log = NLog.LogManager.GetCurrentClassLogger(); public static void Main(string[] args) { string path = "/Users/jaeeun/free/TestSolution/N..