ASP.NET Core 서버 시작까지 흐름 추적

출처 프로그램 엔터리 Program#Main Program 클래스의 Main 메소드 안은 아래처럼 되어 있다. 이것을 1행씩 따라가 본다. Program.cs WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .Build() .Run(); 1행: .CreateDefaultBuilder(args) WebHostBuilder 인스턴스 만들기 WebHostBuilder 인스턴스를 만든다. 소스 파일: https://github.com/aspnet/AspNetCore/blob/master/src/DefaultBuilder/src/WebHost.cs var builder = new WebHostBuilder(); 환경 변수를 읽도로...
더 읽기

ASP.NET Core 애플리케이션 최소 구현 치트 시트

원본 아래의 설정만 하면 OK. csproj App.csproj <Project Sdk = "Microsoft.NET.Sdk.Web" > <PropertyGroup> <TargetFramework> netcoreapp2.0 </TargetFramework> </PropertyGroup> <ItemGroup> <! - 진짜 최소 구성 -> <PackageReference Include = "Microsoft.AspNetCore.Server.Kestrel" Version = "2.0.3" /> <! - ASP.NET Core MVC (Web API)를 사용할...
더 읽기

C# - Random 유틸리티

.NET 라이브러리의 기본 Random에 기능을 추가한 것이다. 아래 코드는 Unity용인데 조금 고치면 .NET에서도 사용할 수 있다. 출처 using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using Random = UnityEngine.Random; namespace Assets.Scripts.Utils { public static class RandomUtil { /// <summary> ///...
더 읽기

C# - DateTime의 ParseExact, TryParseExact 메소를 이용하여 문자열 변환

ParseExact 메서드의 문자열 변환 DateTime 구조체에는 문자열을 변환하는 방법으로 Parse 메서드와 ParseExact 메서드가 준비 되어 있지만, 전자의 Parse 메서드는 문화권 정보를 사용하여 출력된 문자열을 같은 문화권 정보를 사용하여 DateTime 개체로 변환하는 것이다. 자신의 형식을 가진 문자열을 취급하는 경우에는 후자의 ParseExact...
더 읽기

C# 7.2의 구조체의 성능

출처 C# 컴파일러는 readonly를 따르는 일부 조건에서 구조체의 방어적 복사(defensive copy)를 생성한다. 이 문제는 잘 알려져 있고 문서화 되어 있지만 C# 7.2의 일부 기능과 관련이 있기 때문에 검토 가치가 있다. in및 ref readonly 키워드는 문제의 발생을 높이고 readonly 구조체는 수정...
더 읽기

posix aio의 네트워크 소켓을 지원에 대해서

posix의 비동기 IO의 API인 aio는 파일 조작만 지원하는 걸로 알고 있었는데 소켓 조작에도 사용할 수 있다고 한다. https://koyo.kr/post/posix-aio-socket-server-example/ 그런데 리눅스쪽 서버 개발 관련해서 자료를 찾을 때 소켓 통신으로 aio를 사용하는 것을 본적이 없다. (boost.asio나 node.js의 libuv도 사용하지 않고 있다) 만약...
더 읽기

ØMQ (ZeroMQ) 서론

출처 https://www.infoq.com/jp/news/2010/09/introduction-zero-mq/ PostRank의 설립자이자 CTO인 Ilya Grigorik씨가 지난주 ZeroMQ의 소개 기사를 썻다 . 버클리 소켓(BSD)는 모든 네트워크 통신의 기본 API이다. 1980년대 초로 기원을 가진 TCP/IP 스윗의 원래 구현이기도 한 BSD 소켓이 오늘 날 모든 운영체제에서 가장 널리 지원 되는 중요한...
더 읽기

CPU 사용률이 오르지 않을 때

처리하는 것에 비해 CPU 사용률이 오르지 않는 경우 .NET 런타임의 GC 설정을 변경해서 해결 할 수도 있다. .NET의 GC 모드를 서버GC로 변경한다. .NET Core 프로젝트 파일에 ServerGarbageCollection을 추가하고 값을 true로 한다. <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.0</TargetFramework> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup> ... </Project>...
더 읽기

socket 프로그래밍을 할 때의 SIGPIPE에 의한 문제

출처 연결이 끊어진 소켓에 쓰기(send(2) 혹은 write(2) 같은 것)를 하면 SIGPIPE 시그널이 발생하고 프로세스가 종료하기 때문에 제대로 SIGPIPE 시그널을 핸들링 해 두자는 이야기 이다. (Windows OS에서는 상관 없는 이야기이다) SISGPIPE를 받은 프로세스의 행동과 소켓 프로그래밍에서의 대응책 “sigpipe”로 검색하면 같은 이야기는...
더 읽기

네트워크 용어

Receive-Side Scaling(RSS) http://minimonk.net/2728 Windows Server 2012의 NIC 티밍(teaming)에 대응. TCP Chimney Offload http://vstarmanv.tistory.com/58 VM에서는 사용 불가. Windows Server 2012의 NIC 티밍에 비 대응. NetDMA 네트웍 수신 데이터를 네트웍 어댑터의 수신 버퍼에서 애플리케이션 버퍼에 복사하는 작업을 CPU로 하지 않고 칩셋을 포함한...
더 읽기