반응형

https://www.simplilearn.com/tutorials/cpp-tutorial/c-sharp-vs-cpp

요즘에 이직 준비를 열심히 하고 있는 중이어서

 

채용 공고들을 많이 보고 있는데, 채용 공고들을 보면 확실히 처음 신입으로 입사하기 위해

 

구인할 때보다 C# 게임 서버를 사용하는 프로젝트가 많이 늘었음을 알았다.

 

현재 회사로 와서 조금 여유가 있을 때, 인프런에서 C# 관련한 강의가 있어 재미있게 듣었던 경험이 있다.

 

학부 시절에 대학 강의를 들으면서 C++ IOCP를 사용하여 만든 서버가 성능이 좋다고 들었다.

 

그래서 게임 서버들은 다 C++ 게임 서버를 쓰는구나 하면서 아무 생각 없이 받아들였다.

 

지금 생각해보면 참 멍청한 거라고 생각이 든다..

 

왜 성능이 좋은 것에 대해 아무 생각 없이 면접을 위해 달달 외우기만 했었지 의문을 품지 않았다.

 

본론으로 들어와서 2022년 하반기쯤 열심히 C# 강의를 들었는데, C++ 보다 훨씬 편한 느낌이 들었다.

 

집을 인테리어 한다는 것에 예시를 들면, C++은 내가 재료들을 가지고

 

목공도 하고, 전기 공사도 하고, 타일 공사도 하고 모든 공정을 한다는 느낌이라면

 

C#은 옆에 누군가 보조해주면서 이건 내가 맡을게 라는 느낌이랄까..?

 

솔직히 이게 정확한 예시가 맞는지는 모르겠다.. 결과적으론 "개발 속도면에서 차이가 많이 나겠구나" 느낀 거였다.

 

뜬금없이 새벽에 그 생각이 떠올라서 "블로그에 C++ 게임 서버와 C# 게임 서버가 어떤 차이가 있는지

 

정리해 놔야겠다" 하고 이불을 박차고 나와서 이러고 있다.. 아무 생각 없이 잠들었어야 했는데.. 

 

내일 코딩 테스트해야하는데.. 그럼에도 정리를 간략하게 하고 자려합니다..

 

바로 밑에는 간략하게 C++ 게임 서버와 C# 게임 서버를 간략하게 비교


성능 측면

 

C++ 게임 서버:

  • 고성능: C++은 네이티브 언어로, 컴파일된 코드가 직접 하드웨어에서 실행됩니다. 따라서 매우 높은 성능을 제공합니다.
  • 저수준 메모리 관리: 개발자가 메모리를 직접 관리할 수 있어, 최적화된 메모리 사용이 가능합니다. 이는 특히 대규모 멀티플레이어 게임에서 중요한 요소입니다.
  • 최소한의 런타임 오버헤드: 가비지 컬렉션 같은 런타임 오버헤드가 없기 때문에, 예측 가능한 성능을 유지할 수 있습니다.

C# 게임 서버:

  • 상대적으로 높은 성능: C#은 .NET 런타임에서 실행되며, JIT(Just-In-Time) 컴파일을 통해 성능을 최적화할 수 있습니다. 하지만 C++ 보다는 다소 느릴 수 있습니다.
  • 자동 메모리 관리: 가비지 컬렉터가 메모리를 자동으로 관리하여, 메모리 누수 문제를 줄일 수 있지만, 가비지 컬렉션 시 성능 저하가 발생할 수 있습니다.
  • 풍부한 라이브러리: .NET 프레임워크와 함께 제공되는 풍부한 라이브러리를 활용하여 개발할 수 있습니다.

 

개발 속도 및 생산성

C++ 게임 서버:

  • 개발 시간 증가: 저수준의 메모리 관리와 복잡한 기능 구현으로 인해 개발 시간이 더 오래 걸릴 수 있습니다.
  • 디버깅 어려움: 메모리 누수, 포인터 에러 등으로 인해 디버깅이 더 어려울 수 있습니다.
  • 풍부한 기능 제공: C++은 강력한 기능과 라이브러리를 제공하지만, 사용법이 복잡할 수 있습니다.

C# 게임 서버:

  • 개발 속도 증가: 자동 메모리 관리, 풍부한 라이브러리, LINQ 같은 고급 기능을 통해 개발 속도가 빨라질 수 있습니다.
  • 디버깅 용이: 더 직관적인 에러 메시지와 디버깅 도구를 제공하여, 문제를 더 쉽게 찾고 수정할 수 있습니다.
  • 더 높은 추상화 수준: C#의 고급 기능과 문법은 코드를 더 간결하고 읽기 쉽게 만듭니다.
안전성

C++ 게임 서버:

  • 더 많은 책임: 개발자가 직접 메모리를 관리하기 때문에, 메모리 누수, 버퍼 오버플로우 등의 위험이 있습니다.
  • 높은 제어권: 개발자가 시스템 자원에 대해 더 많은 제어권을 가지고 있어, 최적화를 직접 수행할 수 있습니다.

C# 게임 서버:

  • 메모리 안전성: 자동 메모리 관리와 가비지 컬렉션 덕분에 메모리 누수와 같은 문제가 적습니다.
  • 타입 안전성: C#은 더 강력한 타입 시스템을 가지고 있어, 타입 관련 오류를 줄일 수 있습니다.
생태계 및 커뮤니티

C++ 게임 서버:

  • 광범위한 사용: C++은 오래된 언어로, 게임 개발을 포함한 많은 분야에서 널리 사용됩니다.
  • 풍부한 라이브러리: 게임 개발에 유용한 다양한 라이브러리와 엔진(예: Unreal Engine)을 지원합니다.
  • 강력한 커뮤니티: 방대한 사용자 커뮤니티와 지원 포럼이 있어, 문제 해결에 도움이 됩니다.

