(TIL) 2025-02-18 - FINAL(11)
분산 서버 작업 - 2일차 아키택처 분산 서버 작업 1일차에서는 레디스를 사용할 예정이었으나 계속 작업을 진행하게 되면서 현 상황에서 레디스를 사용해야할 이유가 없다고 판단하게 되어 차후에 스케일 아웃 상황을 고려하여 서버를 증가시키는 구조를 구현하게되면 게임 상태 정보를 동기화 하기 위해 그때 레디스를 사용해보는 걸로 변경하게 되었다. 그...
분산 서버 작업 - 2일차 아키택처 분산 서버 작업 1일차에서는 레디스를 사용할 예정이었으나 계속 작업을 진행하게 되면서 현 상황에서 레디스를 사용해야할 이유가 없다고 판단하게 되어 차후에 스케일 아웃 상황을 고려하여 서버를 증가시키는 구조를 구현하게되면 게임 상태 정보를 동기화 하기 위해 그때 레디스를 사용해보는 걸로 변경하게 되었다. 그...
분산 서버 설계 아키택처 현재 최종 프로젝트 개발 단계에서는 단일구조로 작업을 진행하고 있다. 최종 목표로는 분산 서버로 만들고 수평 확장까지 적용을 해볼려고 한다. 그렇기에 오늘 현재까지 구현된 코드를 기준으로 우선 ‘로비’ 와 ‘게임’ 서버를 나누는 작업을 진행하였다. 계획상 우리 팀이 생각하는 서버 아키택처는 위 그림과 같다. 게임...
로드 밸런싱 자료조사 로드밸런싱 - 알고리즘 라운드 로빈 방식 (Round Robin Method) 서버로 들어온 요청을 순서대로 돌아가며 배정하는 방식. 클라이언트의 요청을 순서대로 분배하기 때문에 서버들이 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합. ...
몬스터 스폰 구역 설정 몬스터를 생성 시킬 때 중앙의 캠프에서 멀어질수록 더 강력한 몬스터가 생성되게 하기위한 테스트 로직을 만들어 보았다. 실제 맵 크기의 좌표 값 실제 맵의 최소,최대의 X,Y값을 설정하고 거기에 맞는 중앙 X,Y(캠프 위치)를 설정해준다. // 맵 크기 const MAX_VALUE_X = 25.5950069427490...
Arrow Function 이란 무엇인가 Arrow Function은 JavaScript에서 함수를 정의하는 간결한 방법이다. ES6(ECMAScript 2015)에서 도입되었으며, 기존의 function 키워드로 정의된 함수와 비교해 코드가 간결하고 쉬워졌지만 this에 관해서는 달라졌다. es5에서는 함수 호출시 this가 전역 객체를 가리키...
싱글톤(Singleton) 디자인 패턴 중 하나로, “하나의 객체만 생성” 하는 디자인 패턴이다. 즉, 어떤 클래스가 있으면, 그 클래스의 인스턴스(객체)를 하나만 만들도록 보장하는 방식이다. class Singleton { constructor() { if (!Singleton.instance) { ...
트러블 슈팅 배경 플레이어 공격 기능을 구현하고 기능 테스트를 진행하려던 중에 기존 방에 참여 했을 경우 위와 같은 오류가 발생하였다. 원인/분석 오류가 발생한 코드 this.getUsers().forEach((user) => { if (user.socket !== socket) targetUsers.push(user...
async/await 이란 무엇인지 설명해주세요. async/await는 JavaScript에서 비동기 처리를 더 간단하고 가독성 좋게 다룰 수 있도록 도와주는 문법이다. 일반적으로 비동기 코드는 Promise를 사용하여 처리하지만, async/await를 사용하면 코드가 좀 더 직관적이다. async 함수는 항상 Promise를 반환하고, aw...
var, let, const 에 대해 설명해주세요. 변수를 선언할 때 사용되는 키워드. Var Var는 재선언과 재할당이 가능하다. 호이스팅 현상으로 선언 전에 접근은 가능하나 undefined가 반환된다. let let은 재선언은 불가능하지만 재할당이 가능하다. 호이스팅이 발생하나...
FINAL - DUCKTOPIA: The Mustard Wars 2일차 서버에서 플레이어의 공격 처리에 대한 기능을 구현하게 되었고, 클라이언트로 공격 행위 시 공격 방향에 대한 정보만 받기로 하였고 그 후에 공격 판정 여부에 대해서는 서버에서 처리하기로 흘러가게되었다. 그래서 어떤 방식으로 몬스터의 위치를 체크하면서 검증을 통해 공격 판정을 내...
FINAL - DUCKTOPIA: The Mustard Wars 1일차 게임 기획 프로젝트를 시작하기 앞서 어떤 게임을 만들고 싶은지 팀원끼리 각자의 생각을 정리를 해보았다. 어떤 게임? 스타듀밸리 포스트 아포칼립스 코어키퍼류 어몽어스 게임 요소(컨텐츠) 웨이브 시스템 보스 레이드 시스템 ...
Docker Docker는 소프트웨어를 가상화된 환경에서 실행할 수 있도록 도와주는 플랫폼입니다. 특히 컨테이너화 기술을 기반으로 하고 있어, 애플리케이션을 실행하는 데 필요한 모든 환경을 하나의 패키지(컨테이너)로 묶을 수 있습니다. 이렇게 하면 애플리케이션이 개발 환경, 운영 환경, 테스트 환경 등 어느 곳에서나 동일하게 실행될 수 있습니다....
컨텍스트 스위칭(context switching) 컨텍스트 스위칭(context switching)은 컴퓨터 시스템에서 운영 체제가 여러 프로세스를 번갈아 가며 실행하는 과정이다. 이는 여러 프로세스가 CPU를 공유할 수 있도록 하여 다중 작업을 처리하는 데 중요한 역할을 한다. 즉, 하나의 프로세스가 실행 중일 때, 다른 프로세스를 실행하기 위...
운영체제 운영체제(Operating System, OS)는 컴퓨터 하드웨어와 소프트웨어 간의 중재자 역할을 하며, 사용자와 컴퓨터 간의 상호작용을 관리하는 중요한 소프트웨어이다. 운영체제는 여러 가지 중요한 역할을 수행하고 있으며, 그 주요 기능을 통해 컴퓨터 시스템의 효율적인 운영을 관리한다. 운영체제의 역할 하드웨어 자원의 관...
mysql2/Promise 트랜잭션(Transaction) 1. createConnection 단일 연결을 생성하며, 애플리케이션에서 데이터베이스와 연결을 하나만 사용하는 경우에 적합하다. 연결을 사용한 후에는 명시적으로 connection.end()로 연결을 종료해야 한다. 연결을 재사용하지 않으며, 매번 새로운 연결을 만들어야 하기 때문에 ...
Proto3의 oneof oneof는 하나의 필드만 값을 가질 수 있는 여러 선택지를 정의할 수 있게 해주는 기능이다. 여러 필드를 정의하면서, 해당 필드 중 오직 하나만 값을 가질 수 있게 합니다. 예를 들어, 여러 타입의 데이터를 하나의 메시지 안에 담고 싶은 경우 유용하다. syntax = "proto3"; message GamePack...
원격 프로시저 호출 (RPC, Remote Procedure Call) 네트워크를 통해 분산된 시스템에서 다른 컴퓨터나 서버에서 실행 중인 프로시저(함수)를 호출하는 방법을 의미한다. 즉, 클라이언트가 로컬에서 프로시저를 호출하듯이, 원격 서버에서 실행 중인 프로시저를 호출할 수 있는 기술이다. RPC는 분산 시스템에서 서버와 클라이언트 간의 통...
게임 서버 아키텍처 클라이언트-서버 아키텍처 (Client-Server Architecture) 기본적인 형태의 게임 서버 아키텍처이며, 유저가 디바이스를 통해 게임을 실행하는 쪽이 클라이언트 이며 주로 UI와 입력 처리를 담당한다. 서버는 중앙집중식으로 게임의 모든 로직을 처리 및 게임 상태를 관리한다. 예) 유저의 위치, 상태 등을 서...
아키텍처(Architecture) “아키텍처”라는 개념은 여러 분야에서 사용되지만, 일반적으로 시스템이나 구조가 어떻게 설계되고 구성되는지를 설명하는 데 사용된다. 특히, 소프트웨어나 시스템의 아키텍처는 그 시스템이 효율적이고, 확장 가능하며, 유지 보수가 용이하게 설계될 수 있도록 하는 중요한 역할을 한다. 소프트웨어 아키텍처 소프트웨어 아...
메모리(Memory) 메모리는 컴퓨터 시스템에서 데이터를 저장하고 불러오는 역할을 하는 중요한 부품이다. 컴퓨터에서 메모리는 주로 데이터를 임시로 저장하는 역할을 하며, 이 데이터를 CPU가 빠르게 처리할 수 있도록 지원한다. 메모리는 크게 주기억장치(Primary Memory)와 보조기억장치(Secondary Memory)로 나눌 수 있다. ...