분류 전체보기
24. 11. 28. 개발일지 // hotfix
* 강퇴안되는 버그강퇴당한사람은 exitRoom이 뜸문제 : 해당 패턴은 Player:* 을감지함Player:*:Chagnes는 감지못함. * joinRoom시 방장의 uuid 보내주기 * 선택지 동적 좌표계산
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..
[알고리즘] 백준 10986 나머지합 // 누적합, 나누기
https://www.acmicpc.net/problem/10986 * 아이디어 % 문제는 분배법칙으로 막 나눠라.%m으로 나눈 누적합을 구하라쌍을 찾아 C2 하면 답이다.원래 값이 0인것도 답이다. 같은 값을 선택한 예시 -> s[4] - s[2] == 원본배열에서 초록칸부분 1,2와 같음즉, 같은값 에서 2개를 선택하는 경우의수 == 정답의 경우의 수 * 전체코드c는 ret를 long long으로 해야함 (파이썬은 정수값 무제한임)#include using namespace std;int n, m;long long arr[1000000 + 4], sum[1000000 + 4];long long ret;int main() { ios_base::sync_with_stdio(0); cin.t..
[알고리즘] 백준 11660 구간합 구하기5 // 2차원 누적합
https://www.acmicpc.net/problem/11660 * 풀이data 정의를 잘해야함2차원 누적합 채우는 방법위 + 왼 - 좌측위(중복덧셈) + 원본3 + 3 - 1 + 3쿼리 구하기 x2,y2사각형 의 누적합에서 # sum(x2,y2)범위밖 위 사각형을빼고 # sum(x1-1,y2) 범위밖 좌측 사각형을 빼고 # sum(x2,y1-1) 중복제거된 교집한 부분 사각형을 더해주면 된다. # sum(x1-1,y1-1) 답 : sum(x2,y2) - sum(x1-1,y2) - sum(x2,y1-1) + sum(x1-1,y1-1) #중복뺄셈보완 * 전체코드#include using namespace std;int n, m;int arr[1025][1025], sum[1025][1025]; ..
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
* 모니터링 구현v1단점 : 컨트롤러의 class, method만 추출 가능하다.v2서비스 메소드 위에 @Trace를 달아주면 추적이 가능하다.v3Class 전체에 대해 걸어줄 수 있음.내부 메소드 전체를 바꿔치기하는 방식* redis에서 커넥션 풀결론 : 커넥션풀이 큰 의미가없다.어차피 큐에넣어서 명령어가 1개씩 처리되므로Redis는 단일 커넥션으로도 여러 요청을 동시에 처리할 수 있습니다.이것이 가능한 이유는:Redis가 내부적으로 요청을 파이프라이닝(pipelining)하여 처리ioredis가 커맨드 큐잉을 통해 요청을 관리Node.js의 이벤트 루프를 활용한 비동기 처리예시 코드:@Injectable()export class RedisService { constructor(@InjectRedis..
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 이해)
* 자동배포 수정dist/src내의 main.js를 실행하도록 변경안되던게 그냥 env파일 ip를 잘못적어줘서인가? 그런듯 * 모니터링 시스템 도입https://jojoldu.tistory.com/712 1. 효율적으로 로그 모니터링하기 - 로그 레벨 구분하기365/24 로 관리하는 시스템에서 로그는 굉장히 중요하다. 하지만 로그가 중요하다는 생각에 무분별하게 남기는 것은 좋지 않다. 대표적인 예로 습관적으로 예외 상황이 발생하면 ERROR 레벨로 로그jojoldu.tistory.com * 인터셉터버그changes를 안알려줘서(?) 무한 updateQuizSet이 생기는 버그?원인 : 이전의 Changes의 값이 남아있어서 직전 이벤트가 계속 실행됨.Room자체에 이벤트가 걸려있음 -> lastActiv..