.NET 채택의 장점 정리(박제)

좋은 opinion 댓글들이 많이 달려 묻히기 아까워 박제 해봅니다.
혹 마음에 안드시면 삭제 요청해주시면 삭제하겠습니다.
확실히 고성능 Spec 의 .net 이 좋은 선택지이고 아무리 국내에서
생태계 부족 개발자 수급이 어렵다고 해도 rust ,python 등 보다는 여건이 낳다는것 같습니다.

@honeyhead

  1. aspnet core가 대규모 처리 시 초당 HTTP 요청이 가장 빠릅니다 (Servlet, nginx, golang, node.js 보다?)
  2. 데이터베이스 엑세스 성능이나 초당 처리 성능이 상당히 빠릅니다
  3. net core로 넘어오게 되면서 비동기나 각종 메모리 관리 등 성능이 크게 향상 되었습니다.
  4. 웹 개발자가 많고 상대적으로 규모가 크지 않은 경우라면 다른 대안이 많지만 큰 규모라면 관리와 장애 대응을 생각했을 때 커뮤니티 활성화보다 파트너사나 조치를 좀 더 쉽게 할 수 있는 안전성(성숙도)을 생각할 수 있습니다
  5. 게임 개발사는 상대적으로 자바보다 C#을 접할 확률이 더 있습니다. 설득력은 좀 떨어지지만 Unity하던 사람이 서버도 만질 확률도 있고 그렇지 않더라도 자바로 된 개발사가 아닌 이상 코드 공유가 수월하다는 장점이 있을 것 같습니다. 생산성 측면이나 MS 기술에 대해 익숙할 수 있으니 채택이 된 건 아닌가 싶습니다
  6. net core를 통해 유연하게 다양한 환경에 배포가 가능해졌습니다. 특히 제 경우엔 linux를 잘 모르더라도 쉽게 배포가 가능해졌고 이를 통해 docker 컨테이너 형태로 lambda에 배포하거나 리눅스 기반에 aws ec2에 배포하는 것이 수월해졌습니다. 특히 단일서버 기준 리눅스에서 .net core가 돌았을 때 성능이나 가성비가 확실히 좋습니다. 클라우드에 이것을 구축했다면 콜드 스타트나 비용 등 여러가지를 고려해도 나쁘지 않은 선택입니다
  7. 확실히 C++ 게임서버가 속도 측면에서 보편적으로 많이 선택 되어왔다고 생각이 되는데 진입장벽이 높기도 하고 JAVA 게임서버 개발은 레퍼런스나 성능 문제도 있고 오히려 이 시장에선 극소수인지라 자연스럽게 C → C++ → C#이 된 건 아닌지…
  8. 예전에 비해 백엔드 쪽으로 .net core로 작성하는 케이스가 심심치 않게 보이고 있긴 한 것 같습니다. 한국이야 뭐 워낙 파이가 작아도 채용시장에 조금 보이기도 하고 .net core가 발전함에 따라 말씀하신 비동기 소켓서버를 선택했을 때 이 점이 확실히 있는 편이라 전환하는 과정에서 수요가 있을 것 같습니다

@rkttu
기술적으로 닷넷의 버전이 업그레이드 될 수록 힙 메모리에 의존하는 연산을 최소화하고, 가비지 컬렉터가 실행되는 빈도를 낮추는 방향으로 I/O 연산을 최적화하는 것에 많은 공을 들이는 것으로 알고 있습니다. Microsoft가 리딩 포인트를 잡고서 계속 런타임 성능 개선에 많은 투자를 하고 있는 덕분이라고 보여집니다.
아마 Java의 경우에도 여러 JVM Implementation이 있을 것이고 (흔히 업계에서 말하는 Java는 OpenJDK일 확률이 높고), 그 중에서는 .NET과 비슷한 기조 아래에서 성능에 집중하는 구현체를 만드는 곳도 있을 것으로 사려됩니다. (예: Comparing JVM performance; Zulu OpenJDK, OpenJDK, Oracle JDK, GraalVM CE )


@SangHyeon.Kim

  1. NET BCL
    타 언어에는 컴파일 시점 Readonly 컬렉션도 없습니다. (IReadOnlyCollection 류)
  2. C#
    아무리 Reactive 도구가 나와도 컴파일러 수준에서 지원하는 비동기 프로그래밍을 이길 순 없는거 같습니다. (Async, Await)

