Django를 포기한 이유
- 성능 문제에서 자유롭지 못하다.
- 측정 결과에서 많이 느렸다.
- Web기반 게임 구동을 위해 로직 클래스를 encode-decode를 반복했는데, 이 과정이 매우 느렸다. [pickle 라이브러리 이용]
- 게임 로직을 들고 있던 클래스 기준 pickle
- 37ms
- 게임 로직을 들고 있던 클래스 기준 jsonpickle
- 42ms
- 그렇다고 ORM기반 row 하나 get해오는 것도 빠르진 않았다.
- 7~11ms
- 게임 로직을 들고 있던 클래스 기준 pickle
- 이 문제를 해결 하기 위한 방법
- 속도 향상
- Pypi
- Python 3.4는 호환 불가.
- 심지어 Python 2.7이었다고 해도 성능 문제가 있음.
- Pypi
- Django 및 python 버전 업.
- Django 1.10, python 3.5 이용.
- 10% 가량 속도 향상이 있었으나 미미한 정도.
- Django 1.10, python 3.5 이용.
- WebSocket 으로 전환.
- 그렇다해도 느린 Python의 단점 여전히 유효.
- Pickle을 이용하지 않고 ORM 기반으로 전환.
- ORM 기반도 여타 언어들 보다 느림.
- 결론
- Python을 사용하는 이상 어떤 선택을 하더라도 만족스러운 속도를 얻기 힘들다는 결론.
- 다른 언어로 전환하기로 함.
- Python을 사용하는 이상 어떤 선택을 하더라도 만족스러운 속도를 얻기 힘들다는 결론.
- 속도 향상
- Web기반 게임 구동을 위해 로직 클래스를 encode-decode를 반복했는데, 이 과정이 매우 느렸다. [pickle 라이브러리 이용]
- 측정 결과에서 많이 느렸다.
Java (Netty) + Spring으로 가지 않은 이유
- 개발팀 내에 다수 개발자가 C++과 C#쪽에 좀 더 익숙함.
- 물론 C++ 개발자의 Java 학습 비용은 그리 크지 않은 편으로 알려져있으나, 그 학습 비용 마저 줄이고 싶었음.
- NET CORE 환경에 대한 탐구심.
- 기존 Mono기반의 에뮬레이팅 환경과의 차이를 체감하고 싶었음.
- C#과 Java의 포지션이 비슷한데, 굳이 배워서까지 Java를 써야하는지에 대한 의구심.
- Linq의 부재.
ASP.NET CORE를 선택한 이유
- 장점
- C# 사용 가능
- 서버 클라 단일 언어로 통합 가능.
- Unity3D에서의 C#이 버전이 너무 낮다는 단점은 존재.
- SuperSocket은 아직 .NET CORE 이용 불가.
- Linq를 통한 생산성 향상.
- 서버 클라 단일 언어로 통합 가능.
- NET CORE 로 넘어오면서, cross platform 개발 및 서비스가 가능 해짐.
- Mono위에서 구동이 아닌 dotnet 커맨드를 통한 공통된 개발 환경과 구동 환경을 지원하기 시작함.
- 이를 위한 .net standard를 호환하는 라이브러리만 사용 가능한 상황이 됨.
- 구축된 환경을 보면 python이나 ruby로 구축된 웹서버를 deploy하고 구동 시키는 것과 매우 유사하게 되어있음.
- 이를 위한 .net standard를 호환하는 라이브러리만 사용 가능한 상황이 됨.
- Mono위에서 구동이 아닌 dotnet 커맨드를 통한 공통된 개발 환경과 구동 환경을 지원하기 시작함.
- Visual Studio를 이용한 개발 가능
- MVC 패턴을 편리하게 지원함.
- Entity Framework를 통한 ORM.
- 성능적 우월함.
- 기존에도 여타 웹 프레임워크에 비해 우수했던 성능이 Core 버전으로 넘어오면서 급격히 좋아졌다.
- C# 사용 가능
- 단점
- 오픈소스권 문화가 아니라서 MS가 제공하지 않는 기능은 .NET 플랫폼 지원언어로 개발해야함.
- .NET CORE가 아직 1.x대이며, 연관 라이브러리들도 CORE 버전은 미지원되고 있는 것들이 많음.
- 심지어 지원되는 것들도 호환성 버그나 일부 기능이 미구현 된 경우도 많으니 테스트가 많이 필요하다.
- 실제로, Redis나 MySQL Connector 등이 NET CORE로 미구현 된 Feature가 꽤나 많았음.
- 심지어 지원되는 것들도 호환성 버그나 일부 기능이 미구현 된 경우도 많으니 테스트가 많이 필요하다.
SuperSocket를 선택한 이유
- 선정 이유
- 빠른 응답과, 다른 티어와의 통신이 필요할 시에는 소켓 서버가 답이라는 결론.
- 웹 소켓을 선택 할 수도 있었지만, 작업자들이 좀 더 능숙한 SuperSocket 기본 버전을 사용하기로 했음.
- C# 소켓 라이브러리중 많이 사용됐으며, 신뢰성 있는 상태.
- .NET CORE 버전이 있었다 손 쳐도 불안했을 듯. (너무 많은 코드가 재작성 됐을 것이므로)
- 아쉬운 점
- NET CORE용 라이브러리가 아직 없다는 점.
- 멀티 스레딩 관련 최적화와 동기화는 직접 설정 해주어야 되는 점.
- 어찌보면 장점으로 볼 수 있기도 하다.
결론
- Linq의 편의성은 우월하다.
- .NET CORE로 넘어옴으로써 리눅스 호환성 문제도 제거됐다
- .NET standard용 라이브러리가 부족한 아픔은 아직 있다.
- 심지어 주요 사용 라이브러리마저 결함이 있거나 미구현 Feature가 너무 많음.
- 아쉬운 점이 이 것 하나만 있으므로, 올 하반기 정도가 되면 베스트한 선택중 하나로 자리잡지 않을까 생각함.
- 심지어 주요 사용 라이브러리마저 결함이 있거나 미구현 Feature가 너무 많음.
- Visual Studio 기반 개발의 편의성.
- Resharper까지 쓰면 더 말할 것 없는 완벽한 환경!