-
Ducktopia - <15> TOP NEW
분산 서버 이제 Gateway 서버에서 동적으로 서버주소를 받아와 연결해주고 관리할 수 있도록 구현하였다! 남은일은 Health Check를 통해 게임서버에 로드밸런싱하는 로직을 추가 구현해주고, 게임이 끝난 시점을 Redis를 이용해 공유하도록 구조를 재설계해줄 예정이다! Health Check Gateway 서버에서 Redis를 이용해 서버마다 Health Check를 개별로 진행될 수 있도록 Server Class를 만들었다! class Server { constructor(serverId, socket) { this.socket = socket; this.socket.id = ser... Read More
-
이론 정리 - < 알고리즘 > TOP NEW
Big-O Big-O 표기법은 알고리즘의 시간 복잡도와 공간 복잡도를 표현하는 수학적 표기법으로, 알고리즘이 입력크기에 따라 얼마나 빠르게 실행되는지(시간 복잡도) 및 얼마나 많은 메모리를 사용하는지(공간 복잡도)를 나타낸다! -> 이를 통해 여러 알고리즘의 효율성 분석하고 비교할 수 있다! Big-O의 주 개념 시간 복잡도(Time Complexity): 알고리즘이 실행되는 데 걸리는 시간을 입력 크기의 함수로 표현 예: O(n), O(n²), O(log n) 등. 공간 복잡도(Space Complexity): 알고리즘이 실행되는 데 필요한 메모리 공간을 입력 ... Read More
-
Ducktopia - <14> TOP NEW
분산 서버 저번에 남아있던 문제는 패킷 분할 시, onData에서 while이 무한루프도는 오류였고, 이를 해결완료하여 오늘부터는 로드 밸런싱 조사 및 사용을 실질적으로 시작한다! 로드 밸런싱 ELB와 EC2 + AMI(Amazon Machine Image) / ECS + Docker 를 이용한 게이트웨이 Auto Scaling 방식은 부하 테스트 이후 하나의 해결방안으로 두고, 일단 기본적인 로드 밸런싱으로 게이트 웨이에서 게임서버로 보내주는 로직을 구현해준다! Redis 서버 동기화 현재는 게이트웨이 서버에서 로비서버와 게임서버의 주소를 상수로 정해주어 연결하고있는데, 이 방식을 동적으로 만들기 위해 ... Read More
-
Ducktopia - <13> TOP NEW
분산 서버 서버 분리 마무리 작업 현재 서버들을 각 기능에 맞게 분리가 되어 클라이언트를 이용해 테스트해본 결과 잘 작동한다! 그러나 유저가 게임을 떠나면 Gateway에서만 끊긴 것이 적용되기 때문에 이를 다른 서버에서도 인식할 수 있도록 조정해야한다! 게임 서버 게임 삭제 게임이 끝나면 게임서버에선 관련된 세션들을 삭제해줘야 한다! 그렇기에 게임오버를 보내는 곳에서 일괄적으로 삭제해주는 로직을 추가해준다 // 게임 오버 로직 내부 if (coreHp <= 0) { console.log(`코어가 파괴되었습니다. HP: ${coreHp}`); const gameOverPayload = {}; ... Read More
-
Ducktopia - <12> TOP NEW
분산 서버 구현 어제 마무리한 Gateway 서버와 연결될 로비와 게임서버 구조를 변경해준다! ( 사실 로비 서버는 로직 자체가 적기 때문에 금방 끝나버렸다) 게임 서버 현재 로비서버에서 호트스가 게임 시작을 누르면 Gateway 서버가 게임 서버에게 게임 정보를 전달해준다! 이를 이용해 게임 서버는 유저들을 포함한 게임을 생성하고 게임로직을 실행해준다. const createGameHandler = ({ socket, payload, userId }) => { const { room } = payload; if (!room) throw new CustomError('유효하지않는 요청입니다.')... Read More
-
Ducktopia - <11> TOP NEW
분산 서버 구현 어제 기획을 마친 도식화를 토대로 게이트웨이 서버를 만들어주기 시작하였다! Gateway 서버 구조 이제 클라이언트와 Gateway 서버를 제외한 다른 서버(로비, 게임)와는 저번에 말햇듯이 무상태(Stateless) 가 되어 Gateway 가 클라이언트에게 받은 패킷을 다른서버로 줄때 UserId를 넣어 유저들을 구분할 수 있도록, 서버끼리의 패킷 구조를 아래와 같이 추가하였다! 이 때 문득 “서버간 UserId를 주고받으려면, 다른 서버에게 주려는 유저는 무조건 로그인이 되어 있어야 하지 않나..?” 라고 생각이 들어 Gateway 서버에 로그인/회원가입 기능을 병합해도 괜찮은가 조... Read More
-
Ducktopia - <10> TOP NEW
-
Ducktopia - <9> TOP NEW
디버거의 삶 코드를 빠르게 해석하고 오류를 찾는 것을 잘한다고 팀원분들이 얘기해주셔서 문제가 생기는 부분이 생기면 붙어서 도와주는 역할을 맡게 되었다! ( 물론 비교적 잘하는 것이죠.. 우쭐 ㄴㄴ ) 그러나 디버깅 일을 하는게 단편적인 일들이 많아 장기적으로 무얼 할 지 생각을 해야했다! 서버에서 타일맵을 저장 및 이용하여 검증할 수 있도록 수정가능성 확인 Docker 공부 부하 테스트 라이브러리 및 툴 사용방법 및 장단점 비교하기 서버의 타일맵 현재는 구현된 MVP는 클라이언트의 움직임을 에코서버처럼 다른 클라이언트에게 전달하는 역할이 많다... Read More