C# 게임 서버:

  • 빠른 성장: C#과 .NET 생태계는 빠르게 성장하고 있으며, 특히 서버 애플리케이션 개발에서 인기를 끌고 있습니다.
  • Unity 엔진: Unity와 같은 주요 게임 엔진이 C#을 기본 스크립팅 언어로 사용하여, 게임 개발에 널리 사용되고 있습니다.
  • 강력한 툴링: Visual Studio와 같은 강력한 개발 도구를 제공합니다.

위의 차이점을 보면 정답이 없다는 것을 알 수 있습니다.

 

아주 잘 짠 C++ 게임 서버가 당연히 C# 게임 서버보다도 성능이 좋다고 할 수 있습니다. 

(*잘 짠 C++ 게임 서버지. 개판으로 만들어둔 C++ 게임 서버가 아닙니다 ^_^..)

 

그러면 "어?! 그러면 C++로 게임 서버 만들어야 하는 것 아니야!?"라는 생각을 품을 수도 있을 겁니다.

 

하지만, 이것은 장단점 중에 단편적으로만 접근하게 되는 부분인 것이고

 

보편적으로 여러 회사에서 여러 프로젝트의 상황에 따라 다 다르게 적용되는 것 같습니다.

 

요즘 같이 빠르게 게임 시장 트렌드가 바뀌고 있고 게임의 매출이 지속적으로 이어지는 경우가 없기 때문에

 

결국 게임을 론칭했을 때, 롱런하기보다는 단기적으로 매출을 내고 신규 프로젝트를 진행하는 경우가 많습니다.

 

그리고 클라우드 서비스(AWS, Azure) 등으로 auto scaling을 통하여 서버를 더 늘리는 경우가 많아져 "무조건 C++ 게임 서버야!"라는 생각이 많이 희미해졌다고 생각 듭니다.

 

위에서 이야기했듯이 단기적으로 매출을 내고 새로운 프로젝트를 들어가야 하는 시장 트렌드에서는 빠른 개발 속도와 생산성의 의미가 더 커진 것 같습니다.

 

C++로 게임 서버를 구축해 보셨다면 느끼셨겠지만 꽤 많은 시간이 들고 거기 내에서 성능 테스트나 신경 써야 하는 부분이 많기 때문에 기존 프로젝트 프레임워크를 가져와서 어느 정도 마이그레이션 및 업데이트 작업을 하는 게 아닌 이상 오랜 시간이 걸립니다.

 

그렇기에 다양한 라이브러리가 제공되고 C++ 개발자가 익숙한 느낌의 언어인 C# 언어로 만들어진 게임 서버가 많아진 게 아닌가 생각이 듭니다.

 

즉, 이러한 과정에서도 보면 안전성 문제가 있습니다.

 

C++로 게임 서버를 만들게 된다면, 메모리 릭 문제와 오버 플로우 등 직접 개발자가 하나하나 제어를 해야 하는 것으로 인하여 많은 시간이 들어가는 동시에 제대로 처리하지 못한다면 안전성 문제가 발생합니다.

 

그러나, C#으로 게임 서버를 만든다면 GC(Gabage Collection)을 통하여 메모리 안전성을 확보하게 됩니다. 그 외적으로 다양한 부분에서 안전성을 보장받게 되겠죠.

 

생태계 및 커뮤니티 관련해서는 사람마다 생각하는 것이 다르겠지만,

 

결국 대부분 사람들이 어떠한 이슈에 부딪히게 되었을 때, 구글링을 하든 chatgpt를 활용하든 어떠한 방법으로도 찾게 됩니다.

 

이러한 과정에서 발생하는 대다수의 문제들은 리서치로 해결할 수 있는 부분이라고 생각 들어 개발자 입장에서는 엄청난 이슈가 아니고서는

 

큰 차이가 없다고 생각이 들긴 합니다..

 

그리고 옛날에 비해 컴퓨터나 모바일의 성능이 많이 올라간 부분도 한 몫하고 있지 않나라는 개인적 생각입니다.

 

옛날에는 MMO RPG 장르가 꽤 많은 인기를 가져있었고 장기적으로 많은 매출을 주었는데, 요즘에는 신선한 게임들이 많이 인기를 가져가고 있지 않나 생각이 들었습니다.

 

너무나도 많은 MMORPG가 나오면서 유저들 입장에서도 이것도 찍먹 해보고 저것도 찍먹 해보아야겠다는 생각이 든 것일 수도 있겠죠..

 

그러다 보니, 상대적으로 높은 성능을 가지면서도 빠르게 개발할 수 있는 C# 게임 서버를 많이 이용하는 것 같습니다.

 

첫 번째 회사에서는 C++ 게임 서버를 경험하고 두 번째 회사에서는 웹서버 관련 작업을 많이 하게 되었는데,

 

가벼운 캐주얼류 게임은 웹서버로도 충분하겠다는 생각이 들었고,

 

RPG처럼 유저끼리의 상호작용이 많은 경우, C++이나 C# 서버를 통하여 개발하면 되겠구나 라는 생각이 들었습니다.

 

개인적 생각으로는 여러 서버를 구축하는 데 있어 하나의 언어로만 고집하는 것보다는 그 상황에 맞춰서 언어로 어느 정도 개발 속도와 생산성을 맞추는 게 좋지 않을까라고 생각합니다. 

 

혹시 글을 보시는 분들 입장에서는 그저 한 명의 개인적 견해라고 생각하고 가볍게 읽어주셨으면 좋겠습니다.

 

 

반응형

+ Recent posts