을 읽고 있음.
이 책을 왜 읽게 되었냐면...
예전에 그런 경험이 있다.
io게임이 쏟아져나올 시절 나라고 못만들겠냐하고 덤벼봤었다. 유니티 사용법을 공식 튜토리얼보고 대강 익힌 후 였는데 자바로 소켓 채팅도 만들어봤겠다, io게임 정도야 쉬울 줄 알았다.
당연히 네트워크에 대한 지식은 거의 없었는데, 알고 있던 것을 그냥 나열해보자면, 바이트로 주고 받아야하고 소켓 관련된거 써야하고 비동기적으로 되야하고(혹은 멀티스레드) 등등 이었다.
일단 c# 콘솔창으로 데디케이트 서버를 만들고, 유니티로 클라이언트를 구성해볼 생각이었다. 서버에 접속될 경우 클라이언트에서 게임오브젝트 생성해주고 움직이면 서버에 패킷보내서 서버에서 로그찍고 그런것까진 했다.
여기까진 채팅앱이랑 다를게 없었다고 생각했음...
근데 다수의 클라이언트가 접속할때 테스트를 해보니 문제가 한두가지가 아니였다. 일단 다른 유저가 접속했을때 그 유저의 상태정보를 받아 게임오브젝트를 생성해야한다. 그리고 서버가 주기적으로 상태 변화를 체크해 클라이언트에 전달하고, 클라이언트는 그 값으로 화면 업데이트를 해줘야 했다.
해결책으로 패킷을 몇밀리세컨드 간격으로 보내줬다. 헤더에 패킷 타입, 길이 넣어주고 타입에 따라 처리를 다르게 해주고 그랬던 기억이 난다. 어디서 주워들은건 있어서 나름 이렇게 했었는데 문제는 하드코딩되있어서 바이트 배열에 직접 인덱스 몇번부터 몇길이만큼 넣어주고 그랬다... 이거때문에 패킷 구조를 좀만 바꿔도 되게 힘들었음....... 아무튼 대충 접속과 이동은 해결됐었다.
그러나 또 다른 문제가 생겼는데 움직임이 부드럽지 않았다. 그리고 클라이언트 간 동기화도 형편없었다. 움직임이야 검색해보고 해결할 수 있었겠지만 동기화는 구글에검색해서 될 수준의 문제가 아니였다.
이쯤되니 여러가지 문제가 겹치면서, 내 지금의 지식 수준으론 도저히 완성을 할 수 없겠다는 생각이 들었다. 그래서 체계적인 지식 습득이 필요하다고 느꼈다. 구글에 검색해봐야 결과물에 대한 검색을 또 해야하고 또 검색하고 해야하는데 내가 뭘 몰라서 뭘 검색해봐야 원하는 답이 나오는지 모르는 상황이었다.
그래서 이 책을 샀다.
처음엔 네트워크 프로토콜이나 계층에 대한 설명이 나와서 의아했는데, 이걸 알고 있어야 응용프로그램단에서도 원리를 이해할 수 있고 비슷한 방법으로 문제를 해결 할수도 있겠다는 생각이 읽으면서 차츰 들기 시작했다.
지금 절반정도 읽었는데, 내용 자체는 생각보다 별거없구나싶기도 하다. 그런데 예제에 나와 있는 구현 방법이 예술이다. 혼자 하려면 절대 못했을듯한, 무수히 많은 시간을 쏟아부어야 깨달았을법한 그런 코드였다.
좋은 책이다. 지금은 멀티플레이어게임을 만들고 싶다는 생각은 없지만 몇달뒤에 다시 도전해볼 생각이다. 예전에 삽질하면서 부딪혔던 점들이 속시원히 해결되었다는 점에서 마음에 든다.
그리고 난 아직 부족하다는 점... 오히려 부족해서 채우는 재미가 있다는게 다행이라면 다행이다.
728x90
728x90