리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom

리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom

*이 글의 내용은 한국산업기술대학교 게임공학부 정내훈 교수님의 수업을 듣고 정리한 내용입니다.

LINUX

리눅스 게임서버만 하려고 해도 한학기다. 지금은 맛보기만 할거다.

UNIX

  • 1969년 개발
  • Multi Process Operating System
  • Text 기반의 UI
    • X-Window로 window 환경 진화 (1980년대 후반)
  • 현대 OS의 모태
    • 현대 OS에 추가된 개념들 
      • Multi thread, network programming, windows system… 

밑도 끝도 없이 갑자기 나온건 아니고 역사가 있다. 유닉스라는 운영체제의 파생형이 리눅스다. 직접적인 파생은 아니고 큰 영향을 받은거다. 유닉스가 비싸고, 소스코드가 비싸서 그럼 내가 만들지 하고 만든게 리눅스다. 유닉스랑 똑같다. 내부 구현은 많이 다른데 겉보기는 똑같다. 프로그래밍 방법도 거의 같다. 각종 시스템콜 쓰는데, 거의 같고 파일 시스템의 디렉토리 구조도 거의 같다. 유닉스 쓰는사람은 리눅스 쓰는거 아무 문제없다. 윈도우 98과 윈도우 xp쓰는거랑 비슷하다. 둘은 완전히 다른 운영체젠데 사용법이 비슷해서 큰 차이가 없다. 커널 프로그래머가 아니면 유닉스와 리눅스 차이를 알기 어렵다. 

69년에 개발되었고, 시분할 운영체제로 개발된 최초의 운영체제는 아니고, 정립시킨 운영체제다. UI는 텍스트 기반. 명령은 다 타이핑해서 입력한다. 지금도 윈도우 10 쓰는 사람은 명령 타이핑해서 쓰는거 익숙하지 않다. 배그 하려면 battleground 쳐서 엔터 누르고 리턴해야 실행되는 방식이다. 게임서버 리눅스 쓰면 익숙해져야 한다. 윈도우를 하더라도 텍스트 기반 ui를 써야할때가 있다. 그래서 어쨌든 익숙해질거다. 

윈도우 10처럼 gui 기반의 윈도우 인터페이스도 있다. 윈도우 ui도 제공하는데 우리랑은 관련없다. 클라 개발이 아니라 서버 개발이 목표니까 그냥 있나보다. 게임서버로 쓰는 리눅스는 gui 쓰지 않는다. 그래도 윈도우 환경이 없는건 아니다라는거. 

현대 운영체제의 모태다. 직계후손은 아니고 짝퉁. 반계. 모든 운영체제는 기능들을 가져오거나 했다. 이걸 벗어나는 운영체제는 지금은 하나도 없다. 예전엔 있었는데. 운영체제의 차이를 거의 느끼기 어렵다. ui는 다른데 이놈이 이놈이다. 다 유닉스에서 가져왔으니까. 

리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom
https://en.wikipedia.org/wiki/Unix

최초로 만든 유닉스가 있었고 엄청나게 가지를 친다. 수많은 가지치기가 있다. 요즘엔 거의 망했다. 리눅스때문에. 

직접적인 연관은 없는데 좋은건 다 빼가서 구현해뒀다. 족보는 훨씬 더 왼쪽이 크지만, 지금은 리눅스가 압도하는 형태다.

리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom
https://en.wikipedia.org/wiki/Linux

리눅스는 이렇게 가지치면서 나왔다. GNU라고 소프트웨어 연맹에서 운영체제 만드는 프로젝트가 있었는데 사공이 많아서그런지 개발이 안되다가, Torvalds 혼자 나와서 만든게 리눅스다. 이 아저씨는 커널만 만드는거고 커널 말고 라이브러리 컴파일러 이런거는 GNU에서 많이 따왔다. 

유닉스에 많은 영향을 받았는데, 알맹이는 완전히 새로 만든거다. 소스코드 그대로 가져왔으면 오픈소스 못한다. Bell Lab에 돈내야한다.

리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom

