복수전공생도 척척학사를 활용할 수 있도록, 졸업요건 계산 로직을 개선한 과정을 소개합니다.
척척학사는 단일 전공자를 기준으로 설계되어 있어, 복수전공생의 졸업요건을 정확히 반영하지 못하는 문제가 있습니다.
특히 다음과 같은 사용자 케이스에서 서비스 이용에 제약이 발생합니다:
즉, 하나의 전공만을 정상적으로 수강 중인 학생이 아닌 경우, 척척학사의 졸업 진단 기능이 충분히 작동하지 않습니다.
수원대학교 기준, 복수전공자의 졸업요건은 다음과 같습니다:
⚠️ 복수전공의 일부 과목은 일반선택 영역에 포함될 수 있음 → 추가 확인 필요
Student.secondaryMajor != null
💡 복수전공 크롤링 처리 방법
복수전공이 있는 경우,
- 1전공: 전공필수, 기초교양, 교양은 그대로 사용
- 1전공의 전공선택은 제외
- 복수전공 데이터의 전공필수 / 전공선택 / 기초교양을 함께 활용하여 누락 없는 계산 수행
Student
엔티티에 secondaryMajor
필드 추가Course
, GraduationRequirement
구조는 유지졸업 계산 로직은 아래 두 가지 방식 중 하나로 확장 가능합니다:
student.getMajor().getId()
student.getSecondaryMajor().getId()
getStudentAreaProgress(studentId, 전공1)
실행 → major1List
getStudentAreaProgress(studentId, 전공2)
실행 → major2List
major1List
에서 전공선택 제거major2List
에서 전공기초 / 전공필수 / 전공선택만 필터링majorType = "MAJOR1"
/ "MAJOR2"
설정GraduationProgressResponse
로 리턴✅ 장점: 기존 쿼리 재사용 가능
⚠️ 단점: Java 내 병합 로직 복잡도 증가
getStudentAreaProgress(studentId, 전공1)
실행 getSecondMajorProgress(studentId, 전공2)
실행 List<AreaProgressDto>
로 반환 GraduationProgressResponse
로 리턴✅ 장점: 로직이 단순하고 깔끔함
⚠️ 단점: 복수전공이 없는 경우 코드 재사용성이 떨어질 수 있음
🔎 참고:
로직2는 복수전공 전용 쿼리를 따로 작성하므로, 일반 전공자와의 분기가 커져 전체 구조 일관성이 떨어질 수 있음.
→ 로직1이 구조적으로 더 유리하다고 판단함.
AreaProgressDto
에 majorType
필드 추가GraduationProgressResponse
확장 (전공별 영역 구분)이번 개선 작업을 통해 척척학사는
단일 전공자뿐 아니라 복수전공생에게도 정확한 졸업 진단 기능을 제공할 수 있게 됩니다.
앞으로는 편입, 복학, 다전공 등 다양한 학사 케이스를 아우를 수 있는
확장 가능한 졸업요건 계산 시스템으로 발전해 나갈 예정입니다.