개발일지
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 탐색
* 로직 이해하기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 연결
* 깃헙액션에서 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..
[week2-수요일] 개발일지 // 테이블설계
* 테이블 설계CREATE TABLE History ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, log VARCHAR(255) NOT NULL, date_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES User(id));CREATE TABLE `todo`.`Card` ( `id` INT NOT NULL AUTO_INCREMENT, `title` VARCHAR(45) NULL, `content` VARCHAR(45) NULL, `device` VARCHAR(45) NULL, PRIMARY KEY..