분류 전체보기
드로우콜을 낮춰보자
코코스 기반의 엔진에서,드로우콜을 낮추기 위해 몇 가지 개념을 정리하며 문서화 해 보았습니다.렌더레이어(렌더텍스처) 와, 아틀라스, 배치 렌더링에 대해 간단한 개념을 소개하는 가벼운 글입니다!
네트워크 패킷 맛보기
친구들과 종종 세미나를 준비하는데,이 세미나를 준비할 때는 퍼블리셔 인프라에서 문제를 찾는 과정이 너무나 고된 작업이었어서네트워크 레벨에서의 문제 찾기에 푹 빠졌던 것 같다.이 때 간략하게 만들어 본 PPT를 공유합니다..!
MySQL 통신 패킷 확인하기
이번에 게임 서버와 MySQL 통신 간 패킷을 확인해볼 일이 생겼다.분명 사내에서 구축한 인프라 세팅대로면, 문제 없이 동작하는 게임 서버와 MySQL DB인데,퍼블리셔에서 구축하셨을 때에는 게임서버에서 유저 접속 처리가 안되는 문제가 보고되었다.문제는... 이런 증상에 대한 원인을 찾기 위해서는, 범위를 줄여 나가야 한다는 점인데,그게 생각보다 협조가 쉽지 않을때가 많다. 요청을 보내고 받고 해야 해서 속도도 느리고.퍼블리셔 인프라팀에서 물론 기본적인 네트워크 설정 테스트는 진행해 주셨지만,(게임서버와 MySQL DB서버간 통신 및 쿼리 테스트)MySQL DB가 응답을 어떻게 주었는지, 이걸 게임서버가 해석해서 다음 쿼리를 보냈는지,이것저것 알고 싶어서 패킷 캡쳐를 요청드렸다.이번 기회에 MySQL의 ..
Rust mmo 게임 서버
https://github.com/gamegongDE/rusty-ws-server이번에 작은 게임 프로젝트를 진행하게 되었는데,브롤스타즈와 비슷한 모바일 게임을 만들어나가게 되었다.얼마 전에 접한 Rust로 코딩하는게 너무 경험이 좋았어서,이번에 게임 서버 또한 Rust로 코딩을 해 보았다.게임 서버같은 경우 C++로 짰다면 런타임 에러의 두려움이 꽤 컸을 텐데,Rust로 짜게 되니, 컴파일까지의 과정이 좀 어려워지기는 했지만..그런 런타임 두려움은 싹 사라져서 너무나 좋았다.tokio라고 가장 유명한 비동기 io 프레임워크가 있기에,해당 기능이 기반인 웹소켓 멀티스레드 게임서버이다.웹소켓 기반이기에, 살짝 성능이 아쉬울 수는 있지만메시지 직렬화와 역직렬화를 msgpack을 사용할 수도 있고로직 스레드 ..
리눅스마스터 1급 이야기
리눅스마스터 1급 이야기리눅스마스터 1급.리눅스마스터 2급을 딴 이래로..1급에 도전해서 결국 따 냈다.회사 취업하고 나서도, 내 취미 중 하나인자격증 따기를 잃지 않기 위해 노력했고,PC정비사 1급은 난이도가 꽤 낮아서 (기출위주라)뿌듯함이 크지는 않았지만,결국 리눅스마스터도 1급을 따 냈다.이제 내 이력서에 2급, 2종 은 전혀 없다!!!시험을 신청을 세 번을 했지만..분명 시험날짜 일주일 전에 취소하면 환불되지만..두번다 전날까지 공부 설렁설렁 하다가 고민하고 그냥 시험을 안 봤다..그래서 무려 거의 15만원을 ihd에 기부했다 ;ㅅ;이렇게 기부하고 나니까 세 번째 도전에서는 이악물고 공부하게 되더라.HOW필기리눅스에 대한 공부는 교재를 통해서 했다.필기는 정말 확실하게,이 책이 정말 바이블이다.문..
취업한지 1년, 프로카데미 회고.
이전 글이 무려,6개월이 지나고 쓰는, 프로카데미 이야기 — 불여우의 전직 이야기 (tistory.com) 6개월이 지나고 쓰는, 프로카데미 이야기6개월이 지나고 쓰는, 프로카데미 이야기 프로카데미. 서울 송파구에 위치한, 사실 우리나라에 유일한 '게임 서버 전문' 아카데미. 게임 클라이언트와 서버 개발자의 차이 만큼이라고 해야 할까.hotfoxy.tistory.com이 글이었다..내 블로그의 '프로카데미' 라는 카테고리의 마무리를 이 글로 짓고자 한다.이 때만 하더라도 무리 없이 프로카데미 졸업 하고,바로 취업전선에 투입되겠지? 생각했던것 같다.하지만 결국 나는, 프로카데미를 끝까지 다니지는 않았다.레벨 테스트를 못 봐서 잘린거는 물론 아니지만,끝까지 졸업까지 안 하고 나왔기에 같은 급으로 봐도 변명할..
MySQL "Not Supported" 에러와 handshake
mysql 서버에 접속하려고 할 때, Not Supported 라는 메시지와 함께 연결 오류가 발생했다.에러 발생 위치가 명확했고, 코드도 간결했기에, 원인을 파악하기는 쉬웠다./src/auth.ts | mysql@v2.7.0 | Deno위 코드 블럭을 살펴 보면, auth plugin이 mysql_native_password가 아니라서 발생한 문제라는 것을 알 수 있다.이 인증 타입은 처음 보는 개념이라, 가볍게 살펴본 결과,mysql_native_password 에서, cache_sha2_password 로 넘어가는 추세로 보인다.mysql 8.0부터는 default가 cache_sha2_password 라고 한다.사용중인 저 deno mysql library 도 버전을 올리면, cache_sha2_..
클라이언트 IP를 '잘' 가져오자
요즘은 너무나도 당연히 대부분의 사용자 기기가 공유기 뒤에 숨어있듯이, 서버 또한 로드밸런서 뒤에 숨어있는 것이 너무나도 당연한 구조가 되었다. 이제 서버 개발자는 하나의 고민을 더 하게 된다. 예전에는 p2p 통신을 위해 홀펀칭을 고민하고 릴레이를 해주어야 했다면, 이제는 클라이언트 IP를 가져오기 위해 고민을 해야 할 차례가 되었다. 우리가 얻을 수 있는 클라이언트 IP는, 해당 클라이언트가 숨어있는 라우터 공유기의 공인 IP이다. 하지만 그 정보 또한, 프록시와 로드밸런서가 가득한 네트워크 세상에서 어떻게 가져와야 할지 고민해봤다. 사실 맨 처음에는 도커 서비스에서 client addr을 가져오니 도커 브릿지 ip가 찍히는 것이 문제였다. 그래서 docker network_mode를 host로 놓아..