Skip to content

hyun-1210/seminar-2025-springboot-assignment-2

 
 

Repository files navigation

Seminar-2025-springboot-assignment

이번 한 학기 동안 에브리타임 클론코딩을 주제로 과제를 진행합니다.

2차시 과제에서는 지금까지 배운 내용을 토대로, 조별로 수강신청 사이트의 실제 강의 정보를 받아와 사용자의 시간표를 관리하는 기능을 구현해 봅니다.

시작하기

0차시 과제에서와 같이 앞으로도 데이터베이스로 MySQL을 사용합니다. 로컬 서버를 띄우기 전 docker compose up -d 로 MySQL을 띄워주세요.

2차시 조별과제 - 시간표 기능 만들기

이번 과제에서는 조별로 협업하여 하나의 결과물을 제출합니다. 이 repo를 각 조가 공개 저장소로 fork한 다음, 설정에서 조원들에게 필요한 권한을 부여한 후 작업을 진행해주세요.
Github classroom을 사용한 자동 채점 기능을 사용하지 않으며, 스펙에 맞는 테스트를 직접 작성하셔야 합니다.
코드를 직접 확인하여 평가 후, 가장 완성도가 높은 조의 과제를 기반으로 모범답안을 제공할 예정입니다.

시간표 관리 기능

  • 시간표 생성:

    • 사용자는 특정 연도와 학기(봄학기, 여름학기, 가을학기, 겨울학기)를 지정하여 새로운 시간표를 생성할 수 있어야 합니다.
    • 시간표 생성 시, 사용자가 식별할 수 있는 이름을 함께 지정할 수 있어야 합니다.
  • 시간표 목록 조회:

    • 사용자는 자신이 생성한 모든 시간표의 목록을 조회할 수 있어야 합니다.
    • 목록에는 각 시간표의 이름, 연도, 학기 정보가 포함되어야 합니다.
  • 시간표 상세 조회:

    • 특정 시간표를 선택했을 때, 해당 시간표의 기본 정보(이름, 연도, 학기)와 포함된 모든 강의의 상세 정보를 함께 조회할 수 있어야 합니다.
    • 강의의 상세 정보는 교과구분, 개설대학, 개설학과, 이수과정, 학년, 교과목번호, 강좌번호, 교과목명 (부제명 포함), 학점 수, 수업교시, 강의실, 담당교수를 포함해야 합니다.
    • 추가적으로, 해당 시간표에 포함된 강의들의 총 학점을 계산하여 함께 제공해야 합니다.
  • 시간표 수정 및 삭제:

    • 사용자는 자신이 생성한 시간표의 이름을 수정할 수 있어야 합니다.
    • 사용자는 자신이 생성한 시간표를 완전히 삭제할 수 있어야 합니다. 시간표가 삭제되면 관련된 모든 정보(추가했던 강의 내역 등)도 함께 삭제되어야 합니다.
  • 서울대 수강신청 사이트에서 강의 정보 가져오기

    • WebClient를 통해 서울대 수강신청 사이트(sugang.snu.ac.kr)의 강의 목록을 가져와 DB에 저장하는 API가 있어야 합니다. (2025년 2학기에 대해서는 필수, 다른 학기까지 구현하는건 선택)
    • 수강신청 사이트에서 강의 전체 정보를 xls 파일로 다운받을 수 있습니다. 파일을 다운받아 파싱하는 과정은 SNUTT의 batch 코드(SugangSnuFetchService)를 참고해 주세요.

강의 탐색 및 시간표 연동 기능

  • 강의 검색:

    • 사용자는 특정 연도와 학기에 개설된 강의를 검색할 수 있어야 합니다.
    • 검색은 키워드가 강의명 또는 교수명 안에 포함되는 모든 강의 목록을 반환하도록 하고, 페이지네이션이 적용된 하나의 엔드포인트에서 수행되어야 합니다.
  • 시간표에 강의 추가:

    • 검색된 강의를 사용자가 선택한 특정 시간표에 추가할 수 있어야 합니다.
    • 시간 중복 검증: 강의를 추가할 때, 추가하려는 강의의 시간이 해당 시간표에 이미 존재하는 다른 강의와 시간이 겹치는지 검증해야 합니다. 만약 시간이 겹친다면, 에러를 발생시켜 강의가 추가되지 않도록 막아야 합니다.
  • 시간표에서 강의 삭제:

    • 시간표에 이미 추가된 강의를 다시 제거할 수 있어야 합니다.

API 문서화

  • 모든 API에 대해 swagger를 통해 HTTP 메서드, 요청(body 및 query parameter) 형식과 응답 (response body) 형식을 조회할 수 있어야 합니다.
  • 과제 평가 시 swagger를 먼저 확인하니 잘 써주세요!

테스트 작성

  • 위에 설명한 모든 스펙을 잘 구현했는지 검증하는 내용의 테스트를 기존에 있는 테스트를 참고하여 작성해주세요.
  • 테스트 함수 이름들은 제공됩니다.
  • 테스트 데이터는 실제 강의 정보를 필요한 대로 임의로 넣어주세요.
  • 위의 스펙으로 정의되지 않은 엣지 케이스는 직접 정의하여 구현하고 테스트로 추가 또는 수정해주세요.
    • 판단 기준이 잘 서지 않는다면 세미나장을 태그해주시면 함께 고민해드립니다.
  • 과제 평가 시 테스트를 먼저 확인하니 잘 써주세요!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 100.0%