개발일지

    24. 11. 28. 개발일지 // hotfix

    24. 11. 28. 개발일지 // hotfix

    * 강퇴안되는 버그강퇴당한사람은 exitRoom이 뜸문제 : 해당 패턴은 Player:* 을감지함Player:*:Chagnes는 감지못함.  * joinRoom시 방장의 uuid 보내주기  * 선택지 동적 좌표계산

    24. 12. 3. 개발일지 // 성능개선

    24. 12. 3. 개발일지 // 성능개선

    * 성능개선부하테스트 결과문제점updatePosition, chatMessage의 응답시간이 매우 높다.일단 updatePosition부터 개선해보자원인가설player 필드를 가져올때,  hgetall로 필요없는 필드까지 가져와서 느려진다.pipeline을 사용하지않고, 네트워크를 여러번 왕복하기때문에 느려진다.//기존코드async updatePosition(updatePosition: UpdatePositionDto, clientId: string) { const { gameId, newPosition } = updatePosition; const playerKey = REDIS_KEY.PLAYER(clientId); const player = await this.redis.hgetal..

    24. 11. 27. 개발일지 // jest --runInBand --detectOpenHandles --forceExit 오류 해결, socket io handshake error

    24. 11. 27. 개발일지 // jest --runInBand --detectOpenHandles --forceExit 오류 해결, socket io handshake error

    * 바뀐로직이해socket init 후에쿠키를 set이후 아래함수가 호출된다.postman 접속방법=을 넣으면 잘림%3D로 넣으면됨.이유이는 URL 인코딩(또는 퍼센트 인코딩)과 관련이 있습니다.flowchart LR A["Raw Character (=)"] -->|"URL Encoding"| B["%3D"] B -->|"Server Decoding"| C["Original Character (=)"] style A fill:#f9f,stroke:#333,stroke-width:4px style B fill:#bbf,stroke:#333,stroke-width:4px style C fill:#bfb,stroke:#333,stroke-width:4px주요 이유는 다음과 같습니다:..

    24. 11. 26. 개발일지 // 모니터링 구현, rss, heap, admin ui , namespace vs server

    24. 11. 26. 개발일지 // 모니터링 구현, rss, heap, admin ui , namespace vs server

    * 모니터링 구현v1단점 : 컨트롤러의 class, method만 추출 가능하다.v2서비스 메소드 위에 @Trace를 달아주면 추적이 가능하다.v3Class 전체에 대해 걸어줄 수 있음.내부 메소드 전체를 바꿔치기하는 방식* redis에서 커넥션 풀결론 : 커넥션풀이 큰 의미가없다.어차피 큐에넣어서 명령어가 1개씩 처리되므로Redis는 단일 커넥션으로도 여러 요청을 동시에 처리할 수 있습니다.이것이 가능한 이유는:Redis가 내부적으로 요청을 파이프라이닝(pipelining)하여 처리ioredis가 커맨드 큐잉을 통해 요청을 관리Node.js의 이벤트 루프를 활용한 비동기 처리예시 코드:@Injectable()export class RedisService { constructor(@InjectRedis..

    24. 11 . 25. 개발일지 // 강퇴구현, 핀포인트 도입

    24. 11 . 25. 개발일지 // 강퇴구현, 핀포인트 도입

    * 강퇴구현1. 검증(방존재, 플레이어가 호스트인지, target이 유효한 플레이어인지)2. Changes를 Kicked로 수정 => redis에서 구독중임. => 클라에게 msg 보내주기3. handlePlayerExit에서 Player 관련 자료구조 삭제 * player 퇴장후에도 자료구조가 남아있는 버그수정todo  * 핀포인트 도입hbase 설치 java 설치, 환경변수 설정 일단 socket io , mysql이 지원이 안됨(이건 버전올리면 될수도?)...콜 스택도 안보이는데?

    24. 11. 21. 개발일지 // 자동배포 수정, 인터셉터 버그수정(redis event trigger 이해)

    24. 11. 21. 개발일지 // 자동배포 수정, 인터셉터 버그수정(redis event trigger 이해)

    * 자동배포 수정dist/src내의 main.js를 실행하도록 변경안되던게 그냥 env파일 ip를 잘못적어줘서인가? 그런듯 * 모니터링 시스템 도입https://jojoldu.tistory.com/712 1. 효율적으로 로그 모니터링하기 - 로그 레벨 구분하기365/24 로 관리하는 시스템에서 로그는 굉장히 중요하다. 하지만 로그가 중요하다는 생각에 무분별하게 남기는 것은 좋지 않다. 대표적인 예로 습관적으로 예외 상황이 발생하면 ERROR 레벨로 로그jojoldu.tistory.com * 인터셉터버그changes를 안알려줘서(?) 무한 updateQuizSet이 생기는 버그?원인 : 이전의 Changes의 값이 남아있어서 직전 이벤트가 계속 실행됨.Room자체에 이벤트가 걸려있음 -> lastActiv..

    24. 11. 20. 개발일지 // redis 메모리 관리

    24. 11. 20. 개발일지 // redis 메모리 관리

    * redis 메모리 관리방법1 : redis의 모든키에대해 TTL을 달아주기이 작업때문에 redis 쓰기,조회가 block 될수있나요?주요 개선사항:SCAN 사용:smembers 대신 SCAN 명령어 사용대규모 데이터셋에서도 안전하게 작동Pipeline 활용:여러 Redis 명령어를 하나의 요청으로 묶음네트워크 오버헤드 감소배치 처리:BATCH_SIZE로 처리량 제어메모리와 성능의 균형 유지비동기 처리:Promise.allSettled 사용독립적인 작업의 병렬 처리에러 격리:각 배치별 독립적인 에러 처리전체 프로세스의 안정성 향상SMEMBERS와 SCAN의 주요 차이점과 기존 코드와 개선된 코드를 비교해드리겠습니다.1. SMEMBERS vs SCAN 차이점:// 1. SMEMBERS 방식 (기존) - ..

    24. 11. 19. 개발일지 // test-code 의존성 수정, redis 구독 리팩토링, 진행중게임에 들어올수없음

    24. 11. 19. 개발일지 // test-code 의존성 수정, redis 구독 리팩토링, 진행중게임에 들어올수없음

    * test-code 의존성 수정이슈기존의 Quiz도메인이 Quiz-set으로 변경QuizService가 QuizSetService로 변경QuizSetService내에서 QuizSetCreate, read, u, d 를 사용함만났던 에러해결 : QuizSetC r u d 를 providers에 주입해주니 해결되었음.각종 경로, 폴더명, 서비스명 수정서비스들을 export사용하는곳에서 모듈을 import 하면 위의 서비스들을 모두 사용할수 있다.* 진행중인 게임방에 입장할수 없다.startGame을 누르면 방의 상태를 바꾸는구나이걸 이용하면 되겠다.createRoom할때 isWaiting을 1로 걸어주는데 이건뭐지?대기방을 찾는데 사용되는 정보같다.일단 둘다 or 조건으로 사용해보자.버그 : excepti..