@Vincent
실시간 메세지 통신의 경우 protobuf를 사용하는 grpc 보다는 통신량을 예측하고 따져본 뒤 flatbuffers 같은 protobuf 보다 압축률이 좋은 버퍼를 사용하기도 합니다.


@Newp
아이들상태에서 노드 파이썬(당시 fast api가 흥하지 않았어서 fast api는 몰라요)보다 10배정도 빠르고, 자바보다는 2~5배정도 빨랐습니다. 루비는 100배쯤 차이나서 아예 쨉도 안돼요. 비동기+스트레스 상황에서는 앞에 얘기한것보다 2배씩 더 빨라졌고, 메모리 효율이나 스트레스 내구성도 차이가 많이 났습니다. 물론 저 플랫폼들을 준비하신분들의 역량의 차이일수도 있지만 닷넷서버라고 딱히 성능이나 안정성에 관련해서 손댄건 아니었어요. 고랭은 api 서버를 하시는분이 안계셨었는데 병렬처리가 정말 빨랐는데 닷넷에 비해 느린 케이스도 많았고 라이브러리들이 당시에는 많이 미성숙했어요.

특히 자바쪽은 스프링부트로 그냥 비동기 처리를 하는게 어렵게 되어있더라구요? 그래서 무슨 스프링부트 어쩌고해서 나온걸 해야하는데 기존 스프링부트와 유사성도 떨어지고, 그 고생해서 작성해도 닷넷보다 미세하게 느렸어요. 특히 디비관련된 라이브러리들은 비동기를 지원이 미흡해서(저는 그럴리가 없다고 생각했지만 관계자분들이 그렇다고 해서…) r2db?머시긴가 아직 베타라고 하던데 알아야할게 왜이렇게 많나 싶었습니다. 자바 라이센스 정책도 복잡하고, ojdk도 8, 11 두개만 지원해서 최신버전 역시 적용못하고 8-11간 하위호환성 문제도 나오고 여러모로 채택할 이유가 없었습니다.


@develofun
규모가 큰 게임회사의 경우 어느 정도 스펙이나 여러 사항을 고려한 후에 서버 스펙을 정할텐데요. 작은 규모의 게임 회사인 경우 간혹 게임 개발 겸 서버도 개발하는 곳도 있습니다. 그럴 경우 Unity 개발자의 경우 가장 접근이 쉬운 게 닷넷 서버라서 채택하는 경우도 많다고 합니다. 결국에는 각 프로젝트 별로 고려 후에 정하는 거겠지만 위처럼 겸해서 개발하는 경우는 보통 닷넷 서버로 간다고 하더군요.
Unity로 개발하는 경우는 Entity나 구조 설계가 아무래도 닷넷 서버와 이점이 많은 것 같습니다. 닷넷 서버로 개발하는 입장에서 Unity 개발자와 협업 시 라이브러리를 같이 사용하거나 공통으로 사용해야할 로직들에 대해 정리해서 서버쪽에서 만들어 배포하는 등 개발이나 운영 간에 여러 이점이 있는 것 같습니다.
그리고 그렇게 개발하면서 필요한 운영툴이 있다면 닷넷 서버를 사용하는 경우 자연스레 닷넷을 이용한 웹 프론트, 백엔드 개발이 들어가게 되서 닷넷 생태계가 이루어지는 것 같습니다.


@그라목손
프라우드넷이 C#으로 개발되었다가 C++로 컨버전 했죠
GC도 문제고 네이티브 언어에 비하면 성능이 낮으니 장점이라기 보단 절충안으로 닷넷을 선택한 것 같습니다.
리더보드나 실시간이 아닌 모바일 게임은 성능이 크게 중요하지 않으니 뭘로 해도 상관 없고요
C++ 고성능 서버 제외한 나머지는 그냥 취향인 것 같습니다.

11개의 좋아요

악! 박제라니!! 예토전생이라니!!

하지만 전 괜찮습니다

5개의 좋아요

여담인데, 닷넷데브 프로필 아이콘 누르면 gif 이미지가 나오는데 어케 하신거에요? 후덜덜

3개의 좋아요

image

image

여기서 설정이 되더군요 아마 제가 닷넷 데브 최초인듯 ㅎㅎ

5개의 좋아요