본문 바로가기

내일배움캠프/축구팀 관리 프로젝트37

축구팀 관리 프로젝트 - 경기 데이터 기반 추천 포메이션 기능 축구팀 관리 프로젝트 - 경기 데이터 기반 추천 포메이션 기능 축구 경기의 승리는 수많은 변수에 의해 결정되며, 이 중에서도 '포메이션'은 경기의 결과에 큰 영향을 미칩니다. 그러나, 많은 팀들이 데이터 기반 의사결정을 통해 최적의 포메이션을 찾는 데 어려움을 겪고 있습니다. 본 글에서는 프로젝트의 시간적 제약과 기술적 난이도를 고려하여, 머신러닝 대신 기존의 경기 데이터를 활용한 경험적 분석 방법을 통해 최적의 포메이션을 찾는 과정을 소개합니다. 이 접근 방식은 고도의 데이터 분석 기법을 적용하지 않았음에도 불구하고, 사용자에게 실질적인 가치를 제공하는 현실적인 해결책을 찾는 데 성공했습니다. 경기 데이터 기반 추천 포메이션 문제 소개 프로젝트의 목표 중 하나로, 각 팀의 경기결과(승, 무, 패)와 포.. 2024. 3. 12.
축구팀 관리 프로젝트 - 데이터베이스 인덱싱으로 성능 최적화 축구팀 관리 프로젝트 - 데이터베이스 인덱싱으로 성능 최적화 프로젝트에서 데이터 조회 속도는 사용자 경험에 직접적인 영향을 미치는 중요한 요소였니다. 특히 경기장 정보를 조회할 때, 방대한 양의 데이터로 인해 검색 시간이 길어지는 문제에 직면했습니다. 이 문제를 해결하기 위해 데이터베이스 인덱싱이라는 도구를 사용하여, 검색 성능을 획기적으로 개선하는 방법을 모색했습니다. 데이터베이스 인덱싱으로 성능 최적화 문제 상황 프로젝트 배경: 경기장 정보 조회 기능 개발 문제점: 대규모 데이터로 인한 느린 조회 속도 목표: 조회 속도 개선 해결 방법 : 인덱싱을 통한 속도 개선 인덱싱을 사용하지 않았을 때의 상황 쿼리 비용: "9109.05" 인덱싱을 도입한 후의 변화 쿼리 비용: "1.05" 해결 방안의 탐색 [.. 2024. 3. 12.
축구팀 관리 프로젝트 - WebSocket 활용한 실시간 채팅 전송 과정 축구팀 관리 프로젝트 - WebSocket 활용하여 실시간 채팅 전송 과정 축구팀 관리 프로젝트에서 팀원끼리 원활한 소통이 가능하게 하도록 채팅 기능을 넣었습니다. 채팅은 WebSocket을 사용하여 실시간으로 메시지를 송수신하도록 구현했습니다. 본 글에서는 NestJS 프레임워크를 사용하여 채팅 메시지를 송수신하는 과정에서 필요한 코드의 동작 방식과 함께, 이를 구현하는 데 있어서 중요한 몇 가지 개념에 대해 상세히 설명하고자 합니다. WebSocket 활용한 실시간 채팅 전송 코드 소개 및 동작 방식 우선, 사용자로부터 메시지를 수신하고 처리하는 코드 부분을 살펴보겠습니다. @UseFilters(WsExceptionFilter) @SubscribeMessage('send_message') async .. 2024. 2. 28.
축구팀 관리 프로젝트 - 대규모 트래픽 관리 위해 스케일업, 캐싱 적용 축구팀 관리 프로젝트 - 대규모 트래픽 관리 위해 스케일업, 캐싱 적용 프로젝트를 하며 가장 큰 문제 중 하나는 '트래픽 관리'입니다. 특히 대규모 이벤트나 프로모션 기간에 서비스가 겪는 트래픽 폭주는 서버에 큰 부담을 주며, 이에 대한 대응 없이는 사용자 만족도 하락은 물론, 비즈니스에 치명적인 타격을 줄 수 있습니다. 본 글에서는 프로젝트의 대용량 트래픽에 대비한 스트레스 테스트 사례를 바탕으로, 서버의 성능 향상 및 가용성 확보를 위한 다양한 전략과 그 실행 결과를 공유하고자 합니다. 대규모 트래픽 관리 전략 트래픽 대응의 필요성과 스트레스 테스트의 중요성 예측 가능한 방향으로 프로젝트를 진행하고 있었지만 트래픽 문제는 배포 후 언제든 예고 없이 찾아올 수 있는 이슈라 판단했습니다. 이를 사전에 파.. 2024. 2. 25.
축구팀 관리 프로젝트 40일차 - 최종발표, 공부는 계속된다, 취업도 축구팀 관리 프로젝트 40일차 - 최종발표, 공부는 계속된다, 취업도 최종발표를 마치고 내일배움캠프에서의 교육과정은 끝났습니다. 내일부터는 본격적인 취업을 위한 주차로 이력서와 자기소개서를 작성하는 시간을 가질 예정입니다. 최종발표, 아쉬운 점은 많았지만 축구팀 관리 프로젝트 37일차 - 목표 테스트 커버리지 80% 중 56% 달성 축구팀 관리 프로젝트 37일차 - 목표 테스트 커버리지 80% 중 56% 달성 현재 match service 단 테스트 파일 작성중입니다. 커버리지 80%를 목표로 하고 있는 데 아직 56%까지 작업했습니다. match service 테 lemonlog.tistory.com 며칠전 테스트 커버리지 현황 전날은 프로젝트의 평균 테스트 커버리지를 최대한으로 끌어올리는 걸 마무리로.. 2024. 2. 21.
축구팀 관리 프로젝트 38일차 - soft delete된 팀 멤버가 조회되는 오류 축구팀 관리 프로젝트 38일차 - soft delete된 팀 멤버가 조회되는 오류 페이지 전반적으로 기능 테스트 중에 경기 일정에서 전술설정 들어가면 접속 안되는 오류를 발견했습니다. 페이지 접속 오류 문제 발생 원래는 화면이 나와야 하지만 빈 페이지가 나와서 당황했습니다. 바로 로컬에서 테스트해봤습니다. 테스트 해보니 아래 오류 발생하였습니다. Uncaught TypeError: Cannot read properties of null (reading 'user') at index.tsx:1146:1 at Array.map () at index.tsx:1144:1 at Array.map () at Formation (index.tsx:1142:1) at renderWithHooks (react-dom.d.. 2024. 2. 19.
축구팀 관리 프로젝트 37일차 - 목표 테스트 커버리지 80% 중 56% 달성 축구팀 관리 프로젝트 37일차 - 목표 테스트 커버리지 80% 중 56% 달성 현재 match service 단 테스트 파일 작성중입니다. 커버리지 80%를 목표로 하고 있는 데 아직 56%까지 작업했습니다. match service 테스트 코드 작성중 기본적인 경기 관련 CRUD 테스트 코드 작성은 어렵지 않게 할 수 있었는데 위 같이 이메일 인증하는 메서드를 구현하는데 많은 시간이 걸렸습니다. 경기 생성시 상대팀 구단주에게 이메일로 경기 요청을 보내는 로직을 테스트 코드로 다시 점검하기 위해 작성하려 해서 그런듯 합니다. 각 테스트 조건별로 기대값을 충족하는 지 확인하는 방식으로 코드를 작성했습니다. [JEST] 📚 테스트 커버리지 (Test Coverage) 테스트 커버리지 테스트 커버리지 (tes.. 2024. 2. 18.
축구팀 관리 프로젝트 36일차 - jwt 모의함수 구현 오류 축구팀 관리 프로젝트 36일차 - jwt 모의함수 구현 오류 테스트 코드 작성 중 발견한 jwt 모의함수 구현 오류를 어떻게 해결했는지 소개하겠습니다. jwt 모의함수 구현 오류 문제발견 문제는 아래 코드에서 시작됐습니다. jest.spyOn(jwtService, 'verify').mockResolvedValue({ id: 1 });을 사용하여 Jest에서 jwtService.verify를 모의하려고 할 때, TypeScript에서 '{ id: number; }' 형식의 인수는 'never' 형식의 매개 변수에 할당될 수 없다는 오류가 발생했습니다. 오류 원인 분석 이 오류는 TypeScript가 모의 함수에서 정확한 타입을 추론할 수 없어서 발생했습니다. mockResolvedValue는 인수로 전달된.. 2024. 2. 16.
축구팀 관리 프로젝트 34일차 - 유저테스트 시작, 취업 준비 축구팀 관리 프로젝트 34일차 - 유저테스트 시작, 취업 준비 전날 준비하던 유저테스트를 드디어 시작했습니다. 배포 전까지 나오던 오류를 하나 둘 잡고 실제로 테스트를 받기 시작하니 기분이 묘했습니다. 아직까지 많은 평은 받지 못했지만 여러 평들을 보며 칭찬과 보완할점이 슬슬 보이기 시작했습니다. 프로젝트 배포 및 유저테스트 시작 축구팀 관리 프로젝트 33일차 - 프로젝트 유저 테스트 준비 축구팀 관리 프로젝트 33일차 - 프로젝트 유저 테스트 준비 길고 긴 설 명절을 지나 다시 팀원들과 모여 프로젝트를 수정하는 오늘이었습니다. 곧 배포할 프로젝트를 위해 유저테스트용 자료 만 lemonlog.tistory.com 전날 작업한 기록입니다 전날까지 준비했던 유저테스트를 오늘에서야 실제로 배포했습니다. 배포 .. 2024. 2. 14.