목록분류 전체보기 (107)
rabbit97 님의 블로그
오늘의 개발 진행 사항 # 카드 기능 구현 - 감금장치, 위성 타겟 둘 다 페이즈가 바뀌면 발동하는 카드여서 기존 페이즈 업데이트 로직에 조건문을 걸고페이즈가 낮일때 장착하고 있는 디버프가 어떤 경우 어떤 효과 발생 이런식으로 로직을 진행findRandomSurvivingUser(currentUserId) { const survivingUsers = Object.values(this.users).filter(({ user }) => { // 현재 자신은 목록에서 제외 return user.id !== currentUserId; }); if (survivingUsers.length === 0) { return null; } // 다음 디버프를 받은 유저는 랜덤으로 결정 const..

블락과 논블락은 동기와 비동기에서 파생되었다는건 알겠는데 그럼 비동기와 논 블락킹의 차이점은?? - 비동기와 논 블락킹을 조합하는 방법은 굉장히 많이 사용하는 방법인데 이 둘의 차이점이라 하면 [ 비동기 vs 논블로킹 ]비동기, 논블로킹: 네트워크 요청을 보내고 다른 작업하기비동기, 논블로킹: 네트워크 요청을 보내고 특정 주기(10초, 1분, 5분) 확인하면서 다른 작업하기논블로킹: 네트워크 요청을 보내고 다른 작업을 할 수 있는데 하지 않고 네트워크 응답이 왔는지만 확인하기============================================================================참고 블로그 : https://velog.io/@slobber/%EB%8F%99%EA%B8%B..

한 줄 요약 : Node.js가 사용하는 비동기 I/O라이브러리로 비동기 작업이 어떤 커널이 지원하는지 확인 ===================================================================== 참고 블로그 : https://velog.io/@tastestar/Node.js-libuv Node.js libuv프로젝트를 마치고, 면접 준비를 하다보니 Node.js가 싱글 쓰레드 인줄 알고 있었는데, Node도 여러 스레드를 가지고 있지만!, 자바스크립트 실행하는 스레드가 하나라 싱글 스레드라는 걸 알게되velog.io Node.js libuv프로젝트를 마치고, 면접 준비를 하다보니 Node.js가 싱글 쓰레드 인줄 알고 있었는데, Node도 여러 스레드를 가지고 있지..

# 개발 진행 상황리액션 핸들러 로직은 이제 마무리지금은 올 유저의 스테이트를 논값으로 바꿔서 게임을 진행시키는데 카드쪽 진행하고 있는 팀원 분 중 한분이 공격및 방어 카드쪽으로 유틸 함수 작성중이여서 나중에 그 로직을 가져오면 진짜 마무리import { getGameSessionBySocket, getGameSessionByUser } from '../../sessions/game.session.js';import { createResponse } from '../../utils/packet/response/createResponse.js';import { CARD_TYPE, PACKET_TYPE } from '../../constants/header.js';import handleError from ..
# 리액션 핸들러와 관련해서 에러가 해결되지 않아 정리하는 기록 - 지금 현상 : 공격 카드를 사용하면 무한로딩에 걸린다. 클라이언트에선 널값을 받았다고는 나오는데 어디서 무슨 데이터를 받았는지는 확인 불가 # 해본 방법 - 정확한 오류 원인을 알 수 없음 : 리액션과 관련 된 로직 모두 로그 찍어보고 분석해보기 유즈 카드 노티피케이션, 리액션 리퀘스트 핸들러, 유저 업데이트 노티피케이션 이 3곳을 중점으로 보았는데 유즈카드에 케이스 중 공격 카드에 체력을 깎는 로직을 넣으면 정상적으로 잘 깎이는 거 확인하지만 원래는 리액션 리퀘스트가 발동 되고 상대방이 방어 카드가 있으면 방어카드를 사용할지 말지에 대한 선택이 주어져야하는데 체력을 먼저 깎고 선택지가 주어짐 ( 둘 다 동시에 진행 된 거일 수도 있음..

# 오늘의 개발 진행 사항 - *예비군 훈련 받고 오기* - 유저 업데이트 로직 병합 - 리액션 핸들러 병합 준비 중 오늘도 문제가 있었는데 캐릭터가 공격을 하면 클라이언트에서 공격을 했구나!! 하고 서버로 리액션 요청이 오는 줄 알았는데 그게 맞긴 하지만 공격 로직에 문제가 있어서 또 무한 로딩에 걸렸었다. 처음에는 팀원들끼리 회의 중 리액션 로직에 문제가 있는거 같아서 그런 것 같다 결론이 나왔었는데 (아니였다) # 해결 과정 패킷 명세 : message CharacterStateInfoData { CharacterStateType state = 1; CharacterStateType nextState = 2; int64 nextStateAt = 3; // state가 nextState로 풀리는 ..

# 오늘 진행 사항 - 남은 마지막 핸들러까지 기능 토대 구현 - 위치 이동 업데이트 핸들러 로직 기능 병합 둘이 잘 만난다import { getGameSessionBySocket } from '../../sessions/game.session.js';import { createResponse } from '../../utils/packet/response/createResponse.js';import config from '../../config/config.js';import { getUserBySocket } from '../../sessions/user.session.js';import handleError from '../../utils/errors/errorHandler.js';const p..
# 오늘의 회의 내용 노티피케이션을 어떻게 사용할 것인가? 결국 처음에 내가 구현했던 크리에이트 리스폰스 함수를 불러와서 보내는 방식으로 결정! import { getGameSessionBySocket } from '../../sessions/game.session.js';import { createResponse } from '../../utils/packet/response/createResponse.js';import { PACKET_TYPE } from '../../constants/header.js';const packetType = PACKET_TYPE;// 유저 위치 업데이트 함수const updateCharacterPosition = (gameSession, userId, x, y) => ..

한 줄 요약 : 노드에서 비동기 작업을 관리하기 위한 구현체. 페이즈와 큐로 구성이 되어있으며 이벤트 루프가 살아있는 한 실행 할 수 있는 작업을 계속 수행하며 없으면 종료된다. ===================================================================참고 블로그 :https://www.korecmblog.com/blog/node-js-event-loop Node.js 이벤트 루프(Event Loop) 샅샅이 분석하기Node.js의 이벤트 루프를 구현과 함께 자세히 살펴봅니다www.korecmblog.com 글에 들어가기에 앞서Node.js의 이벤트 루프의 경우 공식 문서에 설명이 부족하고 이에 따라 여러 사람들이 각자 나름대로 분석한 글이 많아 무엇이 이..

정리 : Worker_Threads로 두개 이상의 작업이 가능하긴 하나 노드라는 환경을 이루는 핵심 요소가 '이벤트 루프 + 메인 스레드' 여서 이론적으로만 멀티 스레드가 가능은 하고 사실 개념은 싱글 스레드가 맞다. 개인적으로 궁금해서 찾아본 노드에서 여러게의 스레드로 작업 하는 방법Node.js에서 멀티 스레드 처리Node.js는 worker_threads 모듈을 통해 멀티 스레드를 지원.child_process나 cluster 모듈을 이용해 멀티 프로세스를 사용하여 병렬 처리가 가능.특정 작업을 백그라운드로 옮기거나 여러 코어에서 실행할 수 있음. 그럼 이게 장점이 뭘까?Node.js의 싱글 스레드 모델장점:I/O 작업에서 매우 효율적 (비동기 I/O를 사용할 경우).코드 구조가 간단하며, 동시성 ..