Thursday, March 31, 2016

Linux 게임 서버 개발 FAQ

좋은 글이 있어서 퍼왔다.
소켓에서 리눅스에서는 4000이하일때 select도 쓸만하다는게 맞는말 같다.

http://nomoreid.egloos.com/3137280

뭐 잘알려진 사실들 이지만 그냥 개인적인 정리입니다. 이상한 부분이나 태클 환영합니다.

1. 라이센스 문제를 피하고 싶다면 cent os를 추천한다. (http://www.centos.org/). 뭐 다들 아는 이야기 겠지만 리눅스에도 상용 배포판이 따로 있다. 하지만 상용 서비스라고 해서 상용 OS를 써야 하는건 아니다. cent os는 재미있게도 상용 배포판인 Red Hat Enterprise Linux(보통 줄여서 RHEL이라고 부른다) 의 클론에서 출발한 프로젝트이다. 바이너리 레벨에서 호환된다. 또 거의 모든 셋팅이 동일하다. 그리고 라이센스 부분도 문제가 없다. 현재 버전 넘버도 RHEL과 동일하다. (안정버전 4.XX 테스트 버전 5.XX)

2. 서버로 사용한다면 GUI인 X Windows는 안까는게 좋다. 200 - 300 메가 내외로 OS설치가 가능하다. 

3. telnet 이나 ftp는 구시대의 유물이므로 사용하지 않는것을 권장. (ssh , scp를 쓰라.)

4. ssh의 port를 바꿔라. 무작위 접속시도가 들어온다. 물론 root의 암호는 단순한것으로 하지 말아라. 

5. 커널은 2.6 이상을 반드시 사용하라. 물론 cent os의 3.XX이후는 다 커널 2.6기반이다.  윈도우가 NT에서 2000으로 넘어오면서 서버용 OS로서 엄청난 발전이 있었듯이 리눅스도 2.4 에서 2.6으로 넘어가면서 절대적인 성능의 개선이 일어났다. 커널 2.6의 개선사항에 대해선 여기를 참고 (http://www.zdnet.co.kr/builder/platform/nix/0,39031679,39129093,00.htm)

6. 리눅스에선 윈도우와는 달리 4000명 이하일때는 select도 상당히 쓸만하다. 단 OS의 기본 셋팅이 1024명을 기준으로 셋팅 되었기 때문에 몇군대 수정할 부분이 있다. (http://nomoreid.egloos.com/1379567)

7. 일반적으로 gcc도 상당히 빠르지만 더 빠른 속도를 원한다면 Intel c++ compiler for linux를 쓰면 된다. (물론 서버가 AMD라면 AMD홈페이지의 linux gcc 튜닝 가이드를 꼭 읽어 보길 바란다. 물론 intel에서도 gcc를 공식 지원해서 gcc 4.0 의 경우 인텔 컴파일러에 쓰인 기술들이 많이 들어갔다고 한다.)

8. linux 라고 해서 꼭 DB를 mysql을 써야하는건 아니다.  MS SQL 서버 , oracle 등도 리눅스에서 사용가능하다. (http://kldp.org/node/2368)

9. gdb사용법에 익숙해져라. gdb와 여러 콘솔기반 어플리케이션에 익숙해져라. 

10. screen 사용법을 익혀라. 데몬으로 만들지 않아도 서비스가 가능하다.

11. 서비스 초반에는 디버깅 모드로 돌릴 수 있으니 디버그 모드에서도 어느정도 성능이 나올 수 있게 짜야 한다.

12. 경험적으로 봤을때 리눅스는 윈도우에 비해 크래쉬시 생성되는 코어 파일이 더 많이 깨져있는거 같다. 물론 메모리 버그일때 이야기다. 물론 어떤 경우라도 메모리를 깨면 사형이다.

13. mysql로 서비스를 할때는 구매가 필요 없다. mysql 은 gpl 라이센스 버전과 상용 버전 두가지 라이센스가 있는데, GPL은 소프트웨어를 배포하거나 소스 수정 할때 소스 공개의 의무가 있다. 따라서 소스를 직접 수정하지 않고 단순히 서비스에 이용하는건 라이센스 문제가 없다. (http://www.mysql.com/company/legal/licensing/ Enterprise IT 항목)

대신 해외에 팔때 mysql을 직접적으로 깔아주면 패키지에 포함한 형태가 되서 라이센스 위반.
국내 퍼블리셔에 서비스시 서버 패키지에 mysql이 포함되어 있으면 라이센스 위반. 

퍼블리셔가 직접 mysql을 깔고 게임 서버를 돌릴 때는 라이센스 위반이 아님. (배포를 한게 아니므로.)

국내 Web Server hosting 업체들도 이방법으로 라이센스 부분을 피해가고 있습니다. 직접적으로 mysql을 깔아주는게 아닌 고객이 mysql을 깔도록 해서 라이센스를 비켜가는것이죠. (세연군 태클로 수정)

14. mysql 4.0 이후 버전은 clinet lib에 GPL라이센스가 걸려 있다. (3.XX 대는 상관 없음)
mysql clinet lib를 사용한 서버를 퍼블리셔에 배포하는 경우 라이센스 위반. (mysql client lib도 GPL)
ODBC를 이용해서 서버를 짜는 경우 라이센스 위반이 아님. 물론 odbc쪽 라이센스가 걸려있긴 하지만 
라이센스 문제 없는 것으로 잘 찾아서 쓰면 됨.
(예 : mysql server + iodbc http://www.iodbc.org/index.php?page=mysql2odbc/index BSD 라이센스.
         제가 써보진 않아서 성능에 대한 보장은 할 수 없습니다. )

15. 보통은 퍼블리셔에서 DB관련 된 부분은 제공해줘서. -_-;; 개발시는 그냥 신경쓰지 않고 일단 개발하다가 퍼블리셔의 DB에 맞춰서 커스터마이즈 해주는게..

16. cubrid DB를 사용하는걸 한번 고려해 보라!. mysql보다 2배 이상 빠르고 한글로 지원을 받을 수 있다.

.. 계속 정리중.

Wednesday, March 30, 2016

윈도우용 SVN 서버 VisualSVN Server

오래된 SVN Repository의 소스 정리를 하다가 SVNManager가 윈도우 10에서 동작하지 않아서 VisualSVN Server를 설치하였다.

설치해본 소감은 왜 내가 그동안 SVNManager를 고집했는지 후회 스러운 순간이었다. 윈도우 NT서버의 IIS와 같은 GUI와 함께 너무나도 쓰기 편리하게 되어 있었다.

감동의 순간을 스크린샷으로 남겨본다.

Friday, March 18, 2016

Android 6.0 APK 빌드 안될때 proguard 문제

안드로이드 6.0(23)으로 compileSdkVersion과 targetSdkVersion을 셋팅하였다.
그랬더니 기존에는 발생하지 않던 APK 빌드가 실패하였다.

확인해 보았더니 6.0에서 ApacheHttpClient가 duplicate되어 발생한 문제였다.
따라서 proguard_project.txt에 다음을 추가해 주면 문제가 해결된다.

-dontwarn org.apache.http.**
-dontwarn android.net.http.AndroidHttpClient
-dontwarn retrofit.client.ApacheClient$GenericEntityHttpRequest
-dontwarn retrofit.client.ApacheClient$GenericHttpRequest
-dontwarn retrofit.client.ApacheClient$TypedOutputEntity
-dontwarn android.util.FloatMath