전체 글

· Server/C#
좋은 서버 개발자가 무엇인가! 바로 서버가 죽지 않게 개발하는 서버 개발자이다. 그러려면 실행 에러에 대한 잡지식이 많아야 하는것같다. 컴파일 에러는 IDE 가 잡아 주니... 그래서 이제 이 페이지에 잡지식을 기록해 보려고 한다. 2024년 3월 22일 금요일 1. 제너릭를 쓸 때, 제너릭 변수 자리에 null을 넣으면 서버가 터진다 2. 클래스를 사용할 때, 널인 상태에서 맴버를 찾으려고 하면 서버가 터진다. 2024년 4월 9일 화요일 3. List.AddRange(null) 은 에러난다.
· Server/C#
lock 을 하면 비동기를 사용할 수 없다. 더보기 정확히는 위험하다. ( lock(리소스) {작업} 식으로 사용할 때에는 아예 컴파일 에러가 난다. ) lock 은 다른 스레드에서 이 리소스에 접근하지 못하게 하는 기법이기 때문이다. 비동기 호출을 하게 되면 await 를 할 때마다 실행 중이던 작업이 중지되고 대기 상태가 되었다가 스레드 풀의 스레드 중 하나에서 실행이 되는데, 이때 스레드가 원래 lock 을 했던 스레드가 아닐 가능성이 매우 높기 때문에 이 리소스에 접근하지 못하게 되는 현상이 생겨날 수 있다. 아무튼 이런 이유 때문에 비동기 함수에서 lock 을 주의해서 써야 한다. 비동기에서 lock 을 사용하려면 SemaporeSlim 을 사용하면 된다. SemaphoreSlim 은 lock ..
· Server/C#
생성자 public class Mom { public Mom() { Console.Write("mom "); } } public class Son : Mom { public Son() { Console.Write("son "); } } public static void Main() { new Son(); // mom son new Mom(); // mom } mom son mom 상속 public class Mom { public void Print() { Console.Write("mom "); } } public class Son : Mom { public void Print() { Console.Write("son "); } } public static void Main() { var son = n..
· Server/C#
해시테이블 딕셔너리 Key, Value 모두 자료형을 지정할 필요 없다. Key, Value 모두 자료형을 지정해야 한다. 박싱-언박싱 을 사용한다. 박싱-언박싱 을 사용하지 않는다. 해시 테이블의 박싱-언박싱 과정에서 데이터가 값 복사가 일어날 것이라 생각했는데, 참조가 보호된다. var list = new List(); list.Add(1); Console.WriteLine(JsonSerializer.Serialize(list)); var hashTable = new Hashtable(); hashTable.Add(1, list); var listInHash = hashTable[1]; var convertedListInHash = (List)listInHash; convertedListInHash...
내 목표는 3만개 클라이언트 연결인데, 이런 에러가 났다. Unhandled exception. System.Net.Sockets.SocketException (23): Too many open files in system 클라이언트가 10151개를 넘어서면서부터 연결이 안된다. 이유는 대충은 알겠지만, 어떻게 해결해야할지가 좀처럼 떠오르지 않는다. 데이터를 주고받는데에서 문제가 생긴거면 로드밸런싱을 할텐데, 연결 자체에 문제가 생겨 버리니 로드밸런싱을 시도해도 로드밸런서에서 에러가 날 것 같다. 이 사람도 나와 똑같은 문제를 겪었다. 코드 자체도 완전 비슷하다. https://groups.google.com/g/netmq-dev/c/rjAOWdHTvus 이제 10년이 지났는데, 알아냈을까? 메일을 보내..
· Server/Linux
문제) net 7.0 으로 구동되던 프로그램을 net8.0 으로 업그레이드 하면 해당 프로그램을 $ dotnet Server.dll 로 실행하던 머신들의 dotnet 버전을 전부 업그레이드해 주어야 한다. 해결) 이렇게 매번 dotnet 버전을 업그레이드하는 불편함을 없애려면 dotnet 까지 함께 빌드해주면 된다. sudo dotnet publish ./TcpTestServer/TcpTestServer.csproj \ --configuration Release \ --self-contained \ --property:PublishSingleFile=true 위 명령어를 입력하면 어느 경로에 실행 파일이 생기는지 나온다. 찾아가서 실행해준다. // 찾아가서 cd /Users/jaeeun/free/AWS/..
개발자 재은
개발자 재은