
안녕하세요, mujik-tigers입니다.
수강 신청 프로젝트를 시작하고 약 6주가 지난 지금까지의 진행 상황을 점검해 보려고 합니다.
현재 목표로 했던 모든 API를 완성했고 Vue를 사용하여 API 연동까지 끝마쳤습니다.
수강 신청 API 서버에서 제공하는 기능들은 다음과 같습니다.
자세한 API 문서는 링크를 확인해 주세요.
API의 평균 응답 속도를 측정하기 위해 K6를 사용하여 테스트를 진행했습니다.
학년별로 수강 신청을 진행함을 고려하여 1,000명의 가상 사용자를 설정하였습니다.
DB에 저장한 데이터의 수는 다음과 같습니다.
학생 : 5,000 (학년 당 1,000명, 4학년은 2,000명)
학과 : 54
교수 : 600
과목 : 3,000
강의 : 10,000
API의 평균 latency 결과입니다. (AWS t2 micro ubuntu server)
| API | latency | note |
|---|---|---|
| 현재 학기 및 년도 조회 | 93.56ms | |
| 현재 서버 시간 조회 | 82.33ms | |
| 남은 세션 시간 조회 | 41.96ms | |
| 강의 목록 조회 | 5.14s | |
| 수강 신청 인원 조회 | 3s | |
| 수강 바구니 신청 인원 조회 | 1s | |
| 수강 바구니 목록 조회 | 5s | |
| 수강 바구니 신청 | 1s | |
| 수강 바구니 삭제 | 1s | |
| 수강 신청 기간 조회 | 1.36s | |
| 남은 세션 시간 연장 | 1s | |
| 로그인 | 39.48s | 36.9% 의 응답은 time-out |
| 학생 정보 조회 | 741.44ms | |
| 학과 조회 | 1.39s | |
| 수강 신청 | 5.99s | 5.37% 의 응답은 time-out |
| 강의 번호를 입력하는 빠른 수강 신청 | 9.53s | 7.65% 의 응답은 time-out |
| 수강 신청 내역 조회 | 1.07s |
MySql을 방문하는 대부분의 API는 매우 느린 응답 속도를 보였고 일부는 모든 요청을 처리하지 못하고 연결이 끊어지기도 했습니다.
수강 신청 인원 수를 통한 수강 신청 가능 여부 검증 단계에서는 Race condition 문제가 발생하여 강의의 정원을 초과하여 신청된 경우도 있었습니다.
앞으로 약 한 달동안 기능을 구현하면서 생긴 궁금증과 아쉬운 점들 중
몇 가지를 집중적으로 개선하고 과정을 블로그에 기록할 예정입니다.