Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

관심과목 조회 API 속도를 개선한다. #41

Open
3Juhwan opened this issue Feb 5, 2025 · 0 comments
Open

관심과목 조회 API 속도를 개선한다. #41

3Juhwan opened this issue Feb 5, 2025 · 0 comments
Assignees
Labels
버그 버그를 찾았어요.

Comments

@3Juhwan
Copy link
Member

3Juhwan commented Feb 5, 2025

문제 상황

GET /api/baskets API 응답 속도가 40s 입니다. 사용자는 페이지에 접속해서 40초 후에 데이터를 확인할 수 있습니다.

Image

문제 원인

위 API는 관심 과목 담기 데이터를 모두 응답합니다. 관심 과목 담기 데이터는 2422개이고 총 512kb입니다.
전체 데이터를 응답으로 내리는 작업 자체가 큰 오버헤드로 작용합니다.

예상되는 원인은 아래와 같습니다.

  1. MySQL 풀스캔 시간이 길다.
  2. DB에서 조회한 데이터를 서버 메모리에 적재하고 처리하는 과정이 오래 걸린다.
  3. 데이터가 너무 커서 네트워크 시간이 오래 걸린다.

모니터링과 테스트를 통해 어떤 지점에서 병목이 발생하는지, 근본적으로 API를 수정하는 게 좋을지 분석이 필요해요.

해결 방안

  1. API 응답 결과는 json 형태인데, json 파일을 통째로 cdn에 보관하고 응답하는 방법이 있어요. 요청이 서버를 거치지 않기 때문에 서버에 부하를 덜 수 있다. 이렇게 해도 응답 크기 자체가 줄어들지 않기 때문에 네트워크 병목은 해결할 수 없어요. 이는 gzip 압축으로 해결할 수도 있어요.
  2. 페이지네이션을 적용하는 거예요. 응답 크기 자체가 줄기 때문에 속도가 개선될 거예요. 다만, 이는 여러 추가 작업이 필요할 수 있는데요. 현재 구조는 클라이언트가 모든 데이터를 갖고 있지만, 페이지네이션을 적용하면 클라이언트가 필요한 데이터가 추가될 수 있기 때문이에요. 서버 측에서도 페이지네이션으로 인한 성능 저하에 유의해야 해요.
@3Juhwan 3Juhwan added the 개선 프로덕트에 개선이 필요해요. label Feb 5, 2025
@3Juhwan 3Juhwan added 버그 버그를 찾았어요. and removed 개선 프로덕트에 개선이 필요해요. labels Feb 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
버그 버그를 찾았어요.
Projects
None yet
Development

When branches are created from issues, their pull requests are automatically linked.

2 participants