c++ 웹서버 프로젝트를 .net core 로 이전하는 방안에 대하여.

안녕하세요.
최근 닷넷데브 커뮤니티를 알게된 뉴비 입니다.

약 1년 반정도 드론 모니터링 시스템을 구축했습니다.
해당 업무 중간에 스프링 프로젝트를 하게 되면서 내가 왜 C++로 웹서버를 만들었을까 라는 후회가 들었습니다.(웹에 최적화된 프레임워크를 쓰니 너무나 편해서요. ㅠㅠ)

요구사항은

  • 우분투에서 실행
  • epoll을 써줬으면 한다.
    → 회사에 대부분 C++개발자 밖에 없었고(저 또한 다른 언어에 대한 지식이 미천하여 ㅠㅠ )
    → crow라는 웹서버 라이브러리가 있대.
    –>>> 오 그럼 C++로 개발하면 되겠다. 가 되었습니다.

현재 백엔드는 C++(boost, crow lib 사용), 프론트엔드는 타입스크립트로 개발되었습니다.
프로젝트는 끝이났고, 모든 요구사항은 만족하였습니다만, 내가 제대로 구조를 짜서 개발한게 맞나 싶더군요.

다른 쓰레드 모듈도 있긴 한데 통신을 위해서 만든 쓰레드는 아래 4개입니다.
main
|- 드론 normal 포트 연결을 위한 쓰레드 생성(epoll)
|- 드론 urgent 포트 연결을 위한 쓰레드 생성(epoll)
|- 화면단과 통신하기 위한 웹소켓 쓰레드 생성
|- 외부 서버와의 I/F를 위한 REST API 쓰레드 생성

작년에 asp.net core에 대한 존재를 알게되었고 만약 지금 프로젝트를 .net core로 만들면 어땠을까? 라는 생각이 들더군요.

궁금한 것은 둘중에 무엇이 더 나은 방향인지 의견 여쭙습니다.

  1. .net core로 콘솔응용프로그램을 만들고, 거기에 웹소켓, restapi 기능을 추가한다. (프론트엔드 소스는 건들지 않는다라는 조건에서)
  2. asp.net core 프로젝트로 작성하고, 프론트엔드도 그에 맞게 수정한다.

글 읽어주셔서 감사합니다.
좋은 커뮤니티 만들어주셔서 감사해요.

추신. 이 커뮤니티는 무엇으로 개발되었나요? ㅎㅎ 갑자기 궁금해졌습니다.

3개의 좋아요

반갑습니다. :smiley:

ASP.NET Core를 IIS ANCM (Windows Server의 IIS 위에 ASP.NET Core Module을 붙여 연결하는 형태)으로 띄우거나, Windows NT 서비스로 띄우는 것처럼 애플리케이션 타입이 아예 달라지는 경우를 제외하면, ASP.NET Core이든, 일반 콘솔 애플리케이션에서 출발하든 아무런 차이는 없습니다.

말씀하신 2번은 1번에 Kestrel이라는 ASP.NET Core의 독자 웹 서버 구현체를 사용하는 정도의 차이일 뿐입니다. 그래서 1번에서 시작해서 ASP.NET Core 프로젝트로 변형하는 것도 충분히 가능합니다.

그리고 C++ 사용 경험이 있으시다고하니, 만약에 런타임 수준에서 커스터마이징을 희망하신다면 .NET Framework나 .NET Core 런타임을 C/C++ 애플리케이션에서 호스팅하는 옵션도 관심있으시다면 한 번 둘러보시는 것도 추천드립니다. 이렇게 시작하면 복잡도가 많이 올라가지만, 커스터마이징 폭이 더 넓어져서 .NET 런타임을 좀 더 정밀하게 제어할 수도 있을 것입니다.

애플리케이션 레벨에서는 System.Runtime.InteropServices 아래의 여러 유틸리티 클래스들이 네이티브 코드와 연동될 수 있게 도와주는 수단들을 제공하고, C#에서는 unsafe 코드를 이용해서 포인터를 다룰 수 있으므로 네이티브 코드에서 할당한 메모리 블록을 메모리 레이아웃만 잘 맞추신다면 정밀하게 제어하는 것도 생각할 수 있습니다.

참고로 이 커뮤니티 웹 사이트는 Discourse라는 오픈 소스 포럼 소프트웨어를 사용합니다. Ruby on Rails로 만들어져 있으며, 닷넷재단 (.NET Foundation)의 포럼 사이트를 포함해서 해외의 많은 포럼 사이트들이 사용하는 검증된 소프트웨어이기도 합니다.

6개의 좋아요

아니. 이렇게 자세한 댓글이 달릴줄은 상상도 못했네요.
관련한 아티클 잘 읽어보도록 하겠습니다.
감사합니다!!! :bowing_woman:

5개의 좋아요

양방향 통신이 필요하다면 asp.net core + SignalR로 구성하는게 훨씬 쉽고 유용할듯 싶네요.

2개의 좋아요