Study/끄적끄적 7

클라이언트 변조와 서버 의존성

멀티 대전게임에서 다음 작업에 앞서 고민할 일이 생겼다.로직은 다음과 같다. 1. 서버에서 힐팩 생성을 클라이언트에 전송한다.2. 클라이언트에서 힐팩을 생성한다.3. 유저가 힐팩을 먹고 서버에 전송한다.4. 5초 후 힐팩을 재생성한다. 힐팩 재생성 과정에서는 두 가지 선택지가 있다.1. 서버에서 5초후 생성하라고 즉시 클라이언트에 전송한다.2. 서버에서 즉시 생성하라고 5초 후 클라이언트에 전송한다. 1번은 클라이언트 의존성이 더 높아 이후 클라이언트 변조, 해킹에 대한 우려가 있다.2번은 서버의 리소스가 더 증가하지만 비교적 안전한 게임을 만들 수 있다. 2년간 웹서버 개발자로 일하면서 클라이언트는 절대 신뢰하지 말라는 CTO님의 가르침이 있었다.클라이언트는 서버에서 받은 결과만 뿌려주는 역할이라고 하..

Study/끄적끄적 2024.09.06

Protobuf send 전 size 체크

게임룸에 입장한 유저들에게 브로드캐스팅한다.만약 players의 size가 0이면 전송을 하지 않을줄 알았다.// Send all players in room to new playermap* players = GRoom.GetPlayersInRoom();for (const auto& pair : *players){ const PlayerRef _player = pair.second; Protocol::Player* repeatedPlayer = pkt.add_players(); repeatedPlayer->set_id(_player->GetPlayerId()); repeatedPlayer->set_accountid(_player->GetAccountId()); repeatedP..

Study/끄적끄적 2024.09.05

ORM 없이 DB 접속하기

C++ 컴파일러 버전 13.1.0을 사용하고 있다. 게임서버를 구성하던 중, 빠르게 작업물을 만들어 내기 위해 RawQuery로 먼저 작성하고 추후에 ORM으로 변경할 예정이었다. 근데 쿼리에 변수를 삽입하는 과정에서 생각지 못한 문제가 발생했다. - 컴파일러 버전이 낮아 최신 문법을 사용하여 간결하게 처리할 수 없음- 억지로 문자열을 연결하려니 SQLInjection 문제가 떠오름- 과도한 template 사용으로 코드가 지저분해짐 일단 해결한 방법으로는, 쿼리문은 unsigned int 타입의 id나 DATETIME 타입의 createdAt 이라도 문자열로 해석할 수 있으니 문자열 변수로 처리했다.생각 없이 ${} 보간법을 사용하던 javascript가 왜 접근성이 좋았는지 새삼 느끼게 됐다.빨리 O..

Study/끄적끄적 2024.09.02

DB) database 셋팅을 맞추다 정리한 것들 (Code Convention)

결론은 취향차이. 회사의 프로젝트를, 사수의 취향을 따라가는게 편하다. 1. Table name style Uppercase, Lowercase, Underscore, Camelcase, Pascalcase, Hungarian notation, Prefix 취향차이. USERINFO / userinfo / user_info / userInfo / UserInfo / uInfo / U_Info 2. Database table name singular or plural 취향차이. Table은 데이터를 감싸는 Container라서 과반수 이상(51%로 책정...) 단수를 사용한다고함. 3. Column name singular or plural 단일 데이터 - 단수 List, JSON - 복수 4. Index..

Study/끄적끄적 2022.12.16
1