윈도우 NT는 어디서 나왔냐? 족보가 복잡하다. 유닉스의 영향을 많이 받았다. 유닉스 아까 위에서 족보가 엄청 방대했다. 같은 유닉슨데 호환성 문제가 생긴다. 컴파일 안되고 그런거. 그래서 나온게 POSIX. 프로그래밍 API의 표준이다. 이 표준을 지키면 프로그램이 잘 돌아가는걸 보장하겠다 이런 호환성 개념이다. 이건 API 표준. 

윈도우 NT는 이 POSIX를 기준으로 만들어졌다. 맨땅에서 만든건 힘드니까 VMS에 있던 사람들을 데려와서 많이 따와서 만들었다. 

MACH는 멀티스레드와 마이크로 커널의 기본이라고 할 수 있다. 이걸 표준화 한 OSF/1이 나오고, 여기서 정립된 개념을 통합해서 Windows NT가 나왔다. 게임서버용은 윈도우 NT다. 리눅스에서 작성한 여러 프로그램들이 WSL로 돌리면 다 돌아간다. 

  • 인터넷 서버 점유율
리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom

가격이 많이 싸서 많이 쓴다. 성능은 비슷하고. 게임서버에서 많이 쓰는 이유는 인터넷 서버에서 많이 쓰이기 때문이다. 데스크탑은 윈도우고 나머지는 맥OS. 리눅스를 데스크탑으로 쓰는 비율은 3%도 안된다. 

스마트폰은 윈도우가 전멸이고 리눅스가 70%. 게임서버 시장에서는 리눅스기 30%고, 윈도우가 30% 나란히 쓰이고 있다. 나머지는 뭐냐 운영체제가 뭔지 알 수 없는거. 서버는 가서 볼 수 없다. 네트워크로만 연결되어 있어서 짐작할 수 없는 경우다. 

게임서버에서의 리눅스 사용 비율

  • www.gpgstudy.com/forum/viewtopic.php?p=114119
  • 클라우드와 중국의 영향으로 상승 중 
