JENNIFER .NET의 .NET Core 지원
닷넷 환경의 변화
마이크로소프트는 2019년 4월에 출시한 4.8 버전이 닷넷 프레임워크 제품의 마지막 버전이며 이후 닷넷 코어에 흡수되어 2020년 말에 “닷넷 5”로 통합될 것임을 공식 발표했습니다.
여기서 중요한 것은 “닷넷 5”의 근간이 닷넷 프레임워크가 아닌 닷넷 코어이므로 사실상 닷넷 코어가 마이크로소프트의 주요 개발 플랫폼으로 대두되었다는 사실입니다.
모체였던 닷넷 프레임워크에 비해 한참 늦은 2016년에 처음 출시된 닷넷 코어는 다중 플랫폼을 지원하기 위해 상대적으로 좁은 범위의 공통 라이브러리로 시작했던 탓에 기존 닷넷 프레임워크를 기반으로 한 개발자를 끌어들이기에는 부족한 면이 많았습니다.
하지만 오픈 소스 특유의 유연함을 기반으로 빠르게 업데이트를 진행하다가 급기야 2019년 발표된 닷넷 코어 3.1에는 닷넷 프레임워크 환경에서만 가능했던 Windows Forms와 WPF까지 공통 라이브러리로 포함하기에 이르렀습니다. 즉, 웬만한 유형의 응용 프로그램은 닷넷 코어를 기반으로도 충분히 만들 수 있게 되었고 향후 로드맵에서 밝힌 “닷넷 5”의 정책에 따라 기존의 환경에 머물러 있던 개발자도 닷넷 코어 기반으로 이전하지 않을 수 없는 상황이 된 것입니다.
그 외에도 닷넷 코어가 가진 다양한 장점으로 인해, 향 후 신규 프로젝트는 대부분 닷넷 코어(및 닷넷 5)를 기반으로 작성하게 될 것으로 보입니다.
실제로 근래 제니퍼 닷넷 에이전트를 도입하는 닷넷 환경은 ASP.NET Core 웹 사이트가 주류를 이루고 있습니다.
비동기를 지향하는 ASP.NET Core
몇 년 전부터 Node.js나 Nginx가 인기를 얻으면서 비동기 처리가 관심을 끌기 시작했습니다. 그러한 신규 프레임워크들의 경우 애초에 비동기/이벤트-드리븐 방식을 고려해 제작되었기 때문에 코드 수준에서 비동기로 처리하는 것이 자연스럽습니다. 반면 기존에 이미 존재하던 Java나 PHP 등의 개발 환경에서는 동기 방식으로 처리하던 것을 비동기로 바꾸는 것이 상대적으로 어렵다는 문제로 인해 비동기 방식으로의 개발이 그다지 적극적이지 않습니다.
그렇다면 닷넷 환경은 어떨까요? 닷넷의 주 개발 언어인 C#은 자체적으로 비동기 처리를 쉽게 해결하는 구문을 지원하고 있어 일반 개발자들로 하여금 진입 장벽이 그다지 높지 않아 ASP.NET Core 환경에서 개발되는 많은 서비스들이 비동기로 동작하는 경우가 많습니다.
예를 들어 데이터베이스에 연결해 쿼리를 수행하는 기존의 코드가 다음과 같은 식으로 작성되어 있다면,
using (SqlConnection connection = new SqlConnection()) { connection.ConnectionString = ...; connection.Open(); SqlCommand command = new SqlCommand(); command.CommandText = "INSERT INTO ... VALUES ..."; command.ExecuteNonQuery(); }
이것을 비동기로 바꾸는 작업은 “await”을 붙이는 것만으로 해결됩니다.
using (SqlConnection connection = new SqlConnection()) { connection.ConnectionString = ...; await connection.OpenAsync(); // 비동기로 Open 실행 SqlCommand command = new SqlCommand(); command.CommandText = "INSERT INTO ... VALUES ..."; await command.ExecuteNonQueryAsync(); // 비동기로 Query 실행 }
이처럼 개발 코드를 여전히 순차적으로 실행하듯이 작성하기 때문에 기존 닷넷 개발자들이 비동기로 웹 서비스를 제작하는 것에 부담이 없습니다.
제니퍼 닷넷의 ASP.NET Core 모니터링 지원
제니퍼 닷넷은 이렇게 C# 언어로 작성한 비동기 코드가 순차적으로 작성된다는 특징에 따라 서비스 처리 과정에 발생하는 프로파일 데이터 역시 기존의 동기 방식과 유사하게 보여줍니다.
따라서 비동기 호출로 인해 코드 조각들이 여러 스레드에 나뉘어 실행되더라도 결국 해당 웹 서비스 요청에 대한 처리 과정의 어떤 지점에서 지연이 발생하는지 직관적으로 빠르고 쉽게 인지하는 것이 가능합니다.
또한 닷넷 코어가 윈도우 서버뿐만 아니라 리눅스 환경 및 더 나아가 Docker와 같은 컨테이너 환경에서도 실행되는 점을 감안해 제니퍼 닷넷도 해당 환경에 대한 지원을 버전 5.5.1.6부터 추가했습니다.
지원환경
OPERATING SYSTEMS
- 윈도우 서버 2003 이상(2003, 2008, 2008 R2, 2012, 2012 R2, 2016), x86 및 x64 포함, 리눅스 (.NET Core 2.0 이상이 설치 가능한 버전)
웹서버 & 닷넷 프레임워크
- 웹 서버‧ IIS 6.0 이상 (6.0, 7.0, 7.5, 8.0, 8.5, 10.0)
- 닷넷 프레임워크‧ .NET Framework 2.0 이상 (2.0, 3.0, 3.5, 4.0, 4.5, 4.6)
- 닷넷 코어- .NET Core 2.0 이상 (2.0, 2.1, 3.0, 3.1)
지원 DB Provider
- Microsoft SQL Server, PostgreSQL, Oracle, DB2 (닷넷 에이전트 5.0.14부터 지원 추가)