분류 전체보기 81

Tower Defense Online Project 트러블 슈팅 - 2

MySQL, Redis가 연결이 안된 경우 계속 시도하는 문제레디스의 경우 연결이 실패한 경우 계속해서 연결 시도를 반복함.이 과정에서 무의미하게 로그가 계속해서 쌓임.DB연결에 실패한 경우 서버가 종료되도록 수정함. 해결 코드import dbPool from '../../db/database.js';import { config } from '../../config/config.js';export const testConnection = async () => { try { const [rows] = await dbPool.query('SELECT 1 + 1 AS solution'); console.log(`${config.database.database} 테스트 쿼리 결과:`, rows[0]..

TIL 2024.11.12

Tower Defense Online Project 트러블 슈팅 - 1

이상한 페이로드 출력  id를 꺼낸 경우C2SRegisterRequest { id: '\n\x04asdf\x12\x04asdf\x1A\x04asdf' } 제대로 파싱을 하지 못하는 에러가 발생함. test codeconsole.log("패킷 타입 : "+packetType) console.log("페이로드 길이 : "+payloadLength) switch (packetType) { case PACKET_TYPE.REGISTER_REQUEST: { const protoMessages = getProtoMessages(); const Register = protoMessages.common.C2SRegisterRequest; ..

TIL 2024.11.12

스파르타 최종 프로젝트 3조 회의 - 1

클라팀 : 권용수, 김현진, 문주원서버팀 : 박용현, 이정수, 문민철 회의 내용저번 회의 마지막내용: 장르 정함 ( 액션 어드벤처 로그라이크 전략 RPG)클라팀에서 했던 최종 프로젝트 용수님이 만든걸 토대로 진행하려고 했음. 이정수 : 어떻게 어떻게 재미없다라기 보다는 결론은 이 최종클라 프로젝트를 베이스로 하는건 너무 별로다.서버에서는 서버에서 여러 연산이 필요한 게임을 찾자. 김현진: 클라팀끼리 회의를했는데 베이스를 가지고 하는것일 뿐 게임 기반으로 삼지못하는 이유, 에셋이 팀 프로젝트에서 용수님이 하나도 소유하지 않고 있음, 용수님 팀 프로젝트 했을때 게임을 그대로 사용하려면 용수님의 팀의 동의가 필요하다.  박용현: 도의적인 이야기이기 때문에 굳이 허락을 맡아야하나? 이정수: 기획에 관한 저작권도..

회고록 2024.11.11

TowerDefenseOnline 프로젝트: 인메모리에서 Redis의 데이터 저장 전환

레디스 용도TowerDefenseOnline 프로젝트에서 Redis는 게임 데이터를 효율적이고 안정적으로 관리하기 위해 사용특히, 빠른 데이터 접근 속도와 지속성 있는 DB 역할을 수행인메모리 데이터 관리 방식에서 발생할 수 있는 데이터 유실 문제를 해결하기 위한 솔루션우리 프로젝트의 특징인 TCP통신이기 때문에 실시간 게임 플레이 중에도 데이터 일관성을 유지하면서 높은 성능을 제공레디스가 쓰이는 곳기능로그인매칭상태 동기화타워 구매몬스터 생성타워 공격몬스터 공격넥서스 HP업데이트몬스터 처치게임 오버게임 종료로그인 ( redisClient.hmset(`user:${user.userId}`, userData); )클라이언트에서 request로 payloadData가 들어오면 const { id, passwo..

기타 2024.11.11

데이터 중심 동기화 (Data-oriented Synchronization)에 대하여 (Node.js 중심)

데이터 중심 동기화(Data-oriented Synchronization)는 네트워크 환경에서 데이터의 일관성을 유지하기 위해, 클라이언트와 서버 간의 데이터 동기화 방식을 최적화하는 기법입니다. 특히 실시간 멀티 플레이 게임이나 분산 시스템에서 데이터의 상태를 효율적으로 동기화하는 데 사용됩니다. 이 방법은 주로 상태의 변화를 기준으로 동기화하거나, 데이터의 중요한 부분만 전송하여 네트워크 자원의 효율성을 높입니다. 개념 설명상태 기반(State-based): 클라이언트는 주기적으로 전체 상태를 전송하거나 동기화하고, 서버는 이를 바탕으로 상태를 업데이트합니다. 주기적인 스냅샷이 필요하므로, 자주 변경되는 상태에는 다소 비효율적일 수 있습니다.변화 기반(Changed-based): 상태가 변화할 때만 ..

TIL 2024.11.09

상태 동기화에 대하여

상태 동기화(State Synchronization)는 분산 시스템이나 네트워크 환경에서 여러 클라이언트와 서버간에 상태 정보를 일관되게 유지하기 위한 기술입니다. 게임 개발, 실시간 협업 애플리케이션, 분산 시스템 등에서 많이 사용됩니다. 상태 동기화는 주로 세 가지 방식으로 나뉩니다.1. 데이터 중심 동기화 (Data-oriented Synchronization) 설명: 데이터 중심 동기화는 서버에서 클라이언트로 데이터를 전송할 때 전체 상태를 주기적으로 업데이트하는 방식입니다.특징:모든 상태 정보가 전송되기 때문에 클라이언트는 항상 최신 상태를 유지합니다.주기적으로 전체 상태를 전송하기 때문에 구현이 비교적 간단하지만, 네트워크 대역폭을 많이 소모할 수 있습니다.예시: 실시간 전략 게임에서 주기적으..

TIL 2024.11.07

스파르타 코딩 클럽 모의 면접 깔끔한 답변 준비

1. 전송 계층 프로토콜에 대해 설명해주세요.전송 계층 프로토콜에 대해서 말씀 드리겠습니다.사실 아주 짧게 전송 계층 프로토콜로는 TCP와 UDP가 있습니다. 하면 질문 폭탄의 불안으로OSI 7 계층중 4계층으로 애플리케이션이 네트워크를 통해 데이터를 안전하고 효율적으로 송수신할 수 있도록 도와주는 역할을 하는 계층의 프로토콜로 TCP와 UDP가 있습니다. TCP는 연결 지향적 통신으로 3-way handshake 연결 설정을 통해 서버와 클라간의 데이터 송수신에 대한 신뢰성을 보장해 줍니다.TCP의 예시로는 데이터의 신뢰성과 정확성이 중요한 금융 애플리 케이션이나 온라인 쇼핑몰에서 TCP가 사용됩니다. UDP는 비연결 지향적 통신으로 데이터의 도착 여부나 순서를 보장하지 않고 손실된 데이터의 재전송또한..

TIL 2024.11.01

소켓 오류 난 너가 밉다!!!

1. 사건의 발단TCP 연결을 통해 서버와 지속적인 연결이 필요한 Unity 애플리케이션을 강제 종료하면 저 메시지가 뜬다.(사실 뜨는게 당연하다 하지만 소켓 오류라는 내용이 마음에 들지가 않아서 오류가 아닌 정상적인 종료로 만들고 싶었습니다. 2. 해결방법 -1아무튼 유니티 애플리케이션이 종료되거나 객체가 파괴될 때 네트워크 연결을 안전하게 종료하기 위한 코드를 클라에다가 넣으면 소켓 오류라는 보기 안좋은 메시지가 서버 콘솔쪽에 뜨지 않게 되지 않을까?! 열심히 검색을 해보니 Application.wantsToQuit 와 OnWantsToQuit를 찾게 되었다.내용을 보니 흠... NetworkManager에 추가하면 되겠구만! Application.wantsToQuit 이벤트는 Unity 애플리케이션..

TIL 2024.11.01

게임 프로그래밍과 삼각함수는 무슨연관이 있을까?

1. 서론: 삼각함수란 무엇일까?수학을 배우면서 한 번쯤은 들어본 단어, 바로 삼각함수입니다. 하지만 이름만 들어도 어려울 것 같고 실제로 어디에 쓰이는지 감이 오지 않는 것이 사실입니다. 그럼에도 불구하고 삼각함수는 우리 생활 곳곳에 숨어 있습니다. 예를 들어, 여러분이 매일 보는 스마트폰의 화면 움직임, 음악 소리의 파형, GPS로 현재 위치를 정확하게 찾는 기술 등 삼각함수는 보이지 않는 곳에서 큰 역할을 하고 있습니다.삼각함수는 직각삼각형을 통해 각도와 변의 비율을 분석하는 수학적 개념에서 출발합니다. 이를 통해 각도가 일정한 비율로 변할 때, 그 변화가 주기적인 패턴을 가지게 된다는 점을 수학적으로 설명할 수 있습니다. 이런 주기적 패턴이 바로 우리 일상과 과학기술에서 삼각함수가 필수적인 이유입..

TIL 2024.10.30

Load Balancing에 대하여

1. 로드밸런싱 (Load Balancing)로드밸런싱은 여러 서버에 트래픽을 분산시켜 서버의 부하를 효율적으로 관리하는 기술입니다.이를 통해 특정 서버에 과부하가 걸리는 것을 방지하고, 시스템의 가용성과 성능을 향상시킬 수 있습니다.예를 들어, 웹 서비스에서 수많은 사용자가 동시에 접속할 경우, 하나의 서버만으로는 처리할 수 없으므로 여러 대의 서버가 필요합니다.로드밸런서는 이 트래픽을 서버들 간에 고르게 분산시킴으로써 효율적인 자원 활용과 장애 대비를 가능하게 합니다. 예시:쇼핑몰 웹사이트에서 사용자가 많아지면 하나의 서버만으로는 사용자 요청을 모두 처리할 수 없습니다.로드 밸런서는 이러한 요청을 여러 서버로 나누어 처리합니다.A 서버, B 서버, C 서버가 있다고 가정하면, 로드밸런서는 각 요청을 ..

TIL 2024.10.21