분류 전체보기

    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..

    24. 11. 18. 개발일지 // api vs 서비스주입, redis 캐시

    24. 11. 18. 개발일지 // api vs 서비스주입, redis 캐시

    * 퀴즈셋 http api 호출 vs 서비스주입 방식 비교분석Service 주입 방식의 장점:단일 책임 원칙(SRP) 준수테스트 용이성 향상캐싱 전략 구현 가능에러 처리 통합의존성 역전 원칙(DIP) 준수HTTP 직접 호출 방식의 단점:코드 중복 가능성테스트 어려움에러 처리 분산캐싱 전략 부재CTO들의 견해Martin Fowler (ThoughtWorks):"서비스 계층 패턴은 비즈니스 로직을 캡슐화하고 재사용성을 높이는 핵심 패턴입니다."Sam Newman (Author of Building Microservices):"마이크로서비스 환경에서 서비스 추상화는 시스템 유연성의 핵심입니다."Best Practices인터페이스 정의의존성 주입 활용캐싱 전략 구현환경 설정 분리에러 처리 통합추천사항QuizSe..

    24. 11. 17. 개발일지 redis 탐색

    24. 11. 17. 개발일지 redis 탐색

    * 로직 이해하기createRoom 할때 일어나는 일 joinRoom시 일어나는 일 start Game 누르면 나머지 event들이 알아서 발생되는군start Game 누르면 생기는일 퀴즈, 정답을 레디스에 올리는구나  * gameService 주석@Injectable()export class GameService { /** * 게임 서비스에서 사용되는 Redis 명령어 설명 * * Redis 키 구조: * - Room:{gameId} : 게임 방 정보를 저장하는 해시 * - Player:{clientId} : 플레이어 정보를 저장하는 해시 * - Room:{gameId}:Players : 게임 방의 플레이어 목록을 저장하는 Set * - Room:{gameId}:Leader..

    24.11.14. 발표자료 // n+1문제해결, 변경감지, redis 설계

    백엔드 경험Redis관련 흐름 정리flowchart TB Client["Client (Socket.IO)"] GameService["GameService"] Redis["Redis"] HTTP["HTTP Service"] Client |Socket Events| GameService GameService |Data Storage/Pub-Sub| Redis GameService --> |Quiz Data| HTTPflowchart TB Room["Room:{gameId} - host - status - quizSetId - quizCount"] Player["Player:{clientId} - gameId - pla..

    24.11.14. 개발일지  // 자동배포, 깃헙액션에서 db test, ssh 터널링 db 연결

    24.11.14. 개발일지 // 자동배포, 깃헙액션에서 db test, ssh 터널링 db 연결

    * 깃헙액션에서 mysql, redis test 환경구축const moduleRef = await Test.createTestingModule({ imports: [ RedisModule.forRoot({ type: 'single', url: 'redis://localhost:6379', }), ], providers: [ GameGateway, GameService, GameValidator, { provide: 'default_IORedisModuleConnectionToken', useValue: redisMock } ]}).compile();const module: TestingModule = await Test.cr..