v1.2.0
📙 4주차 데모 URL
🚀 New Features
그림 부정행위 처리
- OpenAI API(gpt-4o)를 통합하여 그림 내 부정행위(문자 포함 여부) 검증 기능을 추가하였습니다. (#26)
🔧 Improvements
도움말 모달 관련 개선 사항
- 터치패드에서 더 부드럽게 페이지 넘김 할 수 있도록 스크롤 거리 단축 (100 > 50)
- Lottie Player dotlottie-react로 통일하여 번들 용량 축소
- .lottie 파일 메모리 캐시하여 두 번째 호출을 더 빠르게 하도록 개선 (#17)
캔버스 API 곡선 시스템 적용
- 문제: 기존 Canvas API의
lineTo()방식은 선이 각져서 자연스러운 드로잉이 어려워 UX가 감소했습니다. - 해결: 점들 사이의 중간점을 계산해 연속성이 보장된 곡선을 생성했습니다. (#13)
Prometheus 모니터링 기능 제거
애플리케이션의 성능 및 상태 모니터링을 NCP Cloud Insight로 전환하였습니다.
Redis 어댑터 설정 추가
- 문제: 기본 Socket.IO 어댑터 대신 Redis를 사용하여 여러 컨테이너에서 연결을 공유해야 했습니다.
- 해결:
@socket.io/redis-adapter패키지를 추가하고, Redis를 사용하는 사용자 정의 어댑터(RedisIoAdapter)를 구현하여 서버 간의 연결을 관리할 수 있도록 설정했습니다. (#22)
서버 컨테이너 이중화 구성
- 문제 : 단일 서버 컨테이너로 인한 요청 처리 지연이 있었습니다.
- 해결 :
- 서버 컨테이너를 2개로 구성하고 Nginx를 통한 로드 밸런싱을 구현했습니다.
- API 요청은 least_conn 방식으로, 웹소켓 연결은 ip_hash 방식으로 부하를 분산하도록 설정했습니다.
라이트하우스 자동화
- 문제: 웹 성능 최적화 과정에서 반복적인 수동 라이트하우스 측정으로 인해 개발 생산성이 저하되었고 자동화된 성능 지표 모니터링 시스템이 없어 성능 저하 이슈를 조기에 발견하지 못하는 문제가 발생했습니다.
- 해결: CLI 명령어를 통해 각 페이지의 라이트하우스 성능 측정 결과를 콘솔에서 바로 확인할 수 있도록 프로세스를 자동화했고 PR이 생성될 때마다 성능 지표가 자동으로 코멘트되도록 설정했습니다. (#18)
🐛 Bug Fixes
도움말 모달 애니메이션 버그 해결
- setTimeout으로 재생 컨트롤 하는 로직을 제거하여 페이지 렌더링 직후 도움말 모달 활성화 시 애니메이션이 멈추는 버그 해결 (#17)
Redis 키 구조 오류
- 문제 : 잘못된 Redis 키 구조로 인해 플레이어 조회에 실패하는 문제가 발생했습니다.
- 해결 :
room:${roomId}:player:${playerId}를room:${roomId}:players:${playerId}로 수정하여 해결했습니다. (#16)
비동기 처리 누락
- 문제 : Redis 조회 시 비동기 처리가 누락되어 런타임 에러가 발생하는 문제가 있었습니다.
- 해결 :
handleConnection메소드를 async/await 패턴으로 변경하여 해결했습니다. (#16)
예외 처리 미작동
- 문제 :
WsExceptionFilter에서handleConnection메소드의 예외가 포착되지 않는 문제가 있었습니다. - 해결 : 예외 처리 방식을
throw에서 클라이언트 에러 이벤트 emit 방식으로 변경하여 해결했습니다. (#16)
퀴즈 단어 관리 방식 개선
- 문제 : 모든 방에서 동일한 단어 리스트를 공유하고 있어, 각 방에서 독립적인 단어 관리가 불가능했습니다.
- 해결 :
- 각 방마다 독립적인 단어 리스트를 관리하도록 변경했습니다.
- 클래스 수준에서
words저장 방식을 제거하고, Redis를 이용한 관리 방식으로 전환했습니다. (#26)
📝 Additional Notes
미사용 파일 삭제
- canvas 폴더의 미사용(과거 개발용 테스트 모듈) 파일 삭제
- asset>lottie>help 폴더의 json 애니메이션 파일 삭제 (#17)
📝 Full Changelog
Full Changelog: v1.1.0...v1.2.0