온라인 서버 제작자 모임(http://cafe.naver.com/ongameserver)에서 2009.01.19 ~ 2009. 01.31일까지 현재 온라인 게임 서버의 개발 및 서비스를 할 때 사용하는 OS에 대한 설문 조사를 했습니다. 총 85명이 참여 해 주셨습니다. 아주 많은 수의 개발자가 설문에 참여한 것은 아니지만 각 OS 사용 비율은 한국 게임업계의 상황과 거의 비슷하리라 생각합니다. * 개발은 현재 개발 중인 게임의 게임 서버를 실행할 OS이고, 운영은 서비스 중인 게임의 게임 서버를 실행하고 있는 OS를 말합니다. 32비트 윈도우65명 64비트 윈도우10명 32비트 유닉스계열5명 64비트 유닉스계열5명

게임서버에서 리눅스를 조사한 자료는 없다. 웹과 다르게 운영체제를 알기 어렵다. 웹서버 프로그램을 뭘 쓴는지 알면 무슨 운영체제를 알기 쉬운데, 게임서버는 그 회사 다닌사람한테 물어보는거 아니면 알기 어렵다. 이 글이 2009년에 조사한 글인데, 아직도 비슷하다. 이때 이정도였는데 조금은 조금 늘었을 것이다. 윈도우 비싸고, 작은 회사에서는 못살거고. 클라우드에서 게임서버 돌리려면 리눅스 쓰는게 훨씬 편하다. 

그래서 리눅스를 많이 쓰고, 또 클라우드에서 돌아가는 OS계열을 위해선 리눅스 써야하고. 중국의 영향도 있다. 윈도우즈가 미국에서 만든거라 중국에서는 정책적으로 거부를 하고 있다. 게임서버로 리눅스를 요구한다. 그래서 중국 시장을 진출하려고 개발하는 게임들은 리눅스로 많이 쓰고 있다. 지금은 중국에서 한국게임 금지 명령을 내려서 정말 업계에 타격이 크다. 

그래서 2009년에 조사한 이 자료보다는 조금 늘었을 것이다. 그냥 뇌피셜은 아니고 돌아다니면서 물어보면 그렇다. 그래도 아직 큰회사들은 윈도우즈를 많이 쓴다. 핵심 게임서버 프로그래머들이 윈도우에서 만들어봤으니까. 어느순간 추월할거 같다. 2030년까지는 추월하지 않을까. 그렇게 되면 수업을 리눅스로 바꿀거다.

배포판

  • Open Source로 나와 있는 것은 Kernel만
  • Device driver와 UI, utility, 개발툴을 묶어서 배포판 형태로 배포 

리눅스는 오픈소스라 살 필요가 없다. 근데 이게 작업이 엄청 힘들다. 소스를 가져와서 컴파일해서 설치해야한다? 감이 안온다. 인터넷에 유튜브에도 있고 문서들에도 친절하게 설명한다. 따라하면 되긴 하는데 쉽게 할 일은 아니다. 호환성 문제도 있고, 커널 컴파일해서 바이너리로 만들었다고 해서 실행되는게 아니다. 각종 유틸리티 GUI 다 조합해서 만들어야하는데 시간이 엄청 많이 걸린다. 아무나 할 수 있는게 아니다. 아무나 할 수 있다고 광고하지만 하다가 지쳐서 때려칠 확률이 크다. 여러 유명한 배포판이 있어서 리눅스를 쓰려고 하면 이것들 중 골라서 쓴다. 매니아 중에서는 오픈소스만 가져와서 조합해서 쓰는데 그런 사람은 거의 없다.

  • 유명
    • UBUNTU  : desk top에서 많이사용
    • RED HAT : 서버 전용, 유료, 버그수정해 줌
    • Cent OS : Red Hat의 공짜, 아무런 지원이 없음 

서버는 거의 99% RED HAT 아니면 Cent OS다. 이고 말고도 있긴 한데. RED HAT은 유료다. 돈받고 파는거 싫으면 커널 가서 컴파일받아서 쓰면 되는거니까. 그리고 돈받고 끝이 아니라 유료 지원을 해준다. 배포판을 돈받고 파는게 아니라 유지보수 비용이다. 버그 나오면 수정해주고 문제 컨설팅해주고 관리해준다. 그래서 큰 회사는 이걸 쓴다. 전문인력이 관리할수도 있지만 리눅스 전문인력 고용해서 유지보수 하는거 돈 많이든다. 그래서 이걸 쓰고 문제생기면 전화해서 와서 해결해준다. Cent OS는 AS를 뺀 버전이다. RED HAT은 최신 운영체제를 배포하고, Cent OS는 예전 RED HAT을 제공한다. 버전이 좀 떨어지긴 하는데 큰 지장은 없다. 근데 이거 버그나면 알아서 해결해야한다. 비싸다곤 해도 윈도우만큼 비싸진 않는다. 정말 자신있으면 Cent OS를 쓰고 그걸 개조해서 쓴다. (교수님께서 본 게임회사들은 Cent OS를 대부분 썼다고 하셨다)

UI

리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom

실제 사용하면 어떻게 되나? ui가 텍스트 기반이다. 리눅스 접속하면 이렇게 달랑 프롬프트가 나온다. 명령어를 입력해서 실행해야한다. 처음엔 답답한데 쓰다보면 익숙하다. 나중엔 GUI가 답답해질 수 있다. 그래서 게임서버 개발하는 사람들중에 Power shell 해서 쓰는 사람들도 많다. 윈도우에서 텍스트 UI 쓰는 방법이다. 

  • UI의 진화
리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom

리눅스도 윈도우 못지 않게 GUI 해서 편하게 쓸 수 있다. 요새는 왜 윈도우 많이 쓰나? 게임하려고. 한글하고 오피스 돌리려고. 그거 아니면 윈도우 쓸 일이 없다. 리눅스 써도 아무 문제없이 컴퓨터 쓸 수 있다. 또 비주얼 스튜디오는 윈도우에서밖에 안돌아간다. 그래서 쓰기도 한다. 게임서버는 리눅슨데, 비주얼스튜디오를 쓴다. 개발환경으로 리눅스를 못쓰는건 아닌데, 처음 배울때 윈도우에서 배우는 사람들이 많아서 그런지 개발 PC로는 윈도우를 많이 쓴다.

장점 / 단점

  • 장점
    • 가격이 싸다
    • 가볍다
    • Open Source이다
  • 단점
    • 익숙해 지기가 어렵다

게임서버로 윈도우 10 못쓴다. 보안문제, 여러 잡다한 문제들로. 또 멀티 CPU 지원 안한다. 윈도우 서버 운영체제는 비싸다. 윈도우 서버는 140만원이다. 코어 제한을 풀면 풀수록 가격이 팍팍 올라간다. 이것도 1년마다 돈을 추가로 내야한다. 

또 리눅스는 가볍다. 디스크도 메모리도 조금 차지한다. 윈도우 10은 8기가 이상이 아니면 쓸수가 없다. 적어도 16기가는 되어야 게임을 돌릴 수 있다. 근데 리눅스는 1기가 메모리에서도 잘 돌아갈거다. 굉장히 가볍다. 파티션 조금 줘도 잘 돌아간다. 윈도우는 128기가에서도 버벅인다. 근데 리눅스는 30기가같은 작은 하드에서도 잘 돌아간다. 이건 장점이다. 서버 프로그램 돌아가야하는데 운영체제가 뺏어가면 안된다. 또 오픈소스. 가격 싼게 장점 아니냐? 아니다. 소스코드를 볼 수 있는게 장점이다. 이상동작, 성능하락의 문제를 겪을 때 시스템 콜 했을 때 운영체제에서 버벅이는 경우가 꽤 있다. 그럼 뭐가 문제인지 게임서버 코드만 보면 모른다. 근데 오픈소스면 확인해보고 디버깅도 가능하다. 운영체제가 문제가 있다면 (그럴 수 있다 범용이니까) 개조를 할 수 있다. 소스코드를 고치는경우도 있는데 대부분 컴파일 할 때 쓰는 파라미터들 자료구조 최대크기 그런 파라미터를 조작하면 게임서버가 더 잘 돌아간다. 새로 컴파일 할 수 있다. 블랙박스가 아니라 좋다. 이걸 거꾸로 말하면 이게 윈도우의 단점이 된다. 커널이 버벅여도 이유를 모른다. 이거 다 하나하나가 엄청난 장점이다. 아마존이나 구글 다 리눅스 쓴다. 

단점은 익숙해지기가 어렵다. 어렸을때부터 윈도우 썼는데, 리눅스 보면 당황한다. 이 자체가 단점이다. 그래서 게임회사에서 리눅스 도입하기 망설이는 이유가 이거다 낯설어서. 게임서버는 GUI를 어차피 안쓰기 때문에 진입장벽 낮은게 좀 낫다. 클라이언트 프로그래머는 아예 다른 별세상의 환경인데 서버 프로그래머는 그래도 비슷하니까 용기를 가지고 해볼수 있다.

개발환경

  • 컴파일러
    • GCC, G++
  • 디버거
    • GDB 
  • Profiling
    • prof, grof
  • 통합개발환경
    • QT Creator, 이클립스 등등.. VS-CODE
  • 매뉴얼
    • man
  • DataBase
    • MySQL, NoSQL

윈도우는 비쥬얼 스튜디오에서 모든게 해결이 된다. 에디터 컴파일러 디버거 다 VS로 한다. 리눅스는 그렇지 않고 개발툴들이 흩어져있다. 컴파일러는 C를 쓰면 GCC C++쓰면 G++. 디버거는 디버거가 따로있다. GDB라고 되게 파워풀하다. VS보다 더 유연하고 확장성이 뛰어나다. 파이썬 스크립트 써서 고차원적인 디버깅도 가능하다. 근데 GUI가 없다. 텍스트 디버깅도 잘 되긴 한다. 성능 측정 도구로는 여기서 prof로 한다. 정확하고 자세하게 할 수 있다. grof는 구글에서 만든 성능 측정 툴이다. 통합개발환경 VS처럼 다 통합해서 할 수 있게 해주는거 있다. 근데 VS랑 다르게 허술한게 있다. 그래도 쓸만하다. 사용하는 사람들도 꽤 있다. MS가 VS-CODE라는 통합 개발환경을 제공했다. VS쓰는거랑 많이 비슷하게 쓸 수 있다. G++가 돌아간다. 지금은 이거가지고 많이 쓰곤한다고 한다. 리눅스를 하면 프로그래머가 다 하나하나 세팅해야지 이렇게 통합개발환경에게 다 믿고 맡기기엔 아직 불안한 마음이 크다. 그래서 직접 사용하는 경우가 많다. 매뉴얼은 man 하고 connect 하면 사용법이 쭉 나온다. VS는 F1누르면 됐는데. 게임서버를 윈도우로 하는데 NoSQL이 필요하면 NoSQL 서버만 리눅스로 돌리는 경우도 많다.

 Windows프로그래밍과의 차이

  • 언어
    • C++ 사용, C++11을 사용할 경우 큰 차이 없음
  • UI
    • Windows프로그래밍 vs X Window프로그래밍
  • Multithread programming 
    • POSIX thread library 사용 => C++11 사용 
  • Network
    • IOCP없음 
    • epoll이나 kqueue를 사용 => boost/asio사용 => C++20 표준 
  • Database
    • Mysql을 많이 사용 
      • www.mysql.org
    • ODBC사용 가능
    • 직접 socket 프로그래밍으로 접속하기도 함. 
    • REDIS같은 NoSQL은 리눅스가 대세 

어떤 차이가 있냐? 언어는 차이가 없다. C C++ 쓰는거 같다. 그래서 일반적인 프로그램은 그냥 쓰면 된다. C++11에 쓰는건 거의 표준으로 들어와서 거의 큰 차이가 없다.

UI는 아예 다르다. 이건 큰 차이가 나는데 우린 클라 프로그래머가 아니니까 상관없다.

멀티스레드 리눅스는 POSIX 스레드 라이브러리를 쓰고. 윈도우는 WIN32에 있는 멀티스레드 API를 써서 큰 차이가 있었지만, C++11이 표준으로 들어가면서 큰 차이가 없어졌다. 실행은 그대로 되는데 몇가지 문제가 있어서 수정할 것들이 있다. 이건 대학원에서 실습하면서 다루는 내용이다. 사소한것들이다. 거의 그대로 쓸 수 있다.

네트워크도 큰 차이가 있다. MS가 개발한 IOCP가 특허를 내서 리눅스에는 IOCP가 없다. 그래도 EPoll같은걸로 비슷하게 할 수 있다. 이건 리액터 기반이고 iocp는 프로액터 기반이다. 그래서 완전 같지는 않다. IOCP 프로그램은 새로 작성을 했어야 했다 예전엔, 근데 지금 boost/asio 쓰면 window랑 똑같이 대용량 다중접속이 된다. 그래서 윈도우에서 이걸 쓰면 내부적으로 IOCP를 부르게 되어있고, 리눅스에서 쓰면 내부적으로 epoll을 쓰게 되어있다. 그래서 성능 문제 없이 쓸 수 있다. 이걸 사용하다 버릇 하면 윈도우에서 게임서버 만들어도 IOCP를 안쓰고 Boost/asio 쓰는 경우가 있다. 이거는 수업시간에 한번 다뤄볼거다. 이거 뜬금없는게 아니라 c++20에 표준이 되었다. 

데이터베이스는 mysql 많이 쓴다. 윈도우는 mssql 많이 썼다고 했다. ODBC도 사용가능한데 직접 소켓 프로그래밍도 가능하다. 

EPoll

epoll 은 변경기준감지(Edge Triggered) 또는 상태기준감지(Level Triggered) 인터페이스 양쪽 모두를 사용할 수 있도록 하여 많은 수의 fds를 감시할 수 있도록 확장시킨 poll(2) 의 변형이다. epoll 기능에 대한 설정 및 제어를 위해 다음과 같은 3가지 시스템 함수가 제공된다 : epoll_create(2), epoll_ctl(2), epoll_wait(2). 화일 지시자와 연결하기위한 epoll 집합은 epoll_create(2) 로 생성할 수 있다. 그런다음 특정 화일 지시자를 epoll_ctl(2) 을 통하여 등록할 수 있다. 마지막으로 epoll_wait(2) 을 사용하여 (등록한 화일 지시자의 이벤트에 대한) 대기처리를 시작할 수 있다.

epoll로 하면 얘가 지금 완료했다고 찝어준다. 검색없이 다중접속 소켓을 감시할 수 있다. overlapped io랑 비슷하다. 근데 이벤트같은 이상한거 없고 3개의 API로 깔끔하게 할 수 있다.

LINUX 실습

SSH를 통한 접속

  • windows에서 Linux 서버로 접속
  • SSH 클라이언트 필요
    • Putty.exe
    • http://www.putty.org/
  • 주소 및 계정
    • 210.93.61.41 (SSH 로 접속)
    • gameserver/게임서버

윈도우 게임서버를 쓰면 게임서버 컴퓨터에 접근할때 뭘로 하냐면, 원격 데스크탑으로 연결한다. 그래서 주소를 호출하면 멀리 있는 컴퓨터가 연결이 된다. 그럼 사용할 수 있다. 게임서버 컴퓨터는 책상 옆에 있는게 아니라 멀리 IDC에 있다. 같은 건물에 있지도 않다. 차 타고 가서 설치하는게 아니라 이 원격 데스크톱으로 하는거다. 리눅스는 이렇게 안한다. 이건 GUI다. 멀리 떨어지면 느리다. 그리고 게임서버로 하기엔 답답하다. 게임서버를 리눅스로 하고싶다면 http://www.putty.org/ 들어가서 설치하면 된다.

리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom
리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom
리눅스가 윈도우 보다 좋은 점 - linugseuga windou boda joh-eun jeom

이 컴퓨터는 대학원 실습용으로 학과에서 지원받아서 산 1500만원 짜리 컴퓨터다. 게임 서버 실습용으로 산거라 코어가 64개나 있다. 4개의 cpu에 코어가 8개씩이다. 그럼 32갠데 왜 64개냐면 하이퍼스레드까지 해서 64개다. 8코어 cpu 제온을 4개 넣은거다. 왜 우린 안썼냐? 리눅스 설치되어있어서 못쓴다. 대학원생이 대학원에서 고급 멀티스레드 프로그래밍 실습 할 때 쓰는거다. 실제 게임회사도 마찬가지다. 이렇게 접속한다. 이것보다 좋은 방법 있지만, 이걸로 충분해서 이렇게 한다. 

간단한 명령어들

  • 디렉토리 탐색 : ls
  • 디렉토리 : cd, mkdir, rmdir
    • 디렉토리 구분은 ‘/’로한다. windows에서는 ‘\’
  • 파일 조작 : mv, cp
  • 파일 내용 보기 : cat 

폴더를 어떻게 왔다갔다 하고 폴더에 뭐있는지 어떻게 아냐. 이런 명령어들로 알 수 있다. 폴더라는 이름은 ms가 만든거고 리눅스에서는 디렉토리라고 한다. 원래 디렉토리가 원래 이름이다. 

에디팅

  • VI (Visual Editor) 
    • Insert mode, cursor mode
    • ‘i’ + text + ‘esc’
    • ‘hjkl’ for cursor key
    • ‘x’ for delete, ‘dd’ for delete line
    • 저장 및 종료 ‘zz’ 
    • color 처리 (:syntax off)
  • ‘Hello World’ 작성 (각자 자기 디렉토리 작성 후 거기서) 
#include <iostream> 
int main() { std::cout << “hello world!\n”; }

텍스트모드 커서모드가 있어서 텍스트 모드로 바꾸고 써야한다.

컴파일링

  • G++
    • ANSI C++ 표준
    • 'g++ hello.cc'
  • 실행
    • './a.out'

디버깅

  • 컴파일
    • g++ -o hello -g hello.cc
  • 디버깅 
    • gdb hello
  • 커맨드
    • list, break, step, start(run), cont

이런게 다 처음엔 진입장벽이 있어서 개발 디버깅은 다 VS에서 하고 실행만 리눅스에서 하는 방식으로도 많이 쓴다. 100% 완벽하게 호환되진 않는다 VS에서는 long 32비튼데, 리눅스는 64비트다. 표준을 100% 구현한거 아니다. 그래서 웬만한건 다 되는데 사소한것들이 안되니까 조금씩 수정해야한다. 상용 게임서버들도 그렇게 많이 쓴다.