전체 글
오늘 한 것
- 개인 프로젝트 진행
- 캐릭터 움직임 부드럽게 처리 관련 자료 리서칭
- 다중 클라이언트 실행 관련 코드 추가
배운 것
- 게임 서버 개발자를 지원하고 있어서 캐릭터 움직임 처리와 같은 것에 너무 관심이 적었던 것 같습니다.
- 캐릭터가 부드럽게 움직이도록 처리 하는 것에 대한 고민
- 게임 서버 개발자도 해당 로직에 대해서 이해하고 적용할 수 있어야 한다는 것을 알게 되었습니다.
느낀 점
- 조금 느리더라도 코드를 작성하면서 배우고 한 사이클을 돌려보자는 마인드로 해보자.
오늘 한 것
- 개인 프로젝트 진행
- 게임 씬 벽, 바닥, 케릭터 추가
- 케릭터 움직임 기능 구현
- 팀 프로젝트 마무리
배운 것
- 배운 것들이 있어도 기억이 안나는게 상당히 많다는 것을 알게되었습니다.
- 게임 씬을 만들 때 바닥을 타일로 만들어서 구현했습니다.
- 케릭터의 움직임을 어떤 방식으로 구현하고 상태를 관리할 것인지에 대해 고민했습니다.
- 게임 서버와 통신을 하기 위해 어떤 방식으로 구현하는게 좋을지에 대한 고민
느낀 점
- 클라이언트와 서버를 다시 구현해보면서 기초적인 부분도 모르는게 아직 많다는 것을 다시 느끼게 되었습니다.
- 처음부터 다시 만들어보면서 복기를 하고 차근차근 포트폴리오를 만들어야 겠다고 생각했습니다.
오늘 한 것
- 팀 프로젝트 진행
- 우분투 개발 환경 재설치
- Entity Framework core 재설치
- MySQL 재설치
- Dotnet core cli 재설치
- DB 설계
- 팀 프로젝트 관련 회의
배운 것
- 게임에서 필요한 데이터에 대해 고민해보고 DB를 설계해봤습니다.
- 게임을 직접 플레이 해본 경험이 많아야 DB 설계에 도움이 될 것 같다고 생각했습니다.
느낀 점
- .배운 것을 기술 블로그에 하나씩 작성해보자.
- 우선 초안을 작성해서 올리고 꾸준히 살을 붙이는 방식으로 진행해보자.
오늘 한 것
- 팀 프로젝트 진행
- 우분투 개발 환경 재설치
- Entity Framework core 재설치
- MySQL 재설치
- Dotnet core cli 재설치
- DB 설계
- 팀 프로젝트 관련 회의
배운 것
- 게임에서 필요한 데이터에 대해 고민해보고 DB를 설계해봤습니다.
- 게임을 직접 플레이 해본 경험이 많아야 DB 설계에 도움이 될 것 같다고 생각했습니다.
느낀 점
- .배운 것을 기술 블로그에 하나씩 작성해보자.
- 우선 초안을 작성해서 올리고 꾸준히 살을 붙이는 방식으로 진행해보자.
오늘 한 것
- 팀 프로젝트 진행
- 유령 세션 Disconnect 처리 / Ping Pong 시스템
- Swagger 세팅
- 팀 프로젝트 관련 회의
배운 것
- 모바일 기기 비정상적으로 종료한 유저 처리
- ex) 모바일 데이터 끊기, 와이파이 종료, 엘리베이터에서 끊기는 현상 등
- 악의적이던 환경에 의해 끊기던 둘 다 유령 세션이 되는 문제가 있었습니다.
- 클라이언트에게 메시지 내용이 없는 패킷을 서버에서 보내고, => Ping
클라이언트는 응답을 받았다는 의사로 빈 패킷을 서버에 보냅니다. => Pong
- Tick 타이머를 사용해서 응답이 온 시간을 체크합니다.
- 응답이 없거나 지연되면 Disconnect 합니다.
느낀 점
- 슬슬 기술 블로그에 배운 것을 하나씩 적어야 겠다고 생각했습니다.
- 단순히 구현하고 끝나는게 아니라, 설명할 수 있는 수준까지 끓어올리기
- 블로그를 작성하면서 회고하고 개선할 점들을 정리해보기
오늘 한 것
- 팀 프로젝트 중간 발표
- 팀 프로젝트 관련 회의
- 튜터님이 주신 피드백 종합 및 개선점 찾기
배운 것
- 유명한 서버 강의를 듣고 코드를 가져와 만들었는데, 어떻게 차별점을 만들어서 어필할 것인지에 대해 고민했습니다.
- 우선 강의에 있는 코드를 가져와 구현을 하고 개선할 점이나 구조적으로 변경 할 것들을 생각하기로 했습니다.
- 해당 내용은 어느정도 인지를 하고 있었고, Server Core 부분의 코드를 하나씩 뜯어 고칠 예정이였습니다.
- Array.Copy를 사용하는 부분을 성능을 위해 Buffer.BlockCopy를 사용하는 식으로 개선하고 있습니다.
- 오브젝트에 대해서 동시성 이슈는 어떻게 처리할 것인지에 대한 고민
- 파밍 박스에 아이템을 동시에 줏을려고 했을 때 발생하는 동시성 이슈에 대해서 말씀해주셨습니다.
- 한 명만 파밍 박스를 열 수 있도록 처리하는 것을 생각했습니다.
- 우선은 파밍 박스가 제대로 스폰 되는 것부터 구현되어야 한다고 생각합니다.
느낀 점
- 개선할 점들이 엄청 많은데 하나씩 해나가야 겠다고 생각했습니다.
- 너무 큰 것부터 바라보지 말고 지금 할 수 있는 것부터 하나씩 해결해 나갈 예정입니다.
- 부족한 점이 상당히 많다는 것을 알게 되었습니다.
- 그만큼 배울게 많다고 생각해서 오히려 좋다고 생각하고 있습니다.
오늘 한 것
- 팀 프로젝트 진행
- 팀 프로젝트 발표 준비
- 노션 페이지 작성
- 시연 영상 촬영
- 배포, 유저 테스트 일 픽스
- 팀 프로젝트 관련 회의
배운 것
- 발표를 준비하면서 다시 회고를 하는 좋은 시간이였습니다.
- 준비를 하면서 어떤 부분이 부족한 것인지에 대해서 알게 되었습니다.
- 생각했던 것보다 시간이 부족하고 해야 할 것들이 많이 남아있었습니다.
- 기획 단계에서 욕심이 너무 많았던 것 같습니다.
느낀 점
- 시간이 엄청 빠르게 가는 것 같습니다.
- 벌써 중간이나 와버렸습니다. 다음주 월요일이면 중간 발표입니다.
- 중간 발표 후 다시 마음을 잡고 구현해야 할 부분들을 하나씩 채워나갈 예정입니다.
오늘 한 것
- 팀 프로젝트 진행
- 팀 프로젝트 관련 회의
- 내일 기획 멘토링 관련 준비
배운 것
- 패킷에 담는 데이터를 필요한 데이터만 담도록 설계하자
- 패킷의 용량(bytes)가 클 수록 처리해야 하는 양이 늘어나면서 패킷 처리 지연 시간이 발생 할 수 있다.
- 퀘이크라는 FPS 게임은 30bytes의 패킷을 초당 10 ~ 20 개를 처리한다고 한다.
- 패킷을 수정 시 꽤 많은 것들을 변경해야 하는 문제점이 있다.
- 클라이언트와 서버 둘 다 패킷을 변경 시 수정해야 할 소요가 꽤 되는 것이 문제다.
느낀 점
- 게임 서버의 성능을 고려하기 위해 새로운 기술을 도입하는 것도 방법이지만,
패킷 설계 단계에서부터 미리 준비를 하는 방법도 있다는 것을 알게되었습니다.
- 레디스와 같은 것을 사용해 캐싱을 하는 것도 방법이지만,
설계 단계에서 처리와 무분별한 객체 생성을 막는 것도 성능에 도움이 된다는 것을 알게되었습니다.
오늘 한 것
- 팀 프로젝트 진행
- 팀 프로젝트 관련 회의
- 내일 기획 멘토링 관련 준비
배운 것
- 클라이언트와 서버가 주고 받는 패킷에 대해서 고민하고 다시 정의
- 수정한 패킷을 적용하면서 패킷 설계가 어떤 부분이 부족한지 고민
- 하나의 패킷에 너무 많은 정보를 담으면 수정할 때 소요가 많아지는 것
- 하나의 패킷에 담을 데이터가 많아지면 발생할 문제
- 만약에 많은 정보를 담을 수 있는 패킷 중에 반영할 데이터가 적다면?
- 결국에 사이즈가 큰 패킷 자체를 전송하게 되서 성능적으로도 문제가 있지 않을까?
느낀 점
- 멀티플레이 게임에서 고민해야 할 것들이 상당히 많다.
- 고민한 부분의 완벽한 해법을 고민하기 보다는 구현을 하면서 테스트 해보자.
- 머리로만 고민을 하고 직접 구현해보지 않는다면 결국 그 자리에 머누는 것 같다.
- 생각보다 내가 고민한 부분이 아니라 전혀 다른 곳에서 문제가 발생할 수 있다.