Course Management API

수강 관리

개요

온라인 강의 플랫폼을 위한 수강 관리 API를 설계하세요. 사용자는 강의를 수강할 수 있으며, 강의에는 여러 개의 강의 영상이 포함됩니다. 수강을 완료한 강의는 완료 상태로 변경할 수 있으며, 사용자는 수강한 강의를 조회할 수 있습니다.

요구사항

  • 강의 등록: 관리자가 새로운 강의를 등록할 수 있어야 합니다.

  • 강의 영상 등록: 등록된 강의에 여러 개의 강의 영상을 추가할 수 있어야 합니다.

  • 강의 목록 조회: 사용자는 수강 가능한 강의 목록을 조회할 수 있어야 합니다.

  • 강의 수강 신청: 사용자는 특정 강의를 수강 신청할 수 있어야 합니다.

  • 수강 중인 강의 목록 조회: 사용자는 자신이 수강 중인 강의 목록을 조회할 수 있어야 합니다.

  • 수강 완료 처리: 사용자는 자신이 수강한 강의를 완료 상태로 변경할 수 있어야 합니다.

  • 완료한 강의 목록 조회: 사용자는 자신이 완료한 강의 목록을 조회할 수 있어야 합니다.

1. 엔드포인트 설계

  • 강의 등록(POST) - /courses

  • 강의 영상 등록(POST) - /courses/{courseId}/videos

  • 강의 목록 조회(GET) - /courses

  • 강의 수강 신청(POST) - /courses/{courseId}/subscriptions

  • 수강 중인 강의 목록 조회(GET) - /users/{userId}courses

  • 수강 완료 처리(PATCH) - /users/{userId}/courses/{courseId}/status

  • 완료한 강의 목록 조회(GET) - /user/{userId}courses?status=completed

2. 요청/응답 구조 설계

  • 강의 등록

  • 강의 영상 등록(POST) - /courses/{courseId}/clips

  • 강의 목록 조회(GET) - /courses

  • 강의 수강 신청(POST) - users/{userId}/courses/{courseId}/subscriptions

  • 수강 중인 강의 목록 조회(GET) - /users/{userId}/courses

  • 수강 완료 처리(PATCH) - /users/{userId}/courses/{courseId}/status

  • 완료한 강의 목록 조회(GET) - /user/{userId}courses?status=completed

3. DB 모델링

  • user

    • id. BIGINT, PK. 유저 id

    • role. VARCHAR. 역할 (user, lecturer)

  • user_courses

    • id. BIGINT, PK. 유저-강의 id

    • user_id. BIGINT, FK. 유저 id

    • course_id. BIGINT, FK. 강의 id

    • status. VARCHAT(255). 상태

    • created_at. DATETIME. 생성일

    • modified_at. DATETIME. 수정일

  • courses

    • id. BIGINT, PK. 강의 id

    • user_id. BIGINT, FK. 유저 id

    • course_name. VARCHAR(255). 강의 이름

4. 아키텍처 고려

  • GET /courses는 자주 조회되는 API이므로 Redis 캐싱을 고려해야 함.

  • 강사 정보도 자주 조회된다면 캐싱 필요.

캐싱 적용 가능 부분

  1. 강의 목록 캐싱 (GET /courses)

  2. 강사 정보 캐싱 (GET /users/{userId})

  3. 사용자 수강 강의 캐싱 (GET /users/{userId}/courses)

Last updated