-
Ducktopia - <25> TOP NEW
게임 플레이 테스트 Health Check 오류 기존 Gateway가 1개의 서버로 돌아갔을땐 문제가 없었으나, 이제 Gateway가 다중화 되면서 문제가 생기기 시작했다! 바로 특정 Gateway의 HealthCheck에 오류가 생겨 Lobby 나 Game 서버와의 접속을 끊어버린 다는 것이다! 오류가 난 상황과 이유를 대략적인 가설로 설명을 해보자면 (위는 중간 확인을 위한 console.log 이다) this.intervals.push(setInterval(this.healthCheck, 5000)); healthCheck = async () => { // stack 증감 c... Read More
-
Ducktopia - <24> TOP NEW
AWS ECS 어제 제대로 정리하지 못한 정보들을 정리해두려 한다 ECR 일단 ECS에서 실행될 “서비스”를 가동하기 위해선 Task라는 컨테이너 실행 단위를 정의 해주어야 한다! 그럼 컨테이너 실행 단위를 정의하기 위해 컨테이너를 만들 Image를 불러와야 하는데.. -> 이 때 사용되는 것이 ECR(Elastic Container Registry) 이다! ECR에 리포지토리를 생성해준다 ECR에 Docker Image 파일을 빌드해주려면 AWS CLI 를 설치해야한다! AWS CLI 를 설치 후, PowerShell에서... Read More
-
Ducktopia - <23> TOP NEW
Gateway 로드밸런싱 AWS ECS 세팅 저번에 만든 Docker Image를 통해 ECS 세팅을 마치고 NLB에 연결해줄 예정이다! ECS(Elastic Container Service) AWS CLI을 깔고 IAM에 사용자를 생성하여 엑세스 키를 생성해주고… AWS CLI를 이용해 Docker Image를 생성 후 ECR에 넣어준다! # aws IAM id 접속하기 aws configure # 이후에 Access key / 보안 키 / 지역 을 차례대로 입력해준다 ECS 클러스터를 생성해 서비스를 생성.. 하기전에 Task 정... Read More
-
Ducktopia - <22> TOP NEW
Gateway 로드밸런싱 Gateway Redis 동기화 이제 Gateway 서버에 로드 밸런스 + 오토 스케일 아웃 기능을 추가하기 위해 전체 게임에 접속한 유저들을 단일 서버 기록에서 Redis로 Gateway 공통 정보로 승격시켜준다! 기존 로그인 핸들러 확인 // 4. 중복 로그인 유저 세션에서 체크 << User.id (key) 를 이용한 Redis sortedSet 사용 const existingUser = await userSession.checkId(userData.id); if (!existingUser) { throw new Custom... Read More
-
Ducktopia - <21> TOP NEW
추가 작업 현재 기획상에서 허니 머스타드라는 아이템이 중앙 코어에서 생성할 수 있고, 이를 무기에 발라야 보스에 데미지가 들어가는 것이 있다! 서버에서 보스 데미지 계산과 허니 머스타드 조합 기능을 기존에 있던 코드들을 개량해서 추가할 예정이다! 기존의 무기 조합 핸들러를 응용 // 만약 조합아이템 중 하나가 머스타드이면 if ( config.game.item.mustardItemCode === itemCode1 || config.game.item.mustardItemCode === itemCode2 ) { // '1xx' = ... Read More
-
Ducktopia - < Project interview > TOP NEW
모의 면접 오늘은 프로젝트 진행과 지금까지 배웠던 사항들에 대해 모의로 면접을 보는 날이였다! 주요 질문 TCP/IP 통신 시 일어나는 과정을 구체적으로 설명해주세요(= 현 프로젝트가 TCP 통신 서버임 ) 서버가 느리다 라는 말을 들었을 때 어떻게 해결할 건가요?(= 게임 서버의 기본적인 트러블슈팅) 분산 서버의 이점과 주의사항을 설명해주세요. (= 현재 프로젝트에 분산 서버를 사용한 이유) Node.js 를 이용해 게임서버를 만들면 어떠한 장점과 단점이 있나요? (= 서버로 Node.js를 사용한 이유) 추가 조사 주요 질문들에... Read More
-
Ducktopia - <20> TOP NEW
추가 작업 파괴 가능한 오브젝트의 설치 및 종류들을 만드는 작업을 맡게되었다. 설치 기본적으로 파괴 가능한 오브젝트를 벽 이라고 정해두어 기존에 있는 base를 상속받아 생성해준다 import DestructibleObjectBase from '../base/destructibleObjectBase.class.js'; import { getGameAssets } from '../../init/assets.js'; class Wall extends DestructibleObjectBase { const { objectDropTable }= getGameAssets() constr... Read More
-
이론 정리 - < ETC > TOP NEW
좋은 코드 코드의 효율성으로만 따지자면 컴퓨터가 최소한의 처리를 할 수 있는 컴퓨터 친화적으로 최적화된 코드가 좋다고 생각이되지만.. 코드의 활용성/범용성을 생각해보면 이 코드를 언제 누구든 수정할 수 있게 만드는 가독성도 중요하다고 생각이 된다 요약하자면 코드가 완성형이라는 가정이라면 최적화된 코드가 최고지만, 현실은 언제나 그럴 수 없기에 업무효율성을 생각한 가독성/유지보수성이 좋은 코드가 베스트라고 생각한다! 이러한 가독성/유지보수성을 올리기 위해선 프로젝트의 전체 흐름을 파악해 범용성을 늘리고, 함수나 변수명이 직관적으로 이해될 수 있을 정도의 이름으로 정해주고, 주석을 간결화해서 전체적 흐름을 한 눈... Read More