학습하기

1. 부하 테스트 조건

vUser: 500
테스트시간: 120초
상세 정보

2. 테스트 결과

1회차
2회차
3회차
인프라 모니터링

3. 부하 테스트 성능 개선 주요 후보

RegularClassCDCAccordionsContainer
RegularClassDetailScreen_CustomStudyActivity
SyncStudyViewTypeHandler_GroupStudyModuleInstances
RegularClassDetailLayout
updateLastLearningHistoryForBlock
UseMe
RegularClassCSUExpansionPanelContainer

3.1. RegularClassCDCAccordionsContainer

개선 필수 쿼리
GraphQL
예시 Response
주요 내용
정규수업목록에서 호출. FE에서 깊은 뎁스로 Eager Loading 하여 데이터 조회.
FE 개선 필요
StatisticServiceImpl.findStudyModuleInstanceStatisticBySmiId
데이터 로더 연동 필요 (마이너 개선)
innerJoinAndSelect('smis.studyModuleInstance', 'smi') 필요한지 체크 필요

3.2. SyncStudyViewTypeHandler_GroupStudyModuleInstances

개선 권장 쿼리
수업동기화 납치에 사용
GraphQL
예시 Response
주요 내용
CustomCurriculumsServiceImpl.findCustomCurriculumsByGroupId
Group → customCurriculums 리졸브 필드
데이터 로더 연동 필요
CustomCurriculumsServiceImpl.findManyStudyModuleInstancesByStudyModuleInstanceCriteria
CSM → SMIs 리졸브 필드
데이터 로더 연동 필요
FE
정규 수업 목록 에서 호출중. 어떠한 용도로 사용중인지 확인 필요
SMIs 레벨까지 eager 하게 조회 필요한지?
groupId 하나를 찾기 위해 쿼리를 사용하는 것으로 보이는데 GraphQL 최적화 방식 논의 필요

3.3. RegularClassDetailScreen_CustomStudyActivity

개선 권장 쿼리
GraphQL
주요 내용
CustomCurriculumsServiceImpl.findCustomStudyUnitByCustomStudyActivityId
CA → CSU 리졸브 필드
데이터 로더 없음
CustomCurriculumsServiceImpl.findManyStudyUnitInstancesByStudyUnitInstanceCriteria
CSU → SUIs 리졸브 필드
데이터 로더 없음
FE 용도 확인 필요

3.4. RegularClassCSUExpansionPanelContainer

개선 권장 쿼리
좌측 사이드 바 수업 목록 조회 시 호출
GraphQL
예시 Response
주요 내용
LoadLearningActivitiesByStudyUnitInstanceIdUseCase
SUI → LAs 리졸브 필드
FE
LA 까지 Eager 조회 필요한지?

3.5. RegularClassDetailLayout

GraphQL
주요 내용
LoadLearningActivitiesByStudyUnitInstanceIdUseCase
SUI → LAs 리졸브 필드
FE
쿼리 뎁스가 깊음. eager 조회 확인 필요

3.6. updateLastLearningHistoryForBlock

GraphQL
주요 내용
FE 쿼리 방식 논의 필요
LA → SUI 바로 조회 불가능한지?
CustomCurriculumsServiceImpl.findManyStudyUnitInstancesByStudyUnitInstanceCriteria
CSU → SUIs 리졸브 필드
LoadCustomActivityByLearningActivityIdUseCase
LA → CA 리졸브 필드

4. Slow Query

4.1. CSM(RSM) 목록 조회

개선 필수 쿼리
# Query_time: 7.304144 Lock_time: 0.000006 Rows_sent: 734 Rows_examined: 1709
연관 API
FE에서 CC - CA까지의 모든 데이터를 조회하여 수업 목록 이동을 판단중
CustomCurriculumTeachingSidebar
CC → CSMs
ReplicaStudyModulesRepositoryImpl@findCustomStudyModulesByCustomCurriculumIdAndFilters
쿼리 플랜
쿼리

4.2. CCC 조회

# Query_time: 8.740880 Lock_time: 0.000002 Rows_sent: 1 Rows_examined: 55
연관 API
CustomCurriculumsRepositoryImpl@findManyMainByGroupId
쿼리 플랜
쿼리

4.3. SAI id / type 조회

# Query_time: 7.090671 Lock_time: 0.000002 Rows_sent: 13 Rows_examined: 276
연관 API
CSM → firstIntegratedActivity
학습하기 최초 진입 시, 첫번째 학습 위치로 이동할 때 사용
StudyActivityInstancesRepository@findFirstStudyActivityInstanceIdByCustomStudyModuleId
쿼리 플랜
쿼리

4.4. app session log 생성

# Query_time: 15.104511 Lock_time: 0.000002 Rows_sent: 0 Rows_examined: 0
연관 API
POST /app-session
AppSessionsController
Query