[척척학사] 복수전공생도 쓸 수 있게 만들기

박상민·2025년 6월 4일
0

척척학사

목록 보기
10/15
post-thumbnail

척척학사, 복수전공생도 쓸 수 있게 만들기

복수전공생도 척척학사를 활용할 수 있도록, 졸업요건 계산 로직을 개선한 과정을 소개합니다.


서론: 현재의 한계

척척학사는 단일 전공자를 기준으로 설계되어 있어, 복수전공생의 졸업요건을 정확히 반영하지 못하는 문제가 있습니다.
특히 다음과 같은 사용자 케이스에서 서비스 이용에 제약이 발생합니다:

  • 복수전공 학점 미반영
  • 편입생의 학점 이월 및 전공 정보 누락
  • 엇복학 등의 비정규 학기 이력 미처리

즉, 하나의 전공만을 정상적으로 수강 중인 학생이 아닌 경우, 척척학사의 졸업 진단 기능이 충분히 작동하지 않습니다.


문제 정의: 복수전공생의 졸업요건

수원대학교 기준, 복수전공자의 졸업요건은 다음과 같습니다:

  • 총 130학점 이상 이수
  • 1전공: 전공필수 / 전공선택 / 기초교양
  • 2전공: 전공필수 / 전공선택 / 기초교양
  • 일반선택: 잔여 학점을 채움
  • 6개 영역 분포 요건: 동일하게 적용

⚠️ 복수전공의 일부 과목은 일반선택 영역에 포함될 수 있음 → 추가 확인 필요


목표: 복수전공생도 졸업요건 확인 가능하게 만들기

✅ 핵심 과제

  • 복수전공 여부 판단: Student.secondaryMajor != null
  • 전공별 영역 구분 및 계산
  • 기존 졸업요건 계산 로직 분기 처리
  • 학사 정보 크롤링 시 복수전공 학점도 함께 매핑

💡 복수전공 크롤링 처리 방법

복수전공이 있는 경우,

  • 1전공: 전공필수, 기초교양, 교양은 그대로 사용
  • 1전공의 전공선택은 제외
  • 복수전공 데이터의 전공필수 / 전공선택 / 기초교양을 함께 활용하여 누락 없는 계산 수행

해결 전략

1. DB 구조 확장

  • Student 엔티티에 secondaryMajor 필드 추가
  • 기존 Course, GraduationRequirement 구조는 유지

2. 졸업요건 계산 로직 분기

졸업 계산 로직은 아래 두 가지 방식 중 하나로 확장 가능합니다:


로직 1: 쿼리 재사용 + Java 병합 방식

  1. 전공1 ID = student.getMajor().getId()
  2. 전공2 ID = student.getSecondaryMajor().getId()
  3. getStudentAreaProgress(studentId, 전공1) 실행 → major1List
  4. getStudentAreaProgress(studentId, 전공2) 실행 → major2List
  5. major1List에서 전공선택 제거
  6. major2List에서 전공기초 / 전공필수 / 전공선택만 필터링
  7. 각 DTO에 majorType = "MAJOR1" / "MAJOR2" 설정
  8. 두 리스트 병합
  9. 전체 이수 학점이 130 미만이면 일반선택 영역 추가
  10. GraduationProgressResponse로 리턴

✅ 장점: 기존 쿼리 재사용 가능
⚠️ 단점: Java 내 병합 로직 복잡도 증가


로직 2: 전공별 쿼리 분리 + SQL 필터링 방식

  1. getStudentAreaProgress(studentId, 전공1) 실행
    • 전공선택 제외된 쿼리 작성
  2. getSecondMajorProgress(studentId, 전공2) 실행
    • 전공기초 / 전공필수 / 전공선택만 포함하도록 SQL 작성
  3. 각각 List<AreaProgressDto>로 반환
  4. 병합 (추가 필터링 불필요)
  5. 130학점 미만일 경우 일반선택 영역 추가
  6. GraduationProgressResponse로 리턴

✅ 장점: 로직이 단순하고 깔끔함
⚠️ 단점: 복수전공이 없는 경우 코드 재사용성이 떨어질 수 있음

🔎 참고:
로직2는 복수전공 전용 쿼리를 따로 작성하므로, 일반 전공자와의 분기가 커져 전체 구조 일관성이 떨어질 수 있음.
→ 로직1이 구조적으로 더 유리하다고 판단함.


추가 고려사항

  • AreaProgressDtomajorType 필드 추가
  • GraduationProgressResponse 확장 (전공별 영역 구분)
  • UI: 전공1 / 전공2 시각적 구분 표시
  • 복수전공 영역 데이터의 중복 / 누락 방지 위한 쿼리 검증 필요
  • 향후 편입생, 엇복학 등의 특수 이력도 지원 가능하도록 설계 확장 예정

결론

이번 개선 작업을 통해 척척학사는
단일 전공자뿐 아니라 복수전공생에게도 정확한 졸업 진단 기능을 제공할 수 있게 됩니다.
앞으로는 편입, 복학, 다전공 등 다양한 학사 케이스를 아우를 수 있는
확장 가능한 졸업요건 계산 시스템으로 발전해 나갈 예정입니다.

0개의 댓글