-
이론 정리 - < Data > TOP NEW
Array와 LinkedList Array는 메모리 상에서 하나의 묶음으로 고정되어있는 그룹이라면, LinkedList는 메모리와 상관없이 각각의 요소들이 동적으로 이어져있는 그룹! 이러한 차이점에 의해 Array는 빠른 접근 속도와 연속된 메모리 사용이 장점이지만, 크기 고정으로 삽입 및 삭제가 비효율적이고, LinkedList는 삽입/삭제가 효율적이지만, 접근 속도가 느리며 메모리 오버헤드가 발생할 수 있음! Stack과 Queue Stack과 Queue는 데이터를 저장하거나 삭제(사용)하는 순서의 차이가 있다! Stack은 자료를 LIFO(후입선출) 방식으로 팬케이크처럼 데이터를 쌓아서 사용하고, Qu... Read More
-
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