[my-klas] 애플리케이션 개발

woodyn·2021년 4월 28일
0

애플리케이션 기능 설명

간단하게 필요한 기능만 구현했다. REST 구조를 기반으로 한다.

  • POST /students
    • 학생을 생성한다.
    • 학생 정보는 학번밖에 없다.
  • POST /lectures
    • 강의를 생성한다.
    • 다양한 제약조건을 위해 여러 강의 정보가 존재한다(e.g. 개설 학기, 난이도, 교양 영역, 학점, 정원).
  • POST /students/{studentId}/register
    • 학생이 강의에 수강신청한다.
    • 이때, 미리 정의된 여러 제약 조건을 검사하여 수강 조건을 확인한다:
      • 학기당 최대 학점 제한 (19학점 이하 수강 가능)
      • 동일 난이도 교양 과목은 한 학기에 중복 수강 불가
      • 동일 과목은 한 학기에 중복 수강 불가 (같은 과목(subject)이 다른 시간대의 강의(lecture)들로 나눠진 경우)
      • 과거에 동일 과목을 C+ 이하 평점으로 이수한 경우 재수강 최대 1회 가능
      • 잘못된 시간표 구성 불가 (시간대가 겹치도록 수강할 수 없음)
  • 그 외에 시뮬레이션에 필요한 API들..

애플리케이션 구현 방식

Spring Boot + JPA + MySQL로 구성했다.

  • 전편에서 서술했듯, 실제 운영 환경처럼 유지보수를 어느 정도 고려해야 하는 상황을 만들고 싶었다.
  • 가장 기본적이고 범용적인 기술 스택 중 하나라고 생각했다.

최소한의 테스트만 작성했다.

  • 아무리 유지보수를 신경쓴다고 해도 테스트 코드까지 열심히 짤 필요는 없는 것 같다. (유지보수를 고려하는 것은 어디까지나 런타임 성능에 제한을 주고 싶기 때문이다)
  • 내가 내 코드를 의심할 수 있는 부분(제약 조건 검사)에서만 단위 테스트를 작성했다.
  • 전반적인 기능 검사를 위한 통합 테스트도 간단히 작성했다.

Kotlin으로 작성했다.

  • 생산성에 중점을 두고자 선택한 방향인데, 실제로 테스트 코드를 작성할 때 엄청 편했다.
  • 생각보다 Spring이 Kotlin 지원을 잘 해주고 있어서 큰 어려움은 없었다. 프록시 관련 문제도 플러그인만 넣으면 크게 걱정할 거 없었다.

기본적인 소스 코드 구조(계층)는 이전 프로젝트와 동일하게 했다.

  • 의사결정을 내리는 데에 시간을 뺏기고 싶지 않았다. (이미 다 했던 것들이다)
profile
🦈

0개의 댓글